场地类型管理、场地管理、课包类型管理、教练管理、教练类型管理、福利视频分类管理、体测预约
89个文件已修改
5个文件已删除
95个文件已添加
15273 ■■■■ 已修改文件
.idea/compiler.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/encodings.xml 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/misc.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/modules.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/vcs.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/workspace.xml 733 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/mb-cloud-account.iml 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/pom.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/controller/CityManagerController.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/controller/CoachController.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/controller/CoachTypeController.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/entity/Coach.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/mapper/CoachMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/model/query/coachQuery/CoachQuery.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/model/vo/CoachChangeStateVO.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/model/vo/CoachSerchVO.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/CoachService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/ICityManagerService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/impl/CityManagerServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/impl/CoachServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/resources/mapper/CoachMapper.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/mb-cloud-activity.iml 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/pom.xml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/controller/BenefitVideoController.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/controller/BodySideAppointmentsController.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideoClassification.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideos.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/entity/BodySideAppointment.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/other/StoreClient.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideoClassificationMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideosMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/mapper/BodySideAppointmentMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/model/BenefitsVedioChangeStateVO.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/model/QueryBenefitsVedioVO.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/model/QueryBodySideAppointment.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/model/QueryBodySideAppointmentVO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/model/TQueryBenefitsVO.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/service/BenefitsVideosService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/service/BodySideAppointmentService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/service/IBenefitsVideoClassificationService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideoClassificationServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideosServiceImpl.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BodySideAppointmentServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/resources/mapper/BenefitsVideoClassificationMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/resources/mapper/BenefitsVideosMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/resources/mapper/BodySideAppointmentsMapper.xml 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-auth/mb-cloud-auth.iml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/pom.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/mb-cloud-course.iml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/pom.xml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageTypeController.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/mapper/TCourseMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/dto/CourseChangeStateDTO.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/dto/TQueryBenefitsVideosDTO.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/vo/CoursePackageTypeVO.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/vo/TQueryBenefitsVideosVO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/TCourseService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCourseServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/resources/mapper/TCourseMapper.xml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-gateway/pom.xml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/pom.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/CityManagerClient.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/CoachClient.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/CoachTypeClient.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/StoreStaffClient.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/Coach.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/CoachSerchVO.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/CoachType.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/TStoreStaff.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/BenefitsVideoClient.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/BodySideAppointmentClient.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/BenefitsVedioChangeStateVO.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/BenefitsVideoClassification.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/BenefitsVideos.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/BodySideAppointment.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/QueryBenefitsVedioVO.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/QueryBodySideAppointment.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/QueryBodySideAppointmentVO.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseClient.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageTypeClient.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CourseChangeStateDTO.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackageTypeVO.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/SiteClient.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/SiteLockClient.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/StoreClient.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/Site.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/SiteAddDTO.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/SiteChangeStateVO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/TSiteDTO.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/TSiteLockDTO.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/CoachController.java 243 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/CoachTypeController.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/QuestionController.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TBodySideAppointmentsController.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCityController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageTypeController.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java 727 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TWelfareVideoController.java 221 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/LoginController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/util/UploadUtil.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/enums/RuleStatusEnum.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CoachChangeStateVO.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CoachQuery.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/ExpireSiteSearchVO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SiteSearchVO.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/Store.java 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TQueryBenefitsVO.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TQueryBenefitsVideosDTO.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TQueryBenefitsVideosVO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TSite.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/common/_right.html 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefits.html 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefitsVideos.html 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefitsVideos_add.html 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefitsVideos_edit.html 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefitsVideos_info.html 233 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefits_add.html 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefits_edit.html 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/bodySideAppointment/TBodySideAppointment.html 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/bodySideAppointment/TBodySideAppointment_add.html 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/bodySideAppointment/TBodySideAppointment_edit.html 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackageType/CoursePackageType.html 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoach/TCoach.html 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoach/TCoach_add.html 233 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoach/TCoach_edit.html 227 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoachType/TCoachType.html 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCouponAdd.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionAdd.html 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionEdit.html 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionInfo.html 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TShop_add.html 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TShop_edit.html 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TShop_img.html 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TShop_imgAll.html 253 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite.html 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_add.html 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_edit.html 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_lock.html 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/js/common/ajax-object.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/js/common/web-upload-file.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/benefits/TBenefits.js 340 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/benefits/tBenefitsVideos.js 361 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/benefits/tBenefitsVideos_add.js 393 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/benefits/tBenefitsVideos_edit.js 350 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/bodySideAppointment/tBodySideAppointment.js 426 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/bodySideAppointment/tBodySideAppointment_edit.js 350 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/coursePackageType/coursePackageType.js 318 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tCoach/tCoach.js 527 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tCoach/tCoach_add.js 471 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tCoach/tCoach_info.js 393 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tCoachType/tCoachType.js 297 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tQuestion/TQuestion.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tSite/electricFence.js 327 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js 614 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tSite/tSiteLock.js 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js 701 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/pom.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/controller/SiteLockController.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/entity/Site.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/entity/SiteLock.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/entity/TSite.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/feignclient/account/CityManagerClient.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/feignclient/account/model/CityManager.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/feignclient/model/SiteAddDTO.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/feignclient/model/SiteChangeStateVO.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/mapper/SiteLockMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/mapper/SiteMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/mapper/StoreMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/model/dto/siteDto/TSiteDTO.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/model/dto/siteDto/TSiteLockDTO.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/model/vo/siteVo/ExpireSiteSearchVO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/model/vo/siteVo/SiteSearchVO.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/ISiteLockService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/ISiteService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/ISiteTypeService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/StoreService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteLockServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteTypeServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/impl/StoreServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/resources/mapper/SiteLockMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/resources/mapper/SiteMapper.xml 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/resources/mapper/StoreMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/compiler.xml
@@ -8,10 +8,11 @@
        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
        <outputRelativeToContentRoot value="true" />
        <module name="mb-cloud-account" />
        <module name="mb-cloud-gateway" />
        <module name="mb-cloud-course" />
        <module name="mb-cloud-management" />
        <module name="mb-cloud-competition (1)" />
        <module name="mb-cloud-activity" />
        <module name="mb-cloud-other" />
        <module name="mb-cloud-competition" />
        <module name="mb-cloud-auth" />
      </profile>
@@ -21,9 +22,10 @@
      <module name="mb-cloud-activity" target="1.8" />
      <module name="mb-cloud-auth" target="1.8" />
      <module name="mb-cloud-competition" target="1.8" />
      <module name="mb-cloud-competition (1)" target="1.8" />
      <module name="mb-cloud-course" target="1.8" />
      <module name="mb-cloud-gateway" target="1.8" />
      <module name="mb-cloud-management" target="1.8" />
      <module name="mb-cloud-other" target="1.8" />
      <module name="mb-cloud-parent" target="1.8" />
    </bytecodeTargetLevel>
  </component>
.idea/encodings.xml
@@ -2,22 +2,13 @@
<project version="4">
  <component name="Encoding">
    <file url="file://$PROJECT_DIR$/cloud-server-account" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/cloud-server-account/src/main/java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/cloud-server-account/src/main/resources" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/cloud-server-activity" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/cloud-server-activity/src/main/java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/cloud-server-activity/src/main/resources" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/cloud-server-auth" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/cloud-server-auth/src/main/java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/cloud-server-auth/src/main/resources" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/cloud-server-competition" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/cloud-server-competition/src/main/java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/cloud-server-competition/src/main/resources" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/cloud-server-course" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/cloud-server-course/src/main/java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/cloud-server-course/src/main/resources" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/cloud-server-gateway" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/cloud-server-management" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/cloud-server-management/src/main/java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/cloud-server-other" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/cloud-server-parent" charset="UTF-8" />
  </component>
</project>
.idea/misc.xml
@@ -6,13 +6,15 @@
  <component name="MavenProjectsManager">
    <option name="originalFiles">
      <list>
        <option value="$PROJECT_DIR$/cloud-server-account/pom.xml" />
        <option value="$PROJECT_DIR$/cloud-server-parent/pom.xml" />
        <option value="$PROJECT_DIR$/cloud-server-other/pom.xml" />
        <option value="$PROJECT_DIR$/cloud-server-management/pom.xml" />
        <option value="$PROJECT_DIR$/cloud-server-gateway/pom.xml" />
        <option value="$PROJECT_DIR$/cloud-server-course/pom.xml" />
        <option value="$PROJECT_DIR$/cloud-server-competition/pom.xml" />
        <option value="$PROJECT_DIR$/cloud-server-auth/pom.xml" />
        <option value="$PROJECT_DIR$/cloud-server-activity/pom.xml" />
        <option value="$PROJECT_DIR$/cloud-server-competition/pom.xml" />
        <option value="$PROJECT_DIR$/cloud-server-course/pom.xml" />
        <option value="$PROJECT_DIR$/cloud-server-account/pom.xml" />
      </list>
    </option>
  </component>
.idea/modules.xml
@@ -8,7 +8,9 @@
      <module fileurl="file://$PROJECT_DIR$/cloud-server-auth/mb-cloud-auth.iml" filepath="$PROJECT_DIR$/cloud-server-auth/mb-cloud-auth.iml" />
      <module fileurl="file://$PROJECT_DIR$/cloud-server-competition/mb-cloud-competition.iml" filepath="$PROJECT_DIR$/cloud-server-competition/mb-cloud-competition.iml" />
      <module fileurl="file://$PROJECT_DIR$/cloud-server-course/mb-cloud-course.iml" filepath="$PROJECT_DIR$/cloud-server-course/mb-cloud-course.iml" />
      <module fileurl="file://$PROJECT_DIR$/cloud-server-gateway/mb-cloud-gateway.iml" filepath="$PROJECT_DIR$/cloud-server-gateway/mb-cloud-gateway.iml" />
      <module fileurl="file://$PROJECT_DIR$/cloud-server-management/mb-cloud-management.iml" filepath="$PROJECT_DIR$/cloud-server-management/mb-cloud-management.iml" />
      <module fileurl="file://$PROJECT_DIR$/cloud-server-other/mb-cloud-other.iml" filepath="$PROJECT_DIR$/cloud-server-other/mb-cloud-other.iml" />
      <module fileurl="file://$PROJECT_DIR$/cloud-server-parent/mb-cloud-parent.iml" filepath="$PROJECT_DIR$/cloud-server-parent/mb-cloud-parent.iml" />
    </modules>
  </component>
.idea/vcs.xml
@@ -2,6 +2,5 @@
<project version="4">
  <component name="VcsDirectoryMappings">
    <mapping directory="" vcs="Git" />
    <mapping directory="$PROJECT_DIR$/cloud-server-parent" vcs="Git" />
  </component>
</project>
.idea/workspace.xml
@@ -1,39 +1,200 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="BranchesTreeState">
    <expand>
      <path>
        <item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
        <item name="LOCAL_ROOT" type="e8cecc67:BranchNodeDescriptor" />
      </path>
      <path>
        <item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
        <item name="REMOTE_ROOT" type="e8cecc67:BranchNodeDescriptor" />
      </path>
      <path>
        <item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
        <item name="REMOTE_ROOT" type="e8cecc67:BranchNodeDescriptor" />
        <item name="GROUP_NODE:origin" type="e8cecc67:BranchNodeDescriptor" />
      </path>
    </expand>
    <select />
  </component>
  <component name="ChangeListManager">
    <list default="true" id="cb08d02f-fd4f-4fa2-85fe-abd508fa83ac" name="Default Changelist" comment="后台代码">
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/tCity/tCity.js" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/tCity/tCity_info.js" afterDir="false" />
    <list default="true" id="f560b179-9233-4e76-92e7-a3f41cf84d9f" name="Default Changelist" comment="">
      <change afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/controller/CoachTypeController.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/model/query/coachQuery/CoachQuery.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/model/vo/CoachChangeStateVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/model/vo/CoachSerchVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/controller/BodySideAppointmentsController.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/entity/BodySideAppointment.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/mapper/BodySideAppointmentMapper.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/model/BenefitsVedioChangeStateVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/model/QueryBenefitsVedioVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/model/QueryBodySideAppointment.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/model/QueryBodySideAppointmentVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/model/TQueryBenefitsVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/service/BodySideAppointmentService.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BodySideAppointmentServiceImpl.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/resources/mapper/BodySideAppointmentsMapper.xml" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/model/dto/CourseChangeStateDTO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/model/dto/TQueryBenefitsVideosDTO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/model/vo/CoursePackageTypeVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/model/vo/TQueryBenefitsVideosVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/CoachTypeClient.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/StoreStaffClient.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/CoachSerchVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/CoachType.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/TStoreStaff.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/BenefitsVideoClient.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/BodySideAppointmentClient.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/BenefitsVedioChangeStateVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/BenefitsVideoClassification.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/BenefitsVideos.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/BodySideAppointment.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/QueryBenefitsVedioVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/QueryBodySideAppointment.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/QueryBodySideAppointmentVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CourseChangeStateDTO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackageTypeVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/SiteClient.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/SiteLockClient.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/StoreClient.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/Site.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/SiteAddDTO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/SiteChangeStateVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/TSiteDTO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/TSiteLockDTO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/CoachController.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/CoachTypeController.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TBodySideAppointmentsController.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageTypeController.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CoachChangeStateVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CoachQuery.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/ExpireSiteSearchVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SiteSearchVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/Store.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TQueryBenefitsVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TQueryBenefitsVideosDTO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TQueryBenefitsVideosVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefits.html" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefitsVideos.html" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefitsVideos_add.html" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefitsVideos_edit.html" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefitsVideos_info.html" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefits_add.html" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefits_edit.html" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/bodySideAppointment/TBodySideAppointment.html" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/bodySideAppointment/TBodySideAppointment_add.html" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/bodySideAppointment/TBodySideAppointment_edit.html" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackageType/CoursePackageType.html" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoach/TCoach.html" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoach/TCoach_add.html" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoach/TCoach_edit.html" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoachType/TCoachType.html" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_edit.html" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_lock.html" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/benefits/TBenefits.js" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/benefits/tBenefitsVideos.js" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/benefits/tBenefitsVideos_add.js" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/benefits/tBenefitsVideos_edit.js" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/bodySideAppointment/tBodySideAppointment.js" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/bodySideAppointment/tBodySideAppointment_edit.js" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/coursePackageType/coursePackageType.js" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/tCoach/tCoach.js" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/tCoach/tCoach_add.js" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/tCoach/tCoach_info.js" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/tCoachType/tCoachType.js" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSiteLock.js" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/controller/SiteLockController.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/entity/TSite.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/feignclient/account/CityManagerClient.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/feignclient/account/model/CityManager.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/feignclient/model/SiteAddDTO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/feignclient/model/SiteChangeStateVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/model/dto/siteDto/TSiteDTO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/model/dto/siteDto/TSiteLockDTO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/model/vo/siteVo/ExpireSiteSearchVO.java" afterDir="false" />
      <change afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/model/vo/siteVo/SiteSearchVO.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/.idea/compiler.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/compiler.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/.idea/encodings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/encodings.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/.idea/modules.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/modules.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/.idea/vcs.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/mb-cloud-account.iml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/mb-cloud-account.iml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/controller/CityController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/controller/CityController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/entity/TCityManager.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/entity/TCityManager.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/pom.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/controller/CityManagerController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/controller/CityManagerController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/controller/CoachController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/controller/CoachController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/entity/Coach.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/entity/Coach.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/mapper/CoachMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/mapper/CoachMapper.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/service/CoachService.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/service/CoachService.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/service/ICityManagerService.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/service/ICityManagerService.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/service/impl/CityManagerServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/service/impl/CityManagerServiceImpl.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/service/impl/CoachServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/service/impl/CoachServiceImpl.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/resources/mapper/CoachMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/resources/mapper/CoachMapper.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-activity/mb-cloud-activity.iml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-activity/mb-cloud-activity.iml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-activity/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-activity/pom.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/controller/BenefitVideoController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/controller/BenefitVideoController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideoClassification.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideoClassification.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideos.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideos.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/other/StoreClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/other/StoreClient.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/other/model/Store.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/other/model/Store.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideoClassificationMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideoClassificationMapper.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideosMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideosMapper.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/service/BenefitsVideosService.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/service/BenefitsVideosService.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/service/IBenefitsVideoClassificationService.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/service/IBenefitsVideoClassificationService.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideoClassificationServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideoClassificationServiceImpl.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideosServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideosServiceImpl.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-activity/src/main/resources/mapper/BenefitsVideoClassificationMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/resources/mapper/BenefitsVideoClassificationMapper.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-activity/src/main/resources/mapper/BenefitsVideosMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/resources/mapper/BenefitsVideosMapper.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-auth/mb-cloud-auth.iml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-auth/mb-cloud-auth.iml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/CityClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/CityClient.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-competition/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-competition/pom.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/mb-cloud-course.iml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/mb-cloud-course.iml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/pom.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageTypeController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageTypeController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/mapper/TCourseMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/mapper/TCourseMapper.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/TCourseService.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/TCourseService.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCourseServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCourseServiceImpl.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/resources/mapper/TCourseMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/resources/mapper/TCourseMapper.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-gateway/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-gateway/pom.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/pom.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/CityManagerClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/CityManagerClient.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/CoachClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/CoachClient.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/Coach.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/Coach.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseClient.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageTypeClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageTypeClient.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/QuestionController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/QuestionController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCityController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCityController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCity/TCity.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCity/TCity.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCity/TCity_add.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCity/TCity_add.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/tCar/tCar_info.js" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/tCar/tCar_info.js" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TWelfareVideoController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TWelfareVideoController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/LoginController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/LoginController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/util/UploadUtil.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/util/UploadUtil.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/enums/RuleStatusEnum.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/enums/RuleStatusEnum.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TSite.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TSite.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/common/_right.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/common/_right.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCouponAdd.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCouponAdd.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionAdd.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionAdd.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionEdit.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionEdit.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionInfo.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionInfo.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TShop_add.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_add.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TShop_edit.html" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TShop_img.html" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TShop_imgAll.html" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/js/common/ajax-object.js" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/js/common/ajax-object.js" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/js/common/web-upload-file.js" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/js/common/web-upload-file.js" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/tQuestion/TQuestion.js" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/tQuestion/TQuestion.js" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/tSite/electricFence.js" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/pom.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/entity/Site.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/entity/Site.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/entity/SiteLock.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/entity/SiteLock.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/feignclient/HonorDeClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/feignclient/HonorDeClient.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/feignclient/SiteClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/feignclient/SiteClient.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/mapper/SiteLockMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/mapper/SiteLockMapper.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/mapper/SiteMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/mapper/SiteMapper.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/mapper/StoreMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/mapper/StoreMapper.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/ISiteLockService.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/ISiteLockService.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/ISiteService.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/ISiteService.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/ISiteTypeService.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/ISiteTypeService.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/StoreService.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/StoreService.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteLockServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteLockServiceImpl.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteTypeServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteTypeServiceImpl.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/impl/StoreServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/impl/StoreServiceImpl.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/resources/mapper/SiteLockMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/resources/mapper/SiteLockMapper.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/resources/mapper/SiteMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/resources/mapper/SiteMapper.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/resources/mapper/StoreMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/resources/mapper/StoreMapper.xml" afterDir="false" />
    </list>
    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
    <option name="SHOW_DIALOG" value="false" />
    <option name="HIGHLIGHT_CONFLICTS" value="true" />
    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
@@ -42,37 +203,18 @@
  <component name="FileTemplateManagerImpl">
    <option name="RECENT_TEMPLATES">
      <list>
        <option value="Interface" />
        <option value="HTML File" />
        <option value="Class" />
        <option value="mybatis-mapper" />
      </list>
    </option>
  </component>
  <component name="Git.Settings">
    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
  </component>
  <component name="JsFlowSettings">
    <service-enabled>true</service-enabled>
    <exe-path />
    <other-services-enabled>true</other-services-enabled>
    <auto-save>true</auto-save>
  </component>
  <component name="MavenImportPreferences">
    <option name="generalSettings">
      <MavenGeneralSettings>
        <option name="mavenHome" value="D:/apache-maven/apache-maven-3.6.1" />
        <option name="userSettingsFile" value="D:\apache-maven\apache-maven-3.6.1\conf\settings.xml" />
      </MavenGeneralSettings>
    </option>
  </component>
  <component name="ProjectId" id="2T0poWYlZShlnPso29uxjn4gQQo" />
  <component name="ProjectLevelVcsManager" settingsEditedManually="true">
    <ConfirmationsSetting value="1" id="Add" />
  </component>
  <component name="ProjectViewState">
    <option name="hideEmptyMiddlePackages" value="true" />
    <option name="showLibraryContents" value="true" />
  </component>
  <component name="ProjectId" id="2Tjw32TibW9vX8W0bRu35zUVftR" />
  <component name="PropertiesComponent">
    <property name="DefaultHtmlFileTemplate" value="HTML File" />
    <property name="ExpandSpringBootJavaOptionsPanel" value="true" />
    <property name="RequestMappingsPanelOrder0" value="0" />
    <property name="RequestMappingsPanelOrder1" value="1" />
@@ -80,33 +222,28 @@
    <property name="RequestMappingsPanelWidth1" value="75" />
    <property name="WebServerToolWindowFactoryState" value="false" />
    <property name="aspect.path.notification.shown" value="true" />
    <property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1686656087610" />
    <property name="last_opened_file_path" value="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system" />
    <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
    <property name="nodejs_npm_path_reset_for_default_project" value="true" />
    <property name="project.structure.last.edited" value="Global Libraries" />
    <property name="last_opened_file_path" value="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/bodySideAppointment" />
    <property name="nodejs_package_manager_path" value="npm" />
    <property name="project.structure.last.edited" value="Modules" />
    <property name="project.structure.proportion" value="0.0" />
    <property name="project.structure.side.proportion" value="0.2" />
    <property name="run.code.analysis.last.selected.profile" value="pProject Default" />
    <property name="settings.editor.selected.configurable" value="project.propVCSSupport.Mappings" />
  </component>
  <component name="ReactorSettings">
    <option name="notificationShown" value="true" />
    <property name="restartRequiresConfirmation" value="false" />
    <property name="settings.editor.selected.configurable" value="MavenSettings" />
  </component>
  <component name="RecentsManager">
    <key name="CopyClassDialog.RECENTS_KEY">
      <recent name="com.dsh.course.feignClient.account.model" />
      <recent name="com.dsh.account.mapper" />
      <recent name="com.dsh.account.service.impl" />
      <recent name="com.dsh.account.service" />
      <recent name="com.dsh.account.controller" />
      <recent name="com.dsh.activity.feignclient.other.model" />
      <recent name="com.dsh.course.feignClient.activity" />
      <recent name="com.dsh.guns.modular.system.controller.code" />
      <recent name="com.dsh.course.feignClient.activity.model" />
      <recent name="com.dsh.activity.model" />
    </key>
    <key name="CopyFile.RECENT_KEYS">
      <recent name="F:\code\PlayPai\cloud-server-management\src\main\webapp\static\modular\system" />
      <recent name="F:\code\PlayPai\cloud-server-account\src\main\resources\mapper" />
      <recent name="F:\code\PlayPai\cloud-server-management\src\main\webapp\WEB-INF\view\system" />
      <recent name="F:\code\PlayPai\cloud-server-competition\src\main\java\com\dsh" />
      <recent name="F:\code\PlayPai\cloud-server-management\src\main\resources\mapper" />
      <recent name="E:\IdeaProjects\PlayPai\cloud-server-management\src\main\webapp\WEB-INF\view\system\bodySideAppointment" />
      <recent name="E:\IdeaProjects\PlayPai\cloud-server-management\src\main\webapp\static\modular\system\bodySideAppointment" />
      <recent name="E:\IdeaProjects\PlayPai\cloud-server-management\src\main\java\com\dsh\course\feignClient\activity\model" />
      <recent name="E:\IdeaProjects\PlayPai\cloud-server-management\src\main\webapp\static\modular\system\benefits" />
      <recent name="E:\IdeaProjects\PlayPai\cloud-server-management\src\main\webapp\WEB-INF\view\system\benefits" />
    </key>
  </component>
  <component name="RunDashboard">
@@ -115,8 +252,18 @@
        <option value="SpringBootApplicationConfigurationType" />
      </set>
    </option>
    <option name="ruleStates">
      <list>
        <RuleState>
          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
        </RuleState>
        <RuleState>
          <option name="name" value="StatusDashboardGroupingRule" />
        </RuleState>
      </list>
    </option>
  </component>
  <component name="RunManager" selected="Spring Boot.AccountApplication">
  <component name="RunManager" selected="Spring Boot.ManagementApplication">
    <configuration name="AccountApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
      <module name="mb-cloud-account" />
      <option name="SPRING_BOOT_MAIN_CLASS" value="com.dsh.AccountApplication" />
@@ -126,17 +273,11 @@
        <option name="Make" enabled="true" />
      </method>
    </configuration>
    <configuration name="AccountApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
      <module name="mb-cloud-account" />
      <option name="SPRING_BOOT_MAIN_CLASS" value="com.dsh.AccountApplication" />
      <option name="ALTERNATIVE_JRE_PATH" />
      <method v="2">
        <option name="Make" enabled="true" />
      </method>
    </configuration>
    <configuration name="ActivityApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
      <module name="mb-cloud-activity" />
      <option name="SPRING_BOOT_MAIN_CLASS" value="com.dsh.ActivityApplication" />
      <option name="ALTERNATIVE_JRE_PATH" />
      <option name="SHORTEN_COMMAND_LINE" value="MANIFEST" />
      <method v="2">
        <option name="Make" enabled="true" />
      </method>
@@ -158,8 +299,17 @@
      </method>
    </configuration>
    <configuration name="CourseApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
      <module name="mb-cloud-competition (1)" />
      <module name="mb-cloud-course" />
      <option name="SPRING_BOOT_MAIN_CLASS" value="com.dsh.CourseApplication" />
      <option name="ALTERNATIVE_JRE_PATH" />
      <option name="SHORTEN_COMMAND_LINE" value="MANIFEST" />
      <method v="2">
        <option name="Make" enabled="true" />
      </method>
    </configuration>
    <configuration name="GatewayApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
      <module name="mb-cloud-gateway" />
      <option name="SPRING_BOOT_MAIN_CLASS" value="cn.mb.cloud.gateway.GatewayApplication" />
      <method v="2">
        <option name="Make" enabled="true" />
      </method>
@@ -167,380 +317,153 @@
    <configuration name="ManagementApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
      <module name="mb-cloud-management" />
      <option name="SPRING_BOOT_MAIN_CLASS" value="com.dsh.ManagementApplication" />
      <option name="ENABLE_JMX_AGENT" value="false" />
      <option name="ALTERNATIVE_JRE_PATH" />
      <option name="SHORTEN_COMMAND_LINE" value="MANIFEST" />
      <method v="2">
        <option name="Make" enabled="true" />
      </method>
    </configuration>
    <configuration name="UserApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
      <module name="mb-cloud-user" />
      <option name="SPRING_BOOT_MAIN_CLASS" value="com.dsh.UserApplication" />
    <configuration name="OtherApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
      <module name="mb-cloud-other" />
      <option name="SPRING_BOOT_MAIN_CLASS" value="com.dsh.OtherApplication" />
      <method v="2">
        <option name="Make" enabled="true" />
      </method>
    </configuration>
    <list>
      <item itemvalue="Spring Boot.UserApplication" />
      <item itemvalue="Spring Boot.ManagementApplication" />
      <item itemvalue="Spring Boot.AuthApplication" />
      <item itemvalue="Spring Boot.AccountApplication" />
      <item itemvalue="Spring Boot.ActivityApplication" />
      <item itemvalue="Spring Boot.AuthApplication" />
      <item itemvalue="Spring Boot.CompetitionApplication" />
      <item itemvalue="Spring Boot.CourseApplication" />
      <item itemvalue="Spring Boot.GatewayApplication" />
      <item itemvalue="Spring Boot.ManagementApplication" />
      <item itemvalue="Spring Boot.OtherApplication" />
    </list>
  </component>
  <component name="ServiceViewManager">
    <option name="allServicesViewState">
      <serviceView>
        <treeState>
          <expand>
            <path>
              <item name="services root" type="e789fda9:ObjectUtils$Sentinel" />
              <item name="com.intellij.execution.services.ServiceModel$ServiceGroupNode@e758ef9a" type="7427dc5b:ServiceModel$ServiceGroupNode" />
            </path>
            <path>
              <item name="services root" type="e789fda9:ObjectUtils$Sentinel" />
              <item name="com.intellij.execution.services.ServiceModel$ServiceGroupNode@e758ef9a" type="7427dc5b:ServiceModel$ServiceGroupNode" />
              <item name="com.intellij.execution.services.ServiceModel$ServiceGroupNode@872283ff" type="7427dc5b:ServiceModel$ServiceGroupNode" />
            </path>
            <path>
              <item name="services root" type="e789fda9:ObjectUtils$Sentinel" />
              <item name="com.intellij.execution.services.ServiceModel$ServiceGroupNode@e758ef9a" type="7427dc5b:ServiceModel$ServiceGroupNode" />
              <item name="com.intellij.execution.services.ServiceModel$ServiceGroupNode@69458c78" type="7427dc5b:ServiceModel$ServiceGroupNode" />
            </path>
          </expand>
          <select />
        </treeState>
      </serviceView>
    </option>
  </component>
  <component name="SvnConfiguration">
    <configuration />
  </component>
  <component name="TaskManager">
    <task active="true" id="Default" summary="Default task">
      <changelist id="cb08d02f-fd4f-4fa2-85fe-abd508fa83ac" name="Default Changelist" comment="" />
      <created>1686653431962</created>
      <changelist id="f560b179-9233-4e76-92e7-a3f41cf84d9f" name="Default Changelist" comment="" />
      <created>1691569594609</created>
      <option name="number" value="Default" />
      <option name="presentableId" value="Default" />
      <updated>1686653431962</updated>
      <workItem from="1686653433491" duration="2267000" />
      <workItem from="1690190039038" duration="16883000" />
      <workItem from="1690333209172" duration="26986000" />
      <updated>1691569594609</updated>
      <workItem from="1691569596751" duration="65000" />
      <workItem from="1691569675100" duration="270000" />
      <workItem from="1691569964197" duration="5608000" />
      <workItem from="1691628065563" duration="26776000" />
      <workItem from="1691714824948" duration="32278000" />
      <workItem from="1691752453575" duration="55000" />
      <workItem from="1691974807017" duration="29112000" />
      <workItem from="1692060742194" duration="20502000" />
      <workItem from="1692087400805" duration="8025000" />
      <workItem from="1692146436177" duration="23500000" />
      <workItem from="1692233067279" duration="10090000" />
      <workItem from="1692252017276" duration="7536000" />
      <workItem from="1692260089826" duration="8503000" />
      <workItem from="1692319933611" duration="26839000" />
      <workItem from="1692578769161" duration="28170000" />
      <workItem from="1692665038696" duration="13077000" />
      <workItem from="1692684619085" duration="13291000" />
      <workItem from="1692751172028" duration="28054000" />
      <workItem from="1692837854502" duration="6293000" />
      <workItem from="1692844552907" duration="8241000" />
      <workItem from="1692859160967" duration="13015000" />
      <workItem from="1692924469163" duration="21622000" />
      <workItem from="1692954633621" duration="995000" />
      <workItem from="1692955658907" duration="4758000" />
      <workItem from="1693183363744" duration="30378000" />
      <workItem from="1693269664223" duration="20846000" />
      <workItem from="1693296305848" duration="948000" />
      <workItem from="1693297281055" duration="121000" />
      <workItem from="1693297534980" duration="7686000" />
      <workItem from="1693356090840" duration="27477000" />
      <workItem from="1693442643841" duration="24243000" />
      <workItem from="1693528994907" duration="29480000" />
      <workItem from="1693566786046" duration="243000" />
      <workItem from="1693567041762" duration="123000" />
      <workItem from="1693623395574" duration="598000" />
      <workItem from="1693643198935" duration="776000" />
      <workItem from="1693705892630" duration="12000" />
      <workItem from="1693706255970" duration="1688000" />
      <workItem from="1693879663101" duration="1191000" />
      <workItem from="1693884719266" duration="158000" />
    </task>
    <task id="LOCAL-00001" summary="后台代码删除">
      <created>1690249807612</created>
    <task id="LOCAL-00001" summary="客服管理、荣誉管理">
      <created>1692233310670</created>
      <option name="number" value="00001" />
      <option name="presentableId" value="LOCAL-00001" />
      <option name="project" value="LOCAL" />
      <updated>1690249807612</updated>
      <updated>1692233310670</updated>
    </task>
    <task id="LOCAL-00002" summary="后台代码删除">
      <created>1690254629455</created>
      <option name="number" value="00002" />
      <option name="presentableId" value="LOCAL-00002" />
      <option name="project" value="LOCAL" />
      <updated>1690254629455</updated>
    </task>
    <task id="LOCAL-00003" summary="后台代码删除">
      <created>1690254749862</created>
      <option name="number" value="00003" />
      <option name="presentableId" value="LOCAL-00003" />
      <option name="project" value="LOCAL" />
      <updated>1690254749862</updated>
    </task>
    <task id="LOCAL-00004" summary="后台代码">
      <created>1690334274202</created>
      <option name="number" value="00004" />
      <option name="presentableId" value="LOCAL-00004" />
      <option name="project" value="LOCAL" />
      <updated>1690334274203</updated>
    </task>
    <task id="LOCAL-00005" summary="后台代码">
      <created>1690335913450</created>
      <option name="number" value="00005" />
      <option name="presentableId" value="LOCAL-00005" />
      <option name="project" value="LOCAL" />
      <updated>1690335913450</updated>
    </task>
    <task id="LOCAL-00006" summary="后台代码">
      <created>1690338179876</created>
      <option name="number" value="00006" />
      <option name="presentableId" value="LOCAL-00006" />
      <option name="project" value="LOCAL" />
      <updated>1690338179876</updated>
    </task>
    <task id="LOCAL-00007" summary="后台代码">
      <created>1690338325966</created>
      <option name="number" value="00007" />
      <option name="presentableId" value="LOCAL-00007" />
      <option name="project" value="LOCAL" />
      <updated>1690338325966</updated>
    </task>
    <task id="LOCAL-00008" summary="后台代码">
      <created>1690341067099</created>
      <option name="number" value="00008" />
      <option name="presentableId" value="LOCAL-00008" />
      <option name="project" value="LOCAL" />
      <updated>1690341067099</updated>
    </task>
    <task id="LOCAL-00009" summary="后台代码">
      <created>1690355617215</created>
      <option name="number" value="00009" />
      <option name="presentableId" value="LOCAL-00009" />
      <option name="project" value="LOCAL" />
      <updated>1690355617215</updated>
    </task>
    <task id="LOCAL-00010" summary="后台代码删除">
      <created>1690362658673</created>
      <option name="number" value="00010" />
      <option name="presentableId" value="LOCAL-00010" />
      <option name="project" value="LOCAL" />
      <updated>1690362658673</updated>
    </task>
    <task id="LOCAL-00011" summary="后台代码删除">
      <created>1690363462474</created>
      <option name="number" value="00011" />
      <option name="presentableId" value="LOCAL-00011" />
      <option name="project" value="LOCAL" />
      <updated>1690363462474</updated>
    </task>
    <task id="LOCAL-00012" summary="后台代码">
      <created>1690364368448</created>
      <option name="number" value="00012" />
      <option name="presentableId" value="LOCAL-00012" />
      <option name="project" value="LOCAL" />
      <updated>1690364368448</updated>
    </task>
    <task id="LOCAL-00013" summary="后台代码">
      <created>1690364506501</created>
      <option name="number" value="00013" />
      <option name="presentableId" value="LOCAL-00013" />
      <option name="project" value="LOCAL" />
      <updated>1690364506501</updated>
    </task>
    <option name="localTasksCounter" value="14" />
    <option name="localTasksCounter" value="2" />
    <servers />
  </component>
  <component name="TypeScriptGeneratedFilesManager">
    <option name="version" value="2" />
    <option name="version" value="1" />
  </component>
  <component name="Vcs.Log.Tabs.Properties">
    <option name="TAB_STATES">
      <map>
        <entry key="MAIN">
          <value>
            <State />
            <State>
              <option name="COLUMN_ORDER" />
            </State>
          </value>
        </entry>
      </map>
    </option>
    <option name="oldMeFiltersMigrated" value="true" />
  </component>
  <component name="VcsManagerConfiguration">
    <MESSAGE value="后台代码删除" />
    <MESSAGE value="后台代码" />
    <option name="LAST_COMMIT_MESSAGE" value="后台代码" />
  </component>
  <component name="WindowStateProjectService">
    <state x="590" y="80" key="#&lt;template&gt;_of_Spring_Boot" timestamp="1690338437444">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state x="590" y="80" key="#&lt;template&gt;_of_Spring_Boot/0.0.1920.1032@0.0.1920.1032" timestamp="1690338437444" />
    <state x="590" y="0" width="753" height="1032" key="#AccountApplication" timestamp="1690363440283">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state x="590" y="0" width="753" height="1032" key="#AccountApplication/0.0.1920.1032@0.0.1920.1032" timestamp="1690363440283" />
    <state x="590" y="0" width="753" height="1032" key="#CompetitionApplication" timestamp="1690342021698">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state x="590" y="0" width="753" height="1032" key="#CompetitionApplication/0.0.1920.1032@0.0.1920.1032" timestamp="1690342021698" />
    <state x="590" y="109" width="753" height="813" key="#ManagementApplication" timestamp="1690338483958">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state x="590" y="109" width="753" height="813" key="#ManagementApplication/0.0.1920.1032@0.0.1920.1032" timestamp="1690338483958" />
    <state x="765" y="199" key="#com.intellij.ide.util.MemberChooser" timestamp="1690351593596">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state x="765" y="199" key="#com.intellij.ide.util.MemberChooser/0.0.1920.1032@0.0.1920.1032" timestamp="1690351593596" />
    <state x="689" y="304" key="#com.intellij.ide.util.TreeClassChooserDialog" timestamp="1690338381045">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state x="689" y="304" key="#com.intellij.ide.util.TreeClassChooserDialog/0.0.1920.1032@0.0.1920.1032" timestamp="1690338381045" />
    <state x="504" y="438" key="#com.intellij.refactoring.move.MoveHandler.SelectRefactoringDialog" timestamp="1690337455729">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state x="504" y="438" key="#com.intellij.refactoring.move.MoveHandler.SelectRefactoringDialog/0.0.1920.1032@0.0.1920.1032" timestamp="1690337455729" />
    <state x="674" y="382" width="571" height="274" key="#com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesDialog.classes" timestamp="1690338847091">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state x="674" y="382" width="571" height="274" key="#com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesDialog.classes/0.0.1920.1032@0.0.1920.1032" timestamp="1690338847091" />
    <state x="703" y="346" key="ANALYSIS_DLG_com.intellij.analysis.BaseAnalysisAction$1" timestamp="1690363667225">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state x="703" y="346" key="ANALYSIS_DLG_com.intellij.analysis.BaseAnalysisAction$1/0.0.1920.1032@0.0.1920.1032" timestamp="1690363667225" />
    <state x="519" y="82" key="CommitChangelistDialog2" timestamp="1690364505261">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state x="519" y="82" key="CommitChangelistDialog2/0.0.1920.1032@0.0.1920.1032" timestamp="1690364505261" />
    <state width="464" height="466" key="DebuggerActiveHint" timestamp="1690354723383">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state width="464" height="466" key="DebuggerActiveHint/0.0.1920.1032@0.0.1920.1032" timestamp="1690354723383" />
    <state x="740" y="270" key="FileChooserDialogImpl" timestamp="1690249419357">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state x="740" y="270" key="FileChooserDialogImpl/0.0.1920.1032@0.0.1920.1032" timestamp="1690249419357" />
    <state width="1293" height="418" key="GridCell.Tab.0.bottom" timestamp="1690366694918">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state width="1293" height="418" key="GridCell.Tab.0.bottom/0.0.1920.1032@0.0.1920.1032" timestamp="1690366694918" />
    <state width="1293" height="418" key="GridCell.Tab.0.center" timestamp="1690366694918">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state width="1293" height="418" key="GridCell.Tab.0.center/0.0.1920.1032@0.0.1920.1032" timestamp="1690366694918" />
    <state width="1293" height="418" key="GridCell.Tab.0.left" timestamp="1690366694918">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state width="1293" height="418" key="GridCell.Tab.0.left/0.0.1920.1032@0.0.1920.1032" timestamp="1690366694918" />
    <state width="1293" height="418" key="GridCell.Tab.0.right" timestamp="1690366694918">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state width="1293" height="418" key="GridCell.Tab.0.right/0.0.1920.1032@0.0.1920.1032" timestamp="1690366694918" />
    <state width="1293" height="418" key="GridCell.Tab.1.bottom" timestamp="1690366694918">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state width="1293" height="418" key="GridCell.Tab.1.bottom/0.0.1920.1032@0.0.1920.1032" timestamp="1690366694918" />
    <state width="1293" height="418" key="GridCell.Tab.1.center" timestamp="1690366694918">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state width="1293" height="418" key="GridCell.Tab.1.center/0.0.1920.1032@0.0.1920.1032" timestamp="1690366694918" />
    <state width="1293" height="418" key="GridCell.Tab.1.left" timestamp="1690366694918">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state width="1293" height="418" key="GridCell.Tab.1.left/0.0.1920.1032@0.0.1920.1032" timestamp="1690366694918" />
    <state width="1293" height="418" key="GridCell.Tab.1.right" timestamp="1690366694918">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state width="1293" height="418" key="GridCell.Tab.1.right/0.0.1920.1032@0.0.1920.1032" timestamp="1690366694918" />
    <state width="1293" height="418" key="GridCell.Tab.2.bottom" timestamp="1690366555269">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state width="1293" height="418" key="GridCell.Tab.2.bottom/0.0.1920.1032@0.0.1920.1032" timestamp="1690366555269" />
    <state width="1293" height="418" key="GridCell.Tab.2.center" timestamp="1690366555269">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state width="1293" height="418" key="GridCell.Tab.2.center/0.0.1920.1032@0.0.1920.1032" timestamp="1690366555269" />
    <state width="1293" height="418" key="GridCell.Tab.2.left" timestamp="1690366555269">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state width="1293" height="418" key="GridCell.Tab.2.left/0.0.1920.1032@0.0.1920.1032" timestamp="1690366555269" />
    <state width="1293" height="418" key="GridCell.Tab.2.right" timestamp="1690366555269">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state width="1293" height="418" key="GridCell.Tab.2.right/0.0.1920.1032@0.0.1920.1032" timestamp="1690366555269" />
    <state x="461" y="160" key="SettingsEditor" timestamp="1690191509088">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state x="461" y="160" key="SettingsEditor/0.0.1920.1032@0.0.1920.1032" timestamp="1690191509088" />
    <state x="552" y="248" key="Vcs.Push.Dialog.v2" timestamp="1690364507500">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state x="552" y="248" key="Vcs.Push.Dialog.v2/0.0.1920.1032@0.0.1920.1032" timestamp="1690364507500" />
    <state x="92" y="92" width="1736" height="848" key="com.intellij.history.integration.ui.views.DirectoryHistoryDialog" timestamp="1690340014123">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state x="92" y="92" width="1736" height="848" key="com.intellij.history.integration.ui.views.DirectoryHistoryDialog/0.0.1920.1032@0.0.1920.1032" timestamp="1690340014123" />
    <state x="92" y="92" width="1736" height="848" key="com.intellij.history.integration.ui.views.FileHistoryDialog" timestamp="1690340014123">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state x="92" y="92" width="1736" height="848" key="com.intellij.history.integration.ui.views.FileHistoryDialog/0.0.1920.1032@0.0.1920.1032" timestamp="1690340014123" />
    <state x="754" y="428" key="com.intellij.openapi.vcs.update.UpdateOrStatusOptionsDialogupdate-v2" timestamp="1690362660961">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state x="754" y="428" key="com.intellij.openapi.vcs.update.UpdateOrStatusOptionsDialogupdate-v2/0.0.1920.1032@0.0.1920.1032" timestamp="1690362660961" />
    <state x="661" y="224" width="721" height="584" key="find.popup" timestamp="1690365779184">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state x="661" y="224" width="721" height="584" key="find.popup/0.0.1920.1032@0.0.1920.1032" timestamp="1690365779184" />
    <state x="623" y="223" width="672" height="678" key="search.everywhere.popup" timestamp="1690365810397">
      <screen x="0" y="0" width="1920" height="1032" />
    </state>
    <state x="623" y="223" width="672" height="678" key="search.everywhere.popup/0.0.1920.1032@0.0.1920.1032" timestamp="1690365810397" />
    <MESSAGE value="客服管理、荣誉管理" />
    <option name="LAST_COMMIT_MESSAGE" value="客服管理、荣誉管理" />
  </component>
  <component name="XDebuggerManager">
    <breakpoint-manager>
      <breakpoints>
        <line-breakpoint enabled="true" type="java-line">
          <url>file://$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/LoginController.java</url>
          <line>145</line>
          <option name="timeStamp" value="1" />
          <url>file://$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/util/UploadUtil.java</url>
          <line>148</line>
          <option name="timeStamp" value="3" />
        </line-breakpoint>
        <line-breakpoint enabled="true" type="java-line">
          <url>file://$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/controller/BodySideAppointmentsController.java</url>
          <line>88</line>
          <option name="timeStamp" value="43" />
        </line-breakpoint>
      </breakpoints>
    </breakpoint-manager>
  </component>
  <component name="masterDetails">
    <states>
      <state key="ArtifactsStructureConfigurable.UI">
        <settings>
          <artifact-editor />
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.2" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
      <state key="FacetStructureConfigurable.UI">
        <settings>
          <last-edited>No facets are configured</last-edited>
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.2" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
      <state key="GlobalLibrariesConfigurable.UI">
        <settings>
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.2" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
      <state key="JdkListConfigurable.UI">
        <settings>
          <last-edited>1.8</last-edited>
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.2" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
      <state key="ModuleStructureConfigurable.UI">
        <settings>
          <last-edited>PlayPai</last-edited>
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.2" />
                <option value="0.6" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
      <state key="ProjectJDKs.UI">
        <settings>
          <last-edited>1.8</last-edited>
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.2" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
      <state key="ProjectLibrariesConfigurable.UI">
        <settings>
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.2" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
    </states>
    <watches-manager>
      <configuration name="SpringBootApplicationConfigurationType">
        <watch expression="vo.data3" />
      </configuration>
    </watches-manager>
  </component>
</project>
cloud-server-account/mb-cloud-account.iml
@@ -28,7 +28,6 @@
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.3" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.3" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba:transmittable-thread-local:2.10.1" level="project" />
    <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
    <orderEntry type="library" name="Maven: cn.mb.cloud:mb-cloud-common-data:1.1.3" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.3.6.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.3.6.RELEASE" level="project" />
@@ -133,6 +132,9 @@
    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" />
    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.3" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" />
@@ -147,19 +149,170 @@
    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.11.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" />
    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.22" level="project" />
    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.22" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.3" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.velocity:velocity:1.7" level="project" />
    <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
    <orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.30" level="project" />
    <orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
    <orderEntry type="library" name="Maven: xml-apis:xml-apis:1.4.01" level="project" />
    <orderEntry type="library" name="Maven: com.alipay.sdk:alipay-sdk-java:4.38.10.ALL" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.83_noneautotype" level="project" />
    <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.62" level="project" />
    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.14.9" level="project" />
    <orderEntry type="library" name="Maven: com.squareup.okio:okio:1.17.2" level="project" />
    <orderEntry type="library" name="Maven: com.aliyun.oss:aliyun-sdk-oss:3.8.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
    <orderEntry type="library" name="Maven: org.codehaus.jettison:jettison:1.2" level="project" />
    <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-ram:3.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-sts:3.0.0" level="project" />
    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-ecs:4.2.0" level="project" />
    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:4.4.3" level="project" />
    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.6" level="project" />
    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
    <orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
    <orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.3" level="project" />
    <orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
    <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt:0.9.0" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.3" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.3" level="project" />
    <orderEntry type="library" name="Maven: org.gavaghan:geodesy:1.1.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-jdbc-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-transaction-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-transaction-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-executor:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: io.vertx:vertx-mysql-client:4.2.3" level="project" />
    <orderEntry type="library" name="Maven: io.vertx:vertx-core:4.2.3" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.54.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.54.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.54.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.54.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-resolver-dns:4.1.54.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-dns:4.1.54.Final" level="project" />
    <orderEntry type="library" name="Maven: io.vertx:vertx-sql-client:4.2.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-parser-sql92:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-parser-engine:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-parser-spi:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-parser-statement:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.antlr:antlr4-runtime:4.9.2" level="project" />
    <orderEntry type="library" name="Maven: com.github.ben-manes.caffeine:caffeine:2.8.6" level="project" />
    <orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.7.0" level="project" />
    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.4.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-parser-mysql:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-parser-postgresql:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-parser-oracle:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-parser-sqlserver:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-parser-opengauss:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-authority-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-authority-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-single-table-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-single-table-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-route:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-traffic-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-common:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-util:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.groovy:groovy:4.0.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-binder:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-dialect-exception-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-traffic-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-context:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-distsql-parser:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-distsql-statement:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-translator-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-translator-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-standalone-mode-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-mode-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-schedule-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-lite-core:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-api:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-infra-common:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-registry-center:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-simple-executor:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-executor-kernel:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-error-handler-general:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-error-handler-spi:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-dataflow-executor:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-script-executor:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-exec:1.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-http-executor:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-tracing-rdb:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-tracing-api:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.quartz-scheduler:quartz:2.3.2" level="project" />
    <orderEntry type="library" name="Maven: com.mchange:mchange-commons-java:0.2.15" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-lite-lifecycle:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-standalone-mode-repository-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-standalone-mode-repository-jdbc-h2:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-standalone-mode-repository-jdbc-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-cluster-mode-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-cluster-mode-repository-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sharding-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sharding-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-data-pipeline-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-data-pipeline-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-cluster-mode-repository-zookeeper-curator:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.curator:curator-framework:4.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.curator:curator-client:5.1.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.zookeeper:zookeeper:3.6.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.zookeeper:zookeeper-jute:3.6.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.yetus:audience-annotations:0.5.0" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-native-epoll:4.1.54.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-native-unix-common:4.1.54.Final" level="project" />
    <orderEntry type="library" name="Maven: log4j:log4j:1.2.17" level="project" />
    <orderEntry type="library" name="Maven: org.apache.curator:curator-recipes:2.12.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-rewrite:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-translator-native-provider:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-merge:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.calcite:calcite-linq4j:1.31.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.calcite.avatica:avatica-core:1.22.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.calcite.avatica:avatica-metrics:1.22.0" level="project" />
    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.5.1" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.httpcomponents.client5:httpclient5:5.1.3" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.httpcomponents.core5:httpcore5-h2:5.1.3" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.httpcomponents.core5:httpcore5:5.1.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-system-datetime:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-datetime-spi:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sharding-cosid:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: me.ahoo.cosid:cosid-core:1.14.4" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sharding-nanoid:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: com.aventrix.jnanoid:jnanoid:2.0.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-readwrite-splitting-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-readwrite-splitting-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-db-discovery-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-db-discovery-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-db-discovery-mysql:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-db-discovery-opengauss:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-encrypt-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-encrypt-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-encrypt-sm:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-shadow-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-shadow-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-federation-executor:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-federation-optimizer:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.calcite:calcite-core:1.31.0" level="project" />
    <orderEntry type="library" name="Maven: com.esri.geometry:esri-geometry-api:2.2.0" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.3" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: com.google.uzaygezen:uzaygezen-core:0.2" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: com.yahoo.datasketches:sketches-core:0.9.0" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: com.yahoo.datasketches:memory:0.9.0" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: net.hydromatic:aggdesigner-algorithm:6.0" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.commons:commons-dbcp2:2.7.0" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.codehaus.janino:commons-compiler:3.1.2" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.codehaus.janino:janino:3.1.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-parser-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-parser-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-parser:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.4" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: com.h2database:h2:1.4.200" level="project" />
    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.30" level="project" />
    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:2.2.1.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-client:1.2.1" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-common:1.2.1" level="project" />
    <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.10" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-api:1.2.1" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.58" level="project" />
    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.3" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.3" level="project" />
    <orderEntry type="library" name="Maven: io.prometheus:simpleclient:0.5.0" level="project" />
    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.26" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba.spring:spring-context-support:1.0.6" level="project" />
@@ -170,7 +323,6 @@
    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter:2.2.6.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-rsa:1.0.9.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.59" level="project" />
    <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.59" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-ribbon:2.2.6.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-archaius:2.2.6.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-archaius:2.2.6.RELEASE" level="project" />
@@ -186,8 +338,6 @@
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty:0.4.9" level="project" />
    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-core:2.3.0" level="project" />
    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-httpclient:2.3.0" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey:jersey-client:1.19.1" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey:jersey-core:1.19.1" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: javax.ws.rs:jsr311-api:1.1.1" level="project" />
@@ -207,7 +357,6 @@
    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator-autoconfigure:2.3.6.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator:2.3.6.RELEASE" level="project" />
@@ -222,10 +371,10 @@
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.3.6.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.3.6.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.3.6.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: net.minidev:json-smart:2.3" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.16.1" level="project" />
@@ -237,7 +386,7 @@
    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.6.3" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.6.3" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.junit.vintage:junit-vintage-engine:5.6.3" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
    <orderEntry type="library" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.6.3" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.13.1" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.3.3" level="project" />
cloud-server-account/pom.xml
@@ -126,10 +126,6 @@
                </executions>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <repositories>
cloud-server-account/src/main/java/com/dsh/account/controller/CityManagerController.java
@@ -1,10 +1,18 @@
package com.dsh.account.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.account.entity.CityManager;
import com.dsh.account.feignclient.other.model.Store;
import com.dsh.account.service.ICityManagerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import java.util.stream.Collectors;
/**
 * @author zhibing.pu
@@ -19,6 +27,49 @@
    /**
     * 根据管理员id获取详情信息
     */
    @RequestMapping("/cityManager/getStoreById")
    public CityManager getStoreById(@RequestParam Integer id){
        return cityManagerService.getOne(new QueryWrapper<CityManager>().eq("id",id));
    }
    /**
     * 获取已有城市管理的省、市
     */
    @RequestMapping("/cityManager/listAll")
    public List<CityManager> listAll(){
        return cityManagerService.listAll();
    }
    /**
     * 选择省 展示市
     */
    @RequestMapping("/cityManager/getCity")
    @ResponseBody
    public List<CityManager> getCity(@RequestBody String province){
        List<CityManager> province1 = cityManagerService.list(new QueryWrapper<CityManager>().eq("province", province));
        List<CityManager> distinctCities = province1.stream()
                .collect(Collectors.collectingAndThen(
                        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(CityManager::getCity))),
                        ArrayList::new
                ));
        return distinctCities;
    }
    /**
     * 选择市区 展示全部账号
     */
    @RequestMapping("/cityManager/getAccount")
    @ResponseBody
    List<CityManager> getAccount(@RequestBody String city){
        return cityManagerService.list(new QueryWrapper<CityManager>().eq("city",city).ne("state",2).ne("state",3));
    }
    /**
     * 根据id获取数据
     * @param id
     * @return
cloud-server-account/src/main/java/com/dsh/account/controller/CoachController.java
@@ -3,6 +3,9 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.account.entity.Coach;
import com.dsh.account.model.query.coachQuery.CoachQuery;
import com.dsh.account.model.vo.CoachChangeStateVO;
import com.dsh.account.model.vo.CoachSerchVO;
import com.dsh.account.service.CoachService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -16,6 +19,58 @@
    @Autowired
    private CoachService service;
    /**
     * 获取教练列表数据
     */
    @ResponseBody
    @RequestMapping("/coach/listAll")
    public List<CoachSerchVO> listAll(@RequestBody CoachQuery query){
        List<CoachSerchVO> coachSerchVOS = service.listAll(query);
        for (CoachSerchVO coachSerchVO : coachSerchVOS) {
            coachSerchVO.setNameAndPhone(coachSerchVO.getAccountName()+"-"+coachSerchVO.getAccountPhone());
        }
        return coachSerchVOS;
    }
    /**
     * 上/下架、删除常见问题 type=1为上架 2为下架
     */
    @RequestMapping("/coach/changeState")
    public Object changeState(@RequestBody CoachChangeStateVO vo){
        return service.changeState(vo);
    }
    /**
     * 添加教练
     * @return
     */
    @RequestMapping("/base/site/addCoach")
    public Object addCoach(@RequestBody Coach coach){
        if(coach.getId()!= null ){
            return service.updateById(coach);
        }else {
            return service.save(coach);
        }
    }
    /**
     * 获取所有省
     */
    @ResponseBody
    @PostMapping("/coach/getProvince")
    public List<Coach> getProvince(){
        return service.list();
    }
    /**
     * 根据选择的省获取对应的市
     */
    @ResponseBody
    @PostMapping("/coach/getCity")
    public List<Coach> getCity(@RequestBody String city){
        return service.list(new QueryWrapper<Coach>().eq("province",city));
    }
    /**
     * 根据门店
     * @param id
cloud-server-account/src/main/java/com/dsh/account/controller/CoachTypeController.java
New file
@@ -0,0 +1,91 @@
package com.dsh.account.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.account.entity.Coach;
import com.dsh.account.entity.CoachType;
import com.dsh.account.service.CoachService;
import com.dsh.account.service.CoachTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * 教练类型
 */
@RestController
@RequestMapping("")
public class CoachTypeController {
    @Autowired
    private CoachService service;
    @Autowired
    private CoachTypeService typeService;
    /**
     * 根据门店
     * @param
     * @return
     */
    @ResponseBody
    @PostMapping("/coachType/list")
    public List<CoachType> list(){
        return typeService.list(new QueryWrapper<CoachType>().ne("state",3));
    }
    /**
     * 新增教练类型
     * @param
     * @return
     */
    @ResponseBody
    @RequestMapping("/coachType/add")
    public Object add(@RequestBody String name){
        List<CoachType> list = typeService.list(new QueryWrapper<CoachType>().eq("name", name));
        if (list.size()!= 0){
            return 500;
        }else{
            CoachType coachType = new CoachType();
            coachType.setName(name);
            coachType.setState(1);
            typeService.save(coachType);
            return 200;
        }
    }
    /**
     * 删除教练类型
     * @param
     * @return
     */
    @ResponseBody
    @RequestMapping("/coachType/delete")
    public Object delete(@RequestBody Integer id){
        CoachType coachType = new CoachType();
        coachType.setId(id);
        coachType.setState(3);
        return typeService.updateById(coachType);
    }
    /**
     * 修改教练类型
     * @param
     * @return
     */
    @ResponseBody
    @RequestMapping("/coachType/update")
    public Object update(@RequestBody CoachType coachType){
        List<CoachType> list = typeService.list(new QueryWrapper<CoachType>().eq("name", coachType.getName()));
        if (list.size()!= 0){
            return 500;
        }else{
            typeService.updateById(coachType);
            return 200;
        }
    }
}
cloud-server-account/src/main/java/com/dsh/account/entity/Coach.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@@ -72,6 +73,7 @@
     * 生日
     */
    @TableField("birthday")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    /**
     * 性别(1=男,2=女)
@@ -127,6 +129,7 @@
     * 添加时间
     */
    @TableField("insertTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date insertTime;
cloud-server-account/src/main/java/com/dsh/account/mapper/CoachMapper.java
@@ -2,6 +2,11 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.account.entity.Coach;
import com.dsh.account.model.query.coachQuery.CoachQuery;
import com.dsh.account.model.vo.CoachSerchVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
@@ -13,4 +18,7 @@
 */
public interface CoachMapper extends BaseMapper<Coach> {
    List<CoachSerchVO> listAll(@Param("query") CoachQuery query);
    Object changeState(@Param("ids") List<Integer> ids, @Param("state") Integer state);
}
cloud-server-account/src/main/java/com/dsh/account/model/query/coachQuery/CoachQuery.java
New file
@@ -0,0 +1,13 @@
package com.dsh.account.model.query.coachQuery;
import lombok.Data;
@Data
public class CoachQuery {
    private String province;
    private String city;
    private String name;
    private String phone;
    // 编辑页面回显使用
    private Integer id;
}
cloud-server-account/src/main/java/com/dsh/account/model/vo/CoachChangeStateVO.java
New file
@@ -0,0 +1,11 @@
package com.dsh.account.model.vo;
import lombok.Data;
import java.util.List;
@Data
public class CoachChangeStateVO {
    private List<Integer> ids;
    private Integer state;
}
cloud-server-account/src/main/java/com/dsh/account/model/vo/CoachSerchVO.java
New file
@@ -0,0 +1,105 @@
package com.dsh.account.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
 * <p>
 * 教练
 * </p>
 *
 * @author jqs
 * @since 2023-07-05
 */
@Data
public class CoachSerchVO {
    /**
     * 主键
     */
    private Integer id;
    /**
     * 省
     */
    private String province;
    /**
     * 省编号
     */
    private String provinceCode;
    /**
     * 市
     */
    private String city;
    /**
     * 市编号
     */
    private String cityCode;
    /**
     * 城市管理员id
     */
    private Integer cityManagerId;
    private String nameAndPhone;
    private String accountName;
    private String accountPhone;
    /**
     * 教练类型id
     */
    private Integer coachTypeId;
    private String  coachTypeName;
    /**
     * 姓名
     */
    private String name;
    /**
     * 生日
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    /**
     * 性别(1=男,2=女)
     */
    private Integer gender;
    /**
     * 电话
     */
    private String phone;
    /**
     * 身份证号码
     */
    private String idcard;
    /**
     * 身高(厘米)
     */
    private Double height;
    /**
     * 体重(KG)
     */
    private Double weight;
    /**
     * 毕业院校
     */
    private String graduateSchool;
    /**
     * 毕业证照片
     */
    private String diploma;
    /**
     * 资格证书(多个逗号分隔)
     */
    private String certificate;
    /**
     * 证书照片
     */
    private String certificateImg;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    private Integer state;
    /**
     * 添加时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date insertTime;
}
cloud-server-account/src/main/java/com/dsh/account/service/CoachService.java
@@ -2,6 +2,11 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.account.entity.Coach;
import com.dsh.account.model.query.coachQuery.CoachQuery;
import com.dsh.account.model.vo.CoachChangeStateVO;
import com.dsh.account.model.vo.CoachSerchVO;
import java.util.List;
/**
 * <p>
@@ -13,4 +18,7 @@
 */
public interface CoachService extends IService<Coach> {
    List<CoachSerchVO> listAll(CoachQuery query);
    Object changeState(CoachChangeStateVO vo);
}
cloud-server-account/src/main/java/com/dsh/account/service/ICityManagerService.java
@@ -3,9 +3,13 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.account.entity.CityManager;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2023/8/1 17:03
 */
public interface ICityManagerService extends IService<CityManager> {
    List<CityManager> listAll();
}
cloud-server-account/src/main/java/com/dsh/account/service/impl/CityManagerServiceImpl.java
@@ -6,10 +6,16 @@
import com.dsh.account.service.ICityManagerService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2023/8/1 17:04
 */
@Service
public class CityManagerServiceImpl extends ServiceImpl<CityManagerMapper, CityManager> implements ICityManagerService {
    @Override
    public List<CityManager> listAll() {
        return this.list();
    }
}
cloud-server-account/src/main/java/com/dsh/account/service/impl/CoachServiceImpl.java
@@ -3,8 +3,14 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.account.entity.Coach;
import com.dsh.account.mapper.CoachMapper;
import com.dsh.account.model.query.coachQuery.CoachQuery;
import com.dsh.account.model.vo.CoachChangeStateVO;
import com.dsh.account.model.vo.CoachSerchVO;
import com.dsh.account.service.CoachService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
@@ -16,5 +22,15 @@
 */
@Service
public class CoachServiceImpl extends ServiceImpl<CoachMapper, Coach> implements CoachService {
    @Autowired
    private CoachMapper coachMapper;
    @Override
    public List<CoachSerchVO> listAll(CoachQuery query) {
        return coachMapper.listAll(query);
    }
    @Override
    public Object changeState(CoachChangeStateVO vo) {
        return coachMapper.changeState(vo.getIds(),vo.getState());
    }
}
cloud-server-account/src/main/resources/mapper/CoachMapper.xml
@@ -1,6 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsh.account.mapper.CoachMapper">
    <update id="changeState">
        update t_coach set
        state = #{state}
        <where>
            <if test="ids != null and ids.size()>0">
                AND t_coach.id IN
                <foreach collection="ids" separator="," item="id" open="(" close=")">
                    #{id}
                </foreach>
            </if>
        </where>
    </update>
    <select id="listAll" resultType="com.dsh.account.model.vo.CoachSerchVO">
        select t1.*,t2.name accountName,t2.phone accountPhone,t3.name coachTypeName from t_coach t1
        left join t_city_manager t2 on t1.cityManagerId = t2.id
        left join t_coach_type t3 on t1.coachTypeId = t3.id
        <where>
            <if test="query.city!=null and query.city!= ''">
                and t1.city = #{query.city}
            </if>
            <if test="query.province!=null and query.province!= ''">
                and t1.province = #{query.province}
            </if>
            <if test="query.name!=null and query.name!= ''">
                AND t1.name LIKE concat('%',#{query.name},'%')
            </if>
             <if test="query.phone!=null and query.phone!= ''">
                and t1.phone LIKE concat('%',#{query.phone},'%')
            </if>
            <if test="query.id!=null and query.id!= ''">
                and t1.id LIKE concat('%',#{query.id},'%')
            </if>
            and t1.state != 3
        </where>
    </select>
</mapper>
cloud-server-activity/mb-cloud-activity.iml
@@ -7,6 +7,10 @@
    <facet type="web" name="Web">
      <configuration>
        <webroots />
        <sourceRoots>
          <root url="file://$MODULE_DIR$/src/main/java" />
          <root url="file://$MODULE_DIR$/src/main/resources" />
        </sourceRoots>
      </configuration>
    </facet>
  </component>
@@ -16,6 +20,7 @@
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
      <excludeFolder url="file://$MODULE_DIR$/target" />
    </content>
    <orderEntry type="inheritedJdk" />
@@ -133,6 +138,9 @@
    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" />
    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.3" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" />
@@ -147,9 +155,142 @@
    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.11.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" />
    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.22" level="project" />
    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.22" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.3" level="project" />
    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-jdbc-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-transaction-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-transaction-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-executor:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: io.vertx:vertx-mysql-client:4.2.3" level="project" />
    <orderEntry type="library" name="Maven: io.vertx:vertx-core:4.2.3" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-handler-proxy:4.1.54.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-socks:4.1.54.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.54.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-http2:4.1.54.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-resolver-dns:4.1.54.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-codec-dns:4.1.54.Final" level="project" />
    <orderEntry type="library" name="Maven: io.vertx:vertx-sql-client:4.2.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-parser-sql92:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-parser-engine:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-parser-spi:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-parser-statement:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.antlr:antlr4-runtime:4.9.2" level="project" />
    <orderEntry type="library" name="Maven: com.github.ben-manes.caffeine:caffeine:2.8.6" level="project" />
    <orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.7.0" level="project" />
    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.4.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-parser-mysql:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-parser-postgresql:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-parser-oracle:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-parser-sqlserver:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-parser-opengauss:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-authority-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-authority-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-single-table-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-single-table-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-route:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-traffic-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-common:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-util:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.groovy:groovy:4.0.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-binder:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-dialect-exception-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-traffic-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-context:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-distsql-parser:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-distsql-statement:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-translator-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-translator-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-standalone-mode-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-mode-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-schedule-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-lite-core:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-api:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-infra-common:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-registry-center:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-simple-executor:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-executor-kernel:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-error-handler-general:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-error-handler-spi:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-dataflow-executor:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-script-executor:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-exec:1.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-http-executor:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-tracing-rdb:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-tracing-api:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.6" level="project" />
    <orderEntry type="library" name="Maven: org.quartz-scheduler:quartz:2.3.2" level="project" />
    <orderEntry type="library" name="Maven: com.mchange:mchange-commons-java:0.2.15" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere.elasticjob:elasticjob-lite-lifecycle:3.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-standalone-mode-repository-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-standalone-mode-repository-jdbc-h2:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-standalone-mode-repository-jdbc-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-cluster-mode-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-cluster-mode-repository-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sharding-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sharding-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-data-pipeline-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-data-pipeline-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-cluster-mode-repository-zookeeper-curator:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.curator:curator-framework:4.0.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.curator:curator-client:5.1.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.zookeeper:zookeeper:3.6.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.zookeeper:zookeeper-jute:3.6.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.yetus:audience-annotations:0.5.0" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-native-epoll:4.1.54.Final" level="project" />
    <orderEntry type="library" name="Maven: io.netty:netty-transport-native-unix-common:4.1.54.Final" level="project" />
    <orderEntry type="library" name="Maven: log4j:log4j:1.2.17" level="project" />
    <orderEntry type="library" name="Maven: org.apache.curator:curator-recipes:2.12.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-rewrite:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sql-translator-native-provider:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-merge:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.calcite:calcite-linq4j:1.31.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.calcite.avatica:avatica-core:1.22.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.calcite.avatica:avatica-metrics:1.22.0" level="project" />
    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.5.1" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.httpcomponents.client5:httpclient5:5.1.3" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.httpcomponents.core5:httpcore5-h2:5.1.3" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.httpcomponents.core5:httpcore5:5.1.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-system-datetime:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-datetime-spi:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sharding-cosid:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: me.ahoo.cosid:cosid-core:1.14.4" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-sharding-nanoid:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: com.aventrix.jnanoid:jnanoid:2.0.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-readwrite-splitting-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-readwrite-splitting-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-db-discovery-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-db-discovery-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-db-discovery-mysql:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-db-discovery-opengauss:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-encrypt-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-encrypt-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-encrypt-sm:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.70" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-shadow-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-shadow-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-federation-executor:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-federation-optimizer:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.calcite:calcite-core:1.31.0" level="project" />
    <orderEntry type="library" name="Maven: com.esri.geometry:esri-geometry-api:2.2.0" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.3" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: com.google.uzaygezen:uzaygezen-core:0.2" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: com.yahoo.datasketches:sketches-core:0.9.0" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: com.yahoo.datasketches:memory:0.9.0" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: net.hydromatic:aggdesigner-algorithm:6.0" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.commons:commons-dbcp2:2.7.0" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.codehaus.janino:commons-compiler:3.1.2" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.codehaus.janino:janino:3.1.2" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-parser-core:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-parser-api:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.shardingsphere:shardingsphere-infra-parser:5.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.4" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: com.h2database:h2:1.4.200" level="project" />
    <orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.30" level="project" />
    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
    <orderEntry type="library" name="Maven: commons-httpclient:commons-httpclient:3.1" level="project" />
    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpmime:4.5.2" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:2.2.1.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-client:1.2.1" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-common:1.2.1" level="project" />
@@ -157,7 +298,6 @@
    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.10" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-api:1.2.1" level="project" />
    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.58" level="project" />
    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.3" level="project" />
    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.3" level="project" />
    <orderEntry type="library" name="Maven: io.prometheus:simpleclient:0.5.0" level="project" />
@@ -170,7 +310,6 @@
    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter:2.2.6.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-rsa:1.0.9.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.59" level="project" />
    <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.59" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-ribbon:2.2.6.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-archaius:2.2.6.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-archaius:2.2.6.RELEASE" level="project" />
@@ -186,8 +325,6 @@
    <orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty:0.4.9" level="project" />
    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-core:2.3.0" level="project" />
    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-httpclient:2.3.0" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey:jersey-client:1.19.1" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey:jersey-core:1.19.1" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: javax.ws.rs:jsr311-api:1.1.1" level="project" />
@@ -207,7 +344,6 @@
    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator-autoconfigure:2.3.6.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator:2.3.6.RELEASE" level="project" />
@@ -222,10 +358,10 @@
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.3.6.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.3.6.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.3.6.RELEASE" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: net.minidev:json-smart:2.3" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
    <orderEntry type="library" scope="RUNTIME" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.16.1" level="project" />
@@ -237,7 +373,7 @@
    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.6.3" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.6.3" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.junit.vintage:junit-vintage-engine:5.6.3" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
    <orderEntry type="library" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.6.3" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.13.1" level="project" />
    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.3.3" level="project" />
cloud-server-activity/pom.xml
@@ -95,10 +95,7 @@
                </executions>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <repositories>
cloud-server-activity/src/main/java/com/dsh/activity/controller/BenefitVideoController.java
@@ -2,11 +2,11 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.activity.entity.BenefitsVideoClassification;
import com.dsh.activity.entity.BenefitsVideos;
import com.dsh.activity.model.BenefitsVideoClassificationListVo;
import com.dsh.activity.model.BenefitsVideosInfoVo;
import com.dsh.activity.model.BenefitsVideosListVo;
import com.dsh.activity.model.*;
import com.dsh.activity.service.BenefitsVideosService;
import com.dsh.activity.service.IBenefitsVideoClassificationService;
import com.dsh.activity.util.ResultUtil;
import com.dsh.activity.util.TokenUtil;
import io.swagger.annotations.ApiImplicitParam;
@@ -24,12 +24,95 @@
    @Autowired
    private BenefitsVideosService bfvService;
    @Autowired
    private IBenefitsVideoClassificationService benefitsVideoClassificationService;
    @Autowired
    private TokenUtil tokenUtil;
    /**
     * 获取所有福利视频分类
     * @return
     */
    @RequestMapping("/base/benefitVideo/list")
    public List<TQueryBenefitsVO> listAll(@RequestBody QueryBenefitsVedioVO vo){
        return benefitsVideoClassificationService.listAll(vo);
    }
    /**
     * 查看详情/编辑
     * @return
     */
    @RequestMapping("/base/benefitVideo/getById")
    public BenefitsVideoClassification getById(@RequestBody Integer id){
        return benefitsVideoClassificationService.getById(id);
    }
    /**
     * 根据分类id查询福利视频分类下的视频
     * @return
     */
    @RequestMapping("/base/benefitVideo/getBenefitVideoById")
    @ResponseBody
    public List<BenefitsVideos> getBenefitVideoById(@RequestBody Integer id){
        return bfvService.getBenefitVideoById(id);
    }
    /**
     * 根据福利视频id获取福利视频信息
     * @return
     */
    @RequestMapping("/base/benefitVideo/getBenefitVideosById")
    @ResponseBody
    public BenefitsVideos getBenefitVideosById(@RequestBody Integer id){
        return bfvService.getById(id);
    }
    /**
     * 添加/修改福利视频分类
     * @return
     */
    @RequestMapping("/base/benefitVideo/add")
    public Object addSite(@RequestBody BenefitsVideoClassification site){
        QueryWrapper<BenefitsVideoClassification> wrapper = new QueryWrapper<BenefitsVideoClassification>().eq("name", site.getName());
        if (benefitsVideoClassificationService.list(wrapper).size()==0){
            if(site.getId()!= null ){
                benefitsVideoClassificationService.updateById(site);
                return 200;
            }else {
                return benefitsVideoClassificationService.save(site);
            }
        }else return 500;
    }
    /**
     * 添加/修改视频详情
     * @return
     */
    @RequestMapping("/base/addBenefitsVideos")
    public Object addBenefitsVideos(@RequestBody BenefitsVideos site){
        // 通过分类Id和课程id 查询视频
        List<BenefitsVideos> result = bfvService.getBybIdAndcId(site.getBenefitsVideoClassificationId(),site.getCourseId());
        if (result.size()>0){
            return 500;
        }
        if (site.getId() == null){
            return bfvService.save(site);
        }else {
            return bfvService.updateById(site);
        }
    }
    /**
     * 上/下架、删除福利视频分类 type=1为上架 2为下架 3为删除
     */
    @RequestMapping("/base/benefitVideo/changeState")
    public Object changeState(@RequestBody BenefitsVedioChangeStateVO vo){
        return benefitsVideoClassificationService.changeState(vo);
    }
    @PostMapping("base/benefitVideo/getList")
    public BenefitsVideos getVideosWithIds(@RequestBody Integer id){
cloud-server-activity/src/main/java/com/dsh/activity/controller/BodySideAppointmentsController.java
New file
@@ -0,0 +1,101 @@
package com.dsh.activity.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.activity.entity.BenefitsVideoClassification;
import com.dsh.activity.entity.BenefitsVideos;
import com.dsh.activity.entity.BodySideAppointment;
import com.dsh.activity.feignclient.other.StoreClient;
import com.dsh.activity.feignclient.other.model.Store;
import com.dsh.activity.model.*;
import com.dsh.activity.service.BenefitsVideosService;
import com.dsh.activity.service.BodySideAppointmentService;
import com.dsh.activity.service.IBenefitsVideoClassificationService;
import com.dsh.activity.util.ResultUtil;
import com.dsh.activity.util.TokenUtil;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
/**
 * 体测预约管理控制器
 */
@RestController
@RequestMapping("")
public class BodySideAppointmentsController {
    @Autowired
    private BodySideAppointmentService bodySideAppointmentService;
    @Autowired
    private StoreClient storeClient;
    /**
     * 获取所有体测预约记录
     * @return
     */
    @RequestMapping("/base/bodySideAppointments/listAll")
    public List<QueryBodySideAppointmentVO> listAll(@RequestBody QueryBodySideAppointment vo){
        List<QueryBodySideAppointmentVO> queryBodySideAppointmentVOS = bodySideAppointmentService.listAll(vo);
        List<Integer> list = new ArrayList<>();
        for (QueryBodySideAppointmentVO queryBodySideAppointmentVO : queryBodySideAppointmentVOS) {
            list.add(queryBodySideAppointmentVO.getStoreId());
        }
        list.add(1);
        list.add(2);
        List<Store> stores = storeClient.queryStoreByIds(list);
        for (QueryBodySideAppointmentVO queryBodySideAppointmentVO : queryBodySideAppointmentVOS) {
            for (Store store : stores) {
                if (queryBodySideAppointmentVO.getStoreId() == store.getId()){
                    queryBodySideAppointmentVO.setStoreName(store.getName());
                    break;
                }
            }
        }
        return queryBodySideAppointmentVOS;
    }
    /**
     * 增加/修改体测预约记录
     * @return
     */
    @RequestMapping("/base/bodySideAppointments/addBodySideAppointments")
    public Object addBodySideAppointments(@RequestBody QueryBodySideAppointmentVO vo){
        BodySideAppointment bodySideAppointment = new BodySideAppointment();
        BeanUtils.copyProperties(vo,bodySideAppointment);
        bodySideAppointment.setStatus(1);
        bodySideAppointment.setState(1);
        bodySideAppointment.setInsertTime(new Date());
        if (vo.getId() != null){
           return bodySideAppointmentService.updateById(bodySideAppointment);
        }else {
            return bodySideAppointmentService.save(bodySideAppointment);
        }
    }
    /**
     * 手动标记用户已经到店并完成体测
     * @return
     */
    @RequestMapping("/base/bodySideAppointments/changeState")
    public Object changeState(@RequestBody List<Integer> ids){
        return bodySideAppointmentService.changeState(ids);
    }
    /**
     * 通过id获取体测预约记录
     * @return
     */
    @RequestMapping("/base/bodySideAppointments/getInfoById")
    public BodySideAppointment getInfoById(@RequestBody Integer id){
        return bodySideAppointmentService.getById(id);
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideoClassification.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@@ -39,5 +40,11 @@
     * 添加时间
     */
    @TableField("insertTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date insertTime;
    /**
     * 状态 1=正常 2=下架 3=删除
     */
    @TableField("state")
    private Integer state;
}
cloud-server-activity/src/main/java/com/dsh/activity/entity/BenefitsVideos.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@@ -57,8 +58,8 @@
     * 添加时间
     */
    @TableField("insertTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date insertTime;
    @Override
    protected Serializable pkVal() {
cloud-server-activity/src/main/java/com/dsh/activity/entity/BodySideAppointment.java
New file
@@ -0,0 +1,49 @@
package com.dsh.activity.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
@TableName("t_body_side_appointments")
public class BodySideAppointment {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @TableField("province")
    private String province;
    @TableField("provinceCode")
    private String provinceCode;
    @TableField("city")
    private String city;
    @TableField("cityCode")
    private String cityCode;
    @TableField("storeId")
    private Integer storeId;
    @TableField("parentName")
    private String parentName;
    @TableField("phone")
    private String phone;
    @TableField("learnerName")
    private String learnerName;
    @TableField("learnerAge")
    private Integer learnerAge;
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    @TableField("birthday")
    private Date birthday;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @TableField("appointmentTime")
    private Date appointmentTime;
    @TableField("status")
    private Integer status;
    @TableField("state")
    private Integer state;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @TableField("insertTime")
    private Date insertTime;
}
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/other/StoreClient.java
@@ -4,6 +4,7 @@
import com.dsh.activity.feignclient.other.model.StoreDetailOfCourse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@@ -17,5 +18,5 @@
    @PostMapping("/store/queryStoreByIds")
    List<Store> queryStoreByIds(List<Integer> ids);
    List<Store> queryStoreByIds(@RequestBody List<Integer> ids);
}
cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideoClassificationMapper.java
@@ -2,10 +2,18 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.activity.entity.BenefitsVideoClassification;
import com.dsh.activity.model.QueryBenefitsVedioVO;
import com.dsh.activity.model.TQueryBenefitsVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * @author zhibing.pu
 * @date 2023/7/11 17:30
 */
public interface BenefitsVideoClassificationMapper extends BaseMapper<BenefitsVideoClassification> {
    List<TQueryBenefitsVO> listAll(@Param("query") QueryBenefitsVedioVO vo);
    Object changeState(@Param("ids") List<Integer> ids,@Param("type") Integer state);
}
cloud-server-activity/src/main/java/com/dsh/activity/mapper/BenefitsVideosMapper.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.activity.entity.BenefitsVideos;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -29,4 +30,8 @@
     */
    List<Map<String, Object>> queryBenefitsVideosList(@Param("uid") Integer uid, @Param("classificationId") Integer classificationId,
                                                      @Param("ids") List<Integer> ids, @Param("pageSize") Integer pageSize, @Param("pageNo") Integer pageNo);
    List<BenefitsVideos> getBenefitVideoById(@Param("id")Integer id);
    List<BenefitsVideos> getBybIdAndcId(@Param("bId") Integer benefitsVideoClassificationId,@Param("cId") Integer courseId);
}
cloud-server-activity/src/main/java/com/dsh/activity/mapper/BodySideAppointmentMapper.java
New file
@@ -0,0 +1,17 @@
package com.dsh.activity.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.activity.entity.BodySideAppointment;
import com.dsh.activity.model.QueryBodySideAppointment;
import com.dsh.activity.model.QueryBodySideAppointmentVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface BodySideAppointmentMapper extends BaseMapper<BodySideAppointment> {
    List<QueryBodySideAppointmentVO> listAll(@Param("query") QueryBodySideAppointment vo);
    int changeState(@Param("ids") List<Integer> ids);
}
cloud-server-activity/src/main/java/com/dsh/activity/model/BenefitsVedioChangeStateVO.java
New file
@@ -0,0 +1,12 @@
package com.dsh.activity.model;
import lombok.Data;
import java.util.List;
@Data
public class BenefitsVedioChangeStateVO {
    private List<Integer> ids;
    private Integer state;
}
cloud-server-activity/src/main/java/com/dsh/activity/model/QueryBenefitsVedioVO.java
New file
@@ -0,0 +1,11 @@
package com.dsh.activity.model;
import lombok.Data;
/**
 * 接收查询参数VO
 */
@Data
public class QueryBenefitsVedioVO {
    private Integer position;
    private String name;
}
cloud-server-activity/src/main/java/com/dsh/activity/model/QueryBodySideAppointment.java
New file
@@ -0,0 +1,16 @@
package com.dsh.activity.model;
import lombok.Data;
/**
 * 接收查询参数VO
 */
@Data
public class QueryBodySideAppointment {
    private String phone;
    private String parentName;
    // 1 = 待体测 2 = 已体测
    private Integer state;
    // 1=今日内预约 2=明日预约 7=七日内
    private Integer day;
}
cloud-server-activity/src/main/java/com/dsh/activity/model/QueryBodySideAppointmentVO.java
New file
@@ -0,0 +1,33 @@
package com.dsh.activity.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
 * 体测预约管理查询VO
 */
@Data
public class QueryBodySideAppointmentVO {
    private Integer id;
    private String province;
    private String provinceCode;
    private String city;
    private String cityCode;
    private Integer storeId;
    private String storeName;
    private String parentName;
    private String phone;
    private String learnerName;
    private Integer learnerAge;
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    private Date birthday;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GMT+8")
    private Date appointmentTime;
    private Integer status;
    private Integer state;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date insertTime;
    private String provinceAndCity;
}
cloud-server-activity/src/main/java/com/dsh/activity/model/TQueryBenefitsVO.java
New file
@@ -0,0 +1,18 @@
package com.dsh.activity.model;
import lombok.Data;
/**
 * 福利视频分类列表查询返回VO
 */
@Data
public class TQueryBenefitsVO {
    private Integer id;
    private String name;
    // 位置(1=线上课得积分,2=看视频得奖励)
    private Integer position;
    private Integer sort;
    private Integer count;
    private Integer state;
    private Integer courseId;
}
cloud-server-activity/src/main/java/com/dsh/activity/service/BenefitsVideosService.java
@@ -2,9 +2,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.activity.entity.BenefitsVideos;
import com.dsh.activity.model.BenefitsVideoClassificationListVo;
import com.dsh.activity.model.BenefitsVideosInfoVo;
import com.dsh.activity.model.BenefitsVideosListVo;
import com.dsh.activity.model.*;
import java.util.List;
@@ -57,4 +55,9 @@
     * @throws Exception
     */
    void receiveAward(Integer uid, Integer id) throws Exception;
    List<BenefitsVideos> getBenefitVideoById(Integer id);
    List<BenefitsVideos> getBybIdAndcId(Integer benefitsVideoClassificationId, Integer courseId);
}
cloud-server-activity/src/main/java/com/dsh/activity/service/BodySideAppointmentService.java
New file
@@ -0,0 +1,16 @@
package com.dsh.activity.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.activity.entity.BodySideAppointment;
import com.dsh.activity.model.QueryBodySideAppointment;
import com.dsh.activity.model.QueryBodySideAppointmentVO;
import java.util.List;
public interface BodySideAppointmentService extends IService<BodySideAppointment> {
    List<QueryBodySideAppointmentVO> listAll(QueryBodySideAppointment vo);
    Object changeState(List<Integer> ids);
}
cloud-server-activity/src/main/java/com/dsh/activity/service/IBenefitsVideoClassificationService.java
@@ -2,10 +2,18 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.activity.entity.BenefitsVideoClassification;
import com.dsh.activity.model.BenefitsVedioChangeStateVO;
import com.dsh.activity.model.QueryBenefitsVedioVO;
import com.dsh.activity.model.TQueryBenefitsVO;
import java.util.List;
/**
 * @author zhibing.pu
 * @date 2023/7/11 17:31
 */
public interface IBenefitsVideoClassificationService extends IService<BenefitsVideoClassification> {
    List<TQueryBenefitsVO> listAll(QueryBenefitsVedioVO vo);
    Object changeState(BenefitsVedioChangeStateVO vo);
}
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideoClassificationServiceImpl.java
@@ -3,8 +3,14 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.activity.entity.BenefitsVideoClassification;
import com.dsh.activity.mapper.BenefitsVideoClassificationMapper;
import com.dsh.activity.model.BenefitsVedioChangeStateVO;
import com.dsh.activity.model.QueryBenefitsVedioVO;
import com.dsh.activity.model.TQueryBenefitsVO;
import com.dsh.activity.service.IBenefitsVideoClassificationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * @author zhibing.pu
@@ -12,4 +18,17 @@
 */
@Service
public class BenefitsVideoClassificationServiceImpl extends ServiceImpl<BenefitsVideoClassificationMapper, BenefitsVideoClassification> implements IBenefitsVideoClassificationService {
    @Autowired
    private BenefitsVideoClassificationMapper benefitsVideoClassificationMapper;
    @Override
    public List<TQueryBenefitsVO> listAll(QueryBenefitsVedioVO vo) {
        return benefitsVideoClassificationMapper.listAll(vo);
    }
    @Override
    public Object changeState(BenefitsVedioChangeStateVO vo) {
        List<Integer> ids = vo.getIds();
        Integer state = vo.getState();
        return benefitsVideoClassificationMapper.changeState(ids,state);
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BenefitsVideosServiceImpl.java
@@ -10,14 +10,14 @@
import com.dsh.activity.feignclient.account.model.SaveUserIntegralChangesVo;
import com.dsh.activity.feignclient.course.CourseClient;
import com.dsh.activity.feignclient.course.model.Course;
import com.dsh.activity.mapper.BenefitsVideoClassificationMapper;
import com.dsh.activity.mapper.BenefitsVideosMapper;
import com.dsh.activity.model.BenefitsVideoClassificationListVo;
import com.dsh.activity.model.BenefitsVideosInfoVo;
import com.dsh.activity.model.BenefitsVideosListVo;
import com.dsh.activity.model.*;
import com.dsh.activity.service.BenefitsVideosService;
import com.dsh.activity.service.IBenefitsVideoClassificationService;
import com.dsh.activity.service.IUserBenefitsVideosService;
import com.dsh.activity.util.ToolUtil;
import org.aspectj.weaver.ast.Var;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -51,6 +51,10 @@
    @Resource
    private UserIntegralChangesClient userIntegralChangesClient;
    @Autowired
    private BenefitsVideoClassificationMapper benefitsVideoClassificationMapper;
    @Autowired
    private BenefitsVideosMapper benefitsVideosMapper;
@@ -183,4 +187,16 @@
            userIntegralChangesClient.saveUserIntegralChanges(vo);
        }
    }
    @Override
    public List<BenefitsVideos> getBenefitVideoById(Integer id) {
        return benefitsVideosMapper.getBenefitVideoById(id);
    }
    @Override
    public List<BenefitsVideos> getBybIdAndcId(Integer benefitsVideoClassificationId, Integer courseId) {
        return  benefitsVideosMapper.getBybIdAndcId(benefitsVideoClassificationId,courseId);
    }
}
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/BodySideAppointmentServiceImpl.java
New file
@@ -0,0 +1,33 @@
package com.dsh.activity.service.impl;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.activity.entity.BenefitsVideos;
import com.dsh.activity.entity.BodySideAppointment;
import com.dsh.activity.mapper.BenefitsVideosMapper;
import com.dsh.activity.mapper.BodySideAppointmentMapper;
import com.dsh.activity.model.QueryBodySideAppointment;
import com.dsh.activity.model.QueryBodySideAppointmentVO;
import com.dsh.activity.service.BenefitsVideosService;
import com.dsh.activity.service.BodySideAppointmentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class BodySideAppointmentServiceImpl extends ServiceImpl<BodySideAppointmentMapper, BodySideAppointment> implements BodySideAppointmentService {
    @Autowired
    private BodySideAppointmentMapper bodySideAppointmentMapper;
    @Override
    public List<QueryBodySideAppointmentVO> listAll(QueryBodySideAppointment vo) {
       return bodySideAppointmentMapper.listAll(vo);
    }
    @Override
    public Object changeState(List<Integer> ids) {
      return bodySideAppointmentMapper.changeState(ids);
    }
}
cloud-server-activity/src/main/resources/mapper/BenefitsVideoClassificationMapper.xml
@@ -2,5 +2,32 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsh.activity.mapper.BenefitsVideoClassificationMapper">
    <update id="changeState">
        update t_benefits_video_classification set
        state = #{type}
        <where>
            <if test="ids != null and ids.size()>0">
                AND t_benefits_video_classification.id IN
                <foreach collection="ids" separator="," item="id" open="(" close=")">
                    #{id}
                </foreach>
            </if>
        </where>
    </update>
    <select id="listAll" resultType="com.dsh.activity.model.TQueryBenefitsVO">
        select t1.*,COUNT(t2.id) AS `count`,t2.courseId courseId from t_benefits_video_classification t1
        left join t_benefits_videos t2 on t1.id = t2.benefitsVideoClassificationId
        <where>
            <if test="query.position!=null and query.position!= ''">
                and t1.position = #{query.position}
            </if>
            <if test="query.name!=null and query.name!= ''">
                and t1.name like concat('%',#{query.name},'%')
            </if>
            AND (t2.id IS NULL OR t2.state != 3 OR t2.state != 2)
        </where>
        GROUP BY t1.id
        order by t1.sort DESC
    </select>
</mapper>
cloud-server-activity/src/main/resources/mapper/BenefitsVideosMapper.xml
@@ -42,5 +42,13 @@
            order by insertTime desc)
        ) as a limit #{pageSize}, #{pageNo}
    </select>
    <select id="getBenefitVideoById" resultType="com.dsh.activity.entity.BenefitsVideos">
        select * from t_benefits_videos where
        t_benefits_videos.benefitsVideoClassificationId = #{id}
    </select>
    <select id="getBybIdAndcId" resultType="com.dsh.activity.entity.BenefitsVideos">
        select * from t_benefits_videos
        where benefitsVideoClassificationId=#{bId} and courseId= #{cId}
    </select>
</mapper>
cloud-server-activity/src/main/resources/mapper/BodySideAppointmentsMapper.xml
New file
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsh.activity.mapper.BodySideAppointmentMapper">
    <update id="changeState">
        update t_body_side_appointments set
        status = 2
        <where>
            <if test="ids != null and ids.size()>0">
                AND t_body_side_appointments.id IN
                <foreach collection="ids" separator="," item="id" open="(" close=")">
                    #{id}
                </foreach>
            </if>
        </where>
    </update>
    <select id="listAll" resultType="com.dsh.activity.model.QueryBodySideAppointmentVO">
            select t1.* from t_body_side_appointments t1
            <where>
                <if test="query.phone!=null and query.phone!= ''">
                    and t1.phone like concat('%',#{query.phone},'%')
                </if>
                <if test="query.parentName!=null and query.parentName!= ''">
                    t1.parentName like concat('%',#{query.parentName},'%')
                </if>
                <if test="query.state!=null and query.state!= ''">
                    and t1.state = #{query.state}
                </if>
            </where>
    </select>
</mapper>
cloud-server-auth/mb-cloud-auth.iml
@@ -120,12 +120,12 @@
    <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.59" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-security:2.2.4.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-security:2.3.6.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
    <orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-oauth2:2.2.4.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.1.2.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-core:2.3.0.1" level="project" />
    <orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-impl:2.3.0.1" level="project" />
    <orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
    <orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-jwt:1.0.10.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework.security.oauth:spring-security-oauth2:2.3.6.RELEASE" level="project" />
    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.11.RELEASE" level="project" />
cloud-server-competition/pom.xml
@@ -110,10 +110,6 @@
                </executions>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <repositories>
cloud-server-course/mb-cloud-course.iml
@@ -9,16 +9,6 @@
        <webroots />
      </configuration>
    </facet>
    <facet type="jpa" name="JPA">
      <configuration>
        <setting name="validation-enabled" value="true" />
        <setting name="provider-name" value="Hibernate" />
        <datasource-mapping>
          <factory-entry name="entityManagerFactory" />
        </datasource-mapping>
        <naming-strategy-map />
      </configuration>
    </facet>
  </component>
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <output url="file://$MODULE_DIR$/target/classes" />
cloud-server-course/pom.xml
@@ -129,10 +129,7 @@
                </executions>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <repositories>
cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java
@@ -9,6 +9,9 @@
import com.dsh.course.entity.TCoursePackageType;
import com.dsh.course.feignclient.model.ExerciseVideo;
import com.dsh.course.model.*;
import com.dsh.course.model.dto.CourseChangeStateDTO;
import com.dsh.course.model.dto.TQueryBenefitsVideosDTO;
import com.dsh.course.model.vo.TQueryBenefitsVideosVO;
import com.dsh.course.service.TCoursePackagePaymentService;
import com.dsh.course.service.TCoursePackageService;
import com.dsh.course.service.TCoursePackageTypeService;
@@ -60,10 +63,27 @@
    @Autowired
    private TCoursePackagePaymentService coursePackagePaymentService;
    /**
     * 上/下架 1为上架 2为下架 3为删除
     *
     * @return
     */
    @RequestMapping("/base/course/changeState")
    @ResponseBody
    public Object changeState(@RequestBody CourseChangeStateDTO dto){
        return courseService.changeState(dto);
    }
    /**
     * 通过课程ids获取课程
     * @return
     */
    @RequestMapping("/base/course/getCourseByCourseIds")
    public List<TQueryBenefitsVideosVO> getCourseByCourseIds(@RequestBody TQueryBenefitsVideosDTO query){
        return courseService.getCourseByCourseIds(query);
    }
    @PostMapping("/base/course/queryList")
    public List<ExerciseVideo> queryStuCourseAfterVideos(@RequestBody List<Integer> courseIds){
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageTypeController.java
@@ -1,13 +1,16 @@
package com.dsh.course.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.course.entity.TCoursePackage;
import com.dsh.course.entity.TCoursePackageType;
import com.dsh.course.model.vo.CoursePackageTypeVO;
import com.dsh.course.service.TCoursePackageService;
import com.dsh.course.service.TCoursePackageTypeService;
import net.bytebuddy.asm.Advice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
/**
@@ -20,7 +23,72 @@
    @Autowired
    private TCoursePackageTypeService coursePackageTypeService;
    @Autowired
    private TCoursePackageService tCoursePackageService;
    /**
     * 新增课包类型
     */
    @ResponseBody
    @RequestMapping("/coursePackageType/add")
    public Object add(@RequestBody String name){
        List<TCoursePackageType> list = coursePackageTypeService.list(new QueryWrapper<TCoursePackageType>().eq("name", name).ne("state",3));
        if (list.size()!= 0){
            return 500;
        }else{
            TCoursePackageType coachType = new TCoursePackageType();
            coachType.setName(name);
            coachType.setState(1);
            coachType.setInsertTime(new Date());
            coursePackageTypeService.save(coachType);
            return 200;
        }
    }
    /**
     * 修改课包类型
     * @param
     * @return
     */
    @ResponseBody
    @RequestMapping("/coursePackageType/update")
    public Object update(@RequestBody CoursePackageTypeVO vo){
        List<TCoursePackageType> list = coursePackageTypeService.list(new QueryWrapper<TCoursePackageType>().eq("name", vo.getName()));
        if (list.size()!= 0){
            return 500;
        }else{
            TCoursePackageType tCoursePackageType = new TCoursePackageType();
            tCoursePackageType.setId(vo.getId());
            tCoursePackageType.setName(vo.getName());
            coursePackageTypeService.updateById(tCoursePackageType);
            return 200;
        }
    }
    /**
     * 删除课包类型
     * @param
     * @return
     */
    @ResponseBody
    @RequestMapping("/coursePackageType/delete")
    public Object delete(@RequestBody CoursePackageTypeVO vo){
        Integer id = vo.getId();
        QueryWrapper<TCoursePackage> coursePackageTypeId = new QueryWrapper<TCoursePackage>().eq("coursePackageTypeId", id);
        List<TCoursePackage> list = tCoursePackageService.list(coursePackageTypeId);
        // 500表明当前课包类型正在被使用不能删除
        if (list.size()>0){
            return 500;
        }else{
            TCoursePackageType tCoursePackageType = new TCoursePackageType();
            tCoursePackageType.setId(vo.getId());
            tCoursePackageType.setName(vo.getName());
            tCoursePackageType.setState(3);
            coursePackageTypeService.updateById(tCoursePackageType);
            return 200;
        }
    }
    /**
     * 获取课包所有类型
@@ -29,6 +97,7 @@
    @ResponseBody
    @PostMapping("/coursePackageType/queryAllCoursePackageType")
    public List<TCoursePackageType> queryAllCoursePackageType(){
        return coursePackageTypeService.list();
        QueryWrapper<TCoursePackageType> state = new QueryWrapper<TCoursePackageType>().ne("state", 3);
        return coursePackageTypeService.list(state);
    }
}
cloud-server-course/src/main/java/com/dsh/course/mapper/TCourseMapper.java
@@ -4,6 +4,9 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsh.course.entity.TCourse;
import com.dsh.course.model.QueryCourseList;
import com.dsh.course.model.dto.CourseChangeStateDTO;
import com.dsh.course.model.dto.TQueryBenefitsVideosDTO;
import com.dsh.course.model.vo.TQueryBenefitsVideosVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -29,4 +32,7 @@
     */
    List<Map<String, Object>> queryCourseList(Page<Map<String, Object>> page, @Param("item") QueryCourseList queryCourseList);
    List<TQueryBenefitsVideosVO> getCourseByCourseIds(@Param("query") TQueryBenefitsVideosDTO query);
    int changeState(@Param("ids") List<Integer> ids ,@Param("state") Integer state);
}
cloud-server-course/src/main/java/com/dsh/course/model/dto/CourseChangeStateDTO.java
New file
@@ -0,0 +1,11 @@
package com.dsh.course.model.dto;
import lombok.Data;
import java.util.List;
@Data
public class CourseChangeStateDTO {
    private List<Integer> ids;
    private Integer state;
}
cloud-server-course/src/main/java/com/dsh/course/model/dto/TQueryBenefitsVideosDTO.java
New file
@@ -0,0 +1,20 @@
package com.dsh.course.model.dto;
import lombok.Data;
import java.util.List;
/**
 * 接收视频详情列表查询参数DTO
 */
@Data
public class TQueryBenefitsVideosDTO {
    // 课程id
    private List<Integer> coursIds;
    // 视频名称
    private String name;
    // 视频类型
    private Integer type;
    // 1上架 2下架 3已失效
    private Integer state;
}
cloud-server-course/src/main/java/com/dsh/course/model/vo/CoursePackageTypeVO.java
New file
@@ -0,0 +1,12 @@
package com.dsh.course.model.vo;
import lombok.Data;
import javax.swing.plaf.nimbus.State;
@Data
public class CoursePackageTypeVO {
    private Integer id;
    private String name;
    private Integer state;
}
cloud-server-course/src/main/java/com/dsh/course/model/vo/TQueryBenefitsVideosVO.java
New file
@@ -0,0 +1,26 @@
package com.dsh.course.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
 * 视频详情列表查询返回VO
 */
@Data
public class TQueryBenefitsVideosVO {
    private Integer id;
    private String name;
    private String introduce;
    private String coverDrawing;
    private String introductionDrawing;
    private String courseVideo;
    private Integer state;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date insertTime;
    private Integer integral;
    private Integer type;
    // 福利视频ID
    private Integer benefitsVideosId;
}
cloud-server-course/src/main/java/com/dsh/course/service/TCourseService.java
@@ -4,6 +4,9 @@
import com.dsh.course.entity.TCourse;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.course.model.QueryCourseList;
import com.dsh.course.model.dto.CourseChangeStateDTO;
import com.dsh.course.model.dto.TQueryBenefitsVideosDTO;
import com.dsh.course.model.vo.TQueryBenefitsVideosVO;
import java.util.List;
import java.util.Map;
@@ -26,4 +29,8 @@
     * @return
     */
    List<Map<String, Object>> queryCourseList(Page<Map<String, Object>> page, QueryCourseList queryCourseList);
    List<TQueryBenefitsVideosVO> getCourseByCourseIds(TQueryBenefitsVideosDTO query);
    Object changeState(CourseChangeStateDTO dto);
}
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCourseServiceImpl.java
@@ -4,10 +4,15 @@
import com.dsh.course.entity.TCourse;
import com.dsh.course.mapper.TCourseMapper;
import com.dsh.course.model.QueryCourseList;
import com.dsh.course.model.dto.CourseChangeStateDTO;
import com.dsh.course.model.dto.TQueryBenefitsVideosDTO;
import com.dsh.course.model.vo.TQueryBenefitsVideosVO;
import com.dsh.course.service.TCourseService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -22,7 +27,8 @@
 */
@Service
public class TCourseServiceImpl extends ServiceImpl<TCourseMapper, TCourse> implements TCourseService {
    @Autowired
    private TCourseMapper courseMapper;
    /**
     * 获取课程管理列表
@@ -34,4 +40,16 @@
    public List<Map<String, Object>> queryCourseList(Page<Map<String, Object>> page, QueryCourseList queryCourseList) {
        return this.baseMapper.queryCourseList(page, queryCourseList);
    }
    @Override
    public List<TQueryBenefitsVideosVO> getCourseByCourseIds(TQueryBenefitsVideosDTO query) {
        return courseMapper.getCourseByCourseIds(query);
    }
    @Override
    public Object changeState(CourseChangeStateDTO dto) {
        List<Integer> ids = dto.getIds();
        return courseMapper.changeState(ids,dto.getState());
    }
}
cloud-server-course/src/main/resources/mapper/TCourseMapper.xml
@@ -14,7 +14,18 @@
        <result column="state" property="state" />
        <result column="insertTime" property="insertTime" />
    </resultMap>
    <update id="changeState">
            update t_course set
            state = #{state}
            <where>
                <if test="ids != null and ids.size()>0">
                    AND t_course.id IN
                    <foreach collection="ids" separator="," item="id" open="(" close=")">
                        #{id}
                    </foreach>
                </if>
            </where>
    </update>
    <select id="queryCourseList" resultType="map">
@@ -27,4 +38,25 @@
        </if>
        order by insertTime desc
    </select>
    <select id="getCourseByCourseIds" resultType="com.dsh.course.model.vo.TQueryBenefitsVideosVO">
            select * from t_course
            <where>
                <if test="query.name != null and query.name != ''">
                    AND t_course.name LIKE concat('%',#{query.name},'%')
                </if>
                <if test="query.type != null and query.type != '' ">
                    AND t_course.type = #{query.type}
                </if>
                <if test="query.state != null and query.state != '' ">
                    AND t_course.state = #{query.state}
                </if>
                <if test="query.coursIds != null and query.coursIds.size()>0">
                    AND t_course.id IN
                    <foreach collection="query.coursIds" separator="," item="coursId" open="(" close=")">
                        #{coursId}
                    </foreach>
                </if>
            </where>
    </select>
</mapper>
cloud-server-gateway/pom.xml
@@ -52,10 +52,7 @@
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
cloud-server-management/pom.xml
@@ -226,10 +226,6 @@
                </executions>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉。 -->
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/CityManagerClient.java
@@ -1,8 +1,15 @@
package com.dsh.course.feignClient.account;
import com.dsh.course.feignClient.account.model.CityManager;
import com.dsh.guns.modular.system.model.Store;
import com.dsh.guns.modular.system.model.TStore;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
/**
 * @author zhibing.pu
@@ -19,4 +26,23 @@
     */
    @PostMapping("/cityManager/queryCityManagerById")
    CityManager queryCityManagerById(Integer id);
    /**
     * 获取已有城市管理的省、市
     */
    @RequestMapping("/cityManager/listAll")
    List<CityManager> listAll();
    /**
     * 选择省 展示市
     */
    @RequestMapping("/cityManager/getCity")
    List<CityManager> getCity(@RequestBody String province);
    /**
     * 选择市区 展示全部账号
     */
    @RequestMapping("/cityManager/getAccount")
    List<CityManager> getAccount(@RequestBody String city);
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/CoachClient.java
@@ -1,8 +1,14 @@
package com.dsh.course.feignClient.account;
import com.dsh.course.feignClient.account.model.Coach;
import com.dsh.course.feignClient.account.model.CoachSerchVO;
import com.dsh.guns.modular.system.model.CoachChangeStateVO;
import com.dsh.guns.modular.system.model.CoachQuery;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@@ -15,6 +21,36 @@
    /**
     * 上/下架、删除常见问题 type=1为上架 2为下架 3为删除
     */
    @RequestMapping("/coach/changeState")
    Object changeState(@RequestBody CoachChangeStateVO vo);
    /**
     * 获取教练列表数据
     */
    @PostMapping("/coach/listAll")
    List<CoachSerchVO> listAll(@RequestBody CoachQuery query);
    /**
     * 添加教练
     * @return
     */
    @RequestMapping("/base/site/addCoach")
    Object addCoach(@RequestBody Coach coach);
    /**
     * 获取所有省
     */
    @PostMapping("/coach/getProvince")
    List<Coach> getProvince();
    /**
     * 根据选择的省获取对应的市
     */
    @PostMapping("/coach/getCity")
    List<Coach> getCity(@RequestBody String city);
    /**
     * 获取城市下的所有教练
     * @param cityCode
     * @return
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/CoachTypeClient.java
New file
@@ -0,0 +1,37 @@
package com.dsh.course.feignClient.account;
import com.dsh.course.feignClient.account.model.CoachType;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2023/8/1 17:58
 */
@FeignClient("mb-cloud-account")
public interface CoachTypeClient {
    @PostMapping("/coachType/list")
    List<CoachType> list();
    /**
     * 新增教练类型
     * @param
     * @return
     */
    @RequestMapping("/coachType/add")
    Object add(@RequestBody String name);
    /**
     * 修改教练类型
     * @param
     * @return
     */
    @RequestMapping("/coachType/update")
    Object update(@RequestBody CoachType vo);
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/StoreStaffClient.java
New file
@@ -0,0 +1,25 @@
package com.dsh.course.feignClient.account;
import com.dsh.course.feignClient.account.model.CityManager;
import com.dsh.course.feignClient.account.model.TStoreStaff;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2023/8/1 17:07
 */
@FeignClient("mb-cloud-account")
public interface StoreStaffClient {
    /**
     * 根据id获取数据
     * @param id
     * @return
     */
    @GetMapping("/cityManager/getStoreByStoreStaffId")
    TStoreStaff getStoreByStoreStaffId(@RequestParam("id") Integer id);
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/Coach.java
@@ -58,6 +58,7 @@
    /**
     * 生日
     */
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    private Date birthday;
    /**
     * 性别(1=男,2=女)
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/CoachSerchVO.java
New file
@@ -0,0 +1,107 @@
package com.dsh.course.feignClient.account.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
 * <p>
 * 教练
 * </p>
 *
 * @author jqs
 * @since 2023-07-05
 */
@Data
public class CoachSerchVO {
    /**
     * 主键
     */
    private Integer id;
    /**
     * 省
     */
    private String province;
    /**
     * 省编号
     */
    private String provinceCode;
    /**
     * 市
     */
    private String city;
    /**
     * 市编号
     */
    private String cityCode;
    /**
     * 城市管理员id
     */
    private Integer cityManagerId;
    private String nameAndPhone;
    private String accountName;
    private String accountPhone;
    /**
     * 教练类型id
     */
    private Integer coachTypeId;
    private String  coachTypeName;
    /**
     * 姓名
     */
    private String name;
    /**
     * 生日
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    /**
     * 性别(1=男,2=女)
     */
    private Integer gender;
    /**
     * 电话
     */
    private String phone;
    /**
     * 身份证号码
     */
    private String idcard;
    /**
     * 身高(厘米)
     */
    private Double height;
    /**
     * 体重(KG)
     */
    private Double weight;
    /**
     * 毕业院校
     */
    private String graduateSchool;
    /**
     * 毕业证照片
     */
    private String diploma;
    /**
     * 资格证书(多个逗号分隔)
     */
    private String certificate;
    /**
     * 证书照片
     */
    private String certificateImg;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    private Integer state;
    /**
     * 添加时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date insertTime;
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/CoachType.java
New file
@@ -0,0 +1,52 @@
package com.dsh.course.feignClient.account.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
 * <p>
 * 教练类型
 * </p>
 *
 * @author jqs
 * @since 2023-07-05
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_coach_type")
public class CoachType extends Model<CoachType> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 类型名称
     */
    @TableField("name")
    private String name;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("state")
    private Integer state;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/model/TStoreStaff.java
New file
@@ -0,0 +1,63 @@
package com.dsh.course.feignClient.account.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
 * <p>
 * 门店员工
 * </p>
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_store_staff")
public class TStoreStaff extends Model<TStoreStaff> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 名称
     */
    @TableField("name")
    private String name;
    /**
     * 手机号
     */
    @TableField("phone")
    private Integer phone;
    /**
     * 密码
     */
    @TableField("password")
    private Integer password;
    /**
     * 所属门店id
     */
    @TableField("storeId")
    private Integer storeId;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("state")
    private Integer state;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/BenefitsVideoClient.java
New file
@@ -0,0 +1,70 @@
package com.dsh.course.feignClient.activity;
import com.dsh.course.feignClient.activity.model.BenefitsVedioChangeStateVO;
import com.dsh.course.feignClient.activity.model.BenefitsVideoClassification;
import com.dsh.course.feignClient.activity.model.BenefitsVideos;
import com.dsh.course.feignClient.activity.model.QueryBenefitsVedioVO;
import com.dsh.guns.modular.system.model.TQueryBenefitsVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2023/8/1 12:02
 */
@FeignClient("mb-cloud-activity")
public interface BenefitsVideoClient {
    /**
     * 根据福利视频id获取福利视频信息
     * @return
     */
    @RequestMapping("/base/benefitVideo/getBenefitVideosById")
    @ResponseBody
    BenefitsVideos getBenefitVideosById(@RequestBody Integer id);
    /**
     * 获取所有福利视频分类
     * @return
     */
    @RequestMapping("/base/benefitVideo/list")
    List<TQueryBenefitsVO> listAll(@RequestBody QueryBenefitsVedioVO vo);
    /**
     * 查看详情/编辑
     * @return
     */
    @RequestMapping("/base/benefitVideo/getById")
    BenefitsVideoClassification getById(@RequestBody Integer id);
    /**
     * 添加/修改福利视频分类
     * @return
     */
    @RequestMapping("/base/benefitVideo/add")
    Object addSite(@RequestBody BenefitsVideoClassification site);
    /**
     * 添加/修改视频详情
     * @return
     */
    @RequestMapping("/base/addBenefitsVideos")
    Object addBenefitsVideos(@RequestBody BenefitsVideos site);
    /**
     * 上/下架、删除福利视频分类 type=1为上架 2为下架 3为删除
     */
    @RequestMapping("/base/benefitVideo/changeState")
    Object changeState(@RequestBody BenefitsVedioChangeStateVO vo);
    /**
     * 查看福利视频分类下视频
     * @return
     */
    @RequestMapping("/base/benefitVideo/getBenefitVideoById")
    public List<BenefitsVideos> getBenefitVideoById(@RequestBody Integer id);
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/BodySideAppointmentClient.java
New file
@@ -0,0 +1,44 @@
package com.dsh.course.feignClient.activity;
import com.dsh.course.feignClient.activity.model.*;
import com.dsh.guns.modular.system.model.TQueryBenefitsVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
/**
 * 体测预约
 */
@FeignClient("mb-cloud-activity")
public interface BodySideAppointmentClient {
    /**
     * 获取所有体测预约记录
     * @return
     */
    @RequestMapping("/base/bodySideAppointments/listAll")
    List<QueryBodySideAppointmentVO> listAll(@RequestBody QueryBodySideAppointment vo);
    /**
     * 增加/修改体测预约记录
     * @return
     */
    @RequestMapping("/base/bodySideAppointments/addBodySideAppointments")
    Object addBodySideAppointments(@RequestBody QueryBodySideAppointmentVO vo);
    /**
     * 手动标记用户已经到店并完成体测
     * @return
     */
    @RequestMapping("/base/bodySideAppointments/changeState")
    Object changeState(@RequestBody List<Integer> ids);
    /**
     * 通过id获取体测预约记录
     * @return
     */
    @RequestMapping("/base/bodySideAppointments/getInfoById")
    BodySideAppointment getInfoById(@RequestBody Integer id);
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/BenefitsVedioChangeStateVO.java
New file
@@ -0,0 +1,12 @@
package com.dsh.course.feignClient.activity.model;
import lombok.Data;
import java.util.List;
@Data
public class BenefitsVedioChangeStateVO {
    private List<Integer> ids;
    private Integer state;
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/BenefitsVideoClassification.java
New file
@@ -0,0 +1,50 @@
package com.dsh.course.feignClient.activity.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
 * @author zhibing.pu
 * @date 2023/7/11 17:28
 */
@Data
@TableName("t_benefits_video_classification")
public class BenefitsVideoClassification {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 分类名称
     */
    @TableField("name")
    private String name;
    /**
     * 位置(1=线上课得积分,2=看视频得奖励)
     */
    @TableField("position")
    private Integer position;
    /**
     * 排序
     */
    @TableField("sort")
    private Integer sort;
    /**
     * 添加时间
     */
    @TableField("insertTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date insertTime;
    /**
     * 状态 1=正常 2=下架 3=删除
     */
    @TableField("state")
    private Integer state;
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/BenefitsVideos.java
New file
@@ -0,0 +1,69 @@
package com.dsh.course.feignClient.activity.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
 * <p>
 * 福利视频
 * </p>
 *
 * @author jqs
 * @since 2023-07-06
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_benefits_videos")
public class BenefitsVideos extends Model<BenefitsVideos> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 分类id
     */
    @TableField("benefitsVideoClassificationId")
    private Integer benefitsVideoClassificationId;
    /**
     * 课程id
     */
    @TableField("courseId")
    private Integer courseId;
    /**
     * 可得积分
     */
    @TableField("integral")
    private Integer integral;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("state")
    private Integer state;
    /**
     * 添加时间
     */
    @TableField("insertTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date insertTime;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/BodySideAppointment.java
New file
@@ -0,0 +1,51 @@
package com.dsh.course.feignClient.activity.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
@TableName("t_body_side_appointments")
public class BodySideAppointment {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @TableField("province")
    private String province;
    @TableField("provinceCode")
    private String provinceCode;
    @TableField("city")
    private String city;
    @TableField("cityCode")
    private String cityCode;
    @TableField("storeId")
    private Integer storeId;
    @TableField("parentName")
    private String parentName;
    @TableField("phone")
    private String phone;
    @TableField("learnerName")
    private String learnerName;
    @TableField("learnerAge")
    private Integer learnerAge;
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    @TableField("birthday")
    private Date birthday;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @TableField("appointmentTime")
    private Date appointmentTime;
    @TableField("status")
    private Integer status;
    @TableField("state")
    private Integer state;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @TableField("insertTime")
    private Date insertTime;
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/QueryBenefitsVedioVO.java
New file
@@ -0,0 +1,11 @@
package com.dsh.course.feignClient.activity.model;
import lombok.Data;
/**
 * 福利视频分类接收查询参数VO
 */
@Data
public class QueryBenefitsVedioVO {
    private Integer position;
    private String name;
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/QueryBodySideAppointment.java
New file
@@ -0,0 +1,16 @@
package com.dsh.course.feignClient.activity.model;
import lombok.Data;
/**
 * 接收查询参数VO
 */
@Data
public class QueryBodySideAppointment {
    private String phone;
    private String parentName;
    // 1 = 待体测 2 = 已体测
    private Integer state;
    // 1=今日内预约 2=明日预约 7=七日内
    private Integer day;
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/QueryBodySideAppointmentVO.java
New file
@@ -0,0 +1,34 @@
package com.dsh.course.feignClient.activity.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
 * 体测预约管理查询VO
 */
@Data
public class QueryBodySideAppointmentVO {
    private Integer id;
    private String  province;
    private String  provinceCode;
    private String  city;
    private String  cityCode;
    private Integer storeId;
    private String  storeName;
    private String  parentName;
    private String  phone;
    private String  learnerName;
    private Integer learnerAge;
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    private Date    birthday;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GMT+8")
    private Date    appointmentTime;
    private Integer status;
    private Integer state;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date    insertTime;
    private String  provinceAndCity;
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseClient.java
@@ -1,12 +1,17 @@
package com.dsh.course.feignClient.course;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsh.course.feignClient.course.model.CourseChangeStateDTO;
import com.dsh.course.feignClient.course.model.QueryCourseList;
import com.dsh.guns.modular.system.model.EditCourseState;
import com.dsh.guns.modular.system.model.TCourse;
import com.dsh.guns.modular.system.model.TQueryBenefitsVideosDTO;
import com.dsh.guns.modular.system.model.TQueryBenefitsVideosVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
import java.util.Map;
@@ -19,6 +24,21 @@
public interface CourseClient {
    /**
     * 上/下架 1为上架 2为下架 3为删除
     *
     * @return
     */
    @RequestMapping("/base/course/changeState")
    Object changeState(@RequestBody CourseChangeStateDTO dto);
    /**
     * 通过课程ids获取课程
     * @return
     */
    @RequestMapping("/base/course/getCourseByCourseIds")
    List<TQueryBenefitsVideosVO> getCourseByCourseIds(@RequestBody TQueryBenefitsVideosDTO query);
    /**
     * 获取课程管理列表
     * @param queryCourseList
     * @return
cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageTypeClient.java
@@ -1,8 +1,12 @@
package com.dsh.course.feignClient.course;
import com.dsh.course.feignClient.course.model.CoursePackageTypeVO;
import com.dsh.course.feignClient.course.model.TCoursePackageType;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@@ -15,6 +19,26 @@
    /**
     * 删除课包类型
     * @param
     * @return
     */
    @RequestMapping("/coursePackageType/delete")
     Object delete(@RequestBody CoursePackageTypeVO coachType);
    /**
     * 修改课包类型
     * @param
     * @return
     */
    @RequestMapping("/coursePackageType/update")
     Object update(@RequestBody CoursePackageTypeVO coachType);
    /**
     * 新增课包类型
     */
    @RequestMapping("/coursePackageType/add")
     Object add(@RequestBody String name);
    /**
     * 获取课包所有类型
     * @return
     */
cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CourseChangeStateDTO.java
New file
@@ -0,0 +1,11 @@
package com.dsh.course.feignClient.course.model;
import lombok.Data;
import java.util.List;
@Data
public class CourseChangeStateDTO {
    private List<Integer> ids;
    private Integer state;
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackageTypeVO.java
New file
@@ -0,0 +1,10 @@
package com.dsh.course.feignClient.course.model;
import lombok.Data;
@Data
public class CoursePackageTypeVO {
    private Integer id;
    private String name;
    private Integer state;
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/SiteClient.java
New file
@@ -0,0 +1,49 @@
package com.dsh.course.feignClient.other;
import com.dsh.course.feignClient.other.model.Site;
import com.dsh.course.feignClient.other.model.SiteChangeStateVO;
import com.dsh.course.feignClient.other.model.TSiteDTO;
import com.dsh.guns.modular.system.model.ExpireSiteSearchVO;
import com.dsh.guns.modular.system.model.SiteSearchVO;
import com.dsh.guns.modular.system.model.TSite;
import com.dsh.guns.modular.system.util.ResultUtil;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
/**
 * 常见问题
 */
@FeignClient(value = "mb-cloud-other")
public interface SiteClient {
    /**
     * 上/下架、删除常见问题 type=1为上架 2为下架 3为删除
     */
    @RequestMapping("/base/site/changeState")
    Object changeState(@RequestBody SiteChangeStateVO vo);
    /**
     * 获取所有场地
     * @return
     */
    @RequestMapping("/base/site/list")
    List<TSiteDTO> listAll(@RequestBody SiteSearchVO vo);
    /**
     * 获取场地有效期在两个月内的场地列表
     * @return
     */
    @RequestMapping("/base/site/listExipre")
    List<TSiteDTO> listExipre(@RequestBody ExpireSiteSearchVO vo);
    /**
     * 添加场地管理
     * @return
     */
    @RequestMapping("/base/site/addSite")
    Object addSite(@RequestBody Site site);
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/SiteLockClient.java
New file
@@ -0,0 +1,45 @@
package com.dsh.course.feignClient.other;
import com.dsh.course.feignClient.other.model.Site;
import com.dsh.course.feignClient.other.model.SiteChangeStateVO;
import com.dsh.course.feignClient.other.model.TSiteDTO;
import com.dsh.course.feignClient.other.model.TSiteLockDTO;
import com.dsh.guns.modular.system.model.SiteSearchVO;
import org.springframework.beans.BeanUtils;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * 常见问题
 */
@FeignClient(value = "mb-cloud-other")
public interface SiteLockClient {
    /**
     * 锁定场地列表
     * @param
     * @return
     */
    @PostMapping("/siteLock/getListById/{id}")
    public List<TSiteLockDTO> getListById(@PathVariable("id") Integer id);
    /**
     * 添加锁定场地
     * @param
     * @return
     */
    @PostMapping("/siteLock/addSiteLock")
    public Object addSiteLock(@RequestBody TSiteLockDTO siteLock);
    /**
     * 删除锁定场地
     * @param
     * @return
     */
    @PostMapping("/siteLock/deleteSiteLock/{id}")
    public Object deleteSiteLock(@PathVariable("id") Integer id);
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/StoreClient.java
New file
@@ -0,0 +1,50 @@
package com.dsh.course.feignClient.other;
import com.dsh.course.feignClient.other.model.FrequentlyAskedQuestions;
import com.dsh.course.feignClient.other.model.TSiteDTO;
import com.dsh.guns.modular.system.model.QuestionChangeStateVO;
import com.dsh.guns.modular.system.model.SiteSearchVO;
import com.dsh.guns.modular.system.model.Store;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
 * 常见问题
 */
@FeignClient(value = "mb-cloud-other")
public interface StoreClient {
    /**
     * 选择市区 展示全部门店
     */
    @RequestMapping("base/store/getStore")
    List<Store> getStore(@RequestBody String city);
    /**
     * 根据所选门店 查询经营时间
     * @param oneId
     * @return
     */
    @RequestMapping("base/store/getTime")
    Store getTime(@RequestBody String oneId);
    /**
     * 根据门店id获取门店信息
     */
    @RequestMapping("base/site/getStoreById")
    Store getStoreById(@RequestBody Integer id);
    /**
     * 根据城市管理员id获取门店
     */
    @RequestMapping("base/site/getStoreByCityManagerId")
    List<Store> getStoreByCityManagerId(@RequestBody Integer id);
    /**
     * 根据员工id获取门店
     */
    @RequestMapping("base/site/getStoreByStoreStaffId")
    List<Store> getStoreByStoreStaffId(@RequestBody Integer id);
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/Site.java
New file
@@ -0,0 +1,112 @@
package com.dsh.course.feignClient.other.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
 * @author zhibing.pu
 * @date 2023/7/13 15:57
 */
@Data
@TableName("t_site")
public class Site {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 门店id
     */
    @TableField("storeId")
    private Integer storeId;
    /**
     * 场地名称
     */
    @TableField("name")
    private String name;
    /**
     * 场地类型id
     */
    @TableField("siteTypeId")
    private Integer siteTypeId;
    /**
     * 城市管理员id
     */
    @TableField("cityManagerId")
    private Integer cityManagerId;
    /**
     * 省
     */
    @TableField("province")
    private String province;
    /**
     * 省编号
     */
    @TableField("provinceCode")
    private String provinceCode;
    /**
     * 市名称
     */
    @TableField("city")
    private String city;
    /**
     * 市编号
     */
    @TableField("cityCode")
    private String cityCode;
    /**
     * 预约开始时间
     */
    @TableField("appointmentStartTime")
    private String appointmentStartTime;
    /**
     * 预约结束时间
     */
    @TableField("appointmentEndTime")
    private String appointmentEndTime;
    /**
     * 现金价格(x/半小时)
     */
    @TableField("cashPrice")
    private Double cashPrice;
    /**
     * 玩湃币价格(x/半小时)
     */
    @TableField("playPaiCoin")
    private Integer playPaiCoin;
    /**
     * 场地责任险有效期
     */
    @TableField("insuranceEndTime")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date insuranceEndTime;
    /**
     * 场地责任险图片
     */
    @TableField("insuranceImg")
    private String insuranceImg;
    /**
     * 消防应急管理方案
     */
    @TableField("managementPlan")
    private String managementPlan;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("state")
    private Integer state;
    /**
     * 添加时间
     */
    @TableField("insertTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date insertTime;
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/SiteAddDTO.java
New file
@@ -0,0 +1,91 @@
package com.dsh.course.feignClient.other.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
 * @author zhibing.pu
 * @Date 2023/8/1 17:43
 */
@Data
public class SiteAddDTO {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 门店id
     */
    private Integer storeId;
    /**
     * 场地名称
     */
    private String name;
    /**
     * 场地类型id
     */
    private Integer siteTypeId;
    /**
     * 城市管理员id
     */
    private Integer cityManagerId;
    /**
     * 省
     */
    private String province;
    /**
     * 省编号
     */
    private String provinceCode;
    /**
     * 市名称
     */
    private String city;
    /**
     * 市编号
     */
    private String cityCode;
    /**
     * 预约开始时间
     */
    private String appointmentStartTime;
    /**
     * 预约结束时间
     */
    private String appointmentEndTime;
    /**
     * 现金价格(x/半小时)
     */
    private Double cashPrice;
    /**
     * 玩湃币价格(x/半小时)
     */
    private Integer playPaiCoin;
    /**
     * 场地责任险有效期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date insuranceEndTime;
    /**
     * 场地责任险图片
     */
    private String insuranceImg;
    /**
     * 消防应急管理方案
     */
    private String managementPlan;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    private Integer state;
    /**
     * 添加时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date insertTime;
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/SiteChangeStateVO.java
New file
@@ -0,0 +1,21 @@
package com.dsh.course.feignClient.other.model;
import lombok.Data;
import java.util.List;
/**
 * 修改场地状态
 */
@Data
public class SiteChangeStateVO {
    /**
     * 场地Id
     */
    List<Integer> siteIds;
    /**
     * 上/下架 删除场地 type=1 上架 2下架 3删除
     */
    Integer type;
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/TSiteDTO.java
New file
@@ -0,0 +1,116 @@
package com.dsh.course.feignClient.other.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
 * @author 场地管理列表DTO
 * @Date 2023/8/1 17:43
 */
@Data
@TableName("t_site")
public class TSiteDTO {
    private Integer id;
    /**
     * 门店id
     */
    private Integer storeId;
    /**
     * 门店名称
     */
    private String storeName;
    /**
     * 场地名称
     */
    @TableField("name")
    private String name;
    /**
     * 场地类型id
     */
    @TableField("siteTypeId")
    private Integer siteTypeId;
    /**
     * 场地类型名称
     */
    @TableField("siteTypeId")
    private String siteTypeName;
    /**
     * 城市管理员id
     */
    @TableField("cityManagerId")
    private Integer cityManagerId;
    /**
     * 省
     */
    @TableField("province")
    private String province;
    /**
     * 省编号
     */
    @TableField("provinceCode")
    private String provinceCode;
    /**
     * 市名称
     */
    @TableField("city")
    private String city;
    /**
     * 市编号
     */
    @TableField("cityCode")
    private String cityCode;
    /**
     * 预约开始时间
     */
    @TableField("appointmentStartTime")
    private String appointmentStartTime;
    /**
     * 预约结束时间
     */
    @TableField("appointmentEndTime")
    private String appointmentEndTime;
    /**
     * 现金价格(x/半小时)
     */
    @TableField("cashPrice")
    private Double cashPrice;
    /**
     * 玩湃币价格(x/半小时)
     */
    @TableField("playPaiCoin")
    private Integer playPaiCoin;
    /**
     * 场地责任险有效期
     */
    @TableField("insuranceEndTime")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date insuranceEndTime;
    /**
     * 场地责任险图片
     */
    @TableField("insuranceImg")
    private String insuranceImg;
    /**
     * 消防应急管理方案
     */
    @TableField("managementPlan")
    private String managementPlan;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("state")
    private Integer state;
    /**
     * 添加时间
     */
    @TableField("insertTime")
    private Date insertTime;
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/TSiteLockDTO.java
New file
@@ -0,0 +1,35 @@
package com.dsh.course.feignClient.other.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
 * 锁定场地DTO
 */
@Data
public class TSiteLockDTO {
    /**
     * 场地id
     */
    private Integer id;
    /**
     * 场地id
     */
    private Integer siteId;
    /**
     * 锁定开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    private Date startTime;
    /**
     * 锁定结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    private Date endTime;
    private String ssTime;
    private String eeTime;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/CoachController.java
New file
@@ -0,0 +1,243 @@
package com.dsh.guns.modular.system.controller.code;
import com.dsh.course.feignClient.account.CityManagerClient;
import com.dsh.course.feignClient.account.CoachClient;
import com.dsh.course.feignClient.account.CoachTypeClient;
import com.dsh.course.feignClient.account.model.CityManager;
import com.dsh.course.feignClient.account.model.Coach;
import com.dsh.course.feignClient.account.model.CoachSerchVO;
import com.dsh.course.feignClient.account.model.CoachType;
import com.dsh.course.feignClient.other.model.Site;
import com.dsh.guns.config.UserExt;
import com.dsh.guns.modular.system.model.CoachChangeStateVO;
import com.dsh.guns.modular.system.model.CoachQuery;
import com.dsh.guns.modular.system.model.Store;
import com.dsh.guns.modular.system.util.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * 教练
 */
@Controller
@RequestMapping("/tCoach")
public class CoachController {
    private String PREFIX = "/system/tCoach/";
    @Autowired
    private CoachTypeClient coachTypeClient;
    @Autowired
    private CoachClient coachClient;
    @Autowired
    private CityManagerClient cityManagerClient;
    /**
     * 跳转教练管理首页
     */
    @RequestMapping("")
    public String index(Model model) {
        Integer objectType = UserExt.getUser().getObjectType();
        Integer objectId = UserExt.getUser().getObjectId();
        List<Coach> list1=coachClient.getProvince();
        CoachQuery coachQuery = new CoachQuery();
        List<CoachSerchVO> data = coachClient.listAll(coachQuery);
        List<String> province = new ArrayList<>();
        for (Coach coach : list1) {
            province.add(coach.getProvince());
        }
        String roleid = UserExt.getUser().getRoleid();
        model.addAttribute("role",roleid);
        model.addAttribute("data",data);
        model.addAttribute("list",province);
        model.addAttribute("objectType",objectType);
        model.addAttribute("objectId",objectId);
        return PREFIX + "TCoach.html";
    }
    /**
     * 获取教练列表
     */
    @RequestMapping(value = "/getCity")
    @ResponseBody
    public List<Coach> getCity(String province) {
        return coachClient.getCity(province);
    }
    /**
     * 跳转添加教练页面
     */
    @RequestMapping("/addCoach")
    public String addCoach(Model model) {
        List<CityManager> province = cityManagerClient.listAll();
        Set<String> seenNames = new HashSet<>();
        List<CityManager> result = new ArrayList<>();
        for (CityManager cityManager : province) {
            if(!seenNames.contains(cityManager.getProvince())){
                result.add(cityManager);
                seenNames.add(cityManager.getProvince());
            }
        }
        Integer objectType = UserExt.getUser().getObjectType();
        Integer objectId = UserExt.getUser().getObjectId();
        CoachQuery coachQuery = new CoachQuery();
        List<CoachSerchVO> data = coachClient.listAll(coachQuery);
        List<CoachType> list = coachTypeClient.list();
        String roleid = UserExt.getUser().getRoleid();
        model.addAttribute("role",roleid);
        model.addAttribute("data",data);
        model.addAttribute("list",result);
        model.addAttribute("objectType",objectType);
        model.addAttribute("objectId",objectId);
        model.addAttribute("coachType",list);
        return PREFIX + "TCoach_add.html";
    }
    /**
     *  添加教练
     */
    @ResponseBody
    @RequestMapping(value = "/add")
    public ResultUtil addCoach(@RequestBody Coach coach) {
        Integer objectId = UserExt.getUser().getObjectId();
        if (UserExt.getUser().getObjectType() == 2){
            CityManager cityManager = cityManagerClient.queryCityManagerById(objectId);
            coach.setProvince(cityManager.getProvince());
            coach.setProvinceCode(cityManager.getProvinceCode());
            coach.setCity(cityManager.getCity());
            coach.setCityCode(cityManager.getCityCode());
            coach.setCityManagerId(objectId);
        }
        if (coach.getDiploma().equals("")) coach.setDiploma(null);
        if (coach.getCertificateImg().equals("") ){
            coach.setCertificateImg(null);
        }
        if (coach.getCertificateImg()!=null){
            coach.setCertificateImg(coach.getCertificateImg().substring(1));
        }
        coach.setInsertTime(new Date());
        coach.setState(1);
        coachClient.addCoach(coach);
        return ResultUtil.success("添加成功");
    }
    /**
     *  1为冻结 2为解冻
     *
     * @return
     */
    @RequestMapping("/changeState")
    @ResponseBody
    public Object changeState(@RequestBody CoachChangeStateVO vo){
        coachClient.changeState(vo);
        return ResultUtil.success();
    }
    /**
     * 跳转修改教练页面
     */
    @RequestMapping("/updateCoach/{id}")
    public String updateCoach(Model model, @PathVariable("id") Integer id) {
        CoachQuery coachQuery = new CoachQuery();
        coachQuery.setId(id);
        List<CoachSerchVO> data = coachClient.listAll(coachQuery);
        List<CityManager> province = cityManagerClient.listAll();
        Set<String> seenNames = new HashSet<>();
        List<CityManager> result = new ArrayList<>();
        List<CityManager> city = new ArrayList<>();
        for (CityManager cityManager : province) {
            if(!seenNames.contains(cityManager.getProvince())){
                result.add(cityManager);
                seenNames.add(cityManager.getProvince());
            }
            if(data.get(0).getProvince().equals(cityManager.getProvince())){
                city.add(cityManager);
            }
        }
        Integer objectType = UserExt.getUser().getObjectType();
        Integer objectId = UserExt.getUser().getObjectId();
        List<CityManager> accounts = cityManagerClient.getAccount(data.get(0).getCity());
        List<CoachType> list = coachTypeClient.list();
        String roleid = UserExt.getUser().getRoleid();
        model.addAttribute("role",roleid);
        model.addAttribute("data",data.get(0));
        model.addAttribute("list",result);
        model.addAttribute("city",city);
        model.addAttribute("cityManagers",accounts);
        model.addAttribute("objectType",objectType);
        model.addAttribute("objectId",objectId);
        model.addAttribute("coachType",list);
        // 1为查看详情
        model.addAttribute("type",0);
        String[] split = data.get(0).getCertificateImg().split(",");
        List<String> pictures = new ArrayList<>(Arrays.asList(split));
        model.addAttribute("pictures",pictures);
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String birthday = format.format(data.get(0).getBirthday());
        model.addAttribute("birthday",birthday);
        return PREFIX + "TCoach_edit.html";
    }
    /**
     * 跳转修改教练页面
     */
    @RequestMapping("/infoCoach/{id}")
    public String infoCoach(Model model, @PathVariable("id") Integer id) {
        CoachQuery coachQuery = new CoachQuery();
        coachQuery.setId(id);
        List<CoachSerchVO> data = coachClient.listAll(coachQuery);
        List<CityManager> province = cityManagerClient.listAll();
        Set<String> seenNames = new HashSet<>();
        List<CityManager> result = new ArrayList<>();
        List<CityManager> city = new ArrayList<>();
        for (CityManager cityManager : province) {
            if(!seenNames.contains(cityManager.getProvince())){
                result.add(cityManager);
                seenNames.add(cityManager.getProvince());
            }
            if(data.get(0).getProvince().equals(cityManager.getProvince())){
                city.add(cityManager);
            }
        }
        Integer objectType = UserExt.getUser().getObjectType();
        Integer objectId = UserExt.getUser().getObjectId();
        List<CityManager> accounts = cityManagerClient.getAccount(data.get(0).getCity());
        List<CoachType> list = coachTypeClient.list();
        String roleid = UserExt.getUser().getRoleid();
        model.addAttribute("role",roleid);
        model.addAttribute("data",data.get(0));
        model.addAttribute("list",result);
        model.addAttribute("city",city);
        model.addAttribute("cityManagers",accounts);
        model.addAttribute("objectType",objectType);
        model.addAttribute("objectId",objectId);
        model.addAttribute("coachType",list);
        // 1为查看详情
        model.addAttribute("type",1);
        String[] split = data.get(0).getCertificateImg().split(",");
        List<String> pictures = new ArrayList<>(Arrays.asList(split));
        model.addAttribute("pictures",pictures);
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String birthday = format.format(data.get(0).getBirthday());
        model.addAttribute("birthday",birthday);
        return PREFIX + "TCoach_edit.html";
    }
    /**
     * 获取教练列表
     */
    @RequestMapping(value = "/list")
    @ResponseBody
    public List<CoachSerchVO> list(String province, String city, String name, String phone) {
        CoachQuery coachQuery = new CoachQuery();
        coachQuery.setProvince(province);
        coachQuery.setCity(city);
        coachQuery.setName(name);
        coachQuery.setPhone(phone);
        return coachClient.listAll(coachQuery);
    }
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/CoachTypeController.java
New file
@@ -0,0 +1,75 @@
package com.dsh.guns.modular.system.controller.code;
import com.dsh.course.feignClient.account.CoachTypeClient;
import com.dsh.course.feignClient.account.model.CoachType;
import com.dsh.guns.config.UserExt;
import com.dsh.guns.modular.system.model.QuestionSearchVO;
import net.bytebuddy.asm.Advice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * 教练类型
 */
@Controller
@RequestMapping("/tCoachType")
public class CoachTypeController {
    private String PREFIX = "/system/tCoachType/";
    @Autowired
    private CoachTypeClient coachTypeClient;
    /**
     * 跳转常见问题首页
     */
    @RequestMapping("")
    public String index(Model model) {
        String roleid = UserExt.getUser().getRoleid();
        model.addAttribute("role",roleid);
        return PREFIX + "TCoachType.html";
    }
    /**
     * 获取教练类型列表
     */
    @RequestMapping("/list")
    @ResponseBody
    public List<CoachType> list() {
        return coachTypeClient.list();
    }
    /**
     * 新增教练类型
     */
    @RequestMapping("/add")
    @ResponseBody
    public Object addCoachType(String name) {
        return coachTypeClient.add(name);
    }
    /**
     * 修改教练类型
     */
    @RequestMapping("/update")
    @ResponseBody
    public Object updateCoachType(@RequestBody CoachType vo) {
        return coachTypeClient.update(vo);
    }
    /**
     * 删除教练类型
     */
    @RequestMapping("/delete")
    @ResponseBody
    public Object deleteCoachType(Integer id) {
        CoachType coachType = new CoachType();
        coachType.setId(id);
        coachType.setState(3);
        return coachTypeClient.update(coachType);
    }
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/QuestionController.java
@@ -35,7 +35,7 @@
/**
 * 优惠券管理 控制器
 * 常见问题管理 控制器
 */
@Controller
@@ -63,6 +63,8 @@
     */
    @RequestMapping("")
    public String index(Model model) {
        String roleid = UserExt.getUser().getRoleid();
        model.addAttribute("role",roleid);
        return PREFIX + "TQuestion.html";
    }
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TBodySideAppointmentsController.java
New file
@@ -0,0 +1,115 @@
package com.dsh.guns.modular.system.controller.code;
import com.dsh.course.feignClient.account.CityManagerClient;
import com.dsh.course.feignClient.account.model.CityManager;
import com.dsh.course.feignClient.account.model.Coach;
import com.dsh.course.feignClient.activity.BodySideAppointmentClient;
import com.dsh.course.feignClient.activity.model.BodySideAppointment;
import com.dsh.course.feignClient.activity.model.QueryBodySideAppointment;
import com.dsh.course.feignClient.activity.model.QueryBodySideAppointmentVO;
import com.dsh.course.feignClient.other.StoreClient;
import com.dsh.guns.config.UserExt;
import com.dsh.guns.modular.system.model.CoachQuery;
import com.dsh.guns.modular.system.util.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * 体测预约管理控制器
 */
@Controller
@RequestMapping("/bodySideAppointment")
public class TBodySideAppointmentsController {
    private String PREFIX = "/system/bodySideAppointment/";
    @Autowired
    private StoreClient storeClient;
    @Autowired
    private BodySideAppointmentClient bodySideAppointmentClient;
    @Autowired
    private CityManagerClient cityManagerClient;
    /**
     * 跳转体测预约管理首页
     */
    @RequestMapping("")
    public String index(Model model) {
        return PREFIX + "TBodySideAppointment.html";
    }
    /**
     * 跳转体测预约管理添加页面
     */
    @RequestMapping("/add")
    public String add(Model model) {
        List<CityManager> province = cityManagerClient.listAll();
        Set<String> seenNames = new HashSet<>();
        List<CityManager> result = new ArrayList<>();
        for (CityManager cityManager : province) {
            if(!seenNames.contains(cityManager.getProvince())){
                result.add(cityManager);
                seenNames.add(cityManager.getProvince());
            }
        }
        model.addAttribute("list",result);
        return PREFIX + "TBodySideAppointment_add.html";
    }
    /**
     * 跳转体测预约管理编辑页面
     */
    @RequestMapping("/update")
    public String update(Model model) {
        return PREFIX + "TBodySideAppointment_edit.html";
    }
    /**
     * 获取所有体测预约记录
     * @return
     */
    @RequestMapping("/listAll")
    @ResponseBody
    public List<QueryBodySideAppointmentVO> listAll(String phone,String parentName,Integer state){
        QueryBodySideAppointment vo = new QueryBodySideAppointment();
        vo.setParentName(parentName);
        vo.setPhone(phone);
        vo.setState(state);
        List<QueryBodySideAppointmentVO> queryBodySideAppointmentVOS = bodySideAppointmentClient.listAll(vo);
        for (QueryBodySideAppointmentVO queryBodySideAppointmentVO : queryBodySideAppointmentVOS) {
            queryBodySideAppointmentVO.setProvinceAndCity(queryBodySideAppointmentVO.getProvince()+queryBodySideAppointmentVO.getCity());
        }
        return queryBodySideAppointmentVOS;
    }
    /**
     *  添加/修改体测预约记录
     */
    @ResponseBody
    @RequestMapping(value = "/addBodySideAppointments")
    public ResultUtil addBodySideAppointments(@RequestBody QueryBodySideAppointmentVO vo) {
        bodySideAppointmentClient.addBodySideAppointments(vo);
        return ResultUtil.success("添加成功");
    }
    /**
     *  添加/修改体测预约记录
     */
    @ResponseBody
    @RequestMapping(value = "/getInfoById")
    public BodySideAppointment getInfoById(@RequestBody Integer id) {
        return bodySideAppointmentClient.getInfoById(id);
    }
    /**
     *  手动标记用户已经到店并完成体测
     */
    @ResponseBody
    @RequestMapping(value = "/changeState")
    public Object changeState(@RequestBody List<Integer> ids) {
        return bodySideAppointmentClient.changeState(ids);
    }
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCityController.java
@@ -3,6 +3,7 @@
import cn.hutool.crypto.SecureUtil;
import com.alibaba.nacos.common.utils.Md5Utils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsh.course.entity.City;
import com.dsh.course.feignClient.account.CityClient;
@@ -171,9 +172,11 @@
    @RequestMapping(value = "/onChange")
    @ResponseBody
    public Object onChange(Integer oneId) {
        if (oneId == null) return null;
        try {
            TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, oneId));
            return cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId,one.getId()));
            TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getId, oneId));
            QueryWrapper<TCity> query = new QueryWrapper<TCity>().eq("parent_id", one.getId());
            return cityService.list(query);
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java
@@ -24,6 +24,7 @@
import com.dsh.guns.modular.system.service.IRegionService;
import com.dsh.guns.modular.system.service.IStoreService;
import com.dsh.guns.modular.system.util.OBSUploadUtil;
import com.dsh.guns.modular.system.util.ResultUtil;
import org.apache.commons.beanutils.ConvertUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@@ -276,6 +277,7 @@
    @RequestMapping(value = "/uploadPic")
    @ResponseBody
    public Object add(@RequestParam("file") MultipartFile imgFile) throws IOException {
        if (imgFile != null){
        String originalFilename = imgFile.getOriginalFilename();
        String newName = originalFilename.substring(imgFile.getOriginalFilename().lastIndexOf("."));
        String url = OBSUploadUtil.inputStreamUpload(imgFile);
@@ -293,7 +295,9 @@
        //文件大小(字节数)
        map.put("size", imgFile.getSize() + "");
        System.out.println(map);
        return url;
            return url;
        }
        return ResultUtil.success();
    }
    /**
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageTypeController.java
New file
@@ -0,0 +1,127 @@
package com.dsh.guns.modular.system.controller.code;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsh.course.feignClient.account.CityManagerClient;
import com.dsh.course.feignClient.account.CoachClient;
import com.dsh.course.feignClient.account.model.CityManager;
import com.dsh.course.feignClient.account.model.Coach;
import com.dsh.course.feignClient.account.model.CoachType;
import com.dsh.course.feignClient.course.CoursePackageClient;
import com.dsh.course.feignClient.course.CoursePackageDiscountClient;
import com.dsh.course.feignClient.course.CoursePackagePaymentConfigClient;
import com.dsh.course.feignClient.course.CoursePackageTypeClient;
import com.dsh.course.feignClient.course.model.*;
import com.dsh.guns.config.UserExt;
import com.dsh.guns.core.base.controller.BaseController;
import com.dsh.guns.core.util.ToolUtil;
import com.dsh.guns.modular.system.model.TSite;
import com.dsh.guns.modular.system.model.TStore;
import com.dsh.guns.modular.system.service.ICoursePackageService;
import com.dsh.guns.modular.system.service.IStoreService;
import com.dsh.guns.modular.system.service.ITSiteService;
import com.dsh.guns.modular.system.util.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.*;
/**
 * @author zhibing.pu
 * @Date 2023/8/1 11:50
 */
@Controller
@RequestMapping("/coursePackageType")
public class TCoursePackageTypeController extends BaseController {
    private String PREFIX = "/system/coursePackageType/";
    @Autowired
    private ICoursePackageService coursePackageService;
    @Resource
    private CoursePackageTypeClient coursePackageTypeClient;
    @Autowired
    private IStoreService storeService;
    @Resource
    private CityManagerClient cityManagerClient;
    @Autowired
    private ITSiteService siteService;
    @Resource
    private CoachClient coachClient;
    @Resource
    private CoursePackagePaymentConfigClient coursePackagePaymentConfigClient;
    @Resource
    private CoursePackageDiscountClient coursePackageDiscountClient;
    @Resource
    private CoursePackageClient coursePackageClient;
    /**
     * 跳转到列表页
     * @param model
     * @return
     */
    @GetMapping("")
    public String openCoursePackageListPage(Model model){
        Integer objectType = UserExt.getUser().getObjectType();
        model.addAttribute("objectType", objectType);
        return PREFIX + "CoursePackageType.html";
    }
    /**
     * 获取课包类型列表
     * @return
     */
    @RequestMapping("/list")
    @ResponseBody
    public List<TCoursePackageType> openAddCoursePackage(){
        return coursePackageTypeClient.queryAllCoursePackageType();
    }
    /**
     * 跳转到添加页
     * @return
     */
    @RequestMapping("/add")
    @ResponseBody
    public Object openAddCoursePackageType(String name){
        return coursePackageTypeClient.add(name);
    }
    /**
     * 跳转到编辑页
     * @param model
     * @param id
     * @return
     */
    /**
     * 修改教练类型
     */
    @RequestMapping("/update")
    @ResponseBody
    public Object updateCoursePackageType(@RequestBody CoursePackageTypeVO vo) {
        return coursePackageTypeClient.update(vo);
    }
    /**
     * 删除课包类型--先判断当前课包类型有没有在被使用
     * @return
     */
    @RequestMapping("/delete")
    @ResponseBody
    public Object deleteCoursePackageType(@RequestBody CoursePackageTypeVO vo){
        return coursePackageTypeClient.delete(vo);
    }
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java
@@ -1,12 +1,24 @@
package com.dsh.guns.modular.system.controller.code;
import java.math.BigDecimal;
import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsh.course.feignClient.account.CityClient;
import com.dsh.course.feignClient.account.CityManagerClient;
import com.dsh.course.feignClient.account.StoreStaffClient;
import com.dsh.course.feignClient.account.model.CityListQuery;
import com.dsh.course.feignClient.account.model.CityManager;
import com.dsh.course.feignClient.account.model.TCityManager;
import com.dsh.course.feignClient.competition.CompetitionClient;
import com.dsh.course.feignClient.other.SiteClient;
import com.dsh.course.feignClient.other.SiteLockClient;
import com.dsh.course.feignClient.other.StoreClient;
import com.dsh.course.feignClient.other.model.Site;
import com.dsh.course.feignClient.other.model.SiteChangeStateVO;
import com.dsh.course.feignClient.other.model.TSiteDTO;
import com.dsh.course.feignClient.other.model.TSiteLockDTO;
import com.dsh.course.mapper.UserMapper;
import com.dsh.guns.config.UserExt;
import com.dsh.guns.core.base.controller.BaseController;
@@ -14,19 +26,21 @@
import com.dsh.guns.core.common.constant.factory.PageFactory;
import com.dsh.guns.core.util.ToolUtil;
import com.dsh.guns.modular.system.model.*;
import com.dsh.guns.modular.system.service.ICityService;
import com.dsh.guns.modular.system.service.IStoreService;
import com.dsh.guns.modular.system.service.ITSiteService;
import com.dsh.guns.modular.system.service.StoreConfigService;
import com.dsh.guns.modular.system.service.*;
import com.dsh.guns.modular.system.util.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.lang.reflect.Type;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
/**
@@ -57,207 +71,455 @@
    @Resource
    private StoreConfigService storeConfigService;
    @Resource
    private ITSiteTypeService siteTypeService;
    @Autowired
    private CityManagerClient cityManagerClient;
    @Resource
    private SiteClient siteClient;
    @Autowired
    private ITSiteService siteService;
    @Resource
    private StoreClient storeClient;
    @Autowired
    private IRegionService regionService;
    @Autowired
    private SiteLockClient siteLockClient;
    /**
     * 跳转到车辆管理首页
     * 跳转到场地管理首页
     */
    @RequestMapping("")
    public String index(Model model) {
        Integer objectType = UserExt.getUser().getObjectType();
        Integer objectId = UserExt.getUser().getObjectId();
        model.addAttribute("userType",objectType);
        List<CityManager> province = cityManagerClient.listAll();
        // 已有城市管理的省
        ArrayList<String> list1 = new ArrayList<>();
        // 已有城市管理的市
        ArrayList<String> list2 = new ArrayList<>();
        for (CityManager cityManager : province) {
            list1.add(cityManager.getProvince());
            list2.add(cityManager.getCity());
        }
        HashSet<String> set = new HashSet<String>(list1);
        List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
        model.addAttribute("list",list);
        QueryWrapper<TSiteType> wrapper = new QueryWrapper<>();
        wrapper.eq("state",1);
        List<TSiteType> siteType = siteTypeService.list(wrapper);
        model.addAttribute("list",set);
        model.addAttribute("siteType",siteType);
        String roleid = UserExt.getUser().getRoleid();
        model.addAttribute("role",1);
        model.addAttribute("role",roleid);
        model.addAttribute("objectType",objectType);
        model.addAttribute("objectId",objectId);
        model.addAttribute("type",1);
        return PREFIX + "TSite.html";
    }
    /**
     * 跳转到场地管理首页--查询场地有效期在两个月内的场地信息
     */
    @RequestMapping("/expireInsuranceEndTime")
    public String expireInsuranceEndTime(Model model) {
        Integer objectType = UserExt.getUser().getObjectType();
        Integer objectId = UserExt.getUser().getObjectId();
        model.addAttribute("userType",objectType);
        List<CityManager> province = cityManagerClient.listAll();
        // 已有城市管理的省
        ArrayList<String> list1 = new ArrayList<>();
        // 已有城市管理的市
        ArrayList<String> list2 = new ArrayList<>();
        for (CityManager cityManager : province) {
            list1.add(cityManager.getProvince());
            list2.add(cityManager.getCity());
        }
        HashSet<String> set = new HashSet<String>(list1);
        List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
        QueryWrapper<TSiteType> wrapper = new QueryWrapper<>();
        wrapper.eq("state",1);
        List<TSiteType> siteType = siteTypeService.list(wrapper);
        model.addAttribute("list",set);
        model.addAttribute("siteType",siteType);
        String roleid = UserExt.getUser().getRoleid();
        model.addAttribute("role",roleid);
        model.addAttribute("objectType",objectType);
        model.addAttribute("objectId",objectId);
        model.addAttribute("type",2);
        return PREFIX + "TSite.html";
    }
    /**
     * 跳转到添加车辆管理
     * 上/下架 1为上架 2为下架 3为删除
     *
     * @return
     */
    @RequestMapping("/tShop_add")
    public String tCompetitionAdd(Model model) {
        List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
        model.addAttribute("list",list);
        String roleid = UserExt.getUser().getRoleid();
        model.addAttribute("role",2);
        return PREFIX + "tShop_add.html";
    @RequestMapping("/changeState")
    @ResponseBody
    public Object changeState(@RequestBody SiteChangeStateVO vo){
        siteClient.changeState(vo);
        return ResultUtil.success();
    }
    /**
     * 添加锁定场地
     *
     * @return
     */
    @RequestMapping("/addSiteLock")
    @ResponseBody
    public Object addSiteLock(@RequestBody TSiteLockDTO dto){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        try {
            dto.setStartTime(simpleDateFormat.parse(dto.getSsTime()));
            dto.setEndTime(simpleDateFormat.parse(dto.getEeTime()));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Object o = siteLockClient.addSiteLock(dto);
        return ResultUtil.success(o);
    }
    /**
     * 跳转到修改车辆管理
     * 删除锁定场地
     *
     * @return
     */
    @RequestMapping("/tShop_update/{id}")
    public String tCityUpdate(@PathVariable Integer id, Model model) {
        TStore byId = storeService.getById(id);
        model.addAttribute("item",byId);
        List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
        model.addAttribute("list",list);
        TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, byId.getProvinceCode()));
        List<TCity> list1 = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId,one.getId()));
        CityListQuery cityListQuery = new CityListQuery();
        cityListQuery.setOffset(1);
        cityListQuery.setLimit(10000);
        cityListQuery.setCityCode(byId.getCityCode());
        Page<TCityManager> list2 = cityClient.list(cityListQuery);
        model.addAttribute("list1",list1);
        model.addAttribute("list2",list2.getRecords());
        String roleid = UserExt.getUser().getRoleid();
        model.addAttribute("role",2);
        model.addAttribute("time",byId.getStartTime()+" - "+byId.getEndTime());
        User byId1 = userMapper.selectById(byId.getStoreStaffId());
        model.addAttribute("city",byId1);
        model.addAttribute("type",1);
        return PREFIX + "tShop_edit.html";
    @RequestMapping("/deleteSiteLock/{id}")
    @ResponseBody
    public Object deleteSiteLock(@PathVariable("id") Integer id){
        siteLockClient.deleteSiteLock(id);
        return ResultUtil.success();
    }
    @RequestMapping("/tShop_info/{id}")
    public String tCityInfo(@PathVariable Integer id, Model model) {
        TStore byId = storeService.getById(id);
        model.addAttribute("item",byId);
        List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
        model.addAttribute("list",list);
        TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, byId.getProvinceCode()));
        List<TCity> list1 = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId,one.getId()));
        CityListQuery cityListQuery = new CityListQuery();
        cityListQuery.setOffset(1);
        cityListQuery.setLimit(10000);
        cityListQuery.setCityCode(byId.getCityCode());
        Page<TCityManager> list2 = cityClient.list(cityListQuery);
        model.addAttribute("list1",list1);
        model.addAttribute("list2",list2.getRecords());
    /**
     * 根据场地id 获取锁定列表
     *
     * @return
     */
    @RequestMapping("/getSiteLockBySiteId/{id}")
    @ResponseBody
    public Object getSiteLockBySiteId(@PathVariable("id") Integer id){
        return siteLockClient.getListById(id);
    }
    /**
     * 跳转到场地管理编辑页面
     */
    @RequestMapping("/openEditTSite/{id}")
    public String openEditTSite(Model model,@PathVariable("id") Integer id) {
        List<CityManager> province = cityManagerClient.listAll();
        // 已有城市管理的省
        ArrayList<String> list1 = new ArrayList<>();
        // 已有城市管理的市
        for (CityManager cityManager : province) {
            list1.add(cityManager.getProvince());
        }
        Integer objectType = UserExt.getUser().getObjectType();
        Integer objectId = UserExt.getUser().getObjectId();
        model.addAttribute("userType",objectType);
        HashSet<String> set = new HashSet<String>(list1);
        QueryWrapper<TSiteType> wrapper = new QueryWrapper<>();
        wrapper.eq("state",1);
        List<TSiteType> siteType = siteTypeService.list(wrapper);
        model.addAttribute("siteType",siteType);
        model.addAttribute("province",set);
        String roleid = UserExt.getUser().getRoleid();
        model.addAttribute("role",roleid);
        model.addAttribute("time",byId.getStartTime()+" - "+byId.getEndTime());
        User byId1 = userMapper.selectById(byId.getStoreStaffId());
        model.addAttribute("city",byId1);
        TSite site = siteService.getOne(new QueryWrapper<TSite>().eq("id", id));
        List<CityManager> city = cityManagerClient.getAccount(site.getCity());
        List<CityManager> city1 = cityManagerClient.getCity(site.getProvince());
        ArrayList<String> strings = new ArrayList<>();
        for (CityManager cityManager : city) {
            strings.add(cityManager.getCity());
        }
        HashSet<String> set1 = new HashSet<String>(strings);
        List<Store> stores = new ArrayList<>();
        if (objectType ==2 ){
            stores= storeClient.getStoreByCityManagerId(objectId);
        }else if(objectType == 3){
            stores= storeClient.getStoreByStoreStaffId(objectId);;
        }else{
            stores = storeClient.getStore(site.getCity());
        }
        List<CityManager> accounts = cityManagerClient.getAccount(site.getCity());
        model.addAttribute("list",site);
        Date insuranceEndTime = site.getInsuranceEndTime();
        String format = new SimpleDateFormat("yyyy-MM-dd").format(insuranceEndTime);
        model.addAttribute("accounts",accounts);
        model.addAttribute("time",format);
        model.addAttribute("city",set1);
        model.addAttribute("city1",city1);
        model.addAttribute("type",1);
        model.addAttribute("objectType",objectType);
        model.addAttribute("objectId",objectId);
        model.addAttribute("stores",stores);
        return PREFIX + "TSite_edit.html";
    }
    /**
     * 跳转到场地锁定页面
     */
    @RequestMapping("/lockSite/{id}")
    public String lockSite(Model model,@PathVariable("id") Integer id) {
        DateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
        List<TSiteLockDTO> listById = siteLockClient.getListById(id);
        for (TSiteLockDTO tSiteLockDTO : listById) {
            tSiteLockDTO.setSsTime(dateformat.format(tSiteLockDTO.getStartTime()));
            tSiteLockDTO.setEeTime(dateformat.format(tSiteLockDTO.getEndTime()));
        }
        model.addAttribute("id",id);
        model.addAttribute("list",listById);
        return PREFIX + "TSite_lock.html";
    }
    /**
     * 跳转到场地管理详情页面
     */
    @RequestMapping("/openInfoTSite/{id}")
    public String openInfoTSite(Model model,@PathVariable("id") Integer id) {
        List<CityManager> province = cityManagerClient.listAll();
        // 已有城市管理的省
        ArrayList<String> list1 = new ArrayList<>();
        // 已有城市管理的市
        for (CityManager cityManager : province) {
            list1.add(cityManager.getProvince());
        }
        Integer objectType = UserExt.getUser().getObjectType();
        Integer objectId = UserExt.getUser().getObjectId();
        model.addAttribute("userType",objectType);
        HashSet<String> set = new HashSet<String>(list1);
        QueryWrapper<TSiteType> wrapper = new QueryWrapper<>();
        wrapper.eq("state",1);
        List<TSiteType> siteType = siteTypeService.list(wrapper);
        model.addAttribute("siteType",siteType);
        model.addAttribute("province",set);
        String roleid = UserExt.getUser().getRoleid();
        model.addAttribute("role",roleid);
        TSite site = siteService.getOne(new QueryWrapper<TSite>().eq("id", id));
        List<CityManager> city = cityManagerClient.getAccount(site.getCity());
        List<CityManager> city1 = cityManagerClient.getCity(site.getProvince());
        ArrayList<String> strings = new ArrayList<>();
        for (CityManager cityManager : city) {
            strings.add(cityManager.getCity());
        }
        HashSet<String> set1 = new HashSet<String>(strings);
        List<Store> stores = new ArrayList<>();
        if (objectType ==2 ){
            stores= storeClient.getStoreByCityManagerId(objectId);
        }else if(objectType == 3){
            stores= storeClient.getStoreByStoreStaffId(objectId);;
        }else{
            stores = storeClient.getStore(site.getCity());
        }
        List<CityManager> accounts = cityManagerClient.getAccount(site.getCity());
        model.addAttribute("list",site);
        Date insuranceEndTime = site.getInsuranceEndTime();
        String format = new SimpleDateFormat("yyyy-MM-dd").format(insuranceEndTime);
        model.addAttribute("accounts",accounts);
        model.addAttribute("time",format);
        model.addAttribute("city",set1);
        model.addAttribute("city1",city1);
        model.addAttribute("type",0);
        return PREFIX + "tShop_edit.html";
        model.addAttribute("objectType",objectType);
        model.addAttribute("objectId",objectId);
        model.addAttribute("stores",stores);
        return PREFIX + "TSite_edit.html";
    }
    @RequestMapping("/tShop_gift/{id}")
    public String tCityGift(@PathVariable Integer id, Model model) {
        TStore byId = storeService.getById(id);
        model.addAttribute("welfarePicture",byId.getWelfarePicture());
        model.addAttribute("id",id);
        return PREFIX + "tShop_img.html";
    }
    @RequestMapping("/tShop_indexSet/{id}")
    public String tCityIndexSet(@PathVariable Integer id, Model model) {
        StoreConfig c1 = storeConfigService.getOne(new LambdaQueryWrapper<StoreConfig>().eq(StoreConfig::getStoreId, id).eq(StoreConfig::getType,1));
        model.addAttribute("c1",c1);
        StoreConfig c2 = storeConfigService.getOne(new LambdaQueryWrapper<StoreConfig>().eq(StoreConfig::getStoreId, id).eq(StoreConfig::getType,2));
        model.addAttribute("c2",c2);
        StoreConfig c3 = storeConfigService.getOne(new LambdaQueryWrapper<StoreConfig>().eq(StoreConfig::getStoreId, id).eq(StoreConfig::getType,3));
        model.addAttribute("c3",c3);
        StoreConfig c4 = storeConfigService.getOne(new LambdaQueryWrapper<StoreConfig>().eq(StoreConfig::getStoreId, id).eq(StoreConfig::getType,4));
        model.addAttribute("c4",c4);
        StoreConfig c5 = storeConfigService.getOne(new LambdaQueryWrapper<StoreConfig>().eq(StoreConfig::getStoreId, id).eq(StoreConfig::getType,5));
        model.addAttribute("c5",c5);
        StoreConfig c6 = storeConfigService.getOne(new LambdaQueryWrapper<StoreConfig>().eq(StoreConfig::getStoreId, id).eq(StoreConfig::getType,6));
        model.addAttribute("c6",c6);
        StoreConfig c7 = storeConfigService.getOne(new LambdaQueryWrapper<StoreConfig>().eq(StoreConfig::getStoreId, id).eq(StoreConfig::getType,7));
        model.addAttribute("c7",c7);
        StoreConfig c8 = storeConfigService.getOne(new LambdaQueryWrapper<StoreConfig>().eq(StoreConfig::getStoreId, id).eq(StoreConfig::getType,8));
        model.addAttribute("c8",c8);
        model.addAttribute("id",id);
        return PREFIX + "tShop_imgAll.html";
    }
    @RequestMapping(value = "/list")
    /**
     * 根据所选门店 获取经营时间
     */
    @ResponseBody
    public Object list(String provinceCode, String cityCode , String name, String phone,String shopName) {
        Page<TStoreListVo> page = new PageFactory<TStoreListVo>().defaultPage();
        List<TStoreListVo> list =  storeService.listAll(page,provinceCode,cityCode,name,phone,shopName);
        for (TStoreListVo tStoreListVo : list) {
            TCityManager byId = cityClient.getById(tStoreListVo.getCityManagerId());
            tStoreListVo.setAccount(byId.getName()+"-"+byId.getPhone());
        }
        page.setRecords(list);
        return  super.packForBT(page);
    @GetMapping("/getTime/{oneId}")
    public Store getTime(@PathVariable("oneId") String oneId) {
        return storeClient.getTime(oneId);
    }
    @RequestMapping(value = "/add")
    /**
     *  场地管理首页 选择省 返回市
     */
    @ResponseBody
    public Object list(TStore tStore,String time,String userName,String userPhone) {
        try {
            if(ToolUtil.isNotEmpty(tStore.getProvinceCode())) {
                TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, tStore.getProvinceCode()));
                tStore.setProvince(one.getName());
                TCity one1 = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, tStore.getCityCode()));
                tStore.setCity(one1.getName());
            }
            tStore.setStartTime(time.split(" - ")[0]);
            tStore.setEndTime(time.split(" - ")[1]);
            tStore.setState(1);
            User user = new User();
            List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getAccount, userPhone));
            if(users.size()>0){
                return "5001";
            }
            user.setAccount(userPhone);
            user.setName(userName);
            user.setRoleid("2");
            user.setPhone(userPhone);
            user.setPassword(SecureUtil.md5("a123456"));
            userMapper.insert(user);
            tStore.setStoreStaffId(user.getId());
            storeService.save(tStore);
            ArrayList<StoreConfig> storeConfigs = new ArrayList<>();
            for (int i = 1; i < 9; i++) {
                StoreConfig storeConfig = new StoreConfig();
                storeConfig.setIsOpen(1);
                storeConfig.setSort(i);
                storeConfig.setType(i);
                storeConfig.setStoreId(tStore.getId());
                storeConfigs.add(storeConfig);
            }
            storeConfigService.saveBatch(storeConfigs);
            return new SuccessTip<>();
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;
        }
    @RequestMapping(value = "/getChange")
    public List<Region> getChange(String province) {
        Region name = regionService.getOne(new QueryWrapper<Region>().eq("name", province));
        return regionService.list(new QueryWrapper<Region>().eq("parent_id", name.getId()));
    }
    @RequestMapping(value = "/update")
    /**
     *  添加场地管理
     */
    @ResponseBody
    public Object update(TStore tStore,String time,String userName,String userPhone) {
        try {
            TStore byId = storeService.getById(tStore.getId());
            if(ToolUtil.isNotEmpty(tStore.getProvinceCode())) {
                TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, tStore.getProvinceCode()));
                tStore.setProvince(one.getName());
                TCity one1 = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, tStore.getCityCode()));
                tStore.setCity(one1.getName());
            }
            tStore.setStartTime(time.split(" - ")[0]);
            tStore.setEndTime(time.split(" - ")[1]);
            if(ToolUtil.isEmpty(tStore.getCoverDrawing())){
                tStore.setCoverDrawing(byId.getCoverDrawing());
            }
            User user = userMapper.selectById(byId.getStoreStaffId());
            List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getAccount, userPhone).ne(User::getId,tStore.getStoreStaffId()));
            if(users.size()>0){
                return "5001";
            }
            user.setAccount(userPhone);
            user.setName(userName);
            user.setPhone(userPhone);
            userMapper.updateById(user);
            storeService.updateById(tStore);
            return new SuccessTip<>();
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;
        }
    @RequestMapping(value = "/addSite")
    public ResultUtil addSite(@RequestBody Site site) {
        Store store = storeClient.getStoreById(site.getStoreId());
        String province = store.getProvince();
        String provinceCode = store.getProvinceCode();
        String city = store.getCity();
        String cityCode = store.getCityCode();
        Integer cityManagerId = store.getCityManagerId();
        site.setProvince(province);
        site.setProvinceCode(provinceCode);
        site.setCity(city);
        site.setCityCode(cityCode);
        site.setCityManagerId(cityManagerId);
        site.setInsertTime(new Date());
        site.setState(1);
        siteClient.addSite(site);
        return ResultUtil.success("添加成功");
    }
    /**
     *  编辑场地管理
     */
    @ResponseBody
    @RequestMapping(value = "/updateSite")
    public ResultUtil updateSite(@RequestBody Site site) {
        if(site.getInsuranceImg().equals("")){
            site.setInsuranceImg(null);
        }
        Store store = storeClient.getStoreById(site.getStoreId());
        String province = store.getProvince();
        String provinceCode = store.getProvinceCode();
        String city = store.getCity();
        String cityCode = store.getCityCode();
        Integer cityManagerId = store.getCityManagerId();
        site.setProvince(province);
        site.setProvinceCode(provinceCode);
        site.setCity(city);
        site.setCityCode(cityCode);
        site.setCityManagerId(cityManagerId);
        site.setInsertTime(new Date());
        site.setState(1);
        siteClient.addSite(site);
        return ResultUtil.success();
    }
    /**
     * 场地管理添加页面选择省 展示市
     */
    @RequestMapping(value = "/getCity")
    @ResponseBody
    public List<CityManager> getCity(String province) {
        return cityManagerClient.getCity(province);
    }
    /**
     * 查询场地管理列表
     */
    @RequestMapping(value= "/listAll")
    @ResponseBody
    public List<TSiteDTO> listAll(String province,String city,String storeName,Integer siteTypeId,String name) {
        // 对象类型
        Integer type = UserExt.getUser().getObjectType();
        // 对象类型Id
        Integer objectId = UserExt.getUser().getObjectId();
        SiteSearchVO vo = new SiteSearchVO();
        vo.setProvince(province);
        vo.setCity(city);
        vo.setStoreName(storeName);
        vo.setSiteTypeId(siteTypeId);
        vo.setName(name);
        vo.setObjectType(type);
        vo.setObjectId(objectId);
        return siteClient.listAll(vo);
    }
    /**
     * 查询场地管理列表
     */
    @RequestMapping(value= "/listExipre")
    @ResponseBody
    public List<TSiteDTO> listExipre(String province,String city,String storeName,Integer siteTypeId,String name) {
        // 对象类型
        Integer type = UserExt.getUser().getObjectType();
        // 对象类型Id
        Integer objectId = UserExt.getUser().getObjectId();
        ExpireSiteSearchVO vo = new ExpireSiteSearchVO();
        vo.setProvince(province);
        vo.setCity(city);
        vo.setStoreName(storeName);
        vo.setSiteTypeId(siteTypeId);
        vo.setName(name);
        vo.setObjectType(type);
        vo.setObjectId(objectId);
        return siteClient.listExipre(vo);
    }
    /**
     * 跳转到添加场地管理
     */
    @RequestMapping("/add")
    public String tCompetitionAdd(Model model) {
        List<CityManager> province = cityManagerClient.listAll();
        // 已有城市管理的省
        ArrayList<String> list1 = new ArrayList<>();
        // 已有城市管理的市
        ArrayList<String> list2 = new ArrayList<>();
        for (CityManager cityManager : province) {
            list1.add(cityManager.getProvince());
            list2.add(cityManager.getCity());
        }
        Integer objectType = UserExt.getUser().getObjectType();
        Integer objectId = UserExt.getUser().getObjectId();
        List<Store> stores = new ArrayList<>();
        if (objectType ==2 ){
             stores= storeClient.getStoreByCityManagerId(objectId);
        }else if(objectType == 3){
             stores= storeClient.getStoreByStoreStaffId(objectId);;
        }
        model.addAttribute("userType",objectType);
        HashSet<String> set = new HashSet<String>(list1);
        QueryWrapper<TSiteType> wrapper = new QueryWrapper<>();
        wrapper.eq("state",1);
        List<TSiteType> siteType = siteTypeService.list(wrapper);
        model.addAttribute("siteType",siteType);
        model.addAttribute("province",set);
        model.addAttribute("city",list2);
        String roleid = UserExt.getUser().getRoleid();
        model.addAttribute("role",roleid);
        model.addAttribute("objectType",objectType);
        model.addAttribute("objectId",objectId);
        model.addAttribute("stores",stores);
        return PREFIX + "tSite_add.html";
    }
//    /**
//     * 跳转到场地管理页面
//     */
//    @RequestMapping("/add")
//    public String tCompetitionAdd(Model model) {
//        List<CityManager> province = cityManagerClient.listAll();
//        // 已有城市管理的省
//        ArrayList<String> list1 = new ArrayList<>();
//        // 已有城市管理的市
//        ArrayList<String> list2 = new ArrayList<>();
//        for (CityManager cityManager : province) {
//            list1.add(cityManager.getProvince());
//            list2.add(cityManager.getCity());
//        }
//        Integer objectType = UserExt.getUser().getObjectType();
//        Integer objectId = UserExt.getUser().getObjectId();
//        List<Store> stores = new ArrayList<>();
//        if (objectType ==2 ){
//            stores= storeClient.getStoreByCityManagerId(objectId);
//        }else if(objectType == 3){
//            stores= storeClient.getStoreByStoreStaffId(objectId);;
//        }
//        model.addAttribute("userType",objectType);
//        HashSet<String> set = new HashSet<String>(list1);
//        QueryWrapper<TSiteType> wrapper = new QueryWrapper<>();
//        wrapper.eq("state",1);
//        List<TSiteType> siteType = siteTypeService.list(wrapper);
//        model.addAttribute("siteType",siteType);
//        model.addAttribute("province",set);
//        model.addAttribute("city",list2);
//        String roleid = UserExt.getUser().getRoleid();
//        model.addAttribute("role",roleid);
//        model.addAttribute("objectType",objectType);
//        model.addAttribute("objectId",objectId);
//        model.addAttribute("stores",stores);
//        return PREFIX + "tSite_add.html";
//    }
    @RequestMapping(value = "/onChange")
    @ResponseBody
    public Object onChange(Integer oneId) {
@@ -269,66 +531,25 @@
            return ERROR;
        }
    }
    @RequestMapping(value = "/saveImgAll")
    // 选择市后 获取对应账号
    @RequestMapping(value = "/accountChangeNext")
    @ResponseBody
    public Object saveImgAll(Integer id,Integer px1,Integer px2,Integer px3,Integer px4,Integer px5,Integer px6,Integer px7,Integer px8,
                             String c1,String c2,String c3,String c4,String c5,String c6,String c7,String c8,
                             Integer r1,Integer r2,Integer r3,Integer r4,Integer r5,Integer r6,Integer r7,Integer r8) {
        try {
            ArrayList<StoreConfig> storeConfigs = new ArrayList<>();
            StoreConfig collect1 = collect(id, px1, r1, c1, 1);
            StoreConfig collect2 = collect(id, px2, r2, c2, 2);
            StoreConfig collect3 = collect(id, px3, r3, c3, 3);
            StoreConfig collect4 = collect(id, px4, r4, c4, 4);
            StoreConfig collect5 = collect(id, px5, r5, c5, 5);
            StoreConfig collect6 = collect(id, px6, r6, c6, 6);
            StoreConfig collect7 = collect(id, px7, r7, c7, 7);
            StoreConfig collect8 = collect(id, px8, r8, c8, 8);
            storeConfigs.add(collect1);
            storeConfigs.add(collect2);
            storeConfigs.add(collect3);
            storeConfigs.add(collect4);
            storeConfigs.add(collect5);
            storeConfigs.add(collect6);
            storeConfigs.add(collect7);
            storeConfigs.add(collect8);
            storeConfigService.updateBatchById(storeConfigs);
            return new SuccessTip<>();
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;
        }
    public Object accountChangeNext(String oneId) {
        return cityManagerClient.getAccount(oneId);
    }
    private StoreConfig collect(Integer id,Integer sort,Integer isOpen,String img,int type){
        StoreConfig one = storeConfigService.getOne(new LambdaQueryWrapper<StoreConfig>().eq(StoreConfig::getStoreId, id).eq(StoreConfig::getType, type));
        one.setSort(sort);
        one.setIsOpen(isOpen);
        if(ToolUtil.isNotEmpty(img)){
            one.setBackgroundImage(img);
        }
        return one;
    }
    @RequestMapping(value = "/oneChangeNext")
    // 选择市后 获取对应门店
    @RequestMapping(value = "/storeChangeNext")
    @ResponseBody
    public Object oneChangeNext(String oneId) {
        try {
            CityListQuery cityListQuery = new CityListQuery();
            cityListQuery.setCityCode(oneId);
            cityListQuery.setOffset(1);
            cityListQuery.setLimit(100000);
            Page<TCityManager> list = cityClient.list(cityListQuery);
            List<TCityManager> records = list.getRecords();
            for (TCityManager record : records) {
                record.setName(record.getName()+"-"+record.getPhone());
            }
            return records;
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;
    public Object storeChangeNext(String oneId) {
        if (oneId.equals("")){
            return null;
        }
        return storeClient.getStore(oneId);
    }
    @RequestMapping(value = "/cancel")
@@ -355,50 +576,4 @@
            return ERROR;
        }
    }
    @RequestMapping(value = "/freeze")
    @ResponseBody
    public Object freeze(Integer id) {
        try {
            TStore byId = storeService.getById(id);
            byId.setState(2);
            storeService.updateById(byId);
            return SUCCESS_TIP;
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;
        }
    }
    @RequestMapping(value = "/unfreeze")
    @ResponseBody
    public Object unfreeze(Integer id) {
        try {
            TStore byId = storeService.getById(id);
            byId.setState(1);
            storeService.updateById(byId);
            return SUCCESS_TIP;
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;
        }
    }
    @RequestMapping(value = "/pwd")
    @ResponseBody
    public Object pwd(Integer id) {
        try {
            TStore byId = storeService.getById(id);
            User user = userMapper.selectById(byId.getStoreStaffId());
            user.setPassword(SecureUtil.md5("a123456"));
            userMapper.updateById(user);
            return SUCCESS_TIP;
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;
        }
    }
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TWelfareVideoController.java
@@ -1,28 +1,237 @@
package com.dsh.guns.modular.system.controller.code;
import com.dsh.course.feignClient.activity.BenefitsVideoClient;
import com.dsh.course.feignClient.activity.model.BenefitsVedioChangeStateVO;
import com.dsh.course.feignClient.activity.model.BenefitsVideoClassification;
import com.dsh.course.feignClient.activity.model.BenefitsVideos;
import com.dsh.course.feignClient.activity.model.QueryBenefitsVedioVO;
import com.dsh.course.feignClient.course.CourseClient;
import com.dsh.course.feignClient.course.model.CourseChangeStateDTO;
import com.dsh.guns.config.UserExt;
import com.dsh.guns.modular.system.model.TCourse;
import com.dsh.guns.modular.system.model.TQueryBenefitsVO;
import com.dsh.guns.modular.system.model.TQueryBenefitsVideosDTO;
import com.dsh.guns.modular.system.model.TQueryBenefitsVideosVO;
import com.dsh.guns.modular.system.util.ResultUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * 福利视频分类 控制器
 */
@Controller
@RequestMapping("/tWelfareVideo")
@RequestMapping("/benefits")
public class TWelfareVideoController {
    private String PREFIX = "/system/tWelfareVideo/";
    private String PREFIX = "/system/benefits/";
    @Autowired
    private BenefitsVideoClient benefitsVideoClient;
    @Autowired
    private CourseClient courseClient;
    /**
     * 优惠券审核列表页
     * 跳转福利视频分类首页
     */
    @RequestMapping("")
    public String index(Model model) {
        return PREFIX + "TWelfareVideo.html";
        return PREFIX + "TBenefits.html";
    }
    /**
     * 跳转福利视频分类添加页面
     */
    @RequestMapping("/add")
    public String add(Model model) {
        return PREFIX + "TBenefits_add.html";
    }
    /**
     * 跳转福利视频分类编辑页面--查看详情
     */
    @RequestMapping("/info/{id}")
    public String info(Model model, @PathVariable("id") Integer id) {
        BenefitsVideoClassification data = benefitsVideoClient.getById(id);
        model.addAttribute("data",data);
        model.addAttribute("type",1);
        return PREFIX + "TBenefits_edit.html";
    }
    /**
     * 跳转福利视频分类编辑页面
     */
    @RequestMapping("/update/{id}")
    public String update(Model model, @PathVariable("id") Integer id) {
        BenefitsVideoClassification data = benefitsVideoClient.getById(id);
        model.addAttribute("data",data);
        model.addAttribute("type",0);
        return PREFIX + "TBenefits_edit.html";
    }
    /**
     * 跳转视频详情页面
     */
    @RequestMapping("/getBenefitsVideos/{courseId}")
    public String getBenefitsVideos(Model model, @PathVariable("courseId") Integer id) {
        model.addAttribute("id",id);
        return PREFIX + "TBenefitsVideos.html";
    }
    /**
     * 跳转视频详情添加页面
     * @param id 福利视频分类id
     */
    @RequestMapping("/addBenefitsVideos/{id}")
    public String addBenefitsVideos(Model model,@PathVariable("id")Integer id) {
        model.addAttribute("id",id);
        List<BenefitsVideos> benefitVideoById = benefitsVideoClient.getBenefitVideoById(id);
//        // 所选福利视频分类下的视频的courseId集合
//        List<Integer> list = new ArrayList<>();
//        for (BenefitsVideos benefitsVideos : benefitVideoById) {
//            list.add(benefitsVideos.getCourseId());
//        }
        TQueryBenefitsVideosDTO dto = new TQueryBenefitsVideosDTO();
//        dto.setCoursIds(list);
        List<TQueryBenefitsVideosVO> courseByCourseIds = courseClient.getCourseByCourseIds(dto);
        List<TQueryBenefitsVideosVO> tQueryBenefitsVideosVOS = new ArrayList<>();
        for (TQueryBenefitsVideosVO courseByCourseId : courseByCourseIds) {
            if (courseByCourseId.getType()!=1){
                tQueryBenefitsVideosVOS.add(courseByCourseId);
            }
        }
        model.addAttribute("data",tQueryBenefitsVideosVOS);
        return PREFIX + "TBenefitsVideos_add.html";
    }
    /**
     * 跳转视频详情编辑页面
     */
    @RequestMapping("/infoBenefitsVideos/{id}/{type}/{benefitsVideosId}")
    public String infoBenefitsVideos(Model model, @PathVariable("id") Integer id,@PathVariable("type") Integer type,@PathVariable("benefitsVideosId") Integer benefitsVideosId) {
        TQueryBenefitsVideosVO tQueryBenefitsVideosVO = new TQueryBenefitsVideosVO();
        BenefitsVideos benefitVideosById = benefitsVideoClient.getBenefitVideosById(benefitsVideosId);
        TCourse tCourse = courseClient.queryCourseById(id);
        BeanUtils.copyProperties(tCourse,tQueryBenefitsVideosVO);
        tQueryBenefitsVideosVO.setIntegral(benefitVideosById.getIntegral());
        tQueryBenefitsVideosVO.setBenefitsVideosId(benefitVideosById.getId());
        model.addAttribute("data",tQueryBenefitsVideosVO);
        model.addAttribute("type",type);
        return PREFIX + "TBenefitsVideos_edit.html";
    }
    /**
     * 根据所选视频 获取视频封面用于前端显示
     */
    @RequestMapping("/getCoverDrawing/{id}")
    @ResponseBody
    public TCourse infoBenefitsVideos( @PathVariable("id") Integer id) {
        TCourse tCourse = courseClient.queryCourseById(id);
        return tCourse;
    }
    /**
     * 查询福利视频分类列表
     */
    @RequestMapping(value= "/list")
    @ResponseBody
    public List<TQueryBenefitsVO> listAll(String name, Integer position) {
        // 对象类型
        Integer type = UserExt.getUser().getObjectType();
        // 对象类型Id
        Integer objectId = UserExt.getUser().getObjectId();
        QueryBenefitsVedioVO vo = new QueryBenefitsVedioVO();
        vo.setName(name);
        vo.setPosition(position);
        return benefitsVideoClient.listAll(vo);
    }
    /**
     * 查询视频详情列表
     */
    @RequestMapping(value= "/listBenefitsVideos/{id}")
    @ResponseBody
    public List<TQueryBenefitsVideosVO> listBenefitsVideos(@PathVariable("id")Integer bId, String name, Integer type, Integer state) {
        TQueryBenefitsVideosDTO vo = new TQueryBenefitsVideosDTO();
        List<BenefitsVideos> benefitVideoById = benefitsVideoClient.getBenefitVideoById(bId);
        vo.setCoursIds(new ArrayList<>());
        for (BenefitsVideos benefitsVideos : benefitVideoById) {
            // 获取课程id集合
            vo.getCoursIds().add(benefitsVideos.getCourseId());
        }
        if (benefitVideoById.size()==0){
            return new ArrayList<>();
        }
        vo.setName(name);
        vo.setType(type);
        vo.setState(state);
        List<TQueryBenefitsVideosVO> courseByCourseIds = courseClient.getCourseByCourseIds(vo);
        for (BenefitsVideos benefitsVideos : benefitVideoById) {
            for (TQueryBenefitsVideosVO courseByCourseId : courseByCourseIds) {
                if (benefitsVideos.getCourseId() == courseByCourseId.getId()){
                    courseByCourseId.setIntegral(benefitsVideos.getIntegral());
                    courseByCourseId.setBenefitsVideosId(benefitsVideos.getId());
                }
            }
        }
        return courseByCourseIds;
    }
    /**
     * 添加福利视频分类
     */
    @RequestMapping(value= "/addBenefits")
    @ResponseBody
    public Object addBenefits(@RequestBody BenefitsVideoClassification bvcf) {
        bvcf.setState(1);
        bvcf.setInsertTime(new Date());
        return benefitsVideoClient.addSite(bvcf);
    }
    /**
     * 添加视频详情
     */
    @RequestMapping(value= "/addBenefitsVideos")
    @ResponseBody
    public Object addBenefitsVideos(@RequestBody BenefitsVideos bvcf) {
        if (bvcf.getId()!=null){
            return benefitsVideoClient.addBenefitsVideos(bvcf);
        }else {
        bvcf.setState(1);
        bvcf.setInsertTime(new Date());
        return benefitsVideoClient.addBenefitsVideos(bvcf);
        }
    }
    /**
     * 福利视频分类上/下架 1为上架 2为下架 3为删除
     *
     * @return
     */
    @RequestMapping("/changeState")
    @ResponseBody
    public Object changeState(@RequestBody BenefitsVedioChangeStateVO vo){
        benefitsVideoClient.changeState(vo);
        return ResultUtil.success();
    }
    /**
     * 视频详情上/下架 1为上架 2为下架 3为删除
     *
     * @return
     */
    @RequestMapping("/changeCourseState")
    @ResponseBody
    public Object changeCourseState(@RequestBody CourseChangeStateDTO dto){
        courseClient.changeState(dto);
        return ResultUtil.success();
    }
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/LoginController.java
@@ -101,6 +101,8 @@
        User byId = userService.getById(user.getId());
        //获取用户头像 Obtain user profile
        String avatar = byId.getAvatar();
        Integer objectType = user.getObjectType();
        model.addAttribute("roleNames", role.getName());
        model.addAttribute("language", language);
        model.addAttribute("avatar", avatar);
@@ -113,8 +115,9 @@
        return "/index.html";
    }
    /**
     * 跳转到登录页面
     * 跳转到场地管理页面
     */
    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String login() {
@@ -124,7 +127,6 @@
            return "/login.html" ;
        }
    }
    /**
     * 点击登录执行的动作
     */
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/util/UploadUtil.java
@@ -140,6 +140,7 @@
        return pictureName;
    }
    /**
     * UEditor编辑器上传图片
     */
cloud-server-management/src/main/java/com/dsh/guns/modular/system/enums/RuleStatusEnum.java
@@ -8,7 +8,6 @@
 * @Date 2023/02/15 9:42
 */
public enum RuleStatusEnum {
    NOT_START(1, "未开始"),
    STARTED(2, "已开始"),
    ENDED(3, "已结束"),
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CoachChangeStateVO.java
New file
@@ -0,0 +1,11 @@
package com.dsh.guns.modular.system.model;
import lombok.Data;
import java.util.List;
@Data
public class CoachChangeStateVO {
    private List<Integer> ids;
    private Integer state;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CoachQuery.java
New file
@@ -0,0 +1,13 @@
package com.dsh.guns.modular.system.model;
import lombok.Data;
@Data
public class CoachQuery {
    private String province;
    private String city;
    private String name;
    private String phone;
    // 编辑页面回显使用
    private Integer id;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/ExpireSiteSearchVO.java
New file
@@ -0,0 +1,40 @@
package com.dsh.guns.modular.system.model;
import lombok.Data;
@Data
public class ExpireSiteSearchVO {
    /**
     * 省
     */
    private String province;
    /**
     * 市
     */
    private String city;
    /**
     * 门店名称
     */
    private String storeName;
    /**
     * 场地类型
     */
    private Integer siteTypeId;
    /**
     * 场地名称
     */
    private String name;
    /**
     * 对象类型(1=平台,2=城市管理员,3=门店)
     */
    private Integer objectType;
    private Integer objectId;
    // 登陆人类型
    private Integer typeId ;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/SiteSearchVO.java
New file
@@ -0,0 +1,37 @@
package com.dsh.guns.modular.system.model;
import lombok.Data;
@Data
public class SiteSearchVO {
    /**
     * 省
     */
    private String province;
    /**
     * 市
     */
    private String city;
    /**
     * 门店名称
     */
    private String storeName;
    /**
     * 场地类型
     */
    private Integer siteTypeId;
    /**
     * 场地名称
     */
    private String name;
    /**
     * 对象类型(1=平台,2=城市管理员,3=门店)
     */
    private Integer objectType;
    private Integer objectId;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/Store.java
New file
@@ -0,0 +1,139 @@
package com.dsh.guns.modular.system.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
/**
 * <p>
 * 门店信息
 * </p>
 *
 * @author jqs
 * @since 2023-06-14
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_store")
public class Store extends Model<Store> {
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 门店名称
     */
    @TableField("name")
    private String name;
    /**
     * 门店店长id
     */
    @TableField("storeStaffId")
    private Integer storeStaffId;
    /**
     * 城市管理员id
     */
    @TableField("cityManagerId")
    private Integer cityManagerId;
    /**
     * 省
     */
    @TableField("province")
    private String province;
    /**
     * 省编号
     */
    @TableField("provinceCode")
    private String provinceCode;
    /**
     * 市
     */
    @TableField("city")
    private String city;
    /**
     * 市编号
     */
    @TableField("cityCode")
    private String cityCode;
    /**
     * 联系电话
     */
    @TableField("phone")
    private String phone;
    /**
     * 详细地址
     */
    @TableField("address")
    private String address;
    /**
     * 纬度
     */
    @TableField("lat")
    private String lat;
    /**
     * 经度
     */
    @TableField("lon")
    private String lon;
    /**
     * 营业开始时间
     */
    @TableField("startTime")
    private String startTime;
    /**
     * 营业结束时间
     */
    @TableField("endTime")
    private String endTime;
    /**
     * 封面图
     */
    @TableField("coverDrawing")
    private String coverDrawing;
    /**
     * 实景图
     */
    @TableField("realPicture")
    private String realPicture;
    /**
     * 门店介绍
     */
    @TableField("introduce")
    private String introduce;
    /**
     * 福利图片
     */
    @TableField("welfarePicture")
    private String welfarePicture;
    /**
     * 评分
     */
    @TableField("score")
    private BigDecimal score;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("state")
    private Integer state;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TQueryBenefitsVO.java
New file
@@ -0,0 +1,18 @@
package com.dsh.guns.modular.system.model;
import lombok.Data;
/**
 * 福利视频分类列表查询返回VO
 */
@Data
public class TQueryBenefitsVO {
    private Integer id;
    private String name;
    // 位置(1=线上课得积分,2=看视频得奖励)
    private Integer position;
    private Integer sort;
    private Integer count;
    private Integer state;
    private Integer courseId;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TQueryBenefitsVideosDTO.java
New file
@@ -0,0 +1,20 @@
package com.dsh.guns.modular.system.model;
import lombok.Data;
import java.util.List;
/**
 * 接收视频详情列表查询参数DTO
 */
@Data
public class TQueryBenefitsVideosDTO {
    // 课程id
    private List<Integer> coursIds;
    // 视频名称
    private String name;
    // 视频类型
    private Integer type;
    // 1上架 2下架 3已失效
    private Integer state;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TQueryBenefitsVideosVO.java
New file
@@ -0,0 +1,26 @@
package com.dsh.guns.modular.system.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
 * 视频详情列表查询返回VO
 */
@Data
public class TQueryBenefitsVideosVO {
    private Integer id;
    private String name;
    private String introduce;
    private String coverDrawing;
    private String introductionDrawing;
    private String courseVideo;
    private Integer state;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date insertTime;
    private Integer integral;
    private Integer type;
    private Integer benefitsVideosId;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TSite.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@@ -84,6 +85,7 @@
     * 场地责任险有效期
     */
    @TableField("insuranceEndTime")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date insuranceEndTime;
    /**
     * 场地责任险图片
@@ -104,5 +106,6 @@
     * 添加时间
     */
    @TableField("insertTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date insertTime;
}
cloud-server-management/src/main/webapp/WEB-INF/view/common/_right.html
@@ -32,9 +32,9 @@
        </nav>-->
        <button class="roll-nav roll-right J_tabRight"><i class="fa fa-forward"></i>
        </button>
        <div class="btn-group roll-nav roll-right">
            <button class="dropdown J_tabClose" data-toggle="dropdown">关闭操作<span class="caret"></span>
            </button>
            <ul role="menu" class="dropdown-menu dropdown-menu-right">
                <li class="J_tabShowActive"><a>定位当前选项卡</a>
@@ -55,4 +55,21 @@
        <div class="pull-right">&copy; 2019-2023 <a href="#" onclick="return false" target="_blank">玩湃</a>
        </div>
    </div>
</div>
</div>
<script src="${ctxPath}/js/common/Feng.js"></script>
<script type="text/javascript">
    function getSite(){
        // var ajax = new $ax(Feng.ctxPath + "/tSite/expireInsuranceEndTime", function(data){
        // });
        // ajax.start();
        $.ajax({
            url: Feng.ctxPath + "/tSite/expireInsuranceEndTime",
            type: "POST",
            contentType: "application/json", // 设置请求头的 Content-Type
            success: function(response) {
                           },
            error: function(xhr, status, error) {
            }
        });
    }
</script>
cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefits.html
New file
@@ -0,0 +1,71 @@
@layout("/common/_container.html"){
<style>
    .data-item {
        position: relative;
        border: 1px solid #ccc;
        padding: 10px;
        margin-bottom: 10px;
        display: flex;
        align-items: center;
        justify-content: center;
        max-width: 200px;
        margin-right: 10px;
    }
    .delete-button {
        position: absolute;
        top: -10px;
        right: -10px;
        cursor: pointer;
        color: black;
        width: 20px;
        height: 20px;
        text-align: center;
        line-height: 20px;
        border-radius: 50%;
    }
</style>
<div class="row">
    <div class="col-sm-12">
        <div class="ibox float-e-margins">
            <div class="ibox-title">
                <h5>视频分类管理</h5>
            </div>
            <div class="ibox-content">
                <div class="row row-lg">
                    <div class="col-sm-12">
                        <div class="row">
                            <div class="col-sm-3">
                                <#NameCon id="name" name="分类名称" />
                            </div>
                            <div class="col-sm-3">
                                <#SelectCon id="position" name="所在位置" >
                                <option value="">全部</option>
                                <option value="1">线上课得积分</option>
                                <option value="2">看视频得奖励</option>
                            </#SelectCon>
                        </div>
        <div class="col-sm-3">
            <#button name="搜索" icon="fa-search" clickFun="TQuestion.search()"/>
            <#button name="重置" icon="fa-trash" clickFun="TQuestion.resetSearch()"/>
        </div>
                        </div>
                        <div class="hidden-xs" id="TCouponTableToolbar" role="group">
                            <#button name="添加" icon="fa-plus" clickFun="TQuestion.openAdd()"/>
                            <#button name="编辑" icon="fa-edit" clickFun="TQuestion.openChange()" space="true"/>
                            <#button name="删除" icon="fa-remove" clickFun="TQuestion.delete()" space="true"/>
                            <#button name="上架" icon="fa-check" clickFun="TQuestion.onShelf()" space="true"/>
                            <#button name="下架" icon="fa-remove" clickFun="TQuestion.offShelf()" space="true"/>
                            <#button name="查看详情" icon="fa-search" clickFun="TQuestion.getInfo()" space="true"/>
                            <#button name="视频详情" icon="fa-search" clickFun="TQuestion.getInfo()" space="true"/>
                        </div>
                        <#table id="TQuestionTable"/>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/benefits/TBenefits.js"></script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefitsVideos.html
New file
@@ -0,0 +1,79 @@
@layout("/common/_container.html"){
<style>
    .data-item {
        position: relative;
        border: 1px solid #ccc;
        padding: 10px;
        margin-bottom: 10px;
        display: flex;
        align-items: center;
        justify-content: center;
        max-width: 200px;
        margin-right: 10px;
    }
    .delete-button {
        position: absolute;
        top: -10px;
        right: -10px;
        cursor: pointer;
        color: black;
        width: 20px;
        height: 20px;
        text-align: center;
        line-height: 20px;
        border-radius: 50%;
    }
</style>
<div class="row">
    <div class="col-sm-12">
        <div class="ibox float-e-margins">
            <input hidden id="id" value="${id}">
            <div class="ibox-title">
                <h5>视频详情</h5>
            </div>
            <div class="ibox-content">
                <div class="row row-lg">
                    <div class="col-sm-12">
                        <div class="row">
                            <div class="col-sm-3">
                                <#NameCon id="name" name="视频名称" />
                            </div>
                            <div class="col-sm-3">
                                <#SelectCon id="position" name="视频类型" >
                                <option value="">全部</option>
                                <option value="2">运动教学视频</option>
                                <option value="3">器材教学视频</option>
                            </#SelectCon>
                        </div>
                        <div class="col-sm-3">
                            <#SelectCon id="state" name="状态" >
                            <option value="">全部</option>
                            <option value="1">上架</option>
                            <option value="2">下架</option>
                            <option value="3">已失效</option>
                        </#SelectCon>
                    </div>
        <div class="col-sm-3">
            <#button name="搜索" icon="fa-search" clickFun="TQuestion.search()"/>
            <#button name="重置" icon="fa-trash" clickFun="TQuestion.resetSearch()"/>
        </div>
                        </div>
                        <div class="hidden-xs" id="TCouponTableToolbar" role="group">
                            <#button name="添加" icon="fa-plus" clickFun="TQuestion.openAdd()"/>
                            <#button name="编辑" icon="fa-edit" clickFun="TQuestion.openChange()" space="true"/>
                            <#button name="删除" icon="fa-remove" clickFun="TQuestion.delete()" space="true"/>
                            <#button name="上架" icon="fa-check" clickFun="TQuestion.onShelf()" space="true"/>
                            <#button name="下架" icon="fa-remove" clickFun="TQuestion.offShelf()" space="true"/>
                            <#button name="查看详情" icon="fa-search" clickFun="TQuestion.getInfo()" space="true"/>
                        </div>
                        <#table id="TQuestionTable"/>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/benefits/tBenefitsVideos.js"></script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefitsVideos_add.html
New file
@@ -0,0 +1,104 @@
@layout("/common/_container.html"){
<style>
    .avatar-uploader .el-upload {
        border: 1px dashed #d9d9d9;
        border-radius: 6px;
        cursor: pointer;
        position: relative;
        height: 100px;
        width: 100px;
        overflow: hidden;
    }
    .avatar-uploader .el-upload:hover {
        border-color: #409EFF;
    }
    .avatar-uploader-icon {
        font-size: 28px;
        color: #8c939d;
        width: 100px;
        height: 100px;
        line-height: 100px;
        margin-top: 32px;
        text-align: center;
    }
    .avatar {
        width: 100px;
        height: 100px;
        display: block;
    }
    .col-sm-12 {
        margin-top: 20px;
    }
    .col-sm-12 select {
        height: 33px;
    }
</style>
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
<div class="ibox float-e-margins">
    <input hidden id="id" value="${id}">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            <div class="form-group" id="siteType">
                <label class="col-sm-3 control-label">*视频名称:</label>
                <div class="col-sm-9">
                    <select style="width: 300px"  class="form-control" id="name" name = "name" onchange="TQuestion.oneChange()">
                        <option value="" style="color: #b6b6b6" disabled selected>请选择</option>
                        @for(obj in data){
                        <option value="${obj.id}">${obj.name}</option>
                        @}
                    </select>
                </div>
            </div>
            <div class="form-group">
                <label class="col-sm-3 control-label">*视频封面:</label>
                <div class="col-sm-9" style="display: flex;">
                    <img id="img" src="" width="150px" height="150px">
<!--                    <#avatar id="img" name="" avatarImg=""/>-->
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*视频简介:</label>
                <div class="col-sm-9" style="display: flex;">
                    <textarea readonly id="introduce" rows="10" COLS="30" placeholder="请输入视频简介"></textarea>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*可获积分:</label>
                <!-- <input style="width: 300px" class="form-control"  type="time">-->
                <div class="col-sm-9"  style="display: flex">
                    <input style="width: 300px;" placeholder="请输入可获得积分" id="integral" class="form-control" type="text">
                </div>
            </div>
             </div>
         </div>
</div>
<div class="row btn-group-m-t">
    <div class="col-sm-10 col-sm-offset-5" >
        <#button btnCss="info" name="保存" id="ensure" icon="fa-check" clickFun="TQuestion.addSubmit()"/>
        <#button btnCss="danger" name="关闭" id="cancel" icon="fa-eraser" clickFun="TQuestion.close()"/>
    </div>
</div>
        </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/benefits/tBenefitsVideos_add.js"></script>
<script src="${ctxPath}/js/vue/vue.js"></script>
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefitsVideos_edit.html
New file
@@ -0,0 +1,124 @@
@layout("/common/_container.html"){
<style>
    .avatar-uploader .el-upload {
        border: 1px dashed #d9d9d9;
        border-radius: 6px;
        cursor: pointer;
        position: relative;
        height: 100px;
        width: 100px;
        overflow: hidden;
    }
    .avatar-uploader .el-upload:hover {
        border-color: #409EFF;
    }
    .avatar-uploader-icon {
        font-size: 28px;
        color: #8c939d;
        width: 100px;
        height: 100px;
        line-height: 100px;
        margin-top: 32px;
        text-align: center;
    }
    .avatar {
        width: 100px;
        height: 100px;
        display: block;
    }
    .col-sm-12 {
        margin-top: 20px;
    }
    .col-sm-12 select {
        height: 33px;
    }
</style>
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
<div class="ibox float-e-margins">
    <input hidden id="benefitsVideosId" value="${data.benefitsVideosId}">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            @if(type == 1){
            <div class="form-group" id="siteType">
                <label class="col-sm-3 control-label">*视频类型:</label>
                <div class="col-sm-9">
                    <input style="width: 300px;" value="${data.type == 2 ? '运动教学视频' : '器材教学视频'}"  id="type" class="form-control" type="text">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*视频名称:</label>
                <!-- <input style="width: 300px" class="form-control"  type="time">-->
                <div class="col-sm-9"  style="display: flex">
                    <input style="width: 300px;" value="${data.name}"  id="name" class="form-control" type="text">
                </div>
            </div>
            @}
            <div class="form-group" >
                <label class="col-sm-3 control-label">*可获积分:</label>
                <div class="col-sm-9"  style="display: flex">
                    <input style="width: 300px;" placeholder="请输入可获得积分" id="integral" value="${data.integral}" class="form-control" type="text">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*视频简介:</label>
                <div class="col-sm-9" style="display: flex;">
                    <textarea readonly id="introduce" rows="10" COLS="30" value="${data.introduce}" placeholder="请输入视频简介">${data.introduce}</textarea>
                </div>
            </div>
            @if(type == 1){
            <div class="form-group">
                <label class="col-sm-3 control-label">*视频封面:</label>
                <div class="col-sm-9" style="display: flex;">
                    <img id="coverDrawing" src="${data.coverDrawing}" width="150px" height="150px">
                    <!--                    <#avatar id="img" name="" avatarImg=""/>-->
                </div>
            </div>
            <div class="form-group">
                <label class="col-sm-3 control-label">*视频介绍:</label>
                <div class="col-sm-9" style="display: flex;">
                    <img id="introductionDrawing" src="${data.introductionDrawing}" width="150px" height="150px">
                    <!--                    <#avatar id="img" name="" avatarImg=""/>-->
                </div>
            </div>
            <div class="form-group">
                <label class="col-sm-3 control-label">*视频内容:</label>
                <div class="col-sm-9" style="display: flex;">
                    <img id="courseVideo" src="" width="150px" height="150px">
                    <!--                    <#avatar id="img" name="" avatarImg=""/>-->
                </div>
            </div>
            @}
             </div>
         </div>
<div class="row btn-group-m-t">
    <div class="col-sm-10 col-sm-offset-5" >
        @if(type != 1){
        <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TQuestion.updateVideosSubmit()"/>
        @}
        <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TQuestion.close()"/>
    </div>
</div>
        </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/benefits/tBenefitsVideos_add.js"></script>
<script src="${ctxPath}/js/vue/vue.js"></script>
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
<script>
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefitsVideos_info.html
New file
@@ -0,0 +1,233 @@
@layout("/common/_container.html"){
<style>
    .avatar-uploader .el-upload {
        border: 1px dashed #d9d9d9;
        border-radius: 6px;
        cursor: pointer;
        position: relative;
        height: 100px;
        width: 100px;
        overflow: hidden;
    }
    .avatar-uploader .el-upload:hover {
        border-color: #409EFF;
    }
    .avatar-uploader-icon {
        font-size: 28px;
        color: #8c939d;
        width: 100px;
        height: 100px;
        line-height: 100px;
        margin-top: 32px;
        text-align: center;
    }
    .avatar {
        width: 100px;
        height: 100px;
        display: block;
    }
    .col-sm-12 {
        margin-top: 20px;
    }
    .col-sm-12 select {
        height: 33px;
    }
</style>
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
<div class="ibox float-e-margins">
    <input hidden id="objectType" value="${objectType}">
    <input hidden id="objectId" value="${objectId}">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            <input hidden id="role" value="${role}">
            @if(objectType==1){
            <div class="form-group" id="provinceCode">
                <label class="col-sm-3 control-label">*所在省:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="pCode" name="pCode" onchange="TSite.oneChange()">
                        <option value="">请选择省</option>
                        @for(obj in list){
                        <option style="width: 300px" value="${obj.provinceCode}">${obj.province}</option>
                        @}
                    </select>
                </div>
            </div>
            @}
            @if(objectType==1){
            <div class="form-group" id="cityCode">
                <label class="col-sm-3 control-label">*所在市:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="cCode" name="cCode" onchange="TSite.oneChangeNext(this)">
                        <option value="">请选择市</option>
                    </select>
                </div>
            </div>
            @}
            @if(objectType==1){
            <div class="form-group" >
                <label class="col-sm-3 control-label">*所属账号:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="account" name="account">
                        <option value="" style="color: #676A6C" disabled selected>请选择所属账号</option>
                    </select>
                </div>
            </div>
            @}
            <div class="form-group" id="siteType">
                <label class="col-sm-3 control-label">*教练类型:</label>
                <div class="col-sm-9">
                    <select style="width: 300px"  class="form-control" id="coachTypeId" name = "typeId">
                        <option value="" style="color: #b6b6b6" disabled selected>请选择教练类型</option>
                        @for(obj in coachType){
                        <option value="${obj.id}">${obj.name}</option>
                        @}
                    </select>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*姓名:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="name"  placeholder="请输入姓名" type="text">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*生日:</label>
                <!-- <input style="width: 300px" class="form-control"  type="time">-->
                <div class="col-sm-9"  style="display: flex">
                    <input style="width: 300px;" placeholder="请选择" id="birthday" class="form-control" type="date">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*性别:</label>
                <div class="col-sm-9">
                    <select style="width: 300px"  class="form-control" id="gender" name = "gender">
                        <option value="" style="color: #b6b6b6" disabled selected>请选择性别</option>
                        <option value="1">男</option>
                        <option value="2">女</option>
                    </select>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*联系电话:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="phone"  placeholder="请输入联系电话" type="text">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*身份证号:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="idcard"  placeholder="请输入身份证号" type="text">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*身高:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="height"  placeholder="请输入身高" type="text">
                    <span style="margin-left: 5px;margin-top: 5px">cm</span>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*体重:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="weight"  placeholder="请输入体重" type="text">
                    <span style="margin-left: 5px;margin-top: 5px">kg</span>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*毕业院校:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="graduateSchool"  placeholder="请输入毕业院校" type="text">
                </div>
            </div>
            <div class="form-group">
                <label class="col-sm-3 control-label">*照片:</label>
                <div class="col-sm-9" style="display: flex;">
                    <#avatar id="img" name="" avatarImg=""/>
                </div>
            </div>
         <div class="row" id="app1" >
             <div class="col-sm-6" style="width: 100%">
            <div class="form-group" >
                <label class="col-sm-3 control-label">*资格证书: </label>
                <input style="width: 300px" class="form-control" id="certificate"  placeholder="请输入资格证书" type="text">
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label"></label>
                <div class="col-sm-9">
                    <el-upload
                            :limit="5"
                            class="avatar-uploader"
                            action="/tCouponManage/uploadPic"
                            list-type="picture-card"
                            accept=".jpg,.jpeg,.png,.JPG,.JPEG"
                            :on-success="handleAvatarSuccess"
                            :on-remove="handleRemove">
                        <i class="el-icon-plus"></i>
                    </el-upload>
                    <el-dialog :visible.sync="dialogVisible">
                        <img width="100%" :src="imageUrl1" alt=""></el-dialog>
                </div>            </div>
             </div>
         </div>
<div class="row btn-group-m-t">
    <div class="col-sm-10 col-sm-offset-5" >
        <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TSite.addSubmit()"/>
        <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TSite.close()"/>
    </div>
</div>
        </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/tCoach/tCoach_add.js"></script>
<script src="${ctxPath}/js/vue/vue.js"></script>
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
<script>
    var vue2 = new Vue({
        el: '#app1',
        props: {
            // 数量限制
            limit: {
                type: Number,
                default: 2
            },
        },
        data: {
            autoUpload: true,//自动上传
            imageUrl1: '',//模型数据,用于上传图片完成后图片预览
            dialogVisible: false
        },
        methods: {
            handleAvatarSuccess(res, file) {
                TSite.goodsPicArray.push(res);
            },
            beforeAvatarUpload(file) {
                const isLt2M = file.size / 1024 / 1024 < 10;
                if (!isLt2M) {
                    this.$message.error('上传图片大小不能超过 10MB!');
                }
                return isLt2M;
            },
            handleRemove(file, fileList) {
                TSite.goodsPicArray = TSite.goodsPicArray.filter(item => {
                    return item.uid != file.uid;
                });
            },
        },
        created() {
        },
    });
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefits_add.html
New file
@@ -0,0 +1,86 @@
@layout("/common/_container.html"){
<style>
    .avatar-uploader .el-upload {
        border: 1px dashed #d9d9d9;
        border-radius: 6px;
        cursor: pointer;
        position: relative;
        height: 100px;
        width: 100px;
        overflow: hidden;
    }
    .avatar-uploader .el-upload:hover {
        border-color: #409EFF;
    }
    .avatar-uploader-icon {
        font-size: 28px;
        color: #8c939d;
        width: 100px;
        height: 100px;
        line-height: 100px;
        margin-top: 32px;
        text-align: center;
    }
    .avatar {
        width: 100px;
        height: 100px;
        display: block;
    }
    .col-sm-12 {
        margin-top: 20px;
    }
    .col-sm-12 select {
        height: 33px;
    }
</style>
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            <div class="form-group" >
                <label class="col-sm-3 control-label">*分类名称:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="name"  placeholder="请输入分类名称" type="text">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*所在位置:</label>
                <div class="col-sm-9">
                    <select style="width: 300px"  class="form-control" id="position" name = "gender">
                        <option value="" style="color: #b6b6b6" disabled selected>请选择所在位置</option>
                        <option value="1">线上课得积分</option>
                        <option value="2">看视频得奖励</option>
                    </select>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*排序:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="sort"  placeholder="请输入排序" type="text">
                </div>
            </div>
            <div class="row btn-group-m-t">
                <div class="col-sm-10 col-sm-offset-5" >
                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TQuestion.addSubmit()"/>
                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TQuestion.close()"/>
                </div>
            </div>
        </div>
    </div>
</div>
</div>
<script src="${ctxPath}/modular/system/benefits/TBenefits.js"></script>
<script src="${ctxPath}/js/vue/vue.js"></script>
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/benefits/TBenefits_edit.html
New file
@@ -0,0 +1,91 @@
@layout("/common/_container.html"){
<style>
    .avatar-uploader .el-upload {
        border: 1px dashed #d9d9d9;
        border-radius: 6px;
        cursor: pointer;
        position: relative;
        height: 100px;
        width: 100px;
        overflow: hidden;
    }
    .avatar-uploader .el-upload:hover {
        border-color: #409EFF;
    }
    .avatar-uploader-icon {
        font-size: 28px;
        color: #8c939d;
        width: 100px;
        height: 100px;
        line-height: 100px;
        margin-top: 32px;
        text-align: center;
    }
    .avatar {
        width: 100px;
        height: 100px;
        display: block;
    }
    .col-sm-12 {
        margin-top: 20px;
    }
    .col-sm-12 select {
        height: 33px;
    }
</style>
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
<div class="ibox float-e-margins">
    <input hidden id="dataId" value="${data.id}">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            <div class="form-group" >
                <label class="col-sm-3 control-label">*分类名称:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" value="${data.name}" id="name"  placeholder="请输入分类名称" type="text">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*所在位置:</label>
                <div class="col-sm-9">
                    <select style="width: 300px"  class="form-control" id="position" name = "gender">
                        <option value="" style="color: #b6b6b6" disabled selected>请选择所在位置</option>
                        <option value="1" ${data.position == 1 ? 'selected' : ''}>线上课得积分</option>
                        <option value="2" ${data.position == 2 ? 'selected' : ''}>看视频得奖励</option>
                    </select>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*排序:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="sort" value="${data.sort}"  placeholder="请输入排序" type="text">
                </div>
            </div>
            <div class="row btn-group-m-t">
                <div class="col-sm-10 col-sm-offset-5" >
                    @if(type!=1){
                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TQuestion.updateSubmit()"/>
                    @}
                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TQuestion.close()"/>
                </div>
            </div>
        </div>
    </div>
</div>
</div>
<script src="${ctxPath}/modular/system/benefits/TBenefits.js"></script>
<script src="${ctxPath}/js/vue/vue.js"></script>
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/bodySideAppointment/TBodySideAppointment.html
New file
@@ -0,0 +1,79 @@
@layout("/common/_container.html"){
<style>
    .data-item {
        position: relative;
        border: 1px solid #ccc;
        padding: 10px;
        margin-bottom: 10px;
        display: flex;
        align-items: center;
        justify-content: center;
        max-width: 200px;
        margin-right: 10px;
    }
    .delete-button {
        position: absolute;
        top: -10px;
        right: -10px;
        cursor: pointer;
        color: black;
        width: 20px;
        height: 20px;
        text-align: center;
        line-height: 20px;
        border-radius: 50%;
    }
</style>
<div class="row">
    <div class="col-sm-12">
        <div class="ibox float-e-margins">
            <div class="ibox-title">
                <h5>视频分类管理</h5>
            </div>
            <div class="ibox-content">
                <div class="row row-lg">
                    <div class="col-sm-12">
                        <div class="row">
                            <div class="col-sm-3">
                                <#NameCon id="parentName" name="家长姓名" />
                            </div>
                            <div class="col-sm-3">
                                <#NameCon id="phone" name="家长联系方式" />
                            </div>
                            <div class="col-sm-3">
                                <#SelectCon id="state" name="状态" >
                                <option value="">全部</option>
                                <option value="1">未体测</option>
                                <option value="2">已体测</option>
                            </#SelectCon>
                        </div>
        <div class="col-sm-3">
            <#button name="搜索" icon="fa-search" clickFun="TQuestion.search()"/>
            <#button name="重置" icon="fa-trash" clickFun="TQuestion.resetSearch()"/>
        </div>
                        </div>
                    <div class="hidden-xs" style="margin-top: 10px"  role="group">
                        <label>预约时间:</label>
                        <#button name="今日" icon="fa-search" clickFun="TQuestion.day(1)"/>
                        <#button name="明日" icon="fa-search" clickFun="TQuestion.day(2)"/>
                        <#button name="最近7天" icon="fa-search" clickFun="TQuestion.day(7)"/>
                    </div>
                        <div style="margin-top: 10px" class="hidden-xs" id="TCouponTableToolbar" role="group">
                            <#button name="添加" icon="fa-plus" clickFun="TQuestion.openAdd()"/>
                            <#button name="编辑" icon="fa-edit" clickFun="TQuestion.openChange()" space="true"/>
                            <#button name="已测试" icon="fa-check" clickFun="TQuestion.onShelf()" space="true"/>
                        </div>
                        <#table id="TQuestionTable"/>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/bodySideAppointment/tBodySideAppointment.js"></script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/bodySideAppointment/TBodySideAppointment_add.html
New file
@@ -0,0 +1,133 @@
@layout("/common/_container.html"){
<style>
    .avatar-uploader .el-upload {
        border: 1px dashed #d9d9d9;
        border-radius: 6px;
        cursor: pointer;
        position: relative;
        height: 100px;
        width: 100px;
        overflow: hidden;
    }
    .avatar-uploader .el-upload:hover {
        border-color: #409EFF;
    }
    .avatar-uploader-icon {
        font-size: 28px;
        color: #8c939d;
        width: 100px;
        height: 100px;
        line-height: 100px;
        margin-top: 32px;
        text-align: center;
    }
    .avatar {
        width: 100px;
        height: 100px;
        display: block;
    }
    .col-sm-12 {
        margin-top: 20px;
    }
    .col-sm-12 select {
        height: 33px;
    }
</style>
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            <div class="form-group" id="provinceCode">
                <label class="col-sm-3 control-label">*所在省:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="pCode" name="pCode" onchange="TQuestion.oneChange()">
                        <option value="">请选择省</option>
                        @for(obj in list){
                        <option style="width: 300px" value="${obj.provinceCode}">${obj.province}</option>
                        @}
                    </select>
                </div>
            </div>
            <div class="form-group" id="cityCode">
                <label class="col-sm-3 control-label">*所在市:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="cCode" name="cCode" onchange="TQuestion.oneChangeNext(this)">
                        <option value="">请选择市</option>
                    </select>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*所属门店:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="store" name="account">
                        <option value="" style="color: #676A6C" disabled selected>请选择门店</option>
                    </select>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*家长姓名:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="parentName"  placeholder="请输入家长姓名" type="text">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*家长联系方式:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="phone"  placeholder="请输入家长联系方式" type="text">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*学员姓名:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="learnerName"  placeholder="请输入学员姓名" type="text">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*学员年龄:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="learnerAge"  placeholder="请输入学员年龄" type="text">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*学员生日:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="birthday"  placeholder="请选择" type="date">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*预约时间:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="appointmentTime"  placeholder="请选择" type="datetime-local">
                </div>
            </div>
            <div class="row btn-group-m-t">
                <div class="col-sm-10 col-sm-offset-5" >
                    <#button btnCss="info" name="保存" id="ensure" icon="fa-check" clickFun="TQuestion.addSubmit()"/>
                    <#button btnCss="danger" name="关闭" id="cancel" icon="fa-eraser" clickFun="TQuestion.close()"/>
                </div>
            </div>
        </div>
    </div>
</div>
</div>
<script src="${ctxPath}/modular/system/bodySideAppointment/tBodySideAppointment.js"></script>
<script src="${ctxPath}/js/vue/vue.js"></script>
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/bodySideAppointment/TBodySideAppointment_edit.html
New file
@@ -0,0 +1,91 @@
@layout("/common/_container.html"){
<style>
    .avatar-uploader .el-upload {
        border: 1px dashed #d9d9d9;
        border-radius: 6px;
        cursor: pointer;
        position: relative;
        height: 100px;
        width: 100px;
        overflow: hidden;
    }
    .avatar-uploader .el-upload:hover {
        border-color: #409EFF;
    }
    .avatar-uploader-icon {
        font-size: 28px;
        color: #8c939d;
        width: 100px;
        height: 100px;
        line-height: 100px;
        margin-top: 32px;
        text-align: center;
    }
    .avatar {
        width: 100px;
        height: 100px;
        display: block;
    }
    .col-sm-12 {
        margin-top: 20px;
    }
    .col-sm-12 select {
        height: 33px;
    }
</style>
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
<div class="ibox float-e-margins">
    <input hidden id="dataId" value="${data.id}">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            <div class="form-group" >
                <label class="col-sm-3 control-label">*家长姓名:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" value="${data.name}" id="name"  placeholder="请输入分类名称" type="text">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*所在位置:</label>
                <div class="col-sm-9">
                    <select style="width: 300px"  class="form-control" id="position" name = "gender">
                        <option value="" style="color: #b6b6b6" disabled selected>请选择所在位置</option>
                        <option value="1" ${data.position == 1 ? 'selected' : ''}>线上课得积分</option>
                        <option value="2" ${data.position == 2 ? 'selected' : ''}>看视频得奖励</option>
                    </select>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*排序:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="sort" value="${data.sort}"  placeholder="请输入排序" type="text">
                </div>
            </div>
            <div class="row btn-group-m-t">
                <div class="col-sm-10 col-sm-offset-5" >
                    @if(type!=1){
                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TQuestion.updateSubmit()"/>
                    @}
                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TQuestion.close()"/>
                </div>
            </div>
        </div>
    </div>
</div>
</div>
<script src="${ctxPath}/modular/system/benefits/TBenefits.js"></script>
<script src="${ctxPath}/js/vue/vue.js"></script>
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackageType/CoursePackageType.html
New file
@@ -0,0 +1,33 @@
@layout("/common/_container.html"){
<div class="row">
    <div class="col-sm-12">
        <div class="ibox float-e-margins">
            <div class="ibox-title">
                <h5>课包类型管理</h5>
            </div>
            <div class="ibox-content">
                <div class="row row-lg">
                    <div class="col-sm-12">
                        <div class="row">
                        </div>
                <div class="hidden-xs" id="TCompetitionTableToolbar" role="group">
                    <#button name="添加" icon="fa-plus" clickFun="TSite.openAddTSite()"/>
                    <#button name="编辑" icon="fa-edit" clickFun="TSite.openTSiteDetail()" space="true"/>
                    <#button name="删除" icon="fa-remove" clickFun="TSite.del()" space="true"/>
                </div>
                <#table id="TSiteTable"/>
            </div>
        </div>
    </div>
</div>
</div>
</div>
<script src="${ctxPath}/modular/system/coursePackageType/coursePackageType.js"></script>
<script>
    laydate.render({
        elem: '#createTime'
        ,range: true
        ,lang:"en"
    });
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoach/TCoach.html
New file
@@ -0,0 +1,80 @@
@layout("/common/_container.html"){
<div class="row">
    <div class="col-sm-12">
        <div class="ibox float-e-margins">
            <div class="ibox-title">
                <h5>教练管理</h5>
            </div>
            <div class="ibox-content">
                <div class="row row-lg">
                    <div class="col-sm-12">
                        <div class="row">
                            @if(objectType==1){
                            <div class="col-sm-3">
                                <div class="input-group">
                                    <div class="input-group-btn open">
                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button" aria-expanded="true">
                                            所在省
                                        </button>
                                    </div>
                                    <select class="form-control" id="pCode" onchange="TSite.oneChange()">
                                        <option value="">全部</option>
                                        @for(obj in data){
                                        <option value="${obj.provinceCode}">${obj.province}</option>
                                        @}
                                    </select>
                                </div>
                            </div>
                            @}
                            @if(objectType==1){
                            <div class="col-sm-3">
                                <div class="input-group">
                                <div class="input-group-btn open">
                                    <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button" aria-expanded="true">
                                        所在市
                                    </button>
                                </div>
                                <select class="form-control" id="cCode">
                                    <option value="">请先选择省</option>
                                </select>
                                 </div>
                            </div>
                            @}
                            <div class="col-sm-3">
                                <#NameCon id="name" name="姓名:" />
                            </div>
                            <div class="col-sm-3">
                                <#NameCon id="phone" name="联系电话:" />
                            </div>
                    <div class="col-sm-3">
                        <#button name="搜索" icon="fa-search" clickFun="TSite.search()"/>
                        <#button name="重置" icon="fa-trash" clickFun="TSite.resetSearch()" space="true"/>
                    </div>
                </div>
                <div class="hidden-xs" id="TCompetitionTableToolbar" role="group">
                    <#button name="添加" icon="fa-plus" clickFun="TSite.openAddTSite()"/>
                    <#button name="编辑" icon="fa-edit" clickFun="TSite.openEditTSite()" space="true"/>
                    <#button name="解冻" icon="fa-check" clickFun="TSite.onShelf()" space="true"/>
                    <#button name="冻结" icon="fa-remove" clickFun="TSite.offShelf()" space="true"/>
                    <#button name="查看详情" icon="fa-search" clickFun="TSite.openInfo()" space="true"/>
                </div>
                <#table id="TSiteTable"/>
            </div>
        </div>
    </div>
            <input hidden id="objectType" value="${objectType}">
            <input hidden id="objectId" value="${objectId}">
</div>
</div>
</div>
<script src="${ctxPath}/modular/system/tCoach/tCoach.js"></script>
<script>
    laydate.render({
        elem: '#createTime'
        ,range: true
        ,lang:"en"
    });
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoach/TCoach_add.html
New file
@@ -0,0 +1,233 @@
@layout("/common/_container.html"){
<style>
    .avatar-uploader .el-upload {
        border: 1px dashed #d9d9d9;
        border-radius: 6px;
        cursor: pointer;
        position: relative;
        height: 100px;
        width: 100px;
        overflow: hidden;
    }
    .avatar-uploader .el-upload:hover {
        border-color: #409EFF;
    }
    .avatar-uploader-icon {
        font-size: 28px;
        color: #8c939d;
        width: 100px;
        height: 100px;
        line-height: 100px;
        margin-top: 32px;
        text-align: center;
    }
    .avatar {
        width: 100px;
        height: 100px;
        display: block;
    }
    .col-sm-12 {
        margin-top: 20px;
    }
    .col-sm-12 select {
        height: 33px;
    }
</style>
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
<div class="ibox float-e-margins">
    <input hidden id="objectType" value="${objectType}">
    <input hidden id="objectId" value="${objectId}">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            <input hidden id="role" value="${role}">
            @if(objectType==1){
            <div class="form-group" id="provinceCode">
                <label class="col-sm-3 control-label">*所在省:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="pCode" name="pCode" onchange="TSite.oneChange()">
                        <option value="">请选择省</option>
                        @for(obj in list){
                        <option style="width: 300px" value="${obj.provinceCode}">${obj.province}</option>
                        @}
                    </select>
                </div>
            </div>
            @}
            @if(objectType==1){
            <div class="form-group" id="cityCode">
                <label class="col-sm-3 control-label">*所在市:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="cCode" name="cCode" onchange="TSite.oneChangeNext(this)">
                        <option value="">请选择市</option>
                    </select>
                </div>
            </div>
            @}
            @if(objectType==1){
            <div class="form-group" >
                <label class="col-sm-3 control-label">*所属账号:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="account" name="account">
                        <option value="" style="color: #676A6C" disabled selected>请选择所属账号</option>
                    </select>
                </div>
            </div>
            @}
            <div class="form-group" id="siteType">
                <label class="col-sm-3 control-label">*教练类型:</label>
                <div class="col-sm-9">
                    <select style="width: 300px"  class="form-control" id="coachTypeId" name = "typeId">
                        <option value="" style="color: #b6b6b6" disabled selected>请选择教练类型</option>
                        @for(obj in coachType){
                        <option value="${obj.id}">${obj.name}</option>
                        @}
                    </select>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*姓名:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="name"  placeholder="请输入姓名" type="text">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*生日:</label>
                <!-- <input style="width: 300px" class="form-control"  type="time">-->
                <div class="col-sm-9"  style="display: flex">
                    <input style="width: 300px;" placeholder="请选择" id="birthday" class="form-control" type="date">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*性别:</label>
                <div class="col-sm-9">
                    <select style="width: 300px"  class="form-control" id="gender" name = "gender">
                        <option value="" style="color: #b6b6b6" disabled selected>请选择性别</option>
                        <option value="1">男</option>
                        <option value="2">女</option>
                    </select>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*联系电话:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="phone"  placeholder="请输入联系电话" type="text">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*身份证号:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="idcard"  placeholder="请输入身份证号" type="text">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*身高:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="height"  placeholder="请输入身高" type="text">
                    <span style="margin-left: 5px;margin-top: 5px">cm</span>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*体重:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="weight"  placeholder="请输入体重" type="text">
                    <span style="margin-left: 5px;margin-top: 5px">kg</span>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*毕业院校:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="graduateSchool"  placeholder="请输入毕业院校" type="text">
                </div>
            </div>
            <div class="form-group">
                <label class="col-sm-3 control-label">*照片:</label>
                <div class="col-sm-9" style="display: flex;">
                    <#avatar id="img" name="" avatarImg=""/>
                </div>
            </div>
         <div class="row" id="app1" >
             <div class="col-sm-6" style="width: 100%">
            <div class="form-group" >
                <label class="col-sm-3 control-label">*资格证书: </label>
                <input style="width: 300px" class="form-control" id="certificate"  placeholder="请输入资格证书" type="text">
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label"></label>
                <div class="col-sm-9">
                    <el-upload
                            :limit="5"
                            class="avatar-uploader"
                            action="/tCouponManage/uploadPic"
                            list-type="picture-card"
                            accept=".jpg,.jpeg,.png,.JPG,.JPEG"
                            :on-success="handleAvatarSuccess"
                            :on-remove="handleRemove">
                        <i class="el-icon-plus"></i>
                    </el-upload>
                    <el-dialog :visible.sync="dialogVisible">
                        <img width="100%" :src="imageUrl1" alt=""></el-dialog>
                </div>            </div>
             </div>
         </div>
<div class="row btn-group-m-t">
    <div class="col-sm-10 col-sm-offset-5" >
        <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TSite.addSubmit()"/>
        <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TSite.close()"/>
    </div>
</div>
        </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/tCoach/tCoach_add.js"></script>
<script src="${ctxPath}/js/vue/vue.js"></script>
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
<script>
    var vue2 = new Vue({
        el: '#app1',
        props: {
            // 数量限制
            limit: {
                type: Number,
                default: 2
            },
        },
        data: {
            autoUpload: true,//自动上传
            imageUrl1: '',//模型数据,用于上传图片完成后图片预览
            dialogVisible: false
        },
        methods: {
            handleAvatarSuccess(res, file) {
                TSite.goodsPicArray.push(res);
            },
            beforeAvatarUpload(file) {
                const isLt2M = file.size / 1024 / 1024 < 10;
                if (!isLt2M) {
                    this.$message.error('上传图片大小不能超过 10MB!');
                }
                return isLt2M;
            },
            handleRemove(file, fileList) {
                TSite.goodsPicArray = TSite.goodsPicArray.filter(item => {
                    return item.uid != file.uid;
                });
            },
        },
        created() {
        },
    });
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoach/TCoach_edit.html
New file
@@ -0,0 +1,227 @@
@layout("/common/_container.html"){
<style>
    .avatar-uploader .el-upload {
        border: 1px dashed #d9d9d9;
        border-radius: 6px;
        cursor: pointer;
        position: relative;
        height: 100px;
        width: 100px;
        overflow: hidden;
    }
    .avatar-uploader .el-upload:hover {
        border-color: #409EFF;
    }
</style>
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
<div class="ibox float-e-margins">
    <input hidden id="objectType" value="${objectType}">
    <input hidden id="objectId" value="${objectId}">
    <input hidden id="dataId" value="${data.id}">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            <input hidden id="role" value="${role}">
            @if(objectType==1){
            <div class="form-group" id="provinceCode">
                <label class="col-sm-3 control-label">*所在省:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="pCode" name="pCode" onchange="TSite.oneChange()">
                        @for(obj in list){
                        <option value="${obj.provinceCode}" ${obj.province == data.province ? 'selected=selected' : ''}>${obj.province}</option>
                        @}
                    </select>
                </div>
            </div>
            @}
            @if(objectType==1){
            <div class="form-group" id="cityCode">
                <label class="col-sm-3 control-label">*所在市:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="cCode" name="cCode" onchange="TSite.oneChangeNext(this)">
                        @for(obj in city){
                        <option value="${obj.cityCode}" ${obj.city == data.city ? 'selected=selected' : ''}>${obj.city}</option>
                        @}
                    </select>
                </div>
            </div>
            @}
            @if(objectType==1){
            <div class="form-group">
                <label class="col-sm-3 control-label">*所属账号:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="account" name="account">
                        @for(obj in cityManagers){
                        <option value="${obj.id}" ${obj.id == data.cityManagerId ? 'selected=selected' : ''}>${obj.name}</option>
                        @}
                    </select>
                </div>
            </div>
            @}
            <div class="form-group" id="siteType">
                <label class="col-sm-3 control-label">*教练类型:</label>
                <div class="col-sm-9">
                    <select style="width: 300px"  class="form-control" id="coachTypeId" name = "typeId">
                        <option value="" style="color: #b6b6b6" disabled selected>请选择教练类型</option>
                        @for(obj in coachType){
                        <option value="${obj.id}" ${obj.id == data.coachTypeId ? 'selected=selected' : ''}>${obj.name}</option>
                        @}
                    </select>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*姓名:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="name" value="${data.name}"  placeholder="请输入姓名" type="text">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*生日:</label>
                <div class="col-sm-9"  style="display: flex">
                    <input style="width: 300px;" placeholder="请选择" value="${birthday}" id="birthday" class="form-control" type="date">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*性别:</label>
                <div class="col-sm-9">
                    <select style="width: 300px"  class="form-control" id="gender" name = "gender">
                        <option value="1" ${data.gender == 1 ? 'selected' : ''}>男</option>
                        <option value="2" ${data.gender == 2 ? 'selected' : ''}>女</option>
                    </select>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*联系电话:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" value="${data.phone}" id="phone"  placeholder="请输入联系电话" type="text">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*身份证号:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="idcard" value="${data.idcard}"  placeholder="请输入身份证号" type="text">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*身高:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="height" value="${data.height}"  placeholder="请输入身高" type="text">
                    <span style="margin-left: 5px;margin-top: 5px">cm</span>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*体重:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" value="${data.weight}" id="weight"  placeholder="请输入体重" type="text">
                    <span style="margin-left: 5px;margin-top: 5px">kg</span>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*毕业院校:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" value="${data.graduateSchool}" id="graduateSchool"  placeholder="请输入毕业院校" type="text">
                </div>
            </div>
            <div class="form-group">
                <label class="col-sm-3 control-label">*照片:</label>
                <div class="col-sm-9" style="display: flex;">
                    <#avatar id="img" avatarImg="${data.diploma}" name="" />
                </div>
            </div>
            <div class="row" id="app1" >
                <div class="col-sm-6" style="width: 100%">
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*资格证书: </label>
                        <input style="width: 300px" class="form-control" id="certificate" value="${data.certificate}"  placeholder="请输入资格证书" type="text">
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label"></label>
                        <div class="col-sm-9">
                            <el-upload
                                    :limit="5"
                                    class="avatar-uploader"
                                    action="/tCouponManage/uploadPic"
                                    list-type="picture-card"
                                    accept=".jpg,.jpeg,.png,.JPG,.JPEG"
                                    :on-success="handleAvatarSuccess"
                                    :on-remove="handleRemove">
                                <i class="el-icon-plus"></i>
                            </el-upload>
                            <el-dialog :visible.sync="dialogVisible">
                                @for(img in pictures){
                                <img width="100%" src="${img}">
                                @}
                                </el-dialog>
                        </div>            </div>
                </div>
            </div>
            <div class="row btn-group-m-t">
                <div class="col-sm-10 col-sm-offset-5" >
                    @if(type!=1){
                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TSite.addSubmit()"/>
                    @}
                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TSite.close()"/>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/tCoach/tCoach_add.js"></script>
<script src="${ctxPath}/js/vue/vue.js"></script>
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
<script>
    var vue2 = new Vue({
        el: '#app1',
        props: {
            // 数量限制
            limit: {
                type: Number,
                default: 2
            },
        },
        data: {
            autoUpload: true,//自动上传
            imageUrl1: '',//模型数据,用于上传图片完成后图片预览
            dialogVisible: false
        },
        methods: {
            handleAvatarSuccess(res, file) {
                TSite.goodsPicArray.push(res);
            },
            beforeAvatarUpload(file) {
                const isLt2M = file.size / 1024 / 1024 < 10;
                if (!isLt2M) {
                    this.$message.error('上传图片大小不能超过 10MB!');
                }
                return isLt2M;
            },
            handleRemove(file, fileList) {
                TSite.goodsPicArray = TSite.goodsPicArray.filter(item => {
                    return item.uid != file.uid;
                });
            },
        },
        created() {
        },
    });
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoachType/TCoachType.html
New file
@@ -0,0 +1,33 @@
@layout("/common/_container.html"){
<div class="row">
    <div class="col-sm-12">
        <div class="ibox float-e-margins">
            <div class="ibox-title">
                <h5>教练类型管理</h5>
            </div>
            <div class="ibox-content">
                <div class="row row-lg">
                    <div class="col-sm-12">
                        <div class="row">
                        </div>
                <div class="hidden-xs" id="TCompetitionTableToolbar" role="group">
                    <#button name="添加" icon="fa-plus" clickFun="TSite.openAddTSite()"/>
                    <#button name="编辑" icon="fa-edit" clickFun="TSite.openTSiteDetail()" space="true"/>
                    <#button name="删除" icon="fa-remove" clickFun="TSite.del()" space="true"/>
                </div>
                <#table id="TSiteTable"/>
            </div>
        </div>
    </div>
</div>
</div>
</div>
<script src="${ctxPath}/modular/system/tCoachType/tCoachType.js"></script>
<script>
    laydate.render({
        elem: '#createTime'
        ,range: true
        ,lang:"en"
    });
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/TCouponAdd.html
@@ -259,7 +259,6 @@
                                <img width="100%" :src="imageUrl1" alt="">
                        </div>
                    </div>
                </div>
            </div>
cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionAdd.html
@@ -26,6 +26,7 @@
                                        <div class="row btn-group-m-t">
                                            <div class="col-sm-10 col-sm-offset-5">
                                                <#button btnCss="info" name="保存" id="ensure" icon="fa-check" clickFun="add();" />
                                                <#button btnCss="info" name="关闭" id="close" icon="fa-check"  clickFun="closeD();" />
                                            </div>
                                        </div>
                                        <label for="sort">*排   序:</label>
@@ -42,11 +43,18 @@
    </div>
</div>
<script type="text/javascript">
    /**
     * 关闭此对话框
     */
    function closeD(){
        console.log("关闭");
        parent.layer.close(window.parent.TQuestion.layerIndex);
    }
    const data1 = {
        content:"",
        sort:null,
        answer:""
    }
    };
    var editor_1 = null;
    $(function () {
        //初始化编辑器
@@ -72,8 +80,7 @@
        data1.content = value1;
        data1.sort =  value2;
        data1.answer =editor_1.getContent();
        console.log(data1);
            submitData(data1);
        submitData(data1);
    }
    function submitData(data) {
        $.ajax({
cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionEdit.html
@@ -28,6 +28,7 @@
                                        <div class="row btn-group-m-t">
                                            <div class="col-sm-10 col-sm-offset-5">
                                                <#button btnCss="info" name="保存" id="ensure" icon="fa-check" clickFun="edit();" />
                                                <#button btnCss="info" name="关闭" id="close" icon="fa-check" clickFun="closeD();" />
                                            </div>
                                        </div>
                                        <label for="sort">*排   序:</label>
@@ -45,7 +46,13 @@
</div>
<script type="text/javascript">
    /**
     * 关闭此对话框
     */
    function closeD(){
        console.log("关闭");
        parent.layer.close(window.parent.TQuestion.layerIndex);
    }
    const data1 = {
        id:null,
        content:"",
cloud-server-management/src/main/webapp/WEB-INF/view/system/tQuestion/TQuestionInfo.html
@@ -26,6 +26,9 @@
                                            <textarea id="editor_1"  type="text/plain" style="width:1200px;height:400px;">${info.answer}</textarea>
                                        </div>
                                        <div class="row btn-group-m-t">
                                            <div class="col-sm-10 col-sm-offset-5">
                                                <#button btnCss="info" name="关闭" id="close" icon="fa-check" clickFun="closeD();" />
                                            </div>
                                        </div>
                                        <label for="sort">*排   序:</label>
                                        <input type="text" id="sort" value="${info.sort}" placeholder="请输入排序"><span>&nbsp;&nbsp;&nbsp;数字越大,权重越大</span>
@@ -42,7 +45,13 @@
</div>
<script type="text/javascript">
    /**
     * 关闭此对话框
     */
    function closeD(){
        console.log("关闭");
        parent.layer.close(window.parent.TQuestion.layerIndex);
    }
    const data1 = {
        id:null,
        content:"",
@@ -87,6 +96,7 @@
            contentType: "application/json", // 设置请求头的 Content-Type
            data: JSON.stringify(data), // 将数据转换为 JSON 字符串
            success: function(response) {
                Feng.success("修改成功!");
            },
            error: function(xhr, status, error) {
cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop.html
@@ -63,7 +63,6 @@
                    <#button name="重置密码" icon="fa-remove" clickFun="TCompetition.reload()" space="true"/>
                    <#button name="免费福利" icon="fa-remove" clickFun="TCompetition.gift()" space="true"/>
                    <#button name="首页设置" icon="fa-remove" clickFun="TCompetition.indexSet()" space="true"/>
                </div>
                <#table id="TCompetitionTable"/>
            </div>
cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html
@@ -66,13 +66,10 @@
            <#avatar id="img" name="门店封面(推荐像素722*360px)" avatarImg="${item.coverDrawing}"/>
            <#input id="imgOne" name="实景照片" type="text" value="${item.realPicture}"/>
        </div>
        <div class="row btn-group-m-t">
            <div class="col-sm-10 col-sm-offset-5">
                @if(type==1){
                <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TCarInfoDlg.editSubmit()"/>
                @}
                <#button btnCss="danger" name="关闭" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.close()"/>
            </div>
        </div>
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TShop_add.html
File was deleted
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TShop_edit.html
File was deleted
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TShop_img.html
File was deleted
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TShop_imgAll.html
File was deleted
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite.html
@@ -2,7 +2,7 @@
<div class="row">
    <div class="col-sm-12">
        <div class="ibox float-e-margins">
            <input hidden id="role" value="${role}">
            <div class="ibox-title">
                <h5>场地管理</h5>
            </div>
@@ -10,7 +10,7 @@
                <div class="row row-lg">
                    <div class="col-sm-12">
                        <div class="row">
                            @if(role=='1'){
                            @if(objectType==1){
                            <div class="col-sm-3">
                                <div class="input-group">
                                    <div class="input-group-btn open">
@@ -18,16 +18,16 @@
                                            所在省
                                        </button>
                                    </div>
                                    <select class="form-control" id="pCode" onchange="TSite.oneChange(this)">
                                    <select class="form-control" id="pCode" onchange="TSite.oneChange(1)">
                                        <option value="">全部</option>
                                        @for(obj in list){
                                        <option value="${obj.code}">${obj.name}</option>
                                        <option value="${obj}">${obj}</option>
                                        @}
                                    </select>
                                </div>
                            </div>
                            @}
                            @if(role=='1'){
                            @if(objectType==1){
                            <div class="col-sm-3">
                                <div class="input-group">
                                <div class="input-group-btn open">
@@ -36,39 +36,54 @@
                                    </button>
                                </div>
                                <select class="form-control" id="cCode">
                                    <option value="">请先选择省</option>
                                </select>
                                 </div>
                            </div>
                            @}
                            <div class="col-sm-3">
                                <#NameCon id="name" name="店长姓名" />
                                <#NameCon id="storeName" name="门店名称" />
                            </div>
                            <div class="col-sm-3">
                                <div class="input-group">
                                    <div class="input-group-btn open">
                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button" aria-expanded="true">
                                            场地类型
                                        </button>
                                    </div>
                                    <select class="form-control" id="sCode" >
                                        <option value="">全部</option>
                                        @for(obj in siteType){
                                        <option value="${obj.id}">${obj.name}</option>
                                        @}
                                    </select>
                                </div>
                            </div>
                            <div class="col-sm-3">
                                <#NameCon id="phone" name="店长手机号" />
                            </div>
                            <div class="col-sm-3">
                                <#NameCon id="shopName" name="门店名称" />
                                <#NameCon id="name" name="场地名称" />
                            </div>
                    <div class="col-sm-3">
                        <#button name="搜索" icon="fa-search" clickFun="TCompetition.search()"/>
                        <#button name="重置" icon="fa-trash" clickFun="TCompetition.resetSearch()" space="true"/>
                        <#button name="搜索" icon="fa-search" clickFun="TSite.search()"/>
                        <#button name="重置" icon="fa-trash" clickFun="TSite.resetSearch()" space="true"/>
                    </div>
                </div>
                <div class="hidden-xs" id="TCompetitionTableToolbar" role="group">
                    <#button name="添加" icon="fa-plus" clickFun="TCompetition.openAddTCompetition()"/>
                    <#button name="编辑" icon="fa-edit" clickFun="TCompetition.openTCompetitionDetail()" space="true"/>
                    <#button name="冻结" icon="fa-remove" clickFun="TCompetition.freeze()" space="true"/>
                    <#button name="解冻" icon="fa-remove" clickFun="TCompetition.unfreeze()" space="true"/>
                    <#button name="查看详情" icon="fa-remove" clickFun="TCompetition.info()" space="true"/>
                    <#button name="重置密码" icon="fa-remove" clickFun="TCompetition.reload()" space="true"/>
                    <#button name="免费福利" icon="fa-remove" clickFun="TCompetition.gift()" space="true"/>
                    <#button name="首页设置" icon="fa-remove" clickFun="TCompetition.indexSet()" space="true"/>
                    <#button name="添加" icon="fa-plus" clickFun="TSite.openAddTSite()"/>
                    <#button name="编辑" icon="fa-edit" clickFun="TSite.openEditTSite()" space="true"/>
                    <#button name="上架" icon="fa-check" clickFun="TSite.onShelf()" space="true"/>
                    <#button name="下架" icon="fa-remove" clickFun="TSite.offShelf()" space="true"/>
                    <#button name="查看详情" icon="fa-search" clickFun="TSite.openInfo()" space="true"/>
                    <#button name="锁定场地" icon="fa-remove" clickFun="TSite.lock()" space="true"/>
                </div>
                <#table id="TCompetitionTable"/>
                <#table id="TSiteTable"/>
            </div>
        </div>
    </div>
            <input hidden id="role" value="${role}">
            <input hidden id="objectType" value="${objectType}">
            <input hidden id="objectId" value="${objectId}">
            <input hidden id="type" value="${type}">
</div>
</div>
</div>
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_add.html
New file
@@ -0,0 +1,247 @@
@layout("/common/_container.html"){
<style>
    .avatar-uploader .el-upload {
        border: 1px dashed #d9d9d9;
        border-radius: 6px;
        cursor: pointer;
        position: relative;
        height: 100px;
        width: 100px;
        overflow: hidden;
    }
    .avatar-uploader .el-upload:hover {
        border-color: #409EFF;
    }
    .avatar-uploader-icon {
        font-size: 28px;
        color: #8c939d;
        width: 100px;
        height: 100px;
        line-height: 100px;
        margin-top: 32px;
        text-align: center;
    }
    .avatar {
        width: 100px;
        height: 100px;
        display: block;
    }
    .col-sm-12 {
        margin-top: 20px;
    }
    .col-sm-12 select {
        height: 33px;
    }
    #app1{
        margin-left: 255px;
    }
</style>
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
<div class="ibox float-e-margins">
    <input hidden id="objectType" value="${objectType}">
    <input hidden id="objectId" value="${objectId}">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            <input hidden id="role" value="${role}">
            @if(objectType==1){
            <div class="form-group" id="provinceCode">
                <label class="col-sm-3 control-label">*所在省:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="pCode" name="pCode" onchange="TSite.oneChange(2)">
                        <option style="width: 300px" value="">选择省</option>
                        @for(obj in province){
                        <option style="width: 300px" value="${obj}">${obj}</option>
                        @}
                    </select>
                </div>
            </div>
            @}
            @if(objectType==1){
            <div class="form-group" id="cityCode">
                <label class="col-sm-3 control-label">*所在市:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="cCode" name="cCode" onchange="TSite.oneChangeNext(this)">
                        <option value="">请先选择省</option>
                    </select>
                </div>
            </div>
            @}
            @if(objectType==1){
            <div class="form-group" >
                <label class="col-sm-3 control-label">*所属账号:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="account" name="account">
                        <option value="">请先选择省/市</option>
                    </select>
                </div>
            </div>
            @}
            <div class="form-group" >
                <label class="col-sm-3 control-label">*所属门店:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="store" name="store"  >
                        <option disabled selected value="">请选择门店</option>
                        @if(objectType!=1){
                            @for(obj in stores){
                            <option style="width: 300px" value="${obj.id}">${obj.name}</option>
                            @}
                        @}
                    </select>
                </div>
            </div>
            <div class="form-group" id="siteType">
                <label class="col-sm-3 control-label">*场地分类:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="siteTypeId" name = "typeId">
                        <option value="">选择类型</option>
                        @for(obj in siteType){
                        <option value="${obj.id}">${obj.name}</option>
                        @}
                    </select>
                </div>
            </div>
        <#input style="width: 300px" id="name" name="*场地名称" type="text"/>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*可预约时间段:</label>
                <!-- <input style="width: 300px" class="form-control"  type="time">-->
                <div class="col-sm-9"  style="display: flex">
                    <input style="width: 136px;" value="开始时间" id="start-time" class="form-control" type="time">
                    <span style="margin-top: 7px">&nbsp;&nbsp;至&nbsp;&nbsp;</span>
                    <input style="width: 136px;" value="结束时间" id="end-time" class="form-control" type="time">
                </div>
            </div>
            <div class="form-group"  >
                <label class="col-sm-3 control-label">*现金价格:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="cashPrice" name="playPaiCoin" placeholder="请输入价格" type="text">
                    <span style="margin-left: 5px;margin-top: 5px">元/半小时</span>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*玩湃币价格:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="playPaiCoin" name="playPaiCoin" placeholder="请输入价格" type="text">
                    <span style="margin-left: 5px;margin-top: 5px">币/半小时</span>
                </div>
            </div>
            <div class="form-group">
                <label class="col-sm-3 control-label">*场地责任险有效期:</label>
                <div class="col-sm-9">
                    <input style="width: 300px" class="form-control" id="insuranceEndTime" name="insuranceEndTime" type="date">
                </div>
                <#avatar id="img" name="" avatarImg=""/>
                    <div class="form-group">
                        <label class="col-sm-3 control-label head-scu-label">*消防及应急管理方案:</label>
                        <div class="col-sm-2" style="padding-top: 30px;">
                            <input type="file" id="upFile" name="upFile" style="display: none">
                            <input class="form-control" id="courseVideo" readonly/>
                        </div>
                        <div class="col-sm-2" style="padding-top: 30px;">
                            <button class="btn btn-outline btn-success" type="file" onclick="UploadFileFn()"><i class="fa fa-upload"></i>上传文件</button>
                        </div>
                    </div>
                @if(objectType==1){
                <div class="row" id="app1">
                        <div class="form-group">
                            <label class="col-sm-3 control-label head-scu-label">*实景图片(请上传不超过五张图片): </label>
                            <div class="col-sm-2" style="width: 100%;margin-left: 11%;margin-top: 1%">
                                <el-upload
                                        :limit="5"
                                        class="avatar-uploader"
                                        action="/tCouponManage/uploadPic"
                                        list-type="picture-card"
                                        accept="."
                                        :on-success="handleAvatarSuccess"
                                        :on-remove="handleRemove">
                                    <i class="el-icon-plus"></i>
                                </el-upload>
                                <el-dialog :visible.sync="dialogVisible">
                                    <img width="100%" :src="imageUrl1" alt="">
                                </el-dialog>
                        </div>
                    </div>
                </div>
                @}
                @if(objectType==1){
                <#input style="width: 300px" id="name" name="*添加闸机:" placeholder="请输入闸机ID" type="text"/>
                @}
<div class="row btn-group-m-t">
    <div class="col-sm-10 col-sm-offset-5" >
        <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TSite.addSubmit()"/>
        <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TSite.close()"/>
    </div>
</div>
        </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/tSite/tSite.js"></script>
<script src="${ctxPath}/js/vue/vue.js"></script>
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
<script>
    var vue2 = new Vue({
        el: '#app1',
        props: {
            // 数量限制
            limit: {
                type: Number,
                default: 2
            },
        },
        data: {
            autoUpload: true,//自动上传
            imageUrl1: '',//模型数据,用于上传图片完成后图片预览
            dialogVisible: false
        },
        methods: {
            handleAvatarSuccess(res, file) {
                TSite.goodsPicArray.push(file);
            },
            beforeAvatarUpload(file) {
                const isLt2M = file.size / 1024 / 1024 < 10;
                if (!isLt2M) {
                    this.$message.error('上传图片大小不能超过 10MB!');
                }
                return isLt2M;
            },
            handleRemove(file, fileList) {
                TSite.goodsPicArray = TSite.goodsPicArray.filter(item => {
                    return item.uid != file.uid;
                });
            },
        },
        created() {
        },
    });
    var selectElement = document.getElementById('store');
    var startTime = document.getElementById('start-time');
    var endTime = document.getElementById('end-time');
    startTime.disabled = true;
    endTime.disabled = true;
    selectElement.addEventListener('change',function () {
        if (selectElement.value !== ''){
            startTime.disabled = false;
            endTime.disabled = false;
        }else{
            startTime.disabled = true;
            endTime.disabled = true;
        }
    });
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_edit.html
New file
@@ -0,0 +1,207 @@
@layout("/common/_container.html"){
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            @if(objectType == 1){
            <div class="form-group" id="provinceCode">
                <label class="col-sm-3 control-label">*所在省:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="pCode" name="pCode" onchange="TSiteInfo.oneChange(this)">
<!--                        <option style="width: 300px" value="${list.province}">${list.province}</option>-->
                        @for(obj in province){
                        <option value="${obj}" ${obj == list.province ? 'selected=selected' : ''}>${obj}</option>
<!--                        <option style="width: 300px" value="${obj}">${obj}</option>-->
                        @}
                    </select>
                </div>
            </div>
            <div class="form-group" id="cityCode">
                <label class="col-sm-3 control-label">*所在市:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="cCode" name="cCode" onchange="TSiteInfo.oneChangeNext(this)">
                        @for(obj in city1){
                        <option value="${obj.city}" ${obj.city == list.city ? 'selected=selected' : ''}>${obj.city}</option>
<!--                        <option style="width: 300px" value="${obj.city}">${obj.city}</option>-->
                        @}
                    </select>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*所属账号:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="account" name="account">
                        @for(obj in accounts){
                        <option style="width: 300px" value="${obj.id}">${obj.name}</option>
                        @}
                    </select>
                </div>
            </div>
            @}
            <div class="form-group" >
                <label class="col-sm-3 control-label">*所属门店:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="store" name="store" onchange="TSiteInfo.getTime(this)" >
                            @for(obj in stores){
                        <option value="${obj.id}" ${obj.id == list.storeId ? 'selected=selected' : ''}>${obj.name}</option>
<!--                        <option style="width: 300px" value="${obj.id}">${obj.name}</option>-->
                            @}
                    </select>
                </div>
            </div>
            <div class="form-group" id="siteType">
                <label class="col-sm-3 control-label">*场地类型:</label>
                <div class="col-sm-9">
                    <select style="width: 300px" class="form-control" id="siteTypeId" name = "typeId">
                        @for(obj in siteType){
                        <option value="${obj.id}">${obj.name}</option>
                        @}
                    </select>
                </div>
            </div>
            <div class="form-group"  >
                <label class="col-sm-3 control-label">*场地名称:</label>
                <div class="col-sm-9" >
                    <input style="width: 300px" class="form-control" id="name" name="name" type="text" value="${list.name}">
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*可预约时间段:</label>
                <div class="col-sm-9"  style="display: flex">
                    <input style="width: 150px;" value="${list.appointmentStartTime}" id="start-time" class="form-control" type="time" >
                    <span style="margin-top: 7px">&nbsp;&nbsp;至&nbsp;&nbsp;</span>
                    <input style="width: 150px;" value="${list.appointmentEndTime}" id="end-time" class="form-control" type="time">
                </div>
            </div>
            <div class="form-group"  >
                <label class="col-sm-3 control-label">*现金价格:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="cashPrice" name="playPaiCoin" type="text" value="${list.cashPrice}">
                    <span style="margin-left: 5px;margin-top: 5px">元/半小时</span>
                </div>
            </div>
            <div class="form-group" >
                <label class="col-sm-3 control-label">*玩湃币价格:</label>
                <div class="col-sm-9" style="display: flex;">
                    <input style="width: 300px" class="form-control" id="playPaiCoin" name="playPaiCoin" type="text" value="${list.playPaiCoin}">
                    <span style="margin-left: 5px;margin-top: 5px">币/半小时</span>
                </div>
            </div>
            <div class="form-group">
                <label class="col-sm-3 control-label">*场地责任险有效期:</label>
                <div class="col-sm-9">
                    <input value="${time}" style="width: 300px" class="form-control" id="insuranceEndTime" name="insuranceEndTime" type="date">
                </div>
            </div>
            <#avatar id="img" name="" value ="${list.insuranceImg}" avatarImg="${list.insuranceImg}"/>
            <div class="form-group">
                <label class="col-sm-3 control-label head-scu-label">*消防及应急管理方案:</label>
                <div class="col-sm-2" style="padding-top: 30px;">
                    <input type="file" id="upFile" name="upFile" style="display: none">
                    <input class="form-control" id="courseVideo" value="${list.managementPlan}" readonly/>
                </div>
                <div class="col-sm-2" style="padding-top: 30px;">
                    <button class="btn btn-outline btn-success" type="file" onclick="UploadFileFn()"><i class="fa fa-upload"></i>上传文件</button>
                </div>
            </div>
            @if(objectType ==1){
            <div class="row" id="app1">
                <div class="form-group">
                    <label class="col-sm-3 control-label head-scu-label">*实景图片(请上传不超过五张图片): </label>
                    <div class="col-sm-2" style="width: 100%;margin-left: 11%;margin-top: 1%">
                        <el-upload
                                :limit="5"
                                class="avatar-uploader"
                                action="/tCouponManage/uploadPic"
                                list-type="picture-card"
                                accept="."
                                :on-success="handleAvatarSuccess"
                                :on-remove="handleRemove">
                            <i class="el-icon-plus"></i>
                        </el-upload>
                        <el-dialog :visible.sync="dialogVisible">
                            <img width="100%" :src="imageUrl1" alt="">
                        </el-dialog>
                    </div>
                </div>
            </div>
            @}
        </div>
        @if(objectType==1){
        <#input style="width: 300px" id="name" name="*添加闸机:" placeholder="请输入闸机ID" type="text"/>
        @}
        <div class="row btn-group-m-t">
            <div class="col-sm-10 col-sm-offset-5" >
                @if(type==1){
                <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TSiteInfo.addSubmit()"/>
                @}
                <#button btnCss="danger" name="关闭" id="cancel" icon="fa-eraser" clickFun="TSiteInfo.close()"/>
            </div>
        </div>
        <input hidden id="role" value="${role}">
        <input type="hidden" id="id" value="${list.id}">
    </div>
<!--    <img  id="img" value="${list.insuranceImg}"/>-->
<!--    <img  id = "plan" value="${list.managementPlan}"/>-->
</div>
<script src="${ctxPath}/modular/system/tSite/tSite_info.js"></script>
<script src="${ctxPath}/js/vue/vue.js"></script>
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
<script>
    var vue2 = new Vue({
        el: '#app1',
        props: {
            // 数量限制
            limit: {
                type: Number,
                default: 2
            },
        },
        data: {
            autoUpload: true,//自动上传
            imageUrl1: '',//模型数据,用于上传图片完成后图片预览
            dialogVisible: false
        },
        methods: {
            handleAvatarSuccess(res, file) {
                TCarInfoDlg.goodsPicArray.push(file);
            },
            beforeAvatarUpload(file) {
                const isLt2M = file.size / 1024 / 1024 < 10;
                if (!isLt2M) {
                    this.$message.error('上传图片大小不能超过 10MB!');
                }
                return isLt2M;
            },
            handleRemove(file, fileList) {
                TCarInfoDlg.goodsPicArray = TCarInfoDlg.goodsPicArray.filter(item => {
                    return item.uid != file.uid;
                });
            },
        },
        created() {
        },
    });
    var selectElement = document.getElementById('store');
    var startTime = document.getElementById('start-time');
    var endTime = document.getElementById('end-time');
    selectElement.addEventListener('change',function () {
        if (selectElement.value !== ''){
            startTime.disabled = false;
            endTime.disabled = false;
        }else{
            startTime.disabled = true;
            endTime.disabled = true;
        }
    });
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_lock.html
New file
@@ -0,0 +1,62 @@
@layout("/common/_container.html"){
<style>
    .ibox-content {
        text-align: center;
    }
</style>
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm"><h2 style="margin-bottom: 20px"> 锁定场地 </h2>
            <div class="form-group" style="margin-left: 225px"  >
                <label  class="col-sm-3 control-label">锁定时间:</label>
                <div class="col-sm-9"  style="display: flex">
                    <input style="width: 200px;" value="开始时间" id="start-time" class="form-control" type="datetime-local">
                    <span style="margin-top: 7px">&nbsp;&nbsp;至&nbsp;&nbsp;</span>
                    <input style="width: 200px;" value="结束时间" id="end-time" class="form-control" type="datetime-local">
                    <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
                    <#button btnCss="info" name="添加" id="${id}" icon="fa-check" clickFun="TSiteLock.add(${id})"/>
                </div>
            </div>
            <div class="form-group" style="margin-left: 150px"  >
                <div class="col-sm-12" style="margin-left: -57px;margin-top: 20px">
                    <table class="table table-bordered" style="width: 70%;margin-left: 228px;" id="lockTable">
                        <thead>
                        <tr>
                            <td hidden>主键id</td>
                            <td>开始时间</td>
                            <td>结束时间</td>
                            <td>操作</td>
                        </tr>
                        </thead>
                        <tbody id="coun">
                        @for(obj in list){
                        <tr class="timeClass">
                            <td><span>${obj.ssTime}</span></td>
                            <td><span>${obj.eeTime}</span></td>
                            <td><button id = "${obj.id}" onclick="TSiteLock.delete(this)">删除</button></td>
                        </tr>
                        @}
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>
    <div class="row btn-group-m-t" style="margin-left: 145px">
        <div class="col-sm-10 col-sm-offset-5" >
            <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TSiteLock.close()"/>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/tSite/tSiteLock.js"></script>
<script src="${ctxPath}/js/vue/vue.js"></script>
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
<script>
</script>
@}
cloud-server-management/src/main/webapp/static/js/common/ajax-object.js
@@ -62,5 +62,5 @@
    };
    
    window.$ax = $ax;
} ());
cloud-server-management/src/main/webapp/static/js/common/web-upload-file.js
@@ -3,6 +3,7 @@
 */
// 开始上传文件
function UploadFileFn() {
    console.log("上传文件")
    $("#progressBarFile").html("0%").css("width", "0%");
    var upFile = $("#upFile").get(0).files[0]; //input file标签
cloud-server-management/src/main/webapp/static/modular/system/benefits/TBenefits.js
New file
@@ -0,0 +1,340 @@
/**
 * 管理初始化
 */
var TQuestion = {
    id: "TQuestionTable",    //表格id
    seItem: null,        //选中的条目
    table: null,
    layerIndex: -1
};
/**
 * 初始化表格的列
 */
TQuestion.initColumn = function () {
    return [
        {field: 'selectItem', checkbox: true},
        {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'},
        {title: '分类名称', field: 'name', visible: true, align: 'center', valign: 'middle'},
        {title: '所在位置', field: 'position', visible: true, align: 'center', valign: 'middle',
            formatter:function (data) {
                return {1:"先上课得积分",2:"看视频得奖励"}[data]
            }
        },
        {title: '视频数', field: 'count', visible: true, align: 'center', valign: 'middle'},
        {title: '排序', field: 'sort', visible: true, align: 'center', valign: 'middle'},
        {title: '状态', field: 'state', visible: true, align: 'center', valign: 'middle',
            formatter:function (data) {
                return {1:"上架中",2:"下架中",3:"已失效"}[data]
            }}
    ];
};
/**
 * 检查是否选中
 */
TQuestion.check = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length == 0){
        Feng.info("请先选中表格中的某一记录!");
        return false;
    }else{
        TQuestion.seItem = selected[0];
        return true;
    }
};
TQuestion.dataCount = 0;
TQuestion.phone = "";
TQuestion.phoneId = "";
/**
 * 点击添加
 */
TQuestion.openAdd = function () {
    var index = layer.open({
        type: 2,
        title: '添加分类',
        area: ['100%', '100%'], //宽高
        fix: false, //不固定
        maxmin: true,
        content: Feng.ctxPath + '/benefits/add'
    });
    this.layerIndex = index;
};
/**
 * 点击编辑
 */
TQuestion.openChange = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一个问题进行编辑!");
    }else {
        if (this.check()){
            var selected = $('#' + this.id).bootstrapTable('getSelections');
            var index = layer.open({
                type: 2,
                title: '编辑分类',
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/benefits/update/' + TQuestion.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 上架
 */
TQuestion.onShelf = function () {
if (this.check()){
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    const data1 = {
        ids:[],
        state:null
    };
    selected.forEach(function(obj) {
        var id = obj.id;
        data1.ids.push(id);
    });
    data1.state = 1;
    $.ajax({
        url: Feng.ctxPath + "/benefits/changeState",
        type: "POST",
        contentType: "application/json", // 设置请求头的 Content-Type
        data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
        success: function(response) {
            Feng.success("上架成功!");
            TQuestion.search();
        },
        error: function(xhr, status, error) {
            var errorMessage = xhr.responseText ? xhr.responseText : "上架失败!";
            Feng.error("您的网络异常!");
        }
    });
}
};
/**
 * 下架
 */
TQuestion.offShelf = function () {
    if (this.check()){
        var selected = $('#' + this.id).bootstrapTable('getSelections');
        const data1 = {
            ids:[],
            state:null
        };
        selected.forEach(function(obj) {
            var id = obj.id;
            data1.ids.push(id);
        });
        data1.state = 2;
        $.ajax({
            url: Feng.ctxPath + "/benefits/changeState",
            type: "POST",
            contentType: "application/json", // 设置请求头的 Content-Type
            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
            success: function(response) {
                Feng.success("下架成功!");
                TQuestion.search();
            },
            error: function(xhr, status, error) {
                var errorMessage = xhr.responseText ? xhr.responseText : "下架失败!";
                Feng.error("您的网络异常!");
            }
        });
    }
};
/**
 * 查看详情
 */
TQuestion.getInfo = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一条进行查看!");
    }else {
        if (this.check()){
            var selected = $('#' + this.id).bootstrapTable('getSelections');
            var index = layer.open({
                type: 2,
                title: '详情',
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/benefits/info/' + TQuestion.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 查看视频详情
 */
TQuestion.getInfo = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一条进行查看!");
    }else {
        if (this.check()){
            var selected = $('#' + this.id).bootstrapTable('getSelections');
            var index = layer.open({
                type: 2,
                title: '详情',
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/benefits/getBenefitsVideos/' + TQuestion.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 删除
 */
TQuestion.delete = function () {
    if (this.check()){
        var selected = $('#' + this.id).bootstrapTable('getSelections');
        const data1 = {
            ids:[],
            state:null
        };
        selected.forEach(function(obj) {
            var id = obj.id;
            data1.ids.push(id);
        });
        data1.state = 3;
        $.ajax({
            url: Feng.ctxPath + "/benefits/changeState",
            type: "POST",
            contentType: "application/json", // 设置请求头的 Content-Type
            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
            success: function(response) {
                Feng.success("删除成功!");
                TQuestion.search();
            },
            error: function(xhr, status, error) {
                var errorMessage = xhr.responseText ? xhr.responseText : "删除失败!";
                Feng.error(errorMessage);
            }
        });
    }
};
TQuestion.addSubmit = function(){
    var data = {
        id:null,
        name:"",
        position:"",
        sort:"",
    };
    data.name       = $("#name").val()
    data.position           = $("#position").val()
    data.sort           = $("#sort").val()
    if($("#name").val()==''){
        Feng.info("请输入分类名称")
        return;
    }
    if($("#cCode").val()==''){
        Feng.info("请选择所在位置")
        return;
    }
    if($("#account").val()=='' ){
        Feng.info("请输入排序")
        return;
    }
    $.ajax({
        url: Feng.ctxPath + "/benefits/addBenefits" ,
        type: "POST",
        data: JSON.stringify(data),
        contentType: "application/json",
        success: function (response) {
            Feng.success("添加成功");
        },
        error: function (xhr, status, error) {
            Feng.error("添加失败!" + error);
        }
    });
    TSite.search();
};
TQuestion.updateSubmit = function(){
    var data = {
        id:null,
        name:"",
        position:"",
        sort:"",
    };
    data.name     = $("#name").val()
    data.position = $("#position").val()
    data.sort     = $("#sort").val()
    data.id       = $("#dataId").val()
    if($("#name").val()==''){
        Feng.info("请输入分类名称")
        return;
    }
    if($("#cCode").val()==''){
        Feng.info("请选择所在位置")
        return;
    }
    if($("#account").val()=='' ){
        Feng.info("请输入排序")
        return;
    }
    $.ajax({
        url: Feng.ctxPath + "/benefits/addBenefits" ,
        type: "POST",
        data: JSON.stringify(data),
        contentType: "application/json",
        success: function (response) {
            Feng.success("添加成功");
        },
        error: function (xhr, status, error) {
            Feng.error("添加失败!" + error);
        }
    });
    TSite.search();
};
/**
 * 查询列表
 */
TQuestion.search = function () {
    var queryData = {};
    queryData['name'] = $("#name").val();
    queryData['position'] = $("#position").val();
    TQuestion.table.refresh({query: queryData});
};
/**
 * 重置搜索
 */
TQuestion.resetSearch = function () {
    $("#name").val('');
    $("#position").val('');
    TQuestion.search();
};
$(function () {
    var defaultColunms = TQuestion.initColumn();
    var table = new BSTable(TQuestion.id, "/benefits/list", defaultColunms);
    table.setPaginationType("client");
    TQuestion.table = table.init();
});
cloud-server-management/src/main/webapp/static/modular/system/benefits/tBenefitsVideos.js
New file
@@ -0,0 +1,361 @@
/**
 * 管理初始化
 */
var TQuestion = {
    id: "TQuestionTable",    //表格id
    seItem: null,        //选中的条目
    table: null,
    layerIndex: -1
};
/**
 * 初始化表格的列
 */
TQuestion.initColumn = function () {
    return [
        {field: 'selectItem', checkbox: true},
        {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'},
        {title: 'benefitsVideosId', field: 'benefitsVideosId', visible: false, align: 'center', valign: 'middle'},
        {title: '视频类型', field: 'type', visible: true, align: 'center', valign: 'middle',
            formatter:function (data) {
                return {1:"课后练习",2:"运动教学视频",3:"器材教学视频"}[data]
            }
        },
        {title: '视频封面', field: 'coverDrawing', visible: true, align: 'center', valign: 'middle',
            formatter: function (value, row, index) {
                value = typeof value == "undefined" || value == '' ? '/static/img/NoPIC.png' : value;
                return '<img src="' + value + '" style="height: 100px;"/>'
            }
        },
        {title: '视频名称', field: 'name', visible: true, align: 'center', valign: 'middle'},
        {title: '视频简介', field: 'introduce', visible: true, align: 'center', valign: 'middle'},
        {title: '可获积分', field: 'integral', visible: true, align: 'center', valign: 'middle'},
        {title: '添加时间', field: 'insertTime', visible: true, align: 'center', valign: 'middle'},
        {title: '状态', field: 'state', visible: true, align: 'center', valign: 'middle',
            formatter:function (data) {
                return {1:"上架中",2:"下架中",3:"已失效"}[data]
            }}
    ];
};
/**
 * 检查是否选中
 */
TQuestion.check = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length == 0){
        Feng.info("请先选中表格中的某一记录!");
        return false;
    }else{
        TQuestion.seItem = selected[0];
        return true;
    }
};
TQuestion.dataCount = 0;
TQuestion.phone = "";
TQuestion.phoneId = "";
/**
 * 点击添加
 */
TQuestion.openAdd = function () {
    var val = $("#id").val();
    var index = layer.open({
        type: 2,
        title: '添加分类',
        area: ['100%', '100%'], //宽高
        fix: false, //不固定
        maxmin: true,
        content: Feng.ctxPath + '/benefits/addBenefitsVideos/'+val
    });
    this.layerIndex = index;
};
/**
 * 上架
 */
TQuestion.onShelf = function () {
if (this.check()){
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    const data1 = {
        ids:[],
        state:null
    };
    selected.forEach(function(obj) {
        var id = obj.id;
        data1.ids.push(id);
    });
    data1.state = 1;
    $.ajax({
        url: Feng.ctxPath + "/benefits/changeCourseState",
        type: "POST",
        contentType: "application/json", // 设置请求头的 Content-Type
        data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
        success: function(response) {
            Feng.success("上架成功!");
            TQuestion.search();
        },
        error: function(xhr, status, error) {
            var errorMessage = xhr.responseText ? xhr.responseText : "上架失败!";
            Feng.error("您的网络异常!");
        }
    });
}
};
/**
 * 下架
 */
TQuestion.offShelf = function () {
    if (this.check()){
        var selected = $('#' + this.id).bootstrapTable('getSelections');
        const data1 = {
            ids:[],
            state:null
        };
        selected.forEach(function(obj) {
            var id = obj.id;
            data1.ids.push(id);
        });
        data1.state = 2;
        $.ajax({
            url: Feng.ctxPath + "/benefits/changeCourseState",
            type: "POST",
            contentType: "application/json", // 设置请求头的 Content-Type
            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
            success: function(response) {
                Feng.success("下架成功!");
                TQuestion.search();
            },
            error: function(xhr, status, error) {
                var errorMessage = xhr.responseText ? xhr.responseText : "下架失败!";
                Feng.error("您的网络异常!");
            }
        });
    }
};
/**
 * 查看详情
 */
TQuestion.getInfo = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一条进行查看!");
    }else {
        if (this.check()){
            var selected = $('#' + this.id).bootstrapTable('getSelections');
            var index = layer.open({
                type: 2,
                title: '详情',
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/benefits/infoBenefitsVideos/' + TQuestion.seItem.id+'/'+1
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 点击编辑
 */
TQuestion.openChange = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    console.log("看看")
    console.log();
    if(selected.length >1 ){
        Feng.info("只能选择一个进行编辑!");
    }else {
        if (this.check()){
            var selected = $('#' + this.id).bootstrapTable('getSelections');
            var index = layer.open({
                type: 2,
                title: '编辑分类',
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/benefits/infoBenefitsVideos/' + TQuestion.seItem.id+'/'+2+'/'+selected[0]['benefitsVideosId']
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 查看视频详情的详情
 */
TQuestion.getInfo = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一条进行查看!");
    }else {
        if (this.check()){
            var selected = $('#' + this.id).bootstrapTable('getSelections');
            var index = layer.open({
                type: 2,
                title: '详情',
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/benefits/infoBenefitsVideos/' + TQuestion.seItem.id+'/'+1+'/'+selected[0]['benefitsVideosId']
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 删除
 */
TQuestion.delete = function () {
    if (this.check()){
        var selected = $('#' + this.id).bootstrapTable('getSelections');
        const data1 = {
            ids:[],
            state:null
        };
        selected.forEach(function(obj) {
            var id = obj.id;
            data1.ids.push(id);
        });
        data1.state = 3;
        $.ajax({
            url: Feng.ctxPath + "/benefits/changeCourseState",
            type: "POST",
            contentType: "application/json", // 设置请求头的 Content-Type
            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
            success: function(response) {
                Feng.success("删除成功!");
                TQuestion.search();
            },
            error: function(xhr, status, error) {
                var errorMessage = xhr.responseText ? xhr.responseText : "删除失败!";
                Feng.error(errorMessage);
            }
        });
    }
};
TQuestion.addSubmit = function(){
    var data = {
        id:null,
        name:"",
        position:"",
        sort:"",
    };
    data.name       = $("#name").val()
    data.position           = $("#position").val()
    data.sort           = $("#sort").val()
    if($("#name").val()==''){
        Feng.info("请输入分类名称")
        return;
    }
    if($("#cCode").val()==''){
        Feng.info("请选择所在位置")
        return;
    }
    if($("#account").val()=='' ){
        Feng.info("请输入排序")
        return;
    }
    $.ajax({
        url: Feng.ctxPath + "/benefits/addBenefits" ,
        type: "POST",
        data: JSON.stringify(data),
        contentType: "application/json",
        success: function (response) {
            Feng.success("添加成功");
        },
        error: function (xhr, status, error) {
            Feng.error("添加失败!" + error);
        }
    });
    TSite.search();
};
TQuestion.updateSubmit = function(){
    var data = {
        id:null,
        name:"",
        position:"",
        sort:"",
    };
    data.name     = $("#name").val()
    data.position = $("#position").val()
    data.sort     = $("#sort").val()
    data.id       = $("#dataId").val()
    if($("#name").val()==''){
        Feng.info("请输入分类名称")
        return;
    }
    if($("#cCode").val()==''){
        Feng.info("请选择所在位置")
        return;
    }
    if($("#account").val()=='' ){
        Feng.info("请输入排序")
        return;
    }
    $.ajax({
        url: Feng.ctxPath + "/benefits/addBenefits" ,
        type: "POST",
        data: JSON.stringify(data),
        contentType: "application/json",
        success: function (response) {
            Feng.success("添加成功");
        },
        error: function (xhr, status, error) {
            Feng.error("添加失败!" + error);
        }
    });
    TSite.search();
};
/**
 * 查询列表
 */
TQuestion.search = function () {
    var queryData = {};
    queryData['name'] = $("#name").val();
    queryData['type'] = $("#position").val();
    queryData['state'] = $("#state").val();
    TQuestion.table.refresh({query: queryData});
};
/**
 * 重置搜索
 */
TQuestion.resetSearch = function () {
    $("#name").val('');
    $("#state").val('');
    $("#position").val('');
    TQuestion.search();
};
function UploadFileFn(){
    $('#upFile').click();
}
$(function () {
    var val = $("#id").val();
    var defaultColunms = TQuestion.initColumn();
    var table = new BSTable(TQuestion.id, "/benefits/listBenefitsVideos/"+val, defaultColunms);
    table.setPaginationType("client");
    TQuestion.table = table.init();
});
cloud-server-management/src/main/webapp/static/modular/system/benefits/tBenefitsVideos_add.js
New file
@@ -0,0 +1,393 @@
/**
 * 管理初始化
 */
var TQuestion = {
    id: "TQuestionTable",    //表格id
    seItem: null,        //选中的条目
    table: null,
    layerIndex: -1
};
/**
 * 初始化表格的列
 */
TQuestion.initColumn = function () {
    return [
        {field: 'selectItem', checkbox: true},
        {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'},
        {title: '视频类型', field: 'type', visible: true, align: 'center', valign: 'middle',
            formatter:function (data) {
                return {1:"课后练习",2:"运动教学视频",3:"器材教学视频"}[data]
            }
        },
        {title: '视频封面', field: 'coverDrawing', visible: true, align: 'center', valign: 'middle',
            formatter: function (value, row, index) {
                value = typeof value == "undefined" || value == '' ? '/static/img/NoPIC.png' : value;
                return '<img src="' + value + '" style="height: 100px;"/>'
            }
        },
        {title: '视频名称', field: 'name', visible: true, align: 'center', valign: 'middle'},
        {title: '视频简介', field: 'introduce', visible: true, align: 'center', valign: 'middle'},
        {title: '可获积分', field: 'integral', visible: true, align: 'center', valign: 'middle'},
        {title: '添加时间', field: 'insertTime', visible: true, align: 'center', valign: 'middle'},
        {title: '状态', field: 'state', visible: true, align: 'center', valign: 'middle',
            formatter:function (data) {
                return {1:"上架中",2:"下架中",3:"已失效"}[data]
            }}
    ];
};
/**
 * 检查是否选中
 */
TQuestion.check = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length == 0){
        Feng.info("请先选中表格中的某一记录!");
        return false;
    }else{
        TQuestion.seItem = selected[0];
        return true;
    }
};
TQuestion.dataCount = 0;
TQuestion.phone = "";
TQuestion.phoneId = "";
/**
 * 选择视频 回显视频封面
 * @param e
 */
TQuestion.oneChange = function (e) {
    var id = $("#name").val();
    var ajax = new $ax(Feng.ctxPath + "/benefits/getCoverDrawing/"+id, function(data){
        document.getElementById('img').src = data.coverDrawing;
        $("#introduce").val(data.introduce);
    });
    ajax.set("id",id);
    ajax.start();
};
/**
 * 点击添加
 */
TQuestion.openAdd = function () {
    var index = layer.open({
        type: 2,
        title: '添加分类',
        area: ['100%', '100%'], //宽高
        fix: false, //不固定
        maxmin: true,
        content: Feng.ctxPath + '/benefits/add'
    });
    this.layerIndex = index;
};
/**
 * 点击编辑
 */
TQuestion.openChange = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一个问题进行编辑!");
    }else {
        if (this.check()){
            var selected = $('#' + this.id).bootstrapTable('getSelections');
            var index = layer.open({
                type: 2,
                title: '编辑分类',
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/benefits/update/' + TQuestion.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 上架
 */
TQuestion.onShelf = function () {
if (this.check()){
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    const data1 = {
        ids:[],
        state:null
    };
    selected.forEach(function(obj) {
        var id = obj.id;
        data1.ids.push(id);
    });
    data1.state = 1;
    $.ajax({
        url: Feng.ctxPath + "/benefits/changeCourseState",
        type: "POST",
        contentType: "application/json", // 设置请求头的 Content-Type
        data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
        success: function(response) {
            Feng.success("上架成功!");
            TQuestion.search();
        },
        error: function(xhr, status, error) {
            var errorMessage = xhr.responseText ? xhr.responseText : "上架失败!";
            Feng.error("您的网络异常!");
        }
    });
}
};
/**
 * 下架
 */
TQuestion.offShelf = function () {
    if (this.check()){
        var selected = $('#' + this.id).bootstrapTable('getSelections');
        const data1 = {
            ids:[],
            state:null
        };
        selected.forEach(function(obj) {
            var id = obj.id;
            data1.ids.push(id);
        });
        data1.state = 2;
        $.ajax({
            url: Feng.ctxPath + "/benefits/changeCourseState",
            type: "POST",
            contentType: "application/json", // 设置请求头的 Content-Type
            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
            success: function(response) {
                Feng.success("下架成功!");
                TQuestion.search();
            },
            error: function(xhr, status, error) {
                var errorMessage = xhr.responseText ? xhr.responseText : "下架失败!";
                Feng.error("您的网络异常!");
            }
        });
    }
};
/**
 * 查看详情
 */
TQuestion.getInfo = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一条进行查看!");
    }else {
        if (this.check()){
            var selected = $('#' + this.id).bootstrapTable('getSelections');
            var index = layer.open({
                type: 2,
                title: '详情',
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/benefits/info/' + TQuestion.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 查看视频详情
 */
TQuestion.getInfo = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一条进行查看!");
    }else {
        if (this.check()){
            var selected = $('#' + this.id).bootstrapTable('getSelections');
            var index = layer.open({
                type: 2,
                title: '详情',
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/benefits/getBenefitsVideos/' + TQuestion.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 删除
 */
TQuestion.delete = function () {
    if (this.check()){
        var selected = $('#' + this.id).bootstrapTable('getSelections');
        const data1 = {
            ids:[],
            state:null
        };
        selected.forEach(function(obj) {
            var id = obj.id;
            data1.ids.push(id);
        });
        data1.state = 3;
        $.ajax({
            url: Feng.ctxPath + "/benefits/changeCourseState",
            type: "POST",
            contentType: "application/json", // 设置请求头的 Content-Type
            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
            success: function(response) {
                Feng.success("删除成功!");
                TQuestion.search();
            },
            error: function(xhr, status, error) {
                var errorMessage = xhr.responseText ? xhr.responseText : "删除失败!";
                Feng.error(errorMessage);
            }
        });
    }
};
TQuestion.addSubmit = function(){
    var data = {
        benefitsVideoClassificationId:null,
        courseId:"",
        integral:""
    };
    data.courseId       = $("#name").val()
    data.benefitsVideoClassificationId         = $("#id").val()
    data.integral   = $("#integral").val()
    if($("#name").val()==''){
        Feng.info("请选择视频")
        return;
    }
    if($("#integral").val()==''){
        Feng.info("请输入可获积分")
        return;
    }
    $.ajax({
        url: Feng.ctxPath + "/benefits/addBenefitsVideos" ,
        type: "POST",
        data: JSON.stringify(data),
        contentType: "application/json",
        success: function (response) {
            if (response === 500){
                Feng.error("所选视频已经存在于当前福利视频分类下!");
            }else{
                Feng.success("添加成功");
            }
        },
        error: function (xhr, status, error) {
            Feng.error("添加失败!" + error);
        }
    });
};
// 视频详情编辑提交按钮
TQuestion.updateVideosSubmit = function(){
    var data = {
        id:null,
        integral:null
    };
    data.id       = $("#benefitsVideosId").val()
    data.integral   = $("#integral").val()
    if($("#integral").val()==''){
        Feng.info("请输入可获积分")
        return;
    }
    $.ajax({
        url: Feng.ctxPath + "/benefits/addBenefitsVideos" ,
        type: "POST",
        data: JSON.stringify(data),
        contentType: "application/json",
        success: function (response) {
            Feng.success("添加成功");
        },
        error: function (xhr, status, error) {
            Feng.error("添加失败!" + error);
        }
    });
};
TQuestion.updateSubmit = function(){
    var data = {
        id:null,
        name:"",
        position:"",
        sort:"",
    };
    data.name     = $("#name").val()
    data.position = $("#position").val()
    data.sort     = $("#sort").val()
    data.id       = $("#dataId").val()
    if($("#name").val()==''){
        Feng.info("请输入分类名称")
        return;
    }
    if($("#cCode").val()==''){
        Feng.info("请选择所在位置")
        return;
    }
    if($("#account").val()=='' ){
        Feng.info("请输入排序")
        return;
    }
    $.ajax({
        url: Feng.ctxPath + "/benefits/addBenefits" ,
        type: "POST",
        data: JSON.stringify(data),
        contentType: "application/json",
        success: function (response) {
            Feng.success("添加成功");
        },
        error: function (xhr, status, error) {
            Feng.error("添加失败!" + error);
        }
    });
    TSite.search();
};
/**
 * 查询列表
 */
TQuestion.search = function () {
    var queryData = {};
    queryData['name'] = $("#name").val();
    queryData['type'] = $("#position").val();
    queryData['state'] = $("#state").val();
    TQuestion.table.refresh({query: queryData});
};
/**
 * 重置搜索
 */
TQuestion.resetSearch = function () {
    $("#name").val('');
    $("#state").val('');
    $("#position").val('');
    TQuestion.search();
};
/**
 * 关闭此对话框
 */
TQuestion.close = function() {
    parent.layer.close(window.parent.TQuestion.layerIndex);
}
$(function () {
    var val = $("#id").val();
    var defaultColunms = TQuestion.initColumn();
    var table = new BSTable(TQuestion.id, "/benefits/listBenefitsVideos/"+val, defaultColunms);
    table.setPaginationType("client");
    TQuestion.table = table.init();
    var carPhoto = new $WebUpload("img");
    carPhoto.setUploadBarId("progressBar");
    carPhoto.init();
});
cloud-server-management/src/main/webapp/static/modular/system/benefits/tBenefitsVideos_edit.js
New file
@@ -0,0 +1,350 @@
/**
 * 管理初始化
 */
var TQuestion = {
    id: "TQuestionTable",    //表格id
    seItem: null,        //选中的条目
    table: null,
    layerIndex: -1
};
/**
 * 初始化表格的列
 */
TQuestion.initColumn = function () {
    return [
        {field: 'selectItem', checkbox: true},
        {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'},
        {title: '视频类型', field: 'type', visible: true, align: 'center', valign: 'middle',
            formatter:function (data) {
                return {1:"课后练习",2:"运动教学视频",3:"器材教学视频"}[data]
            }
        },
        {title: '视频封面', field: 'coverDrawing', visible: true, align: 'center', valign: 'middle',
            formatter: function (value, row, index) {
                value = typeof value == "undefined" || value == '' ? '/static/img/NoPIC.png' : value;
                return '<img src="' + value + '" style="height: 100px;"/>'
            }
        },
        {title: '视频名称', field: 'name', visible: true, align: 'center', valign: 'middle'},
        {title: '视频简介', field: 'introduce', visible: true, align: 'center', valign: 'middle'},
        {title: '可获积分', field: 'integral', visible: true, align: 'center', valign: 'middle'},
        {title: '添加时间', field: 'insertTime', visible: true, align: 'center', valign: 'middle'},
        {title: '状态', field: 'state', visible: true, align: 'center', valign: 'middle',
            formatter:function (data) {
                return {1:"上架中",2:"下架中",3:"已失效"}[data]
            }}
    ];
};
/**
 * 检查是否选中
 */
TQuestion.check = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length == 0){
        Feng.info("请先选中表格中的某一记录!");
        return false;
    }else{
        TQuestion.seItem = selected[0];
        return true;
    }
};
TQuestion.dataCount = 0;
TQuestion.phone = "";
TQuestion.phoneId = "";
/**
 * 点击添加
 */
TQuestion.openAdd = function () {
    var index = layer.open({
        type: 2,
        title: '添加分类',
        area: ['100%', '100%'], //宽高
        fix: false, //不固定
        maxmin: true,
        content: Feng.ctxPath + '/benefits/add'
    });
    this.layerIndex = index;
};
/**
 * 点击编辑
 */
TQuestion.openChange = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一个问题进行编辑!");
    }else {
        if (this.check()){
            var selected = $('#' + this.id).bootstrapTable('getSelections');
            var index = layer.open({
                type: 2,
                title: '编辑分类',
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/benefits/update/' + TQuestion.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 上架
 */
TQuestion.onShelf = function () {
if (this.check()){
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    const data1 = {
        ids:[],
        state:null
    };
    selected.forEach(function(obj) {
        var id = obj.id;
        data1.ids.push(id);
    });
    data1.state = 1;
    $.ajax({
        url: Feng.ctxPath + "/benefits/changeCourseState",
        type: "POST",
        contentType: "application/json", // 设置请求头的 Content-Type
        data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
        success: function(response) {
            Feng.success("上架成功!");
            TQuestion.search();
        },
        error: function(xhr, status, error) {
            var errorMessage = xhr.responseText ? xhr.responseText : "上架失败!";
            Feng.error("您的网络异常!");
        }
    });
}
};
/**
 * 下架
 */
TQuestion.offShelf = function () {
    if (this.check()){
        var selected = $('#' + this.id).bootstrapTable('getSelections');
        const data1 = {
            ids:[],
            state:null
        };
        selected.forEach(function(obj) {
            var id = obj.id;
            data1.ids.push(id);
        });
        data1.state = 2;
        $.ajax({
            url: Feng.ctxPath + "/benefits/changeCourseState",
            type: "POST",
            contentType: "application/json", // 设置请求头的 Content-Type
            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
            success: function(response) {
                Feng.success("下架成功!");
                TQuestion.search();
            },
            error: function(xhr, status, error) {
                var errorMessage = xhr.responseText ? xhr.responseText : "下架失败!";
                Feng.error("您的网络异常!");
            }
        });
    }
};
/**
 * 查看详情
 */
TQuestion.getInfo = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一条进行查看!");
    }else {
        if (this.check()){
            var selected = $('#' + this.id).bootstrapTable('getSelections');
            var index = layer.open({
                type: 2,
                title: '详情',
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/benefits/info/' + TQuestion.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 查看视频详情
 */
TQuestion.getInfo = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一条进行查看!");
    }else {
        if (this.check()){
            var selected = $('#' + this.id).bootstrapTable('getSelections');
            var index = layer.open({
                type: 2,
                title: '详情',
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/benefits/getBenefitsVideos/' + TQuestion.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 删除
 */
TQuestion.delete = function () {
    if (this.check()){
        var selected = $('#' + this.id).bootstrapTable('getSelections');
        const data1 = {
            ids:[],
            state:null
        };
        selected.forEach(function(obj) {
            var id = obj.id;
            data1.ids.push(id);
        });
        data1.state = 3;
        $.ajax({
            url: Feng.ctxPath + "/benefits/changeCourseState",
            type: "POST",
            contentType: "application/json", // 设置请求头的 Content-Type
            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
            success: function(response) {
                Feng.success("删除成功!");
                TQuestion.search();
            },
            error: function(xhr, status, error) {
                var errorMessage = xhr.responseText ? xhr.responseText : "删除失败!";
                Feng.error(errorMessage);
            }
        });
    }
};
TQuestion.addSubmit = function(){
    var data = {
        id:null,
        name:"",
        position:"",
        sort:"",
    };
    data.name       = $("#name").val()
    data.position           = $("#position").val()
    data.sort           = $("#sort").val()
    if($("#name").val()==''){
        Feng.info("请输入分类名称")
        return;
    }
    if($("#cCode").val()==''){
        Feng.info("请选择所在位置")
        return;
    }
    if($("#account").val()=='' ){
        Feng.info("请输入排序")
        return;
    }
    $.ajax({
        url: Feng.ctxPath + "/benefits/addBenefits" ,
        type: "POST",
        data: JSON.stringify(data),
        contentType: "application/json",
        success: function (response) {
            Feng.success("添加成功");
        },
        error: function (xhr, status, error) {
            Feng.error("添加失败!" + error);
        }
    });
    TSite.search();
};
TQuestion.updateSubmit = function(){
    var data = {
        id:null,
        name:"",
        position:"",
        sort:"",
    };
    data.name     = $("#name").val()
    data.position = $("#position").val()
    data.sort     = $("#sort").val()
    data.id       = $("#dataId").val()
    if($("#name").val()==''){
        Feng.info("请输入分类名称")
        return;
    }
    if($("#cCode").val()==''){
        Feng.info("请选择所在位置")
        return;
    }
    if($("#account").val()=='' ){
        Feng.info("请输入排序")
        return;
    }
    $.ajax({
        url: Feng.ctxPath + "/benefits/addBenefits" ,
        type: "POST",
        data: JSON.stringify(data),
        contentType: "application/json",
        success: function (response) {
            Feng.success("添加成功");
        },
        error: function (xhr, status, error) {
            Feng.error("添加失败!" + error);
        }
    });
    TSite.search();
};
/**
 * 查询列表
 */
TQuestion.search = function () {
    var queryData = {};
    queryData['name'] = $("#name").val();
    queryData['type'] = $("#position").val();
    queryData['state'] = $("#state").val();
    TQuestion.table.refresh({query: queryData});
};
/**
 * 重置搜索
 */
TQuestion.resetSearch = function () {
    $("#name").val('');
    $("#state").val('');
    $("#position").val('');
    TQuestion.search();
};
$(function () {
    var val = $("#id").val();
    var defaultColunms = TQuestion.initColumn();
    var table = new BSTable(TQuestion.id, "/benefits/listBenefitsVideos/"+val, defaultColunms);
    table.setPaginationType("client");
    TQuestion.table = table.init();
});
cloud-server-management/src/main/webapp/static/modular/system/bodySideAppointment/tBodySideAppointment.js
New file
@@ -0,0 +1,426 @@
/**
 * 管理初始化
 */
var TQuestion = {
    id: "TQuestionTable",    //表格id
    seItem: null,        //选中的条目
    table: null,
    layerIndex: -1
};
/**
 * 初始化表格的列
 */
TQuestion.initColumn = function () {
    return [
        {field: 'selectItem', checkbox: true},
        {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'},
        {title: '所在省市', field: 'provinceAndCity', visible: true, align: 'center', valign: 'middle'},
        {title: '预约门店', field: 'storeName', visible: true, align: 'center', valign: 'middle'},
        {title: '家长姓名', field: 'parentName', visible: true, align: 'center', valign: 'middle'},
        {title: '家长联系方式', field: 'phone', visible: true, align: 'center', valign: 'middle'},
        {title: '学员姓名', field: 'learnerName', visible: true, align: 'center', valign: 'middle'},
        {title: '学员年龄', field: 'learnerAge', visible: true, align: 'center', valign: 'middle'},
        {title: '学员生日', field: 'birthday', visible: true, align: 'center', valign: 'middle'},
        {title: '预约时间', field: 'appointmentTime', visible: true, align: 'center', valign: 'middle'},
        {title: '状态', field: 'status', visible: true, align: 'center', valign: 'middle',
            formatter:function (data) {
                return {1:"未测试",2:"已测试"}[data]
            }}
    ];
};
/**
 * 检查是否选中
 */
TQuestion.check = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length == 0){
        Feng.info("请先选中表格中的某一记录!");
        return false;
    }else{
        TQuestion.seItem = selected[0];
        return true;
    }
};
TQuestion.dataCount = 0;
TQuestion.phone = "";
TQuestion.phoneId = "";
/**
 * 点击添加
 */
TQuestion.openAdd = function () {
    var index = layer.open({
        type: 2,
        title: '添加分类',
        area: ['100%', '100%'], //宽高
        fix: false, //不固定
        maxmin: true,
        content: Feng.ctxPath + '/bodySideAppointment/add'
    });
    this.layerIndex = index;
};
/**
 * 点击编辑
 */
TQuestion.openChange = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一个问题进行编辑!");
    }else {
        if (this.check()){
            var selected = $('#' + this.id).bootstrapTable('getSelections');
            var index = layer.open({
                type: 2,
                title: '编辑分类',
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/benefits/update/' + TQuestion.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 上架
 */
TQuestion.onShelf = function () {
if (this.check()){
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    var ids=[];
    selected.forEach(function(obj) {
        var id = obj.id;
        ids.push(id);
    });
    $.ajax({
        url: Feng.ctxPath + "/bodySideAppointment/changeState",
        type: "POST",
        contentType: "application/json", // 设置请求头的 Content-Type
        data: JSON.stringify(ids), // 将数据转换为 JSON 字符串
        success: function(response) {
            Feng.success("上架成功!");
            TQuestion.search();
        },
        error: function(xhr, status, error) {
            var errorMessage = xhr.responseText ? xhr.responseText : "上架失败!";
            Feng.error("您的网络异常!");
        }
    });
}
};
/**
 * 下架
 */
TQuestion.offShelf = function () {
    if (this.check()){
        var selected = $('#' + this.id).bootstrapTable('getSelections');
        const data1 = {
            ids:[],
            state:null
        };
        selected.forEach(function(obj) {
            var id = obj.id;
            data1.ids.push(id);
        });
        data1.state = 2;
        $.ajax({
            url: Feng.ctxPath + "/bodySideAppointment/changeState",
            type: "POST",
            contentType: "application/json", // 设置请求头的 Content-Type
            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
            success: function(response) {
                Feng.success("下架成功!");
                TQuestion.search();
            },
            error: function(xhr, status, error) {
                var errorMessage = xhr.responseText ? xhr.responseText : "下架失败!";
                Feng.error("您的网络异常!");
            }
        });
    }
};
/**
 * 查看详情
 */
TQuestion.getInfo = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一条进行查看!");
    }else {
        if (this.check()){
            var selected = $('#' + this.id).bootstrapTable('getSelections');
            var index = layer.open({
                type: 2,
                title: '详情',
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/benefits/info/' + TQuestion.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 查看视频详情
 */
TQuestion.getInfo = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一条进行查看!");
    }else {
        if (this.check()){
            var selected = $('#' + this.id).bootstrapTable('getSelections');
            var index = layer.open({
                type: 2,
                title: '详情',
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/benefits/getBenefitsVideos/' + TQuestion.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 删除
 */
TQuestion.delete = function () {
    if (this.check()){
        var selected = $('#' + this.id).bootstrapTable('getSelections');
        const data1 = {
            ids:[],
            state:null
        };
        selected.forEach(function(obj) {
            var id = obj.id;
            data1.ids.push(id);
        });
        data1.state = 3;
        $.ajax({
            url: Feng.ctxPath + "/benefits/changeState",
            type: "POST",
            contentType: "application/json", // 设置请求头的 Content-Type
            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
            success: function(response) {
                Feng.success("删除成功!");
                TQuestion.search();
            },
            error: function(xhr, status, error) {
                var errorMessage = xhr.responseText ? xhr.responseText : "删除失败!";
                Feng.error(errorMessage);
            }
        });
    }
};
TQuestion.oneChange = function () {
    var province = $('#pCode option:selected').text();
    var citySelect = document.getElementById("cCode");
    var ajax = new $ax(Feng.ctxPath + "/tSite/getCity", function(data){
        if(data!=null){
            var content='<option value="">选择市</option>';
            $.each(data, function(k,v) {
                content += "<option value='"+v.cityCode+"'>"+v.city+"</option>";
            });
            $("#cCode").empty().append(content);
        }
    });
    if (province === ""){
        citySelect.innerHTML = '<option value="">请先选择省</option>';
    }
    ajax.set("province",province);
    ajax.start();
};
TQuestion.oneChangeNext = function (e) {
    var oneId=$(e).val();
    var city = $('#cCode option:selected').text();
    var citySelect = document.getElementById("account");
    var storeSelect = document.getElementById("store");
    if (oneId === ""){
        citySelect.innerHTML = '<option style="width: 300px" value="">请先选择省/市</option>';
        storeSelect.innerHTML = '<option style="width: 300px" value="">请先选择省/市</option>';
    }
    var ajax1 = new $ax(Feng.ctxPath + "/tSite/storeChangeNext", function(data){
        if(data!=null && data.length !== 0){
            var content='<option value="">选择门店</option>';
            $.each(data, function(k,v) {
                content += "<option style='width: 300px' value='"+v.id+"'>"+v.name+"</option>";
            });
            $("#store").empty().append(content);
        }else {
            storeSelect.innerHTML = '<option value="">当前所选市没有门店</option>';
        }
    });
    ajax1.set("oneId",city);
    ajax1.start();
};
TQuestion.addSubmit = function(){
    var data = {
        id:null,
        province:"",
        provinceCode:"",
        city:"",
        cityCode:"",
        storeId:null,
        storeName:"",
        parentName:"",
        phone:"",
        learnerName:"",
        learnerAge:null,
        birthday:"",
        appointmentTime:"",
        status:null,
        state:null
    };
    data.id                      = $("#name").val()
    data.province                = $('#pCode option:selected').text();
    data.provinceCode            = $("#pCode").val()
    data.city                    = $('#cCode option:selected').text();
    data.cityCode                = $("#cCode").val()
    data.storeId                 = $("#store").val()
    data.storeName               = $('#store option:selected').text();
    data.parentName              = $("#parentName").val()
    data.phone                   = $("#phone").val()
    data.learnerName             = $("#learnerName").val()
    data.learnerAge              = $("#learnerAge").val()
    data.birthday                = $("#birthday").val()
    data.appointmentTime         = $("#appointmentTime").val().replace("T"," ")
    console.log("看看")
    console.log(data.appointmentTime);
    if($("#pCode").val()==''){
        Feng.info("请选择省")
        return;
    }
    if($("#cCode").val()==''){
        Feng.info("请选择市")
        return;
    }
    if($("#store").val()=='' ){
        Feng.info("请选择门店")
        return;
    }
    if($("#parentName").val()=='' ){
        Feng.info("请输入家长姓名")
        return;
    }
    if($("#phone").val()=='' ){
        Feng.info("请输入家长联系方式")
        return;
    }
    if($("#learnerName").val()=='' ){
        Feng.info("请输入学员姓名")
        return;
    }
    if($("#learnerAge").val()=='' ){
        Feng.info("请输入学员年龄")
        return;
    }
    if($("#birthday").val()=='' ){
        Feng.info("请选择学员生日")
        return;
    }
    if($("#appointmentTime").val()=='' ){
        Feng.info("请选择预约时间")
        return;
    }
    $.ajax({
        url: Feng.ctxPath + "/bodySideAppointment/addBodySideAppointments" ,
        type: "POST",
        data: JSON.stringify(data),
        contentType: "application/json",
        success: function (response) {
            Feng.success("添加成功");
        },
        error: function (xhr, status, error) {
            Feng.error("添加失败!" + error);
        }
    });
};
TQuestion.updateSubmit = function(){
    var data = {
        id:null,
        name:"",
        position:"",
        sort:"",
    };
    data.name     = $("#name").val()
    data.position = $("#position").val()
    data.sort     = $("#sort").val()
    data.id       = $("#dataId").val()
    if($("#name").val()==''){
        Feng.info("请输入分类名称")
        return;
    }
    if($("#cCode").val()==''){
        Feng.info("请选择所在位置")
        return;
    }
    if($("#account").val()=='' ){
        Feng.info("请输入排序")
        return;
    }
    $.ajax({
        url: Feng.ctxPath + "/benefits/addBenefits" ,
        type: "POST",
        data: JSON.stringify(data),
        contentType: "application/json",
        success: function (response) {
            Feng.success("添加成功");
        },
        error: function (xhr, status, error) {
            Feng.error("添加失败!" + error);
        }
    });
};
/**
 * 查询列表
 */
TQuestion.search = function () {
    var queryData = {};
    queryData['phone'] =     $("#phone").val();
    queryData['parentName'] = $("#parentName").val();
    queryData['state'] = $("#state").val();
    TQuestion.table.refresh({query: queryData});
};
/**
 * 重置搜索
 */
TQuestion.resetSearch = function () {
    $("#phone").val('');
    $("#parentName").val('');
    $("#state").val('');
    TQuestion.search();
};
$(function () {
    var defaultColunms = TQuestion.initColumn();
    var table = new BSTable(TQuestion.id, "/bodySideAppointment/listAll", defaultColunms);
    table.setPaginationType("client");
    TQuestion.table = table.init();
});
cloud-server-management/src/main/webapp/static/modular/system/bodySideAppointment/tBodySideAppointment_edit.js
New file
@@ -0,0 +1,350 @@
/**
 * 管理初始化
 */
var TQuestion = {
    id: "TQuestionTable",    //表格id
    seItem: null,        //选中的条目
    table: null,
    layerIndex: -1
};
/**
 * 初始化表格的列
 */
TQuestion.initColumn = function () {
    return [
        {field: 'selectItem', checkbox: true},
        {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'},
        {title: '视频类型', field: 'type', visible: true, align: 'center', valign: 'middle',
            formatter:function (data) {
                return {1:"课后练习",2:"运动教学视频",3:"器材教学视频"}[data]
            }
        },
        {title: '视频封面', field: 'coverDrawing', visible: true, align: 'center', valign: 'middle',
            formatter: function (value, row, index) {
                value = typeof value == "undefined" || value == '' ? '/static/img/NoPIC.png' : value;
                return '<img src="' + value + '" style="height: 100px;"/>'
            }
        },
        {title: '视频名称', field: 'name', visible: true, align: 'center', valign: 'middle'},
        {title: '视频简介', field: 'introduce', visible: true, align: 'center', valign: 'middle'},
        {title: '可获积分', field: 'integral', visible: true, align: 'center', valign: 'middle'},
        {title: '添加时间', field: 'insertTime', visible: true, align: 'center', valign: 'middle'},
        {title: '状态', field: 'state', visible: true, align: 'center', valign: 'middle',
            formatter:function (data) {
                return {1:"上架中",2:"下架中",3:"已失效"}[data]
            }}
    ];
};
/**
 * 检查是否选中
 */
TQuestion.check = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length == 0){
        Feng.info("请先选中表格中的某一记录!");
        return false;
    }else{
        TQuestion.seItem = selected[0];
        return true;
    }
};
TQuestion.dataCount = 0;
TQuestion.phone = "";
TQuestion.phoneId = "";
/**
 * 点击添加
 */
TQuestion.openAdd = function () {
    var index = layer.open({
        type: 2,
        title: '添加分类',
        area: ['100%', '100%'], //宽高
        fix: false, //不固定
        maxmin: true,
        content: Feng.ctxPath + '/benefits/add'
    });
    this.layerIndex = index;
};
/**
 * 点击编辑
 */
TQuestion.openChange = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一个问题进行编辑!");
    }else {
        if (this.check()){
            var selected = $('#' + this.id).bootstrapTable('getSelections');
            var index = layer.open({
                type: 2,
                title: '编辑分类',
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/benefits/update/' + TQuestion.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 上架
 */
TQuestion.onShelf = function () {
if (this.check()){
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    const data1 = {
        ids:[],
        state:null
    };
    selected.forEach(function(obj) {
        var id = obj.id;
        data1.ids.push(id);
    });
    data1.state = 1;
    $.ajax({
        url: Feng.ctxPath + "/benefits/changeCourseState",
        type: "POST",
        contentType: "application/json", // 设置请求头的 Content-Type
        data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
        success: function(response) {
            Feng.success("上架成功!");
            TQuestion.search();
        },
        error: function(xhr, status, error) {
            var errorMessage = xhr.responseText ? xhr.responseText : "上架失败!";
            Feng.error("您的网络异常!");
        }
    });
}
};
/**
 * 下架
 */
TQuestion.offShelf = function () {
    if (this.check()){
        var selected = $('#' + this.id).bootstrapTable('getSelections');
        const data1 = {
            ids:[],
            state:null
        };
        selected.forEach(function(obj) {
            var id = obj.id;
            data1.ids.push(id);
        });
        data1.state = 2;
        $.ajax({
            url: Feng.ctxPath + "/benefits/changeCourseState",
            type: "POST",
            contentType: "application/json", // 设置请求头的 Content-Type
            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
            success: function(response) {
                Feng.success("下架成功!");
                TQuestion.search();
            },
            error: function(xhr, status, error) {
                var errorMessage = xhr.responseText ? xhr.responseText : "下架失败!";
                Feng.error("您的网络异常!");
            }
        });
    }
};
/**
 * 查看详情
 */
TQuestion.getInfo = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一条进行查看!");
    }else {
        if (this.check()){
            var selected = $('#' + this.id).bootstrapTable('getSelections');
            var index = layer.open({
                type: 2,
                title: '详情',
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/benefits/info/' + TQuestion.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 查看视频详情
 */
TQuestion.getInfo = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一条进行查看!");
    }else {
        if (this.check()){
            var selected = $('#' + this.id).bootstrapTable('getSelections');
            var index = layer.open({
                type: 2,
                title: '详情',
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/benefits/getBenefitsVideos/' + TQuestion.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 删除
 */
TQuestion.delete = function () {
    if (this.check()){
        var selected = $('#' + this.id).bootstrapTable('getSelections');
        const data1 = {
            ids:[],
            state:null
        };
        selected.forEach(function(obj) {
            var id = obj.id;
            data1.ids.push(id);
        });
        data1.state = 3;
        $.ajax({
            url: Feng.ctxPath + "/benefits/changeCourseState",
            type: "POST",
            contentType: "application/json", // 设置请求头的 Content-Type
            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
            success: function(response) {
                Feng.success("删除成功!");
                TQuestion.search();
            },
            error: function(xhr, status, error) {
                var errorMessage = xhr.responseText ? xhr.responseText : "删除失败!";
                Feng.error(errorMessage);
            }
        });
    }
};
TQuestion.addSubmit = function(){
    var data = {
        id:null,
        name:"",
        position:"",
        sort:"",
    };
    data.name       = $("#name").val()
    data.position           = $("#position").val()
    data.sort           = $("#sort").val()
    if($("#name").val()==''){
        Feng.info("请输入分类名称")
        return;
    }
    if($("#cCode").val()==''){
        Feng.info("请选择所在位置")
        return;
    }
    if($("#account").val()=='' ){
        Feng.info("请输入排序")
        return;
    }
    $.ajax({
        url: Feng.ctxPath + "/benefits/addBenefits" ,
        type: "POST",
        data: JSON.stringify(data),
        contentType: "application/json",
        success: function (response) {
            Feng.success("添加成功");
        },
        error: function (xhr, status, error) {
            Feng.error("添加失败!" + error);
        }
    });
    TSite.search();
};
TQuestion.updateSubmit = function(){
    var data = {
        id:null,
        name:"",
        position:"",
        sort:"",
    };
    data.name     = $("#name").val()
    data.position = $("#position").val()
    data.sort     = $("#sort").val()
    data.id       = $("#dataId").val()
    if($("#name").val()==''){
        Feng.info("请输入分类名称")
        return;
    }
    if($("#cCode").val()==''){
        Feng.info("请选择所在位置")
        return;
    }
    if($("#account").val()=='' ){
        Feng.info("请输入排序")
        return;
    }
    $.ajax({
        url: Feng.ctxPath + "/benefits/addBenefits" ,
        type: "POST",
        data: JSON.stringify(data),
        contentType: "application/json",
        success: function (response) {
            Feng.success("添加成功");
        },
        error: function (xhr, status, error) {
            Feng.error("添加失败!" + error);
        }
    });
    TSite.search();
};
/**
 * 查询列表
 */
TQuestion.search = function () {
    var queryData = {};
    queryData['name'] = $("#name").val();
    queryData['type'] = $("#position").val();
    queryData['state'] = $("#state").val();
    TQuestion.table.refresh({query: queryData});
};
/**
 * 重置搜索
 */
TQuestion.resetSearch = function () {
    $("#name").val('');
    $("#state").val('');
    $("#position").val('');
    TQuestion.search();
};
$(function () {
    var val = $("#id").val();
    var defaultColunms = TQuestion.initColumn();
    var table = new BSTable(TQuestion.id, "/benefits/listBenefitsVideos/"+val, defaultColunms);
    table.setPaginationType("client");
    TQuestion.table = table.init();
});
cloud-server-management/src/main/webapp/static/modular/system/coursePackageType/coursePackageType.js
New file
@@ -0,0 +1,318 @@
/**
 * 跨城站点管理管理初始化
 */
var TSite = {
    id: "TSiteTable",    //表格id
    seItem: null,        //选中的条目
    table: null,
    layerIndex: -1
};
/**
 * 初始化表格的列
 */
TSite.initColumn = function () {
    return [
        {field: 'selectItem', radio: true},
        {title: '主键ID', field: 'id', visible: false, align: 'center', valign: 'middle'},
        {title: '类型名称', field: 'name', visible: true, align: 'center', valign: 'middle'
        },
    ];
};
/**
 * 检查是否选中
 */
TSite.check = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length == 0){
        Feng.info("请先选中表格中的某一记录!");
        return false;
    }else{
        TSite.seItem = selected[0];
        return true;
    }
};
TSite.oneChange = function (e) {
    var oneId=$(e).val();
    var ajax = new $ax(Feng.ctxPath + "/tCity/onChange", function(data){
        if(data!=null){
            if(language==1){
                var content='<option value="">选择市</option>';
            }else if(language==2){
                var content='<option value="">Choose your franchisee</option>';
            }else {
                var content='<option value="">Pilih franchisee Anda</option>';
            }
            $.each(data, function(k,v) {
                content += "<option value='"+v.code+"'>"+v.name+"</option>";
            });
            $("#cCode").empty().append(content);
        }
    });
    ajax.set("oneId",oneId);
    ajax.start();
}
TSite.del = function () {
    if (this.check()) {
        let id = this.seItem.id;
        let name = TSite.seItem.name
        var operation = function(){
            var data1={
                id:id,
                name:name,
                state:null
            }
            $.ajax({
                url: Feng.ctxPath + "/coursePackageType/delete",
                type: "POST",
                contentType: "application/json", // 设置请求头的 Content-Type
                data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
                success: function(response) {
                    window.location.reload();
                    window.parent.layer.closeAll();
                    if (response === 200) {
                        Feng.success("删除成功!");
                        window.location.reload();
                        window.parent.layer.closeAll();
                    }else{
                        Feng.error("当前课包类型正在被使用,无法删除!");
                    }
                },
                error: function(xhr, status, error) {
                    var errorMessage = xhr.responseText ? xhr.responseText : "删除失败!";
                    Feng.error(errorMessage);
                }
            });
            layer.closeAll();
        }
        Feng.confirm("确认删除该信息?", operation);
    }
};
/**
 * 点击添加跨城站点管理
 */
TSite.openAddTSite = function () {
    var index = layer.load(1,{
        type: 1
        , title: '添加场地类型'
        , area: ['50%', '50%']
        , offset: 'auto' //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset
        , id: 'layerDemo' //防止重复弹出cge
        , content: '<div class="form-horizontal">' +
            '                    <div class="col-sm-11" >' +
            '                    <div class="col-sm-11">' +
            '                        <div class="form-group">\n' +
            '                            <label class="col-sm-3 control-label">类型名称:</label>\n' +
            '                         <div class="col-sm-9">\n' +
            '                                  <input class="form-control" type="text" id="name"> '+
            '                            </div>\n' +
            '                        </div>\n' +
            '                       </div>' +
            '                   </div>' +
            '</div>'
        , btn: ['关闭', '保存']
        , btnAlign: 'c' //按钮居中
        , shade:  0.5 //不显示遮罩
        ,load:1
        , yes: function () {
            layer.closeAll();
        },
        btn2:function () {
            let name = $("#name").val()
            if(name==''){
                Feng.info("请输入类型名称")
                return false;
            }
            var ajax = new $ax(Feng.ctxPath + "/coursePackageType/add", function (data) {
                if (data === 200) {
                    Feng.success("操作成功!");
                    window.location.reload();
                    window.parent.layer.closeAll();
                }else{
                    Feng.error("当前课包类型已存在!");
                }
            }, function (data) {
                Feng.error("操作失败!")
            });
            ajax.set("name", name);
            ajax.start();
            layer.closeAll();
        }
    });
    this.layerIndex = index;
};
/**
 * 打开查看跨城站点管理详情
 */
TSite.openTSiteDetail = function () {
    if (this.check()) {
        let id = TSite.seItem.id
        let name = TSite.seItem.name
        var index = layer.load(1,{
            type: 1
            , title: '编辑场地类型'
            , area: ['50%', '50%']
            , offset: 'auto' //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset
            , id: 'layerDemo' //防止重复弹出cge
            , content: '<div class="form-horizontal">' +
                '                    <div class="col-sm-11" >' +
                '                    <div class="col-sm-11">' +
                '                        <div class="form-group">\n' +
                '                            <label class="col-sm-3 control-label">类型名称:</label>\n' +
                '                         <div class="col-sm-9">\n' +
                '                                  <input class="form-control" type="text" id="name" value='+name+'> '+
                '                            </div>\n' +
                '                        </div>\n' +
                '                       </div>' +
                '                   </div>' +
                '</div>'
            , btn: ['关闭', '保存']
            , btnAlign: 'c' //按钮居中
            , shade:  0.5 //不显示遮罩
            ,load:1
            , yes: function () {
                layer.closeAll();
            },
            btn2:function () {
                let name = $("#name").val()
                if(name==''){
                    Feng.info("请输入类型名称")
                    return false;
                }
                var data1={
                    id:id,
                    name:name,
                    state:null
                }
                $.ajax({
                    url: Feng.ctxPath + "/coursePackageType/update",
                    type: "POST",
                    contentType: "application/json", // 设置请求头的 Content-Type
                    data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
                    success: function(response) {
                        window.location.reload();
                        window.parent.layer.closeAll();
                        if (response === 200) {
                            Feng.success("修改成功!");
                            window.location.reload();
                            window.parent.layer.closeAll();
                        }else{
                            Feng.error("当前课包类型已存在!");
                        }
                    },
                    error: function(xhr, status, error) {
                        var errorMessage = xhr.responseText ? xhr.responseText : "修改失败!";
                        Feng.error(errorMessage);
                    }
                });
                layer.closeAll();
            }
        });
        this.layerIndex = index;
    }
};
/**
 * 操作跨城站点管理
 */
TSite.opt = function (type) {
    if (this.check()) {
        var name = TSite.seItem.name;
        if (name == "" || name == null || name == undefined) {
            name = "该站点";
        } else {
            name = "【" + name + "】";
        }
        var str = "";
        var text = "请谨慎操作!";
        var title = "请谨慎操作!";
        if (1 == type){
            str = "删除";
            title = "您是否确认删除"+name+"?";
            text = "请谨慎操作,删除后数据无法恢复!";
        } else if (2 == type){
            str = "冻结";
            title = "您是否确认冻结"+name+"?";
        } else if (3 == type){
            str = "解冻";
            title = "您是否确认解冻"+name+"?";
        }
        if (1 == type){
            if (TSite.seItem.lineNum != "" && TSite.seItem.lineNum != null && TSite.seItem.lineNum > 0) {
                swal("删除失败", "该站点还有关联线路!", "warning");
                return;
            }
        }
        if(2 == type){
            if (TSite.seItem.state != 1) {
                swal("冻结失败", "【正常】状态下才能执行此操作!", "warning");
                return;
            }
        }
        if (3 == type){
            if (TSite.seItem.state != 2){
                swal("解冻失败", "【冻结】状态下才能执行此操作!", "warning");
                return;
            }
        }
        swal({
            title: title,
            text: text,
            type: "warning",
            showCancelButton: true,
            confirmButtonColor: "#DD6B55",
            confirmButtonText: str,
            closeOnConfirm: true
        }, function () {
            var ajax = new $ax(Feng.ctxPath + "/tSite/opt", function (data) {
                swal(str+"成功", "您已经"+str+"了" + name + "。", "success");
                TSite.table.refresh();
            }, function (data) {
                swal(str+"失败", data.responseJSON.message + "!", "warning");
            });
            ajax.set("tSiteId",TSite.seItem.id);
            ajax.set("optType", type);
            ajax.start();
        });
    }
};
/**
 * 查询跨城站点管理列表
 */
TSite.search = function () {
    var queryData = {};
    queryData['insertTime'] = $("#insertTime").val();
    queryData['name'] = $("#name").val();
    queryData['insertUser'] = $("#insertUser").val();
    queryData['city'] = $("#city").val();
    queryData['state'] = $("#state").val();
    TSite.table.refresh({query: queryData});
};
TSite.resetSearch = function () {
    $("#insertTime").val("");
    $("#name").val("");
    $("#insertUser").val("");
    $("#city").val("");
    $("#state").val("");
    TSite.search();
};
$(function () {
    var defaultColunms = TSite.initColumn();
    var table = new BSTable(TSite.id, "/coursePackageType/list", defaultColunms);
    table.setPaginationType("client");
    TSite.table = table.init();
});
cloud-server-management/src/main/webapp/static/modular/system/tCoach/tCoach.js
New file
@@ -0,0 +1,527 @@
/**
 * 跨城站点管理管理初始化
 */
var TSite = {
    id: "TSiteTable",    //表格id
    seItem: null,        //选中的条目
    table: null,
    layerIndex: -1,
    picture:"",
    fileUrl:"",
    img:"",
    plan:"",
    goodsPicArray:[],
    validateFields: {
    }
};
var objectType =$("#objectType").val()
/**
 * 初始化表格的列
 */
TSite.initColumn = function () {
    return [
        {field: 'selectItem', checkbox: true},
        {title: '主键ID', field: 'id', visible: false, align: 'center', valign: 'middle'},
        {title: '所在省', field: 'province', visible: objectType==1?true:false, align: 'center', valign: 'middle',width:'20%',
        },
        {title: '所在市', field: 'city', visible: objectType==1?true:false, align: 'center', valign: 'middle',
        },
        {title: '所属账号', field: 'nameAndPhone', visible: true, align: 'center', valign: 'middle'},
        {title: '教练类型', field: 'coachTypeName', visible: true, align: 'center', valign: 'middle',
        },
        {title: '姓名', field: 'name', visible: true, align: 'center', valign: 'middle',
        },
        {title: '性别', field: 'gender', visible: true, align: 'center', valign: 'middle',
            formatter:function (data) {
                return {1:"男",2:"女"}[data]
            }
        },
        {title: '生日', field: 'birthday', visible: true, align: 'center', valign: 'middle',
        },
        {title: '联系电话', field: 'phone', visible: true, align: 'center', valign: 'middle',
        },
        {title: '状态', field: 'state', visible: true, align: 'center', valign: 'middle',
            formatter:function (data) {
            return {1:"正常",2:"冻结"}[data]
            }
        }
    ];
};
/**
 * 检查是否选中
 */
TSite.check = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length == 0){
        Feng.info("请先选中表格中的某一记录!");
        return false;
    }else{
        TSite.seItem = selected[0];
        return true;
    }
};
/**
 * 上架
 */
TSite.onShelf = function () {
    if (this.check()){
        var selected = $('#' + this.id).bootstrapTable('getSelections');
        const data1 = {
            ids:[],
            type:null
        };
        selected.forEach(function(obj) {
            var id = obj.id;
            data1.ids.push(id);
        });
        data1.state = 1;
        $.ajax({
            url: Feng.ctxPath + "/tCoach/changeState",
            type: "POST",
            contentType: "application/json", // 设置请求头的 Content-Type
            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
            success: function(response) {
                Feng.success("上架成功!");
                TSite.search();
            },
            error: function(xhr, status, error) {
                var errorMessage = xhr.responseText ? xhr.responseText : "上架失败!";
                Feng.error("您的网络异常!");
            }
        });
    }
};
/**
 * 下架
 */
TSite.offShelf = function () {
    if (this.check()){
        var selected = $('#' + this.id).bootstrapTable('getSelections');
        const data1 = {
            ids:[],
            state:null
        };
        selected.forEach(function(obj) {
            var id = obj.id;
            data1.ids.push(id);
        });
        data1.state = 2;
        $.ajax({
            url: Feng.ctxPath + "/tCoach/changeState",
            type: "POST",
            contentType: "application/json", // 设置请求头的 Content-Type
            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
            success: function(response) {
                Feng.success("下架成功!");
                TSite.search();
            },
            error: function(xhr, status, error) {
                var errorMessage = xhr.responseText ? xhr.responseText : "下架失败!";
                Feng.error("您的网络异常!");
            }
        });
    }
};
TSite.uploadFile = function(){
    var elementById = document.getElementById("uploadFile");
    var file = elementById.files[0];
    var formData = new FormData();
    formData.append('file',file);
        $.ajax({
            url: Feng.ctxPath + "/tCouponManage/uploadPic" ,
            type: "POST",
            data: formData,
            contentType: false, // 设置为false,让浏览器自动识别并设置请求头
            processData: false, // 设置为false,不处理发送的数据(因为FormData对象已经包含了文件数据)
            success: function (response) {
                TSite.fileUrl = response;
                console.log(TSite.fileUrl);
                Feng.success("文件上传成功");
            },
            error: function (xhr, status, error) {
                Feng.error("文件上传失败!" + error);
            }
        });
};
TSite.getChange = function(e){
    var oneId=$(e).val();
    var selectedValue = e.value;
    var citySelect = document.getElementById("cCode");
    var ajax = new $ax(Feng.ctxPath + "/tSite/getChange", function(data){
        if(data!=null){
            var content='<option value="">选择市</option>';
            $.each(data, function(k,v) {
                content += "<option value='"+v.name+"'>"+v.name+"</option>";
            });
            $("#cCode").empty().append(content);
        }
    });
    if (selectedValue === ""){
        citySelect.innerHTML = '<option value="">请先选择省</option>';
    }
    ajax.set("province",oneId);
    ajax.start();
};
// 场地管理首页 选择对应的省市
// 传1是场地管理首页 传2是场地管理添加页面
TSite.oneChange = function (e) {
    var province = $('#pCode option:selected').text();
    // var province = $('#pCode option:selected').text();
    // var val = $('#pCode option:selected').val();
    var citySelect = document.getElementById("cCode");
    var ajax = new $ax(Feng.ctxPath + "/tCoach/getCity", function(data){
        if(data!=null){
                var content='<option value="">选择市</option>';
            $.each(data, function(k,v) {
                content += "<option value='"+v.cityCode+"'>"+v.city+"</option>";
            });
            $("#cCode").empty().append(content);
        }
    });
    if (province === ""){
        citySelect.innerHTML = '<option value="">请先选择省</option>';
    }
    ajax.set("province",province);
    ajax.start();
};
TSite.oneChangeNext = function (e) {
    var startTime = document.getElementById('start-time');
    var endTime = document.getElementById('end-time');
    var oneId=$(e).val();
    var citySelect = document.getElementById("account");
    var storeSelect = document.getElementById("store");
    var ajax = new $ax(Feng.ctxPath + "/tSite/accountChangeNext", function(data){
        if(data!=null){
            var content='<option value="">选择账号</option>';
            $.each(data, function(k,v) {
                content += "<option style='width: 300px' value='"+v.id+"'>"+v.name+"</option>";
            });
            $("#account").empty().append(content);
        }
    });
    if (oneId === ""){
        citySelect.innerHTML = '<option style="width: 300px" value="">请先选择省/市</option>';
        storeSelect.innerHTML = '<option style="width: 300px" value="">请先选择省/市</option>';
        startTime.disabled = true;
        endTime.disabled = true;
    }
    ajax.set("oneId",oneId);
    ajax.start();
    var ajax1 = new $ax(Feng.ctxPath + "/tSite/storeChangeNext", function(data){
        if(data!=null && data.length !== 0){
            var content='<option value="">选择门店</option>';
            $.each(data, function(k,v) {
                content += "<option style='width: 300px' value='"+v.id+"'>"+v.name+"</option>";
            });
            $("#store").empty().append(content);
        }else {
            storeSelect.innerHTML = '<option value="">当前所选市没有门店</option>';
        }
    });
    ajax1.set("oneId",oneId);
    ajax1.start();
};
/**
 * 跳转添加场地页面
 */
TSite.openAddTSite = function () {
    var index = layer.open({
        type: 2,
        title: "添加场地",
        area: ['100%', '100%'], //宽高
        fix: false, //不固定
        maxmin: true,
        content: Feng.ctxPath + '/tCoach/addCoach'
    });
    this.layerIndex = index;
};
/**
 * 跳转锁定场地页面
 */
TSite.lock = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一个场地进行锁定!");
    }else {
        if (this.check()) {
            var index = layer.open({
                type: 2,
                title: "锁定场地",
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/tSite/lockSite/' + TSite.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 打开场地管理查看详情
 */
TSite.openInfo = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一个问题进行编辑!");
    }else {
        if (this.check()) {
            var index = layer.open({
                type: 2,
                title: "查看详情",
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/tCoach/infoCoach/' + TSite.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 打开场地管理编辑
 */
TSite.openEditTSite = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一个教练进行编辑!");
    }else {
    if (this.check()) {
        var index = layer.open({
            type: 2,
            title: "编辑教练",
            area: ['100%', '100%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/tCoach/updateCoach/' + TSite.seItem.id
        });
        this.layerIndex = index;
    }
    }
};
/**
 * 关闭此对话框
 */
TSite.close = function() {
    parent.layer.close(window.parent.TSite.layerIndex);
}
var sh = ""; // 门店经营开始时间:小时
var sm = "";// 门店经营开始时间:分钟
var eh = "";// 门店经营结束时间:小时
var em = "";// 门店经营结束时间:分钟
TSite.addSubmit = function(){
    var data = {
        province:"",
        city:"",
        cityManagerId:"",
        storeId:"",
        siteTypeId:null,
        appointmentStartTime:"",
        appointmentEndTime:"",
        cashPrice:null,
        playPaiCoin:null,
        insuranceEndTime:"",
        name:"",
        insuranceImg:"",
        managementPlan:""
    };
    data.province            = $("#pCode").val()
    data.city                = $("#cCode").val()
    data.cityManagerId       = $("#account").val()
    data.storeId             = $("#store").val()
    data.siteTypeId          = $("#siteTypeId").val()
    data.appointmentStartTime= $("#start-time").val()
    data.appointmentEndTime  = $("#end-time").val()
    data.cashPrice           = $("#cashPrice").val()
    data.playPaiCoin         = $("#playPaiCoin").val()
    data.insuranceEndTime    = $("#insuranceEndTime").val()
    data.name                = $("#name").val()
    data.insuranceImg        = $("#img").val()
    data.managementPlan      = $('#courseVideo').val()
    var sh =data.appointmentStartTime.split(':')[0];
    var sm =data.appointmentStartTime.split(':')[1];
    var eh =data.appointmentEndTime.split(':')[0];
    var em =data.appointmentEndTime.split(':')[1];
    if($("#pCode").val()==''){
        Feng.info("请选择省")
        return;
    }
    if($("#cCode").val()==''){
        Feng.info("请选择市")
        return;
    }
    if($("#account").val()=='' ){
        Feng.info("请选择账号")
        return;
    }
    if($("#store").val()=='' ){
        Feng.info("请选择门店")
        return;
    }
    if($("#siteTypeId").val()=='' ){
        Feng.info("请选择场地类型")
        return;
    }
    if($("#name").val()==''){
        Feng.info("请输入场地名称")
        return;
    }
    if($("#start-time").val()=='' ){
        Feng.info("请输入可预约时间段 开始时间")
        return;
    }
    if($("#end-time").val()==''){
        Feng.info("请输入可预约时间段 结束时间")
        return;
    }
    if($("#cashPrice").val()==''){
        Feng.info("请输入现金价格")
        return;
    }
    if($("#playPaiCoin").val()==''){
        Feng.info("请输入玩湃币价格")
        return;
    }
    if($("#insuranceEndTime").val()==''){
        Feng.info("请输入场地责任险有效期")
        return;
    }
    if($("#img").val()==''){
        Feng.info("请上传场地责任有效期图片")
        return;
    }
    if($('#courseVideo').val()==''){
        Feng.info("请上传消防及应急管理方案")
        return;
    }
    var sTime = document.getElementById("start-time"); //获取输入的开始时间
    var eTime  = document.getElementById("end-time"); // 获取输入的结束时间
    var rStime = ""; //门店的经营开始时间
    var rEtime = ""; //门店的经营结束时间
    var selectedText = $('#store option:selected').text();
    $.ajax({
        url: Feng.ctxPath + "/tSite/getTime/" + selectedText,
        type: "GET",
        contentType: "application/json", // 设置请求头的 Content-Type
        success: function (response) {
            rStime = response.startTime;
            sh = rStime.split(':')[0];// 门店经营开始时间:小时
            sm = rStime.split(':')[1];// 门店经营开始时间:分钟
            rEtime = response.endTime;
            eh = rEtime.split(':')[0];// 门店经营结束时间:小时
            em = rEtime.split(':')[1];// 门店经营结束时间:分钟
            var start = sTime.value;
            var startHour = start.split(':')[0];  // 输入的可预约开始时间:小时
            var startMinute = start.split(':')[1];// 输入的可预约开始时间:分钟
            if (Number(sh)>Number(startHour)){
                Feng.error("预约的开始时间不应小于营业开始时间!")
                return false;
            }else if(Number(sh) === Number(startHour) ){
                if (Number(sm)>Number(startMinute)){
                    Feng.error("预约的开始时间不应大于营业开始时间!")
                    return false;
                }
            }else if (Number(eh)<Number(startHour)){
                Feng.error("预约的开始时间不应大于营业结束时间!")
                return false;
            }else if(Number(eh)===Number(startHour)){
                Feng.error("预约的开始时间不应大于等于营业结束时间!")
                return false;
            }
            var end = eTime.value;
            var endHour = end.split(':')[0];  // 输入的可预约结束时间:小时
            var endMinute = end.split(':')[1];// 输入的可预约结束时间:分钟
            if (Number(eh)<Number(endHour)){
                Feng.error("预约的结束时间不应大于营业结束时间!")
                return ;
            }else if(Number(eh) === Number(endHour) ){
                if (Number(em)<Number(endMinute)){
                    Feng.error("预约的开始时间不应大于开始营业时间!")
                    return ;
                }
            }else if(Number(sh)>Number(endHour)){
                Feng.error("预约的结束时间不应小于营业开始时间!")
                return ;
            }
            if (Number(endHour)===Number(sh)){
                if(Number(endMinute) < Number(sm)){
                    Feng.error("预约结束时间不应小于营业开始时间");
                    return;
                }
            }
            if (Number(startHour)===Number(endHour) && Number(startMinute)===Number(endMinute)){
                Feng.error("至少预约半个小时");
                return;
            }
            $.ajax({
                url: Feng.ctxPath + "/tSite/addSite" ,
                type: "POST",
                data: JSON.stringify(data),
                contentType: "application/json",
                success: function (response) {
                    Feng.success("添加成功");
                    TSite.search();
                },
                error: function (xhr, status, error) {
                    Feng.error("添加失败!" + error);
                }
            });
        },
        error: function (xhr, status, error) {
            var errorMessage = xhr.responseText ? xhr.responseText : "上架失败!";
            Feng.error("您的网络异常!");
            return false;
        }
    });
};
TSite.search = function () {
    var queryData = {};
    if ($("#pCode").val() === ""){
        queryData['province'] = ""
    }else{
        queryData['province'] = $('#pCode option:selected').text();
    }
    if ($("#cCode").val() === ""){
        queryData['city'] = ""
    }else {
        queryData['city'] = $('#cCode option:selected').text();
    }
    queryData['name'] = $("#name").val();
    queryData['phone'] = $("#phone").val();
    TSite.table.refresh({query: queryData});
};
TSite.resetSearch = function () {
    $("#pCode").val("");
    $("#cCode").val("");
    $("#name").val("");
    $("#phone").val("");
    TSite.search();
};
function UploadFileFn(){
    $('#upFile').click();
}
$(function () {
    var defaultColunms = TSite.initColumn();
    var table = new BSTable(TSite.id, "/tCoach/list", defaultColunms);
    table.setPaginationType("client");
    TSite.table = table.init();
});
cloud-server-management/src/main/webapp/static/modular/system/tCoach/tCoach_add.js
New file
@@ -0,0 +1,471 @@
/**
 * 跨城站点管理管理初始化
 */
var TSite = {
    id: "TSiteTable",    //表格id
    seItem: null,        //选中的条目
    table: null,
    layerIndex: -1,
    picture:"",
    fileUrl:"",
    img:"",
    plan:"",
    goodsPicArray:[],
    validateFields: {
    }
};
var objectType =$("#objectType").val()
/**
 * 初始化表格的列
 */
TSite.initColumn = function () {
    return [
        {field: 'selectItem', checkbox: true},
        {title: '主键ID', field: 'id', visible: false, align: 'center', valign: 'middle'},
        {title: '所在省', field: 'province', visible: objectType==1?true:false, align: 'center', valign: 'middle',width:'20%',
        },
        {title: '所在市', field: 'city', visible: objectType==1?true:false, align: 'center', valign: 'middle',
        },
        {title: '所属账号', field: 'nameAndPhone', visible: true, align: 'center', valign: 'middle'},
        {title: '教练类型', field: 'coachTypeName', visible: true, align: 'center', valign: 'middle',
        },
        {title: '姓名', field: 'name', visible: true, align: 'center', valign: 'middle',
        },
        {title: '性别', field: 'gender', visible: true, align: 'center', valign: 'middle',
            formatter:function (data) {
                return {1:"男",2:"女"}[data]
            }
        },
        {title: '生日', field: 'birthday', visible: true, align: 'center', valign: 'middle',
        },
        {title: '联系电话', field: 'phone', visible: true, align: 'center', valign: 'middle',
        },
        {title: '状态', field: 'state', visible: true, align: 'center', valign: 'middle',
            formatter:function (data) {
            return {1:"正常",2:"冻结"}[data]
            }
        }
    ];
};
/**
 * 检查是否选中
 */
TSite.check = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length == 0){
        Feng.info("请先选中表格中的某一记录!");
        return false;
    }else{
        TSite.seItem = selected[0];
        return true;
    }
};
/**
 * 上架
 */
TSite.onShelf = function () {
    if (this.check()){
        var selected = $('#' + this.id).bootstrapTable('getSelections');
        const data1 = {
            siteIds:[],
            type:null
        };
        selected.forEach(function(obj) {
            var id = obj.id;
            data1.siteIds.push(id);
        });
        data1.type = 1;
        $.ajax({
            url: Feng.ctxPath + "/tSite/changeState",
            type: "POST",
            contentType: "application/json", // 设置请求头的 Content-Type
            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
            success: function(response) {
                Feng.success("上架成功!");
                TSite.search();
            },
            error: function(xhr, status, error) {
                var errorMessage = xhr.responseText ? xhr.responseText : "上架失败!";
                Feng.error("您的网络异常!");
            }
        });
    }
};
/**
 * 下架
 */
TSite.offShelf = function () {
    if (this.check()){
        var selected = $('#' + this.id).bootstrapTable('getSelections');
        const data1 = {
            siteIds:[],
            type:null
        };
        selected.forEach(function(obj) {
            var id = obj.id;
            data1.siteIds.push(id);
        });
        data1.type = 2;
        $.ajax({
            url: Feng.ctxPath + "/tSite/changeState",
            type: "POST",
            contentType: "application/json", // 设置请求头的 Content-Type
            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
            success: function(response) {
                Feng.success("下架成功!");
                TSite.search();
            },
            error: function(xhr, status, error) {
                var errorMessage = xhr.responseText ? xhr.responseText : "下架失败!";
                Feng.error("您的网络异常!");
            }
        });
    }
};
TSite.uploadFile = function(){
    var elementById = document.getElementById("uploadFile");
    var file = elementById.files[0];
    var formData = new FormData();
    formData.append('file',file);
        $.ajax({
            url: Feng.ctxPath + "/tCouponManage/uploadPic" ,
            type: "POST",
            data: formData,
            contentType: false, // 设置为false,让浏览器自动识别并设置请求头
            processData: false, // 设置为false,不处理发送的数据(因为FormData对象已经包含了文件数据)
            success: function (response) {
                TSite.fileUrl = response;
                console.log(TSite.fileUrl);
                Feng.success("文件上传成功");
            },
            error: function (xhr, status, error) {
                Feng.error("文件上传失败!" + error);
            }
        });
};
TSite.getChange = function(e){
    var oneId=$(e).val();
    var selectedValue = e.value;
    var citySelect = document.getElementById("cCode");
    var ajax = new $ax(Feng.ctxPath + "/tSite/getChange", function(data){
        if(data!=null){
            var content='<option value="">选择市</option>';
            $.each(data, function(k,v) {
                content += "<option value='"+v.name+"'>"+v.name+"</option>";
            });
            $("#cCode").empty().append(content);
        }
    });
    if (selectedValue === ""){
        citySelect.innerHTML = '<option value="">请先选择省</option>';
    }
    ajax.set("province",oneId);
    ajax.start();
};
// 场地管理首页 选择对应的省市
// 传1是场地管理首页 传2是场地管理添加页面
TSite.oneChange = function () {
    var province = $('#pCode option:selected').text();
    var citySelect = document.getElementById("cCode");
    var ajax = new $ax(Feng.ctxPath + "/tSite/getCity", function(data){
        if(data!=null){
            var content='<option value="">选择市</option>';
            $.each(data, function(k,v) {
                content += "<option value='"+v.cityCode+"'>"+v.city+"</option>";
            });
            $("#cCode").empty().append(content);
        }
    });
    if (province === ""){
        citySelect.innerHTML = '<option value="">请先选择省</option>';
        $("#cCode").innerHTML = '<option value="">请先选择省/市</option>';
    }
    ajax.set("province",province);
    ajax.start();
};
TSite.oneChangeNext = function (e) {
    var oneId=$(e).val();
    var city = $('#cCode option:selected').text();
    var ajax = new $ax(Feng.ctxPath + "/tSite/accountChangeNext", function(data){
        if(data!=null){
            var content='<option value="">选择账号</option>';
            $.each(data, function(k,v) {
                content += "<option style='width: 300px' value='"+v.id+"'>"+v.name+"</option>";
            });
            $("#account").empty().append(content);
        }
    });
    if (oneId === ""){
        $("#account").innerHTML = '<option style="width: 300px" value="">请先选择省/市</option>';
    }
    ajax.set("oneId",city);
    ajax.start();
    // var ajax1 = new $ax(Feng.ctxPath + "/tSite/storeChangeNext", function(data){
    //     if(data!=null && data.length !== 0){
    //         var content='<option value="">选择门店</option>';
    //         $.each(data, function(k,v) {
    //             content += "<option style='width: 300px' value='"+v.id+"'>"+v.name+"</option>";
    //         });
    //         $("#store").empty().append(content);
    //     }else {
    //         storeSelect.innerHTML = '<option value="">当前所选市没有门店</option>';
    //     }
    // });
    // ajax1.set("oneId",oneId);
    // ajax1.start();
};
/**
 * 跳转添加场地页面
 */
TSite.openAddTSite = function () {
    var index = layer.open({
        type: 2,
        title: "添加场地",
        area: ['100%', '100%'], //宽高
        fix: false, //不固定
        maxmin: true,
        content: Feng.ctxPath + '/tSite/add'
    });
    this.layerIndex = index;
};
/**
 * 跳转锁定场地页面
 */
TSite.lock = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一个场地进行锁定!");
    }else {
        if (this.check()) {
            var index = layer.open({
                type: 2,
                title: "锁定场地",
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/tSite/lockSite/' + TSite.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 打开场地管理查看详情
 */
TSite.openInfo = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一个问题进行编辑!");
    }else {
        if (this.check()) {
            var index = layer.open({
                type: 2,
                title: "查看详情",
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/tSite/openInfoTSite/' + TSite.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 打开场地管理编辑
 */
TSite.openEditTSite = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一个问题进行编辑!");
    }else {
    if (this.check()) {
        var index = layer.open({
            type: 2,
            title: "编辑场地",
            area: ['100%', '100%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/tSite/openEditTSite/' + TSite.seItem.id
        });
        this.layerIndex = index;
    }
    }
};
/**
 * 关闭此对话框
 */
TSite.close = function() {
    parent.layer.close(window.parent.TSite.layerIndex);
}
var sh = ""; // 门店经营开始时间:小时
var sm = "";// 门店经营开始时间:分钟
var eh = "";// 门店经营结束时间:小时
var em = "";// 门店经营结束时间:分钟
TSite.addSubmit = function(){
    var data = {
        id:null,
        province:"",
        provinceCode:"",
        city:"",
        cityCode:"",
        cityManagerId:null,
        coachTypeId:null,
        name:"",
        birthday:"",
        gender:null,
        phone:"",
        idcard:"",
        height:null,
        weight:null,
        graduateSchool:"",
        diploma:"",
        certificate:"",
        certificateImg:"",
    };
    if ($("#dataId").val()!=="undefined"){
        data.id = $("#dataId").val();
    }
    data.provinceCode       = $("#pCode").val()
    data.province           = $('#pCode option:selected').text();
    data.cityCode           = $("#cCode").val()
    data.city               = $('#cCode option:selected').text();
    data.cityManagerId      = $("#account").val()
    data.coachTypeId         = $("#coachTypeId").val()
    data.name               = $("#name").val()
    data.birthday           = $("#birthday").val()
    data.gender             = $("#gender").val()
    data.phone              = $("#phone").val()
    data.idcard             = $("#idcard").val()
    data.height             = $("#height").val()
    data.weight             = $("#weight").val()
    data.graduateSchool     = $('#graduateSchool').val()
    data.diploma            = $('#img').val()
    data.certificate        = $('#certificate').val()
    var temp = ""
    TSite.goodsPicArray.forEach(function (data) {
        temp = temp+","+data
    });
    data.certificateImg        = temp
    if($("#pCode").val()==''){
        Feng.info("请选择省")
        return;
    }
    if($("#cCode").val()==''){
        Feng.info("请选择市")
        return;
    }
    if($("#account").val()=='' ){
        Feng.info("请选择账号")
        return;
    }
    if($("#coachTypeId").val()=='' ){
        Feng.info("请选择教练类型")
        return;
    }
    if($("#name").val()=='' ){
        Feng.info("请输入教练名称")
        return;
    }
    if($("#birthday").val()==''){
        Feng.info("请输入教练生日")
        return;
    }
    if($("#gender").val()=='' ){
        Feng.info("请选择教练性别")
        return;
    }
    if($("#phone").val()==''){
        Feng.info("请输入教练电话")
        return;
    }
    if($("#idcard").val()==''){
        Feng.info("请输入教练身份证号")
        return;
    }
    if($("#height").val()==''){
        Feng.info("请输入教练身高")
        return;
    }
    if($("#weight").val()==''){
        Feng.info("请输入教练体重")
        return;
    }
    if($("#graduateSchool").val()==''){
        Feng.info("请输入毕业院校")
        return;
    }
    if($("#img").val()==''){
        Feng.info("请输入毕业证图片")
        return;
    }
    if($("#certificate").val()==''){
        Feng.info("请输入资格证书")
        return;
    }
    if(TSite.goodsPicArray.length === 0){
        Feng.info("请上传资格证书图片")
        return;
    }
    $.ajax({
        url: Feng.ctxPath + "/tCoach/add" ,
        type: "POST",
        data: JSON.stringify(data),
        contentType: "application/json",
        success: function (response) {
            Feng.success("添加成功");
        },
        error: function (xhr, status, error) {
            Feng.error("添加失败!" + error);
        }
    });
    TSite.search();
};
TSite.search = function () {
    var queryData = {};
    queryData['province'] = $('#pCode option:selected').text();
    queryData['city'] = $('#cCode option:selected').text();
    queryData['name'] = $("#name").val();
    queryData['phone'] = $("#phone").val();
    TSite.table.refresh({query: queryData});
};
TSite.resetSearch = function () {
    $("#pCode").val("");
    $("#cCode").val("");
    $("#name").val("");
    $("#phone").val("");
    TSite.search();
};
function UploadFileFn(){
    $('#upFile').click();
}
$(function () {
    var defaultColunms = TSite.initColumn();
    var table = new BSTable(TSite.id, "/tCoach/list", defaultColunms);
    table.setPaginationType("client");
    TSite.table = table.init();
    var carPhoto = new $WebUpload("img");
    carPhoto.setUploadBarId("progressBar");
    carPhoto.init();
});
cloud-server-management/src/main/webapp/static/modular/system/tCoach/tCoach_info.js
New file
@@ -0,0 +1,393 @@
/**
 * 初始化车辆管理详情对话框
 */
var language=1;
var TSiteInfo = {
    layerIndex: -1,
    validateFields: {
    }
};
/**
 * 验证数据是否为空
 */
TSiteInfo.validate = function () {
    $('#carInfoForm').data("bootstrapValidator").resetForm();
    $('#carInfoForm').bootstrapValidator('validate');
    return $("#carInfoForm").data('bootstrapValidator').isValid();
};
/**
 * 清除数据
 */
TSiteInfo.clearData = function() {
    this.tCarInfoData = {};
}
/**
 * 设置对话框中的数据
 *
 * @param key 数据的名称
 * @param val 数据的具体值
 */
TSiteInfo.set = function(key, val) {
    this.tCarInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val;
    return this;
}
/**
 * 设置对话框中的数据
 *
 * @param key 数据的名称
 * @param val 数据的具体值
 */
TSiteInfo.get = function(key) {
    return $("#" + key).val();
}
// 场地管理首页 选择对应的省市
TSiteInfo.oneChange = function (e) {
    var oneId=$(e).val();
    var startTime = document.getElementById('start-time');
    var endTime = document.getElementById('end-time');
    var selectedValue = e.value;
    var citySelect = document.getElementById("cCode");
    var accountSelect = document.getElementById("account");
    var storeSelect = document.getElementById("store");
    var ajax = new $ax(Feng.ctxPath + "/tSite/getCity", function(data){
        if(data!=null){
            var content='<option value="">选择市</option>';
            $.each(data, function(k,v) {
                content += "<option value='"+v.city+"'>"+v.city+"</option>";
            });
            $("#cCode").empty().append(content);
        }
    });
    if (selectedValue === ""){
        citySelect.innerHTML = '<option value="">请先选择省</option>';
        startTime.disabled = true;
        endTime.disabled = true;
    }
    accountSelect.innerHTML = '<option value="">请先选择省/市</option>';
    storeSelect.innerHTML = '<option value="">请先选择省/市</option>';
    ajax.set("province",oneId);
    ajax.start();
};
TSiteInfo.oneChangeNext = function (e) {
    var selectedText = $('#cCode option:selected').text();
    var startTime = document.getElementById('start-time');
    var endTime = document.getElementById('end-time');
    var citySelect = document.getElementById("account");
    var storeSelect = document.getElementById("store");
    var ajax = new $ax(Feng.ctxPath + "/tSite/accountChangeNext", function(data){
        if(data!=null){
            var content='<option value="">选择账号</option>';
            $.each(data, function(k,v) {
                content += "<option style='width: 300px' value='"+v.id+"'>"+v.name+"</option>";
            });
            $("#account").empty().append(content);
        }
    });
    if (selectedText === ""){
        storeSelect.innerHTML = '<option style="width: 300px" value="">请先选择省/市</option>';
        citySelect.innerHTML = '<option style="width: 300px" value="">请先选择省/市</option>';
        startTime.disabled = true;
        endTime.disabled = true;
    }
    ajax.set("oneId",selectedText);
    ajax.start();
    var ajax1 = new $ax(Feng.ctxPath + "/tSite/storeChangeNext", function(data){
        if(data!=null && data.length !== 0){
            var content='<option value="">选择门店</option>';
            $.each(data, function(k,v) {
                content += "<option style='width: 300px' value='"+v.id+"'>"+v.name+"</option>";
            });
            $("#store").empty().append(content);
        }else {
            storeSelect.innerHTML = '<option value="">当前所选市没有门店</option>';
        }
    });
    ajax1.set("oneId",selectedText);
    ajax1.start();
};
TSiteInfo.getTime = function (e) {
    var selectedText = $('#store option:selected').text();
    $.ajax({
        url: Feng.ctxPath + "/tSite/getTime/" + selectedText,
        type: "GET",
        contentType: "application/json", // 设置请求头的 Content-Type
        success: function (response) {
            var sTime = document.getElementById("start-time"); //获取输入的开始时间
            var eTime  = document.getElementById("end-time"); // 获取输入的结束时间
            var rStime = response.startTime; //门店的经营开始时间
            var rEtime = response.endTime; //门店的经营结束时间
            var sh = rStime.split(':')[0];// 门店经营开始时间:小时
            var sm = rStime.split(':')[1];// 门店经营开始时间:分钟
            console.log("门店经营开始时间")
            console.log(sh)
            console.log(sm)
            rEtime = response.endTime;
            var eh = rEtime.split(':')[0];// 门店经营结束时间:小时
            var em = rEtime.split(':')[1];// 门店经营结束时间:分钟
            console.log("门店经营结束时间")
            console.log(eh)
            console.log(em)
            sTime.addEventListener('change',function () {
                var start = sTime.value;
                var startHour = start.split(':')[0];  // 输入的可预约开始时间:小时
                var startMinute = start.split(':')[1];// 输入的可预约开始时间:分钟
                if (Number(sh)>Number(startHour)){
                    Feng.error("预约的开始时间不应小于营业开始时间!")
                }else if(Number(sh) === Number(startHour) ){
                    if (Number(sm)>Number(startMinute)){
                        Feng.error("预约的开始时间不应大于营业开始时间!")
                    }
                }else if (Number(eh)<Number(startHour)){
                    Feng.error("预约的开始时间不应大于营业结束时间!")
                }else if(Number(eh)===Number(startHour)){
                    Feng.error("预约的开始时间不应大于等于营业结束时间!")
                }
            });
            eTime.addEventListener('change',function () {
                var end = eTime.value;
                var endHour = end.split(':')[0];  // 输入的可预约结束时间:小时
                var endMinute = end.split(':')[1];// 输入的可预约结束时间:分钟
                if (Number(eh)<Number(endHour)){
                    Feng.error("预约的结束时间不应大于营业结束时间!")
                }else if(Number(eh) === Number(endHour) ){
                    if (Number(em)<Number(endMinute)){
                        Feng.error("预约的开始时间不应大于开始营业时间!")
                    }
                }else if(Number(sh)>Number(endHour)){
                    Feng.error("预约的结束时间不应小于营业开始时间!")
                }
            })
        },
        error: function (xhr, status, error) {
            Feng.error("您的网络异常!");
        }
    });
};
function UploadFileFn(){
    $('#upFile').click();
}
TSiteInfo.addSubmit = function(){
    var data = {
        id:null,
        province:"",
        city:"",
        cityManagerId:"",
        storeId:"",
        siteTypeId:null,
        appointmentStartTime:"",
        appointmentEndTime:"",
        cashPrice:null,
        playPaiCoin:null,
        insuranceEndTime:"",
        name:"",
        insuranceImg:"",
        managementPlan:""
    };
    data.province            = $("#pCode").val()
    data.id            = $("#id").val()
    data.city                = $("#cCode").val()
    data.cityManagerId       = $("#account").val()
    data.storeId             = $("#store").val()
    data.siteTypeId          = $("#siteTypeId").val()
    data.appointmentStartTime= $("#start-time").val()
    data.appointmentEndTime  = $("#end-time").val()
    data.cashPrice           = $("#cashPrice").val()
    data.playPaiCoin         = $("#playPaiCoin").val()
    data.insuranceEndTime    = $("#insuranceEndTime").val()
    data.name                = $("#name").val()
    data.insuranceImg        = $("#img").val()
    data.managementPlan      = $('#courseVideo').val()
    var sh =data.appointmentStartTime.split(':')[0];
    var sm =data.appointmentStartTime.split(':')[1];
    var eh =data.appointmentEndTime.split(':')[0];
    var em =data.appointmentEndTime.split(':')[1];
    if($("#pCode").val()==''){
        Feng.info("请选择省")
        return;
    }
    if($("#cCode").val()==''){
        Feng.info("请选择市")
        return;
    }
    if($("#account").val()=='' ){
        Feng.info("请选择账号")
        return;
    }
    if($("#store").val()=='' ){
        Feng.info("请选择门店")
        return;
    }
    if($("#siteTypeId").val()=='' ){
        Feng.info("请选择场地类型")
        return;
    }
    if($("#name").val()==''){
        Feng.info("请输入场地名称")
        return;
    }
    if($("#start-time").val()=='' ){
        Feng.info("请输入可预约时间段 开始时间")
        return;
    }
    if($("#end-time").val()==''){
        Feng.info("请输入可预约时间段 结束时间")
        return;
    }
    if($("#cashPrice").val()==''){
        Feng.info("请输入现金价格")
        return;
    }
    if($("#playPaiCoin").val()==''){
        Feng.info("请输入玩湃币价格")
        return;
    }
    if($("#insuranceEndTime").val()==''){
        Feng.info("请输入场地责任险有效期")
        return;
    }
    // if($("#img").val()==''){
    //     Feng.info("请上传场地责任有效期图片")
    //     return;
    // }
    if($('#courseVideo').val()==''){
        Feng.info("请上传消防及应急管理方案")
        return;
    }
    var sTime = document.getElementById("start-time"); //获取输入的开始时间
    var eTime  = document.getElementById("end-time"); // 获取输入的结束时间
    var rStime = ""; //门店的经营开始时间
    var rEtime = ""; //门店的经营结束时间
    var selectedText = $('#store option:selected').text();
    $.ajax({
        url: Feng.ctxPath + "/tSite/getTime/" + selectedText,
        type: "GET",
        contentType: "application/json", // 设置请求头的 Content-Type
        success: function (response) {
            rStime = response.startTime;
            sh = rStime.split(':')[0];// 门店经营开始时间:小时
            sm = rStime.split(':')[1];// 门店经营开始时间:分钟
            rEtime = response.endTime;
            eh = rEtime.split(':')[0];// 门店经营结束时间:小时
            em = rEtime.split(':')[1];// 门店经营结束时间:分钟
            var start = sTime.value;
            var startHour = start.split(':')[0];  // 输入的可预约开始时间:小时
            var startMinute = start.split(':')[1];// 输入的可预约开始时间:分钟
            if (Number(sh)>Number(startHour)){
                Feng.error("预约的开始时间不应小于营业开始时间!")
                return false;
            }else if(Number(sh) === Number(startHour) ){
                if (Number(sm)>Number(startMinute)){
                    Feng.error("预约的开始时间不应大于营业开始时间!")
                    return false;
                }
            }else if (Number(eh)<Number(startHour)){
                Feng.error("预约的开始时间不应大于营业结束时间!")
                return false;
            }else if(Number(eh)===Number(startHour)){
                Feng.error("预约的开始时间不应大于等于营业结束时间!")
                return false;
            }
            var end = eTime.value;
            var endHour = end.split(':')[0];  // 输入的可预约结束时间:小时
            var endMinute = end.split(':')[1];// 输入的可预约结束时间:分钟
            if (Number(eh)<Number(endHour)){
                Feng.error("预约的结束时间不应大于营业结束时间!")
                return ;
            }else if(Number(eh) === Number(endHour) ){
                if (Number(em)<Number(endMinute)){
                    Feng.error("预约的开始时间不应大于开始营业时间!")
                    return ;
                }
            }else if(Number(sh)>Number(endHour)){
                Feng.error("预约的结束时间不应小于营业开始时间!")
                return ;
            }
            if (Number(endHour)===Number(sh)){
                if(Number(endMinute) < Number(sm)){
                    Feng.error("预约结束时间不应小于营业开始时间");
                    return;
                }
            }
            if (Number(startHour)===Number(endHour) && Number(startMinute)===Number(endMinute)){
                Feng.error("至少预约半个小时");
                return;
            }
            $.ajax({
                url: Feng.ctxPath + "/tSite/updateSite" ,
                type: "POST",
                data: JSON.stringify(data),
                contentType: "application/json",
                success: function (response) {
                    Feng.success("修改成功");
                },
                error: function (xhr, status, error) {
                    Feng.error("修改失败!" + error);
                }
            });
        },
        error: function (xhr, status, error) {
            var errorMessage = xhr.responseText ? xhr.responseText : "上架失败!";
            Feng.error("您的网络异常!");
            return false;
        }
    });
};
/**
 * 关闭此对话框
 */
TSiteInfo.close = function() {
    parent.layer.close(window.parent.TSite.layerIndex);
}
function UploadFileFn(){
    $('#upFile').click();
}
$(function () {
    // 限制分钟选项为 0 和 30
    var timeInputs = document.querySelectorAll('input[type="time"]');
    timeInputs.forEach(function(input) {
        input.addEventListener('change', function() {
            var selectedTime = input.value;
            var hour = selectedTime.split(':')[0];
            var minute = selectedTime.split(':')[1];
            if (minute < 30 &&minute>0) {
                minute = '30';
            } else if (minute >30) {
                hour++;
                minute = '00';
                if (hour<10){
                    hour = '0'+hour;
                }
            }
            input.value = hour + ':' + minute;
        });
    });
    Feng.initValidator("carInfoForm", TSiteInfo.validateFields);
    var carPhoto = new $WebUpload("img");
    carPhoto.setUploadBarId("progressBar");
    carPhoto.init();
    var carPhoto1 = new $WebUpload("url");
    carPhoto1.setUploadBarId("progressBar");
    carPhoto1.init();
    TSiteInfo.getTime()
});
cloud-server-management/src/main/webapp/static/modular/system/tCoachType/tCoachType.js
New file
@@ -0,0 +1,297 @@
/**
 * 跨城站点管理管理初始化
 */
var TSite = {
    id: "TSiteTable",    //表格id
    seItem: null,        //选中的条目
    table: null,
    layerIndex: -1
};
/**
 * 初始化表格的列
 */
TSite.initColumn = function () {
    return [
        {field: 'selectItem', radio: true},
        {title: '主键ID', field: 'id', visible: false, align: 'center', valign: 'middle'},
        {title: '类型名称', field: 'name', visible: true, align: 'center', valign: 'middle'
        },
    ];
};
/**
 * 检查是否选中
 */
TSite.check = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length == 0){
        Feng.info("请先选中表格中的某一记录!");
        return false;
    }else{
        TSite.seItem = selected[0];
        return true;
    }
};
TSite.oneChange = function (e) {
    var oneId=$(e).val();
    var ajax = new $ax(Feng.ctxPath + "/tCity/onChange", function(data){
        if(data!=null){
            if(language==1){
                var content='<option value="">选择市</option>';
            }else if(language==2){
                var content='<option value="">Choose your franchisee</option>';
            }else {
                var content='<option value="">Pilih franchisee Anda</option>';
            }
            $.each(data, function(k,v) {
                content += "<option value='"+v.code+"'>"+v.name+"</option>";
            });
            $("#cCode").empty().append(content);
        }
    });
    ajax.set("oneId",oneId);
    ajax.start();
}
TSite.del = function () {
    if (this.check()) {
        let id = this.seItem.id;
        var operation = function(){
            var ajax = new $ax(Feng.ctxPath + "/tCoachType/delete", function (data) {
                Feng.success("删除成功!");
                TSite.table.refresh();
            }, function (data) {
                Feng.error("删除失败!");
            });
            ajax.set("id",id);
            ajax.start();
        }
        Feng.confirm("确认删除该信息?", operation);
    }
};
/**
 * 点击添加跨城站点管理
 */
TSite.openAddTSite = function () {
    var index = layer.load(1,{
        type: 1
        , title: '添加场地类型'
        , area: ['50%', '50%']
        , offset: 'auto' //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset
        , id: 'layerDemo' //防止重复弹出cge
        , content: '<div class="form-horizontal">' +
            '                    <div class="col-sm-11" >' +
            '                    <div class="col-sm-11">' +
            '                        <div class="form-group">\n' +
            '                            <label class="col-sm-3 control-label">类型名称:</label>\n' +
            '                         <div class="col-sm-9">\n' +
            '                                  <input class="form-control" type="text" id="name"> '+
            '                            </div>\n' +
            '                        </div>\n' +
            '                       </div>' +
            '                   </div>' +
            '</div>'
        , btn: ['关闭', '保存']
        , btnAlign: 'c' //按钮居中
        , shade:  0.5 //不显示遮罩
        ,load:1
        , yes: function () {
            layer.closeAll();
        },
        btn2:function () {
            let name = $("#name").val()
            if(name==''){
                Feng.info("请输入类型名称")
                return false;
            }
            var ajax = new $ax(Feng.ctxPath + "/tCoachType/add", function (data) {
                if (data === 200) {
                    Feng.success("操作成功!");
                    window.location.reload();
                    window.parent.layer.closeAll();
                }else{
                    Feng.error("当前教练类型已存在!");
                }
            }, function (data) {
                Feng.error("操作失败!")
            });
            ajax.set("name", name);
            ajax.start();
            layer.closeAll();
        }
    });
    this.layerIndex = index;
};
/**
 * 打开查看跨城站点管理详情
 */
TSite.openTSiteDetail = function () {
    if (this.check()) {
        let id = TSite.seItem.id
        let name = TSite.seItem.name
        var index = layer.load(1,{
            type: 1
            , title: '编辑场地类型'
            , area: ['50%', '50%']
            , offset: 'auto' //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset
            , id: 'layerDemo' //防止重复弹出cge
            , content: '<div class="form-horizontal">' +
                '                    <div class="col-sm-11" >' +
                '                    <div class="col-sm-11">' +
                '                        <div class="form-group">\n' +
                '                            <label class="col-sm-3 control-label">类型名称:</label>\n' +
                '                         <div class="col-sm-9">\n' +
                '                                  <input class="form-control" type="text" id="name" value='+name+'> '+
                '                            </div>\n' +
                '                        </div>\n' +
                '                       </div>' +
                '                   </div>' +
                '</div>'
            , btn: ['关闭', '保存']
            , btnAlign: 'c' //按钮居中
            , shade:  0.5 //不显示遮罩
            ,load:1
            , yes: function () {
                layer.closeAll();
            },
            btn2:function () {
                let name = $("#name").val()
                if(name==''){
                    Feng.info("请输入类型名称")
                    return false;
                }
                var data1={
                    id:id,
                    name:name
                }
                $.ajax({
                    url: Feng.ctxPath + "/tCoachType/update",
                    type: "POST",
                    contentType: "application/json", // 设置请求头的 Content-Type
                    data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
                    success: function(response) {
                        window.location.reload();
                        window.parent.layer.closeAll();
                        if (response === 200) {
                            Feng.success("修改成功!");
                            window.location.reload();
                            window.parent.layer.closeAll();
                        }else{
                            Feng.error("当前教练类型已存在!");
                        }
                    },
                    error: function(xhr, status, error) {
                        var errorMessage = xhr.responseText ? xhr.responseText : "修改失败!";
                        Feng.error(errorMessage);
                    }
                });
                layer.closeAll();
            }
        });
        this.layerIndex = index;
    }
};
/**
 * 操作跨城站点管理
 */
TSite.opt = function (type) {
    if (this.check()) {
        var name = TSite.seItem.name;
        if (name == "" || name == null || name == undefined) {
            name = "该站点";
        } else {
            name = "【" + name + "】";
        }
        var str = "";
        var text = "请谨慎操作!";
        var title = "请谨慎操作!";
        if (1 == type){
            str = "删除";
            title = "您是否确认删除"+name+"?";
            text = "请谨慎操作,删除后数据无法恢复!";
        } else if (2 == type){
            str = "冻结";
            title = "您是否确认冻结"+name+"?";
        } else if (3 == type){
            str = "解冻";
            title = "您是否确认解冻"+name+"?";
        }
        if (1 == type){
            if (TSite.seItem.lineNum != "" && TSite.seItem.lineNum != null && TSite.seItem.lineNum > 0) {
                swal("删除失败", "该站点还有关联线路!", "warning");
                return;
            }
        }
        if(2 == type){
            if (TSite.seItem.state != 1) {
                swal("冻结失败", "【正常】状态下才能执行此操作!", "warning");
                return;
            }
        }
        if (3 == type){
            if (TSite.seItem.state != 2){
                swal("解冻失败", "【冻结】状态下才能执行此操作!", "warning");
                return;
            }
        }
        swal({
            title: title,
            text: text,
            type: "warning",
            showCancelButton: true,
            confirmButtonColor: "#DD6B55",
            confirmButtonText: str,
            closeOnConfirm: true
        }, function () {
            var ajax = new $ax(Feng.ctxPath + "/tSite/opt", function (data) {
                swal(str+"成功", "您已经"+str+"了" + name + "。", "success");
                TSite.table.refresh();
            }, function (data) {
                swal(str+"失败", data.responseJSON.message + "!", "warning");
            });
            ajax.set("tSiteId",TSite.seItem.id);
            ajax.set("optType", type);
            ajax.start();
        });
    }
};
/**
 * 查询跨城站点管理列表
 */
TSite.search = function () {
    var queryData = {};
    queryData['insertTime'] = $("#insertTime").val();
    queryData['name'] = $("#name").val();
    queryData['insertUser'] = $("#insertUser").val();
    queryData['city'] = $("#city").val();
    queryData['state'] = $("#state").val();
    TSite.table.refresh({query: queryData});
};
TSite.resetSearch = function () {
    $("#insertTime").val("");
    $("#name").val("");
    $("#insertUser").val("");
    $("#city").val("");
    $("#state").val("");
    TSite.search();
};
$(function () {
    var defaultColunms = TSite.initColumn();
    var table = new BSTable(TSite.id, "/tCoachType/list", defaultColunms);
    table.setPaginationType("client");
    TSite.table = table.init();
});
cloud-server-management/src/main/webapp/static/modular/system/tQuestion/TQuestion.js
@@ -213,6 +213,7 @@
            success: function(response) {
                Feng.success("删除成功!");
                window.parent.TQuestion.table.refresh();
                TQuestion.table.refresh();
            },
            error: function(xhr, status, error) {
                var errorMessage = xhr.responseText ? xhr.responseText : "删除失败!";
@@ -260,6 +261,7 @@
};
$(function () {
    const data1 = {
        id:null,
        phone:null,
@@ -361,6 +363,7 @@
                            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
                            success: function(response) {
                                Feng.success("添加成功!");
                                TQuestion.table.refresh();
                                // window.parent.TQuestion.table.refresh();
                                TQuestion.phone = "";
                            },
cloud-server-management/src/main/webapp/static/modular/system/tSite/electricFence.js
File was deleted
cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js
@@ -5,26 +5,33 @@
    id: "TSiteTable",    //表格id
    seItem: null,        //选中的条目
    table: null,
    layerIndex: -1
    layerIndex: -1,
    picture:"",
    fileUrl:"",
    img:"",
    plan:"",
    goodsPicArray:[],
    validateFields: {
    }
};
var objectType =$("#objectType").val()
/**
 * 初始化表格的列
 */
TSite.initColumn = function () {
    return [
        {field: 'selectItem', radio: true},
        {field: 'selectItem', checkbox: true},
        {title: '主键ID', field: 'id', visible: false, align: 'center', valign: 'middle'},
        {title: '省', field: 'insertTime', visible: true, align: 'center', valign: 'middle',width:'20%',
        {title: '省', field: 'province', visible: objectType==1?true:false, align: 'center', valign: 'middle',width:'20%',
        },
        {title: '市', field: 'name', visible: true, align: 'center', valign: 'middle',
        {title: '市', field: 'city', visible: objectType==1?true:false, align: 'center', valign: 'middle',
        },
        {title: '门店名称', field: 'insertUserId', visible: false, align: 'center', valign: 'middle'},
        {title: '场地类型', field: 'insertUser', visible: true, align: 'center', valign: 'middle',
        {title: '门店名称', field: 'storeName', visible: true, align: 'center', valign: 'middle'},
        {title: '场地类型', field: 'siteTypeName', visible: true, align: 'center', valign: 'middle',
        },
        {title: '场地名称', field: 'province', visible: true, align: 'center', valign: 'middle',
        {title: '场地名称', field: 'name', visible: true, align: 'center', valign: 'middle',
        },
        {title: '场地责任险有效期', field: 'lineNum', visible: true, align: 'center', valign: 'middle',
        {title: '场地责任险有效期', field: 'insuranceEndTime', visible: true, align: 'center', valign: 'middle',
        },
        {title: '状态', field: 'state', visible: true, align: 'center', valign: 'middle',
            formatter:function (data) {
@@ -47,149 +54,544 @@
        return true;
    }
};
TSite.oneChange = function (e) {
    var oneId=$(e).val();
    var ajax = new $ax(Feng.ctxPath + "/tCity/onChange", function(data){
        if(data!=null){
            if(language==1){
                var content='<option value="">选择市</option>';
            }else if(language==2){
                var content='<option value="">Choose your franchisee</option>';
            }else {
                var content='<option value="">Pilih franchisee Anda</option>';
/**
 * 上架
 */
TSite.onShelf = function () {
    if (this.check()){
        var selected = $('#' + this.id).bootstrapTable('getSelections');
        const data1 = {
            siteIds:[],
            type:null
        };
        selected.forEach(function(obj) {
            var id = obj.id;
            data1.siteIds.push(id);
        });
        data1.type = 1;
        $.ajax({
            url: Feng.ctxPath + "/tSite/changeState",
            type: "POST",
            contentType: "application/json", // 设置请求头的 Content-Type
            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
            success: function(response) {
                Feng.success("上架成功!");
                TSite.search();
            },
            error: function(xhr, status, error) {
                var errorMessage = xhr.responseText ? xhr.responseText : "上架失败!";
                Feng.error("您的网络异常!");
            }
        });
    }
};
/**
 * 下架
 */
TSite.offShelf = function () {
    if (this.check()){
        var selected = $('#' + this.id).bootstrapTable('getSelections');
        const data1 = {
            siteIds:[],
            type:null
        };
        selected.forEach(function(obj) {
            var id = obj.id;
            data1.siteIds.push(id);
        });
        data1.type = 2;
        $.ajax({
            url: Feng.ctxPath + "/tSite/changeState",
            type: "POST",
            contentType: "application/json", // 设置请求头的 Content-Type
            data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
            success: function(response) {
                Feng.success("下架成功!");
                TSite.search();
            },
            error: function(xhr, status, error) {
                var errorMessage = xhr.responseText ? xhr.responseText : "下架失败!";
                Feng.error("您的网络异常!");
            }
        });
    }
};
TSite.uploadFile = function(){
    var elementById = document.getElementById("uploadFile");
    var file = elementById.files[0];
    var formData = new FormData();
    formData.append('file',file);
        $.ajax({
            url: Feng.ctxPath + "/tCouponManage/uploadPic" ,
            type: "POST",
            data: formData,
            contentType: false, // 设置为false,让浏览器自动识别并设置请求头
            processData: false, // 设置为false,不处理发送的数据(因为FormData对象已经包含了文件数据)
            success: function (response) {
                TSite.fileUrl = response;
                console.log(TSite.fileUrl);
                Feng.success("文件上传成功");
            },
            error: function (xhr, status, error) {
                Feng.error("文件上传失败!" + error);
            }
        });
};
TSite.getChange = function(e){
    var oneId=$(e).val();
    var selectedValue = e.value;
    var citySelect = document.getElementById("cCode");
    var ajax = new $ax(Feng.ctxPath + "/tSite/getChange", function(data){
        if(data!=null){
            var content='<option value="">选择市</option>';
            $.each(data, function(k,v) {
                content += "<option value='"+v.code+"'>"+v.name+"</option>";
                content += "<option value='"+v.name+"'>"+v.name+"</option>";
            });
            $("#cCode").empty().append(content);
        }
    });
    if (selectedValue === ""){
        citySelect.innerHTML = '<option value="">请先选择省</option>';
    }
    ajax.set("province",oneId);
    ajax.start();
};
// 场地管理首页 选择对应的省市
// 传1是场地管理首页 传2是场地管理添加页面
TSite.oneChange = function (e) {
    var selectElement = document.getElementById('store');
    var startTime = document.getElementById('start-time');
    var endTime = document.getElementById('end-time');
    if (startTime!==null){
        startTime.disabled = true;
        endTime.disabled = true;
        selectElement.addEventListener('change',function () {
            if (selectElement.value !== ''){
                startTime.disabled = false;
                endTime.disabled = false;
            }else{
                startTime.disabled = true;
                endTime.disabled = true;
            }
        });
    }
    var province = $('#pCode option:selected').text();
    var val = $('#pCode option:selected').val();
    var citySelect = document.getElementById("cCode");
    var accountSelect = document.getElementById("account");
    var storeSelect = document.getElementById("store");
    var ajax = new $ax(Feng.ctxPath + "/tSite/getCity", function(data){
        if(data!=null){
                var content='<option value="">选择市</option>';
            $.each(data, function(k,v) {
                content += "<option value='"+v.city+"'>"+v.city+"</option>";
            });
            $("#cCode").empty().append(content);
        }
    });
    if (val === ""){
        citySelect.innerHTML = '<option value="">请先选择省</option>';
    }
    if (e===2){
        accountSelect.innerHTML = '<option value="">请先选择省/市</option>';
        storeSelect.innerHTML = '<option value="">请先选择省/市</option>';
    }
    if (val === ""){
        startTime.disabled = true;
        endTime.disabled = true;
    }
    ajax.set("province",province);
    ajax.start();
};
TSite.oneChangeNext = function (e) {
    var startTime = document.getElementById('start-time');
    var endTime = document.getElementById('end-time');
    var oneId=$(e).val();
    var citySelect = document.getElementById("account");
    var storeSelect = document.getElementById("store");
    var ajax = new $ax(Feng.ctxPath + "/tSite/accountChangeNext", function(data){
        if(data!=null){
            var content='<option value="">选择账号</option>';
            $.each(data, function(k,v) {
                content += "<option style='width: 300px' value='"+v.id+"'>"+v.name+"</option>";
            });
            $("#account").empty().append(content);
        }
    });
    if (oneId === ""){
        citySelect.innerHTML = '<option style="width: 300px" value="">请先选择省/市</option>';
        storeSelect.innerHTML = '<option style="width: 300px" value="">请先选择省/市</option>';
        startTime.disabled = true;
        endTime.disabled = true;
    }
    ajax.set("oneId",oneId);
    ajax.start();
}
    var ajax1 = new $ax(Feng.ctxPath + "/tSite/storeChangeNext", function(data){
        if(data!=null && data.length !== 0){
            var content='<option value="">选择门店</option>';
            $.each(data, function(k,v) {
                content += "<option style='width: 300px' value='"+v.id+"'>"+v.name+"</option>";
            });
            $("#store").empty().append(content);
        }else {
            storeSelect.innerHTML = '<option value="">当前所选市没有门店</option>';
        }
    });
    ajax1.set("oneId",oneId);
    ajax1.start();
};
/**
 * 点击添加跨城站点管理
 * 跳转添加场地页面
 */
TSite.openAddTSite = function () {
    var index = layer.open({
        type: 2,
        title: language==1?'添加':(language==2?'Add':'Tambahkan'),
        title: "添加场地",
        area: ['100%', '100%'], //宽高
        fix: false, //不固定
        maxmin: true,
        content: Feng.ctxPath + '/tSite/tSite_add'
        content: Feng.ctxPath + '/tSite/add'
    });
    this.layerIndex = index;
};
/**
 * 打开查看跨城站点管理详情
 * 跳转锁定场地页面
 */
TSite.openTSiteDetail = function () {
TSite.lock = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一个场地进行锁定!");
    }else {
        if (this.check()) {
            var index = layer.open({
                type: 2,
                title: "锁定场地",
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/tSite/lockSite/' + TSite.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 打开场地管理查看详情
 */
TSite.openInfo = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一个问题进行编辑!");
    }else {
        if (this.check()) {
            var index = layer.open({
                type: 2,
                title: "查看详情",
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/tSite/openInfoTSite/' + TSite.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
/**
 * 打开场地管理编辑
 */
TSite.openEditTSite = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一个问题进行编辑!");
    }else {
    if (this.check()) {
        var index = layer.open({
            type: 2,
            title: language==1?'编辑':(language==2?'Edit':'Edit'),
            title: "编辑场地",
            area: ['100%', '100%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/tSite/tSite_update/' + TSite.seItem.id
            content: Feng.ctxPath + '/tSite/openEditTSite/' + TSite.seItem.id
        });
        this.layerIndex = index;
    }
};
/**
 * 操作跨城站点管理
 */
TSite.opt = function (type) {
    if (this.check()) {
        var name = TSite.seItem.name;
        if (name == "" || name == null || name == undefined) {
            name = "该站点";
        } else {
            name = "【" + name + "】";
        }
        var str = "";
        var text = "请谨慎操作!";
        var title = "请谨慎操作!";
        if (1 == type){
            str = "删除";
            title = "您是否确认删除"+name+"?";
            text = "请谨慎操作,删除后数据无法恢复!";
        } else if (2 == type){
            str = "冻结";
            title = "您是否确认冻结"+name+"?";
        } else if (3 == type){
            str = "解冻";
            title = "您是否确认解冻"+name+"?";
        }
        if (1 == type){
            if (TSite.seItem.lineNum != "" && TSite.seItem.lineNum != null && TSite.seItem.lineNum > 0) {
                swal("删除失败", "该站点还有关联线路!", "warning");
                return;
            }
        }
        if(2 == type){
            if (TSite.seItem.state != 1) {
                swal("冻结失败", "【正常】状态下才能执行此操作!", "warning");
                return;
            }
        }
        if (3 == type){
            if (TSite.seItem.state != 2){
                swal("解冻失败", "【冻结】状态下才能执行此操作!", "warning");
                return;
            }
        }
        swal({
            title: title,
            text: text,
            type: "warning",
            showCancelButton: true,
            confirmButtonColor: "#DD6B55",
            confirmButtonText: str,
            closeOnConfirm: true
        }, function () {
            var ajax = new $ax(Feng.ctxPath + "/tSite/opt", function (data) {
                swal(str+"成功", "您已经"+str+"了" + name + "。", "success");
                TSite.table.refresh();
            }, function (data) {
                swal(str+"失败", data.responseJSON.message + "!", "warning");
            });
            ajax.set("tSiteId",TSite.seItem.id);
            ajax.set("optType", type);
            ajax.start();
        });
    }
};
/**
 * 查询跨城站点管理列表
 * 关闭此对话框
 */
TSite.close = function() {
    parent.layer.close(window.parent.TSite.layerIndex);
}
var sh = ""; // 门店经营开始时间:小时
var sm = "";// 门店经营开始时间:分钟
var eh = "";// 门店经营结束时间:小时
var em = "";// 门店经营结束时间:分钟
TSite.addSubmit = function(){
    var data = {
        province:"",
        city:"",
        cityManagerId:"",
        storeId:"",
        siteTypeId:null,
        appointmentStartTime:"",
        appointmentEndTime:"",
        cashPrice:null,
        playPaiCoin:null,
        insuranceEndTime:"",
        name:"",
        insuranceImg:"",
        managementPlan:""
    };
    data.province            = $("#pCode").val()
    data.city                = $("#cCode").val()
    data.cityManagerId       = $("#account").val()
    data.storeId             = $("#store").val()
    data.siteTypeId          = $("#siteTypeId").val()
    data.appointmentStartTime= $("#start-time").val()
    data.appointmentEndTime  = $("#end-time").val()
    data.cashPrice           = $("#cashPrice").val()
    data.playPaiCoin         = $("#playPaiCoin").val()
    data.insuranceEndTime    = $("#insuranceEndTime").val()
    data.name                = $("#name").val()
    data.insuranceImg        = $("#img").val()
    data.managementPlan      = $('#courseVideo').val()
    var sh =data.appointmentStartTime.split(':')[0];
    var sm =data.appointmentStartTime.split(':')[1];
    var eh =data.appointmentEndTime.split(':')[0];
    var em =data.appointmentEndTime.split(':')[1];
    if($("#pCode").val()==''){
        Feng.info("请选择省")
        return;
    }
    if($("#cCode").val()==''){
        Feng.info("请选择市")
        return;
    }
    if($("#account").val()=='' ){
        Feng.info("请选择账号")
        return;
    }
    if($("#store").val()=='' ){
        Feng.info("请选择门店")
        return;
    }
    if($("#siteTypeId").val()=='' ){
        Feng.info("请选择场地类型")
        return;
    }
    if($("#name").val()==''){
        Feng.info("请输入场地名称")
        return;
    }
    if($("#start-time").val()=='' ){
        Feng.info("请输入可预约时间段 开始时间")
        return;
    }
    if($("#end-time").val()==''){
        Feng.info("请输入可预约时间段 结束时间")
        return;
    }
    if($("#cashPrice").val()==''){
        Feng.info("请输入现金价格")
        return;
    }
    if($("#playPaiCoin").val()==''){
        Feng.info("请输入玩湃币价格")
        return;
    }
    if($("#insuranceEndTime").val()==''){
        Feng.info("请输入场地责任险有效期")
        return;
    }
    if($("#img").val()==''){
        Feng.info("请上传场地责任有效期图片")
        return;
    }
    if($('#courseVideo').val()==''){
        Feng.info("请上传消防及应急管理方案")
        return;
    }
    var sTime = document.getElementById("start-time"); //获取输入的开始时间
    var eTime  = document.getElementById("end-time"); // 获取输入的结束时间
    var rStime = ""; //门店的经营开始时间
    var rEtime = ""; //门店的经营结束时间
    var selectedText = $('#store option:selected').text();
    $.ajax({
        url: Feng.ctxPath + "/tSite/getTime/" + selectedText,
        type: "GET",
        contentType: "application/json", // 设置请求头的 Content-Type
        success: function (response) {
            rStime = response.startTime;
            sh = rStime.split(':')[0];// 门店经营开始时间:小时
            sm = rStime.split(':')[1];// 门店经营开始时间:分钟
            rEtime = response.endTime;
            eh = rEtime.split(':')[0];// 门店经营结束时间:小时
            em = rEtime.split(':')[1];// 门店经营结束时间:分钟
            var start = sTime.value;
            var startHour = start.split(':')[0];  // 输入的可预约开始时间:小时
            var startMinute = start.split(':')[1];// 输入的可预约开始时间:分钟
            if (Number(sh)>Number(startHour)){
                Feng.error("预约的开始时间不应小于营业开始时间!")
                return false;
            }else if(Number(sh) === Number(startHour) ){
                if (Number(sm)>Number(startMinute)){
                    Feng.error("预约的开始时间不应大于营业开始时间!")
                    return false;
                }
            }else if (Number(eh)<Number(startHour)){
                Feng.error("预约的开始时间不应大于营业结束时间!")
                return false;
            }else if(Number(eh)===Number(startHour)){
                Feng.error("预约的开始时间不应大于等于营业结束时间!")
                return false;
            }
            var end = eTime.value;
            var endHour = end.split(':')[0];  // 输入的可预约结束时间:小时
            var endMinute = end.split(':')[1];// 输入的可预约结束时间:分钟
            if (Number(eh)<Number(endHour)){
                Feng.error("预约的结束时间不应大于营业结束时间!")
                return ;
            }else if(Number(eh) === Number(endHour) ){
                if (Number(em)<Number(endMinute)){
                    Feng.error("预约的开始时间不应大于开始营业时间!")
                    return ;
                }
            }else if(Number(sh)>Number(endHour)){
                Feng.error("预约的结束时间不应小于营业开始时间!")
                return ;
            }
            if (Number(endHour)===Number(sh)){
                if(Number(endMinute) < Number(sm)){
                    Feng.error("预约结束时间不应小于营业开始时间");
                    return;
                }
            }
            if (Number(startHour)===Number(endHour) && Number(startMinute)===Number(endMinute)){
                Feng.error("至少预约半个小时");
                return;
            }
            $.ajax({
                url: Feng.ctxPath + "/tSite/addSite" ,
                type: "POST",
                data: JSON.stringify(data),
                contentType: "application/json",
                success: function (response) {
                    Feng.success("添加成功");
                    TSite.search();
                },
                error: function (xhr, status, error) {
                    Feng.error("添加失败!" + error);
                }
            });
        },
        error: function (xhr, status, error) {
            var errorMessage = xhr.responseText ? xhr.responseText : "上架失败!";
            Feng.error("您的网络异常!");
            return false;
        }
    });
};
TSite.search = function () {
    var queryData = {};
    queryData['insertTime'] = $("#insertTime").val();
    queryData['province'] = $("#pCode").val();
    queryData['city'] = $("#cCode").val();
    queryData['siteTypeId'] = $("#sCode").val();
    // 场地名称
    queryData['name'] = $("#name").val();
    queryData['insertUser'] = $("#insertUser").val();
    queryData['city'] = $("#city").val();
    queryData['state'] = $("#state").val();
    // 门店名称
    queryData['storeName'] = $("#storeName").val();
    TSite.table.refresh({query: queryData});
};
TSite.resetSearch = function () {
    $("#insertTime").val("");
    $("#pCode").val("");
    $("#cCode").val("");
    $("#store").val("");
    $("#sCode").val("");
    $("#storeName").val("");
    $("#siteTypeId").val("");
    $("#name").val("");
    $("#insertUser").val("");
    $("#city").val("");
    $("#state").val("");
    $("#insuranceEndTime").val("");
    TSite.search();
};
function UploadFileFn(){
    $('#upFile').click();
}
$(function () {
    // 限制分钟选项为 0 和 30
    var timeInputs = document.querySelectorAll('input[type="time"]');
    timeInputs.forEach(function(input) {
        input.addEventListener('change', function() {
            var selectedTime = input.value;
            var hour = selectedTime.split(':')[0];
            var minute = selectedTime.split(':')[1];
            if (minute < 30 &&minute>0) {
                minute = '30';
            } else if (minute >30) {
                hour++;
                minute = '00';
                if (hour<10){
                    hour = '0'+hour;
                }
            }
                input.value = hour + ':' + minute;
        });
    });
    var defaultColunms = TSite.initColumn();
    var table = new BSTable(TSite.id, "/tSite/list", defaultColunms);
    table.setPaginationType("server");
    var type =$("#type").val();
    if (type !== 1){
        var table1 = new BSTable(TSite.id, "/tSite/listExipre", defaultColunms);
        table1.setPaginationType("client");
        TSite.table = table1.init();
    }
    var table = new BSTable(TSite.id, "/tSite/listAll", defaultColunms);
    table.setPaginationType("client");
    TSite.table = table.init();
    Feng.initValidator("carInfoForm", TSite.validateFields);
    var carPhoto = new $WebUpload("img");
    carPhoto.setUploadBarId("progressBar");
    carPhoto.init();
    $('#upFile').on('change', function () {
        var formData = new FormData()  //创建一个forData
        formData.append('file', $('#upFile')[0].files[0]) //把file添加进去  name命名为img
        layer.load(); //上传loading
        $.ajax({
            url: Feng.ctxPath + '/mgr/uploadFile',
            data: formData,
            type: "POST",
            async: true,
            cache: false,
            contentType: false,
            processData: false,
            success: function(res) {
                layer.closeAll('loading'); //关闭loading
                $('#upFile').val('');
                $('#courseVideo').val(res);
            }
        })
    });
});
cloud-server-management/src/main/webapp/static/modular/system/tSite/tSiteLock.js
New file
@@ -0,0 +1,79 @@
/**
 * 跨城站点管理管理初始化
 */
var TSiteLock = {
    layerIndex: -1,
    validateFields: {
    }
};
/**
 * 关闭此对话框
 */
TSiteLock.close = function() {
    parent.layer.close(window.parent.TSite.layerIndex);
}
/**
 * 添加
 */
TSiteLock.add = function(id) {
    console.log("看看id");
    console.log(id)
    var startTime = $("#start-time").val().replace("T"," ");
    var endTime =   $("#end-time").val().replace("T"," ");
    data1 = {
        siteId:id,
        ssTime:startTime,
        eeTime:endTime
    };
    $.ajax({
        url: Feng.ctxPath + "/tSite/addSiteLock",
        type: "POST",
        contentType: "application/json", // 设置请求头的 Content-Type
        data: JSON.stringify(data1), // 将数据转换为 JSON 字符串
        success: function(response) {
            console.log("看看后端返回的id");
            console.log(response.data);
            var str = '<tr class="timeClass">' +
                '<td><span>' + startTime +'</span></td>' +
                '<td><span>' + endTime + '</span></td>' +
                '<td><button '+'id = '+response.data+' + onclick="TSiteLock.delete(this)">删除</button></td></tr>';
            $("#coun").append(str);
            Feng.success("锁定成功!");
        },
        error: function(xhr, status, error) {
            Feng.error("您的网络异常!");
        }
    });
}
/**
 * 删除
 */
TSiteLock.delete = function(e) {
    $(e).parent().parent().remove();
    $.ajax({
        url: Feng.ctxPath + "/tSite/deleteSiteLock/"+e.id,
        type: "POST",
        contentType: "application/json", // 设置请求头的 Content-Type
        success: function(response) {
            Feng.success("删除成功!");
            TSite.search();
        },
        error: function(xhr, status, error) {
            var errorMessage = xhr.responseText ? xhr.responseText : "删除失败!";
            Feng.error("您的网络异常!");
        }
    });
}
function UploadFileFn(){
    $('#upFile').click();
}
$(function () {
});
cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js
@@ -1,41 +1,27 @@
/**
 * 初始化跨城站点管理详情对话框
 * 初始化车辆管理详情对话框
 */
var TSiteInfoDlg = {
    tSiteInfoData : {},
var language=1;
var TSiteInfo = {
    layerIndex: -1,
    validateFields: {
        name: {
            validators: {
                notEmpty: {
                    message: '站点名称不能为空'
                }
            }
        },
        provinceCode: {
            validators: {
                notEmpty: {
                    message: '请选择站点所属省'
                }
            }
        },
    }
};
/**
 * 验证数据是否为空
 */
TSiteInfoDlg.validate = function () {
    $('#siteInfoForm').data("bootstrapValidator").resetForm();
    $('#siteInfoForm').bootstrapValidator('validate');
    return $("#siteInfoForm").data('bootstrapValidator').isValid();
TSiteInfo.validate = function () {
    $('#carInfoForm').data("bootstrapValidator").resetForm();
    $('#carInfoForm').bootstrapValidator('validate');
    return $("#carInfoForm").data('bootstrapValidator').isValid();
};
/**
 * 清除数据
 */
TSiteInfoDlg.clearData = function() {
    this.tSiteInfoData = {};
TSiteInfo.clearData = function() {
    this.tCarInfoData = {};
}
/**
@@ -44,8 +30,8 @@
 * @param key 数据的名称
 * @param val 数据的具体值
 */
TSiteInfoDlg.set = function(key, val) {
    this.tSiteInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val;
TSiteInfo.set = function(key, val) {
    this.tCarInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val;
    return this;
}
@@ -55,346 +41,353 @@
 * @param key 数据的名称
 * @param val 数据的具体值
 */
TSiteInfoDlg.get = function(key) {
TSiteInfo.get = function(key) {
    return $("#" + key).val();
}
// 场地管理首页 选择对应的省市
TSiteInfo.oneChange = function (e) {
    var oneId=$(e).val();
    var startTime = document.getElementById('start-time');
    var endTime = document.getElementById('end-time');
    var selectedValue = e.value;
    var citySelect = document.getElementById("cCode");
    var accountSelect = document.getElementById("account");
    var storeSelect = document.getElementById("store");
    var ajax = new $ax(Feng.ctxPath + "/tSite/getCity", function(data){
        if(data!=null){
            var content='<option value="">选择市</option>';
            $.each(data, function(k,v) {
                content += "<option value='"+v.city+"'>"+v.city+"</option>";
            });
            $("#cCode").empty().append(content);
        }
    });
    if (selectedValue === ""){
        citySelect.innerHTML = '<option value="">请先选择省</option>';
        startTime.disabled = true;
        endTime.disabled = true;
    }
    accountSelect.innerHTML = '<option value="">请先选择省/市</option>';
    storeSelect.innerHTML = '<option value="">请先选择省/市</option>';
    ajax.set("province",oneId);
    ajax.start();
};
TSiteInfo.oneChangeNext = function (e) {
    var selectedText = $('#cCode option:selected').text();
    var startTime = document.getElementById('start-time');
    var endTime = document.getElementById('end-time');
    var citySelect = document.getElementById("account");
    var storeSelect = document.getElementById("store");
    var ajax = new $ax(Feng.ctxPath + "/tSite/accountChangeNext", function(data){
        if(data!=null){
            var content='<option value="">选择账号</option>';
            $.each(data, function(k,v) {
                content += "<option style='width: 300px' value='"+v.id+"'>"+v.name+"</option>";
            });
            $("#account").empty().append(content);
        }
    });
    if (selectedText === ""){
        storeSelect.innerHTML = '<option style="width: 300px" value="">请先选择省/市</option>';
        citySelect.innerHTML = '<option style="width: 300px" value="">请先选择省/市</option>';
        startTime.disabled = true;
        endTime.disabled = true;
    }
    ajax.set("oneId",selectedText);
    ajax.start();
    var ajax1 = new $ax(Feng.ctxPath + "/tSite/storeChangeNext", function(data){
        if(data!=null && data.length !== 0){
            var content='<option value="">选择门店</option>';
            $.each(data, function(k,v) {
                content += "<option style='width: 300px' value='"+v.id+"'>"+v.name+"</option>";
            });
            $("#store").empty().append(content);
        }else {
            storeSelect.innerHTML = '<option value="">当前所选市没有门店</option>';
        }
    });
    ajax1.set("oneId",selectedText);
    ajax1.start();
};
TSiteInfo.getTime = function (e) {
    var selectedText = $('#store option:selected').text();
    $.ajax({
        url: Feng.ctxPath + "/tSite/getTime/" + selectedText,
        type: "GET",
        contentType: "application/json", // 设置请求头的 Content-Type
        success: function (response) {
            var sTime = document.getElementById("start-time"); //获取输入的开始时间
            var eTime  = document.getElementById("end-time"); // 获取输入的结束时间
            var rStime = response.startTime; //门店的经营开始时间
            var rEtime = response.endTime; //门店的经营结束时间
            var sh = rStime.split(':')[0];// 门店经营开始时间:小时
            var sm = rStime.split(':')[1];// 门店经营开始时间:分钟
            console.log("门店经营开始时间")
            console.log(sh)
            console.log(sm)
            rEtime = response.endTime;
            var eh = rEtime.split(':')[0];// 门店经营结束时间:小时
            var em = rEtime.split(':')[1];// 门店经营结束时间:分钟
            console.log("门店经营结束时间")
            console.log(eh)
            console.log(em)
            sTime.addEventListener('change',function () {
                var start = sTime.value;
                var startHour = start.split(':')[0];  // 输入的可预约开始时间:小时
                var startMinute = start.split(':')[1];// 输入的可预约开始时间:分钟
                if (Number(sh)>Number(startHour)){
                    Feng.error("预约的开始时间不应小于营业开始时间!")
                }else if(Number(sh) === Number(startHour) ){
                    if (Number(sm)>Number(startMinute)){
                        Feng.error("预约的开始时间不应大于营业开始时间!")
                    }
                }else if (Number(eh)<Number(startHour)){
                    Feng.error("预约的开始时间不应大于营业结束时间!")
                }else if(Number(eh)===Number(startHour)){
                    Feng.error("预约的开始时间不应大于等于营业结束时间!")
                }
            });
            eTime.addEventListener('change',function () {
                var end = eTime.value;
                var endHour = end.split(':')[0];  // 输入的可预约结束时间:小时
                var endMinute = end.split(':')[1];// 输入的可预约结束时间:分钟
                if (Number(eh)<Number(endHour)){
                    Feng.error("预约的结束时间不应大于营业结束时间!")
                }else if(Number(eh) === Number(endHour) ){
                    if (Number(em)<Number(endMinute)){
                        Feng.error("预约的开始时间不应大于开始营业时间!")
                    }
                }else if(Number(sh)>Number(endHour)){
                    Feng.error("预约的结束时间不应小于营业开始时间!")
                }
            })
        },
        error: function (xhr, status, error) {
            Feng.error("您的网络异常!");
        }
    });
};
function UploadFileFn(){
    $('#upFile').click();
}
TSiteInfo.addSubmit = function(){
    var data = {
        id:null,
        province:"",
        city:"",
        cityManagerId:"",
        storeId:"",
        siteTypeId:null,
        appointmentStartTime:"",
        appointmentEndTime:"",
        cashPrice:null,
        playPaiCoin:null,
        insuranceEndTime:"",
        name:"",
        insuranceImg:"",
        managementPlan:""
    };
    data.province            = $("#pCode").val()
    data.id            = $("#id").val()
    data.city                = $("#cCode").val()
    data.cityManagerId       = $("#account").val()
    data.storeId             = $("#store").val()
    data.siteTypeId          = $("#siteTypeId").val()
    data.appointmentStartTime= $("#start-time").val()
    data.appointmentEndTime  = $("#end-time").val()
    data.cashPrice           = $("#cashPrice").val()
    data.playPaiCoin         = $("#playPaiCoin").val()
    data.insuranceEndTime    = $("#insuranceEndTime").val()
    data.name                = $("#name").val()
    data.insuranceImg        = $("#img").val()
    data.managementPlan      = $('#courseVideo').val()
    var sh =data.appointmentStartTime.split(':')[0];
    var sm =data.appointmentStartTime.split(':')[1];
    var eh =data.appointmentEndTime.split(':')[0];
    var em =data.appointmentEndTime.split(':')[1];
    if($("#pCode").val()==''){
        Feng.info("请选择省")
        return;
    }
    if($("#cCode").val()==''){
        Feng.info("请选择市")
        return;
    }
    if($("#account").val()=='' ){
        Feng.info("请选择账号")
        return;
    }
    if($("#store").val()=='' ){
        Feng.info("请选择门店")
        return;
    }
    if($("#siteTypeId").val()=='' ){
        Feng.info("请选择场地类型")
        return;
    }
    if($("#name").val()==''){
        Feng.info("请输入场地名称")
        return;
    }
    if($("#start-time").val()=='' ){
        Feng.info("请输入可预约时间段 开始时间")
        return;
    }
    if($("#end-time").val()==''){
        Feng.info("请输入可预约时间段 结束时间")
        return;
    }
    if($("#cashPrice").val()==''){
        Feng.info("请输入现金价格")
        return;
    }
    if($("#playPaiCoin").val()==''){
        Feng.info("请输入玩湃币价格")
        return;
    }
    if($("#insuranceEndTime").val()==''){
        Feng.info("请输入场地责任险有效期")
        return;
    }
    // if($("#img").val()==''){
    //     Feng.info("请上传场地责任有效期图片")
    //     return;
    // }
    if($('#courseVideo').val()==''){
        Feng.info("请上传消防及应急管理方案")
        return;
    }
    var sTime = document.getElementById("start-time"); //获取输入的开始时间
    var eTime  = document.getElementById("end-time"); // 获取输入的结束时间
    var rStime = ""; //门店的经营开始时间
    var rEtime = ""; //门店的经营结束时间
    var selectedText = $('#store option:selected').text();
    $.ajax({
        url: Feng.ctxPath + "/tSite/getTime/" + selectedText,
        type: "GET",
        contentType: "application/json", // 设置请求头的 Content-Type
        success: function (response) {
            rStime = response.startTime;
            sh = rStime.split(':')[0];// 门店经营开始时间:小时
            sm = rStime.split(':')[1];// 门店经营开始时间:分钟
            rEtime = response.endTime;
            eh = rEtime.split(':')[0];// 门店经营结束时间:小时
            em = rEtime.split(':')[1];// 门店经营结束时间:分钟
            var start = sTime.value;
            var startHour = start.split(':')[0];  // 输入的可预约开始时间:小时
            var startMinute = start.split(':')[1];// 输入的可预约开始时间:分钟
            if (Number(sh)>Number(startHour)){
                Feng.error("预约的开始时间不应小于营业开始时间!")
                return false;
            }else if(Number(sh) === Number(startHour) ){
                if (Number(sm)>Number(startMinute)){
                    Feng.error("预约的开始时间不应大于营业开始时间!")
                    return false;
                }
            }else if (Number(eh)<Number(startHour)){
                Feng.error("预约的开始时间不应大于营业结束时间!")
                return false;
            }else if(Number(eh)===Number(startHour)){
                Feng.error("预约的开始时间不应大于等于营业结束时间!")
                return false;
            }
            var end = eTime.value;
            var endHour = end.split(':')[0];  // 输入的可预约结束时间:小时
            var endMinute = end.split(':')[1];// 输入的可预约结束时间:分钟
            if (Number(eh)<Number(endHour)){
                Feng.error("预约的结束时间不应大于营业结束时间!")
                return ;
            }else if(Number(eh) === Number(endHour) ){
                if (Number(em)<Number(endMinute)){
                    Feng.error("预约的开始时间不应大于开始营业时间!")
                    return ;
                }
            }else if(Number(sh)>Number(endHour)){
                Feng.error("预约的结束时间不应小于营业开始时间!")
                return ;
            }
            if (Number(endHour)===Number(sh)){
                if(Number(endMinute) < Number(sm)){
                    Feng.error("预约结束时间不应小于营业开始时间");
                    return;
                }
            }
            if (Number(startHour)===Number(endHour) && Number(startMinute)===Number(endMinute)){
                Feng.error("至少预约半个小时");
                return;
            }
            $.ajax({
                url: Feng.ctxPath + "/tSite/updateSite" ,
                type: "POST",
                data: JSON.stringify(data),
                contentType: "application/json",
                success: function (response) {
                    Feng.success("修改成功");
                },
                error: function (xhr, status, error) {
                    Feng.error("修改失败!" + error);
                }
            });
        },
        error: function (xhr, status, error) {
            var errorMessage = xhr.responseText ? xhr.responseText : "上架失败!";
            Feng.error("您的网络异常!");
            return false;
        }
    });
};
/**
 * 关闭此对话框
 */
TSiteInfoDlg.close = function() {
TSiteInfo.close = function() {
    parent.layer.close(window.parent.TSite.layerIndex);
}
/**
 * 收集数据
 */
TSiteInfoDlg.collectData = function() {
    this
    .set('id')
    .set('name')
    .set('province')
    .set('provinceCode')
    .set('city')
    .set('cityCode')
    .set('district')
    .set('districtCode')
    .set('state')
    .set('insertTime')
    .set('insertUserId');
function UploadFileFn(){
    $('#upFile').click();
}
$(function () {
    // 限制分钟选项为 0 和 30
    var timeInputs = document.querySelectorAll('input[type="time"]');
    timeInputs.forEach(function(input) {
        input.addEventListener('change', function() {
            var selectedTime = input.value;
            var hour = selectedTime.split(':')[0];
            var minute = selectedTime.split(':')[1];
            if (minute < 30 &&minute>0) {
                minute = '30';
            } else if (minute >30) {
                hour++;
                minute = '00';
                if (hour<10){
                    hour = '0'+hour;
                }
            }
            input.value = hour + ':' + minute;
/**
 * 提交添加
 */
TSiteInfoDlg.addSubmit = function() {
    this.clearData();
    this.collectData();
    if(!this.validate()){
        return ;
    }
    var name = $("#name").val();
    var provinceCode = $("#provinceCode").val();
    var cityCode = $("#cityCode").val();
    var districtCode = $("#districtCode").val();
    if ("" == provinceCode){
        Feng.error("请选择所属城市");
        return;
    }
    var subArr=[];
    $(".areaValueClass").each(function () {
        subArr.push({
            id:$(this).find("input[name*='id']").val(),
            areaType:$(this).find("input[name*='areaType1']").val(),
            time:$(this).find("input[name*='time']").val(),
            name:$(this).find("input[name*='name']").val(),
            province:$(this).find("input[name*='province1']").val(),
            provinceCode:$(this).find("input[name*='provinceCode1']").val(),
            city:$(this).find("input[name*='city1']").val(),
            cityCode:$(this).find("input[name*='cityCode1']").val(),
            district:$(this).find("input[name*='district1']").val(),
            districtCode:$(this).find("input[name*='districtCode1']").val(),
            coordinate:$(this).find("input[name*='coordinate1']").val(),
        })
        });
    });
    if(subArr.length <= 0){
        Feng.error("请至少填写一条站点区域");
        return;
    }
    //提交信息
    var ajax = new $ax(Feng.ctxPath + "/tSite/add", function(data){
        if(data.status == 200){
              Feng.success("添加成功!");
            window.parent.TSite.table.refresh();
            TSiteInfoDlg.close();
        }else{
            Feng.error(data.msg);
        }
    },function(data){
        Feng.error("添加失败!" + data.responseJSON.message + "!");
    });
    ajax.set("name",name);
    ajax.set("provinceCode",provinceCode);
    ajax.set("province",$("#provinceCode option:selected").text());
    if ("" != cityCode && null != cityCode && undefined != cityCode){
        ajax.set("cityCode",cityCode);
        ajax.set("city",$("#cityCode option:selected").text());
    }
    if ("" != districtCode && null != districtCode && undefined != districtCode){
        ajax.set("districtCode",$("#districtCode").val());
        ajax.set("district",$("#districtCode option:selected").text());
    }
    ajax.set("subArr",JSON.stringify(subArr));
    ajax.start();
}
    Feng.initValidator("carInfoForm", TSiteInfo.validateFields);
    var carPhoto = new $WebUpload("img");
    carPhoto.setUploadBarId("progressBar");
    carPhoto.init();
/**
 * 提交修改
 */
TSiteInfoDlg.editSubmit = function() {
    var carPhoto1 = new $WebUpload("url");
    carPhoto1.setUploadBarId("progressBar");
    carPhoto1.init();
    TSiteInfo.getTime()
    this.clearData();
    this.collectData();
    if(!this.validate()){
        return ;
    }
    var name = $("#name").val();
    var provinceCode = $("#provinceCode").val();
    var cityCode = $("#cityCode").val();
    var districtCode = $("#districtCode").val();
    if ("" == provinceCode){
        Feng.error("请选择所属城市");
        return;
    }
    var subArr=[];
    $(".areaValueClass").each(function () {
        subArr.push({
            id:$(this).find("input[name*='id']").val(),
            areaType:$(this).find("input[name*='areaType1']").val(),
            time:$(this).find("input[name*='time']").val(),
            name:$(this).find("input[name*='name']").val(),
            province:$(this).find("input[name*='province1']").val(),
            provinceCode:$(this).find("input[name*='provinceCode1']").val(),
            city:$(this).find("input[name*='city1']").val(),
            cityCode:$(this).find("input[name*='cityCode1']").val(),
            district:$(this).find("input[name*='district1']").val(),
            districtCode:$(this).find("input[name*='districtCode1']").val(),
            coordinate:$(this).find("input[name*='coordinate1']").val(),
        })
    });
    if(subArr.length <= 0){
        Feng.error("请至少填写一条站点区域");
        return;
    }
    //提交信息
    var ajax = new $ax(Feng.ctxPath + "/tSite/update", function(data){
        Feng.success("修改成功!");
        window.parent.TSite.table.refresh();
        TSiteInfoDlg.close();
    },function(data){
        Feng.error("修改失败!" + data.responseJSON.message + "!");
    });
    ajax.set("id",$("#id").val());
    ajax.set("name",name);
    ajax.set("provinceCode",provinceCode);
    ajax.set("province",$("#provinceCode option:selected").text());
    if ("" != cityCode && null != cityCode && undefined != cityCode){
        ajax.set("cityCode",cityCode);
        ajax.set("city",$("#cityCode option:selected").text());
    }
    if ("" != districtCode && null != districtCode && undefined != districtCode){
        ajax.set("districtCode",$("#districtCode").val());
        ajax.set("district",$("#districtCode option:selected").text());
    }
    ajax.set("subArr",JSON.stringify(subArr));
    ajax.start();
}
$(function() {
    Feng.initValidator("siteInfoForm", TSiteInfoDlg.validateFields);
});
//省改变
TSiteInfoDlg.provinceChange = function (e) {
    var provinceCode=$(e).val();
    var ajax = new $ax(Feng.ctxPath + "/tCompany/change", function(data){
        if(data!=null){
            if(language==1){
                var content='<option value="">选择市</option>';
            }else if(language==2){
                var content='<option value="">Please select a city</option>';
            }else {
                var content='<option value="">Pilih Kota</option>';
            }
            $.each(data, function(k,v) {
                content += "<option value='"+v.code+"'>"+v.name+"</option>";
            });
            $("#cityCode").empty().append(content);
            $("#districtCode").empty().append('<option value="">选择区</option>');
        }
    });
    ajax.set("code",provinceCode);
    ajax.start();
}
//市改变
TSiteInfoDlg.cityChange = function (e) {
    var cityCode=$(e).val();
    var ajax = new $ax(Feng.ctxPath + "/tCompany/change", function(data){
        if(data!=null){
            if(language==1){
                var content='<option value="">选择区</option>';
            }else if(language==2){
                var content='<option value="">Please select a city</option>';
            }else {
                var content='<option value="">Pilih Kota</option>';
            }
            $.each(data, function(k,v) {
                content += "<option value='"+v.code+"'>"+v.name+"</option>";
            });
            $("#districtCode").empty().append(content);
        }
    });
    ajax.set("code",cityCode);
    ajax.start();
}
/**
 * 类型改变执行
 * @param e
 */
TSiteInfoDlg.areaTypeClick = function (e) {
    if (1 == e){//行政区域
        $("#areaType1Div").show();
        $("#areaType2Div").hide();
    } else if (2 == e){
        $("#areaType2Div").show();
        $("#areaType1Div").hide();
    }
}
//站点区域省改变
TSiteInfoDlg.provinceChange1 = function (e) {
    var provinceCode=$(e).val();
    var ajax = new $ax(Feng.ctxPath + "/tCompany/change", function(data){
        if(data!=null){
            if(language==1){
                var content='<option value="">选择市</option>';
            }else if(language==2){
                var content='<option value="">Please select a city</option>';
            }else {
                var content='<option value="">Pilih Kota</option>';
            }
            $.each(data, function(k,v) {
                content += "<option value='"+v.code+"'>"+v.name+"</option>";
            });
            $("#cityCode1").empty().append(content);
            $("#districtCode1").empty().append('<option value="">选择区</option>');
        }
    });
    ajax.set("code",provinceCode);
    ajax.start();
}
//站点区域市改变
TSiteInfoDlg.cityChange1 = function (e) {
    var cityCode=$(e).val();
    var ajax = new $ax(Feng.ctxPath + "/tCompany/change", function(data){
        if(data!=null){
            if(language==1){
                var content='<option value="">选择区</option>';
            }else if(language==2){
                var content='<option value="">Please select a city</option>';
            }else {
                var content='<option value="">Pilih Kota</option>';
            }
            $.each(data, function(k,v) {
                content += "<option value='"+v.code+"'>"+v.name+"</option>";
            });
            $("#districtCode1").empty().append(content);
        }
    });
    ajax.set("code",cityCode);
    ajax.start();
}
/**
 * 添加区域
 */
TSiteInfoDlg.addArea = function () {
    var areaName = $("#areaName").val();
    if ("" == areaName || null == areaName){
        Feng.error("区域名称不能为空");
        return;
    }
    var areaType = $("input[name='areaType']:checked").val();
    var b = false;
    $(".areaValueClass").each(function () {
        var areaType1 = $(this).find("input[name*='areaType1']").val();
        if(areaType != areaType1){
            b = true;
            return
        }
    });
    if(b){
        Feng.error("电子围栏和行政区域不能混合使用");
        return;
    }
    if (1 == areaType){
        var provinceCode1 = $("#provinceCode1").val();
        var province1 = $("#provinceCode1 option:selected").text();
        var cityCode1 = $("#cityCode1").val();
        var city1 = $("#cityCode1 option:selected").text();
        var districtCode1 = $("#districtCode1").val();
        var district1 = $("#districtCode1 option:selected").text();
        if ("" == provinceCode1){
            Feng.error("请选择行政区域所属省");
            return;
        }
    }else if (2 == areaType) {
        if("" == coordinate){
            Feng.error('请在地图上规划区域');
            return;
        }
    }
    var subArr=[];
    $(".areaValueClass").each(function () {
        subArr.push({
            areaType:$(this).find("input[name*='areaType1']").val(),
            time:$(this).find("input[name*='time']").val(),
            name:$(this).find("input[name*='name']").val(),
            province:$(this).find("input[name*='province1']").val(),
            provinceCode:$(this).find("input[name*='provinceCode1']").val(),
            city:$(this).find("input[name*='city1']").val(),
            cityCode:$(this).find("input[name*='cityCode1']").val(),
            district:$(this).find("input[name*='district1']").val(),
            districtCode:$(this).find("input[name*='districtCode1']").val(),
            coordinate:$(this).find("input[name*='coordinate1']").val(),
        })
    });
    var str = '<tr class="areaValueClass">' +
        // '<td>' + (subArr.length+1) + '</td>' +
        '<td style="text-align: center;">' +
        '<input type="hidden" id="areaType1" name="areaType1" value="'+areaType+'">' +
        '<input type="hidden" id="time" name="time" value="'+getNowFormatDate()+'">' + getNowFormatDate() + '</td>' +
        '<td style="text-align: center;">' +
        '<input type="hidden" id="name" name="name" value="'+areaName+'">' +
        '<input type="hidden" id="provinceCode1" name="provinceCode1" value="'+provinceCode1+'">' +
        '<input type="hidden" id="province1" name="province1" value="'+province1+'">' +
        '<input type="hidden" id="cityCode1" name="cityCode1" value="'+cityCode1+'">' +
        '<input type="hidden" id="city1" name="city1" value="'+city1+'">' +
        '<input type="hidden" id="districtCode1" name="districtCode1" value="'+districtCode1+'">' +
        '<input type="hidden" id="district1" name="district1" value="'+district1+'">' +
        '<input type="hidden" id="coordinate1" name="coordinate1" value="'+coordinate+'">' + areaName + '</td>' +
        '<td style="text-align: center;"><button onclick="deleteSub(this)">移除</button></td></tr>';
    $("#areaValue").append(str);
    //清除电子围栏数据
    $("#clear").click();
}
//删除数据
function deleteSub(e) {
    $(e).parent().parent().remove();
}
cloud-server-other/pom.xml
@@ -6,7 +6,7 @@
        <groupId>cn.mb.cloud</groupId>
        <artifactId>mb-cloud-parent</artifactId>
        <version>1.1.3</version>
        <relativePath>../cloud-server-parent/pom.xml</relativePath>
        <relativePath>../../cloud-server-parent/pom.xml</relativePath>
    </parent>
    <artifactId>mb-cloud-other</artifactId>
    <packaging>jar</packaging>
@@ -122,10 +122,6 @@
                </executions>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <repositories>
cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java
@@ -1,15 +1,24 @@
package com.dsh.other.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.other.entity.Site;
import com.dsh.other.entity.SiteBooking;
import com.dsh.other.entity.SiteType;
import com.dsh.other.entity.TSite;
import com.dsh.other.feignclient.account.CityManagerClient;
import com.dsh.other.feignclient.account.model.CityManager;
import com.dsh.other.feignclient.activity.UserCouponClient;
import com.dsh.other.feignclient.activity.model.QueryUserCouponByIdAndUserId;
import com.dsh.other.feignclient.activity.model.UserCoupon;
import com.dsh.other.feignclient.model.BillingDataRequestVo;
import com.dsh.other.feignclient.model.SiteChangeStateVO;
import com.dsh.other.feignclient.model.SiteVo;
import com.dsh.other.model.*;
import com.dsh.other.model.dto.siteDto.TSiteDTO;
import com.dsh.other.model.vo.questionVo.QuestionChangeStateVO;
import com.dsh.other.model.vo.siteVo.ExpireSiteSearchVO;
import com.dsh.other.model.vo.siteVo.SiteSearchVO;
import com.dsh.other.service.ISiteBookingService;
import com.dsh.other.service.ISiteService;
import com.dsh.other.service.ISiteTypeService;
@@ -19,6 +28,7 @@
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -56,9 +66,52 @@
    @Resource
    private UserCouponClient userCouponClient;
    @Autowired
    private CityManagerClient cityManagerClient;
    /**
     * 获取所有场地
     * @return
     */
    @RequestMapping("/base/site/list")
    public List<TSiteDTO> listAll(@RequestBody SiteSearchVO vo){
        return siteTypeService.listAll(vo);
    }
    /**
     * 获取场地有效期在两个月内的场地列表
     * @return
     */
    @RequestMapping("/base/site/listExipre")
    public List<TSiteDTO> listExipre(@RequestBody ExpireSiteSearchVO vo){
        return siteTypeService.listExipre(vo);
    }
    /**
     * 上/下架、删除常见问题 type=1为上架 2为下架 3为删除
     */
    @RequestMapping("/base/site/changeState")
    public Object changeState(@RequestBody SiteChangeStateVO vo){
        return siteService.changeState(vo);
    }
    /**
     * 添加场地管理
     * @return
     */
    @RequestMapping("/base/site/addSite")
    public Object addSite(@RequestBody Site site){
        if(site.getId()!= null ){
            return siteService.updateById(site);
        }else {
            return siteService.save(site);
        }
    }
    @ResponseBody
    @PostMapping("/base/site/querySiteType")
@@ -168,10 +221,6 @@
            return ResultUtil.runErr();
        }
    }
    /**
     * 购买课程微信支付回调
cloud-server-other/src/main/java/com/dsh/other/controller/SiteLockController.java
New file
@@ -0,0 +1,103 @@
package com.dsh.other.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.other.entity.Site;
import com.dsh.other.entity.SiteBooking;
import com.dsh.other.entity.SiteLock;
import com.dsh.other.entity.SiteType;
import com.dsh.other.feignclient.activity.UserCouponClient;
import com.dsh.other.feignclient.activity.model.QueryUserCouponByIdAndUserId;
import com.dsh.other.feignclient.activity.model.UserCoupon;
import com.dsh.other.feignclient.model.BillingDataRequestVo;
import com.dsh.other.feignclient.model.SiteChangeStateVO;
import com.dsh.other.feignclient.model.SiteVo;
import com.dsh.other.model.*;
import com.dsh.other.model.dto.siteDto.TSiteDTO;
import com.dsh.other.model.dto.siteDto.TSiteLockDTO;
import com.dsh.other.model.vo.siteVo.SiteSearchVO;
import com.dsh.other.service.ISiteBookingService;
import com.dsh.other.service.ISiteLockService;
import com.dsh.other.service.ISiteService;
import com.dsh.other.service.ISiteTypeService;
import com.dsh.other.util.PayMoneyUtil;
import com.dsh.other.util.ResultUtil;
import com.dsh.other.util.TokenUtil;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * @author zhibing.pu
 * @date 2023/7/13 16:50
 */
@RestController
@RequestMapping("")
public class SiteLockController {
    @Autowired
    private ISiteService siteService;
    @Autowired
    private ISiteLockService siteLockService;
    /**
     * 锁定场地列表
     * @param
     * @return
     */
    @PostMapping("/siteLock/getListById/{id}")
    public List<TSiteLockDTO> getListById(@PathVariable("id") Integer id){
       return siteLockService.getListById(id);
    }
    /**
     * 添加锁定场地
     * @param
     * @return
     */
    @ResponseBody
    @PostMapping("/siteLock/addSiteLock")
    public Object addSiteLock(@RequestBody TSiteLockDTO siteLock){
        SiteLock siteLock1 = new SiteLock();
        BeanUtils.copyProperties(siteLock,siteLock1);
        siteLockService.save(siteLock1);
        return siteLock1.getId();
    }
    /**
     * 删除锁定场地
     * @param
     * @return
     */
    @PostMapping("/siteLock/deleteSiteLock/{id}")
    public Object deleteSiteLock(@PathVariable("id") Integer id){
        return siteLockService.removeById(id);
    }
}
cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java
@@ -30,6 +30,46 @@
    private GDMapGeocodingUtil gdMapGeocodingUtil;
    /**
     * 根据城市管理员id获取门店
     */
    @RequestMapping("base/site/getStoreByCityManagerId")
    public Object getStoreByCityManagerId(@RequestBody Integer id){
        return storeService.getStoreByCityManagerId(id);
    }
    /**
     * 根据员工id获取门店
     */
    @RequestMapping("base/site/getStoreByStoreStaffId")
    public Object getStoreByStoreStaffId(@RequestBody Integer id){
        return storeService.getStoreByStoreStaffId(id);
    }
    /**
     * 根据门店id获取门店信息
     */
    @RequestMapping("base/site/getStoreById")
    public Store getStoreById(@RequestBody Integer id){
        return storeService.getOne(new QueryWrapper<Store>().eq("id",id));
    }
    /**
     * 选择市区 展示全部门店
     */
    @RequestMapping("base/store/getStore")
    public List<Store> getStore(@RequestBody String city){
        return storeService.list(new QueryWrapper<Store>().eq("city",city));
    }
    /**
     * 根据所选门店 查询经营时间
     * @param oneId
     * @return
     */
    @RequestMapping("base/store/getTime")
    public Store getTime(@RequestBody String oneId){
        return storeService.getOne(new QueryWrapper<Store>().eq("name",oneId));
    }
    @PostMapping("/base/protocol/storeDetail/courseOfSto")
@@ -168,7 +208,7 @@
     */
    @ResponseBody
    @PostMapping("/store/queryStoreByIds")
    public List<Store> queryStoreByIds(List<Integer> ids){
    public List<Store> queryStoreByIds(@RequestBody List<Integer> ids){
        try {
            return storeService.list(new LambdaQueryWrapper<Store>()
                    .in(Store::getId,ids));
cloud-server-other/src/main/java/com/dsh/other/entity/Site.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@@ -84,6 +85,7 @@
     * 场地责任险有效期
     */
    @TableField("insuranceEndTime")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date insuranceEndTime;
    /**
     * 场地责任险图片
@@ -104,6 +106,7 @@
     * 添加时间
     */
    @TableField("insertTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date insertTime;
}
cloud-server-other/src/main/java/com/dsh/other/entity/SiteLock.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@@ -29,10 +30,12 @@
     * 锁定开始时间
     */
    @TableField("startTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date startTime;
    /**
     * 锁定结束时间
     */
    @TableField("endTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date endTime;
}
cloud-server-other/src/main/java/com/dsh/other/entity/TSite.java
New file
@@ -0,0 +1,111 @@
package com.dsh.other.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
 * @author zhibing.pu
 * @Date 2023/8/1 17:43
 */
@Data
@TableName("t_site")
public class TSite {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 门店id
     */
    @TableField("storeId")
    private Integer storeId;
    /**
     * 场地名称
     */
    @TableField("name")
    private String name;
    /**
     * 场地类型id
     */
    @TableField("siteTypeId")
    private Integer siteTypeId;
    /**
     * 城市管理员id
     */
    @TableField("cityManagerId")
    private Integer cityManagerId;
    /**
     * 省
     */
    @TableField("province")
    private String province;
    /**
     * 省编号
     */
    @TableField("provinceCode")
    private String provinceCode;
    /**
     * 市名称
     */
    @TableField("city")
    private String city;
    /**
     * 市编号
     */
    @TableField("cityCode")
    private String cityCode;
    /**
     * 预约开始时间
     */
    @TableField("appointmentStartTime")
    private String appointmentStartTime;
    /**
     * 预约结束时间
     */
    @TableField("appointmentEndTime")
    private String appointmentEndTime;
    /**
     * 现金价格(x/半小时)
     */
    @TableField("cashPrice")
    private Double cashPrice;
    /**
     * 玩湃币价格(x/半小时)
     */
    @TableField("playPaiCoin")
    private Integer playPaiCoin;
    /**
     * 场地责任险有效期
     */
    @TableField("insuranceEndTime")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date insuranceEndTime;
    /**
     * 场地责任险图片
     */
    @TableField("insuranceImg")
    private String insuranceImg;
    /**
     * 消防应急管理方案
     */
    @TableField("managementPlan")
    private String managementPlan;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("state")
    private Integer state;
    /**
     * 添加时间
     */
    @TableField("insertTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date insertTime;
}
cloud-server-other/src/main/java/com/dsh/other/feignclient/account/CityManagerClient.java
New file
@@ -0,0 +1,45 @@
package com.dsh.other.feignclient.account;
import com.dsh.other.feignclient.account.model.CityManager;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2023/8/1 17:07
 */
@FeignClient("mb-cloud-account")
public interface CityManagerClient {
    /**
     * 根据id获取数据
     * @param id
     * @return
     */
    @PostMapping("/cityManager/queryCityManagerById")
    CityManager queryCityManagerById(Integer id);
    /**
     * 获取已有城市管理的省、市
     */
    @RequestMapping("/cityManager/listAll")
    List<CityManager> listAll();
    /**
     * 选择省 展示市
     */
    @RequestMapping("/cityManager/getCity")
    List<CityManager> getCity(@RequestBody String province);
    /**
     * 选择市区 展示全部账号
     */
    @RequestMapping("/cityManager/getAccount")
    List<CityManager> getAccount(@RequestBody String city);
}
cloud-server-other/src/main/java/com/dsh/other/feignclient/account/model/CityManager.java
New file
@@ -0,0 +1,56 @@
package com.dsh.other.feignclient.account.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2023/8/1 17:00
 */
@Data
@TableName("t_city_manager")
public class CityManager {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 姓名
     */
    @TableField("name")
    private String name;
    /**
     * 电话
     */
    @TableField("phone")
    private String phone;
    /**
     * 省
     */
    @TableField("province")
    private String province;
    /**
     * 省编号
     */
    @TableField("provinceCode")
    private String provinceCode;
    /**
     * 市
     */
    @TableField("city")
    private String city;
    /**
     * 市编号
     */
    @TableField("cityCode")
    private String cityCode;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("state")
    private Integer state;
}
cloud-server-other/src/main/java/com/dsh/other/feignclient/model/SiteAddDTO.java
New file
@@ -0,0 +1,91 @@
package com.dsh.other.feignclient.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
 * @author zhibing.pu
 * @Date 2023/8/1 17:43
 */
@Data
public class SiteAddDTO {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 门店id
     */
    private Integer storeId;
    /**
     * 场地名称
     */
    private String name;
    /**
     * 场地类型id
     */
    private Integer siteTypeId;
    /**
     * 城市管理员id
     */
    private Integer cityManagerId;
    /**
     * 省
     */
    private String province;
    /**
     * 省编号
     */
    private String provinceCode;
    /**
     * 市名称
     */
    private String city;
    /**
     * 市编号
     */
    private String cityCode;
    /**
     * 预约开始时间
     */
    private String appointmentStartTime;
    /**
     * 预约结束时间
     */
    private String appointmentEndTime;
    /**
     * 现金价格(x/半小时)
     */
    private Double cashPrice;
    /**
     * 玩湃币价格(x/半小时)
     */
    private Integer playPaiCoin;
    /**
     * 场地责任险有效期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date insuranceEndTime;
    /**
     * 场地责任险图片
     */
    private String insuranceImg;
    /**
     * 消防应急管理方案
     */
    private String managementPlan;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    private Integer state;
    /**
     * 添加时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date insertTime;
}
cloud-server-other/src/main/java/com/dsh/other/feignclient/model/SiteChangeStateVO.java
New file
@@ -0,0 +1,21 @@
package com.dsh.other.feignclient.model;
import lombok.Data;
import java.util.List;
/**
 * 修改场地状态
 */
@Data
public class SiteChangeStateVO {
    /**
     * 场地Id
     */
    List<Integer> siteIds;
    /**
     * 上/下架 删除场地 type=1 上架 2下架 3删除
     */
    Integer type;
}
cloud-server-other/src/main/java/com/dsh/other/mapper/SiteLockMapper.java
@@ -2,10 +2,15 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.other.entity.SiteLock;
import com.dsh.other.model.dto.siteDto.TSiteLockDTO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2023/7/18 14:43
 */
public interface SiteLockMapper extends BaseMapper<SiteLock> {
    List<TSiteLockDTO> getListById(@Param("id") Integer id);
}
cloud-server-other/src/main/java/com/dsh/other/mapper/SiteMapper.java
@@ -5,8 +5,12 @@
import com.dsh.other.model.QueryMySiteVo;
import com.dsh.other.model.QuerySiteList;
import com.dsh.other.model.QuerySiteListVo;
import com.dsh.other.model.dto.siteDto.TSiteDTO;
import com.dsh.other.model.vo.siteVo.ExpireSiteSearchVO;
import com.dsh.other.model.vo.siteVo.SiteSearchVO;
import org.apache.ibatis.annotations.Param;
import java.util.ArrayList;
import java.util.List;
/**
@@ -34,4 +38,12 @@
     */
    List<QueryMySiteVo> queryMySite(@Param("uid") Integer uid, @Param("status") Integer status,
                                    @Param("pageNo") Integer pageNo, @Param("pageSize") Integer pageSize);
    List<TSiteDTO> listAll(@Param("query") SiteSearchVO vo);
    Object changeState(@Param("siteIds") List<Integer> siteIds, @Param("type")Integer type);
    List<TSiteDTO> listExipre(@Param("query") ExpireSiteSearchVO vo);
}
cloud-server-other/src/main/java/com/dsh/other/mapper/StoreMapper.java
@@ -5,6 +5,7 @@
import com.dsh.other.model.BaseVo;
import com.dsh.other.model.ProvinceAndCityVo;
import org.apache.ibatis.annotations.Param;
import org.aspectj.lang.annotation.DeclareParents;
import java.util.List;
@@ -42,4 +43,16 @@
     */
    List<BaseVo> queryStoreByCityCode(@Param("cityCode") String cityCode);
    /**
     * 根据城市管理员id获取门店集合
     * @param id
     * @return
     */
    List<Store> getStoreByCityManagerId(@Param("id") Integer id);
    /**
     * 根据门店员工id获取门店集合
     * @param id
     * @return
     */
    List<Store> getStoreByStoreStaffId(@Param("id") Integer id);
}
cloud-server-other/src/main/java/com/dsh/other/model/dto/siteDto/TSiteDTO.java
New file
@@ -0,0 +1,97 @@
package com.dsh.other.model.dto.siteDto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
/**
 * @author 场地管理列表DTO
 * @Date 2023/8/1 17:43
 */
@Data
public class TSiteDTO {
    /**
     * 主键
     */
    private Integer id;
    /**
     * 门店id
     */
    private Integer storeId;
    /**
     * 门店名称
     */
    private String storeName;
    /**
     * 场地名称
     */
    private String name;
    /**
     * 场地类型id
     */
    private Integer siteTypeId;
    /**
     * 场地类型名称
     */
    private String siteTypeName;
    /**
     * 城市管理员id
     */
    private Integer cityManagerId;
    /**
     * 省
     */
    private String province;
    /**
     * 省编号
     */
    private String provinceCode;
    /**
     * 市名称
     */
    private String city;
    /**
     * 市编号
     */
    private String cityCode;
    /**
     * 预约开始时间
     */
    private String appointmentStartTime;
    /**
     * 预约结束时间
     */
    private String appointmentEndTime;
    /**
     * 现金价格(x/半小时)
     */
    private Double cashPrice;
    /**
     * 玩湃币价格(x/半小时)
     */
    private Integer playPaiCoin;
    /**
     * 场地责任险有效期
     */
    private Date insuranceEndTime;
    /**
     * 场地责任险图片
     */
    private String insuranceImg;
    /**
     * 消防应急管理方案
     */
    private String managementPlan;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    private Integer state;
    /**
     * 添加时间
     */
    private Date insertTime;
}
cloud-server-other/src/main/java/com/dsh/other/model/dto/siteDto/TSiteLockDTO.java
New file
@@ -0,0 +1,39 @@
package com.dsh.other.model.dto.siteDto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
 * 锁定场地DTO
 */
@Data
public class TSiteLockDTO {
    /**
     * 场地id
     */
    private Integer id;
    /**
     * 场地id
     */
    private Integer siteId;
    /**
     * 锁定开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    private Date startTime;
    /**
     * 锁定结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    private Date endTime;
    private String ssTime;
    private String eeTime;
}
cloud-server-other/src/main/java/com/dsh/other/model/vo/siteVo/ExpireSiteSearchVO.java
New file
@@ -0,0 +1,40 @@
package com.dsh.other.model.vo.siteVo;
import lombok.Data;
@Data
public class ExpireSiteSearchVO {
    /**
     * 省
     */
    private String province;
    /**
     * 市
     */
    private String city;
    /**
     * 门店名称
     */
    private String storeName;
    /**
     * 场地类型
     */
    private Integer siteTypeId;
    /**
     * 场地名称
     */
    private String name;
    /**
     * 对象类型(1=平台,2=城市管理员,3=门店)
     */
    private Integer objectType;
    private Integer objectId;
    // 登陆人类型
    private Integer typeId ;
}
cloud-server-other/src/main/java/com/dsh/other/model/vo/siteVo/SiteSearchVO.java
New file
@@ -0,0 +1,36 @@
package com.dsh.other.model.vo.siteVo;
import lombok.Data;
@Data
public class SiteSearchVO {
    /**
     * 省
     */
    private String province;
    /**
     * 市
     */
    private String city;
    /**
     * 门店名称
     */
    private String storeName;
    /**
     * 场地类型
     */
    private Integer siteTypeId;
    /**
     * 场地名称
     */
    private String name;
    /**
     * 对象类型(1=平台,2=城市管理员,3=门店)
     */
    private Integer objectType;
    private Integer objectId;
}
cloud-server-other/src/main/java/com/dsh/other/service/ISiteLockService.java
@@ -2,10 +2,16 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.other.entity.SiteLock;
import com.dsh.other.model.dto.siteDto.TSiteLockDTO;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2023/7/18 14:44
 */
public interface ISiteLockService extends IService<SiteLock> {
    List<TSiteLockDTO> getListById(Integer id);
}
cloud-server-other/src/main/java/com/dsh/other/service/ISiteService.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.other.entity.Site;
import com.dsh.other.feignclient.model.SiteChangeStateVO;
import com.dsh.other.model.*;
import com.dsh.other.util.ResultUtil;
@@ -89,4 +90,7 @@
     * @throws Exception
     */
    ResultUtil<Map<String, Double>> queryContinuePaymentMySitePrice(Integer id) throws Exception;
    Object changeState(SiteChangeStateVO vo);
}
cloud-server-other/src/main/java/com/dsh/other/service/ISiteTypeService.java
@@ -3,6 +3,9 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.other.entity.SiteType;
import com.dsh.other.model.BaseVo;
import com.dsh.other.model.dto.siteDto.TSiteDTO;
import com.dsh.other.model.vo.siteVo.ExpireSiteSearchVO;
import com.dsh.other.model.vo.siteVo.SiteSearchVO;
import java.util.List;
@@ -19,4 +22,8 @@
     * @throws Exception
     */
    List<BaseVo> querySiteType() throws Exception;
    List<TSiteDTO> listAll(SiteSearchVO vo);
    List<TSiteDTO> listExipre(ExpireSiteSearchVO vo);
}
cloud-server-other/src/main/java/com/dsh/other/service/StoreService.java
@@ -64,4 +64,7 @@
     */
    List<BaseVo> queryStoreByCityCode(String cityCode) throws Exception;
    List<Store> getStoreByCityManagerId(Integer id);
    List<Store> getStoreByStoreStaffId(Integer id);
}
cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteLockServiceImpl.java
@@ -3,8 +3,12 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.other.entity.SiteLock;
import com.dsh.other.mapper.SiteLockMapper;
import com.dsh.other.model.dto.siteDto.TSiteLockDTO;
import com.dsh.other.service.ISiteLockService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * @author zhibing.pu
@@ -12,4 +16,11 @@
 */
@Service
public class SiteLockServiceImpl extends ServiceImpl<SiteLockMapper, SiteLock> implements ISiteLockService {
    @Autowired
    private SiteLockMapper siteLockMapper;
    @Override
    public List<TSiteLockDTO> getListById(Integer id) {
        return siteLockMapper.getListById(id);
    }
}
cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
@@ -13,10 +13,13 @@
import com.dsh.other.feignclient.activity.model.Coupon;
import com.dsh.other.feignclient.activity.model.QueryUserCouponByIdAndUserId;
import com.dsh.other.feignclient.activity.model.UserCoupon;
import com.dsh.other.feignclient.model.SiteChangeStateVO;
import com.dsh.other.mapper.SiteMapper;
import com.dsh.other.model.*;
import com.dsh.other.service.*;
import com.dsh.other.util.*;
import io.swagger.models.auth.In;
import org.aspectj.weaver.ast.Var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -56,6 +59,8 @@
    @Autowired
    private PayMoneyUtil payMoneyUtil;
    @Autowired
    private SiteMapper siteMapper;
@@ -627,4 +632,13 @@
        map.put("cash", payMoney);
        return ResultUtil.success(map);
    }
    @Override
    public Object changeState(SiteChangeStateVO vo) {
        List<Integer> siteIds = vo.getSiteIds();
        Integer type = vo.getType();
        return siteMapper.changeState(siteIds,type);
    }
}
cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteTypeServiceImpl.java
@@ -3,12 +3,17 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.other.entity.SiteType;
import com.dsh.other.mapper.SiteMapper;
import com.dsh.other.mapper.SiteTypeMapper;
import com.dsh.other.model.BaseVo;
import com.dsh.other.model.dto.siteDto.TSiteDTO;
import com.dsh.other.model.vo.siteVo.ExpireSiteSearchVO;
import com.dsh.other.model.vo.siteVo.SiteSearchVO;
import com.dsh.other.service.ISiteTypeService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@@ -19,6 +24,8 @@
@Service
public class SiteTypeServiceImpl extends ServiceImpl<SiteTypeMapper, SiteType> implements ISiteTypeService {
    @Resource
    private SiteMapper siteMapper;
    /**
     * 获取场地分类
@@ -36,4 +43,16 @@
        }
        return list;
    }
    @Override
    public List<TSiteDTO> listAll(SiteSearchVO vo) {
        return siteMapper.listAll(vo);
    }
    @Override
    public List<TSiteDTO> listExipre(ExpireSiteSearchVO vo) {
       return siteMapper.listExipre(vo);
    }
}
cloud-server-other/src/main/java/com/dsh/other/service/impl/StoreServiceImpl.java
@@ -30,7 +30,29 @@
public class StoreServiceImpl extends ServiceImpl<StoreMapper,Store> implements StoreService {
    @Autowired
    private StoreMapper storeMapper;
    @Autowired
    private GDMapGeocodingUtil gdMapGeocodingUtil;
    /**
     * 根据城市管理员id获取门店集合
     * @param id
     * @return
     */
    @Override
    public List<Store> getStoreByCityManagerId(Integer id) {
        return storeMapper.getStoreByCityManagerId(id);
    }
    /**
     * 根据门店员工id获取门店集合
     * @param id
     * @return
     */
    @Override
    public List<Store> getStoreByStoreStaffId(Integer id) {
        return storeMapper.getStoreByStoreStaffId(id);
    }
    /**
@@ -121,4 +143,6 @@
    public List<BaseVo> queryStoreByCityCode(String cityCode) throws Exception {
        return this.baseMapper.queryStoreByCityCode(cityCode);
    }
}
cloud-server-other/src/main/resources/mapper/SiteLockMapper.xml
@@ -3,4 +3,9 @@
<mapper namespace="com.dsh.other.mapper.SiteLockMapper">
    <select id="getListById" resultType="com.dsh.other.model.dto.siteDto.TSiteLockDTO">
        select * from t_site_lock
        where siteId = #{id}
        and endTime > NOW()
    </select>
</mapper>
cloud-server-other/src/main/resources/mapper/SiteMapper.xml
@@ -1,7 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsh.other.mapper.SiteMapper">
    <update id="changeState">
        update t_site set
        state = #{type}
        <where>
            <if test="siteIds != null and siteIds.size()>0">
                AND t_site.id IN
                <foreach collection="siteIds" separator="," item="id" open="(" close=")">
                    #{id}
                </foreach>
            </if>
        </where>
    </update>
    <select id="querySiteList" resultType="com.dsh.other.model.QuerySiteListVo">
        select
@@ -61,4 +72,63 @@
        </if>
        order by a.insertTime desc limit #{pageNo}, #{pageSize}
    </select>
    <select id="listAll" resultType="com.dsh.other.model.dto.siteDto.TSiteDTO">
        select t1.*,t2.name storeName,t3.name siteTypeName from t_site t1
        inner join t_store t2 on t1.storeId = t2.id
        left join t_site_type t3 on t1.siteTypeId = t3.id
        <where>
        <if test="query.objectType == 2">
        and t1.cityManagerId = #{query.objectId}
        </if>
        <if test="query.objectType == 3">
        and t2.storeStaffId = #{query.objectId}
        </if>
            <if test="query.city!=null and query.city!= ''">
                and t1.city = #{query.city}
            </if>
        <if test="query.province!=null and query.province!= ''">
            and t1.province = #{query.province}
        </if>
        <if test="query.siteTypeId!=null and query.siteTypeId!= ''">
            and t1.siteTypeId = #{query.siteTypeId}
        </if>
        <if test="query.storeName!=null and query.storeName!= ''">
            and t2.name like concat('%',#{query.storeName},'%')
        </if>
        <if test="query.name!=null and query.name!= ''">
            and t1.name like concat('%',#{query.name},'%')
        </if>
        and t1.state != 3
        </where>
    </select>
    <select id="listExipre" resultType="com.dsh.other.model.dto.siteDto.TSiteDTO">
        select t1.*,t2.name storeName,t3.name siteTypeName from t_site t1
        inner join t_store t2 on t1.storeId = t2.id
        left join t_site_type t3 on t1.siteTypeId = t3.id
        <where>
            <if test="query.objectType == 2">
                and t1.cityManagerId = #{query.objectId}
            </if>
            <if test="query.objectType == 3">
                and t2.storeStaffId = #{query.objectId}
            </if>
            <if test="query.city!=null and query.city!= ''">
                and t1.city = #{query.city}
            </if>
            <if test="query.province!=null and query.province!= ''">
                and t1.province = #{query.province}
            </if>
            <if test="query.siteTypeId!=null and query.siteTypeId!= ''">
                and t1.siteTypeId = #{query.siteTypeId}
            </if>
            <if test="query.storeName!=null and query.storeName!= ''">
                and t2.name like concat('%',#{query.storeName},'%')
            </if>
            <if test="query.name!=null and query.name!= ''">
                and t1.name like concat('%',#{query.name},'%')
            </if>
            and t1.state != 3
            and t1.insuranceEndTime &lt;= DATE_ADD(CURDATE(), INTERVAL 2 MONTH);
        </where>
    </select>
</mapper>
cloud-server-other/src/main/resources/mapper/StoreMapper.xml
@@ -19,4 +19,10 @@
    <select id="queryStoreByCityCode" resultType="com.dsh.other.model.BaseVo">
        select id, name from t_store where state = 1 and cityCode = #{cityCode}
    </select>
    <select id="getStoreByCityManagerId" resultType="com.dsh.other.entity.Store">
        select * from t_store where cityManagerId = #{id}
    </select>
    <select id="getStoreByStoreStaffId" resultType="com.dsh.other.entity.Store">
        select * from t_store where storeStaffId = #{id}
    </select>
</mapper>