44323
2023-09-23 5f804115139dfdeeb2ce950a0f584b30f94b285c
Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/PlayPai

 Conflicts:
 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
 cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java
96个文件已修改
56个文件已添加
8411 ■■■■■ 已修改文件
.idea/modules.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/workspace.xml 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/entity/GiftSearchDto.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/StuCourseResp.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/mapper/TStudentMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/model/vo/classDetails/RegisteredCourse.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/model/vo/exploreDetail/QuestionIns.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/TAppGiftService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppGiftServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/resources/mapper/TStudentMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/CouponListOfSearch.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/mapper/CouponMapper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/resources/mapper/CouponMapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CancelSourceController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java 85 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java 405 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/entity/CourseCounsum.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackagePaymentConfig.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/entity/InsertBackDto.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/entity/MoneyBack.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackage.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/entity/dto/ClassListDto.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/entity/dto/ConsumeQuery.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/entity/dto/ToHoliDto.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/feignclient/account/StudentClient.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/feignclient/model/StuCourseResp.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/mapper/CourseCounsumMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/mapper/MoneyBackMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/dto/ToClassDto.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/CourseCounsumService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/MoneyBackService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/impl/CourseCounsumServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/impl/MoneyBackServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/util/ResultUtil.java 108 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/pom.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/dto/ClassListDto.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/CouponListOfSearch.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseStuddentClient.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackagePaymentConfig.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackage.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackagePayment.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/HistoryClient.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/Site.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/mapper/TOperatorCityMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/model/MoneyBack.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/model/dto/InsertBackDto.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/util/ChineseMoneyUtils.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/util/HtmlToPdfUtils.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java 96 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java 220 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/TStudentController.java 324 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CourseCounsum.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TOperatorCity.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TSite.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TStudent.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/ConsumeQuery.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/GiftSearchDto.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/HoliSelect.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/ToClassDto.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/ToHoliDto.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/TOperatorCityService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TOperatorCityServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/util/BigDecimalToChineseAmountUtil.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/resources/mapper/TOperatorCityMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/TCoupon.html 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/TCouponEdit.html 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/classRecord.html 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage.html 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackageStudent.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord.html 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/tCoupon_add.html 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/tCoupon_edit.html 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add.html 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add_one.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add_three.html 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit_one.html 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit_three.html 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_imgAll.html 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_add.html 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_edit.html 233 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/banckmoney.html 347 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/classelct.html 283 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit.html 1102 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEditTTT.html 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit_first.html 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/trans.html 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/TCoupon.js 337 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/TCouponEdit.js 314 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/classRecord.js 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackageStudent.js 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage_info.js 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord.js 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tShop/tShopOther.js 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tShop/tShopOtherOne.js 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tShop/tShopOtherTwo.js 812 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tShop/tShop_info.js 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tShopEvaluation/tShop_info.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js 289 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/tStudent/htmlToPdf.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/controller/AskedQuestionsController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/controller/BannerController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/entity/GetHistoryDto.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/entity/Site.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/entity/TStoreOther.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/entity/TStoreOtherConfigTrue.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/mapper/TStoreOtherConfigTrueMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/mapper/TStoreOtherMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteInfoVo.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/model/dto/siteDto/GiftSearchDto.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/model/dto/siteDto/SelectDto.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/IBannerService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/TStoreOtherConfigTrueService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/TStoreOtherService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/impl/BannerServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/impl/TStoreOtherConfigTrueServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/impl/TStoreOtherServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/resources/mapper/BannerMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/resources/mapper/TStoreOtherConfigTrueMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/resources/mapper/TStoreOtherMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/modules.xml
@@ -4,7 +4,6 @@
    <modules>
      <module fileurl="file://$PROJECT_DIR$/.idea/PlayPai.iml" filepath="$PROJECT_DIR$/.idea/PlayPai.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-parent/mb-cloud-parent.iml" filepath="$PROJECT_DIR$/cloud-server-parent/mb-cloud-parent.iml" />
    </modules>
  </component>
</project>
.idea/workspace.xml
@@ -22,49 +22,16 @@
    <select />
  </component>
  <component name="ChangeListManager">
    <list default="true" id="cb08d02f-fd4f-4fa2-85fe-abd508fa83ac" name="Default Changelist" comment="9.15.1">
      <change afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/.idea/modules.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/modules.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/src/main/java/com/dsh/account/controller/AppUserController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/mapper/TAppUserMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/mapper/TAppUserMapper.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/mapper/TStudentMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/mapper/TStudentMapper.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/resources/mapper/TAppUserMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/resources/mapper/TAppUserMapper.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-account/src/main/resources/mapper/TStudentMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/resources/mapper/TStudentMapper.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/TStudentController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/TStudentController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/UserMgrController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/UserMgrController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ITStudentService.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/ITStudentService.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TStudentServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TStudentServiceImpl.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/util/ResultUtil.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/util/ResultUtil.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudent.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudent.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/tStudent/tStudent.js" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/tStudent/tStudent.js" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/controller/BannerController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/controller/BannerController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/mapper/BannerMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/mapper/BannerMapper.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/IBannerService.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/IBannerService.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/impl/BannerServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/service/impl/BannerServiceImpl.java" afterDir="false" />
    </list>
    <list default="true" id="cb08d02f-fd4f-4fa2-85fe-abd508fa83ac" name="Default Changelist" comment="学员2" />
    <option name="SHOW_DIALOG" value="false" />
    <option name="HIGHLIGHT_CONFLICTS" value="true" />
    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
    <option name="LAST_RESOLUTION" value="IGNORE" />
  </component>
  <component name="ChangesViewManager">
    <option name="groupingKeys">
      <option value="directory" />
    </option>
  </component>
  <component name="FileTemplateManagerImpl">
    <option name="RECENT_TEMPLATES">
@@ -97,48 +64,52 @@
    <option name="hideEmptyMiddlePackages" value="true" />
    <option name="showLibraryContents" value="true" />
  </component>
  <component name="PropertiesComponent"><![CDATA[{
  "keyToString": {
    "DefaultHtmlFileTemplate": "HTML File",
    "RequestMappingsPanelOrder0": "0",
    "RequestMappingsPanelOrder1": "1",
    "RequestMappingsPanelWidth0": "75",
    "RequestMappingsPanelWidth1": "75",
    "WebServerToolWindowFactoryState": "false",
    "git-widget-placeholder": "master",
    "ignore.virus.scanning.warn.message": "true",
    "last_opened_file_path": "D:/ttt/java/PlayPai/cloud-server-other/src/main/resources/mapper",
    "node.js.detected.package.eslint": "true",
    "node.js.detected.package.tslint": "true",
    "node.js.selected.package.eslint": "(autodetect)",
    "node.js.selected.package.tslint": "(autodetect)",
    "project.structure.last.edited": "模块",
    "project.structure.proportion": "0.15",
    "project.structure.side.proportion": "0.54367816",
    "spring.configuration.checksum": "7fb6c6ffe49cf7315145a28a96be3d8f",
    "vue.rearranger.settings.migration": "true"
  <component name="PropertiesComponent">{
  &quot;keyToString&quot;: {
    &quot;DefaultHtmlFileTemplate&quot;: &quot;HTML File&quot;,
    &quot;RequestMappingsPanelOrder0&quot;: &quot;0&quot;,
    &quot;RequestMappingsPanelOrder1&quot;: &quot;1&quot;,
    &quot;RequestMappingsPanelWidth0&quot;: &quot;75&quot;,
    &quot;RequestMappingsPanelWidth1&quot;: &quot;75&quot;,
    &quot;WebServerToolWindowFactoryState&quot;: &quot;false&quot;,
    &quot;git-widget-placeholder&quot;: &quot;master&quot;,
    &quot;ignore.virus.scanning.warn.message&quot;: &quot;true&quot;,
    &quot;last_opened_file_path&quot;: &quot;D:/JavaTool/PlayPai1/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent&quot;,
    &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
    &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
    &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
    &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
    &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
    &quot;project.structure.last.edited&quot;: &quot;模块&quot;,
    &quot;project.structure.proportion&quot;: &quot;0.15&quot;,
    &quot;project.structure.side.proportion&quot;: &quot;0.54367816&quot;,
    &quot;settings.editor.selected.configurable&quot;: &quot;MavenSettings&quot;,
    &quot;spring.configuration.checksum&quot;: &quot;b0c8222ba40624e179f539b98c2e8cad&quot;,
    &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
  }
}]]></component>
}</component>
  <component name="ReactorSettings">
    <option name="notificationShown" value="true" />
  </component>
  <component name="RecentsManager">
    <key name="CopyFile.RECENT_KEYS">
      <recent name="D:\ttt\java\PlayPai\cloud-server-other\src\main\resources\mapper" />
      <recent name="D:\ttt\java\PlayPai\cloud-server-management\src\main\webapp\WEB-INF\view\system\tStudent" />
      <recent name="D:\ttt\java\PlayPai\cloud-server-management\src\main\webapp\static" />
      <recent name="D:\ttt\java\PlayPai\cloud-server-parent" />
      <recent name="D:\ttt\java\PlayPai\cloud-server-management\src\main\resources\mapper" />
      <recent name="D:\JavaTool\PlayPai1\cloud-server-management\src\main\webapp\WEB-INF\view\system\tStudent" />
      <recent name="D:\JavaTool\PlayPai1\cloud-server-management\src\main\webapp\static\modular\system\coursePackage" />
      <recent name="D:\JavaTool\PlayPai1\cloud-server-management\src\main\webapp\static\modular\system\tCoupon" />
      <recent name="D:\JavaTool\PlayPai1\cloud-server-management\src\main\webapp\WEB-INF\view\system\coursePackage" />
      <recent name="D:\JavaTool\PlayPai1\cloud-server-management\src\main\webapp\WEB-INF\view\system" />
    </key>
    <key name="MoveFile.RECENT_KEYS">
      <recent name="D:\JavaTool\PlayPai1\cloud-server-management\src\main\webapp\static\modular\system\tStudent" />
      <recent name="D:\JavaTool\PlayPai1\cloud-server-parent" />
      <recent name="D:\ttt\java\PlayPai\cloud-server-parent" />
    </key>
    <key name="CopyClassDialog.RECENTS_KEY">
      <recent name="com.dsh.course.entity.dto" />
      <recent name="com.dsh.course.feignClient.other" />
      <recent name="com.dsh.course.dto" />
      <recent name="com.dsh.account.dto" />
      <recent name="com.dsh.course.mapper" />
      <recent name="com.dsh.course.service.impl" />
      <recent name="com.dsh.course.service" />
      <recent name="com.dsh.course.entity" />
      <recent name="com.dsh.course.entity.dto" />
    </key>
  </component>
  <component name="RunDashboard">
@@ -148,7 +119,20 @@
      </set>
    </option>
  </component>
  <component name="RunManager" selected="Spring Boot.AuthApplication">
  <component name="RunManager" selected="Spring Boot.ManagementApplication">
    <configuration name="BigDecimalToChineseWords" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
      <option name="MAIN_CLASS_NAME" value="com.dsh.guns.modular.system.util.BigDecimalToChineseWords" />
      <module name="mb-cloud-management" />
      <extension name="coverage">
        <pattern>
          <option name="PATTERN" value="com.dsh.guns.modular.system.util.*" />
          <option name="ENABLED" value="true" />
        </pattern>
      </extension>
      <method v="2">
        <option name="Make" enabled="true" />
      </method>
    </configuration>
    <configuration name="AccountApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
      <module name="mb-cloud-account" />
      <option name="SHORTEN_COMMAND_LINE" value="MANIFEST" />
@@ -234,15 +218,21 @@
    </configuration>
    <list>
      <item itemvalue="Spring Boot.GatewayApplication" />
      <item itemvalue="Spring Boot.UserApplication" />
      <item itemvalue="Spring Boot.AccountApplication" />
      <item itemvalue="Spring Boot.ManagementApplication" />
      <item itemvalue="Spring Boot.CourseApplication" />
      <item itemvalue="Spring Boot.OtherApplication" />
      <item itemvalue="Spring Boot.UserApplication" />
      <item itemvalue="Spring Boot.AuthApplication" />
      <item itemvalue="Spring Boot.ActivityApplication" />
      <item itemvalue="Spring Boot.CourseApplication" />
      <item itemvalue="Spring Boot.CompetitionApplication" />
      <item itemvalue="应用程序.BigDecimalToChineseWords" />
    </list>
    <recent_temporary>
      <list>
        <item itemvalue="应用程序.BigDecimalToChineseWords" />
      </list>
    </recent_temporary>
  </component>
  <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="应用程序级" UseSingleDictionary="true" transferred="true" />
  <component name="SvnConfiguration">
@@ -268,6 +258,21 @@
      <workItem from="1694826468892" duration="22165000" />
      <workItem from="1694931109193" duration="31686000" />
      <workItem from="1695084815207" duration="29663000" />
      <workItem from="1695138476053" duration="63000" />
      <workItem from="1695138628399" duration="396000" />
      <workItem from="1695139199151" duration="117000" />
      <workItem from="1695139544607" duration="173000" />
      <workItem from="1695139722530" duration="14000" />
      <workItem from="1695139741242" duration="4527000" />
      <workItem from="1695162059666" duration="1120000" />
      <workItem from="1695163191288" duration="585000" />
      <workItem from="1695170647169" duration="6776000" />
      <workItem from="1695178072108" duration="30661000" />
      <workItem from="1695250896481" duration="445000" />
      <workItem from="1695255303249" duration="37521000" />
      <workItem from="1695342171677" duration="37810000" />
      <workItem from="1695430054273" duration="24454000" />
      <workItem from="1695461202457" duration="322000" />
    </task>
    <task id="LOCAL-00001" summary="后台代码删除">
      <created>1690249807612</created>
@@ -368,7 +373,23 @@
      <option name="project" value="LOCAL" />
      <updated>1694749099246</updated>
    </task>
    <option name="localTasksCounter" value="15" />
    <task id="LOCAL-00015" summary="学员">
      <option name="closed" value="true" />
      <created>1695461057360</created>
      <option name="number" value="00015" />
      <option name="presentableId" value="LOCAL-00015" />
      <option name="project" value="LOCAL" />
      <updated>1695461057360</updated>
    </task>
    <task id="LOCAL-00016" summary="学员2">
      <option name="closed" value="true" />
      <created>1695461216122</created>
      <option name="number" value="00016" />
      <option name="presentableId" value="LOCAL-00016" />
      <option name="project" value="LOCAL" />
      <updated>1695461216122</updated>
    </task>
    <option name="localTasksCounter" value="17" />
    <servers />
  </component>
  <component name="TypeScriptGeneratedFilesManager">
@@ -389,7 +410,9 @@
    <MESSAGE value="后台代码删除" />
    <MESSAGE value="后台代码" />
    <MESSAGE value="9.15" />
    <option name="LAST_COMMIT_MESSAGE" value="9.15" />
    <MESSAGE value="学员" />
    <MESSAGE value="学员2" />
    <option name="LAST_COMMIT_MESSAGE" value="学员2" />
  </component>
  <component name="XDebuggerManager">
    <breakpoint-manager>
@@ -407,6 +430,10 @@
      </breakpoints>
    </breakpoint-manager>
  </component>
  <component name="XSLT-Support.FileAssociations.UIState">
    <expand />
    <select />
  </component>
  <component name="masterDetails">
    <states>
      <state key="ArtifactsStructureConfigurable.UI">
cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java
@@ -129,7 +129,6 @@
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
    @ResponseBody
@@ -159,9 +158,9 @@
    @ApiOperation(value = "上课首页分配课时-课程列表", tags = {"APP-开始上课"})
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
            @ApiImplicitParam(value = "分配给课包id", name = "packetId", required = true, dataType = "string"),
            @ApiImplicitParam(value = "分配给课包id", name = "packetId", required = true, dataType = "Long"),
    })
    public ResultUtil<Integer> weeksOfAddHours(Integer packetId){
    public ResultUtil<Integer> weeksOfAddHours(Long packetId){
        try {
            Integer appUserId = tokenUtil.getUserIdFormRedis();
            if(null == appUserId){
@@ -169,10 +168,12 @@
            }
            TAppGift one = appGiftService.getOne(new LambdaQueryWrapper<TAppGift>().eq(TAppGift::getUserId, appUserId));
            Boolean b= false;
            Integer i=0;
            if(one!=null && one.getNum()>0){
                 b =appGiftService.weeksOfAddHours(packetId,appUserId,one.getNum());
                 i=appGiftService.weeksOfAddHours(packetId,appUserId,one.getNum());
            }
            if(b){
            if(i==1){
                // 送完清0
                one.setNum(0);
                appGiftService.updateById(one);
cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java
@@ -73,7 +73,8 @@
    @ApiOperation(value = "联系客服-常见问题列表", tags = {"APP-探索玩湃"})
    public ResultUtil<List<QuestionIns>> queryFrequentlyAskedQuestionDetails(){
        try {
            return ResultUtil.success(tsService.queryQuestionData());
            List<QuestionIns> questionIns = tsService.queryQuestionData();
            return ResultUtil.success(questionIns);
        }catch (Exception e){
            return ResultUtil.runErr();
        }
cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java
@@ -1,11 +1,11 @@
package com.dsh.account.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.account.dto.CreateHistoryDto;
import com.dsh.account.dto.GetHistoryDto;
import com.dsh.account.dto.StudentSearch;
import com.dsh.account.dto.TStudentDto;
import com.dsh.account.dto.*;
import com.dsh.account.entity.GiftSearchDto;
import com.dsh.account.entity.TStudent;
import com.dsh.account.feignclient.course.CoursePaymentClient;
import com.dsh.account.feignclient.course.model.TCoursePackagePayment;
import com.dsh.account.model.StudentVo;
import com.dsh.account.service.TStudentService;
import com.dsh.account.util.ResultUtil;
@@ -15,7 +15,9 @@
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.swagger2.mappers.ModelMapper;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
@@ -130,6 +132,8 @@
    }
    /**
     * 根据名称模糊搜索学员
     * @param name
@@ -180,4 +184,32 @@
        List<GetHistoryDto> getHistoryDtos =  studentService.getHistory();
        return getHistoryDtos;
    }
    @Resource
    private CoursePaymentClient paymentClient;
    @ResponseBody
    @PostMapping("/student/giftSelect")
    public  List<SelectDto> giftSelect(@RequestBody GiftSearchDto giftSearchDto){
        System.out.println("======giftSelect=========giftSearchDto===="+giftSearchDto);
//       Integer appId = studentService.getGiftSelect(giftSearchDto);
        TCoursePackagePayment coursePackagePaymentById = paymentClient.getCoursePackagePaymentById(giftSearchDto.getId());
//        System.out.println("=======giftSelect======appId====>"+appId);
        List<TStudent> selectDtos =  studentService.list(new QueryWrapper<TStudent>()
                .select("name, id")
                .eq("state", 1)
                .eq("name", giftSearchDto.getName()).eq("phone",giftSearchDto.getPhone()).ne("appUserId",coursePackagePaymentById.getAppUserId()));
        List<SelectDto> list = new ArrayList<>();
        for (TStudent student : selectDtos) {
            SelectDto selectDto = new SelectDto();
            selectDto.setValue(student.getName());
            selectDto.setId(student.getId());
            list.add(selectDto);
        }
        System.out.println("=======giftSelect======selectDtos====>"+list);
        return list;
    }
}
cloud-server-account/src/main/java/com/dsh/account/entity/GiftSearchDto.java
New file
@@ -0,0 +1,11 @@
package com.dsh.account.entity;
import io.swagger.models.auth.In;
import lombok.Data;
@Data
public class GiftSearchDto {
    String name;
    String phone;
    Integer id;
}
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java
@@ -48,6 +48,10 @@
    @PostMapping("/base/coursePack/delPaymentCoursePackage")
    public boolean delPaymentCoursePackage(@RequestBody Integer payId);
    @PostMapping("/base/coursePack/getCoursePackagePaymentById")
    public TCoursePackagePayment getCoursePackagePaymentById(@RequestBody Integer id);
    @PostMapping("/base/coursePack/updatePaymentCoursePackage")
    void updatePaymentCoursePackage(@RequestBody TCoursePackagePayment coursePackagePayment);
@@ -65,7 +69,7 @@
    List<TCoursePackagePayment> getCoursePackagePaymentOfCode(@RequestBody String code);
    @PostMapping("/base/coursePack/sendHours")
    Boolean sendHours(String s);
    Integer sendHours(String s);
    @PostMapping("/base/coursePack/getClassHour")
    Integer getClassHour(Integer courseConfigId);
cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/StuCourseResp.java
@@ -6,6 +6,7 @@
@Data
public class StuCourseResp {
    private Long id;
    @ApiModelProperty(value = "课包id")
    private Integer courseId;
cloud-server-account/src/main/java/com/dsh/account/mapper/TStudentMapper.java
@@ -1,10 +1,8 @@
package com.dsh.account.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.account.dto.CreateHistoryDto;
import com.dsh.account.dto.GetHistoryDto;
import com.dsh.account.dto.StudentSearch;
import com.dsh.account.dto.TStudentDto;
import com.dsh.account.dto.*;
import com.dsh.account.entity.GiftSearchDto;
import com.dsh.account.entity.TStudent;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -30,4 +28,8 @@
    void createHistory(@Param("createHistoryDto") CreateHistoryDto createHistoryDto);
    List<GetHistoryDto> getHistory();
    Integer getGiftSelect(@Param("giftSearchDto")GiftSearchDto giftSearchDto);
}
cloud-server-account/src/main/java/com/dsh/account/model/vo/classDetails/RegisteredCourse.java
@@ -6,6 +6,8 @@
@Data
public class RegisteredCourse {
    private Long id;
    @ApiModelProperty(value = "课程ID")
    private Integer courseId;
cloud-server-account/src/main/java/com/dsh/account/model/vo/exploreDetail/QuestionIns.java
@@ -8,12 +8,12 @@
public class QuestionIns {
    @ApiModelProperty(value = "问题id")
    private Integer noticeId;
    private Integer quesId;
    @ApiModelProperty(value = "问题标题")
    private String noticeTitle;
    private String quesTitle;
    @ApiModelProperty(value = "答复内容")
    private String noticeContents;
    private String quesContents;
}
cloud-server-account/src/main/java/com/dsh/account/service/TAppGiftService.java
@@ -13,7 +13,7 @@
 */
public interface TAppGiftService extends IService<TAppGift> {
    Boolean weeksOfAddHours(Integer packetId,Integer appUserId,Integer num);
    Integer weeksOfAddHours(Long packetId,Integer appUserId,Integer num);
}
cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java
@@ -1,10 +1,8 @@
package com.dsh.account.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.account.dto.CreateHistoryDto;
import com.dsh.account.dto.GetHistoryDto;
import com.dsh.account.dto.StudentSearch;
import com.dsh.account.dto.TStudentDto;
import com.dsh.account.dto.*;
import com.dsh.account.entity.GiftSearchDto;
import com.dsh.account.entity.TStudent;
import com.dsh.account.feignclient.competition.model.PurchaseRecordVo;
import com.dsh.account.feignclient.course.model.RecordAppoint;
@@ -112,4 +110,7 @@
    void createHistory(CreateHistoryDto createHistoryDto);
    List<GetHistoryDto> getHistory();
    Integer getGiftSelect(GiftSearchDto giftSearchDto);
}
cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppGiftServiceImpl.java
@@ -24,8 +24,8 @@
    private CoursePaymentClient coursePaymentClient;
    @Override
    public Boolean weeksOfAddHours(Integer packetId,Integer appUserId,Integer num) {
        Boolean b = coursePaymentClient.sendHours(packetId+"_"+appUserId+"_"+num);
    public Integer weeksOfAddHours(Long packetId,Integer appUserId,Integer num) {
        Integer b = coursePaymentClient.sendHours(packetId+"_"+appUserId+"_"+num);
        return b;
    }
}
cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
@@ -197,6 +197,7 @@
                    coursePackIds = stuCoursePayment.stream().map(StuCourseResp::getCourseId).collect(Collectors.toList());
                    for (StuCourseResp tCoursePackagePayment : stuCoursePayment) {
                        RegisteredCourse course = new RegisteredCourse();
                        course.setId(tCoursePackagePayment.getId());
                        course.setCourseId(tCoursePackagePayment.getCourseId());
                        course.setCourseName(tCoursePackagePayment.getCourseName());
                        course.setTotalNums(ToolUtil.isEmpty(tCoursePackagePayment.getTotalCourseNums()) ? 0 : tCoursePackagePayment.getTotalCourseNums());
@@ -205,6 +206,7 @@
                        course.setPeriodOfValidity(tCoursePackagePayment.getPeriodOfValidity());
                        courseList.add(course);
                    }
                }
                classInfoVo.setCourseList(courseList);
                List<ExerciseVideo> stuCourseOfVideoList = voclClient.getStuCourseOfVideoList(coursePackIds);
cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java
@@ -3,14 +3,8 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.account.dto.CreateHistoryDto;
import com.dsh.account.dto.GetHistoryDto;
import com.dsh.account.dto.StudentSearch;
import com.dsh.account.dto.TStudentDto;
import com.dsh.account.entity.Coach;
import com.dsh.account.entity.TAppUser;
import com.dsh.account.entity.TCourseInfoRecord;
import com.dsh.account.entity.TStudent;
import com.dsh.account.dto.*;
import com.dsh.account.entity.*;
import com.dsh.account.feignclient.activity.IntroduceRewardsClient;
import com.dsh.account.feignclient.activity.UserConponClient;
import com.dsh.account.feignclient.activity.model.IntrduceOfUserRequest;
@@ -834,5 +828,12 @@
        return this.baseMapper.getHistory();
    }
    @Override
    public Integer getGiftSelect(GiftSearchDto giftSearchDto) {
        return this.baseMapper.getGiftSelect(giftSearchDto);
    }
}
cloud-server-account/src/main/resources/mapper/TStudentMapper.xml
@@ -70,4 +70,11 @@
    </select>
    <select id="getGiftSelect" resultType="java.lang.Integer">
            SELECT appUserId FROM t_student
            WHERE name = #{giftSearchDto.name}
              AND phone = #{giftSearchDto.phone}
    </select>
</mapper>
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/CouponListOfSearch.java
@@ -22,5 +22,8 @@
    private Integer state;
    private Page<Map<String, Object>> page;
    private String cityCode;
    private Integer storeId;
}
cloud-server-activity/src/main/java/com/dsh/activity/mapper/CouponMapper.java
@@ -28,7 +28,11 @@
                                                      @Param("userPopulation")Integer userPopulation,
                                                      @Param("status")Integer status,
                                                      @Param("state")Integer state,
                                                      @Param("page")Page<Map<String, Object>> page);
                                                      @Param("page")Page<Map<String, Object>> page,
                                                      @Param("cityCode") String cityCode,
                                                      @Param("storeId")Integer storeId
                                                      );
    List<Map<String, Object>> queryCouponExamineList(@Param("name")String name,
                                                     @Param("type")Integer type,
cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponServiceImpl.java
@@ -105,7 +105,7 @@
    @Override
    public List<Map<String, Object>> queryCouponListOfSearch(CouponListOfSearch ofSearch) {
        return this.baseMapper.queryCouponListOfSearch(ofSearch.getName(),ofSearch.getType(),ofSearch.getDistributionMethod(),ofSearch.getUserPopulation(),ofSearch.getStatus(),ofSearch.getState(),ofSearch.getPage());
        return this.baseMapper.queryCouponListOfSearch(ofSearch.getName(),ofSearch.getType(),ofSearch.getDistributionMethod(),ofSearch.getUserPopulation(),ofSearch.getStatus(),ofSearch.getState(),ofSearch.getPage(),ofSearch.getCityCode(),ofSearch.getStoreId());
    }
    @Override
cloud-server-activity/src/main/resources/mapper/CouponMapper.xml
@@ -31,6 +31,19 @@
        illustrate
        from t_coupon
        where 1 = 1
        <if test="cityCode != null">
           and id in(
            SELECT DISTINCT couponId FROM
            (SELECT DISTINCT couponId
            from t_coupon_store
            WHERE storeId = #{storeId}
            UNION ALL
            SELECT DISTINCT couponId
            from t_coupon_city
            WHERE provinceCode = #{cityCode}) o)
        </if>
        <if test="name != null">
            and `name` like concat('%', #{name}, '%')
        </if>
cloud-server-course/pom.xml
@@ -113,6 +113,12 @@
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.8.10.ALL</version>
        </dependency>
        <dependency>
            <groupId>com.huaweicloud</groupId>
            <artifactId>esdk-obs-java-bundle</artifactId>
            <version>3.23.5</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
    <build>
cloud-server-course/src/main/java/com/dsh/course/controller/CancelSourceController.java
@@ -7,6 +7,7 @@
import com.dsh.course.feignclient.model.GetStuSessionList;
import com.dsh.course.feignclient.model.PurchaseRecordVo;
import com.dsh.course.service.CancelledClassesService;
import com.dsh.course.service.CourseCounsumService;
import com.dsh.course.service.TCoursePackagePaymentService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
@@ -22,7 +23,6 @@
@RestController
@RequestMapping("")
public class CancelSourceController {
    @Autowired
    private CancelledClassesService caceService;
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
@@ -5,6 +5,7 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dsh.course.entity.*;
import com.dsh.course.feignclient.account.AppUserClient;
@@ -17,6 +18,7 @@
import com.dsh.course.feignclient.model.*;
import com.dsh.course.feignclient.other.StoreClient;
import com.dsh.course.feignclient.other.model.Store;
import com.dsh.course.mapper.CoursePackageSchedulingMapper;
import com.dsh.course.model.*;
import com.dsh.course.model.dto.DiscountJsonDto;
import com.dsh.course.model.vo.CourseDetailRequest;
@@ -33,6 +35,7 @@
import io.swagger.annotations.ApiOperation;
import net.bytebuddy.asm.Advice;
import org.aspectj.weaver.ast.Var;
import io.swagger.models.auth.In;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
@@ -115,6 +118,11 @@
    private StoreClient storeClient;
    @Autowired
    private TCoursePackageDiscountService discountService;
    @Resource
    private CoursePackageSchedulingMapper coursePackageSchedulingMapper;
    private final SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm");
    /**
@@ -231,6 +239,7 @@
                TCoursePackage tCoursePackage = tcpService.getById(tCoursePackagePayment.getCoursePackageId());
                StuCourseResp resp = new StuCourseResp();
                resp.setCourseId(tCoursePackage.getId());
                resp.setId(tCoursePackagePayment.getId());
                resp.setCourseName(tCoursePackage.getName());
                resp.setTotalCourseNums(tCoursePackagePayment.getTotalClassHours());
                resp.setResidueNums(tCoursePackagePayment.getLaveClassHours());
@@ -263,12 +272,12 @@
                    .groupBy("coursePackageId"));
            if (list.size() >  0){
                for (TCoursePackagePayment tCoursePackagePayment : list) {
                    CoursePackageStudent packageStudent = cspsService.getOne(new LambdaQueryWrapper<CoursePackageStudent>()
                    List<CoursePackageStudent> packageStudent = cspsService.list(new LambdaQueryWrapper<CoursePackageStudent>()
                            .eq(CoursePackageStudent::getAppUserId, courseRest.getAppUserId())
                            .eq(CoursePackageStudent::getStudentId,courseRest.getStuId())
                            .eq(CoursePackageStudent::getCoursePackagePaymentId,tCoursePackagePayment.getId())
                            .eq(CoursePackageStudent::getCoursePackageId,tCoursePackagePayment.getCoursePackageId()));
                    if (ToolUtil.isEmpty(packageStudent) || (ToolUtil.isNotEmpty(packageStudent) && packageStudent.getReservationStatus() != 1)){
                    if (ToolUtil.isEmpty(packageStudent) || (ToolUtil.isNotEmpty(packageStudent) && packageStudent.get(0).getReservationStatus() == 1)){
//                        没有预约过的/已经取消了的
                        TCoursePackage tCoursePackage = tcpService.getById(tCoursePackagePayment.getCoursePackageId());
                        CoursePackagePaymentConfig paymentConfig = icppcService.getOne(new QueryWrapper<CoursePackagePaymentConfig>()
@@ -755,6 +764,10 @@
            if(null == userIdFormRedis){
                return ResultUtil.tokenErr();
            }
            Integer couponId = request.getConponId();
            if(couponId==null || couponId==0){
                request.setConponId(null);
            }
            return packagePaymentService.ContinuationOrpaymentCourse(userIdFormRedis,request);
        }catch (Exception e){
            return ResultUtil.runErr();
@@ -1027,6 +1040,11 @@
                .eq("code",code));
    }
    @PostMapping("/base/coursePack/getCoursePackagePaymentById")
    public TCoursePackagePayment getCoursePackagePaymentById(@RequestBody Integer id){
        return packagePaymentService.getById(id);
    }
    @PostMapping("/base/coursePack/delPaymentCoursePackage")
    public boolean delPaymentCoursePackage(@RequestBody Integer payId){
        return packagePaymentService.removeById(payId);
@@ -1084,11 +1102,17 @@
    // 2.0 送课时
    @PostMapping("/base/coursePack/sendHours")
    public Boolean sendHours(@RequestBody  String s){
    public Integer sendHours(@RequestBody  String s){
        String[] split = s.split("_");
        TCoursePackagePayment byId = packagePaymentService.getById(Integer.valueOf(split[0]));
        TCoursePackagePayment byId = packagePaymentService.getById(Long.valueOf(split[0]));
        byId.setTotalClassHours(byId.getTotalClassHours()+Integer.valueOf(split[2]));
        return packagePaymentService.updateById(byId);
        boolean b = packagePaymentService.updateHoursById(byId,Integer.valueOf(split[2]));
        if(b){
            return 1;
        }else {
            return 0;
        }
    }
@@ -1143,6 +1167,16 @@
    }
    @ResponseBody
    @PostMapping("/coursePackagePayment/CountqueryByClassId")
   public   Integer  CountqueryByClassId(@RequestBody Integer id){
        int coursePackageId = packagePaymentService.count(new QueryWrapper<TCoursePackagePayment>().eq("coursePackageId", id));
        return coursePackageId;
    }
    /**
     * 修改数据
     * @param coursePackagePayment
@@ -1173,28 +1207,27 @@
            if(null == appUserId){
                return ResultUtil.tokenErr();
            }
            TCoursePackagePayment packagePayment = packagePaymentService.getOne(new LambdaQueryWrapper<TCoursePackagePayment>()
            List<TCoursePackagePayment> packagePayment = packagePaymentService.list(new LambdaQueryWrapper<TCoursePackagePayment>()
                    .eq(TCoursePackagePayment::getCoursePackageId,courseID )
                    .eq(TCoursePackagePayment::getAppUserId,appUserId)
                    .eq(TCoursePackagePayment::getStudentId,stuId)
            );
            if (ToolUtil.isEmpty(packagePayment)){
            if (ToolUtil.isEmpty(packagePayment) || packagePayment.size()==0){
                return ResultUtil.error("该用户未购买该课包");
            }
            List<CoursePackageStudent> coursePackageStudent = cspsService.list(new LambdaQueryWrapper<CoursePackageStudent>()
                    .eq(CoursePackageStudent::getCoursePackageId,packagePayment.getCoursePackageId())
                    .eq(CoursePackageStudent::getCoursePackagePaymentId,courseID)
                    .in(CoursePackageStudent::getCoursePackagePaymentId,packagePayment.stream().map(TCoursePackagePayment::getId).collect(Collectors.toList()))
                    .eq(CoursePackageStudent::getCoursePackageId,courseID)
                    .eq(CoursePackageStudent::getStudentId,stuId)
                    .eq(CoursePackageStudent::getAppUserId,appUserId)
            );
            if (ToolUtil.isNotEmpty(coursePackageStudent)){
                for (CoursePackageStudent packageStudent : coursePackageStudent) {
                    if(packageStudent.getReservationStatus()==0){
                    if(packageStudent.getReservationStatus()==1){
                        packageStudent.setSignInOrNot(2);
                        packageStudent.setInsertTime(simpleDateFormat.parse(time));
                        cspsService.updateById(packageStudent);
                        cspsService.updateSignInOrNotById(packageStudent.getId());
                    }
                }
@@ -1227,6 +1260,8 @@
            map.put("lon",lon);
            map.put("lat",lat);
            String time1 = courseDetailReq.getTime();
            // 找出门店的所有课程 排出体验
            List<TCoursePackage> list = tcpService.list(new LambdaQueryWrapper<TCoursePackage>().eq(TCoursePackage::getStoreId, courseDetailReq.getStoreId()).ne(TCoursePackage::getType, 3).like(TCoursePackage::getClassWeeks,week));
            List<Integer> collect = list.stream().map(TCoursePackage::getId).collect(Collectors.toList());
@@ -1236,6 +1271,7 @@
            // 找出购买的课包
            List<TCoursePackagePayment> list1 = packagePaymentService.list(new LambdaQueryWrapper<TCoursePackagePayment>().eq(TCoursePackagePayment::getAppUserId, courseDetailReq.getAppUserId()).eq(TCoursePackagePayment::getStudentId, courseDetailReq.getStuId()).in(TCoursePackagePayment::getCoursePackageId, collect));
            List<Integer> collect1 = list1.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList());
            List<Long> ids = list1.stream().map(TCoursePackagePayment::getId).collect(Collectors.toList());
            for (TCoursePackage tCoursePackage : list) {
                DetailsListVo detailsListVo = new DetailsListVo();
                detailsListVo.setId(tCoursePackage.getId());
@@ -1257,7 +1293,30 @@
                }
                detailsListVo.setNum(tCoursePackage.getNeedNum());
                if (collect1.contains(tCoursePackage.getId())) {
                    detailsListVo.setType(1);
                    // 找出排课记录
                    List<CoursePackageScheduling> list3 = coursePackageSchedulingMapper.selectList(new LambdaQueryWrapper<CoursePackageScheduling>()
                            .eq(CoursePackageScheduling::getCoursePackageId, tCoursePackage.getId())
                            .like(CoursePackageScheduling::getClassDate, courseDetailReq.getTime())
                    );
                    List<Long> collect2 = list3.stream().map(CoursePackageScheduling::getId).collect(Collectors.toList());
                    if(collect2.size()==0){
                        collect2.add(-1l);
                    }
                    List<CoursePackageStudent> list4 = cspsService.list(new LambdaQueryWrapper<CoursePackageStudent>()
                            .eq(CoursePackageStudent::getAppUserId, courseDetailReq.getAppUserId())
                            .eq(CoursePackageStudent::getCoursePackageId, tCoursePackage.getId())
                            .in(CoursePackageStudent::getCoursePackageSchedulingId, collect2).
                                    in(CoursePackageStudent::getCoursePackagePaymentId, ids)
                    );
                        detailsListVo.setType(1);
                    if(list4.size()>0){
                        Integer signInOrNot = list4.get(0).getSignInOrNot();
                        if(signInOrNot==2){
                            detailsListVo.setType(3);
                        }
                    }
                } else {
                    detailsListVo.setType(2);
                }
cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java
@@ -4,23 +4,30 @@
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dsh.course.entity.StudentClassInfo;
import com.dsh.course.entity.TCoursePackagePayment;
import com.dsh.course.entity.dto.ClassListDto;
import com.dsh.course.entity.dto.SelectDto;
import com.dsh.course.entity.dto.updateTimeDto;
import com.dsh.course.entity.*;
import com.dsh.course.entity.dto.*;
import com.dsh.course.feignclient.account.AppUserClient;
import com.dsh.course.service.CoursePackageStudentService;
import com.dsh.course.service.TCoursePackagePaymentService;
import com.dsh.course.feignclient.account.StudentClient;
import com.dsh.course.feignclient.account.model.Student;
import com.dsh.course.model.dto.ToClassDto;
import com.dsh.course.service.*;
import com.dsh.course.util.ResultUtil;
import com.dsh.course.util.UUIDUtil;
import io.swagger.annotations.Api;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.swing.text.html.parser.Entity;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Api
@CrossOrigin
@@ -43,12 +50,13 @@
//        Date maxDate = studentService.getMaxDate(tStudentId);
        Date minDate = studentService.getMinDate(tStudentId);
        System.out.println("===========>"+studentClassInfo);
        Integer totalHours = studentClassInfo.getTotalHours();
        Integer hasHours = studentClassInfo.getRestHours();
        Integer restHours = totalHours-hasHours;
        studentClassInfo.setHasHours(restHours);
        studentClassInfo.setInDate(minDate);
        System.out.println("===========>"+studentClassInfo);
        return studentClassInfo;
    }
    //获取学员课程列表
@@ -57,6 +65,9 @@
    public List<ClassListDto> listClass(@RequestParam("tStudentId")Integer tStudentId) {
        System.out.println("==========getClassList===tStudentId===="+tStudentId);
    List<ClassListDto> listDtos = studentService.getClassList(tStudentId);
    for (ClassListDto dto : listDtos){
        dto.setHasClassHours(dto.getTotalClassHours()-dto.getLaveClassHours());
    }
    System.out.println("======listDtos======"+listDtos);
    return  listDtos;
@@ -105,4 +116,382 @@
    }
    //根据payid获取对应门店的常规课程
    @Autowired
    private  TCoursePackageService packageService;
    @RequestMapping("/holiSelect")
    @ResponseBody
    public List<SelectDto> getHoliSelect(@RequestParam("courseId")Integer id){
        TCoursePackage byId = packageService.getById(id);
        Integer storeId = byId.getStoreId();
        List<TCoursePackage> list = packageService.list(new QueryWrapper<TCoursePackage>()
                .select("id", "name")
                .eq("storeId", storeId)
                .eq("type","2")
        );
        List<SelectDto> selectDtos = new ArrayList<>();
        for (TCoursePackage t :list){
            SelectDto selectDto = new SelectDto();
            selectDto.setId(t.getId());
            selectDto.setValue(t.getName());
            selectDtos.add(selectDto);
        }
        return selectDtos;
    }
    @RequestMapping("/transSelect")
    @ResponseBody
    public List<SelectDto> getTransSelect(@RequestParam("courseId")Integer id){
        TCoursePackage byId = packageService.getById(id);
        Integer storeId = byId.getStoreId();
        List<TCoursePackage> list = packageService.list(new QueryWrapper<TCoursePackage>()
                .select("id", "name")
                .eq("storeId", storeId)
                .eq("type","1")
        );
        List<SelectDto> selectDtos = new ArrayList<>();
        for (TCoursePackage t :list){
            SelectDto selectDto = new SelectDto();
            selectDto.setId(t.getId());
            selectDto.setValue(t.getName());
            selectDtos.add(selectDto);
        }
        return selectDtos;
    }
    @Autowired
    private CourseCounsumService counsumService;
    @RequestMapping("/queryCounsum")
    @ResponseBody
    public List<CourseCounsum> queryCounsum(@RequestBody ConsumeQuery consumeQuery){
        System.out.println("======queryCounsum==========="+consumeQuery);
        QueryWrapper<CourseCounsum> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("paymentId",consumeQuery.getPayId());
        if (consumeQuery.getChangeType()!=null){
            queryWrapper.eq("changeType", consumeQuery.getChangeType());
        }
        if (consumeQuery.getStart()!=null){
            queryWrapper.between("insertTime", consumeQuery.getStart(), consumeQuery.getEnd());
        }
        if (consumeQuery.getReason()!=null&&consumeQuery.getReason()!=""){
            queryWrapper.like("reason", consumeQuery.getReason());
        }
        List<CourseCounsum> list = counsumService.list(queryWrapper);
//        List<CourseCounsum> list = counsumService.list(new QueryWrapper<CourseCounsum>().eq("paymentId", consumeQuery.getPayId()).eq("changeType", consumeQuery.getChangeType()).between("insertTime", consumeQuery.getStart(), consumeQuery.getEnd()).like("reason", consumeQuery.getReason()));
        return list;
    }
    @RequestMapping("/insertBack")
    @ResponseBody
    public void insertBack(@RequestBody InsertBackDto insertBackDto){
        MoneyBack moneyBack = new MoneyBack();
        moneyBack.setStudentId(insertBackDto.getId());
        moneyBack.setStatus(0);
        moneyBack.setInsertTime(new Date());
        moneyBack.setIds(insertBackDto.getIds());
        moneyBackService.save(moneyBack);
    }
    @RequestMapping("/queryByIds")
    @ResponseBody
    public List<TCoursePackagePayment> queryByIds(@RequestParam("ids")String ids){
        List<TCoursePackagePayment> paymentList = paymentService.list(new QueryWrapper<TCoursePackagePayment>()
                .in("id", Arrays.asList(ids.split(","))));
        System.out.println("========client==>"+paymentList);
        return paymentList;
    }
    @RequestMapping("/changeStatus")
    @ResponseBody
    public void changeStatus(@RequestParam("id")Integer id){
        MoneyBack byId = moneyBackService.getById(id);
        byId.setStatus(1);
        moneyBackService.updateById(byId);
    }
    @RequestMapping("/zeroClass")
    @ResponseBody
    public void zeroClass(@RequestParam("id")Integer id){
        MoneyBack byId = moneyBackService.getById(id);
        String[] split = byId.getIds().split(",");
        System.out.println("========split===>"+split);
        List<TCoursePackagePayment> id1 = paymentService.list(new QueryWrapper<TCoursePackagePayment>().in("id", split));
        for (TCoursePackagePayment o :id1){
            o.setTotalClassHours(0);
            o.setLaveClassHours(0);
            o.setAppUserId(null);
        }
        paymentService.updateBatchById(id1);
    }
    @RequestMapping("/cancel")
    @ResponseBody
    public void cancel(@RequestParam("ids")String ids){
        String[] split = ids.split(",");
        List<CoursePackageStudent> coursePackagePaymentId = studentService.list(new QueryWrapper<CoursePackageStudent>().in("coursePackagePaymentId", split));
      for (CoursePackageStudent student :coursePackagePaymentId){
          student.setReservationStatus(2);
          student.setAppUserId(null);
      }
        studentService.updateBatchById(coursePackagePaymentId);
    }
    @Autowired
    private MoneyBackService moneyBackService;
    @RequestMapping("/getMoneyBack")
    @ResponseBody
    public List<MoneyBack> getMoneyBack(@RequestParam("tStudentId")Integer tStudentId){
        List<MoneyBack> moneyBacksck = moneyBackService.list(new QueryWrapper<MoneyBack>().eq("studentId", tStudentId));
        return moneyBacksck;
    }
    //课程转移
    @RequestMapping("/toClass")
    @ResponseBody
    public void toClass(@RequestBody ToClassDto toClassDto){
        System.out.println("===========到达getSelect======="+toClassDto);
        TCoursePackagePayment orinPay = paymentService.getOne(new QueryWrapper<TCoursePackagePayment>().eq("id", toClassDto.getId()));
        TCoursePackagePayment studentPay = paymentService.getOne(new QueryWrapper<TCoursePackagePayment>().eq("studentId", toClassDto.getToStudentId()).eq("coursePackageId",orinPay.getCoursePackageId()));
        if (studentPay!=null) {
            System.out.println("======orinPay=====>" + orinPay);
            System.out.println("======studentPay=====>" + studentPay);
            Integer laveClassHours = orinPay.getLaveClassHours();
            Integer totalClassHours = orinPay.getTotalClassHours();
            orinPay.setTotalClassHours(0);
            orinPay.setLaveClassHours(0);
            orinPay.setAppUserId(null);
            paymentService.updateById(orinPay);
            CourseCounsum courseCounsum = new CourseCounsum();
            courseCounsum.setInsertTime(new Date());
            courseCounsum.setReason("转课");
            courseCounsum.setNum(laveClassHours);
            courseCounsum.setChangeType(0);
            courseCounsum.setPaymentId(orinPay.getId());
            counsumService.save(courseCounsum);
            Integer laveClassHours1 = studentPay.getLaveClassHours();
            Integer totalClassHours1 = studentPay.getTotalClassHours();
            int total = totalClassHours + totalClassHours1;
            int lave = laveClassHours + laveClassHours1;
            studentPay.setAppUserId(null);
            studentPay.setLaveClassHours(lave);
            studentPay.setTotalClassHours(total);
            paymentService.updateById(studentPay);
            CourseCounsum courseCounsum1 = new CourseCounsum();
            courseCounsum1.setInsertTime(new Date());
            courseCounsum1.setReason("转课");
            courseCounsum1.setNum(laveClassHours);
            courseCounsum1.setChangeType(1);
            courseCounsum1.setPaymentId(studentPay.getId());
            counsumService.save(courseCounsum1);
        }else {
            orinPay.setTotalClassHours(0);
            orinPay.setLaveClassHours(0);
            orinPay.setAppUserId(null);
            paymentService.updateById(orinPay);
            CourseCounsum courseCounsum = new CourseCounsum();
            courseCounsum.setInsertTime(new Date());
            courseCounsum.setReason("赠课");
            courseCounsum.setNum(orinPay.getLaveClassHours());
            courseCounsum.setChangeType(0);
            courseCounsum.setPaymentId(orinPay.getId());
            counsumService.save(courseCounsum);
            Student student = studentClient.queryStudentById(toClassDto.getToStudentId());
            TCoursePackagePayment to = new TCoursePackagePayment();
            to.setStudentId(toClassDto.getToStudentId());
            to.setTotalClassHours(orinPay.getTotalClassHours());
            to.setLaveClassHours(orinPay.getLaveClassHours());
            to.setCoursePackageId(orinPay.getCoursePackageId());
            to.setState(1);
            to.setAppUserId(student.getAppUserId());
            to.setPayStatus(2);
            to.setStatus(1);
            to.setInsertTime(new Date());
            paymentService.save(to);
            CourseCounsum courseCounsum1 = new CourseCounsum();
            courseCounsum1.setInsertTime(new Date());
            courseCounsum1.setReason("赠课");
            courseCounsum1.setNum(orinPay.getLaveClassHours());
            courseCounsum1.setChangeType(1);
            courseCounsum1.setPaymentId(to.getId());
            counsumService.save(courseCounsum);
        }
    }
    @Resource
    private StudentClient studentClient;
    @RequestMapping(value = "/toHoli",produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = "application/json;charset=UTF-8")
    @ResponseBody
    public String toHoli(@RequestBody ToHoliDto toHoliDto){
        String [] ids = toHoliDto.getIds();
        List<String> strings = new ArrayList<>();
        for (String id : ids){
            //扣除课时
            TCoursePackagePayment payment = paymentService.getById(id);
            System.out.println("=====byId========="+payment);
            Integer laveClassHours = payment.getLaveClassHours();
            Integer classNum = toHoliDto.getClassNum();
            Integer totalClassHours = payment.getTotalClassHours();
            Student student = studentClient.queryStudentById(payment.getStudentId());
            if (laveClassHours < classNum){
                strings.add(student.getName()); continue;
            }
            Integer laveClassHoursnew = laveClassHours - classNum;
            Integer totalClassHoursnew = totalClassHours - classNum;
            payment.setLaveClassHours(laveClassHoursnew);
            payment.setTotalClassHours(totalClassHoursnew);
            payment.setAppUserId(null);
            paymentService.updateById(payment);
            //获取student信息
            //新增课时
            TCoursePackagePayment holi = new TCoursePackagePayment();
            holi.setAppUserId(student.getAppUserId());
            holi.setStudentId(student.getId());
            holi.setCoursePackageId(toHoliDto.getClassId());
            holi.setTotalClassHours(toHoliDto.getClassNum());
            holi.setLaveClassHours(toHoliDto.getClassNum());
            holi.setState(1);
            holi.setInsertTime(new Date());
            paymentService.save(holi);
            System.out.println("保存成功=============》="+holi);
        }
        String[] stringArray = strings.toArray(new String[strings.size()]);
        String join = StringUtils.join(stringArray, ",");
    System.out.println("==========join========"+join);
        return join;
    }
    @RequestMapping(value = "/toTrans",produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = "application/json;charset=UTF-8")
    @ResponseBody
    public String toTrans(@RequestBody ToHoliDto toHoliDto){
        String [] ids = toHoliDto.getIds();
        List<String> strings = new ArrayList<>();
        for (String id : ids){
            //扣除课时
            TCoursePackagePayment payment = paymentService.getById(id);
            System.out.println("=====byId========="+payment);
            Integer laveClassHours = payment.getLaveClassHours();
            Integer classNum = toHoliDto.getClassNum();
            Integer totalClassHours = payment.getTotalClassHours();
            Student student = studentClient.queryStudentById(payment.getStudentId());
//            if (laveClassHours < classNum){
//                strings.add(student.getName()); continue;
//            }
//
//            Integer laveClassHoursnew = laveClassHours - classNum;
//            Integer totalClassHoursnew = totalClassHours - classNum;
            payment.setLaveClassHours(0);
            payment.setTotalClassHours(0);
            payment.setAppUserId(null);
            paymentService.updateById(payment);
            //获取student信息
            //新增课时
            TCoursePackagePayment holi = new TCoursePackagePayment();
            holi.setAppUserId(student.getAppUserId());
            holi.setStudentId(student.getId());
            holi.setCoursePackageId(toHoliDto.getClassId());
            holi.setTotalClassHours(laveClassHours);
            holi.setLaveClassHours(laveClassHours);
            holi.setState(1);
            holi.setInsertTime(new Date());
            paymentService.save(holi);
            System.out.println("保存成功=============》="+holi);
        }
        String[] stringArray = strings.toArray(new String[strings.size()]);
        String join = StringUtils.join(stringArray, ",");
        System.out.println("==========join========"+join);
        return "转课成功";
    }
}
cloud-server-course/src/main/java/com/dsh/course/entity/CourseCounsum.java
New file
@@ -0,0 +1,28 @@
package com.dsh.course.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 io.swagger.models.auth.In;
import lombok.Data;
import java.util.Date;
@Data
@TableName("t_course_consum")
public class CourseCounsum {
    @TableId(value = "id", type = IdType.AUTO)
    Integer id;
    @TableField("changeType")
    Integer changeType;
    @TableField("num")
    Integer num;
    @TableField("reason")
    String reason;
    @TableField("paymentId")
    Long paymentId;
    @TableField("insertTime")
    Date insertTime;
}
cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackagePaymentConfig.java
@@ -40,4 +40,5 @@
    private Integer playPaiCoin;
    @TableField("couponIds")
    private String couponIds;
}
cloud-server-course/src/main/java/com/dsh/course/entity/InsertBackDto.java
New file
@@ -0,0 +1,9 @@
package com.dsh.course.entity;
import lombok.Data;
@Data
public class InsertBackDto {
    Integer id;
    String ids;
}
cloud-server-course/src/main/java/com/dsh/course/entity/MoneyBack.java
New file
@@ -0,0 +1,28 @@
package com.dsh.course.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_back_money")
public class MoneyBack {
    @TableId(value = "id", type = IdType.AUTO)
    Integer id;
    @TableField("ids")
    String ids;
    @TableField("studentId")
    Integer studentId;
    @TableField("status")
    Integer status;
    @TableField("insertTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    Date insertTime;
}
cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackage.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.dsh.course.service.CourseCounsumService;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -25,6 +26,8 @@
@Accessors(chain = true)
@TableName("t_course_package")
public class TCoursePackage extends Model<TCoursePackage>{
    private static final long serialVersionUID = 1L;
@@ -83,6 +86,9 @@
     */
    @TableField("maxSubscribeNumber")
    private Integer maxSubscribeNumber;
    @TableField("codeTime")
    private Integer codeTime;
    /**
     * 上课开始时间
     */
cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java
@@ -1,9 +1,6 @@
package com.dsh.course.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.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
@@ -32,6 +29,7 @@
     * 主键
     */
    @TableId(value = "id", type = IdType.NONE)
    @TableField(updateStrategy = FieldStrategy.NEVER)
    private Long id;
    /**
     * 业务编号
cloud-server-course/src/main/java/com/dsh/course/entity/dto/ClassListDto.java
@@ -1,15 +1,19 @@
package com.dsh.course.entity.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.models.auth.In;
import lombok.Data;
import java.util.Date;
@Data
public class ClassListDto {
    private Integer id;
    private Long id;
    private String className;
    private String classType;
    private Integer classType;
    private Date insertTime;
cloud-server-course/src/main/java/com/dsh/course/entity/dto/ConsumeQuery.java
New file
@@ -0,0 +1,18 @@
package com.dsh.course.entity.dto;
import lombok.Data;
import java.util.Date;
@Data
public class ConsumeQuery {
    Date start;
    Date end;
    Integer changeType;
    String reason;
    Integer payId;
}
cloud-server-course/src/main/java/com/dsh/course/entity/dto/ToHoliDto.java
New file
@@ -0,0 +1,13 @@
package com.dsh.course.entity.dto;
import io.swagger.models.auth.In;
import lombok.Data;
import java.util.List;
@Data
public class ToHoliDto {
    Integer id;
    Integer classId;
    Integer classNum;
    String[] ids;
}
cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java
@@ -44,6 +44,9 @@
    @PostMapping("/base/coursePack/getPaymentCoursePackage")
    public TCoursePackagePayment getCoursePackagePaymentByCode(@RequestBody String payId);
    @PostMapping("/base/coursePack/getCoursePackagePaymentById")
    public TCoursePackagePayment getCoursePackagePaymentById(@RequestBody Integer id);
    @PostMapping("/base/coursePack/delPaymentCoursePackage")
    public boolean delPaymentCoursePackage(@RequestBody Integer payId);
cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java
@@ -47,4 +47,6 @@
    @PostMapping("/appUser/getSelects")
    List<SelectDto> getSelects(List<Integer> studentIds);
}
cloud-server-course/src/main/java/com/dsh/course/feignclient/account/StudentClient.java
@@ -1,6 +1,7 @@
package com.dsh.course.feignclient.account;
import com.dsh.course.feignclient.account.model.Student;
import io.swagger.models.auth.In;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
@@ -39,4 +40,7 @@
     */
    @PostMapping("/student/queryStudentListByName")
    List<Student> queryStudentListByName(String name);
}
cloud-server-course/src/main/java/com/dsh/course/feignclient/model/StuCourseResp.java
@@ -6,6 +6,7 @@
@Data
public class StuCourseResp {
    private Long id;
    @ApiModelProperty(value = "课包id")
    private Integer courseId;
cloud-server-course/src/main/java/com/dsh/course/mapper/CourseCounsumMapper.java
New file
@@ -0,0 +1,8 @@
package com.dsh.course.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.course.entity.CourseCounsum;
import com.dsh.course.entity.CoursePackagePaymentConfig;
public interface CourseCounsumMapper extends BaseMapper<CourseCounsum> {
}
cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java
@@ -38,4 +38,8 @@
    List<ClassListDto> getClassList(@Param("tStudentId")Integer tStudentId);
    Date getMaxDate(@Param("tStudentId")Integer tStudentId);
    void updateSignInOrNotById(@Param("id") Long id);
}
cloud-server-course/src/main/java/com/dsh/course/mapper/MoneyBackMapper.java
New file
@@ -0,0 +1,8 @@
package com.dsh.course.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.course.entity.CourseCounsum;
import com.dsh.course.entity.MoneyBack;
public interface MoneyBackMapper extends BaseMapper<MoneyBack> {
}
cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java
@@ -62,4 +62,6 @@
    void updateUseTime(@Param("id")Long id,  @Param("date") Date date);
    List<Integer> getStudentIds(@Param("id")Integer payId);
    boolean updateHoursById(@Param("id") Long id, @Param("i") int i);
}
cloud-server-course/src/main/java/com/dsh/course/model/dto/ToClassDto.java
New file
@@ -0,0 +1,9 @@
package com.dsh.course.model.dto;
import lombok.Data;
@Data
public class ToClassDto {
    Integer id;
    Integer toStudentId;
}
cloud-server-course/src/main/java/com/dsh/course/service/CourseCounsumService.java
New file
@@ -0,0 +1,9 @@
package com.dsh.course.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.course.entity.CancelledClasses;
import com.dsh.course.entity.CourseCounsum;
public interface CourseCounsumService extends IService<CourseCounsum> {
}
cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java
@@ -36,4 +36,8 @@
    Date getMaxDate(Integer tStudentId);
    Date getMinDate(Integer tStudentId);
    void updateSignInOrNotById(Long id);
}
cloud-server-course/src/main/java/com/dsh/course/service/MoneyBackService.java
New file
@@ -0,0 +1,9 @@
package com.dsh.course.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.course.entity.CourseCounsum;
import com.dsh.course.entity.MoneyBack;
public interface MoneyBackService extends IService<MoneyBack> {
}
cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java
@@ -121,6 +121,9 @@
    List<Integer> getStudentIds(Integer payId);
    boolean updateHoursById(TCoursePackagePayment byId, int i);
    List<CoursePackagePaymentVO> listAll(CoursePackagePaymentQuery query);
    int changeState(CoursePackagePayDTO dto);
cloud-server-course/src/main/java/com/dsh/course/service/impl/CourseCounsumServiceImpl.java
New file
@@ -0,0 +1,14 @@
package com.dsh.course.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.course.entity.CancelledClasses;
import com.dsh.course.entity.CourseCounsum;
import com.dsh.course.mapper.CancelledClassesMapper;
import com.dsh.course.mapper.CourseCounsumMapper;
import com.dsh.course.service.CancelledClassesService;
import com.dsh.course.service.CourseCounsumService;
import org.springframework.stereotype.Service;
@Service
public class CourseCounsumServiceImpl extends ServiceImpl<CourseCounsumMapper, CourseCounsum> implements CourseCounsumService {
}
cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java
@@ -101,4 +101,9 @@
    public Date getMinDate(Integer tStudentId) {
        return null;
    }
    @Override
    public void updateSignInOrNotById(Long id) {
        this.baseMapper.updateSignInOrNotById(id);
    }
}
cloud-server-course/src/main/java/com/dsh/course/service/impl/MoneyBackServiceImpl.java
New file
@@ -0,0 +1,14 @@
package com.dsh.course.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.course.entity.CourseCounsum;
import com.dsh.course.entity.MoneyBack;
import com.dsh.course.mapper.CourseCounsumMapper;
import com.dsh.course.mapper.MoneyBackMapper;
import com.dsh.course.service.CourseCounsumService;
import com.dsh.course.service.MoneyBackService;
import org.springframework.stereotype.Service;
@Service
public class MoneyBackServiceImpl extends ServiceImpl<MoneyBackMapper, MoneyBack> implements MoneyBackService {
}
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java
@@ -235,32 +235,36 @@
                .eq("appUserId",appUserId ));
        System.out.println(tCoursePackagePayments);
        if (tCoursePackagePayments.size() > 0){
            for (TCoursePackagePayment tCoursePackagePayment : tCoursePackagePayments) {
                TCoursePackage coursePackage = tcpmapper.selectById(tCoursePackagePayment.getCoursePackageId());
                Store store = stoClient.queryStoreById(coursePackage.getStoreId());
                RegisterCourseVo registerCourseVo = new RegisterCourseVo();
                // 2.0
                registerCourseVo.setType(coursePackage.getType());
            try {
                for (TCoursePackagePayment tCoursePackagePayment : tCoursePackagePayments) {
                    TCoursePackage coursePackage = tcpmapper.selectById(tCoursePackagePayment.getCoursePackageId());
                    Store store = stoClient.queryStoreById(coursePackage.getStoreId());
                    RegisterCourseVo registerCourseVo = new RegisterCourseVo();
                    // 2.0
                    registerCourseVo.setType(coursePackage.getType());
                registerCourseVo.setCoursePayId(tCoursePackagePayment.getId());
                registerCourseVo.setCoursePackageId(tCoursePackagePayment.getCoursePackageId());
                registerCourseVo.setCoursePackTypeId(coursePackage.getCoursePackageTypeId());
                registerCourseVo.setPackageImg(coursePackage.getCoverDrawing());
                String storeAndCourse = coursePackage.getName()+"("+ store.getName() +")";
                registerCourseVo.setCourseNameStore(storeAndCourse);
                    registerCourseVo.setCoursePayId(tCoursePackagePayment.getId());
                    registerCourseVo.setCoursePackageId(tCoursePackagePayment.getCoursePackageId());
                    registerCourseVo.setCoursePackTypeId(coursePackage.getCoursePackageTypeId());
                    registerCourseVo.setPackageImg(coursePackage.getCoverDrawing());
                    String storeAndCourse = coursePackage.getName()+"("+ store.getName() +")";
                    registerCourseVo.setCourseNameStore(storeAndCourse);
//                registerCourseVo.setCourseTime(coursePackage.getClassStartTime()+"-"+coursePackage.getClassEndTime());
                // 2.0
                registerCourseVo.setCourseTime(new SimpleDateFormat("yyyy-MM-dd").format(tCoursePackagePayment.getInsertTime()));
                Coach coach = coachClient.queryCoachById(coursePackage.getCoachId());
                registerCourseVo.setCourseTeacher(ToolUtil.isEmpty(coach) ? "" : coach.getName());
                List<CoursePackageStudent> coursePackageStudents = cpsMapper.selectList(new QueryWrapper<CoursePackageStudent>()
                        .eq("coursePackageId",coursePackage.getId())
                        .eq("studentId",appUserId ));
                if (coursePackageStudents.size() > 0 ){
                    registerCourseVo.setCourseNums(coursePackageStudents.size() * 2);
                    // 2.0
                    registerCourseVo.setCourseTime(new SimpleDateFormat("yyyy-MM-dd").format(tCoursePackagePayment.getInsertTime()));
                    Coach coach = coachClient.queryCoachById(coursePackage.getCoachId());
                    registerCourseVo.setCourseTeacher(ToolUtil.isEmpty(coach) ? "" : coach.getName());
                    List<CoursePackageStudent> coursePackageStudents = cpsMapper.selectList(new QueryWrapper<CoursePackageStudent>()
                            .eq("coursePackageId",coursePackage.getId())
                            .eq("studentId",appUserId ));
                    if (coursePackageStudents.size() > 0 ){
                        registerCourseVo.setCourseNums(coursePackageStudents.size() * 2);
                    }
                    registerCourseVo.setPayStatus(tCoursePackagePayment.getPayStatus());
                    courseVos.add(registerCourseVo);
                }
                registerCourseVo.setPayStatus(tCoursePackagePayment.getPayStatus());
                courseVos.add(registerCourseVo);
            }catch (Exception e){
                e.printStackTrace();
            }
            if (ToolUtil.isNotEmpty(courseTypeId.getSearch())){
@@ -1032,6 +1036,11 @@
       return  this.baseMapper.getStudentIds(payId);
    }
    @Override
    public boolean updateHoursById(TCoursePackagePayment byId, int i) {
        return this.baseMapper.updateHoursById(byId.getId(),i);
    }
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java
@@ -1061,33 +1061,40 @@
            }else if(integer>i) {
                Calendar instance = Calendar.getInstance();
                instance.add(Calendar.DATE,integer-i);
                Date time = instance.getTime();
                Date time1 = instance.getTime();
                List<Date> list = new ArrayList<>();
                list.add(time1);
                instance.add(Calendar.DATE,7);
                Date time2 = instance.getTime();
                list.add(time2);
                for (Date time : list) {
                    for (int i1 = 0; i1 < split.length; i1++) {
                        CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                        coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                        try {
                            Date parse = format1.parse(format.format(time) + " " + split[i1]);
                            Date parse1 = format1.parse(format.format(time) + " " + split1[i1]);
                            coursePackageScheduling.setClassDate(parse);
                            coursePackageScheduling.setEndDate(parse1);
                            coursePackageScheduling.setStatus(1);
                            coursePackageSchedulingService.save(coursePackageScheduling);
                for (int i1 = 0; i1 < split.length; i1++) {
                    CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                    coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                    try {
                        Date parse = format1.parse(format.format(time) + " " + split[i1]);
                        Date parse1 = format1.parse(format.format(time) + " " + split1[i1]);
                        coursePackageScheduling.setClassDate(parse);
                        coursePackageScheduling.setEndDate(parse1);
                        coursePackageScheduling.setStatus(1);
                        coursePackageSchedulingService.save(coursePackageScheduling);
                        CoursePackageStudent student1 = new CoursePackageStudent();
                        student1.setAppUserId(userId);
                        student1.setStudentId(sId);
                        student1.setCoursePackageId(tCoursePackage.getId());
                        student1.setCoursePackagePaymentId(paymentId);
                        student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
                        student1.setSignInOrNot(0);
                        student1.setReservationStatus(1);
                        student1.setInsertTime(new Date());
                        cpsMapper.insert(student1);
                    } catch (ParseException e) {
                        e.printStackTrace();
                            CoursePackageStudent student1 = new CoursePackageStudent();
                            student1.setAppUserId(userId);
                            student1.setStudentId(sId);
                            student1.setCoursePackageId(tCoursePackage.getId());
                            student1.setCoursePackagePaymentId(paymentId);
                            student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
                            student1.setSignInOrNot(0);
                            student1.setReservationStatus(1);
                            student1.setInsertTime(new Date());
                            cpsMapper.insert(student1);
                        } catch (ParseException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }else {
                Calendar instance = Calendar.getInstance();
                instance.add(Calendar.DATE,7);
@@ -1212,50 +1219,70 @@
            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = sdf1.parse(sdf.format(new Date()) + " 00:00:00");
            List<String> list = Arrays.asList(coursePackage.getClassWeeks().split(";"));
            String classStartTime = coursePackage.getClassStartTime();
            String[] split = classStartTime.split(":");
            String classEndTime = coursePackage.getClassEndTime();
            String[] split1 = classEndTime.split(":");
            Calendar s = Calendar.getInstance();
            s.setTime(date);
            s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 1);
            s.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
            s.set(Calendar.MINUTE, Integer.valueOf(split[1]));
            s.set(Calendar.SECOND, 0);
            String value = coursePackage.getClassStartTime();
            String value1 = coursePackage.getClassEndTime();
            Calendar e = Calendar.getInstance();
            e.setTime(date);
            e.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 13);
            long timeInMillis = e.getTimeInMillis();
            String[] star = value.split(",");
            String[] end = value1.split(",");
            while (true){
                int w = s.get(Calendar.DAY_OF_WEEK);
                WeekEnum weekEnum = WeekEnum.getWeekEnum(w);
                if(list.contains(weekEnum.getChineseName())){
                    Calendar classDate = Calendar.getInstance();
                    classDate.setTime(s.getTime());
                    classDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
                    classDate.set(Calendar.MINUTE, Integer.valueOf(split[1]));
                    classDate.set(Calendar.SECOND, 0);
            for (int i = 0; i < star.length; i++) {
                    Calendar endDate = Calendar.getInstance();
                    endDate.setTime(s.getTime());
                    endDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split1[0]));
                    endDate.set(Calendar.MINUTE, Integer.valueOf(split1[1]));
                    endDate.set(Calendar.SECOND, 0);
                    CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                    coursePackageScheduling.setCoursePackageId(coursePackage.getId());
                    coursePackageScheduling.setClassDate(classDate.getTime());
                    coursePackageScheduling.setEndDate(endDate.getTime());
                    coursePackageScheduling.setStatus(1);
                    coursePackageSchedulingService.save(coursePackageScheduling);
                }
//                int index = star[i].indexOf(",");
//
//
//                String result = value.substring(0, index).trim();
                String classStartTime = star[i];
                String[] split = classStartTime.split(":");
//            String value1 = en;
                int index1 = value1.indexOf(",");
//                String result1 = value.substring(0, index1).trim();
                String classEndTime = end[i];
                String[] split1 = classEndTime.split(":");
                Calendar s = Calendar.getInstance();
                s.setTime(date);
                s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 1);
                if(s.getTimeInMillis() > timeInMillis){
                    break;
                s.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
                s.set(Calendar.MINUTE, Integer.valueOf(split[1]));
                s.set(Calendar.SECOND, 0);
                Calendar e = Calendar.getInstance();
                e.setTime(date);
                e.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 13);
                long timeInMillis = e.getTimeInMillis();
                while (true){
                    int w = s.get(Calendar.DAY_OF_WEEK);
                    WeekEnum weekEnum = WeekEnum.getWeekEnum(w);
                    if(list.contains(weekEnum.getChineseName())){
                        Calendar classDate = Calendar.getInstance();
                        classDate.setTime(s.getTime());
                        classDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
                        classDate.set(Calendar.MINUTE, Integer.valueOf(split[1]));
                        classDate.set(Calendar.SECOND, 0);
                        Calendar endDate = Calendar.getInstance();
                        endDate.setTime(s.getTime());
                        endDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split1[0]));
                        endDate.set(Calendar.MINUTE, Integer.valueOf(split1[1]));
                        endDate.set(Calendar.SECOND, 0);
                        CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                        coursePackageScheduling.setCoursePackageId(coursePackage.getId());
                        coursePackageScheduling.setClassDate(classDate.getTime());
                        coursePackageScheduling.setEndDate(endDate.getTime());
                        coursePackageScheduling.setStatus(1);
                        coursePackageSchedulingService.save(coursePackageScheduling);
                    }
                    s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 1);
                    if(s.getTimeInMillis() > timeInMillis){
                        break;
                    }
                }
            }
            return coursePackage.getId();
        }catch (Exception e){
            e.printStackTrace();
cloud-server-course/src/main/java/com/dsh/course/util/ResultUtil.java
@@ -1,13 +1,8 @@
package com.dsh.course.util;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
 * 定义统一返回对象
 */
@ApiModel(value = "统一返回结果集")
public class ResultUtil<T> {
    public static final Integer SUCCESS = 200;
@@ -18,24 +13,22 @@
    public static final Integer ERROR = 500;
    public static final Integer TOKEN_ERROR = 600;
    public static final String Token = "Token失效";
    public static final Integer SIGN_ERROR = 700;
    private Integer status;//状态码
    public static final String Token = "TOKEN_INVALID";
    public static final String SIGN = "SIGN_INVALID";
    @ApiModelProperty(name = "code", value = "业务状态码 200:成功,300:参数错误,400:运行异常,500:其他异常, 600:token无效,需重新登录,700:签名无效")
    private Integer code;//备用状态码
    @ApiModelProperty(name = "msg", value = "返回结果说明")
    private String msg;//返回说明
    @ApiModelProperty(name = "data", value = "返回结果值")
    private T data;//返回数据
    private String str;//存储单个字符串值
    public Integer getStatus() {
        return status;
    }
    public String getMsg() {
        return msg;
@@ -45,29 +38,53 @@
        return data;
    }
    public String getStr() {
        return str;
    }
    public Integer getCode() {
        return code;
    }
    private ResultUtil(Integer code, String msg) {
    public ResultUtil(Integer status, Integer code, String msg) {
        this.status = status;
        this.code = code;
        this.msg = msg;
    }
    private ResultUtil(Integer code, String msg, T data) {
    private ResultUtil(Integer status, Integer code, String msg, T data) {
        this.status = status;
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public static <T> ResultUtil<T> getResult(Integer code, String msg){
        return new ResultUtil<>(code, msg);
    public ResultUtil(Integer status, Integer code, String msg, T data, String str) {
        this.status = status;
        this.code = code;
        this.msg = msg;
        this.data = data;
        this.str = str;
    }
    public static <T> ResultUtil<T> getResult(Integer code, String msg, T data){
        return new ResultUtil<>(code, msg, data);
    private ResultUtil(Integer status, Integer code, String msg, String str) {
        this.status = status;
        this.code = code;
        this.msg = msg;
        this.str = str;
    }
    public static <T> ResultUtil<T> getResult(Integer status, Integer code, String msg){
        return new ResultUtil<>(status, code, msg);
    }
    public static <T> ResultUtil<T> getResult(Integer status, Integer code, String msg, T data){
        return new ResultUtil<>(status, code, msg, data);
    }
    public static <T> ResultUtil<T> getResult(Integer status, Integer code, String msg, T data, String str){
        return new ResultUtil<>(status, code, msg, data, str);
    }
    /**
@@ -75,7 +92,7 @@
     * @return
     */
    public static ResultUtil error(String mag){
        return ResultUtil.getResult(ResultUtil.ERROR, mag, new JSONObject());
        return ResultUtil.getResult(ResultUtil.ERROR, ResultUtil.ERROR, mag);
    }
    /**
@@ -83,7 +100,7 @@
     * @return
     */
    public static <T> ResultUtil <T> error(String mag, T obj){
        return ResultUtil.getResult(ResultUtil.ERROR, mag, obj);
        return ResultUtil.getResult(ResultUtil.ERROR, ResultUtil.ERROR, mag, obj);
    }
    /**
@@ -91,7 +108,7 @@
     * @return
     */
    public static ResultUtil tokenErr(){
        return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, ResultUtil.Token, new JSONObject());
        return ResultUtil.getResult(ResultUtil.ERROR, ResultUtil.ERROR, ResultUtil.Token);
    }
    /**
@@ -99,15 +116,15 @@
     * @return
     */
    public static ResultUtil tokenErr(String msg){
        return ResultUtil.getResult(ResultUtil.TOKEN_ERROR, msg, new JSONObject());
        return ResultUtil.getResult(ResultUtil.ERROR, ResultUtil.ERROR, msg);
    }
    /**
     * 参数异常
     * @return
     */
    public static  ResultUtil paranErr(String ages){
        return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "【" + ages + "】参数异常", new JSONObject());
    public static  ResultUtil paranErr(){
        return ResultUtil.getResult(ResultUtil.PARAM_ERROR, ResultUtil.PARAM_ERROR, "参数异常");
    }
    /**
@@ -115,16 +132,15 @@
     * @return
     */
    public static <T> ResultUtil<T> paranErr(T data){
        return ResultUtil.getResult(ResultUtil.PARAM_ERROR, "PARAM_ERROR", data);
        return ResultUtil.getResult(ResultUtil.PARAM_ERROR, ResultUtil.PARAM_ERROR, "参数异常", data);
    }
    /**
     * 运行异常
     * @return
     */
    public static ResultUtil runErr(){
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", new JSONObject());
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, ResultUtil.RUNTIME_ERROR, "服务器运行异常");
    }
@@ -133,15 +149,7 @@
     * @return
     */
    public static <T>ResultUtil<T> runErr(T data){
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, "SYSTEM_RUN_ERROR", data);
    }
    /**
     * 运行异常
     * @return
     */
    public static <T>ResultUtil<T> runErr(T data, String msg){
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, msg, data);
        return ResultUtil.getResult(ResultUtil.RUNTIME_ERROR, ResultUtil.RUNTIME_ERROR, "服务器运行异常", data);
    }
@@ -151,7 +159,7 @@
     * @return
     */
    public static ResultUtil success(){
        return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", new JSONObject());
        return ResultUtil.getResult(ResultUtil.SUCCESS, ResultUtil.SUCCESS, "成功");
    }
@@ -162,28 +170,26 @@
     * @return
     */
    public static <T> ResultUtil<T> success(T data){
        return ResultUtil.getResult(ResultUtil.SUCCESS, "SUCCESS", data);
        return ResultUtil.getResult(ResultUtil.SUCCESS, ResultUtil.SUCCESS, "成功", data);
    }
    /**
     * 返回成功
     * @param msg
     * @param data
     * @param str
     * @param <T>
     * @return
     */
    public static <T> ResultUtil<T> success(String msg, T data){
        return ResultUtil.getResult(ResultUtil.SUCCESS, msg, data);
    public static <T> ResultUtil<T> success(T data, String str){
        return ResultUtil.getResult(ResultUtil.SUCCESS, ResultUtil.SUCCESS, "成功", data, str);
    }
    public static <T> ResultUtil<T> success(String msg, T data){
        return ResultUtil.getResult(ResultUtil.SUCCESS, ResultUtil.SUCCESS, msg, data);
    }
    /**
     * 签名无效
     * @param <T>
     * @return
     */
    public static <T> ResultUtil<T> sign(){
        return ResultUtil.getResult(ResultUtil.SIGN_ERROR, SIGN);
    public static <T> ResultUtil<T> success(String msg, T data, String str){
        return ResultUtil.getResult(ResultUtil.SUCCESS, ResultUtil.SUCCESS, msg, data, str);
    }
}
cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml
@@ -1,7 +1,9 @@
<?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.course.mapper.CoursePackageStudentMapper">
    <update id="updateSignInOrNotById">
        update t_course_package_student set signInOrNot = 2 where id =#{id}
    </update>
    <select id="queryCoursePackageStudentList" resultType="map">
@@ -44,11 +46,11 @@
        SELECT
            *,
            pg.NAME AS className,
            ty.`name` AS classType
            pg.`type` AS classType
        FROM
            t_course_package_payment py
                LEFT JOIN t_course_package pg ON py.coursePackageId = pg.id
                LEFT JOIN t_course_package_type ty ON pg.type = ty.id
        <where>
            <if test="null != tStudentId">
cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml
@@ -30,6 +30,9 @@
        set useTime = #{date}
        where id = #{id}
    </update>
    <update id="updateHoursById">
        update t_course_package_payment set totalClassHours =totalClassHours +#{i},classHours =classHours+#{i},laveClassHours =laveClassHours+#{i} where id =#{id}
    </update>
    <select id="queryCountNumber" resultType="int">
@@ -128,7 +131,11 @@
            SELECT appUserId
            FROM t_course_package_payment
            WHERE id = #{id}
        ) AND id != #{id};
        ) AND id != #{id} and coursePackageId=(
                 SELECT coursePackageId
            FROM t_course_package_payment
            WHERE id = #{id}
                )
    </select>
cloud-server-management/pom.xml
@@ -210,6 +210,19 @@
            <version>2.3.1</version>
        </dependency>
        <!-- itext7html转pdf  -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>html2pdf</artifactId>
            <version>3.0.2</version>
        </dependency>
        <!-- 中文字体支持 -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>font-asian</artifactId>
            <version>7.1.13</version>
        </dependency>
    </dependencies>
    <build>
@@ -267,6 +280,8 @@
            <url>http://maven.magic-beans.cn/nexus/content/repositories/thirdparty/</url>
        </repository>
    </repositories>
cloud-server-management/src/main/java/com/dsh/course/dto/ClassListDto.java
@@ -1,15 +1,19 @@
package com.dsh.course.dto;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import java.util.Date;
@Data
public class ClassListDto {
    private Integer id;
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;
    private String className;
    private String classType;
    private Integer classType;
    private Date insertTime;
cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java
@@ -10,6 +10,8 @@
import com.dsh.course.feignClient.account.model.QueryByNamePhone;
import com.dsh.course.feignClient.account.model.TAppUser;
import com.dsh.guns.modular.system.model.TStudent;
import com.dsh.guns.modular.system.model.dto.GiftSearchDto;
import com.dsh.guns.modular.system.model.dto.SelectDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
@@ -70,4 +72,6 @@
    @PostMapping("/student/getHisory")
    List<GetHistoryDto> getHisory();
    @PostMapping("/student/giftSelect")
    List<SelectDto> giftSelect(@RequestBody GiftSearchDto giftSearchDto);
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/CouponListOfSearch.java
@@ -22,5 +22,7 @@
    private Integer state;
    private Page<Map<String, Object>> page;
    private String cityCode;
    private Integer storeId;
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java
@@ -75,4 +75,8 @@
     */
    @PostMapping("/coursePackagePayment/editCoursePackagePayment")
    void editCoursePackagePayment(TCoursePackagePayment coursePackagePayment);
    @PostMapping("/coursePackagePayment/CountqueryByClassId")
    Integer queryByClassId(Integer id);
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseStuddentClient.java
@@ -2,9 +2,20 @@
import com.dsh.course.dto.ClassListDto;
import com.dsh.course.dto.updateTimeDto;
import com.dsh.course.feignClient.course.model.TCoursePackagePayment;
import com.dsh.course.model.MoneyBack;
import com.dsh.course.model.dto.InsertBackDto;
import com.dsh.course.model.dto.StudentClassInfo;
import com.dsh.guns.modular.system.model.CourseCounsum;
import com.dsh.guns.modular.system.model.dto.ConsumeQuery;
import com.dsh.guns.modular.system.model.dto.SelectDto;
import com.dsh.guns.modular.system.model.dto.ToClassDto;
import com.dsh.guns.modular.system.model.dto.ToHoliDto;
import com.dsh.guns.modular.system.util.ResultUtil;
import io.swagger.models.auth.In;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
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.RequestParam;
@@ -59,4 +70,49 @@
     */
    @RequestMapping("/courdent/getSelect")
    List<SelectDto> getSelect(@RequestParam("payId") Integer payId);
    /**
     * 转移课程
     * @param toClassDto
     * @return
     */
    @RequestMapping("/courdent/toClass")
    void toClass(@RequestBody ToClassDto toClassDto);
    //获取常规假期课下拉框
    @RequestMapping("/courdent/holiSelect")
    List<SelectDto> getGiftSelect(@RequestParam("courseId") Integer paymentId);
    @RequestMapping("/courdent/transSelect")
    List<SelectDto> getTransSelect(@RequestParam("courseId") Integer paymentId);
    @RequestMapping(value = "/courdent/toHoli",produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = "application/json;charset=UTF-8")
    String toHoli(@RequestBody ToHoliDto toHoliDto);
    @RequestMapping(value = "/courdent/toTrans",produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = "application/json;charset=UTF-8")
    String toTrans(@RequestBody ToHoliDto toHoliDto);
    @RequestMapping("/courdent/queryByIds")
    List<TCoursePackagePayment> queryByIds(@RequestParam("ids")String ids);
    @RequestMapping("/courdent/queryCounsum")
    List<CourseCounsum> queryCounsum( @RequestBody ConsumeQuery consumeQuery);
    @RequestMapping("/courdent/getMoneyBack")
    List<MoneyBack> getMoneyBack(@RequestParam("tStudentId")Integer tStudentId);
    @PostMapping("/courdent/insertBack")
    void insertBack(@RequestBody InsertBackDto insertBackDto);
    @RequestMapping("/courdent/changeStatus")
    void changeStatus(@RequestParam("id")Integer id);
    @RequestMapping("/courdent/cancel")
    void cancel(@RequestParam("ids")String ids);
    @RequestMapping("/courdent/zeroClass")
    void zeroClass(@RequestParam("id")Integer id);
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackagePaymentConfig.java
@@ -32,4 +32,5 @@
     * 玩湃币价格
     */
    private Integer playPaiCoin;
    private String couponIds;
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackage.java
@@ -63,6 +63,9 @@
     * 最多预约人数
     */
    private Integer maxSubscribeNumber;
    private Integer codeTime;
    /**
     * 上课开始时间
     */
cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackagePayment.java
@@ -124,4 +124,15 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date insertTime;
    //课包单价
    private BigDecimal onePrice;
    //已学课时
    private Integer hasHours;
    private BigDecimal restPrice;
    private  String name;
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/HistoryClient.java
@@ -3,6 +3,8 @@
import com.dsh.course.dto.CreateHistoryDto;
import com.dsh.course.dto.GetHistoryDto;
import com.dsh.guns.modular.system.model.Store;
import com.dsh.guns.modular.system.model.dto.GiftSearchDto;
import com.dsh.guns.modular.system.model.dto.SelectDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -26,4 +28,6 @@
    @PostMapping("/class/gethisotory")
    List<GetHistoryDto> getHisory(@RequestBody Integer studentId);
}
cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/Site.java
@@ -109,4 +109,26 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date insertTime;
    @TableField("operatorId")
    private Integer operatorId;
    @TableField("typeName")
    private String typeName;
    @TableField("nextName")
    private String nextName;
    @TableField("ishalf")
    private Integer ishalf;
    @TableField("cashPriceOne")
    private Double cashPriceOne;
    @TableField("playPaiCoinOne")
    private Double playPaiCoinOne;
    @TableField("halfName")
    private String halfName;
    @TableField("introduce")
    private String introduce;
    @TableField("imgs")
    private String imgs;
    @TableField("ids")
    private String ids;
}
cloud-server-management/src/main/java/com/dsh/course/mapper/TOperatorCityMapper.java
New file
@@ -0,0 +1,17 @@
package com.dsh.course.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.guns.modular.system.model.TOperatorCity;
/**
 * <p>
 * 运营商 Mapper 接口
 * </p>
 *
 * @author administrator
 * @since 2023-09-22
 */
public interface TOperatorCityMapper extends BaseMapper<TOperatorCity> {
}
cloud-server-management/src/main/java/com/dsh/course/model/MoneyBack.java
New file
@@ -0,0 +1,22 @@
package com.dsh.course.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.models.auth.In;
import lombok.Data;
import java.util.Date;
@Data
public class MoneyBack {
    Integer id;
    String ids;
    Integer studentId;
    Integer status;
    @TableField("insertTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    Date insertTime;
}
cloud-server-management/src/main/java/com/dsh/course/model/dto/InsertBackDto.java
New file
@@ -0,0 +1,9 @@
package com.dsh.course.model.dto;
import lombok.Data;
@Data
public class InsertBackDto {
    Integer id;
    String ids;
}
cloud-server-management/src/main/java/com/dsh/course/util/ChineseMoneyUtils.java
New file
@@ -0,0 +1,104 @@
package com.dsh.course.util;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class ChineseMoneyUtils {
    /**
     * 中文数字
     */
    final static private String[] CHINESE_NUMBER = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
    /**
     * 中文数字单位
     */
    final static private String[] CHINESE_NUMBER_UNIT = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟" };
    /**
     * 人民币单位
     */
    final static private String[] CHINESE_MONEY_UNIT = { "圆", "角", "分" };
    public static void main(String[] args) {
        String chineseMoney = toChineseMoney(new BigDecimal("320"));
        System.out.println("chineseMoney = " + chineseMoney);
    }
    /**
     * @param sourceMoney 要转换的数值,最多支持到亿
     * @return 结果
     */
    public static String toChineseMoney(BigDecimal sourceMoney) {
        if (new BigDecimal("1000000000000").compareTo(sourceMoney) <= 0
                && BigDecimal.ZERO.compareTo(sourceMoney) >= 0) {
            throw new RuntimeException("支持转换的金额范围为0~1万亿");
        }
        StringBuilder sb = new StringBuilder();
        // 整数部分
        BigDecimal intPart = sourceMoney.setScale(0, RoundingMode.DOWN);
        // 小数部分
        BigDecimal decimalPart = sourceMoney.subtract(intPart).multiply(new BigDecimal(100)).setScale(0,
                RoundingMode.DOWN);
        // 处理整数部分圆
        if (intPart.compareTo(BigDecimal.ZERO) > 0) {
            String intPartNumberString = intPart.toPlainString();
            int length = intPartNumberString.length();
            // 统计末尾的零,末尾零不做处理
            int zeroCount = 0;
            for (int i = length - 1; i >= 0; i--) {
                int number = Integer.parseInt(String.valueOf(intPartNumberString.charAt(i)));
                if (number == 0) {
                    zeroCount++;
                } else {
                    break;
                }
            }
            for (int i = 0; i < length; i++) {
                // 如果转换到末尾0,则停止转换
                if (i + zeroCount == length) {
                    break;
                }
                int number = Integer.parseInt(String.valueOf(intPartNumberString.charAt(i)));
                // 获取中文数字
                String chineseNumber = CHINESE_NUMBER[number];
                // 获取中文数字单位
                String chineseNumberUnit = CHINESE_NUMBER_UNIT[length - i - 1];
                sb.append(chineseNumber).append(chineseNumberUnit);
            }
            // 统计完后加上金额单位
            sb.append(CHINESE_MONEY_UNIT[0]);
        } else {
            sb.append(CHINESE_NUMBER[0]).append(CHINESE_MONEY_UNIT[0]);
        }
        // 处理小数部分
        if (decimalPart.compareTo(new BigDecimal(10)) >= 0) {
            // 角
            String jiao = decimalPart.toPlainString();
            int number = Integer.parseInt(String.valueOf(jiao.charAt(0)));
            if (number != 0) {
                String chineseNumber = CHINESE_NUMBER[number];
                sb.append(chineseNumber).append(CHINESE_MONEY_UNIT[1]);
            }
            // 分
            String fen = decimalPart.toPlainString();
            number = Integer.parseInt(String.valueOf(fen.charAt(1)));
            if (number != 0) {
                String chineseNumber = CHINESE_NUMBER[number];
                sb.append(chineseNumber).append(CHINESE_MONEY_UNIT[2]);
            }
        } else if (decimalPart.compareTo(BigDecimal.ZERO) > 0) {
             // 分
            String fen = decimalPart.toPlainString();
            int number = Integer.parseInt(String.valueOf(fen.charAt(0)));
            if (number != 0) {
                String chineseNumber = CHINESE_NUMBER[number];
                sb.append(chineseNumber).append(CHINESE_MONEY_UNIT[2]);
            }
        } else {
            sb.append("整");
        }
        return sb.toString();
    }
}
cloud-server-management/src/main/java/com/dsh/course/util/HtmlToPdfUtils.java
New file
@@ -0,0 +1,53 @@
package com.dsh.course.util;
import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.kernel.events.PdfDocumentEvent;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.font.FontProvider;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
 * @author zhibing.pu
 * @Date 2023/8/14 11:13
 */
public class HtmlToPdfUtils {
    public static void convertToPdf(InputStream inputStream, String waterMark, OutputStream outputStream) throws IOException {
        PdfWriter pdfWriter = new PdfWriter(outputStream);
        PdfDocument pdfDocument = new PdfDocument(pdfWriter);
        //设置为A4大小
        pdfDocument.setDefaultPageSize(PageSize.A4);
        //添加水印
//        pdfDocument.addEventHandler(PdfDocumentEvent.END_PAGE, new WaterMarkEventHandler(waterMark));
        //添加页码
        //pdfDocument.addEventHandler(PdfDocumentEvent.END_PAGE,new PageEventHandler());
        //添加中文字体支持
        ConverterProperties properties = new ConverterProperties();
        FontProvider fontProvider = new FontProvider();
        PdfFont sysFont = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
        fontProvider.addFont(sysFont.getFontProgram(), "UniGB-UCS2-H");
        //添加自定义字体,例如微软雅黑
        /*if (StringUtils.isNotBlank(fontPath)){
            PdfFont microsoft = PdfFontFactory.createFont(fontPath, PdfEncodings.IDENTITY_H, false);
            fontProvider.addFont(microsoft.getFontProgram(), PdfEncodings.IDENTITY_H);
        }*/
        properties.setFontProvider(fontProvider);
        HtmlConverter.convertToPdf(inputStream, pdfDocument, properties);
        pdfWriter.close();
        pdfDocument.close();
    }
}
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.OssUploadUtil;
import com.dsh.guns.modular.system.util.ResultUtil;
import org.apache.commons.beanutils.ConvertUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -223,6 +224,26 @@
        ofSearch.setState(state);
        return client.getCouponListOfSearch(ofSearch);
    }
    /**
     * 获取 优惠券管理
     */
    @RequestMapping(value = "/list1")
    @ResponseBody
    public Object listOfDatas1(String name, Integer type, Integer distributionMethod , Integer userPopulation, Integer status, Integer state,String cityCode,Integer storeId) {
        Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
        CouponListOfSearch ofSearch = new CouponListOfSearch();
        ofSearch.setPage(page);
        ofSearch.setName(name);
        ofSearch.setType(type);
        ofSearch.setDistributionMethod(distributionMethod);
        ofSearch.setUserPopulation(userPopulation);
        ofSearch.setStatus(status);
        ofSearch.setState(state);
        ofSearch.setCityCode(cityCode);
        ofSearch.setStoreId(storeId);
        return client.getCouponListOfSearch(ofSearch);
    }
    @RequestMapping(value = "/listRecord")
    @ResponseBody
    public Object listRecord(Integer id,String name, Integer type, String phone) {
@@ -280,7 +301,7 @@
        if (imgFile != null){
        String originalFilename = imgFile.getOriginalFilename();
        String newName = originalFilename.substring(imgFile.getOriginalFilename().lastIndexOf("."));
        String url = OBSUploadUtil.inputStreamUpload(imgFile);
        String url = OssUploadUtil.ossUpload("img/",imgFile);
        Map<String, String> map = new HashMap<String, String>();
        //是否上传成功
        map.put("state", "SUCCESS");
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java
@@ -1,16 +1,15 @@
package com.dsh.guns.modular.system.controller.code;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
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.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.*;
import com.dsh.course.feignClient.course.model.*;
import com.dsh.guns.config.UserExt;
import com.dsh.guns.core.base.controller.BaseController;
@@ -21,6 +20,7 @@
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 io.swagger.models.auth.In;
import org.aspectj.weaver.ast.Var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@@ -120,7 +120,7 @@
     * @return
     */
    @GetMapping("/openAddCoursePackage")
    public String openAddCoursePackage(Model model){
    public String openAddCoursePackage(Model model,Integer type){
        Integer objectType = UserExt.getUser().getObjectType();
        Integer objectId = UserExt.getUser().getObjectId();
        List<TCoursePackageType> tCoursePackageTypes = coursePackageTypeClient.queryAllCoursePackageType();
@@ -143,6 +143,11 @@
        model.addAttribute("site", list3);
        List<Coach> coaches = coachClient.queryCoachByCity(code1);
        model.addAttribute("coach", coaches);
//        System.out.println("========type========"+type);
//        if (type ==1){
//            return PREFIX + "coursePackage_edit.html";
//        }
        return PREFIX + "coursePackage_add.html";
    }
@@ -188,11 +193,17 @@
        List<Coach> coaches = coachClient.queryCoachByCity(cityCode);
        model.addAttribute("coach", coaches);
        List<CoursePackagePaymentConfig> list4 = coursePackagePaymentConfigClient.queryCoursePackagePaymentConfigList(id);
        System.out.println("========couponIds=========>"+list4.get(0).getCouponIds());
        model.addAttribute("couponIds", list4.get(0).getCouponIds());
        model.addAttribute("coursePackagePaymentConfig", list4.remove(0));
        model.addAttribute("coursePackagePaymentConfigs", list4);
        CoursePackagePaymentConfig coursePackagePaymentConfig = list4.get(0);
        model.addAttribute("cashPayment", coursePackagePaymentConfig.getCashPayment() == 0 ? false : true);
        model.addAttribute("playPaiCoin", coursePackagePaymentConfig.getPlayPaiCoin() == 0 ? false : true);
//        if (list4.size()!=0) {
            model.addAttribute("cashPayment", coursePackagePaymentConfig.getCashPayment() == 0 ? false : true);
            model.addAttribute("playPaiCoin", coursePackagePaymentConfig.getPlayPaiCoin() == 0 ? false : true);
            System.out.println("=========coursePackagePaymentConfig=============>" + coursePackagePaymentConfig);
//        model.addAttribute("couponIds", "3,2");
//        }
        return PREFIX + "coursePackage_edit.html";
    }
@@ -243,6 +254,7 @@
        CoursePackagePaymentConfig coursePackagePaymentConfig = list4.get(0);
        model.addAttribute("cashPayment", coursePackagePaymentConfig.getCashPayment() == 0 ? false : true);
        model.addAttribute("playPaiCoin", coursePackagePaymentConfig.getPlayPaiCoin() == 0 ? false : true);
//        model.addAttribute("couponIds", coursePackagePaymentConfig.getCouponIds());
        return PREFIX + "coursePackage_info.html";
    }
@@ -290,6 +302,27 @@
     * @param id
     * @return
     */
    @GetMapping("/conpun/{id}")
    public String conpun(@PathVariable Integer id,Model model){
        model.addAttribute("index",id);
        return PREFIX + "TCoupon.html";
    }
    @GetMapping("/conpun1/{id}")
    public String conpun1(Model model,@PathVariable Integer id,String conpunids){
        System.out.println("=====model=======conpunids======"+conpunids);
        model.addAttribute("index",id);
        model.addAttribute("conpund",conpunids);
        return PREFIX + "TCouponEdit.html";
    }
    /**
     * 跳转到优惠卷选择表页
     * @param model
     * @param id
     * @return
     */
    @GetMapping("/registrationRecord")
    public String registrationRecord(Model model, Integer id){
        TCoursePackage tCoursePackage = coursePackageService.queryById(id);
@@ -297,6 +330,9 @@
        return PREFIX + "registrationRecord.html";
    }
    @Resource
    @Autowired CoursePackagePaymentClient packagePaymentClient;
    /**
     * 跳转到上课记录列表页
@@ -307,11 +343,25 @@
    @GetMapping("/openClassRecord")
    public String openClassRecord(Model model, Integer id){
        TCoursePackage tCoursePackage = coursePackageClient.queryById(id);
        String[] start = tCoursePackage.getClassStartTime().split(",");
        String[] end = tCoursePackage.getClassEndTime().split(",");
        Integer counts = packagePaymentClient.queryByClassId(id);
        List<String> strings = new ArrayList<>();
        for (int i = 0; i <start.length ; i++) {
            String outTime = start[i] +"-" +end[0];
            strings.add(outTime);
        }
        TStore store = storeService.getById(tCoursePackage.getStoreId());
        Coach coach = coachClient.queryCoachById(tCoursePackage.getCoachId());
        model.addAttribute("item", tCoursePackage);
        model.addAttribute("store", store);
        model.addAttribute("coach", coach);
        model.addAttribute("times", strings);
        model.addAttribute("counts", counts);
        return PREFIX + "classRecord.html";
    }
@@ -504,11 +554,33 @@
    @PostMapping("/addCoursePackage")
    public ResultUtil addCoursePackage(TCoursePackage coursePackage, String coursePackagePaymentConfig){
        String classStartTime = coursePackage.getClassStartTime();
        String classEndTime = coursePackage.getClassEndTime();
        classStartTime = classStartTime.substring(0, classStartTime.lastIndexOf(":"));
        classEndTime = classEndTime.substring(0, classEndTime.lastIndexOf(":"));
        coursePackage.setClassStartTime(classStartTime);
        coursePackage.setClassEndTime(classEndTime);
//        String classEndTime = coursePackage.getClassEndTime();
        System.out.println("=======getClassStartTime============"+classStartTime);
        String startTime = coursePackage.getClassStartTime();
        JSONArray jsonArray = JSON.parseArray(startTime);
        System.out.println("=======jsonArray==========="+jsonArray);
            List<String> first = new ArrayList<>();
            List<String> second = new ArrayList<>();
        for (int i = 0; i < jsonArray.size(); i++) {
//            JSONObject jsonObject = JSON.parseObject(jsonArray.getString(i));
            String jsonString = jsonArray.getString(i);
            String[] split = jsonString.split(" - ");
            first.add(split[0]);
            second.add(split[1]);
        }
        String firstString = String.join(",",first);
        String secondString = String.join(",",second);
        System.out.println("=========firstString========>"+firstString);
        System.out.println("=========secondString========>"+secondString);
 //        classStartTime = classStartTime.substring(0, classStartTime.lastIndexOf(":"));
//        classEndTime = classEndTime.substring(0, classEndTime.lastIndexOf(":"));
        coursePackage.setClassStartTime(firstString);
        coursePackage.setClassEndTime(secondString);
        coursePackage.setAuditStatus(1);
        coursePackage.setStatus(1);
        coursePackage.setState(1);
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java
@@ -73,7 +73,8 @@
    @Autowired
    private TStoreOtherService storeOtherService;
    @Autowired
    private TOperatorService tOperatorService;
    /**
@@ -97,6 +98,8 @@
        model.addAttribute("list",list);
        String roleid = UserExt.getUser().getRoleid();
        model.addAttribute("role",roleid);
        List<TOperator> list1 = tOperatorService.list();
        model.addAttribute("yysList",list1);
        return PREFIX + "tShop_add.html";
    }
    @RequestMapping("/tShop_add_one")
@@ -109,11 +112,12 @@
        return PREFIX + "tShop_add_one.html";
    }
    @RequestMapping("/tShop_add_two")
    public String tCompetitionAddTwo(Model model) {
    public String tCompetitionAddTwo(Integer id,Model model) {
        List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
        model.addAttribute("list",list);
        model.addAttribute("id",id);
        String roleid = UserExt.getUser().getRoleid();
        return PREFIX + "tShop_add_two.html";
        return PREFIX + "TShop_edit_three.html";
    }
@@ -125,23 +129,42 @@
        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()));
//        TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, byId.getProvinceCode()));
        TOperatorCity one = operatorCityService.getOne(new LambdaQueryWrapper<TOperatorCity>().eq(TOperatorCity::getOperatorId, byId.getOperatorId()).eq(TOperatorCity::getType, 1));
        List<TOperatorCity> ones = operatorCityService.list(new LambdaQueryWrapper<TOperatorCity>().eq(TOperatorCity::getOperatorId, byId.getOperatorId()).eq(TOperatorCity::getType, 1));
        model.addAttribute("list",ones);
        List<TOperatorCity> list3 = operatorCityService.list(new LambdaQueryWrapper<TOperatorCity>().eq(TOperatorCity::getPid, one.getId()).eq(TOperatorCity::getType, 2));
        if(list3.size()>0){
            model.addAttribute("list1",list3);
        }else {
            TCity one1 = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, byId.getProvinceCode()));
            List<TCity> list1 = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId,one1.getId()));
            model.addAttribute("list1",list1);
        }
        CityListQuery cityListQuery = new CityListQuery();
        cityListQuery.setOffset(1);
        cityListQuery.setLimit(10000);
        cityListQuery.setCityCode(byId.getCityCode());
        Page<TCityManager> list2 = cityClient.list(cityListQuery);
        model.addAttribute("list1",list1);
        List<TOperator> list1 = tOperatorService.list();
        model.addAttribute("yysList",list1);
        model.addAttribute("list2",list2.getRecords());
        String roleid = UserExt.getUser().getRoleid();
        model.addAttribute("role",roleid);
            model.addAttribute("role",roleid);
        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("/tShop_update1/{id}")
    public String tCityUpdate1(@PathVariable Integer id, Model model) {
        TStoreOther byId = storeOtherService.getById(id);
        model.addAttribute("item",byId);
        return PREFIX + "tShop_edit_one.html";
    }
@@ -160,6 +183,20 @@
        model.addAttribute("list1",list1);
        return PREFIX + "tShop_edit_two.html";
    }
    @RequestMapping("/tShop_update_one1/{id}")
    public String tCityUpdateOne1(@PathVariable Integer id, Model model) {
        TStoreOtherConfigTrue byId = tStoreOtherConfigTrueService.getById(id);
        TTurn one = tTurnService.getOne(new LambdaQueryWrapper<TTurn>().eq(TTurn::getName, byId.getName()));
        // page list
        List<TTurn> list = tTurnService.list(new LambdaQueryWrapper<TTurn>().eq(TTurn::getPid, one.getId()));
        // type list
        List<TTurn> list1 = tTurnService.list(new LambdaQueryWrapper<TTurn>().eq(TTurn::getPid, byId.getPageId()));
        model.addAttribute("item",byId);
        model.addAttribute("list",list);
        model.addAttribute("list1",list1);
        return PREFIX + "tShop_add_three.html";
    }
@@ -241,16 +278,36 @@
        page.setRecords(list);
        return  super.packForBT(page);
    }
    @RequestMapping(value = "/listTwo1")
    @ResponseBody
    public Object listTwo1(Integer id) {
        Page<TStoreOtherConfigTrue> page = new PageFactory<TStoreOtherConfigTrue>().defaultPage();
        List<TStoreOtherConfigTrue> list = tStoreOtherConfigTrueService.page(page,new LambdaQueryWrapper<TStoreOtherConfigTrue>().eq(TStoreOtherConfigTrue::getPid, id).eq(TStoreOtherConfigTrue::getState,1)).getRecords();
        page.setRecords(list);
        return  super.packForBT(page);
    }
    @RequestMapping(value = "/add")
    @ResponseBody
    public Object list(TStore tStore,String time,String userName,String userPhone,String ids,Integer type,Integer yyId,String lat,String lon) {
        try {
            if(ToolUtil.isNotEmpty(tStore.getProvinceCode())) {
                TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, tStore.getProvinceCode()));
                TOperatorCity byId = operatorCityService.getById(tStore.getProvinceCode());
                TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, byId.getCode()));
                tStore.setProvince(one.getName());
                TCity one1 = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, tStore.getCityCode()));
                tStore.setCity(one1.getName());
                tStore.setProvinceCode(one.getCode());
                List<TOperatorCity> list = operatorCityService.list(new LambdaQueryWrapper<TOperatorCity>().eq(TOperatorCity::getPid, byId.getId()).eq(TOperatorCity::getType, 2));
                if(list.size()>0){
                    TOperatorCity byId1 = operatorCityService.getById(tStore.getCityCode());
                    TCity one1 = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, byId1.getCode()));
                    tStore.setCity(one1.getName());
                    tStore.setCityCode(one1.getCode());
                }else {
                    TCity byId1 = cityService.getById(tStore.getCityCode());
                    TCity one1 = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, byId1.getCode()));
                    tStore.setCity(one1.getName());
                    tStore.setCityCode(one1.getCode());
                }
            }
            tStore.setStartTime(time.split(" - ")[0]);
            tStore.setEndTime(time.split(" - ")[1]);
@@ -294,15 +351,27 @@
    @RequestMapping(value = "/update")
    @ResponseBody
    public Object update(TStore tStore,String time,String userName,String userPhone,String ids,Integer type,Integer yyId) {
    public Object update(TStore tStore,String time,String userName,String userPhone,String ids,Integer type,Integer yyId,String lat,String lon) {
        try {
            TStore byId = storeService.getById(tStore.getId());
            if(ToolUtil.isNotEmpty(tStore.getProvinceCode())) {
                TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, tStore.getProvinceCode()));
                TOperatorCity tOperatorCity = operatorCityService.getById(tStore.getProvinceCode());
                TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, tOperatorCity.getCode()));
                tStore.setProvince(one.getName());
                TCity one1 = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, tStore.getCityCode()));
                tStore.setCity(one1.getName());
                tStore.setProvinceCode(one.getCode());
                List<TOperatorCity> list = operatorCityService.list(new LambdaQueryWrapper<TOperatorCity>().eq(TOperatorCity::getPid, tOperatorCity.getId()).eq(TOperatorCity::getType, 2));
                if(list.size()>0){
                    TOperatorCity byId1 = operatorCityService.getById(tStore.getCityCode());
                    TCity one1 = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, byId1.getCode()));
                    tStore.setCity(one1.getName());
                    tStore.setCityCode(one1.getCode());
                }else {
                    TCity byId1 = cityService.getById(tStore.getCityCode());
                    TCity one1 = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, byId1.getCode()));
                    tStore.setCity(one1.getName());
                    tStore.setCityCode(one1.getCode());
                }
            }
            tStore.setStartTime(time.split(" - ")[0]);
            tStore.setEndTime(time.split(" - ")[1]);
@@ -321,6 +390,8 @@
            user.setName(userName);
            user.setPhone(userPhone);
            userMapper.updateById(user);
            tStore.setLon(lon);
            tStore.setLat(lat);
            storeService.updateById(tStore);
            return new SuccessTip<>();
        }catch (Exception e){
@@ -400,6 +471,42 @@
        }
    }
    @Autowired
    private TOperatorCityService operatorCityService;
    @RequestMapping(value = "/onChange1")
    @ResponseBody
    public Object onChange1(Integer oneId) {
        try {
            List<TOperatorCity> list = operatorCityService.list(new LambdaQueryWrapper<TOperatorCity>().eq(TOperatorCity::getOperatorId, oneId).eq(TOperatorCity::getType, 1));
            return list;
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;
        }
    }
    @RequestMapping(value = "/onChange2")
    @ResponseBody
    public Object onChange2(Integer oneId) {
        try {
            List<TOperatorCity> list1 = operatorCityService.list(new LambdaQueryWrapper<TOperatorCity>().eq(TOperatorCity::getOperatorId, oneId).eq(TOperatorCity::getType, 1));
            List<TOperatorCity> list = operatorCityService.list(new LambdaQueryWrapper<TOperatorCity>().eq(TOperatorCity::getPid, oneId).eq(TOperatorCity::getType, 2));
            if(list.size()==0){
                TOperatorCity tOperatorCity = list1.get(0);
                Integer code = tOperatorCity.getCode();
                TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, code));
                List<TCity> list2 = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, one.getId()));
                return list2;
            }else {
                return list;
            }
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;
        }
    }
    @RequestMapping(value = "/cancel")
    public Object cancel(Integer id) {
@@ -416,6 +523,33 @@
    public Object delete1(Integer id) {
        try {
            storeService.delete1(id);
            return SUCCESS_TIP;
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;
        }
    }
    @ResponseBody
    @RequestMapping(value = "/deleteTwo")
    public Object delete2(Integer id) {
        try {
            TStoreOtherConfigTrue byId = tStoreOtherConfigTrueService.getById(id);
            byId.setState(2);
            tStoreOtherConfigTrueService.updateById(byId);
            return SUCCESS_TIP;
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;
        }
    }
    @ResponseBody
    @RequestMapping(value = "/del")
    public Object del(Integer id) {
        try {
            storeOtherService.removeById(id);
            tStoreOtherConfigTrueService.remove(new LambdaQueryWrapper<TStoreOtherConfigTrue>().eq(TStoreOtherConfigTrue::getPid,id));
            return SUCCESS_TIP;
        }catch (Exception e){
            e.printStackTrace();
@@ -457,6 +591,20 @@
            TStore byId = storeService.getById(id);
            byId.setState(1);
            storeService.updateById(byId);
            return SUCCESS_TIP;
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;
        }
    }
    @RequestMapping(value = "/unfreeze1")
    @ResponseBody
    public Object unfreeze1(Integer id,Integer type) {
        try {
            TStoreOther byId = storeOtherService.getById(id);
            byId.setState(type);
            storeOtherService.updateById(byId);
            return SUCCESS_TIP;
        }catch (Exception e){
            e.printStackTrace();
@@ -508,7 +656,6 @@
     *     ajax.set("type",type);
     *     ajax.set("turnId",turnId);
     *     ajax.set("sort",sort);
     * @param id
     * @return
     */
    @RequestMapping(value = "/addConfigOne")
@@ -553,6 +700,23 @@
            return ERROR;
        }
    }
    @RequestMapping(value = "/addConfig1")
    @ResponseBody
    public Object addConfig1(String name,Integer id) {
        try {
            TStoreOther byId = storeOtherService.getById(id);
            byId.setName(
                    name
            );
            storeOtherService.updateById(byId);
        return SUCCESS_TIP;
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;
        }
    }
    @RequestMapping(value = "/updateConfigOne")
    @ResponseBody
    public Object addConfigOne(String url,String name,Integer page,Integer type,String  turnId,Integer sort,Integer id) {
@@ -577,6 +741,30 @@
            return ERROR;
        }
    }
    @RequestMapping(value = "/updateConfigOne3")
    @ResponseBody
    public Object addConfigOne3(String url,String name,Integer page,Integer type,String  turnId,Integer sort,Integer id) {
        try {
            TStoreOtherConfigTrue byId = tStoreOtherConfigTrueService.getById(id);
            if(ToolUtil.isNotEmpty(url)){
                byId.setUrl(url);
            }
            byId.setName(name);
            TTurn byId1 = tTurnService.getById(page);
            TTurn byId2 = tTurnService.getById(type);
            byId.setPage(byId1.getName());
            byId.setType(byId2.getName());
            byId.setTurnId(turnId);
            byId.setSort(sort);
            byId.setPageId(page);
            byId.setTypeId(type);
            tStoreOtherConfigTrueService.updateById(byId);
            return SUCCESS_TIP;
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;
        }
    }
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java
@@ -219,6 +219,10 @@
        }
        Integer objectType = UserExt.getUser().getObjectType();
        Integer objectId = UserExt.getUser().getObjectId();
        List<TOperator> list = tOperatorService.list();
        model.addAttribute("yysList",list);
        model.addAttribute("userType",objectType);
        HashSet<String> set = new HashSet<String>(list1);
        QueryWrapper<TSiteType> wrapper = new QueryWrapper<>();
@@ -256,6 +260,29 @@
        model.addAttribute("objectType",objectType);
        model.addAttribute("objectId",objectId);
        model.addAttribute("stores",stores);
        String nextName = site.getNextName();
        ArrayList<String> strings1 = new ArrayList<>();
        for (String s : nextName.split(",")) {
            strings1.add(s);
        }
        model.addAttribute("nextNames",strings1);
        String halfNames = site.getHalfName();
        ArrayList<String> strings2 = new ArrayList<>();
        String[] split = halfNames.split(",");
        String halfName=null;
        for (int i = 0; i < split.length; i++) {
            if(i==0){
               halfName = split[0];
            }else {
                strings2.add(split[i]);
            }
        }
        model.addAttribute("halfNames",strings2);
        model.addAttribute("halfName",halfName);
        return PREFIX + "TSite_edit.html";
    }
@@ -287,6 +314,8 @@
            list1.add(cityManager.getProvince());
        }
        Integer objectType = UserExt.getUser().getObjectType();
        List<TOperator> list = tOperatorService.list();
        model.addAttribute("yysList",list);
        Integer objectId = UserExt.getUser().getObjectId();
        model.addAttribute("userType",objectType);
        HashSet<String> set = new HashSet<String>(list1);
@@ -539,6 +568,17 @@
        }
    }
    @RequestMapping(value = "/getChangeOne")
    @ResponseBody
    public Object getChangeOne(Integer oneId) {
        try {
            return storeService.list(new LambdaQueryWrapper<TStore>().eq(TStore::getOperatorId,oneId).eq(TStore::getState,1));
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;
        }
    }
    // 选择市后 获取对应账号
    @RequestMapping(value = "/accountChangeNext")
    @ResponseBody
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/TStudentController.java
@@ -3,24 +3,42 @@
import com.dsh.course.dto.*;
import com.dsh.course.feignClient.account.AppUserClient;
import com.dsh.course.feignClient.account.model.TAppUser;
import com.dsh.course.feignClient.course.CoursePackageClient;
import com.dsh.course.feignClient.course.CourseStuddentClient;
import com.dsh.course.feignClient.course.model.TCoursePackage;
import com.dsh.course.feignClient.course.model.TCoursePackagePayment;
import com.dsh.course.feignClient.other.HistoryClient;
import com.dsh.course.model.MoneyBack;
import com.dsh.course.model.dto.InsertBackDto;
import com.dsh.course.model.dto.StudentClassInfo;
import com.dsh.course.util.ChineseMoneyUtils;
import com.dsh.course.util.HtmlToPdfUtils;
import com.dsh.guns.config.UserExt;
import com.dsh.guns.core.base.controller.BaseController;
import com.dsh.guns.modular.system.model.CourseCounsum;
import com.dsh.guns.modular.system.model.TStudent;
import com.dsh.guns.modular.system.model.User;
import com.dsh.guns.modular.system.model.dto.SelectDto;
import com.dsh.guns.modular.system.model.dto.*;
import com.dsh.guns.modular.system.service.ITStudentService;
import com.dsh.guns.modular.system.util.BigDecimalToChineseAmountUtil;
import com.dsh.guns.modular.system.util.ResultUtil;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -50,8 +68,51 @@
    @RequestMapping("download")
    public void down(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // Get the InputStream from a file or any other source
        InputStream inputStream = request.getInputStream(); // Obtain the InputStream
        // Set the content type of the response
        response.setContentType("application/octet-stream");
        // Set the headers for file download
        response.setHeader("Content-Disposition", "attachment; filename=\"filename.extension\"");
        // Get the OutputStream from the response
        OutputStream outputStream = response.getOutputStream();
        // Copy the data from InputStream to OutputStream
        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
        }
        HtmlToPdfUtils.convertToPdf(inputStream,null,outputStream);
        // Close the streams
        inputStream.close();
        outputStream.close();
    }
    /**
     * 获取变更列表
     */
    /**
     * 获取有效期
     */
    @RequestMapping("/changelist/{payId}")
    @ResponseBody
    public ResultUtil changelist(@PathVariable("payId") Integer payId, ConsumeQuery consumeQuery) {
        consumeQuery.setPayId(payId);
        System.out.println("=======changelist==========="+consumeQuery);
        List<CourseCounsum> courseCounsums =   courseStuddentClient.queryCounsum(consumeQuery);
        Map<String,List<CourseCounsum>> map = new HashMap<>();
        map.put("items",courseCounsums);
        return new ResultUtil<>(0,0,null,map,null);
    }
    /**
     * 跳转到首页
@@ -61,6 +122,22 @@
        return PREFIX + "tStudent.html";
    }
    @RequestMapping("TTT")
    public String index1() {
        return PREFIX + "tStudentEditTTT.html";
    }
    @RequestMapping("openAddCoursePackage")
    public String index3() {
        return PREFIX + "classelct.html";
    }
    @RequestMapping("trans")
    public String index2() {
        return PREFIX + "trans.html";
    }
    /**
     * 跳转到添加
     */
@@ -69,6 +146,91 @@
        return PREFIX + "tStudent_add.html";
    }
    @Resource
    private CoursePackageClient coursePackageClient;
    /**
     * 获取有效期
     */
    @RequestMapping("/getBackList/{tStudentId}")
    @ResponseBody
    public ResultUtil getBackList(@PathVariable("tStudentId") Integer tStudentId) {
        List<MoneyBack> moneyBacks  = courseStuddentClient.getMoneyBack(tStudentId);
        Map<String, List<MoneyBack>> map = new HashMap<>();
        map.put("items",moneyBacks);
        return new ResultUtil<>(0,0,null,map,null);
    }
    /**
     * 跳转到退款
     */
    @RequestMapping("/backmoney")
    public String backmoney(Integer id,String ids,Model model) {
        TStudentDto tStudentDto = appUserClient.queryOneWebUser(id);
        model.addAttribute("id", id);
        model.addAttribute("ids", ids);
        TAppUser tAppUser = appUserClient.queryById(tStudentDto.getAppUserId());
        model.addAttribute("userName",tAppUser.getName());
        model.addAttribute("tStudentDto",tStudentDto);
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate = dateFormat.format(new Date());
        model.addAttribute("reDate", formattedDate);
        List<TCoursePackagePayment> coursePackagePayments =  courseStuddentClient.queryByIds(ids);
        BigDecimal countAll = new BigDecimal(0);
        for (TCoursePackagePayment payment : coursePackagePayments){
            //课包名称
            TCoursePackage tCoursePackage = coursePackageClient.queryById(payment.getCoursePackageId());
            payment.setName(tCoursePackage.getName());
            payment.setId(Long.valueOf(tCoursePackage.getId()));
            BigDecimal cashPayment = payment.getCashPayment();
            Integer totalClassHours = payment.getTotalClassHours();
            BigDecimal result =  new BigDecimal(0);
            if (totalClassHours!=0) {
                result = cashPayment.divide(BigDecimal.valueOf(totalClassHours), 2, RoundingMode.HALF_UP);
            }
            //单价
            payment.setOnePrice(result);
            int has = payment.getTotalClassHours() - payment.getLaveClassHours();
            //剩余课时
            payment.setHasHours(has);
            BigDecimal onePrice = payment.getOnePrice();
            Integer laveClassHours = payment.getLaveClassHours();
            BigDecimal result1 = onePrice.multiply(BigDecimal.valueOf(laveClassHours));
            //总价
            payment.setRestPrice(result1);
            System.out.println("======="+result1);
            countAll = countAll.add(result1);
        }
        //中文总价
//        String allprice = BigDecimalToChineseAmountUtil.convertToChineseAmount(countAll);
        String allprice = ChineseMoneyUtils.toChineseMoney(countAll);
        model.addAttribute("countAll", countAll);
        model.addAttribute("allprice", allprice);
        model.addAttribute("coursePackagePayments", coursePackagePayments);
        model.addAttribute("index",1);
        System.out.println("=====ids========"+ids);
        return PREFIX + "banckmoney.html";
    }
    /**
     * 跳转到修改
     */
@@ -88,7 +250,7 @@
                model.addAttribute("pic2", pics[1]);
                System.out.println("=====pic2==" + pics[1]);
            }
            if (pics.length > 3) {
            if (pics.length > 2) {
                model.addAttribute("pic3", pics[2]);
                System.out.println("=====pic3==" + pics[2]);
            }
@@ -121,7 +283,7 @@
                model.addAttribute("pic2", pics[1]);
                System.out.println("=====pic2==" + pics[1]);
            }
            if (pics.length > 3) {
            if (pics.length > 2) {
                model.addAttribute("pic3", pics[2]);
                System.out.println("=====pic3==" + pics[2]);
            }
@@ -180,13 +342,39 @@
//保存退款记录
    @RequestMapping("/ttt")
    @ResponseBody
    public ResultUtil list1(StudentSearch search) {
    public ResultUtil list1(Integer id, String ids) {
        InsertBackDto insertBackDto= new InsertBackDto();
        insertBackDto.setId(id);
        insertBackDto.setIds(ids);
        System.out.println("=====insertBackDto========"+insertBackDto);
        courseStuddentClient.insertBack(insertBackDto);
        //取消排课
        courseStuddentClient.cancel(ids);
        System.out.println("============学员查询接口=========");
        return ResultUtil.success();
    }
    @RequestMapping("/changeStatus/{id}")
    @ResponseBody
    public ResultUtil changeStatus(@PathVariable Integer id) {
//        InsertBackDto insertBackDto= new InsertBackDto();
//        insertBackDto.setId(id);
////        insertBackDto.setIds(ids);
//        System.out.println("=====insertBackDto========"+insertBackDto);
        courseStuddentClient.changeStatus(id);
        courseStuddentClient.zeroClass(id);
        System.out.println("============学员查询接口=========");
        return new ResultUtil<>(0,0,"同意成功",null,null);
    }
    /**
     * 学员修改
@@ -194,8 +382,10 @@
    @RequestMapping(value = "/update")
    @ResponseBody
    public ResultUtil update(@RequestBody TStudent tStudent, String image1, String image2, String image3 ) {
        String lateralSurface = image1+";"+image2+";"+image3;
    public ResultUtil update(@RequestBody TStudent tStudent) {
        String lateralSurface = tStudent.getImage1()+";"+tStudent.getImage2()+";"+tStudent.getImage3();
        System.out.println("=======lateralSurface======>?"+lateralSurface);
        tStudent.setLateralSurface(lateralSurface);
        System.out.println("学员体测表的值"+lateralSurface);
        itStudentService.update(tStudent);
@@ -270,4 +460,126 @@
        map.put("options",selectDtos);
        return new ResultUtil(0,0,"编辑成功",map,"");
    }
    /**
     * 学员转移课程
     */
    @RequestMapping(value = "/toClass")
    @ResponseBody
    public ResultUtil toClass( Integer id,Integer toStudentId) {
        ToClassDto toClassDto = new ToClassDto();
        toClassDto.setToStudentId(toStudentId);
        toClassDto.setId(id);
        courseStuddentClient.toClass(toClassDto);
//        Map<String,List<SelectDto>> map = new HashMap<>();
//        map.put("options",selectDtos);
        return new ResultUtil(0,0,"编辑成功",1,"");
    }
    /**
     * 赠送课时下拉框
     */
    @RequestMapping(value = "/giftSelect")
    @ResponseBody
    public ResultUtil giftSelect(GiftSearchDto giftSearchDto) {
        List<SelectDto>  selectDtos =  appUserClient.giftSelect(giftSearchDto);
        Map<String,List<SelectDto>> map = new HashMap<>();
        map.put("options",selectDtos);
//        Map<String,List<SelectDto>> map = new HashMap<>();
//        map.put("options",selectDtos);
        return new ResultUtil(0,0,"编辑成功",map,"");
    }
    //获取可报名假期课程下拉框
    @RequestMapping(value = "/getholi/{id}")
    @ResponseBody
    public ResultUtil giftSelect(@PathVariable("id") Integer id) {
        List<SelectDto>  selectDtos =  courseStuddentClient.getGiftSelect(id);
        Map<String,List<SelectDto>> map = new HashMap<>();
        map.put("options",selectDtos);
        return new ResultUtil(0,0,"编辑成功",map,"");
    }
    //获取可转换常规课程下拉框
    @RequestMapping(value = "/gettrans/{id}")
    @ResponseBody
    public ResultUtil gettrans(@PathVariable("id") Integer id) {
        List<SelectDto>  selectDtos =  courseStuddentClient.getTransSelect(id);
        Map<String,List<SelectDto>> map = new HashMap<>();
        map.put("options",selectDtos);
        return new ResultUtil(0,0,"编辑成功",map,"");
    }
    //消耗时长可报名假期课程
    @RequestMapping(value = "/Toholi")
    @ResponseBody
    public ResultUtil Toholi(Integer id,String ids,Integer holiId,Integer classNum) {
        String[] stringArray = ids.split(",");
        ToHoliDto toHoliDto  = new ToHoliDto();
        toHoliDto.setId(id);
        toHoliDto.setIds(stringArray);
        toHoliDto.setClassNum(classNum);
        toHoliDto.setClassId(holiId);
        String resultUtil = courseStuddentClient.toHoli(toHoliDto);
        System.out.println("========ToHoliDto========="+resultUtil);
        if (resultUtil==""){
            return new ResultUtil<>(0,0,"报名成功");
        }else
        return new ResultUtil<>(0,0,"报名成功,以下学员剩余课时不足"+resultUtil);
    }
    @RequestMapping(value = "/ToTrans")
    @ResponseBody
    public ResultUtil Totans(Integer id,String ids,Integer holiId,Integer classNum) {
        String[] stringArray = ids.split(",");
        ToHoliDto toHoliDto  = new ToHoliDto();
        toHoliDto.setId(id);
        toHoliDto.setIds(stringArray);
        toHoliDto.setClassNum(classNum);
        toHoliDto.setClassId(holiId);
        String resultUtil = courseStuddentClient.toTrans(toHoliDto);
        System.out.println("========ToHoliDto========="+resultUtil);
        if (resultUtil==""){
            return new ResultUtil<>(0,0,"报名成功");
        }else
            return new ResultUtil<>(0,0,"报名成功,以下学员剩余课时不足"+resultUtil);
    }
    //赠课
    @RequestMapping(value = "/giftTo")
    @ResponseBody
    public ResultUtil toClagiftToss( Integer id,Integer toStudentId) {
        ToClassDto toClassDto = new ToClassDto();
        toClassDto.setToStudentId(toStudentId);
        toClassDto.setId(id);
        courseStuddentClient.toClass(toClassDto);
//        Map<String,List<SelectDto>> map = new HashMap<>();
//        map.put("options",selectDtos);
        return new ResultUtil(0,0,"编辑成功",1,"");
    }
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CourseCounsum.java
New file
@@ -0,0 +1,19 @@
package com.dsh.guns.modular.system.model;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.models.auth.In;
import lombok.Data;
import java.util.Date;
@Data
public class CourseCounsum {
    Integer id;
    Integer changeType;
    Integer num;
    String reason;
    Long paymentId;
    Date insertTime;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TOperatorCity.java
New file
@@ -0,0 +1,58 @@
package com.dsh.guns.modular.system.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * <p>
 * 运营商
 * </p>
 *
 * @author administrator
 * @since 2023-09-22
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_operator_city")
public class TOperatorCity extends Model<TOperatorCity> {
    private static final long serialVersionUID=1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 名称
     */
    private String name;
    /**
     * code
     */
    private Integer code;
    /**
     * 1 省 2市
     */
    private Integer type;
    private Integer pid;
    @TableField("operatorId")
    private Integer operatorId;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TSite.java
@@ -108,4 +108,25 @@
    @TableField("insertTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date insertTime;
    @TableField("operatorId")
    private Integer operatorId;
    @TableField("typeName")
    private String typeName;
    @TableField("nextName")
    private String nextName;
    @TableField("ishalf")
    private Integer ishalf;
    @TableField("cashPriceOne")
    private Double cashPriceOne;
    @TableField("playPaiCoinOne")
    private Double playPaiCoinOne;
    @TableField("halfName")
    private String halfName;
    @TableField("introduce")
    private String introduce;
    @TableField("imgs")
    private String imgs;
    @TableField("ids")
    private String ids;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TStudent.java
@@ -107,4 +107,8 @@
    private Integer isDefault;
    private String image1;
    private String image2;
    private String image3;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/ConsumeQuery.java
New file
@@ -0,0 +1,19 @@
package com.dsh.guns.modular.system.model.dto;
import io.swagger.models.auth.In;
import lombok.Data;
import org.apache.catalina.util.Introspection;
import java.util.Date;
@Data
public class ConsumeQuery {
    Date start;
    Date end;
    Integer changeType;
    String reason;
    Integer payId;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/GiftSearchDto.java
New file
@@ -0,0 +1,11 @@
package com.dsh.guns.modular.system.model.dto;
import io.swagger.models.auth.In;
import lombok.Data;
@Data
public class GiftSearchDto {
    String name;
    String phone;
    Integer id;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/HoliSelect.java
New file
@@ -0,0 +1,5 @@
package com.dsh.guns.modular.system.model.dto;
public class HoliSelect {
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/ToClassDto.java
New file
@@ -0,0 +1,10 @@
package com.dsh.guns.modular.system.model.dto;
import io.swagger.models.auth.In;
import lombok.Data;
@Data
public class ToClassDto {
    Integer id;
    Integer toStudentId;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/ToHoliDto.java
New file
@@ -0,0 +1,13 @@
package com.dsh.guns.modular.system.model.dto;
import io.swagger.models.auth.In;
import lombok.Data;
import java.util.List;
@Data
public class ToHoliDto {
    Integer id;
    Integer classId;
    Integer classNum;
    String[] ids;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/TOperatorCityService.java
New file
@@ -0,0 +1,17 @@
package com.dsh.guns.modular.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.guns.modular.system.model.TOperatorCity;
/**
 * <p>
 * 运营商 服务类
 * </p>
 *
 * @author administrator
 * @since 2023-09-22
 */
public interface TOperatorCityService extends IService<TOperatorCity> {
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java
@@ -108,11 +108,13 @@
            Integer classHours = jsonObject.getInteger("classHours");
            Double cashPayment = jsonObject.getDouble("cashPayment");
            Integer playPaiCoin = jsonObject.getInteger("playPaiCoin");
            String couponIds = jsonObject.getString("couponIds");
            CoursePackagePaymentConfig coursePackagePaymentConfig1 = new CoursePackagePaymentConfig();
            coursePackagePaymentConfig1.setCoursePackageId(integer);
            coursePackagePaymentConfig1.setClassHours(classHours);
            coursePackagePaymentConfig1.setCashPayment(cashPayment);
            coursePackagePaymentConfig1.setPlayPaiCoin(playPaiCoin);
            coursePackagePaymentConfig1.setCouponIds(couponIds);
            coursePackagePaymentConfigClient.addCoursePackagePaymentConfig(coursePackagePaymentConfig1);
        }
    }
@@ -144,11 +146,13 @@
            Integer classHours = jsonObject.getInteger("classHours");
            Double cashPayment = jsonObject.getDouble("cashPayment");
            Integer playPaiCoin = jsonObject.getInteger("playPaiCoin");
            String couponIds = jsonObject.getString("couponIds");
            CoursePackagePaymentConfig coursePackagePaymentConfig1 = new CoursePackagePaymentConfig();
            coursePackagePaymentConfig1.setCoursePackageId(coursePackage.getId());
            coursePackagePaymentConfig1.setClassHours(classHours);
            coursePackagePaymentConfig1.setCashPayment(cashPayment);
            coursePackagePaymentConfig1.setPlayPaiCoin(playPaiCoin);
            coursePackagePaymentConfig1.setCouponIds(couponIds);
            coursePackagePaymentConfigClient.addCoursePackagePaymentConfig(coursePackagePaymentConfig1);
        }
    }
@@ -458,9 +462,9 @@
            }
            TCoursePackagePayment tCoursePackagePayment = coursePackagePaymentClient.queryCoursePackagePaymentById(coursePackageStudent.getCoursePackagePaymentId());
            tCoursePackagePayment.setLaveClassHours(tCoursePackagePayment.getLaveClassHours() - deductClassHour);
            if(coursePackageStudent.getSignInOrNot() == 0){
//            if(coursePackageStudent.getSignInOrNot() == 0){
                tCoursePackagePayment.setAbsencesNumber(tCoursePackagePayment.getAbsencesNumber() + 1);
            }
//            }
            coursePackagePaymentClient.editCoursePackagePayment(tCoursePackagePayment);
            CancelledClasses cancelledClasses = new CancelledClasses();
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TOperatorCityServiceImpl.java
New file
@@ -0,0 +1,21 @@
package com.dsh.guns.modular.system.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.course.mapper.TOperatorCityMapper;
import com.dsh.guns.modular.system.model.TOperatorCity;
import com.dsh.guns.modular.system.service.TOperatorCityService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * 运营商 服务实现类
 * </p>
 *
 * @author administrator0
 * @since 2023-09-22
 */
@Service
public class TOperatorCityServiceImpl extends ServiceImpl<TOperatorCityMapper, TOperatorCity> implements TOperatorCityService {
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/util/BigDecimalToChineseAmountUtil.java
New file
@@ -0,0 +1,80 @@
package com.dsh.guns.modular.system.util;
import java.math.BigDecimal;
public class BigDecimalToChineseAmountUtil {
    private static final String[] CN_UPPER_NUMBER = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
    private static final String[] CN_UPPER_MONETRAY_UNIT = {"分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "兆", "拾", "佰", "仟"};
    private static final String CN_FULL = "整";
    private static final String CN_NEGATIVE = "负";
    private static final int MONEY_PRECISION = 2;
    public static String convertToChineseAmount(BigDecimal number) {
        StringBuilder builder = new StringBuilder();
        if (number.compareTo(BigDecimal.ZERO) < 0) {
            builder.append(CN_NEGATIVE);
            number = number.abs();
        }
        long integralPart = number.longValue();
        BigDecimal decimalPart = number.subtract(BigDecimal.valueOf(integralPart)).multiply(BigDecimal.TEN.pow(MONEY_PRECISION));
        if (decimalPart.compareTo(BigDecimal.ZERO) == 0) {
            builder.append(CN_FULL);
        }
        long integralPartTemp = integralPart;
        int unit = 0;
        boolean isZero = true;
        boolean needZero = false;
        while (integralPartTemp > 0) {
            long tempNumber = integralPartTemp % 10;
            if (tempNumber > 0) {
                if (needZero) {
                    builder.insert(0, CN_UPPER_NUMBER[0]);
                }
                builder.insert(0, CN_UPPER_MONETRAY_UNIT[unit]);
                builder.insert(0, CN_UPPER_NUMBER[(int) tempNumber]);
                isZero = false;
                needZero = false;
            } else {
                if (!isZero) {
                    needZero = true;
                }
                if (unit == 2 || unit == 6 || unit == 10 || unit == 14) {
                    builder.insert(0, CN_UPPER_MONETRAY_UNIT[unit]);
                    isZero = true;
                }
            }
            integralPartTemp = integralPartTemp / 10;
            unit++;
        }
        if (decimalPart.compareTo(BigDecimal.ZERO) > 0) {
            builder.append(convertDecimalToChinese(decimalPart));
        }
        return builder.toString();
    }
    private static String convertDecimalToChinese(BigDecimal decimalPart) {
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < MONEY_PRECISION; i++) {
            int num = decimalPart.intValue() % 10;
            builder.insert(0, CN_UPPER_NUMBER[num]);
            builder.append(CN_UPPER_MONETRAY_UNIT[i + 2]);
            decimalPart = decimalPart.multiply(BigDecimal.TEN);
        }
        return builder.toString();
    }
    public static void main(String[] args) {
        BigDecimal number = new BigDecimal("12345.67");
        String chineseAmount = convertToChineseAmount(number);
        System.out.println(chineseAmount); // Output: 壹万贰仟叁佰肆拾伍元陆角柒分
    }
}
cloud-server-management/src/main/resources/mapper/TOperatorCityMapper.xml
New file
@@ -0,0 +1,6 @@
<?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.course.mapper.TOperatorCityMapper">
</mapper>
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/TCoupon.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">
                            <div class="col-sm-3">
                                <#NameCon id="name" name="优惠券名称" />
                                <input type="hidden" id="index" value="${index}">
                            </div>
<!--                            <div class="col-sm-3">-->
<!--                                <#SelectCon id="type" name="优惠券类型" >-->
<!--                                <option value="">全部</option>-->
<!--                                <option value="1">满减券</option>-->
<!--                                <option value="2">折扣券</option>-->
<!--                                <option value="3">体验券</option>-->
<!--                            </#SelectCon>-->
<!--                        </div>-->
<!--                        <div class="col-sm-3">-->
<!--                            <#SelectCon id="distributionMethod" name="发放方式" >-->
<!--                            <option value="">全部</option>-->
<!--                            <option value="1">积分购买</option>-->
<!--                            <option value="2">注册赠送</option>-->
<!--                            <option value="3">自动发券</option>-->
<!--                        </#SelectCon>-->
<!--                    </div>-->
<!--                    <div class="col-sm-3">-->
<!--                        <#SelectCon id="userPopulation" name="用户人群" >-->
<!--                        <option value="">全部</option>-->
<!--                        <option value="1">全部用户</option>-->
<!--                        <option value="2">年度会员</option>-->
<!--                        <option value="3">已有学员用户</option>-->
<!--                    </#SelectCon>-->
<!--                </div>-->
<!--                <div class="col-sm-3">-->
<!--                    <#SelectCon id="status" name="活动状态" >-->
<!--                    <option value="">全部</option>-->
<!--                    <option value="1">未开始</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>-->
<!--                </#SelectCon>-->
<!--                        </div>-->
<!--        <div class="col-sm-3">-->
            <#button name="搜索" icon="fa-search" clickFun="TCoupon.search()"/>
<!--            <#button name="重置" icon="fa-trash" clickFun="TCoupon.resetSearch()"/>-->
        </div>
                        </div>
<!--                        <div class="hidden-xs" id="TCouponTableToolbar" role="group">-->
<!--                            <#button name="添加" icon="fa-plus" clickFun="TCoupon.backids(${index})" />-->
<!--                            <#button name="编辑" icon="fa-edit" clickFun="TCoupon.openChange()" space="true" hidden='hidden'/>-->
<!--                            <#button name="上架" icon="fa-remove" clickFun="TCoupon.onShelf(1)" space="true" hidden='hidden'/>-->
<!--                            <#button name="下架" icon="fa-remove" clickFun="TCoupon.onShelf(2)" space="true" hidden='hidden'/>-->
<!--                            <#button name="查看详情" icon="fa-remove" clickFun="TCoupon.openDetail()" space="true" hidden='hidden'/>-->
<!--                            <#button name="领取记录" icon="fa-remove" clickFun="TCoupon.openCollectionRecord()" space="true" hidden='hidden'/>-->
<!--                        </div>-->
                        <#table id="TCouponTable"/>
    <div style="display: flex">                             <#button name="添加" icon="fa-plus" clickFun="TCoupon.backids(${index})"/>
    </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/coursePackage/TCoupon.js"></script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/TCouponEdit.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">
                            <div class="col-sm-3">
                                <#NameCon id="name" name="优惠券名称" />
                                <input type="text" id="conpund" value="${conpund}">
                                <input type="text" id="index" value="${index}">
                            </div>
                            <div class="col-sm-3">
                                <#SelectCon id="type" name="优惠券类型" >
                                <option value="">全部</option>
                                <option value="1">满减券</option>
                                <option value="2">折扣券</option>
                                <option value="3">体验券</option>
                            </#SelectCon>
                        </div>
                        <div class="col-sm-3">
                            <#SelectCon id="distributionMethod" name="发放方式" >
                            <option value="">全部</option>
                            <option value="1">积分购买</option>
                            <option value="2">注册赠送</option>
                            <option value="3">自动发券</option>
                        </#SelectCon>
                    </div>
                    <div class="col-sm-3">
                        <#SelectCon id="userPopulation" name="用户人群" >
                        <option value="">全部</option>
                        <option value="1">全部用户</option>
                        <option value="2">年度会员</option>
                        <option value="3">已有学员用户</option>
                    </#SelectCon>
                </div>
                <div class="col-sm-3">
                    <#SelectCon id="status" name="活动状态" >
                    <option value="">全部</option>
                    <option value="1">未开始</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>
                </#SelectCon>
                        </div>
        <div class="col-sm-3">
            <#button name="搜索" icon="fa-search" clickFun="TCoupon.search()"/>
            <#button name="重置" icon="fa-trash" clickFun="TCoupon.resetSearch()"/>
        </div>
                        </div>
                        <div class="hidden-xs" id="TCouponTableToolbar" role="group">
                            <#button name="添加" icon="fa-plus" clickFun="TCoupon.backids(${index})"/>
                            <#button name="编辑" icon="fa-edit" clickFun="TCoupon.openChange()" space="true"/>
                            <#button name="上架" icon="fa-remove" clickFun="TCoupon.onShelf(1)" space="true"/>
                            <#button name="下架" icon="fa-remove" clickFun="TCoupon.onShelf(2)" space="true"/>
                            <#button name="查看详情" icon="fa-remove" clickFun="TCoupon.openDetail()" space="true"/>
                            <#button name="领取记录" icon="fa-remove" clickFun="TCoupon.openCollectionRecord()" space="true"/>
                        </div>
                        <#table id="TCouponTable"/>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/coursePackage/TCouponEdit.js"></script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/classRecord.html
@@ -9,6 +9,8 @@
                        <div class="row">
                            <h3>课包信息</h3>
                            <input type="hidden" id="id" value="${item.id}">
                            <input type="hidden" id="codeTime" value="${item.codeTime}">
                            <div class="form-group" style="height: 10px;">
                                <label class="col-sm-1 control-label" style="text-align: right;">所属门店:</label>
                                <span class="col-sm-2" style="text-align: left;">${store.name}</span>
@@ -19,22 +21,30 @@
                            </div>
                            <div class="form-group" style="height: 10px;">
                                <label class="col-sm-1 control-label" style="text-align: right;">授课教师:</label>
                                <span class="col-sm-2" style="text-align: left;">${coach.name}</span>
                                <span class="col-sm-2" style="text-align: left;">${coach.name!}</span>
                            </div>
                            <div class="form-group" style="height: 10px;">
                                <label class="col-sm-1 control-label" style="text-align: right;">已报名学员:</label>
                                <span class="col-sm-2" style="text-align: left;">${counts}</span>
                            </div>
                            <div class="form-group" style="height: 10px;">
                                <label class="col-sm-1 control-label" style="text-align: right;">上课时间:</label>
                                <span class="col-sm-2" style="text-align: left;">${item.classWeeks}</span>
                            </div>
                            @for(time in times){
                            <div class="form-group" style="height: 10px;">
                                <label class="col-sm-1 control-label" style="text-align: right;"></label>
                                <span class="col-sm-2" style="text-align: left;">${item.classStartTime + ' - ' + item.classEndTime}</span>
                                <span class="col-sm-2" style="text-align: left;">${time}</span>
                            </div>
                            @}
                        </div>
                        <div class="hidden-xs" id="managerTableToolbar" role="group">
                            <#button name="查看学员" icon="fa-plus" clickFun="ClassRecord.classRecord()"/>
                            <#button name="取消本次" icon="fa-edit" clickFun="ClassRecord.cancelClassSchedule()" space="true"/>
                            <#button name="发布课后练习" icon="fa-refresh" clickFun="ClassRecord.afterClassExercises()" space="true"/>
                            <#button name="上传消课记录" icon="fa-refresh" clickFun="ClassRecord.cancellationRecord()" space="true"/>
                            <#button name="上传消课记录" icon="fa-refresh" clickFun="ClassRecord.cancellationRecord(${item.codeTime})" space="true"/>
                            <#button name="查看消课记录" icon="fa-refresh" clickFun="ClassRecord.lookCancellationRecord()" space="true"/>
                            <#button name="手动预约" icon="fa-refresh" clickFun="ClassRecord.manualReservation()" space="true"/>
                        </div>
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage.html
@@ -63,27 +63,16 @@
                            </div>
                        </div>
                        <div class="hidden-xs" id="managerTableToolbar" role="group">
                            @if(shiro.hasPermission("/coursePackage/addCoursePackage")){
                            <#button name="测试添加" icon="fa-plus" clickFun="CoursePackage.addCoursePackage1()"/>
                            <#button name="添加" icon="fa-plus" clickFun="CoursePackage.addCoursePackage()"/>
                            @}
                            @if(shiro.hasPermission("/coursePackage/editCoursePackage")){
                            <#button name="编辑" icon="fa-edit" clickFun="CoursePackage.editCoursePackage()" space="true"/>
                            @}
                            @if(shiro.hasPermission("/coursePackage/upCoursePackage")){
                            <#button name="上架" icon="fa-refresh" clickFun="CoursePackage.editCoursePackageState(1)" space="true"/>
                            @}
                            @if(shiro.hasPermission("/coursePackage/downCoursePackage")){
                            <#button name="下架" icon="fa-warning" clickFun="CoursePackage.editCoursePackageState(2)" space="true"/>
                            @}
                            @if(shiro.hasPermission("/coursePackage/coursePackageDiscount")){
                            <#button name="折扣管理" icon="fa-check-circle" clickFun="CoursePackage.coursePackageDiscount()" space="true"/>
                            @}
                            @if(shiro.hasPermission("/coursePackage/detailsCoursePackage")){
                            <#button name="详情" icon="fa-check-circle" clickFun="CoursePackage.detailsCoursePackage()" space="true"/>
                            @}
                            @if(shiro.hasPermission("/coursePackage/registrationRecord")){
                            <#button name="报名信息" icon="fa-check-circle" clickFun="CoursePackage.registrationRecord()" space="true"/>
                            @}
                        </div>
                        <#table id="managerTable"/>
                    </div>
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackageStudent.html
@@ -7,6 +7,7 @@
                <div class="row row-lg">
                    <div class="col-sm-12">
                        <input type="hidden" id="id" value="${id}">
                        <div class="row">
                            <div class="col-lg-10 col-sm-9">
                                <div class="row">
@@ -28,8 +29,8 @@
                            </div>
                        </div>
                        <div class="hidden-xs" id="managerTableToolbar" role="group">
                            <#button name="取消预约" icon="fa-plus" clickFun="CoursePackageStudent.cancelReservation()"/>
                            <#button name="未到" icon="fa-edit" clickFun="CoursePackageStudent.absence()" space="true"/>
                            <#button name="请假" icon="fa-plus" clickFun="CoursePackageStudent.cancelReservation()"/>
                            <#button name="旷课" icon="fa-edit" clickFun="CoursePackageStudent.absence()" space="true"/>
                        </div>
                        <#table id="managerTable"/>
                    </div>
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html
@@ -76,15 +76,10 @@
                        <input class="form-control" id="maxSubscribeNumber" name="maxSubscribeNumber" type="number" min="0" placeholder="请输入最多预约人数">
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">*上课时间:</label>
                    <div class="col-sm-4">
                        <input class="form-control" id="classStartTime" name="classStartTime" placeholder="请选择">
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label"></label>
                    <div class="col-sm-8">
                        <input type="checkbox" name="classWeeks" value="周一"> 周一&nbsp;&nbsp;&nbsp;&nbsp;
                        <input type="checkbox" name="classWeeks" value="周二"> 周二&nbsp;&nbsp;&nbsp;&nbsp;
                        <input type="checkbox" name="classWeeks" value="周三"> 周三&nbsp;&nbsp;&nbsp;&nbsp;
@@ -92,6 +87,27 @@
                        <input type="checkbox" name="classWeeks" value="周五"> 周五&nbsp;&nbsp;&nbsp;&nbsp;
                        <input type="checkbox" name="classWeeks" value="周六"> 周六&nbsp;&nbsp;&nbsp;&nbsp;
                        <input type="checkbox" name="classWeeks" value="周日"> 周日&nbsp;&nbsp;&nbsp;&nbsp;
                    </div>
                </div>
                <div class="form-group"  >
                    <label class="col-sm-3 control-label"></label>
                        <div class="form-group" style="display: flex; align-items: center;" id = "dayTime" >
                            <div style="display:flex">
                            <input class="form-control" id="classStartTime" name="classStartTime" placeholder="请选择" style="width: 200px;">
                                <i class="fa fa-plus-circle" style="font-size: 24px; margin-left: 10px;" onclick="addTime()"></i>
                        </div>
                        </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">*扣除课时数:</label>
                    <div class="col-sm-4">
                        <input class="form-control" id="codeTime" name="codeTime" type="number" min="0" placeholder="请输入每节课扣除课时数">
                    </div>
                </div>
                <div class="form-group">
@@ -181,10 +197,13 @@
                            <span class="classNumber_span"><input class="classNumber" type="number" min="0" placeholder="请输入" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;">&nbsp;&nbsp;&nbsp;&nbsp;</span>
                            <span class="cash_span"></span>
                            <span class="paiCoin_span"></span>
                            <#button btnCss="info" name="优惠卷" id="ensure" icon="fa-check" clickFun="CoursePackageInfo.openDia(1)"/>
                            <i class="fa fa-plus-circle" style="font-size:24px" onclick="addPrice()"></i>
                            <input type="text" id = "counpons1" class="counpons"  >
                        </div>
                    </div>
                </div>
<!--                <input type="text" id = "counpons">-->
            </div>
            <div class="row btn-group-m-t">
                <div class="col-sm-10">
@@ -213,5 +232,20 @@
    var avatarUp1 = new $WebUpload("introduceDrawing");
    avatarUp1.setUploadBarId("progressBar");
    avatarUp1.init();
    function addTime(){
        var i =  $('#dayTime > div').length
        let htmlStr ='           <div style="display:flex">\n' +
            '                                <input class="form-control" id="classStartTime'+i+'" name="classStartTime" placeholder="请选择" style="width: 200px;">\n' +
            '                                <i class="fa fa-plus-circle" style="font-size: 24px; margin-left: 10px;" onclick="addTime()"></i>\n' +
            '                            </div>'
        $('#dayTime').append(htmlStr);
        console.log("========="+i)
        laydate.render({
            elem: '#classStartTime'+i,
            type: 'time',
            range: true
        });
    }
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html
@@ -91,6 +91,13 @@
                        @}
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">*扣除课时数:</label>
                    <div class="col-sm-4">
                        <input class="form-control" id="codeTime" name="codeTime" value="${item.codeTime}" type="number" min="0" placeholder="请输入每节课扣除课时数">
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">*课包封面:</label>
                    <div class="col-sm-4">
@@ -186,6 +193,8 @@
                                玩湃币支付:<input class="paiCoin" type="number" value="${coursePackagePaymentConfig.playPaiCoin}" min="0" placeholder="请输入金额" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"> 币&nbsp;&nbsp;&nbsp;&nbsp;
                                @}
                            </span>
                            <input type="text" id="counpons1" value="${couponIds}" class="counpons">
                            <#button btnCss="info" name="优惠卷" id="ensure" icon="fa-check" clickFun="CoursePackageInfo.openDia1(1)"/>
                            <i class="fa fa-plus-circle" style="font-size:24px" onclick="addPrice()"></i>
                        </div>
                    </div>
@@ -221,6 +230,8 @@
</div>
<script src="${ctxPath}/modular/system/coursePackage/coursePackage_info.js"></script>
<script type="text/javascript">
    console.log("============>"+`${couponIds}`)
    laydate.render({
        elem: '#classStartTime'
        ,type: 'time'
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord.html
@@ -32,6 +32,9 @@
                            <#button name="上课记录" icon="fa-plus" clickFun="RegistrationRecord.classRecord()"/>
                            <#button name="退课" icon="fa-edit" clickFun="RegistrationRecord.dropClass()" space="true"/>
                            <#button name="补课" icon="fa-refresh" clickFun="RegistrationRecord.makeUpMissedLessons()" space="true"/>
                            <#button name="更换假期班" icon="fa-refresh" clickFun="RegistrationRecord.holiClass()" space="true"/>
                            <#button name="换课" icon="fa-refresh" clickFun="RegistrationRecord.transClass()" space="true"/>
                        </div>
                        <#table id="managerTable"/>
                    </div>
cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/tCoupon_add.html
New file
@@ -0,0 +1,56 @@
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <div class="form-horizontal">
            <div class="row">
                <div class="col-sm-6 b-r">
                            <#input id="id" name="主键" underline="true"/>
                            <#input id="name" name="优惠券名称" underline="true"/>
                            <#input id="type" name="优惠券类型(1=满减券,2=代金券,3=体验券)" underline="true"/>
                            <#input id="content" name="优惠券规则JSON
格式:
{
    "conditionalAmount": 5,
    "deductionAmount": 6.8,
    "experienceName": ""
}" underline="true"/>
                            <#input id="illustrate" name="优惠券说明" underline="true"/>
                            <#input id="distributionMethod" name="发放方式(1=积分购买,2=注册赠送,3=自动发券)" underline="true"/>
                            <#input id="redemptionMethod" name="兑换方式(1=积分,2=积分+现金)" underline="true"/>
                            <#input id="cash" name="所需现金" underline="true"/>
                            <#input id="integral" name="所属积分" underline="true"/>
                            <#input id="userPopulation" name="用户人群(1=全部用户,2=年度会员,3=已有学员用户)" underline="true"/>
                            <#input id="quantityIssued" name="发放数量" underline="true"/>
                            <#input id="pickUpQuantity" name="限领数量" underline="true"/>
                            <#input id="startTime" name="开始时间"/>
                </div>
                <div class="col-sm-6">
                            <#input id="endTime" name="结束时间" underline="true"/>
                            <#input id="useScope" name="使用范围(1=全国,2=指定城市,3=指定门店)" underline="true"/>
                            <#input id="auditStatus" name="审核状态(1=待审核,2=已通过,3=已拒绝)" underline="true"/>
                            <#input id="auditUserId" name="审核人id" underline="true"/>
                            <#input id="auditRemark" name="审核备注" underline="true"/>
                            <#input id="status" name="状态(1=未开始,2=已开始,3=已结束,4=已取消)" underline="true"/>
                            <#input id="state" name="状态(1=正常,2=冻结,3=删除)" underline="true"/>
                            <#input id="insertTime" name="添加时间" underline="true"/>
                            <#input id="cover" name="封面图" underline="true"/>
                            <#input id="productImages" name="图片" underline="true"/>
                            <#input id="publisherType" name="发布人类型 1=城市管理者 2=平台管理者3=门店" underline="true"/>
                            <#input id="cityManagerId" name="城市管理者id" underline="true"/>
                </div>
            </div>
            <div class="row btn-group-m-t">
                <div class="col-sm-10">
                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TCouponInfoDlg.addSubmit()"/>
                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TCouponInfoDlg.close()"/>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/static/modular/system/tCoupon/tCoupon_info.js"></script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/tCoupon_edit.html
New file
@@ -0,0 +1,56 @@
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <div class="form-horizontal">
            <div class="row">
                <div class="col-sm-6 b-r">
                            <#input id="id" name="主键" value="${item.id}" underline="true"/>
                            <#input id="name" name="优惠券名称" value="${item.name}" underline="true"/>
                            <#input id="type" name="优惠券类型(1=满减券,2=代金券,3=体验券)" value="${item.type}" underline="true"/>
                            <#input id="content" name="优惠券规则JSON
格式:
{
    "conditionalAmount": 5,
    "deductionAmount": 6.8,
    "experienceName": ""
}" value="${item.content}" underline="true"/>
                            <#input id="illustrate" name="优惠券说明" value="${item.illustrate}" underline="true"/>
                            <#input id="distributionMethod" name="发放方式(1=积分购买,2=注册赠送,3=自动发券)" value="${item.distributionMethod}" underline="true"/>
                            <#input id="redemptionMethod" name="兑换方式(1=积分,2=积分+现金)" value="${item.redemptionMethod}" underline="true"/>
                            <#input id="cash" name="所需现金" value="${item.cash}" underline="true"/>
                            <#input id="integral" name="所属积分" value="${item.integral}" underline="true"/>
                            <#input id="userPopulation" name="用户人群(1=全部用户,2=年度会员,3=已有学员用户)" value="${item.userPopulation}" underline="true"/>
                            <#input id="quantityIssued" name="发放数量" value="${item.quantityIssued}" underline="true"/>
                            <#input id="pickUpQuantity" name="限领数量" value="${item.pickUpQuantity}" underline="true"/>
                            <#input id="startTime" name="开始时间" value="${item.startTime}" />
                </div>
                <div class="col-sm-6">
                            <#input id="endTime" name="结束时间" value="${item.endTime}" underline="true"/>
                            <#input id="useScope" name="使用范围(1=全国,2=指定城市,3=指定门店)" value="${item.useScope}" underline="true"/>
                            <#input id="auditStatus" name="审核状态(1=待审核,2=已通过,3=已拒绝)" value="${item.auditStatus}" underline="true"/>
                            <#input id="auditUserId" name="审核人id" value="${item.auditUserId}" underline="true"/>
                            <#input id="auditRemark" name="审核备注" value="${item.auditRemark}" underline="true"/>
                            <#input id="status" name="状态(1=未开始,2=已开始,3=已结束,4=已取消)" value="${item.status}" underline="true"/>
                            <#input id="state" name="状态(1=正常,2=冻结,3=删除)" value="${item.state}" underline="true"/>
                            <#input id="insertTime" name="添加时间" value="${item.insertTime}" underline="true"/>
                            <#input id="cover" name="封面图" value="${item.cover}" underline="true"/>
                            <#input id="productImages" name="图片" value="${item.productImages}" underline="true"/>
                            <#input id="publisherType" name="发布人类型 1=城市管理者 2=平台管理者3=门店" value="${item.publisherType}" underline="true"/>
                            <#input id="cityManagerId" name="城市管理者id" value="${item.cityManagerId}" />
                </div>
            </div>
            <div class="row btn-group-m-t">
                <div class="col-sm-10">
                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TCouponInfoDlg.editSubmit()"/>
                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TCouponInfoDlg.close()"/>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/static/modular/system/tCoupon/tCoupon_info.js"></script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add.html
@@ -57,17 +57,16 @@
                <div class="col-sm-9">
                    <select class="form-control" id="account" name="account" onchange="TCarInfoDlg.oneChange1(this)">
                        <option value="">选择运营商</option>
                        @for(i in yysList){
                        <option value="${i.id}">${i.name}</option>
                        @}
                    </select>
                </div>
            </div>
            <div class="form-group" id="provinceCode">
                <label class="col-sm-3 control-label">所在省:</label>
                <div class="col-sm-9">
                    <select class="form-control" id="pCode" name="pCode" onchange="TCarInfoDlg.oneChange(this)">
                        <option value="">选择省</option>
                        @for(obj in list){
                        <option value="${obj.code}">${obj.name}</option>
                        @}
                    <select class="form-control" id="pCode" name="pCode" onchange="TCarInfoDlg.oneChange2(this)">
                    </select>
                </div>
            </div>
cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add_one.html
@@ -12,7 +12,7 @@
            </div>
            <div class="form-group" style="margin-left:-410px">
            <label class="col-sm-3 control-label">内容设置:</label>
                <#button name="添加" icon="fa-plus" clickFun="TCompetition.openAdd()"/>
                <#button name="添加" icon="fa-plus" clickFun="TCompetition.openAdd(1)"/>
            </div>
            <#table id="TCompetitionOtherTable"/>
cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add_three.html
New file
@@ -0,0 +1,134 @@
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            <input id="id" value="${item.id}" hidden>
            <input id="name1" value="${item.name}" hidden>
            <#avatar id="url" name="图片(推荐像素宽度316px)" avatarImg="${item.url}"/>
            <div class="input-group" style="margin-left: 342px;">
                <div class="input-group-btn">
                    <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">
                        跳转模块
                    </button>
                </div>
                <select class="form-control" id="name" style="width: 400px;" onclick="updateType(this)">
                    <option value="不跳转">不跳转</option>
                    <option value="加入玩湃">加入玩湃</option>
                    <option value="开始课程">开始课程</option>
                    <option value="使用福利">使用福利</option>
                    <option value="探索玩湃">探索玩湃</option>
                </select>
            </div>
            <div class="input-group" style="margin-left: 342px;" id="t1" hidden >
                <div class="input-group-btn">
                    <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">
                        跳转页面
                    </button>
                </div>
                <select class="form-control" id="page" style="width: 400px;" onchange="updateOne(this)">
                    @for(obj in list){
                    <option value="${obj.id}" ${obj.id == item.pageId ? 'selected=selected' : ''}>${obj.name}</option>
                    @}
                </select>
            </div>
            <div class="input-group" style="margin-left: 342px;" id="t2" >
                <div class="input-group-btn">
                    <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">
                        跳转类型
                    </button>
                </div>
                <select class="form-control" id="type" style="width: 400px;" >
                    @for(obj in list1){
                    <option value="${obj.id}" ${obj.id == item.typeId ? 'selected=selected' : ''}>${obj.name}</option>
                    @}
                </select>
            </div>
            <div class="form-group" id="t3"  >
                <label class="col-sm-3 control-label">跳转ID:</label>
                <div class="col-sm-9">
                    <input class="form-control" id="turnId" name="turnId" type="text" style="width: 400px;" value="${item.turnId}">
                </div>
            </div>
            <div class="form-group" id="t4" >
                <label class="col-sm-3 control-label">排序:</label>
                <div class="col-sm-9">
                    <input class="form-control" id="sort" name="sort" type="text" style="width: 400px;" value="${item.sort}">
                </div>
            </div>
        </div>
        <div class="row btn-group-m-t">
            <div class="col-sm-10 col-sm-offset-5">
                <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TCompetition.close()"/>
                <#button btnCss="info" name="确认" id="ensure" icon="fa-check" clickFun="TCompetition.addSubmit3()"/>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/tShop/tShopOtherTwo.js"></script>
<script>
    laydate.render({
        elem: '#time',
        range:true
    });
    function updateType(e) {
        let name  =  $("#name").val()
        console.log(name
        )
        if(name =='不跳转'){
            $("#t1").hide()
            $("#t2").hide()
            $("#t3").hide()
        }else {
            $("#t1").show()
            $("#t2").show()
            $("#t3").show()
            var oneId=$(e).val();
            var ajax = new $ax(Feng.ctxPath + "/tShop/typeChange", function(data){
                if(data!=null){
                    var content;
                    $.each(data, function(k,v) {
                        content += "<option value='"+v.id+"'>"+v.name+"</option>";
                    });
                    $("#page").empty().append(content);
                }
            });
            ajax.set("name",oneId);
            ajax.start();
        }
    }
    function updateOne(e) {
        var oneId=$(e).val();
        var ajax = new $ax(Feng.ctxPath + "/tShop/typeChangeOne", function(data){
            if(data!=null){
                var content1;
                $.each(data, function(k,v) {
                    content1 += "<option value='"+v.id+"'>"+v.name+"</option>";
                });
                $("#type").empty().append(content1);
            }
        });
        ajax.set("id",oneId);
        ajax.start();
    }
    window.onload = function() {
        $("#name").val($("#name1").val());
    }
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html
@@ -57,17 +57,18 @@
                <label class="col-sm-3 control-label">所属运营商:</label>
                <div class="col-sm-9">
                    <select class="form-control" id="account" name="account" onchange="TCarInfoDlg.oneChange1(this)">
                        <option value="">选择运营商</option>
                        @for(obj in yysList){
                        <option value="${obj.id}" ${obj.id == item.operatorId ? 'selected=selected' : ''}>${obj.name}</option>
                        @}
                    </select>
                </div>
            </div>
            <div class="form-group" id="provinceCode">
                <label class="col-sm-3 control-label">所在省:</label>
                <div class="col-sm-9">
                    <select class="form-control" id="pCode" name="pCode" onchange="TCarInfoDlg.oneChange(this)">
                        <option value="">选择省</option>
                    <select class="form-control" id="pCode" name="pCode" onchange="TCarInfoDlg.oneChange2(this)">
                        @for(obj in list){
                        <option value="${obj.code}" ${obj.code == item.provinceCode ? 'selected=selected' : ''}>${obj.name}</option>
                        <option value="${obj.id}" ${obj.code == item.provinceCode ? 'selected=selected' : ''}>${obj.name}</option>
                        @}
                    </select>
                </div>
@@ -75,10 +76,10 @@
            <div class="form-group" id="cityCode">
                <label class="col-sm-3 control-label">所在市:</label>
                <div class="col-sm-9">
                    <select class="form-control" id="cCode" name="cCode"  onchange="TCarInfoDlg.oneChangeNext(this)">
                    <select class="form-control" id="cCode" name="cCode"  >
                        <option value="">选择市</option>
                        @for(obj in list1){
                        <option value="${obj.code}" ${obj.code == item.cityCode ? 'selected=selected' : ''}>${obj.name}</option>
                        <option value="${obj.id}" ${obj.code == item.cityCode ? 'selected=selected' : ''}>${obj.name}</option>
                        @}
                    </select>
                </div>
@@ -86,6 +87,8 @@
            @}
            <#input id="name" name="门店名称" type="text" value="${item.name}"/>
            <#input id="phone" name="联系电话" type="text" value="${item.phone}"/>
            <div hidden id="longitude" value="${item.lon}"></div>
            <div hidden id="latitude" value="${item.lat}"></div>
            <div class="form-group">
                <label class="col-sm-3 control-label">门店地址:</label>
                <div class="col-sm-9">
@@ -155,15 +158,7 @@
        range:true
    });
    window.onload = function(){
        var OBJradio=document.getElementsByName("type")
        for(i=0;i<OBJradio.length;i++){//循环查找这个radio
            if($("#type").val()==OBJradio[i].value){//判断是否与radio的值相同
                OBJradio[i].checked=true//修改选中状态
            }
        }
    }
    let id = "https://evmoto.obs.ap-southeast-4.myhuaweicloud.com:443/b1d6f9e362414d1b895d916657776573.png,https://evmoto.obs.ap-southeast-4.myhuaweicloud.com:443/b1d6f9e362414d1b895d916657776573.png"
    let id = "${item.realPicture}"
    let obj = []
@@ -184,7 +179,9 @@
        },
        methods: {
            handleAvatarSuccess(res, file) {
                file.url =file.response
                TCarInfoDlg.goodsPicArray.push(file);
                console.log(TCarInfoDlg.goodsPicArray)
            },
            changeImg(){
               var i = id.split(",")
@@ -192,7 +189,8 @@
                    let obj={
                        fileName:i[j],
                        uuid:i[j],
                        url:i[j]
                        url:i[j],
                        response:i[j],
                    }
                    this.imageUrl2.push(obj)
@@ -210,10 +208,12 @@
                TCarInfoDlg.goodsPicArray = TCarInfoDlg.goodsPicArray.filter(item => {
                    return item.uid != file.uid;
                });
            },
        },
        created() {
            this.changeImg()
            TCarInfoDlg.goodsPicArray = this.imageUrl2
        },
    });
@@ -227,6 +227,32 @@
        }
    }
    window.onload = function(){
        console.log("${item.operatorId}")
        var OBJradio=document.getElementsByName("type")
        if("${item.operatorId}"==0){
            OBJradio[0].checked=true
        }else {
            OBJradio[1].checked=true
            $("#yys").show()
        }
        var OBJradio=document.getElementsByName("ishalf")
        if($("#type_").val()==1){
            $("#halfCode").show()
        }
        for(i=0;i<OBJradio.length;i++){//循环查找这个radio
            if($("#type_").val()==OBJradio[i].value){//判断是否与radio的值相同
                OBJradio[i].checked=true//修改选中状态
            }
        }
    }
</script>
<script type="application/javascript">
cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit_one.html
New file
@@ -0,0 +1,42 @@
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            <input id="id" value="${id}" hidden>
            <div class="form-group" style="margin-left:-410px">
                <label class="col-sm-3 control-label">板块名称:</label>
                <div class="col-sm-9">
                    <input class="form-control" id="name" name="name" type="text" style="width: 400px;" value="${item.name}">
                </div>
            </div>
            <div class="form-group" style="margin-left:-410px">
            <label class="col-sm-3 control-label">内容设置:</label>
                <#button name="添加" icon="fa-plus" clickFun="TCompetition.openAdd(2)"/>
            </div>
            <#table id="TCompetitionOtherTable"/>
        </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="TCompetition.addSubmit4()"/>
        <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TCompetition.close()"/>
    </div>
</div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/tShop/tShopOtherTwo.js"></script>
<script>
    laydate.render({
        elem: '#time',
        range:true
    });
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit_three.html
New file
@@ -0,0 +1,124 @@
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            <input id="id" value="${id}" hidden>
            <#avatar id="url" name="图片(推荐像素宽度316px)"/>
            <div class="input-group" style="margin-left: 342px;">
                <div class="input-group-btn">
                    <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">
                        跳转模块
                    </button>
                </div>
                <select class="form-control" id="name" style="width: 400px;" onclick="updateType(this)">
                    <option value="" selected disabled>选择跳转模块</option>
                    <option value="不跳转">不跳转</option>
                    <option value="加入玩湃">加入玩湃</option>
                    <option value="开始课程">开始课程</option>
                    <option value="使用福利">使用福利</option>
                    <option value="探索玩湃">探索玩湃</option>
                </select>
            </div>
            <div class="input-group" style="margin-left: 342px;" id="t1" hidden >
                <div class="input-group-btn">
                    <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">
                        跳转页面
                    </button>
                </div>
                <select class="form-control" id="page" style="width: 400px;" onchange="updateOne(this)">
                </select>
            </div>
            <div class="input-group" style="margin-left: 342px;" id="t2" >
                <div class="input-group-btn">
                    <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">
                        跳转类型
                    </button>
                </div>
                <select class="form-control" id="type" style="width: 400px;" >
                </select>
            </div>
            <div class="form-group" id="t3"  >
                <label class="col-sm-3 control-label">跳转ID:</label>
                <div class="col-sm-9">
                    <input class="form-control" id="turnId" name="turnId" type="text" style="width: 400px;">
                </div>
            </div>
            <div class="form-group" id="t4" >
                <label class="col-sm-3 control-label">排序:</label>
                <div class="col-sm-9">
                    <input class="form-control" id="sort" name="sort" type="text" style="width: 400px;">
                </div>
            </div>
        </div>
        <div class="row btn-group-m-t">
            <div class="col-sm-10 col-sm-offset-5">
                <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TCompetition.close()"/>
                <#button btnCss="info" name="保存" id="ensure" icon="fa-check" clickFun="TCompetition.addSubmit3()"/>
            </div>
        </div>
    </div>
    <script src="${ctxPath}/modular/system/tShop/tShopOtherTwo.js"></script>
    <script>
        laydate.render({
            elem: '#time',
            range:true
        });
        function updateType(e) {
            let name  =  $("#name").val()
            console.log(name
            )
            if(name =='不跳转'){
                $("#t1").hide()
                $("#t2").hide()
                $("#t3").hide()
            }else {
                $("#t1").show()
                $("#t2").show()
                $("#t3").show()
                var oneId=$(e).val();
                var ajax = new $ax(Feng.ctxPath + "/tShop/typeChange", function(data){
                    if(data!=null){
                        var content;
                        $.each(data, function(k,v) {
                            content += "<option value='"+v.id+"'>"+v.name+"</option>";
                        });
                        $("#page").empty().append(content);
                    }
                });
                ajax.set("name",oneId);
                ajax.start();
            }
        }
        function updateOne(e) {
            var oneId=$(e).val();
            var ajax = new $ax(Feng.ctxPath + "/tShop/typeChangeOne", function(data){
                if(data!=null){
                    var content1;
                    $.each(data, function(k,v) {
                        content1 += "<option value='"+v.id+"'>"+v.name+"</option>";
                    });
                    $("#type").empty().append(content1);
                }
            });
            ajax.set("id",oneId);
            ajax.start();
        }
    </script>
    @}
cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_imgAll.html
@@ -182,12 +182,12 @@
            </div>
            <div>首页其他板块设置</div>
            <div style="font-size: x-large;">首页其他板块设置</div>
            <#button name="添加" icon="fa-plus" clickFun="TCompetition.openAddTCompetition(id)"/>
            <#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-edit" clickFun="TCompetition.openTCompetitionDetail1()" space="true"/>
            <#button name="删除" icon="fa-remove" clickFun="TCompetition.del()" space="true"/>
            <#button name="开启" icon="fa-remove" clickFun="TCompetition.unfreeze1(1)" space="true"/>
            <#button name="关闭" icon="fa-remove" clickFun="TCompetition.unfreeze1(2)" space="true"/>
            <#table id="TCompetitionOtherTable"/>
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_add.html
@@ -52,13 +52,13 @@
            <div class="form-group" >
                <label class="col-sm-3 control-label">*所属运营商:</label>
                <div class="col-sm-8">
                    <select style="width: 300px" class="form-control" id="yys" name="yys" onchange="TSite.oneChangeYys(2)">
                    <select style="width: 300px" class="form-control" id="yys" name="yys" onchange="TSite.oneChangeYys(this)">
                        <option style="width: 300px" value="">选择运营商</option>
                        @for(obj in yysList){
                        <option style="width: 300px" value="${obj.id}">${obj.name}</option>
                        @}
                    </select>
                    <input type="checkbox" value="0" name="pt">平台</input>
                    <input type="checkbox" value="0" name="pt" onchange="TSite.oneChangeYys(this)">平台</input>
                </div>
            </div>
            @}
@@ -72,7 +72,7 @@
            <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="siteTypeOne" name = "typeId">
                    <select style="width: 300px" class="form-control" id="siteTypeOne" name = "typeId" onchange="updateTime1()">
                        <option value="普通场地">普通场地</option>
                        <option value="智慧场地">智慧场地</option>
                    </select>
@@ -95,9 +95,9 @@
                <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">
                    <input style="width: 136px;" value="开始时间" id="start-time" class="form-control" type="time" onchange="updateTime(1)">
                    <span style="margin-top: 7px">&nbsp;&nbsp;至&nbsp;&nbsp;</span>
                    <input style="width: 136px;" value="结束时间" id="end-time" class="form-control" type="time">
                    <input style="width: 136px;" value="结束时间" id="end-time" class="form-control" type="time" onchange="updateTime(2)">
                </div>
            </div>
@@ -192,7 +192,7 @@
                </div>
                @}
                @if(objectType==1){
                <#input style="width: 300px" id="name" name="*添加闸机:" placeholder="请输入闸机ID" type="text"/>
                <#input style="width: 300px" id="ids" name="*添加闸机:" placeholder="请输入闸机ID" type="text"/>
                @}
                <div class="form-group"   style=" margin-left: 17%;" >
                    <label class="col-sm-1 control-label">场地说明:</label>
@@ -220,6 +220,47 @@
<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() {
        },
    });
    laydate.render({
        elem: '#start-time', type: "time", format: "HH:mm", ready: formatminutes
    });
    laydate.render({
        elem: '#end-time'
        , type: "time", format: "HH:mm", ready: formatminutes
    });
    function addBox() {
            var a="     <div class=\"col-sm-8 control-label\" id=\"far\">\n" +
@@ -310,5 +351,65 @@
            endTime.disabled = true;
        }
    });
    function updateTime1() {
        $("#end-time").val('');
        $("#start-time").val('');
    }
    function updateTime(e) {
        let one = $("#siteTypeOne").val()
        var timeInputs = document.querySelectorAll('input[type="time"]');
        console.log(timeInputs)
                var selectedTime='';
                if(e==1){
                    var selectedTime = $("#start-time").val();
                }else {
                    var selectedTime = $("#end-time").val();
                }
                var hour = selectedTime.split(':')[0];
                var minute = selectedTime.split(':')[1];
                if(one=="普通场地"){
                    console.log(
                        one
                    )
                    if (minute < 30 &&minute>0) {
                        minute = '30';
                    } else if (minute >30) {
                        hour++;
                        minute = '00';
                        if (hour<10){
                            hour = '0'+hour;
                        }
                    }
                }else {
                    console.log(
                        one,minute
                    )
                    if (minute <= 15 && minute>0) {
                        console.log(1)
                        minute = '15';
                    }else if(minute<=30){
                        console.log(2)
                        minute = '30';
                    }else if(minute<=45){
                        console.log(3)
                        minute = '45';
                    }else if (minute >45) {
                        console.log(4)
                        hour++;
                        minute = '00';
                        if (hour<10){
                            hour = '0'+hour;
                        }
                    }
                }
                if(e==1){
                    $("#start-time").val(hour + ':' + minute)
                }else {
                    $("#end-time").val(hour + ':' + minute)
                }
    }
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_edit.html
@@ -1,41 +1,64 @@
@layout("/common/_container.html"){
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
<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>
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            <input id="type_" value="${list.ishalf}" hidden>
            @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>
                <label class="col-sm-3 control-label">*所属运营商:</label>
                <div class="col-sm-8">
                    <select style="width: 300px" class="form-control" id="yys" name="yys" onchange="TSiteInfo.oneChangeYys(this)">
                        <option style="width: 300px" value="">选择运营商</option>
                        @for(obj in yysList){
                          <option value="${obj.id}" ${obj.id == list.operatorId ? 'selected=selected' : ''}>${obj.name}</option>
                        @}
                    </select>
                    <input type="checkbox" value="0" name="pt" id="pt" onchange="TSiteInfo.oneChangeYys(this)">平台</input>
                </div>
            </div>
            @}
@@ -92,6 +115,64 @@
                </div>
            </div>
            <div class="form-group" id="siteMore" style=" margin-left: 255px;">
                <div class="form-group">多场地配置:<i class="fa fa-plus" onclick="addBox()"></i></div>
                @for(n in nextNames){
                     <div class="col-sm-8 control-label" id="far">
                         <label class="col-sm-2 control-label">*单个场地名</label>
                         <div class="col-sm-3">
                             <input type="text" name="name1" class="form-control newWidth" value="${n}"/>
                         </div>
                         <div class="col-sm-1">
                             <i class="col-sm-1 fa fa-remove" onclick="delBox(this)" style="margin-top:10px"></i>
                         </div>
                     </div>
                @}
            </div>
            <div class="form-group">
                <label class="col-sm-3 control-label">是否可预定半场:</label>
                <div class="col-sm-9">
                    <input type="radio" name="ishalf" value="2" checked  onclick="updateHalf(1)"> 否
                    <input type="radio" name="ishalf" value="1" onclick="updateHalf(2)"> 是
                </div>
            </div>
            <div id="halfCode" hidden>
                <div class="form-group" style="margin-left: 100px;" >
                    <label class="col-sm-3 control-label">*现金价格:</label>
                    <div class="col-sm-9" style="display: flex;">
                        <input style="width: 300px" class="form-control" id="cashPriceOne" name="playPaiCoin" placeholder="请输入价格" type="text" value="${list.cashPriceOne}">
                        <span style="margin-left: 5px;margin-top: 5px">元/半小时</span>
                    </div>
                </div>
                <div class="form-group" style="margin-left: 100px;">
                    <label class="col-sm-3 control-label">*玩湃币价格:</label>
                    <div class="col-sm-9" style="display: flex;">
                        <input style="width: 300px" class="form-control" id="playPaiCoinOne" name="playPaiCoin" placeholder="请输入价格" type="text" value="${list.playPaiCoinOne}">
                        <span style="margin-left: 5px;margin-top: 5px">币/半小时</span>
                    </div>
                </div>
                <div class="form-group"  id="halfName" >
                    <label class="col-sm-3 control-label">*半场名称:</label>
                    <div class="col-sm-8" style="display: flex;">
                        <input style="width: 240px" class="form-control"  name="name2"  type="text" value="${halfName}"><i class="fa fa-plus" onclick="addBox1()" style="margin-left: 32px;margin-top: 10px;"></i>
                    </div>
                </div>
                @for(h in halfNames){
                <div class="form-group"  >
                    <label class="col-sm-3 control-label">*半场名称:</label>
                    <div class="col-sm-8" style="display: flex;">
                        <input style="width: 240px" class="form-control"  name="name2"  type="text" value="${h}"> <i class="col-sm-1 fa fa-remove" onclick="delBox(this)" style="margin-top:10px"></i>
                    </div>
                </div>
                @}
            </div>
            <div class="form-group">
                <label class="col-sm-3 control-label">*场地责任险有效期:</label>
                <div class="col-sm-9">
@@ -121,12 +202,13 @@
                                action="/tCouponManage/uploadPic"
                                list-type="picture-card"
                                accept="."
                                :file-list="imageUrl2"
                                :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="">
                            <img width="100%" :src="imageUrl2" alt="">
                        </el-dialog>
                    </div>
                </div>
@@ -134,8 +216,19 @@
            @}
        </div>
        @if(objectType==1){
        <#input style="width: 300px" id="name" name="*添加闸机:" placeholder="请输入闸机ID" type="text"/>
        <div class="form-group" style="margin-left: 205px;">
            <label class="col-sm-1 control-label">*添加闸机:</label>
            <div class="col-sm-9">
                <input class="form-control" id="ids" name="ids" value="${list.ids}" type="text" style="width: 300px" placeholder="请输入闸机ID">
            </div>
        </div>
        @}
        <div class="form-group"   style="margin-left: 13%;display: inline-flex;margin-top: 16px;" >
            <label class="col-sm-2 control-label">场地说明:</label>
            <div class="col-sm-5" style="margin-left: -35px;">
                <textarea type="text/plain" id="editor"  style="height: 300px;width: 800px;">${list.introduce}</textarea>
            </div>
        </div>
        <div class="row btn-group-m-t">
            <div class="col-sm-10 col-sm-offset-5" >
                @if(type==1){
@@ -156,6 +249,9 @@
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
<script>
    let id = "${list.imgs}"
    let obj = []
    var vue2 = new Vue({
        el: '#app1',
        props: {
@@ -168,11 +264,26 @@
        data: {
            autoUpload: true,//自动上传
            imageUrl1: '',//模型数据,用于上传图片完成后图片预览
            imageUrl2: [],
            dialogVisible: false
        },
        methods: {
            handleAvatarSuccess(res, file) {
                TCarInfoDlg.goodsPicArray.push(file);
                file.url =file.response
                TSiteInfo.goodsPicArray.push(file);
            },
            changeImg(){
                var i = id.split(",")
                for (let j = 0; j <i.length; j++) {
                    let obj={
                        fileName:i[j],
                        uuid:i[j],
                        url:i[j],
                        response:i[j],
                    }
                    this.imageUrl2.push(obj)
                }
            },
            beforeAvatarUpload(file) {
                const isLt2M = file.size / 1024 / 1024 < 10;
@@ -182,14 +293,17 @@
                return isLt2M;
            },
            handleRemove(file, fileList) {
                TCarInfoDlg.goodsPicArray = TCarInfoDlg.goodsPicArray.filter(item => {
                TSiteInfo.goodsPicArray = TSiteInfo.goodsPicArray.filter(item => {
                    return item.uid != file.uid;
                });
            },
        },
        created() {
            this.changeImg()
            TSiteInfo.goodsPicArray = this.imageUrl2
        },
    });
    var selectElement = document.getElementById('store');
    var startTime = document.getElementById('start-time');
    var endTime = document.getElementById('end-time');
@@ -203,5 +317,60 @@
            endTime.disabled = true;
        }
    });
    window.onload = function(){
        console.log("${list.operatorId}")
        if("${list.operatorId}"==0){
            console.log(233232)
            $("#pt").attr('checked', true)
        }
        var OBJradio=document.getElementsByName("ishalf")
        if($("#type_").val()==1){
            $("#halfCode").show()
        }
        for(i=0;i<OBJradio.length;i++){//循环查找这个radio
            if($("#type_").val()==OBJradio[i].value){//判断是否与radio的值相同
                OBJradio[i].checked=true//修改选中状态
            }
        }
    }
    function addBox1() {
        var a="     <div class=\"col-sm-8 control-label\" id=\"far\" style=\"margin-left: 210px;\">\n" +
            "                        <label class=\"col-sm-2 control-label\">*半场名称:</label>\n" +
            "                        <div class=\"col-sm-3\">\n" +
            "                            <input type=\"text\"  name=\"name2\"  class=\"form-control newWidth\"  style=\"margin-left: 8px;width: 240px;\"/>&nbsp;\n" +
            "                        </div>  \n" +
            "                        <div class=\"col-sm-1\">\n" +
            "                            <i class=\"col-sm-1 fa fa-remove\" onclick=\"delBox(this)\" style=\"margin-top:10px\"></i>\n" +
            "                        </div>  \n" +
            "                    </div> "
        $("#halfName").append($(a))
    }
    function addBox() {
        var a="     <div class=\"col-sm-8 control-label\" id=\"far\">\n" +
            "                        <label class=\"col-sm-2 control-label\">*单个场地名</label>\n" +
            "                        <div class=\"col-sm-3\">\n" +
            "                            <input type=\"text\"  name=\"name1\"  class=\"form-control newWidth\" />&nbsp;\n" +
            "                        </div>  \n" +
            "                        <div class=\"col-sm-1\">\n" +
            "                            <i class=\"col-sm-1 fa fa-remove\" onclick=\"delBox(this)\" style=\"margin-top:10px\"></i>\n" +
            "                        </div>  \n" +
            "                    </div> "
        $("#siteMore").append($(a))
    }
    function delBox(o) {
        $(o).parent("div").parent("div").remove()
    }
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/banckmoney.html
New file
@@ -0,0 +1,347 @@
<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8" />
  <title>amis demo</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta
          name="viewport"
          content="width=device-width, initial-scale=1, maximum-scale=1"
  />
  <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
  <link rel="stylesheet" href="${ctxPath}/sdk/sdk.css" />
  <link rel="stylesheet" href="${ctxPath}/sdk/helper.css" />
  <link rel="stylesheet" href="${ctxPath}/sdk/iconfont.css" />
  <!-- 这是默认主题所需的,如果是其他主题则不需要 -->
  <!-- 从 1.1.0 开始 sdk.css 将不支持 IE 11,如果要支持 IE11 请引用这个 css,并把前面那个删了 -->
  <!-- <link rel="stylesheet" href="sdk-ie11.css" /> -->
  <!-- 不过 amis 开发团队几乎没测试过 IE 11 下的效果,所以可能有细节功能用不了,如果发现请报 issue -->
  <style>
    html,
    body,
    .app-wrapper {
      position: relative;
      width: 100%;
      height: 100%;
      margin: 0;
      padding: 0;
    }
    th {
      background-color: white;
    }
  </style>
</head>
<body>
<div id="root" class="app-wrapper"></div>
<script src="${ctxPath}/sdk/sdk.js"></script>
<script type="text/javascript">
  (function () {
    let amis = amisRequire('amis/embed');
    // 通过替换下面这个配置来生成不同页面
    let amisJSON = {
      "type": "page",
      "title": "",
      "body": [
        {
          "type": "form",
          "title": "表单",
          "body": [
            {
              "label": "文本",
              "type": "input-text",
              "name": "id",
              "id": "u:99d3d8869d55"
            },
            {
              "label": "文本",
              "type": "input-text",
              "name": "ids",
              "id": "u:5b12dc7c90"
            }
          ],
          "api": {
            "url": "ttt",
            "method": "post",
            "requestAdaptor": "",
            "adaptor": "",
            "messages": {},
            "dataType": "form"
          },
          "id": "u:285d560cf7ab"
        },
        {
          "type": "property",
          "id": "u:844144d9d3d8",
          "title": "学员课包退费申请表",
          "items": [
            {
              "label": "用户姓名",
              "content": `${userName}`,
              "span": 1
            },
            {
              "label": "学员姓名",
              "content": `${tStudentDto.name}`,
              "span": 1
            },
            {
              "label": "性别",
              "content": `${tStudentDto.sex == 1 ? '男':'女'}`,
              "span": 1
            },
            {
              "label": "申请时间",
              "content": `${reDate}`,
              "span": 3
            },
            {
              "label": "联系电话",
              "content": `${tStudentDto.phone}`,
              "span": 1
            },
            {
              "label": "收款户名",
              "content": "",
              "span": 2
            },
            {
              "label": "收款账号",
              "content": "",
              "span": 3
            },
            {
              "label": "银行开户行",
              "content": "",
              "span": 8
            },
            {
              "label": "申请推费原因",
              "content": "",
              "span": 8
            },
            {
              "label": "课包项目明细",
              "content": "",
              "span": 8
            }
      @for(pay in coursePackagePayments){
            ,
            {
              "label": "",
              "span": 1,
              "content": '课包明细'+`${index++}`
            },
            {
              "label": "课包编号",
              "content": `${pay.id}`,
              "span": 2
            },
            {
              "label": "课包名称",
              "content": `${pay.name}`,
              "span": 1
            },
            {
              "label": "物品赠送",
              "content": "",
              "span": 2
            },
            {
              "label": "",
              "content": "",
              "span": 1
            },
            {
              "label": "课包总课时",
              "content": `${pay.totalClassHours}`,
              "span": 1
            },
            {
              "label": "课包单价",
              "content": `${pay.onePrice}`,
              "span": 1
            },
            {
              "label": "课包总金额",
              "content": `${pay.cashPayment}`,
              "span": 3
            },
            {
              "label": "",
              "content": "",
              "span": 1
            },
            {
              "label": "已学课时",
              "content": `${pay.hasHours}`,
              "span": 1
            },
            {
              "label": "剩余课时",
              "content": `${pay.laveClassHours}`,
              "span": 1
            },
            {
              "label": "剩余课时金额",
              "content": `${pay.restPrice}`,
              "span": 3
            },
            {
              "label": "",
              "content": "",
              "span": 1
            },
            {
              "label": "合计",
              "content": `${countAll}`,
              "span": 1
            },
            {
              "label": "大写",
              "content": `${allprice}`,
              "span": 4
            }
            @}
            ,
            {
              "label": "",
              "content": "申请退费",
              "span": 1
            },
            {
              "label": "申请退费金额",
              "content": "${countAll}",
              "span": 1
            },
            {
              "label": "物品赠送",
              "content": "",
              "span": 1
            },
            {
              "label": "手续费",
              "content": "",
              "span": 3
            },
            {
              "label": "",
              "content": "",
              "span": 1
            },
            {
              "label": "实际退费",
              "content": "",
              "span": 1
            },
            {
              "label": "大写",
              "content": "",
              "span": 4
            },
            {
              "label": "申请人签字",
              "content": "",
              "span": 2
            },
            {
              "label": "店长意见及签字",
              "content": {
                "type": "tpl",
                "tpl": "<br/><br/></pre>",
                "id": "u:c14b6d167a7c"
              },
              "span": 4
            },
            {
              "label": "退费记录",
              "content": {
                "type": "tpl",
                "tpl": "<br/><br/></pre>",
                "id": "u:c14b6d167a7c"
              },
              "span": 6
            },
            {
              "label": "备注",
              "content": {
                "type": "tpl",
                "tpl": "<br/><br/></pre>",
                "id": "u:c14b6d167a7c"
              },
              "span": 1
            }
          ],
          "column": 6,
          "mode": "table",
        "className": "font-bold"
        },
    {
      "type": "flex",
            "className": "p-1",
            "items": [
      {
        "type": "button",
        "id": "u:6c0b8f917bf7",
        "label": "关闭",
        "onEvent": {
          "click": {
            "actions": [{
              "actionType": "custom",
              "args": {},
              "script": "window.close()"
            }
            ]
          }
        }
      },
      {
        "type": "button",
        "id": "u:6c0b8f917bf7",
        "label": "导出",
        "level":"info",
        "onEvent": {
          "click": {
            "actions": [
              {
                "script": "\r\nwindow.print()",
                "actionType": "custom"
              },
              {
                "componentId": "u:285d560cf7ab",
                "actionType": "submit"
              },
              {
                "actionType": "custom",
                "args": {},
                "script": "window.close()"
              }
            ]
          }
        }
      }
    ],
            "style": {
      "position": "relative"
    },
      "id": "u:8254704349a2"
    }
      ],
      "id": "u:fea3d370178c"
    };
    let amisScoped = amis.embed('#root', amisJSON);
  })();
  function test(){
    console.log("测试成功")
  }
  var myButton = document.getElementById("ttt");
  myButton.addEventListener("click",test);
</script>
</body>
</html>
cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/classelct.html
New file
@@ -0,0 +1,283 @@
<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8" />
  <title>amis demo</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta
          name="viewport"
          content="width=device-width, initial-scale=1, maximum-scale=1"
  />
  <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
  <link rel="stylesheet" href="${ctxPath}/sdk/sdk.css" />
  <link rel="stylesheet" href="${ctxPath}/sdk/helper.css" />
  <link rel="stylesheet" href="${ctxPath}/sdk/iconfont.css" />
  <!-- 这是默认主题所需的,如果是其他主题则不需要 -->
  <!-- 从 1.1.0 开始 sdk.css 将不支持 IE 11,如果要支持 IE11 请引用这个 css,并把前面那个删了 -->
  <!-- <link rel="stylesheet" href="sdk-ie11.css" /> -->
  <!-- 不过 amis 开发团队几乎没测试过 IE 11 下的效果,所以可能有细节功能用不了,如果发现请报 issue -->
  <style>
    html,
    body,
    .app-wrapper {
      position: relative;
      width: 100%;
      height: 100%;
      margin: 0;
      padding: 0;
    }
  </style>
</head>
<body>
<div id="root" class="app-wrapper"></div>
<script src="${ctxPath}/sdk/sdk.js"></script>
<script type="text/javascript">
  (function () {
    let amis = amisRequire('amis/embed');
    // 通过替换下面这个配置来生成不同页面
    let amisJSON ={
      "type": "page",
      "title": "",
      "body": [
        {
          "type": "form",
          "title": "",
          "body": [
            {
              "type": "tpl",
              "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
              "inline": true,
              "wrapperComponent": "",
              "id": "u:5b414d7db416"
            },
            {
              "type": "tpl",
              "id": "u:5b414d7db416",
              "inline": true,
              "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
              "wrapperComponent": ""
            },
            {
              "type": "tpl",
              "id": "u:5b414d7db416",
              "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
              "inline": true,
              "wrapperComponent": ""
            },
            {
              "type": "flex",
              "items": [
                {
                  "type": "tpl",
                  "tpl": "课包种类",
                  "id": "u:55654c208e7a",
                  "inline": true,
                  "wrapperComponent": "h2"
                }
              ],
              "id": "u:0623e832135d",
              "style": {
                "position": "static",
                "flexWrap": "nowrap",
                "flexDirection": "row",
                "justifyContent": "center",
                "overflowY": "auto"
              },
              "isFixedHeight": false,
              "isFixedWidth": false
            },
            {
              "type": "flex",
              "items": [
                {
                  "type": "radios",
                  "id": "u:afa09262555b",
                  "inline": true,
                  "label": " 请选择:",
                  "name": "radios",
                  "options": [
                    {
                      "label": "常规课程",
                      "value": "1"
                    },
                    {
                      "label": "假期课程",
                      "value": "2"
                    },
                    {
                      "label": "体验课程",
                      "value": "3"
                    }
                  ],
                  "mode": "inline",
                  "value": "A",
                  "horizontal": {
                    "left": 1,
                    "right": 11
                  }
                }
              ],
              "id": "u:f7852087ea18",
              "style": {
                "position": "static",
                "flexWrap": "nowrap",
                "flexDirection": "row",
                "justifyContent": "center",
                "overflowY": "auto"
              },
              "isFixedHeight": false,
              "isFixedWidth": false
            },
            {
              "type": "flex",
              "items": [
                {
                  "type": "tpl",
                  "id": "u:5035e51732f1",
                  "inline": true,
                  "tpl": "1.常规课程:设置课时扣课的常规课程包。",
                  "wrapperComponent": "h3"
                }
              ],
              "id": "u:ba0c4f9a5fc3",
              "style": {
                "position": "static",
                "flexWrap": "nowrap",
                "flexDirection": "row",
                "justifyContent": "space-around",
                "overflowY": "auto"
              },
              "isFixedHeight": false,
              "isFixedWidth": false
            },
            {
              "type": "flex",
              "items": [
                {
                  "type": "tpl",
                  "id": "u:fc5edd1fd19a",
                  "inline": true,
                  "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp2.假期课程:预设时间段上课,时间到期课程既结束。",
                  "wrapperComponent": "h3"
                }
              ],
              "id": "u:d23c02e12b83",
              "style": {
                "position": "static",
                "flexWrap": "nowrap",
                "flexDirection": "row",
                "justifyContent": "space-around",
                "overflowY": "auto"
              },
              "isFixedHeight": false,
              "isFixedWidth": false
            },
            {
              "type": "flex",
              "items": [
                {
                  "type": "tpl",
                  "id": "u:c519152df166",
                  "inline": true,
                  "tpl": "3.体验课程:单次购买的课程。&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
                  "wrapperComponent": "h3"
                }
              ],
              "id": "u:c720cb31edf8",
              "style": {
                "position": "static",
                "flexWrap": "nowrap",
                "flexDirection": "row",
                "justifyContent": "space-around",
                "overflowY": "auto"
              },
              "isFixedHeight": false,
              "isFixedWidth": false
            },
            {
              "type": "flex",
              "items": [
                {
                  "type": "button",
                  "id": "u:5b4f1fa2ae10",
                  "label": "确认",
                  "onEvent": {
                    "click": {
                      "actions": [
                        {
                          "actionType": "url",
                          "args": {
                            "url": "/coursePackage/openAddCoursePackage?type=$radios",
                            "blank": false
                          }
                        }
                      ]
                    }
                  }
                }
              ],
              "id": "u:43e7d3d6e5f7",
              "style": {
                "position": "static",
                "flexWrap": "nowrap",
                "flexDirection": "row",
                "justifyContent": "space-around",
                "overflowY": "auto"
              },
              "isFixedHeight": false,
              "isFixedWidth": false
            },
            {
              "type": "tpl",
              "id": "u:5b414d7db416",
              "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
              "inline": true,
              "wrapperComponent": ""
            },
            {
              "type": "button",
              "label": "确认",
              "onEvent": {
                "click": {
                  "actions": [
                    {
                      "actionType": "url",
                      "args": {
                        "url": "/coursePackage/openAddCoursePackage?type=$radios",
                        "blank": false
                      }
                    }
                  ]
                }
              },
              "id": "u:5b4f1fa2ae10"
            }
          ],
          "id": "u:339c517e4f3c",
          "api": {
            "url": "/coursePackage/openAddCoursePackage?$radios",
            "method": "get",
            "requestAdaptor": "",
            "adaptor": "",
            "messages": {
            }
          }
        }
      ],
      "id": "u:039339c3720d"
    };
    let amisScoped = amis.embed('#root', amisJSON);
  })();
  function test(){
    console.log("测试成功")
  }
  var myButton = document.getElementById("ttt");
  myButton.addEventListener("click",test);
</script>
</body>
</html>
cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit.html
@@ -52,7 +52,8 @@
          "size": "md",
          "mode": "horizontal",
          "hidden": true,
          "value":`${item.id!}`
          "value":`${item.id!}`,
        },
        {
          "type": "input-text",
@@ -61,7 +62,7 @@
          "name": "id",
          "size": "md",
          "mode": "horizontal",
          "hidden": false
          "hidden": true
        },
        {
          "type": "tpl",
@@ -78,16 +79,19 @@
          "size": "md",
          "mode": "horizontal",
          "required": true,
          "disabled": true
          "disabled": true,
          "value":`${item.userName!}`
        },
        {
          "type": "input-text",
          "label": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp姓名",
          "id": "u:0b2463bbffe8",
          "name": "name",
          "name": "name1",
          "size": "md",
          "mode": "horizontal",
          "required": true
          "required": true,
          "value":`${item.name!}`,
          "disabled": true,
        },
        {
          "type": "input-date",
@@ -99,7 +103,9 @@
          "embed": false,
          "format": "YYYY-MM-DD hh:mm:ss",
          "inputFormat": "YYYY-MM-DD",
          "required": true
          "required": true,
          "value":`${item.birthday!}`,
          "disabled": true,
        },
        {
          "type": "select",
@@ -119,12 +125,14 @@
            }
          ],
          "multiple": false,
          "required": true
          "required": true,
          "value":`${item.sex!}`,
          "disabled": true,
        },
        {
          "type": "input-text",
          "label": "联系电话",
          "name": "phone",
          "name": "phone1",
          "id": "u:e7cf50e4f755",
          "size": "md",
          "mode": "horizontal",
@@ -135,7 +143,9 @@
          "validateOnChange": true,
          "validations": {
            "isPhoneNumber": true
          }
          },
          "value":`${item.phone!}`,
          "disabled": true,
        },
        {
          "type": "input-text",
@@ -157,7 +167,9 @@
          "addOn": {
            "label": "cm",
            "type": "text"
          }
          },
          "value":`${item.height!}`,
          "disabled": true,
        },
        {
          "type": "input-text",
@@ -179,7 +191,9 @@
          "validations": {
            "maximum": 250,
            "isNumeric": true
          }
          },
          "value":`${item.weight!}`,
          "disabled": true,
        },
        {
          "type": "input-text",
@@ -195,7 +209,9 @@
          "validateOnChange": true,
          "validations": {
            "isId": true
          }
          },
          "value":`${item.idCard!}`,
          "disabled": true,
        },
        {
          "type": "tpl",
@@ -221,7 +237,9 @@
          "multiple": false,
          "hideUploadButton": false,
          "fixedSize": false,
          "mode": "inline"
          "mode": "inline",
          "value":`${pic1!}`,
          "disabled": true,
        },
        {
          "type": "input-image",
@@ -240,7 +258,9 @@
          "multiple": false,
          "hideUploadButton": false,
          "fixedSize": false,
          "mode": "inline"
          "mode": "inline",
          "value":`${pic2!}`,
          "disabled": true,
        },
        {
          "type": "input-image",
@@ -259,74 +279,9 @@
          "multiple": false,
          "hideUploadButton": false,
          "fixedSize": false,
          "mode": "inline"
        },
        {
          "type": "container",
          "body": [
            {
              "type": "tpl",
              "id": "u:8224ab367da8",
              "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
              "inline": true,
              "wrapperComponent": ""
            },
            {
              "type": "button",
              "id": "u:783ce71739db",
              "label": "保存",
              "onEvent": {
                "click": {
                  "actions": [
                    {
                      "componentId": "u:7c5f75a3b7b5",
                      "args": {
                      },
                      "outputVar": "responseResult",
                      "actionType": "submit"
                    },
                    {
                      "args": {
                      },
                      "script": "parent.layer.close(window.parent.TStudent.layerIndex);\n\n                    window.parent.TStudent.table.refresh();",
                      "actionType": "custom"
                    }
                  ]
                }
              },
              "level": "info"
            },
            {
              "type": "tpl",
              "id": "u:8224ab367da8",
              "tpl": "&nbsp&nbsp&nbsp",
              "inline": true,
              "wrapperComponent": ""
            },
            {
              "type": "button",
              "id": "u:008bc32396cc",
              "label": "取消",
              "onEvent": {
                "click": {
                  "actions": [
                    {
                      "args": {
                      },
                      "script": "parent.layer.close(window.parent.TStudent.layerIndex);\nconsole.log(\"===关闭\")",
                      "actionType": "custom"
                    }
                  ]
                }
              },
              "block": false
            }
          ],
          "style": {
            "position": "static",
            "display": "block"
          },
          "id": "u:59d68a32f7fd"
          "mode": "inline",
          "value":`${pic3!}`,
          "disabled": true,
        },
        {
          "type": "divider",
@@ -347,7 +302,8 @@
          "embed": false,
          "mode": "inline",
          "size": "md",
          "value":`${studentClassInfo.inDate}`
          "value":`${studentClassInfo.inDate}`,
          "disabled": true,
        },
        {
          "type": "tpl",
@@ -450,10 +406,9 @@
                                "multiple": false,
                                "hideUploadButton": false,
                                "receiver": {
                                  "url": "/mgr/uploadImg",
                                  "url": "/mgr/uploadImgAmis",
                                  "method": "post"
                                },
                                "value": "https://we-park-life.oss-cn-beijing.aliyuncs.com/img/99325878956443d68bb835145a8dca49.png"
                                }
                              },
                              {
                                "type": "input-image",
@@ -468,10 +423,9 @@
                                "multiple": false,
                                "hideUploadButton": false,
                                "receiver": {
                                  "url": "/mgr/uploadImg",
                                  "url": "/mgr/uploadImgAmis",
                                  "method": "post"
                                },
                                "value": "https://we-park-life.oss-cn-beijing.aliyuncs.com/img/99325878956443d68bb835145a8dca49.png"
                                }
                              },
                              {
                                "type": "container",
@@ -540,10 +494,10 @@
                              "method": "post",
                              "requestAdaptor": "",
                              "adaptor": "",
                              "messages": {
                              },
                              "messages": {},
                              "dataType": "form-data"
                            }
                            },
                            "actions": []
                          }
                        ],
                        "showCloseButton": true,
@@ -551,8 +505,14 @@
                        "showLoading": true,
                        "className": "app-popover",
                        "id": "u:044fac037276",
                        "closeOnEsc": false
                        "closeOnEsc": false,
                        "actions": []
                      }
                    },
                    {
                      "componentId": "u:59d68a32f7fd",
                      "actionType": "reload",
                      "data": null
                    }
                  ]
                }
@@ -579,13 +539,14 @@
                      "actionType": "dialog",
                      "dialog": {
                        "type": "form",
                        "title": "弹框标题",
                        "title": "",
                        "body": [
                          {
                            "type": "input-text",
                            "label": "id",
                            "name": "id",
                            "id": "u:0a5bc6f58ee8"
                            "id": "u:0a5bc6f58ee8",
                            "hidden": true
                          },
                          {
                            "type": "crud",
@@ -596,10 +557,13 @@
                            },
                            "columns": [
                              {
                                "name": "insertTime",
                                "name": "date",
                                "label": "操作时间",
                                "type": "date",
                                "id": "u:b652786dc9df"
                                "id": "u:b652786dc9df",
                                "valueFormat": "YYYY-MM-DD HH:mm:ss",
                                "format": "YYYY-MM-DD HH:mm",
                                "placeholder": "-"
                              },
                              {
                                "type": "text",
@@ -610,13 +574,13 @@
                              {
                                "type": "image",
                                "label": "申请凭证",
                                "name": "picPlease",
                                "name": "pleasePic",
                                "id": "u:b22cfb737009"
                              },
                              {
                                "type": "image",
                                "label": "同意凭证",
                                "name": "picPass",
                                "name": "passPic",
                                "id": "u:2a9071d0bda1"
                              }
                            ],
@@ -636,7 +600,63 @@
                        "showErrorMsg": true,
                        "showLoading": true,
                        "className": "app-popover",
                        "id": "u:c4e97065bccb"
                        "id": "u:c4e97065bccb",
                        "actions": [
                          {
                            "type": "flex",
                            "className": "p-1",
                            "items": [
                              {
                                "type": "container",
                                "body": [
                                  {
                                    "type": "flex",
                                    "className": "p-1",
                                    "items": [
                                      {
                                        "type": "button",
                                        "id": "u:98fc618e3ec6",
                                        "label": "关闭",
                                        "onEvent": {
                                          "click": {
                                            "actions": [
                                              {
                                                "actionType": "closeDialog"
                                              }
                                            ]
                                          }
                                        },
                                        "block": false
                                      }
                                    ],
                                    "style": {
                                      "position": "relative"
                                    },
                                    "id": "u:4a1662323b46"
                                  }
                                ],
                                "size": "xs",
                                "style": {
                                  "position": "relative",
                                  "display": "inline-block",
                                  "flex": "1 1 auto",
                                  "flexGrow": 1,
                                  "flexBasis": "auto",
                                  "inset": "auto"
                                },
                                "wrapperBody": false,
                                "isFixedHeight": false,
                                "isFixedWidth": false,
                                "id": "u:ffdcf3def663"
                              }
                            ],
                            "style": {
                              "position": "relative"
                            },
                            "id": "u:ad4c2c8f0190"
                          }
                        ],
                        "size": "md"
                      }
                    }
                  ]
@@ -686,7 +706,8 @@
            }
          },
          "labelClassName": "labelClassName-49dd1bda82f4",
          "value":`${studentClassInfo.totalHours}`
          "value":`${studentClassInfo.totalHours}`,
          "disabled": true,
        },
        {
          "type": "input-text",
@@ -695,7 +716,8 @@
          "name": "idCard1",
          "mode": "horizontal",
          "size": "md",
          "value":`${studentClassInfo.hasHours}`
          "value":`${studentClassInfo.hasHours}`,
          "disabled": true,
        },
        {
          "type": "input-text",
@@ -704,7 +726,8 @@
          "name": "idCard2",
          "mode": "horizontal",
          "size": "md",
          "value":`${studentClassInfo.restHours}`
          "value":`${studentClassInfo.restHours}`,
          "disabled": true,
        },
        {
          "type": "input-text",
@@ -713,10 +736,158 @@
          "name": "idCard3",
          "mode": "horizontal",
          "size": "md",
          "value":`${studentClassInfo.giftHours}`
          "value":`${studentClassInfo.giftHours}`,
          "disabled": true,
        }, {
          "type": "tpl",
          "id": "u:8224ab367da8",
          "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
          "inline": true,
          "wrapperComponent": "",
          "style": {
            "paddingBottom": "100",
            "marginBottom": "100"
          }
        },
        {
          "type": "tpl",
          "id": "u:e6a3e106fac0",
          "tpl": "退费申请:",
          "inline": true,
          "wrapperComponent": "",
          "style": {
            "paddingBottom": "100",
            "marginBottom": "100"
          }
        },
        {
          "type": "button",
          "id": "u:4b1f37ea569c",
          "label": "退费列表",
          "level": "info",
          "onEvent": {
            "click": {
              "weight": 0,
              "actions": [
                {
                  "actionType": "dialog",
                  "dialog": {
                    "type": "dialog",
                    "title": "弹框标题",
                    "body": [
                      {
                        "type": "input-text",
                        "id": "u:895313026d71",
                        "label": "id",
                        "name": "id",
                        "hidden": true
                      },
                      {
                        "type": "crud",
                        "syncLocation": false,
                        "name":"crud",
                        "api": {
                          "method": "get",
                          "url": "/tStudent/getBackList/$id"
                        },
                        "columns": [
                          {
                            "type": "date",
                            "name": "insertTime",
                            "label": "申请时间",
                            "id": "u:6948dfe01afd",
                            "valueFormat": "YYYY-MM-DD HH:mm:ss",
                            "format": "YYYY-MM-DD HH:mm"
                          },
                          {
                            "name": "status",
                            "label": "审核状态",
                            "type": "mapping",
                            "id": "u:1f2a09737a98",
                            "map": {
                              "0": "待审核",
                              "1": "同意",
                              "2": "拒绝"
                            }
                          },
                          {
                            "type": "operation",
                            "id": "u:b0e34eccd864",
                            "buttons": [
                              {
                                "type": "button",
                                "label": "查看详情",
                                "onEvent": {
                                  "click": {
                                    "actions": [
                                      {
                                        "actionType": "url",
                                        "args": {
                                          "url": "/tStudent/backmoney",
                                          "params": {
                                            "ids": "$ids",
                                            "id": "$id"
                                          }
                                        }
                                      }
                                    ],
                                    "weight": 0
                                  }
                                },
                                "id": "u:38a6f5402e72",
                                "level": "link",
                                "actionType": "ajax"
                              },
                              {
                                "type": "button",
                                "label": "同意",
                                "onEvent": {
                                  "click": {
                                    "actions": [
                                    ],
                                    "weight": 0
                                  }
                                },
                                "id": "u:4450de076e9f",
                                "level": "link",
                                "actionType": "ajax",
                                "hiddenOn": "this.status === 1 || this.status === 2",
                                "api": {
                                  "method": "post",
                                  "url": "/tStudent/changeStatus/$id"
                                },
                                "reload": "pay"
                              }
                            ],
                            "placeholder": "-",
                            "label": "操作"
                          }
                        ],
                        "bulkActions": [],
                        "itemActions": [],
                        "features": [
                          "view",
                          "delete"
                        ],
                        "id": "u:a4ce7e3ae181"
                      }
                    ],
                    "showCloseButton": true,
                    "showErrorMsg": true,
                    "showLoading": true,
                    "className": "app-popover",
                    "id": "u:b91085026056"
                  }
                }
              ]
            }
          },
          "size": "xs"
        },
        {
          "type": "crud",
          "name":"pay",
          "syncLocation": false,
          "api": {
            "method": "get",
@@ -735,32 +906,37 @@
              "name": "classType",
              "id": "u:2f1091a380a8",
              "map": {
                "*": "通配值"
                "1": "常规课",
                "2": "假期课",
                "3": "体验课"
              }
            },
            {
              "type": "date",
              "label": "报名时间",
              "name": "reportDate",
              "id": "u:36ab5e408a48"
              "name": "insertTime",
              "id": "u:36ab5e408a48",
              "valueFormat": "x"
            },
            {
              "type": "text",
              "label": "总课时数",
              "name": "totalTime",
              "name": "totalClassHours",
              "id": "u:fba93556fb2e"
            },
            {
              "type": "text",
              "label": "已上课时数",
              "name": "haveTime",
              "id": "u:b55a5ac7f49d"
              "name": "hasClassHours",
              "id": "u:b55a5ac7f49d",
              "value": "$totalClassHours-$totalClassHours"
            },
            {
              "type": "text",
              "label": "剩余课时数",
              "name": "restTime",
              "id": "u:abb78021df40"
              "name": "laveClassHours",
              "id": "u:abb78021df40",
              "placeholder": "-"
            },
            {
              "type": "operation",
@@ -779,42 +955,115 @@
                            "title": "弹框标题",
                            "body": [
                              {
                                "type": "select",
                                "label": "请选择被转移学员",
                                "name": "select",
                                "id": "u:80a2266885a3",
                                "multiple": false,
                                "mode": "horizontal",
                                "size": "lg",
                                "horizontal": {
                                  "leftFixed": "lg"
                                },
                                "source": {
                                  "url": "/tStudent/getUserSlect/$id",
                                  "method": "get"
                                },
                                "labelField": "value",
                                "valueField": "id"
                              },
                              {
                                "type": "input-text",
                                "label": "id",
                                "name": "id",
                                "id": "u:1e2c394fa299"
                              },
                              {
                                "type": "tpl",
                                "tpl": "对,你刚刚点击了",
                                "wrapperComponent": "",
                                "inline": false,
                                "id": "u:7c4a5a6b60d0"
                                "type": "form",
                                "id": "u:db6a651c2979",
                                "title": "",
                                "body": [
                                  {
                                    "label": "请选择被转移学员",
                                    "type": "select",
                                    "name": "toStudentId",
                                    "id": "u:80a2266885a3",
                                    "multiple": false,
                                    "mode": "horizontal",
                                    "size": "lg",
                                    "horizontal": {
                                      "leftFixed": "lg"
                                    },
                                    "source": {
                                      "url": "/tStudent/getUserSlect/$id",
                                      "method": "get"
                                    },
                                    "labelField": "value",
                                    "valueField": "id"
                                  },
                                  {
                                    "label": "id",
                                    "type": "input-text",
                                    "name": "id",
                                    "id": "u:1e2c394fa299",
                                    "hidden": true
                                  },
                                  {
                                    "type": "container",
                                    "id": "u:59d68a32f7fd",
                                    "body": [
                                      {
                                        "type": "tpl",
                                        "id": "u:8224ab367da8",
                                        "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
                                        "inline": true,
                                        "wrapperComponent": ""
                                      },
                                      {
                                        "type": "button",
                                        "id": "u:783ce71739db",
                                        "label": "保存",
                                        "onEvent": {
                                          "click": {
                                            "actions": [
                                              {
                                                "componentId": "u:db6a651c2979",
                                                "actionType": "submit"
                                              }
                                            ]
                                          }
                                        },
                                        "level": "info"
                                      },
                                      {
                                        "type": "tpl",
                                        "id": "u:8224ab367da8",
                                        "tpl": "&nbsp&nbsp&nbsp",
                                        "inline": true,
                                        "wrapperComponent": ""
                                      },
                                      {
                                        "type": "button",
                                        "id": "u:008bc32396cc",
                                        "label": "取消",
                                        "onEvent": {
                                          "click": {
                                            "actions": [
                                              {
                                                "actionType": "closeDialog"
                                              }
                                            ]
                                          }
                                        },
                                        "block": false
                                      }
                                    ],
                                    "style": {
                                      "position": "static",
                                      "display": "block"
                                    }
                                  }
                                ],
                                "api": {
                                  "url": "/tStudent/toClass",
                                  "method": "post",
                                  "requestAdaptor": "",
                                  "adaptor": "",
                                  "messages": {
                                  },
                                  "dataType": "form-data"
                                }
                              }
                            ],
                            "showCloseButton": true,
                            "showErrorMsg": true,
                            "showLoading": true,
                            "className": "app-popover",
                            "id": "u:a612413d932d"
                            "id": "u:a612413d932d",
                            "api": {
                              "url": "/tStudent/toClass",
                              "method": "post",
                              "messages": {
                              }
                            },
                            "actions": [
                            ]
                          }
                        }
                      ]
@@ -836,65 +1085,169 @@
                            "title": "弹框标题",
                            "body": [
                              {
                                "type": "input-text",
                                "label": "用户姓名:",
                                "name": "text",
                                "id": "u:c260d6dbc161",
                                "mode": "horizontal"
                              },
                              {
                                "type": "input-text",
                                "label": "用户电话",
                                "name": "phone",
                                "id": "u:c00d1204430d",
                                "mode": "horizontal"
                              },
                              {
                                "type": "service",
                                "id": "u:f6ab941852f1",
                                "type": "form",
                                "id": "u:57ea84073397",
                                "title": "",
                                "body": [
                                  {
                                    "type": "select",
                                    "id": "u:a7766815916b",
                                    "label": "选择学员",
                                    "name": "select",
                                    "multiple": false,
                                    "mode": "horizontal",
                                    "size": "lg",
                                    "value": ""
                                    "type": "service",
                                    "id": "u:f6ab941852f1",
                                    "body": [
                                      {
                                        "type": "input-text",
                                        "id": "u:c00d1204430d",
                                        "label": "用户电话",
                                        "name": "phone",
                                        "mode": "horizontal",
                                        "size": "md"
                                      },
                                      {
                                        "type": "input-text",
                                        "id": "u:9a9f18e09fb9",
                                        "label": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp用户姓名:",
                                        "name": "name",
                                        "mode": "inline",
                                        "size": "md"
                                      },
                                      {
                                        "type": "button",
                                        "label": "搜索",
                                        "onEvent": {
                                          "click": {
                                            "actions": [
                                              {
                                                "componentId": "u:f6ab941852f1",
                                                "actionType": "reload",
                                                "dataMergeMode": "merge"
                                              }
                                            ]
                                          }
                                        },
                                        "id": "u:5fcf1222f6ea",
                                        "level": "info"
                                      },
                                      {
                                        "type": "select",
                                        "id": "u:a7766815916b",
                                        "label": "选择学员",
                                        "name": "toStudentId",
                                        "multiple": false,
                                        "mode": "horizontal",
                                        "size": "md",
                                        "value": "",
                                        "source": "$options",
                                        "labelField": "value",
                                        "valueField": "id"
                                      }
                                    ],
                                    "messages": {},
                                    "loadingConfig": {
                                      "show": true
                                    },
                                    "api": {
                                      "url": "/tStudent/giftSelect",
                                      "method": "post",
                                      "messages": {},
                                      "requestAdaptor": "",
                                      "adaptor": "",
                                      "dataType": "form-data",
                                      "data": {
                                        "name": "$name",
                                        "phone": "$phone",
                                        "id": "$id"
                                      }
                                    }
                                  },
                                  {
                                    "type": "input-text",
                                    "id": "u:fe0979ee23df",
                                    "label": "id",
                                    "name": "id",
                                    "hidden": true
                                  },
                                  {
                                    "type": "container",
                                    "id": "u:59d68a32f7fd",
                                    "body": [
                                      {
                                        "type": "tpl",
                                        "id": "u:8224ab367da8",
                                        "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
                                        "inline": true,
                                        "wrapperComponent": ""
                                      },
                                      {
                                        "type": "button",
                                        "id": "u:783ce71739db",
                                        "label": "保存",
                                        "onEvent": {
                                          "click": {
                                            "actions": [
                                              {
                                                "componentId": "u:57ea84073397",
                                                "actionType": "submit"
                                              }
                                            ]
                                          }
                                        },
                                        "level": "info"
                                      },
                                      {
                                        "type": "tpl",
                                        "id": "u:8224ab367da8",
                                        "tpl": "&nbsp&nbsp&nbsp",
                                        "inline": true,
                                        "wrapperComponent": ""
                                      },
                                      {
                                        "type": "button",
                                        "id": "u:008bc32396cc",
                                        "label": "取消",
                                        "onEvent": {
                                          "click": {
                                            "actions": [
                                              {
                                                "actionType": "closeDialog"
                                              }
                                            ]
                                          }
                                        },
                                        "block": false
                                      }
                                    ],
                                    "style": {
                                      "position": "static",
                                      "display": "block"
                                    }
                                  }
                                ]
                              },
                              {
                                "type": "button",
                                "label": "按钮",
                                "onEvent": {
                                  "click": {
                                    "actions": [
                                    ]
                                  }
                                ],
                                "api": {
                                  "url": "/tStudent/giftTo",
                                  "method": "post",
                                  "requestAdaptor": "",
                                  "adaptor": "",
                                  "messages": {},
                                  "dataType": "form-data"
                                },
                                "id": "u:5fcf1222f6ea"
                                "actions": []
                              },
                              {
                                "type": "input-text",
                                "label": "id",
                                "name": "id",
                                "id": "u:fe0979ee23df"
                              },
                              {
                                "type": "tpl",
                                "tpl": "对,你刚刚点击了",
                                "wrapperComponent": "",
                                "inline": false,
                                "id": "u:5fe4b4c9e423"
                                "id": "u:59d68a32f7fd",
                                "type": "container",
                                "body": [],
                                "style": {
                                  "position": "static",
                                  "display": "block"
                                }
                              }
                            ],
                            "showCloseButton": true,
                            "showErrorMsg": true,
                            "showLoading": true,
                            "className": "app-popover",
                            "id": "u:552bd1b3464d"
                            "id": "u:552bd1b3464d",
                            "actions": [],
                            "canAccessSuperData": false
                          }
                        }
                      ]
@@ -902,7 +1255,257 @@
                  },
                  "id": "u:ae1e6e73beb9",
                  "level": "link"
                },
                {
                  "type": "button",
                  "label": "变更记录",
                  "onEvent": {
                    "click": {
                      "actions": [
                        {
                          "actionType": "dialog",
                          "dialog": {
                            "type": "dialog",
                            "title": "弹框标题",
                            "body": [
                              {
                                "type": "form",
                                "id": "u:4468428b5d24",
                                "title": "",
                                "body": [
                                  {
                                    "type": "crud",
                                    "id": "u:8072454d25d8",
                                    "api": {
                                      "url": "/tStudent/changelist/$id",
                                      "method": "post",
                                      "messages": {
                                      },
                                      "requestAdaptor": "",
                                      "adaptor": "",
                                      "dataType": "form"
                                    },
                                    "syncLocation": false,
                                    "columns": [
                                      {
                                        "name": "insertTime",
                                        "label": "时间",
                                        "type": "date",
                                        "id": "u:e13821cad6ba",
                                        "valueFormat": "x"
                                      },
                                      {
                                        "name": "changeType",
                                        "label": "变更类型",
                                        "type": "mapping",
                                        "id": "u:e2b292dd63d0"
                                      },
                                      {
                                        "type": "text",
                                        "label": "课时数",
                                        "name": "num",
                                        "id": "u:24b1375ff173"
                                      },
                                      {
                                        "type": "text",
                                        "label": "变更原因",
                                        "name": "reason",
                                        "id": "u:8ba95bfd5e56"
                                      }
                                    ],
                                    "bulkActions": [
                                    ],
                                    "itemActions": [
                                    ],
                                    "features": [
                                      "filter"
                                    ],
                                    "filterColumnCount": 3,
                                    "filter": {
                                      "title": "",
                                      "body": [
                                        {
                                          "type": "input-date-range",
                                          "name": "start",
                                          "label": "上传时间",
                                          "id": "u:b2fb064aa9ac",
                                          "inputFormat": "YYYY-MM-DD HH:mm",
                                          "format": "YYYY-MM-DD HH:mm",
                                          "embed": false,
                                          "extraName": "end"
                                        },
                                        {
                                          "type": "select",
                                          "label": "是否启用",
                                          "name": "changeType",
                                          "options": [
                                            {
                                              "label": "全部"
                                            },
                                            {
                                              "label": "增加",
                                              "value": 1
                                            },
                                            {
                                              "label": "减少",
                                              "value": 0
                                            }
                                          ],
                                          "id": "u:6dbebedca3b9",
                                          "multiple": false,
                                          "clearable": true,
                                          "size": "md",
                                          "value": ""
                                        },
                                        {
                                          "type": "select",
                                          "label": "变更原因",
                                          "name": "reason",
                                          "options": [
                                            {
                                              "label": "全部"
                                            },
                                            {
                                              "label": "购课",
                                              "value": "购课"
                                            },
                                            {
                                              "label": "消课",
                                              "value": 0
                                            },
                                            {
                                              "label": "体验购课",
                                              "value": "体验购课"
                                            },
                                            {
                                              "label": "报名赛事",
                                              "value": "报名赛事"
                                            },
                                            {
                                              "label": "报名假期班",
                                              "value": "报名假期班"
                                            },
                                            {
                                              "label": "续课",
                                              "value": 1
                                            },
                                            {
                                              "label": "课时转移",
                                              "value": "课时转移"
                                            },
                                            {
                                              "label": "赠课",
                                              "value": "赠课"
                                            },
                                            {
                                              "label": "退费",
                                              "value": "退费"
                                            },
                                            {
                                              "label": "介绍有礼",
                                              "value": "介绍有礼"
                                            },
                                            {
                                              "label": "换课",
                                              "value": "换课"
                                            }
                                          ],
                                          "id": "u:a3db438ccfdd",
                                          "multiple": false,
                                          "clearable": true,
                                          "size": "md",
                                          "value": ""
                                        }
                                      ],
                                      "id": "u:5c936e95b286"
                                    },
                                    "perPageAvailable": [
                                      10
                                    ],
                                    "messages": {
                                    },
                                    "perPageField": "size"
                                  },
                                  {
                                    "type": "input-text",
                                    "id": "u:5f73d0cbffee",
                                    "label": "id",
                                    "name": "id",
                                    "hidden": true
                                  },
                                  {
                                    "type": "container",
                                    "id": "u:0576f915b9e3",
                                    "body": [
                                      {
                                        "type": "tpl",
                                        "id": "u:9c56f7ef3419",
                                        "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
                                        "inline": true,
                                        "wrapperComponent": ""
                                      },
                                      {
                                        "type": "tpl",
                                        "id": "u:a2cba9bb8751",
                                        "tpl": "&nbsp&nbsp&nbsp",
                                        "inline": true,
                                        "wrapperComponent": ""
                                      },
                                      {
                                        "type": "button",
                                        "id": "u:98fc618e3ec6",
                                        "label": "关闭",
                                        "onEvent": {
                                          "click": {
                                            "actions": [
                                              {
                                                "actionType": "closeDialog"
                                              }
                                            ]
                                          }
                                        },
                                        "block": false
                                      }
                                    ],
                                    "style": {
                                      "position": "static",
                                      "display": "block"
                                    }
                                  }
                                ],
                                "api": {
                                  "url": "/tStudent/changelist/$id",
                                  "method": "post",
                                  "requestAdaptor": "",
                                  "adaptor": "",
                                  "messages": {
                                  },
                                  "dataType": "form-data"
                                },
                                "actions": [
                                ]
                              }
                            ],
                            "showCloseButton": true,
                            "showErrorMsg": true,
                            "showLoading": true,
                            "className": "",
                            "id": "u:f66fa4de8251",
                            "actions": [
                            ],
                            "canAccessSuperData": false,
                            "wrapWithPanel": false,
                            "size": "xl",
                            "closeOnEsc": false
                          }
                        }
                      ]
                    }
                  },
                  "id": "u:dd3110deaf9d",
                  "level": "link"
                }
              ]
            }
          ],
@@ -915,23 +1518,120 @@
              "wrapperComponent": ""
            },
            {
              "label": "ajax请求",
              "type": "button",
              "label": "退费",
              "actionType": "ajax",
              "api": {
                "method": "get",
                "url": "/ttt",
                "data": {
                  "item": "$items"
                },
                "id": "u:f706584d4a0c"
              },
              "id": "u:38a6f5402e72"
              "id": "u:38a6f5402e72",
              "onEvent": {
                "click": {
                  "weight": 0,
                  "actions": [
                    {
                      "actionType": "url",
                      "args": {
                        "url": "/tStudent/backmoney",
                        "params": {
                          "ids": "$ids",
                          "id": "$id"
                        }
                      }
                    }
                  ]
                }
              }
            },
            {
              "label": "退费",
              "type": "button",
              "id": "u:4b1f37ea569c"
              "label": "退费申请",
              "id": "u:4b1f37ea569c",
              "level": "info",
              "onEvent": {
                "click": {
                  "weight": 0,
                  "actions": [
                    {
                      "actionType": "dialog",
                      "dialog": {
                        "type": "dialog",
                        "title": "弹框标题",
                        "body": [
                          {
                            "type": "tpl",
                            "tpl": "对,你刚刚点击了",
                            "wrapperComponent": "",
                            "inline": false,
                            "id": "u:d72b44ae6de4"
                          },
                          {
                            "type": "crud",
                            "syncLocation": false,
                            "api": {
                              "method": "get",
                              "url": "/tStudent/getBackList/$id"
                            },
                            "columns": [
                              {
                                "name": "inserTtime",
                                "label": "申请时间",
                                "type": "date",
                                "id": "u:6948dfe01afd"
                              },
                              {
                                "name": "status",
                                "label": "审核状态",
                                "type": "mapping",
                                "id": "u:1f2a09737a98"
                              },
                              {
                                "type": "operation",
                                "id": "u:b0e34eccd864",
                                "buttons": [
                                  {
                                    "type": "button",
                                    "label": "退费",
                                    "onEvent": {
                                      "click": {
                                        "actions": [
                                          {
                                            "actionType": "url",
                                            "args": {
                                              "url": "/tStudent/backmoney",
                                              "params": {
                                                "ids": "$ids",
                                                "id": "$id"
                                              }
                                            }
                                          }
                                        ],
                                        "weight": 0
                                      }
                                    },
                                    "id": "u:38a6f5402e72",
                                    "actionType": "ajax",
                                    "level": "info"
                                  }
                                ]
                              }
                            ],
                            "bulkActions": [],
                            "itemActions": [],
                            "features": [
                              "view",
                              "delete"
                            ],
                            "id": "u:a4ce7e3ae181"
                          }
                        ],
                        "showCloseButton": true,
                        "showErrorMsg": true,
                        "showLoading": true,
                        "className": "app-popover",
                        "id": "u:b91085026056"
                      }
                    }
                  ]
                }
              }
            },
            {
              "label": "退费",
cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEditTTT.html
New file
@@ -0,0 +1,136 @@
<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8" />
  <title>amis demo</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta
          name="viewport"
          content="width=device-width, initial-scale=1, maximum-scale=1"
  />
  <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
  <link rel="stylesheet" href="${ctxPath}/sdk/sdk.css" />
  <link rel="stylesheet" href="${ctxPath}/sdk/helper.css" />
  <link rel="stylesheet" href="${ctxPath}/sdk/iconfont.css" />
  <!-- 这是默认主题所需的,如果是其他主题则不需要 -->
  <!-- 从 1.1.0 开始 sdk.css 将不支持 IE 11,如果要支持 IE11 请引用这个 css,并把前面那个删了 -->
  <!-- <link rel="stylesheet" href="sdk-ie11.css" /> -->
  <!-- 不过 amis 开发团队几乎没测试过 IE 11 下的效果,所以可能有细节功能用不了,如果发现请报 issue -->
  <style>
    html,
    body,
    .app-wrapper {
      position: relative;
      width: 100%;
      height: 100%;
      margin: 0;
      padding: 0;
    }
  </style>
</head>
<body>
<div id="root" class="app-wrapper"></div>
<script src="${ctxPath}/sdk/sdk.js"></script>
<script type="text/javascript">
  (function () {
    let amis = amisRequire('amis/embed');
    // 通过替换下面这个配置来生成不同页面
    let amisJSON = {
      "type": "page",
      "title": "",
      "body": [
        {
          "type": "form",
          "title": "",
          "body": [
            {
              "type": "form",
              "title": "",
              "body": [
                {
                  "type": "tpl",
                  "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp报名假期班",
                  "inline": true,
                  "wrapperComponent": "h2",
                  "id": "u:194f160daab4"
                },
                {
                  "type": "input-text",
                  "label": "id",
                  "name": "id",
                  "id": "u:d038053014ca",
                  "mode": "horizontal",
                  "size": "md"
                },
                {
                  "type": "input-text",
                  "label": "ids",
                  "name": "ids",
                  "id": "u:223b7f2a1a5b",
                  "mode": "horizontal",
                  "size": "md"
                },
                {
                  "label": "换课课程:",
                  "type": "select",
                  "name": "holiId",
                  "id": "u:e205156867e3",
                  "multiple": false,
                  "mode": "horizontal",
                  "source": {
                    "url": "/tStudent/getholi/$id",
                    "method": "get",
                    "requestAdaptor": "",
                    "adaptor": "",
                    "messages": {
                    }
                  },
                  "value": "",
                  "labelField": "value",
                  "valueField": "id",
                  "size": "md",
                  "searchable": true
                },
                {
                  "type": "input-text",
                  "label": "扣除课时数:",
                  "name": "classNum",
                  "id": "u:0333b5c5d05c",
                  "mode": "horizontal",
                  "size": "md"
                }
              ],
              "api": {
                "url": "/tStudent/Toholi",
                "method": "post",
                "requestAdaptor": "",
                "adaptor": "",
                "messages": {
                },
                "dataType": "form-data"
              },
              "id": "u:8860df492a12"
            }
          ],
          "id": "u:710cbc62ec24",
          "actions": [
          ]
        }
      ],
      "id": "u:42603b55fcf2"
    };
    let amisScoped = amis.embed('#root', amisJSON);
  })();
  function test(){
    console.log("测试成功")
  }
  var myButton = document.getElementById("ttt");
  myButton.addEventListener("click",test);
</script>
</body>
</html>
cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit_first.html
@@ -214,7 +214,7 @@
          "uploadType": "fileReceptor",
          "imageClassName": "r w-full",
          "receiver": {
            "url": "/mgr/uploadImg",
            "url": "/mgr/uploadImgAmis",
            "method": "post"
          },
          "accept": ".jpeg, .jpg, .png, .gif",
@@ -234,7 +234,7 @@
          "uploadType": "fileReceptor",
          "imageClassName": "r w-full",
          "receiver": {
            "url": "/mgr/uploadImg",
            "url": "/mgr/uploadImgAmis",
            "method": "post"
          },
          "accept": ".jpeg, .jpg, .png, .gif",
@@ -254,7 +254,7 @@
          "uploadType": "fileReceptor",
          "imageClassName": "r w-full",
          "receiver": {
            "url": "/mgr/uploadImg",
            "url": "/mgr/uploadImgAmis",
            "method": "post"
          },
          "accept": ".jpeg, .jpg, .png, .gif",
cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/trans.html
New file
@@ -0,0 +1,128 @@
<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8" />
  <title>amis demo</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta
          name="viewport"
          content="width=device-width, initial-scale=1, maximum-scale=1"
  />
  <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
  <link rel="stylesheet" href="${ctxPath}/sdk/sdk.css" />
  <link rel="stylesheet" href="${ctxPath}/sdk/helper.css" />
  <link rel="stylesheet" href="${ctxPath}/sdk/iconfont.css" />
  <!-- 这是默认主题所需的,如果是其他主题则不需要 -->
  <!-- 从 1.1.0 开始 sdk.css 将不支持 IE 11,如果要支持 IE11 请引用这个 css,并把前面那个删了 -->
  <!-- <link rel="stylesheet" href="sdk-ie11.css" /> -->
  <!-- 不过 amis 开发团队几乎没测试过 IE 11 下的效果,所以可能有细节功能用不了,如果发现请报 issue -->
  <style>
    html,
    body,
    .app-wrapper {
      position: relative;
      width: 100%;
      height: 100%;
      margin: 0;
      padding: 0;
    }
  </style>
</head>
<body>
<div id="root" class="app-wrapper"></div>
<script src="${ctxPath}/sdk/sdk.js"></script>
<script type="text/javascript">
  (function () {
    let amis = amisRequire('amis/embed');
    // 通过替换下面这个配置来生成不同页面
    let amisJSON = {
      "type": "page",
      "title": "",
      "body": [
        {
          "type": "form",
          "id": "u:710cbc62ec24",
          "title": "",
          "body": [
            {
              "type": "form",
              "title": "",
              "body": [
                {
                  "type": "tpl",
                  "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp换课",
                  "inline": true,
                  "wrapperComponent": "h2",
                  "id": "u:194f160daab4"
                },
                {
                  "type": "input-text",
                  "label": "id",
                  "name": "id",
                  "id": "u:d038053014ca",
                  "mode": "horizontal",
                  "size": "md"
                },
                {
                  "type": "input-text",
                  "label": "ids",
                  "name": "ids",
                  "id": "u:223b7f2a1a5b",
                  "mode": "horizontal",
                  "size": "md"
                },
                {
                  "label": "换课课程:",
                  "type": "select",
                  "name": "holiId",
                  "id": "u:e205156867e3",
                  "multiple": false,
                  "mode": "horizontal",
                  "source": {
                    "url": "/tStudent/gettrans/$id",
                    "method": "get",
                    "requestAdaptor": "",
                    "adaptor": "",
                    "messages": {
                    }
                  },
                  "value": "",
                  "labelField": "value",
                  "valueField": "id",
                  "size": "md",
                  "searchable": true
                }
              ],
              "api": {
                "url": "/tStudent/ToTrans",
                "method": "post",
                "requestAdaptor": "",
                "adaptor": "",
                "messages": {
                },
                "dataType": "form-data"
              },
              "id": "u:8860df492a12"
            }
          ],
          "actions": [
          ]
        }
      ],
      "id": "u:42603b55fcf2"
    };
    let amisScoped = amis.embed('#root', amisJSON);
  })();
  function test(){
    console.log("测试成功")
  }
  var myButton = document.getElementById("ttt");
  myButton.addEventListener("click",test);
</script>
</body>
</html>
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/TCoupon.js
New file
@@ -0,0 +1,337 @@
/**
 * 管理初始化
 */
var TCoupon = {
    id: "TCouponTable",    //表格id
    seItem: null,        //选中的条目
    table: null,
    layerIndex: -1
};
// console.log("父级页面"+window.parent.getElementById("counpons"+$("#index").val()));
console.log("父级页面" + window.parent.document.getElementById("counpons" + $("#index").val()).value);
console.log( $("#index").val());
var ids = window.parent.document.getElementById("counpons" + $("#index").val()).value;
// console.log("==========radio=="+ids)
/**
 * 初始化表格的列
 */
TCoupon.initColumn = function () {
    return [
        {field: 'selectItem', checkbox: true,   formatter: function (value,row) {
                if(ids.indexOf(row.id)!= -1){
                    return {checked:true};
                }}},
        {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'},
        {title: '优惠券名称', field: 'name', visible: true, align: 'center', valign: 'middle'},
        {title: '适用范围', field: 'useScope', visible: true, align: 'center', valign: 'middle',
            formatter: function (value, row, index) {
                return {1: "全国", 2: "指定城市", 3: "指定门店"}[value]
            }
        },
        {title: '优惠券类型', field: 'type', visible: true, align: 'center', valign: 'middle',
            formatter: function (value, row, index) {
                return {1: "满减券", 2: "代金券", 3: "体验券"}[value]
            }},
        {title: '发放方式', field: 'distributionMethod', visible: true, align: 'center', valign: 'middle',
            formatter: function (value, row, index) {
                return {1: "积分购买", 2: "注册赠送", 3: "自动发券"}[value]
            }},
        {title: '有效期', field: 'timeValue', visible: true, align: 'center', valign: 'middle'},
        {title: '用户人群', field: 'userPopulation', visible: true, align: 'center', valign: 'middle',
            formatter: function (value, row, index) {
                return {1: "全部用户", 2: "年度会员", 3: "已有学员用户"}[value]
            }},
        {title: '发放数量', field: 'quantityIssued', visible: true, align: 'center', valign: 'middle'},
        {title: '限领数量', field: 'pickUpQuantity', visible: true, align: 'center', valign: 'middle'},
        {title: '已领数量', field: 'hasPickQty', visible: true, align: 'center', valign: 'middle'},
        {title: '活动状态', field: 'status', visible: true, align: 'center', valign: 'middle',
            formatter: function (value, row, index) {
                return {1: "未开始", 2: "已开始", 3: "已结束"}[value]
            }},
        {title: '可售状态', field: 'state', visible: true, align: 'center', valign: 'middle',
            formatter: function (value, row, index) {
                return {1: "上架", 2: "下架"}[value]
            }},
    ];
};
/**
 * 检查是否选中
 */
TCoupon.check = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length == 0){
        Feng.info("请先选中表格中的某一记录!");
        return false;
    }else{
        TCoupon.seItem = selected[0];
        TCoupon.seItem1 = selected;
        return true;
    }
};
/**
 * 点击添加
 */
TCoupon.openAdd = function () {
    var index = layer.open({
        type: 2,
        title: '添加',
        area: ['100%', '100%'], //宽高
        fix: false, //不固定
        maxmin: true,
        content: Feng.ctxPath + '/tCouponManage/coupon_add'
    });
    this.layerIndex = index;
};
TCoupon.backids = function (i) {
    console.log("aaaaaa"+i)
    if (this.check()) {
        var ids = TCoupon.seItem1.map(function(item) {
            return item.id;
        }).join(",");
        // console.log("aaaaaa"+TCoupon.seItem1.map(function(item) {
        //     return item.id;
        // }).join(","))
        // if (window.parent.document.getElementById("counpons"+i).value==null||window.parent.document.getElementById("counpons"+i).value==""){
            window.parent.document.getElementById("counpons"+i).value = ids;
        // }else {
        //     window.parent.document.getElementById("counpons"+i).value =  window.parent.document.getElementById("counpons"+i).value + ','+TCoupon.seItem.id;
        //
        // }
        window.parent.layer.closeAll();
    }
};
/**
 * 点击编辑
 */
TCoupon.openChange = function () {
    if (this.check()){
        let id = TCoupon.seItem.id
        let name = TCoupon.seItem.name
        let quantityIssued = TCoupon.seItem.quantityIssued
        let pickUpQuantity = TCoupon.seItem.pickUpQuantity
        let illustrate = TCoupon.seItem.illustrate
        let hasPickQty = TCoupon.seItem.hasPickQty
        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' +
                '                                  <label class="form-control"  id="name" >'+name+'</label> '+
                '                          </div>\n' +
                '                        </div>\n'+
            '                        <div class="form-group">\n' +
                    '                            <label class="col-sm-3 control-label">发放数量:</label>\n' +
                '                         <div class="col-sm-9">\n' +
                '                                  <input class="form-control"  id="num" value="'+quantityIssued+'" > '+
                '                          </div>\n' +
                '                        </div>\n' +
                '                        <div class="form-group">\n' +
                '                            <label class="col-sm-3 control-label">限领数量:</label>\n' +
                '                         <div class="col-sm-9">\n' +
                '                                  <input class="form-control"  id="num1" value="'+pickUpQuantity+'" > '+
                '                          </div>\n' +
                '                        </div>\n' +
                '                        <div class="form-group">\n' +
                '                            <label class="col-sm-3 control-label">优惠券说明:</label>\n' +
                '                         <div class="col-sm-9">\n' +
                '                                  <textarea class="form-control"  id="text"  >'+illustrate+'</textarea> '+
                '                          </div>\n' +
                '                        </div>\n' +
                '                       </div>' +
                '                   </div>' +
                '</div>'
            , btn: ['关闭', '保存']
            , btnAlign: 'c' //按钮居中
            , shade:  0.5 //不显示遮罩
            ,load:1
            , yes: function () {
                layer.closeAll();
            },
            btn2:function () {
                let num = $("#num").val()
                if(num==''){
                    Feng.info("请输入发放数量")
                    return false;
                }
                let num1 = $("#num1").val()
                if(num1==''){
                    Feng.info("请输入限领数量")
                    return false;
                }
                let text = $("#text").val()
                if(text==''){
                    Feng.info("请输入优惠券说明")
                    return false;
                }
                if(num<hasPickQty){
                    Feng.info("发放数量不能小于已领取数量")
                    return false;
                }
                var ajax = new $ax(Feng.ctxPath + "/tCouponManage/update", function (data) {
                    if (data.code == 200) {
                        Feng.success("操作成功!");
                        window.location.reload();
                        window.parent.layer.closeAll();
                    } else if(data=="repeat"){
                        window.location.reload();
                        window.parent.layer.closeAll();
                        Feng.error("请勿重复操作");
                    }else {
                        return  Feng.error(data.msg);
                    }
                }, function (data) {
                    Feng.error("操作失败!")
                    window.location.reload();
                    window.parent.layer.closeAll();
                    return   Feng.error("操作失败!");
                });
                ajax.set("id", id);
                ajax.set("num", num);
                ajax.set("num1", num1);
                ajax.set("text", text);
                ajax.start();
                layer.closeAll();
            }
        });
        this.layerIndex = index;
    }
};
/**
 * 上架
 */
/**
 * 下架
 */
TCoupon.offShelf = function () {
};
/**
 * 打开查看详情
 */
TCoupon.openDetail = function () {
    if (this.check()) {
        var index = layer.open({
            type: 2,
            title: '详情',
            area: ['100%', '100%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/tCouponManage/coupon_detail/' + TCoupon.seItem.id
        });
        this.layerIndex = index;
    }
};
/**
 * 打开领取记录
 */
TCoupon.openCollectionRecord = function () {
    if (this.check()) {
        var index = layer.open({
            type: 2,
            title: '详情',
            area: ['800px', '420px'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/tCouponManage/coupon_record/' + TCoupon.seItem.id
        });
        this.layerIndex = index;
    }
};
TCoupon.onShelf = function (e) {
    if (this.check()) {
        var ajax = new $ax(Feng.ctxPath + "/tCouponManage/onShelf", function(data){
            if(data.code==200){
                Feng.success("操作成功!")
                TCoupon.table.refresh();
            }
        },function(data){
            Feng.error("操作失败!" + data.responseJSON.message + "!");
        });
        ajax.set("id",TCoupon.seItem.id)
        ajax.set("type",e)
        ajax.start();
    }
};
/**
 * 查询列表
 */
TCoupon.search = function () {
    var queryData = {};
    queryData['name'] = $("#name").val();
    queryData['type'] = $("#type").val();
    queryData['distributionMethod'] = $("#distributionMethod").val();
    queryData['userPopulation'] = $("#userPopulation").val();
    queryData['status'] = $("#status").val();
    queryData['state'] = $("#state").val();
    TCoupon.table.refresh({query: queryData});
};
/**
 * 重置搜索
 */
TCoupon.resetSearch = function () {
    $("#name").val('');
    $("#type").val('');
    $("#distributionMethod").val('');
    $("#userPopulation").val('');
    $("#status").val('');
    $("#state").val('');
    TCoupon.search();
};
$(function () {
    // console.log("父级"+window.parent.document.getElementById("cityCode").val())
    console.log("父级" + window.parent.document.getElementById("cityCode").value);
    var defaultColunms = TCoupon.initColumn();
    var table = new BSTable(TCoupon.id, "/tCouponManage/list1", defaultColunms);
    table.setPaginationType("client");
    // table.queryParams = function (params) {
    //     // 在这里添加您的自定义参数
    //     params.cityCode = window.parent.document.getElementById("cityCode").value;
    //     params.customParam2 = window.parent.document.getElementById("cityCode").value;
    //     return params;
    // };
    table.queryParams = {'cityCode': window.parent.document.getElementById("cityCode").value,'storeId': window.parent.document.getElementById("storeId").value}
    table.height=400
    TCoupon.table = table.init();
});
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/TCouponEdit.js
New file
@@ -0,0 +1,314 @@
/**
 * 管理初始化
 */
var TCoupon = {
    id: "TCouponTable",    //表格id
    seItem: null,        //选中的条目
    table: null,
    layerIndex: -1
};
var ids = $("#conpund").val();
console.log("==========radio=="+ids)
/**
 * 初始化表格的列
 */
TCoupon.initColumn = function () {
    return [
        {field: 'selectItem', checkbox: true,   formatter: function (value,row) {
                if(ids.indexOf(row.id)!= -1){
                    return {checked:true};
                }}},
        {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'},
        {title: '优惠券名称', field: 'name', visible: true, align: 'center', valign: 'middle'},
        {title: '适用范围', field: 'useScope', visible: true, align: 'center', valign: 'middle',
            formatter: function (value, row, index) {
                return {1: "全国", 2: "指定城市", 3: "指定门店"}[value]
            }
        },
        {title: '优惠券类型', field: 'type', visible: true, align: 'center', valign: 'middle',
            formatter: function (value, row, index) {
                return {1: "满减券", 2: "代金券", 3: "体验券"}[value]
            }},
        {title: '发放方式', field: 'distributionMethod', visible: true, align: 'center', valign: 'middle',
            formatter: function (value, row, index) {
                return {1: "积分购买", 2: "注册赠送", 3: "自动发券"}[value]
            }},
        {title: '有效期', field: 'timeValue', visible: true, align: 'center', valign: 'middle'},
        {title: '用户人群', field: 'userPopulation', visible: true, align: 'center', valign: 'middle',
            formatter: function (value, row, index) {
                return {1: "全部用户", 2: "年度会员", 3: "已有学员用户"}[value]
            }},
        {title: '发放数量', field: 'quantityIssued', visible: true, align: 'center', valign: 'middle'},
        {title: '限领数量', field: 'pickUpQuantity', visible: true, align: 'center', valign: 'middle'},
        {title: '已领数量', field: 'hasPickQty', visible: true, align: 'center', valign: 'middle'},
        {title: '活动状态', field: 'status', visible: true, align: 'center', valign: 'middle',
            formatter: function (value, row, index) {
                return {1: "未开始", 2: "已开始", 3: "已结束"}[value]
            }},
        {title: '可售状态', field: 'state', visible: true, align: 'center', valign: 'middle',
            formatter: function (value, row, index) {
                return {1: "上架", 2: "下架"}[value]
            }},
    ];
};
/**
 * 检查是否选中
 */
TCoupon.check = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length == 0){
        Feng.info("请先选中表格中的某一记录!");
        return false;
    }else{
        TCoupon.seItem = selected[0];
        TCoupon.seItem1 = selected;
        return true;
    }
};
/**
 * 点击添加
 */
TCoupon.openAdd = function () {
    var index = layer.open({
        type: 2,
        title: '添加',
        area: ['100%', '100%'], //宽高
        fix: false, //不固定
        maxmin: true,
        content: Feng.ctxPath + '/tCouponManage/coupon_add'
    });
    this.layerIndex = index;
};
TCoupon.backids = function (i) {
    console.log("aaaaaa"+i)
    if (this.check()) {
        var ids = TCoupon.seItem1.map(function(item) {
            return item.id;
        }).join(",");
        window.parent.document.getElementById("counpons"+i).value = ids;
        window.parent.layer.closeAll();
    }
};
/**
 * 点击编辑
 */
TCoupon.openChange = function () {
    if (this.check()){
        let id = TCoupon.seItem.id
        let name = TCoupon.seItem.name
        let quantityIssued = TCoupon.seItem.quantityIssued
        let pickUpQuantity = TCoupon.seItem.pickUpQuantity
        let illustrate = TCoupon.seItem.illustrate
        let hasPickQty = TCoupon.seItem.hasPickQty
        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' +
                '                                  <label class="form-control"  id="name" >'+name+'</label> '+
                '                          </div>\n' +
                '                        </div>\n'+
            '                        <div class="form-group">\n' +
                    '                            <label class="col-sm-3 control-label">发放数量:</label>\n' +
                '                         <div class="col-sm-9">\n' +
                '                                  <input class="form-control"  id="num" value="'+quantityIssued+'" > '+
                '                          </div>\n' +
                '                        </div>\n' +
                '                        <div class="form-group">\n' +
                '                            <label class="col-sm-3 control-label">限领数量:</label>\n' +
                '                         <div class="col-sm-9">\n' +
                '                                  <input class="form-control"  id="num1" value="'+pickUpQuantity+'" > '+
                '                          </div>\n' +
                '                        </div>\n' +
                '                        <div class="form-group">\n' +
                '                            <label class="col-sm-3 control-label">优惠券说明:</label>\n' +
                '                         <div class="col-sm-9">\n' +
                '                                  <textarea class="form-control"  id="text"  >'+illustrate+'</textarea> '+
                '                          </div>\n' +
                '                        </div>\n' +
                '                       </div>' +
                '                   </div>' +
                '</div>'
            , btn: ['关闭', '保存']
            , btnAlign: 'c' //按钮居中
            , shade:  0.5 //不显示遮罩
            ,load:1
            , yes: function () {
                layer.closeAll();
            },
            btn2:function () {
                let num = $("#num").val()
                if(num==''){
                    Feng.info("请输入发放数量")
                    return false;
                }
                let num1 = $("#num1").val()
                if(num1==''){
                    Feng.info("请输入限领数量")
                    return false;
                }
                let text = $("#text").val()
                if(text==''){
                    Feng.info("请输入优惠券说明")
                    return false;
                }
                if(num<hasPickQty){
                    Feng.info("发放数量不能小于已领取数量")
                    return false;
                }
                var ajax = new $ax(Feng.ctxPath + "/tCouponManage/update", function (data) {
                    if (data.code == 200) {
                        Feng.success("操作成功!");
                        window.location.reload();
                        window.parent.layer.closeAll();
                    } else if(data=="repeat"){
                        window.location.reload();
                        window.parent.layer.closeAll();
                        Feng.error("请勿重复操作");
                    }else {
                        return  Feng.error(data.msg);
                    }
                }, function (data) {
                    Feng.error("操作失败!")
                    window.location.reload();
                    window.parent.layer.closeAll();
                    return   Feng.error("操作失败!");
                });
                ajax.set("id", id);
                ajax.set("num", num);
                ajax.set("num1", num1);
                ajax.set("text", text);
                ajax.start();
                layer.closeAll();
            }
        });
        this.layerIndex = index;
    }
};
/**
 * 上架
 */
/**
 * 下架
 */
TCoupon.offShelf = function () {
};
/**
 * 打开查看详情
 */
TCoupon.openDetail = function () {
    if (this.check()) {
        var index = layer.open({
            type: 2,
            title: '详情',
            area: ['100%', '100%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/tCouponManage/coupon_detail/' + TCoupon.seItem.id
        });
        this.layerIndex = index;
    }
};
/**
 * 打开领取记录
 */
TCoupon.openCollectionRecord = function () {
    if (this.check()) {
        var index = layer.open({
            type: 2,
            title: '详情',
            area: ['800px', '420px'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/tCouponManage/coupon_record/' + TCoupon.seItem.id
        });
        this.layerIndex = index;
    }
};
TCoupon.onShelf = function (e) {
    if (this.check()) {
        var ajax = new $ax(Feng.ctxPath + "/tCouponManage/onShelf", function(data){
            if(data.code==200){
                Feng.success("操作成功!")
                TCoupon.table.refresh();
            }
        },function(data){
            Feng.error("操作失败!" + data.responseJSON.message + "!");
        });
        ajax.set("id",TCoupon.seItem.id)
        ajax.set("type",e)
        ajax.start();
    }
};
/**
 * 查询列表
 */
TCoupon.search = function () {
    var queryData = {};
    queryData['name'] = $("#name").val();
    queryData['type'] = $("#type").val();
    queryData['distributionMethod'] = $("#distributionMethod").val();
    queryData['userPopulation'] = $("#userPopulation").val();
    queryData['status'] = $("#status").val();
    queryData['state'] = $("#state").val();
    TCoupon.table.refresh({query: queryData});
};
/**
 * 重置搜索
 */
TCoupon.resetSearch = function () {
    $("#name").val('');
    $("#type").val('');
    $("#distributionMethod").val('');
    $("#userPopulation").val('');
    $("#status").val('');
    $("#state").val('');
    TCoupon.search();
};
$(function () {
    var defaultColunms = TCoupon.initColumn();
    var table = new BSTable(TCoupon.id, "/tCouponManage/list", defaultColunms);
    table.setPaginationType("client");
    TCoupon.table = table.init();
});
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/classRecord.js
@@ -17,13 +17,29 @@
        {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'},
        {title: '日期', field: 'classDate', align: 'center', valign: 'middle'},
        {title: '报名学员', field: 'registered', align: 'center', valign: 'middle'},
        {title: '实到学员', field: 'actualArrival', align: 'center', valign: 'middle'},
        {title: '未到学员', field: 'nonArrival', align: 'center', valign: 'middle'},
        {title: '实到学员', field: 'actualArrival', align: 'center', valign: 'middle',
            formatter: function (v, row) {
                if (row.absencesNumber === undefined) {
                    return 0;
                } else {
                    return v;
                }
            }
        },
        {title: '未到学员', field: 'nonArrival', align: 'center', valign: 'middle',
            formatter: function (v, row) {
                if (row.absencesNumber === undefined) {
                    return 0;
                } else {
                    return v;
                }
            }
        },
        {title: '课后练习', field: 'courseId', align: 'center', valign: 'middle',
            formatter: function (v) {
                if(typeof v == "undefined"){
                if (typeof v === "undefined") {
                    return '未布置';
                }else{
                } else {
                    return '已布置';
                }
            }
@@ -45,9 +61,9 @@
        {title: '扣除课时', field: 'deductClassHour', align: 'center', valign: 'middle'},
        {title: '取消记录', field: 'absencesNumber', align: 'center', valign: 'middle',
            formatter: function (v) {
                if(typeof v == "undefined"){
                if (typeof v === "undefined") {
                    return '未上传';
                }else{
                } else {
                    return '已上传';
                }
            }
@@ -223,10 +239,11 @@
};
ClassRecord.cancellationRecord = function(){
ClassRecord.cancellationRecord = function(i){
    if(this.check()){
        let htmlStr =
            '<div class="form-horizontal">' +
        '<div class="form-horizontal">' +
            '   <div class="col-sm-11" style="padding: 20px;">' +
            '       <div class="form-group">\n' +
            '           <label class="col-sm-2"></label>'+
@@ -247,7 +264,7 @@
            '       <div class="form-group">\n' +
            '           <label class="col-sm-2"></label>'+
            '           <label class="control-label" style="text-align: left;">扣除课时数:</label>\n' +
            '           <input id="deductClassHour" type="number" min="0" style="background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;">' +
            '           <input id="deductClassHour" value="'+i+'" type="number" min="0" style="background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;">' +
            '       </div>' +
            '       </div>' +
            '</div>';
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js
@@ -82,6 +82,20 @@
    this.layerIndex = index;
};
CoursePackage.addCoursePackage1 = function () {
    let index = layer.open({
        type: 2,
        title: '添加',
        area: ['100%', '100%'], //宽高
        fix: false, //不固定
        maxmin: true,
        content: Feng.ctxPath + '/tStudent/openAddCoursePackage'
    });
    this.layerIndex = index;
};
/**
 * 点击修改按钮时
 * @param userId 管理员id
@@ -201,6 +215,8 @@
CoursePackage.resetSearch = function () {
    $("#provinceCode").val("");
    $("#cityCode").val("");
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackageStudent.js
@@ -22,28 +22,32 @@
        {title: '年龄', field: 'age', align: 'center', valign: 'middle'},
        {title: '性别', field: 'sex', align: 'center', valign: 'middle',
            formatter: function (v) {
                if(v == 1){
                if (v == 1) {
                    return '男';
                }else{
                } else {
                    return '女';
                }
            }
        },
        {title: '到课状态', field: 'signInOrNot', align: 'center', valign: 'middle',
            formatter: function (v) {
                switch (v) {
                    case 0:
                        return '未到';
                    case 1:
                        return '已到';
            formatter: function (v, row) {
                if (row.reservationStatus === 0) {
                    return '请假';
                } else {
                    switch (v) {
                        case 0:
                            return '旷课';
                        case 1:
                            return '已到';
                    }
                }
            }
        },
        {title: '预定状态', field: 'reservationStatus', align: 'center', valign: 'middle',
        {title: '预定状态', field: 'reservationStatus', align: 'center', valign: 'middle',hidden:true,
            formatter: function (v) {
                if(v == 0){
                if (v == 0) {
                    return '已取消';
                }else{
                } else {
                    return '正常';
                }
            }
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage_info.js
@@ -15,6 +15,33 @@
};
CoursePackageInfo.openDia = function (i) {
        let index = layer.open({
            type: 2,
            title: '编辑',
            area: ['80%', '80%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/coursePackage/conpun/'+i
        });
        this.layerIndex = index;
};
CoursePackageInfo.openDia1 = function (i) {
    var ids = $("#counpons"+i).val()
        console.log($("#counpons"+i).val())
    let index = layer.open({
        type: 2,
        title: '编辑',
        area: ['80%', '80%'], //宽高
        fix: false, //不固定
        maxmin: true,
        content: Feng.ctxPath + '/coursePackage/conpun1'+'/'+i+'?conpunids='+ids
    });
    this.layerIndex = index;
};
/**
 * 提交添加用户
 */
@@ -29,7 +56,16 @@
    let siteId = $('#siteId').val();
    let coachId = $('#coachId').val();
    let maxSubscribeNumber = $('#maxSubscribeNumber').val();
    let classStartTime = $('#classStartTime').val();
    let codeTime = $('#codeTime').val();
    // let classStartTime = JSON.stringify($('#classStartTime').val());
    var inputElements = document.querySelectorAll('input[name="classStartTime"]');
    let classStartTime =  JSON.stringify(Array.from(inputElements).map(function(element) {
        return element.value;
    }))
    let classWeeks = '';
    $('input[name="classWeeks"]:checked').each(function (index, e) {
        classWeeks += $(e).val() + ";";
@@ -40,15 +76,17 @@
    let sort = $('#sort').val();
    let validDays = $('#validDays').val();
    let price = [];
    $('#price>.form-group').each(function (i, e) {
    $('#price > .form-group').each(function (i, e) {
        let classHours = $($(e).find(".classNumber_span input[class='classNumber']")[0]).val();
        let cash = $($(e).find(".cash_span input[class='cash']")[0]).val();
        let paiCoin = $($(e).find(".paiCoin_span input[class='paiCoin']")[0]).val();
        let counpons = $($(e).find(".counpons")).val();
        price.push({
            classHours: classHours,
            cashPayment: typeof cash == "undefined" ? 0 : cash,
            playPaiCoin: typeof paiCoin == "undefined" ? 0 : paiCoin
        })
            playPaiCoin: typeof paiCoin == "undefined" ? 0 : paiCoin,
            couponIds: typeof counpons == "undefined" ? 0 : counpons
        });
    });
    if(null == provinceCode || '' == provinceCode){
        Feng.error("所在省不能为空");
@@ -79,6 +117,10 @@
        return
    }
    if(null == maxSubscribeNumber || '' == maxSubscribeNumber){
        Feng.error("最多预约人数不能为空");
        return
    }
    if(null == codeTime || '' == codeTime){
        Feng.error("最多预约人数不能为空");
        return
    }
@@ -120,8 +162,10 @@
        siteId: siteId,
        coachId: coachId,
        maxSubscribeNumber: maxSubscribeNumber,
        classStartTime: classStartTime.split(" - ")[0],
        classEndTime: classStartTime.split(" - ")[1],
        classStartTime: classStartTime,
        codeTime:codeTime,
        // classStartTime: classStartTime.split(" - ")[0],
        // classEndTime: classStartTime.split(" - ")[1],
        classWeeks: classWeeks,
        coverDrawing: coverDrawing,
        detailDrawing: detailDrawing,
@@ -162,6 +206,8 @@
    let siteId = $('#siteId').val();
    let coachId = $('#coachId').val();
    let maxSubscribeNumber = $('#maxSubscribeNumber').val();
    let codeTime = $('#codeTime').val();
    let classStartTime = $('#classStartTime').val();
    let classWeeks = '';
    $('input[name="classWeeks"]:checked').each(function (index, e) {
@@ -172,15 +218,21 @@
    let introduceDrawing = $('#introduceDrawing').val();
    let sort = $('#sort').val();
    let validDays = $('#validDays').val();
    // let counpons = $($(e).find(".counpons")).val();
    let price = [];
    $('#price>.form-group').each(function (i, e) {
        let classHours = $($(e).find(".classNumber_span input[class='classNumber']")[0]).val();
        let cash = $($(e).find(".cash_span input[class='cash']")[0]).val();
        let paiCoin = $($(e).find(".paiCoin_span input[class='paiCoin']")[0]).val();
        let counpons = $($(e).find(".counpons")).val();
        price.push({
            classHours: classHours,
            cashPayment: typeof cash == "undefined" ? 0 : cash,
            playPaiCoin: typeof paiCoin == "undefined" ? 0 : paiCoin
            playPaiCoin: typeof paiCoin == "undefined" ? 0 : paiCoin,
            couponIds: typeof counpons == "undefined" ? 0 : counpons
        })
    });
    if(null == provinceCode || '' == provinceCode){
@@ -213,6 +265,9 @@
    }
    if(null == maxSubscribeNumber || '' == maxSubscribeNumber){
        Feng.error("最多预约人数不能为空");
        return
    }  if(null == codeTime || '' == codeTime){
        Feng.error("扣除课时不能为空");
        return
    }
    if(null == classStartTime || '' == classStartTime){
@@ -254,6 +309,8 @@
        siteId: siteId,
        coachId: coachId,
        maxSubscribeNumber: maxSubscribeNumber,
        codeTime: codeTime,
        classStartTime: classStartTime.split(" - ")[0],
        classEndTime: classStartTime.split(" - ")[1],
        classWeeks: classWeeks,
@@ -344,7 +401,7 @@
            paiCoin = true;
        }
    })
    var i =  $('#price > div').length+1
    let htmlStr = '' +
        '<div class="form-group">\n' +
        '                        <label class="col-sm-3 control-label">*课时数:</label>\n' +
@@ -357,13 +414,19 @@
        if(paiCoin){
            htmlStr += '玩湃币支付:<input class="paiCoin" type="number" min="0" placeholder="请输入金额" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"> 币&nbsp;&nbsp;&nbsp;&nbsp;\n';
        }
        htmlStr += '</span> <i class="fa fa-trash-o" style="font-size:24px" onclick="removePrice(this)"></i>\n' +
        '</div>\n' +
    htmlStr += '<button type="button" class="btn btn-info " onclick="CoursePackageInfo.openDia('+i+')" id="ensure">\n' +
        '    <i class="fa fa-check"></i>&nbsp;优惠卷\n' +
        '</button>';
    htmlStr += '</span> <i class="fa fa-trash-o" style="font-size:24px" onclick="removePrice(this)"></i>\n' +
        '</div>\n' +'<input type="text" class = "counpons" id = "counpons'+i+'" >'+i+
        '</div>';
    $('#price').append(htmlStr);
}
function removePrice(e){
    $(e).parent('div').parent('div').remove();
}
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord.js
@@ -13,7 +13,7 @@
 */
RegistrationRecord.initColumn = function () {
    let columns = [
        {field: 'selectItem', radio: true},
        {field: 'selectItem', checkbox: true},
        {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'},
        {title: '购买用户', field: 'userName', align: 'center', valign: 'middle'},
        {title: '联系方式', field: 'phone', align: 'center', valign: 'middle'},
@@ -45,6 +45,8 @@
        return false;
    } else {
        RegistrationRecord.seItem = selected[0];
        RegistrationRecord.seItem1 = selected;
        return true;
    }
};
@@ -64,6 +66,42 @@
    this.layerIndex = index;
};
RegistrationRecord.holiClass = function () {
    if (this.check()) {
        var ids = RegistrationRecord.seItem1.map(function(item) {
            return item.id;
        }).join(",");
        let index = layer.open({
            type: 2,
            title: '报名信息',
            area: ['50%', '50%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/tStudent/TTT?ids='+ids+'&id='+$('#id').val()
        });
        this.layerIndex = index;
    }
};
RegistrationRecord.transClass = function () {
    if (this.check()) {
        var ids = RegistrationRecord.seItem1.map(function(item) {
            return item.id;
        }).join(",");
        let index = layer.open({
            type: 2,
            title: '报名信息',
            area: ['50%', '50%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/tStudent/trans?ids='+ids+'&id='+$('#id').val()
        });
        this.layerIndex = index;
    }
};
/**
 * 点击修改按钮时
 * @param userId 管理员id
cloud-server-management/src/main/webapp/static/modular/system/tShop/tShopOther.js
@@ -105,6 +105,19 @@
        this.layerIndex = index;
    }
};
TCompetition.openTCompetitionDetail1 = function () {
    if (this.check()) {
        var index = layer.open({
            type: 2,
            title:'编辑',
            area: ['100%', '100%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/tShop/tShop_update1/' + TCompetition.seItem.id
        });
        this.layerIndex = index;
    }
};
TCompetition.info = function () {
    if (this.check()) {
        var index = layer.open({
@@ -243,6 +256,18 @@
        ajax.start();
    }
};
TCompetition.del = function () {
    if (this.check()) {
        var ajax = new $ax(Feng.ctxPath + "/tShop/del", function (data) {
            Feng.success("删除成功!");
            TCompetition.table.refresh();
        }, function (data) {
            Feng.error("删除失败!" + data.responseJSON.message + "!");
        });
        ajax.set("id",this.seItem.id);
        ajax.start();
    }
};
TCompetition.unfreeze = function () {
    if (this.check()) {
        var ajax = new $ax(Feng.ctxPath + "/tShop/unfreeze", function (data) {
@@ -255,6 +280,19 @@
        ajax.start();
    }
};
TCompetition.unfreeze1 = function (e) {
    if (this.check()) {
        var ajax = new $ax(Feng.ctxPath + "/tShop/unfreeze1", function (data) {
            Feng.success("操作成功!");
            TCompetition.table.refresh();
        }, function (data) {
            Feng.error("操作失败!" + data.responseJSON.message + "!");
        });
        ajax.set("id",this.seItem.id);
        ajax.set("type",e);
        ajax.start();
    }
};
TCompetition.reload = function () {
    if (this.check()) {
        let id = this.seItem.id
cloud-server-management/src/main/webapp/static/modular/system/tShop/tShopOtherOne.js
@@ -68,7 +68,7 @@
TCompetition.delete1= function (e) {
    console.log(e)
    var ajax = new $ax(Feng.ctxPath + "/tShop/deleteOne", function (data) {
    var ajax = new $ax(Feng.ctxPath + "/tShop/deleteTwo", function (data) {
        Feng.success("删除成功!");
        TCompetition.table.refresh();
    }, function (data) {
@@ -719,6 +719,9 @@
    ajax.set("id",$("#id").val());
    ajax.start();
}
TCompetition.close = function() {
    parent.layer.close(window.parent.TCompetition.layerIndex);
}
cloud-server-management/src/main/webapp/static/modular/system/tShop/tShopOtherTwo.js
New file
@@ -0,0 +1,812 @@
/**
 * 车辆管理管理初始化
 */
var TCompetition = {
    id: "TCompetitionOtherTable",    //表格id
    seItem: null,        //选中的条目
    table: null,
    layerIndex: -1
};
var language =1
var role =1
/**
 * 初始化表格的列
 */
TCompetition.initColumn = function () {
    return [
        {field: 'selectItem', radio: true},
        {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle',
        },
        {title: '图片', field: 'url', visible: role==1?true:false, align: 'center', valign: 'middle',
        },
        {title: '跳转模块', field: 'name', visible: role==1?true:false, align: 'center', valign: 'middle',
        },
        {title: '跳转页面', field: 'page', visible: role==1?true:false, align: 'center', valign: 'middle',
        },
        {title: '排序', field: 'sort', visible: role==1?true:false, align: 'center', valign: 'middle',
        },
        {title: '操作', visible: role==1?true:false, align: 'center', valign: 'middle',
            formatter:function (value,row) {
                return '<a href="javascript:void(0);" style="color: blue" onclick="TCompetition.delete1(' + row.id +')">删除 </a>  <a href="javascript:void(0);" style="color: blue" onclick="TCompetition.openTCompetitionDetail(' + row.id +')">编辑</a>'
            }
        },
    ];
};
function currentTime(timestamp){
    var time = timestamp + '';
    if(time.length != 13){
        timestamp = timestamp * 1000;
    }
    var date = new Date(timestamp);;
    var Y = date.getFullYear() + '-';
    var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
    var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' ';
    var h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':';
    var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':';
    var s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds());
    var strDate = Y + M + D + h + m + s;
    return strDate
}
function currentTime1(timestamp){
    var time = timestamp + '';
    if(time.length != 13){
        timestamp = timestamp * 1000;
    }
    var date = new Date(timestamp);;
    var Y = date.getFullYear() + '-';
    var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
    var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' ';
    var h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':';
    var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':';
    var s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds());
    var strDate = Y + M + D ;
    return strDate
}
TCompetition.delete1= function (e) {
    console.log(e)
    var ajax = new $ax(Feng.ctxPath + "/tShop/deleteTwo", function (data) {
        Feng.success("删除成功!");
        TCompetition.table.refresh();
    }, function (data) {
        Feng.error("删除失败!" + data.responseJSON.message + "!");
    });
    ajax.set("id",e);
    ajax.start();
}
/**
 * 检查是否选中
 */
TCompetition.check = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length == 0){
            Feng.info("请先选中表格中的某一记录!");
        return false;
    }else{
        TCompetition.seItem = selected[0];
        return true;
    }
};
/**
 * 点击添加车辆管理
 */
TCompetition.openAdd = function () {
    var index = layer.open({
        type: 2,
        title: '添加内容',
        area: ['100%', '100%'], //宽高
        fix: false, //不固定
        maxmin: true,
        content: Feng.ctxPath + '/tShop/tShop_add_two?id='+$("#id").val()
    });
    this.layerIndex = index;
};
/**
 * 打开查看车辆管理详情
 */
TCompetition.openTCompetitionDetail = function (e) {
        var index = layer.open({
            type: 2,
            title:'编辑',
            area: ['100%', '100%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/tShop/tShop_update_one1/' + e
        });
        this.layerIndex = index;
};
TCompetition.info = function () {
    if (this.check()) {
        var index = layer.open({
            type: 2,
            title:'详情',
            area: ['100%', '100%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/tShop/tShop_info/' + TCompetition.seItem.id
        });
        this.layerIndex = index;
    }
};
TCompetition.gift = function () {
    if (this.check()) {
        var index = layer.open({
            type: 2,
            title:'免费福利',
            area: ['100%', '100%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/tShop/tShop_gift/' + TCompetition.seItem.id
        });
        this.layerIndex = index;
    }
};
TCompetition.indexSet = function () {
    if (this.check()) {
        var index = layer.open({
            type: 2,
            title:'首页设置',
            area: ['100%', '100%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/tShop/tShop_indexSet/' + TCompetition.seItem.id
        });
        this.layerIndex = index;
    }
};
/**
 * 删除车辆管理
 */
TCompetition.delete = function () {
    if (this.check()) {
        var nickname = TCompetition.seItem.carLicensePlate;
        if (nickname == "" || nickname == null || nickname == undefined){
                nickname = "该车辆";
        }else{
            nickname = "【"+nickname+"】";
        }
        swal({
           title: language==1?"您是否确认删除" + nickname + "?":(language==2?"Are you sure to delete the" + nickname + "?":"Apakah Anda pasti akan menghapus" + nickname + "?"),
            text: language==1?"请谨慎操作!":(language==2?' Please operate with caution!':'Harap beroperasi dengan hati -hati!'),
            type: "warning",
            showCancelButton: true,
            confirmButtonColor: "#DD6B55",
            confirmButtonText: language==1?"删除":(language==2?'Delete':'Hapus'),
            closeOnConfirm: true
        }, function () {
            var ajax = new $ax(Feng.ctxPath + "/TCompetition/delete", function (data) {
                  if(language==1){
                    swal("删除成功", "您已经成功删除了" + nickname + "。", "success");
                }else if(language==2){
                    swal("Delete succeeded!", "You have successfully deleted it" + nickname + "。", "success");
                }else {
                    swal("Hapus berhasil!", "Anda berhasil menghapus" + nickname + "。", "success");
                }
                TCompetition.table.refresh();
            }, function (data) {
                if(language==1){
                    swal("删除失败", data.responseJSON.message + "!", "warning");
                }else if(language==2){
                    swal("Failed to delete", data.responseJSON.message + "!", "warning");
                }else {
                    swal("Hapus Gagal", data.responseJSON.message + "!", "warning");
                }
            });
            ajax.set("TCompetitionId",TCompetition.seItem.id);
            ajax.start();
        });
    }
};
TCompetition.oneChange = function (e) {
    console.log(111)
    var oneId=$(e).val();
    var ajax = new $ax(Feng.ctxPath + "/tCompetition/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();
}
TCompetition.oneChangeNext = function (e) {
    var oneId=$(e).val();
    var ajax = new $ax(Feng.ctxPath + "/tCompetition/oneChangeNext", 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.id+"'>"+v.name+"</option>";
            });
            $("#account").empty().append(content);
        }
    });
    ajax.set("oneId",oneId);
    ajax.start();
}
TCompetition.freeze = function () {
    if (this.check()) {
        var ajax = new $ax(Feng.ctxPath + "/tShop/freeze", function (data) {
            Feng.success("冻结成功!");
            TCompetition.table.refresh();
        }, function (data) {
            Feng.error("冻结失败!" + data.responseJSON.message + "!");
        });
        ajax.set("id",this.seItem.id);
        ajax.start();
    }
};
TCompetition.unfreeze = function () {
    if (this.check()) {
        var ajax = new $ax(Feng.ctxPath + "/tShop/unfreeze", function (data) {
            Feng.success("解冻成功!");
            TCompetition.table.refresh();
        }, function (data) {
            Feng.error("解冻失败!" + data.responseJSON.message + "!");
        });
        ajax.set("id",this.seItem.id);
        ajax.start();
    }
};
TCompetition.reload = function () {
    if (this.check()) {
        let id = this.seItem.id
        var operation = function(){
            var ajax = new $ax(Feng.ctxPath + "/tCity/pwd", function (data) {
                Feng.success("重置成功!");
                TCompetition.table.refresh();
            }, function (data) {
                Feng.error("重置失败!" + data.responseJSON.message + "!");
            });
            ajax.set("id",id);
            ajax.start();
        }
        Feng.confirm("确认重置密码?重置后密码为:a123456", operation);
    }
};
TCompetition.saveAllImg = function (e) {
    var id = $("#id").val()
    var px1 = $("#px1").val()
    var px2 = $("#px2").val()
    var px3 = $("#px3").val()
    var px4 = $("#px4").val()
    var px5 = $("#px5").val()
    var px6 = $("#px6").val()
    var px7 = $("#px7").val()
    var px8 = $("#px8").val()
    var c1 = $("#c1").val()
    var c2 = $("#c2").val()
    var c3 = $("#c3").val()
    var c4 = $("#c4").val()
    var c5 = $("#c5").val()
    var c6 = $("#c6").val()
    var c7 = $("#7").val()
    var c8 = $("#c8").val()
    var r1 =  document.querySelector('input[name="r1"]').checked;
    var r2 =  document.querySelector('input[name="r2"]').checked;
    var r3 =  document.querySelector('input[name="r3"]').checked;
    var r4 =  document.querySelector('input[name="r4"]').checked;
    var r5 =  document.querySelector('input[name="r5"]').checked;
    var r6 =  document.querySelector('input[name="r6"]').checked;
    var r7 =  document.querySelector('input[name="r7"]').checked;
    var r8 =  document.querySelector('input[name="r8"]').checked;
    if(r1){
        r1 =1
    }else{
        r1=0
    }
    if(r2){
        r2 =1
    }else{
        r2=0
    }
    if(r3){
        r3 =1
    }else{
        r3=0
    }
    if(r4){
        r4 =1
    }else{
        r4=0
    }
    if(r5){
        r5 =1
    }else{
        r5=0
    }
    if(r6){
        r6 =1
    }else{
        r6=0
    }
    if(r7){
        r7 =1
    }else{
        r7=0
    }
    if(r8){
        r8 =1
    }else{
        r8=0
    }
    var ajax = new $ax(Feng.ctxPath + "/tShop/saveImgAll", function(data){
        if(data.code == 200){
            Feng.success("保存成功!");
        }else{
            Feng.error(data.msg);
        }
    },function(data){
        Feng.error("保存失败!" + data.responseJSON.message + "!");
    });
    ajax.set("id",id);
    ajax.set("px1",px1);
    ajax.set("px2",px2);
    ajax.set("px3",px3);
    ajax.set("px4",px4);
    ajax.set("px5",px5);
    ajax.set("px6",px6);
    ajax.set("px7",px7);
    ajax.set("px8",px8);
    ajax.set("c1",c1);
    ajax.set("c2",c2);
    ajax.set("c3",c3);
    ajax.set("c4",c4);
    ajax.set("c5",c5);
    ajax.set("c6",c6);
    ajax.set("c7",c7);
    ajax.set("c8",c8);
    ajax.set("r1",r1);
    ajax.set("r2",r2);
    ajax.set("r3",r3);
    ajax.set("r4",r4);
    ajax.set("r5",r5);
    ajax.set("r6",r6);
    ajax.set("r7",r7);
    ajax.set("r8",r8);
    ajax.start();
}
TCompetition.carInsurance = function () {
    if (this.check()) {
        var index = layer.open({
            type: 2,
            title: language==1?'车辆保险':(language==2?'Vehicle insurance':'Asuransi kendaraan'),
            area: ['100%', '100%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/TCompetition/carInsurance?carId=' + TCompetition.seItem.id
        });
        this.layerIndex = index;
    }
};
/**
 * 查询车辆管理列表
 */
TCompetition.search = function () {
    var queryData = {};
    queryData['provinceCode'] = $("#pCode").val();
    queryData['cityCode'] = $("#cCode").val();
    queryData['name'] = $("#name").val();
    queryData['phone'] = $("#phone").val();
    queryData['shopName'] = $("#shopName").val();
    TCompetition.table.refresh({query: queryData});
};
TCompetition.resetSearch = function () {
    $("#pCode").val("");
    $("#cCode").val("");
    $("#name").val("");
    $("#phone").val("");
    $("#shopName").val("");
    TCompetition.search();
};
$(function () {
    var defaultColunms = TCompetition.initColumn();
    // 初始化图片上传
    var carPhoto = new $WebUpload("url");
    carPhoto.setUploadBarId("progressBar");
    carPhoto.init();
    var carPhoto = new $WebUpload("c2");
    carPhoto.setUploadBarId("progressBar");
    carPhoto.init();
    var carPhoto = new $WebUpload("c3");
    carPhoto.setUploadBarId("progressBar");
    carPhoto.init();
    var carPhoto = new $WebUpload("c4");
    carPhoto.setUploadBarId("progressBar");
    carPhoto.init();
    var carPhoto = new $WebUpload("c5");
    carPhoto.setUploadBarId("progressBar");
    carPhoto.init();
    var carPhoto = new $WebUpload("c6");
    carPhoto.setUploadBarId("progressBar");
    carPhoto.init();
    var carPhoto = new $WebUpload("c7");
    carPhoto.setUploadBarId("progressBar");
    carPhoto.init();
    var carPhoto = new $WebUpload("c8");
    carPhoto.setUploadBarId("progressBar");
    carPhoto.init();
    var carPhoto = new $WebUpload("img");
    carPhoto.setUploadBarId("progressBar");
    carPhoto.init();
    var drivingLicensePhoto = new $WebUpload("drivingLicensePhoto");
    drivingLicensePhoto.setUploadBarId("progressBar");
    drivingLicensePhoto.init();
    var table = new BSTable(TCompetition.id, "/tShop/listTwo1?id="+$("#id").val(), defaultColunms);
    table.setPaginationType("server");
    TCompetition.table = table.init();
});
/**
 * 下载模板
 */
TCompetition.uploadCarModel = function () {
    window.location.href = Feng.ctxPath + "/TCompetition/uploadCarModel";
}
var agreement = function(){
    this.init = function(){
        //模拟上传excel  
        $("#uploadEventBtn").unbind("click").bind("click",function(){
            $("#uploadEventFile").click();
        });
    };
}
/**
 * 导入合同
 */
TCompetition.exporTCompetition = function () {
    var uploadEventFile = $("#uploadEventFile").val();
    if(uploadEventFile == ''){
        if(language==1){
            Feng.info("请选择Excel,再上传");
        }else if(language==2){
            Feng.info("Please select Excel and upload");
        }else {
            Feng.info("Silakan pilih Excel dan upload");
        }
    }else if(uploadEventFile.lastIndexOf(".xls")<0){//可判断以.xls和.xlsx结尾的excel  
        if(language==1){
            Feng.info("只能上传Excel文件");
        }else if(language==2){
            Feng.info("Only Excel files can be uploaded");
        }else {
            Feng.info("Hanya berkas Excel yang dapat diunggah");
        }
    }else{
        var url = Feng.ctxPath + '/TCompetition/exporTCompetition';
        var file = document.querySelector('input[name=file]').files[0];
        var reader = new FileReader();
        if (file) {
            var formData = new FormData();
            formData.append("myfile", file);
            this.sendAjaxRequest(url, 'POST', formData);
        }
    }
}
TCompetition.sendAjaxRequest = function(url,type,data){
    $.ajax({
        url : url,
        type : type,
        data : data,
        success : function(result) {
            if(result.code==500) {
                Feng.info(result.message);
            }else {
                if(language==1){
                    Feng.success("导入成功!");
                }else if(language==2){
                    Feng.success("SUCCESSFUL IMPORT!");
                }else {
                    Feng.success("Import berhasil!");
                }
            }
            TCompetition.table.refresh();
        },
        error : function() {
            if(language==1){
                Feng.error("excel上传失败!");
            }else if(language==2){
                Feng.error("Uploading excel Fails. Procedure!");
            }else {
                Feng.error("Gagal mengunggah excel!");
            }
        },
        cache : false,
        contentType : false,
        processData : false
    });
};
var agreement;
$(function(){
    agreement = new agreement();
    agreement.init();
});
/**
 * 导出车辆操作
 */
TCompetition.ouTCompetition = function () {
    var operation = function() {
        window.location.href = Feng.ctxPath + "/TCompetition/ouTCompetition";
    };
    if(language==1){
        Feng.confirm("是否确认导出车辆信息?", operation);
    }else if(language==2){
        Feng.confirm("Are you sure to export vehicle information?", operation);
    }else {
        Feng.confirm("Apakah Anda pasti akan mengekspor informasi kendaraan?", operation);
    }
}
TCompetition.addSubmit = function() {
    let url = $("#url").val()
    if(url==''){
        Feng.info("请上传图片")
        return;
    }
    let name = $("#name").val()
    console.log(name)
    if(name=='' || name ==null){
        Feng.info("请选择跳转模块")
        return;
    }
    let page = $("#page").val()
    if(page=='' && name !='不跳转'){
        Feng.info("请选择跳转页面")
        return;
    }
    let type = $("#type").val()
    if(type==''  && name !='不跳转'){
    }
    let turnId = $("#turnId").val()
    if( type =='11' || type=='13'|| type=='16'|| type=='19'|| type=='21'|| type=='40'|| type=='43'){
        Feng.info("请输入跳转ID")
        return;
    }
    let sort = $("#sort").val()
    if(sort==''){
        Feng.info("请输入排序")
        return;
    }
    //提交信息
    var ajax = new $ax(Feng.ctxPath + "/tShop/addConfigOne", function(data){
        if(data.code == 200){
            Feng.success("添加成功!");
            window.parent.TCompetition.table.refresh();
            parent.layer.close(window.parent.TCompetition.layerIndex);
        }else{
            Feng.error(data.msg);
        }
    },function(data){
        Feng.error("添加失败!" + data.responseJSON.message + "!");
    });
    ajax.set("url",url);
    ajax.set("name",name);
    ajax.set("page",page);
    ajax.set("type",type);
    ajax.set("turnId",turnId);
    ajax.set("sort",sort);
    ajax.start();
}
TCompetition.addSubmit1 = function() {
    let url = $("#url").val()
    if(url==''){
    }
    let name = $("#name").val()
    console.log(name)
    if(name=='' || name ==null){
        Feng.info("请选择跳转模块")
        return;
    }
    let page = $("#page").val()
    if(page=='' && name !='不跳转'){
        Feng.info("请选择跳转页面")
        return;
    }
    let type = $("#type").val()
    if(type==''  && name !='不跳转'){
    }
    let turnId = $("#turnId").val()
    if( type =='11' || type=='13'|| type=='16'|| type=='19'|| type=='21'|| type=='40'|| type=='43'){
        if(turnId==""){
            Feng.info("请输入跳转ID")
            return;
        }
    }
    let sort = $("#sort").val()
    if(sort==''){
        Feng.info("请输入排序")
        return;
    }
    //提交信息
    var ajax = new $ax(Feng.ctxPath + "/tShop/updateConfigOne", function(data){
        if(data.code == 200){
            Feng.success("添加成功!");
            window.parent.TCompetition.table.refresh();
            parent.layer.close(window.parent.TCompetition.layerIndex);
        }else{
            Feng.error(data.msg);
        }
    },function(data){
        Feng.error("添加失败!" + data.responseJSON.message + "!");
    });
    ajax.set("url",url);
    ajax.set("name",name);
    ajax.set("page",page);
    ajax.set("type",type);
    ajax.set("turnId",turnId);
    ajax.set("sort",sort);
    ajax.set("id",$("#id").val());
    ajax.start();
}
TCompetition.addSubmit2 = function() {
    let name = $("#name").val()
    if(name=='' || name ==null){
        Feng.info("请填写板块名称")
        return;
    }
    //提交信息
    var ajax = new $ax(Feng.ctxPath + "/tShop/addConfig", function(data){
        if(data.code == 200){
            Feng.success("添加成功!");
            window.parent.TCompetition.table.refresh();
            parent.layer.close(window.parent.TCompetition.layerIndex);
        }else{
            Feng.error(data.msg);
        }
    },function(data){
        Feng.error("添加失败!" + data.responseJSON.message + "!");
    });
    ajax.set("name",name);
    ajax.set("id",$("#id").val());
    ajax.start();
}
TCompetition.addSubmit3 = function() {
    let url = $("#url").val()
    if(url==''){
    }
    let name = $("#name").val()
    console.log(name)
    if(name=='' || name ==null){
        Feng.info("请选择跳转模块")
        return;
    }
    let page = $("#page").val()
    if(page=='' && name !='不跳转'){
        Feng.info("请选择跳转页面")
        return;
    }
    let type = $("#type").val()
    if(type==''  && name !='不跳转'){
    }
    let turnId = $("#turnId").val()
    if( type =='11' || type=='13'|| type=='16'|| type=='19'|| type=='21'|| type=='40'|| type=='43'){
        if(turnId==""){
            Feng.info("请输入跳转ID")
            return;
        }
    }
    let sort = $("#sort").val()
    if(sort==''){
        Feng.info("请输入排序")
        return;
    }
    //提交信息
    var ajax = new $ax(Feng.ctxPath + "/tShop/updateConfigOne3", function(data){
        if(data.code == 200){
            Feng.success("添加成功!");
            window.parent.TCompetition.table.refresh();
            parent.layer.close(window.parent.TCompetition.layerIndex);
        }else{
            Feng.error(data.msg);
        }
    },function(data){
        Feng.error("添加失败!" + data.responseJSON.message + "!");
    });
    ajax.set("url",url);
    ajax.set("name",name);
    ajax.set("page",page);
    ajax.set("type",type);
    ajax.set("turnId",turnId);
    ajax.set("sort",sort);
    ajax.set("id",$("#id").val());
    ajax.start();
}
TCompetition.addSubmit4 = function() {
    let name = $("#name").val()
    if(name=='' || name ==null){
        Feng.info("请填写板块名称")
        return;
    }
    //提交信息
    var ajax = new $ax(Feng.ctxPath + "/tShop/addConfig1", function(data){
        if(data.code == 200){
            Feng.success("添加成功!");
            window.parent.TCompetition.table.refresh();
            parent.layer.close(window.parent.TCompetition.layerIndex);
        }else{
            Feng.error(data.msg);
        }
    },function(data){
        Feng.error("添加失败!" + data.responseJSON.message + "!");
    });
    ajax.set("name",name);
    ajax.set("id",$("#id").val());
    ajax.start();
}
TCompetition.close = function() {
    parent.layer.close(window.parent.TCompetition.layerIndex);
}
cloud-server-management/src/main/webapp/static/modular/system/tShop/tShop_info.js
@@ -463,11 +463,19 @@
    let img = $("#img").val()
    let imgOne = $("#imgOne").val()
    if(imgOne==''){
    var goodImgs = this.goodsPicArray;
    if(goodImgs.length==0){
        Feng.info("请上传实景图")
        return;
    }
    var imgOne ="";
    for (let i = 0; i <goodImgs.length; i++) {
        if(i==goodImgs.length-1){
            imgOne += (goodImgs[i].response)
        }else {
            imgOne+=(goodImgs[i].response+",")
        }
    }
    //提交信息
    var ajax = new $ax(Feng.ctxPath + "/tShop/update", function(data){
@@ -502,7 +510,12 @@
    ajax.set("userPhone",userPhone);
    ajax.set("coverDrawing",img);
    ajax.set("realPicture",imgOne);
    ajax.set("lat",$("#latitude").val());
    ajax.set("lon",$("#longitude").val());
    ajax.set("id",$("#id").val());
    ajax.set("ids",$("#ids").val());
    ajax.set("type",OBJradio);
    ajax.set("yyId",$("#account").val());
    ajax.start();
}
@@ -711,3 +724,47 @@
        $("#kcModelDiv").hide();
    }
}
TCarInfoDlg.oneChange1 = function (e) {
    console.log(111)
    var oneId=$(e).val();
    var ajax = new $ax(Feng.ctxPath + "/tShop/onChange1", 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.id+"'>"+v.name+"</option>";
            });
            $("#pCode").empty().append(content);
        }
    });
    ajax.set("oneId",oneId);
    ajax.start();
}
TCarInfoDlg.oneChange2 = function (e) {
    console.log(111)
    var oneId=$(e).val();
    var ajax = new $ax(Feng.ctxPath + "/tShop/onChange2", 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.id+"'>"+v.name+"</option>";
            });
            $("#cCode").empty().append(content);
        }
    });
    ajax.set("oneId",oneId);
    ajax.start();
}
cloud-server-management/src/main/webapp/static/modular/system/tShopEvaluation/tShop_info.js
@@ -122,6 +122,7 @@
    ajax.set("oneId",oneId);
    ajax.start();
}
TCarInfoDlg.oneChangeNext = function (e) {
    var oneId=$(e).val();
    var ajax = new $ax(Feng.ctxPath + "/tShop/oneChangeNext", function(data){
cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js
@@ -159,6 +159,29 @@
    ajax.set("province",oneId);
    ajax.start();
};
TSite.oneChangeYys = function(e){
    var oneId=$(e).val();
    var SelectValue="";
    var getSelectValueMenbers = $("input[name='pt']:checked").each(function(j) {
        if (j >= 0) {
            SelectValue += $(this).val()
        }
    });
    if(SelectValue=='0' ){
        oneId=0
    }
    var ajax = new $ax(Feng.ctxPath + "/tSite/getChangeOne", function(data){
        if(data!=null){
            var content='<option value="">选择门店</option>';
            $.each(data, function(k,v) {
                content += "<option value='"+v.id+"'>"+v.name+"</option>";
            });
            $("#store").empty().append(content);
        }
    });
    ajax.set("oneId",oneId);
    ajax.start();
};
// 场地管理首页 选择对应的省市
// 传1是场地管理首页 传2是场地管理添加页面
TSite.oneChange = function (e) {
@@ -357,7 +380,14 @@
        managementPlan:"",
        operatorId:"",
        typeName:"",
        nextName:""
        nextName:"",
        ishalf:"",
        cashPriceOne:"",
        playPaiCoinOne:"",
        halfName:"",
        introduce:"",
        imgs:"",
        ids:""
    };
    data.province            = $("#pCode").val()
    data.city                = $("#cCode").val()
@@ -399,7 +429,7 @@
    let num24 = $('input[name="name1"]');
    var nextName="";
    for (let i = 0; i < num24.length; i++) {
        if(console.log($(num24[i]).val()=='')){
        if($(num24[i]).val()==''){
            Feng.info("请填写场地名称")
            return;
        }
@@ -409,15 +439,74 @@
            nextName += $(num24[i]).val()+","
        }
    }
    console.log(nextName)
    data.nextName= nextName;
    var ishalf= $("input[name='ishalf']:checked").val();
    data.ishalf= ishalf;
    var halfName="";
    if(ishalf==1){
        let cashPriceOne = $("#cashPriceOne").val()
        if(cashPriceOne=='' ){
            Feng.info("请填写现金价格")
            return;
        }
        data.cashPriceOne= cashPriceOne;
    if($("#account").val()=='' ){
        Feng.info("请选择账号")
        let playPaiCoinOne = $("#playPaiCoinOne").val()
        if(playPaiCoinOne=='' ){
            Feng.info("请填写玩湃币价格")
            return;
        }
        data.playPaiCoinOne= playPaiCoinOne;
        let num2 = $('input[name="name2"]');
        for (let i = 0; i < num2.length; i++) {
            if($(num2[i]).val()==''){
                Feng.info("请填写半场名称")
                return;
            }
            if(i==num2.length-1){
                halfName += $(num2[i]).val()
            }else {
                halfName += $(num2[i]).val()+","
            }
        }
    }
    data.halfName= halfName;
    data.ids= $("#ids").val();
    let introduce  = TSite.editor.getContent();
    console.log(introduce)
    if(introduce==""){
        Feng.info("请输入公告内容")
        return;
    }
    data.introduce= introduce;
    var goodImgs = this.goodsPicArray;
    if(goodImgs.length==0){
        Feng.info("请上传实景图")
        return;
    }
    var imgOne ="";
    for (let i = 0; i <goodImgs.length; i++) {
        if(i==goodImgs.length-1){
            imgOne += (goodImgs[i].response)
        }else {
            imgOne+=(goodImgs[i].response+",")
        }
    }
    data.imgs = imgOne
    if($("#store").val()=='' ){
        Feng.info("请选择门店")
        return;
@@ -463,83 +552,83 @@
    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) {
    //                 window.parent.TSite.table.refresh();
    //                 TSite.close();
    //                 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;
    //     }
    // });
    $.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) {
                    window.parent.TSite.table.refresh();
                    TSite.close();
                    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;
        }
    });
};
TSite.search = function () {
@@ -574,24 +663,24 @@
    //初始化编辑器
    TSite.editor = UE.getEditor('editor');
    // 限制分钟选项为 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 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();
cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js
@@ -5,7 +5,8 @@
var TSiteInfo = {
    layerIndex: -1,
    validateFields: {
    }
    },
    goodsPicArray:[],
};
/**
@@ -193,7 +194,17 @@
        insuranceEndTime:"",
        name:"",
        insuranceImg:"",
        managementPlan:""
        managementPlan:"",
        operatorId:"",
        typeName:"",
        nextName:"",
        ishalf:"",
        cashPriceOne:"",
        playPaiCoinOne:"",
        halfName:"",
        introduce:"",
        imgs:"",
        ids:""
    };
    data.province            = $("#pCode").val()
    data.id            = $("#id").val()
@@ -214,18 +225,113 @@
    var eh =data.appointmentEndTime.split(':')[0];
    var em =data.appointmentEndTime.split(':')[1];
    if($("#pCode").val()==''){
        Feng.info("请选择省")
    var SelectValue="";
    var getSelectValueMenbers = $("input[name='pt']:checked").each(function(j) {
        if (j >= 0) {
            SelectValue += $(this).val()
        }
    });
    if(SelectValue==''){
        let yys = $("#yys").val()
        if(yys==""){
            Feng.info("请选择运营商")
            return;
        }
        SelectValue= yys
    }
    data.operatorId= SelectValue;
    let num24 = $('input[name="name1"]');
    var nextName="";
    for (let i = 0; i < num24.length; i++) {
        if($(num24[i]).val()==''){
            Feng.info("请填写场地名称")
            return;
        }
        if(i==num24.length-1){
            nextName += $(num24[i]).val()
        }else {
            nextName += $(num24[i]).val()+","
        }
    }
    data.nextName= nextName;
    var ishalf= $("input[name='ishalf']:checked").val();
    data.ishalf= ishalf;
    var halfName="";
    if(ishalf==1){
        let cashPriceOne = $("#cashPriceOne").val()
        if(cashPriceOne=='' ){
            Feng.info("请填写现金价格")
            return;
        }
        data.cashPriceOne= cashPriceOne;
        let playPaiCoinOne = $("#playPaiCoinOne").val()
        if(playPaiCoinOne=='' ){
            Feng.info("请填写玩湃币价格")
            return;
        }
        data.playPaiCoinOne= playPaiCoinOne;
        let num2 = $('input[name="name2"]');
        for (let i = 0; i < num2.length; i++) {
            if($(num2[i]).val()==''){
                Feng.info("请填写半场名称")
                return;
            }
            if(i==num2.length-1){
                halfName += $(num2[i]).val()
            }else {
                halfName += $(num2[i]).val()+","
            }
        }
    }
    data.halfName= halfName;
    data.ids= $("#ids").val();
    let introduce  = TSiteInfo.editor.getContent();
    console.log(introduce)
    if(introduce==""){
        Feng.info("请输入公告内容")
        return;
    }
    if($("#cCode").val()==''){
        Feng.info("请选择市")
    data.introduce= introduce;
    var goodImgs = TSiteInfo.goodsPicArray;
    if(goodImgs.length==0){
        Feng.info("请上传实景图")
        return;
    }
    if($("#account").val()=='' ){
        Feng.info("请选择账号")
        return;
    var imgOne ="";
    console.log(goodImgs)
    console.log(goodImgs.length)
    for (let i = 0; i <goodImgs.length; i++) {
        console.log(goodImgs[i].response,11)
        if(i==goodImgs.length-1){
            imgOne += (goodImgs[i].response)
        }else {
            imgOne+=(goodImgs[i].response+",")
        }
    }
    console.log(imgOne)
    data.imgs = imgOne
    if($("#store").val()=='' ){
        Feng.info("请选择门店")
        return;
@@ -351,6 +457,30 @@
    });
};
TSiteInfo.oneChangeYys = function(e){
    var oneId=$(e).val();
    var SelectValue="";
    var getSelectValueMenbers = $("input[name='pt']:checked").each(function(j) {
        if (j >= 0) {
            SelectValue += $(this).val()
        }
    });
    if(SelectValue=='0' ){
        oneId=0
    }
    var ajax = new $ax(Feng.ctxPath + "/tSite/getChangeOne", function(data){
        if(data!=null){
            var content='<option value="">选择门店</option>';
            $.each(data, function(k,v) {
                content += "<option value='"+v.id+"'>"+v.name+"</option>";
            });
            $("#store").empty().append(content);
        }
    });
    ajax.set("oneId",oneId);
    ajax.start();
};
/**
 * 关闭此对话框
 */
@@ -361,6 +491,7 @@
    $('#upFile').click();
}
$(function () {
    TSiteInfo.editor = UE.getEditor('editor');
    // 限制分钟选项为 0 和 30
    var timeInputs = document.querySelectorAll('input[type="time"]');
    timeInputs.forEach(function(input) {
cloud-server-management/src/main/webapp/static/modular/system/tStudent/htmlToPdf.js
New file
@@ -0,0 +1,66 @@
// 页面导出为pdf格式
import html2Canvas from 'html2canvas';
import jsPDF from 'jspdf';
const htmlToPdf = {
  getPdf(title, loading) {
    return html2Canvas(document.querySelector('#pdfDom'), {
      allowTaint: false,
      taintTest: false,
      logging: false,
      useCORS: true,
      dpi: window.devicePixelRatio * 4, //将分辨率提高到特定的DPI 提高四倍
      scale: 4, //按比例增加分辨率
    }).then((canvas) => {
      var pdf = new jsPDF('p', 'mm', 'a4'); //A4纸,纵向
      var ctx = canvas.getContext('2d'),
        a4w = 190,
        a4h = 272, //A4大小,210mm x 297mm,四边各保留10mm的边距,显示区域190x277
        // imgHeight = Math.floor((a4h * canvas.width) / a4w), //按A4显示比例换算一页图像的像素高度
        imgHeight = canvas.height, //按A4显示比例换算一页图像的像素高度
        renderedHeight = 0;
      while (renderedHeight < canvas.height) {
        var page = document.createElement('canvas');
        page.width = canvas.width;
        page.height = Math.min(imgHeight, canvas.height - renderedHeight); //可能内容不足一页
        //用getImageData剪裁指定区域,并画到前面创建的canvas对象中
        page
          .getContext('2d')
          .putImageData(
            ctx.getImageData(
              0,
              renderedHeight,
              canvas.width,
              Math.min(imgHeight, canvas.height - renderedHeight),
            ),
            0,
            0,
          );
        pdf.addImage(
          page.toDataURL('image/jpeg', 1.0),
          'JPEG',
          10,
          10,
          a4w,
          Math.min(a4h, (a4w * page.height) / page.width),
        ); //添加图像到页面,保留10mm边距
        renderedHeight += imgHeight;
        if (renderedHeight < canvas.height) {
          pdf.addPage(); //如果后面还有内容,添加一个空页
        }
        // delete page;
      }
      //保存文件
      // pdf.save(title + '.pdf');
      // loading = false;
      // 删除本地存储的base64字段
      return pdf.output('datauristring')//获取base64Pdf
    });
  },
};
export default htmlToPdf;
cloud-server-other/src/main/java/com/dsh/other/controller/AskedQuestionsController.java
@@ -85,6 +85,7 @@
        return list;
    }
    @ResponseBody
    @PostMapping("/base/notice/queryQuestionDetails")
    public List<QuestionIns> getSysQuestionDetails(){
        List<QuestionIns> sysS = new ArrayList<>();
cloud-server-other/src/main/java/com/dsh/other/controller/BannerController.java
@@ -8,6 +8,7 @@
import com.dsh.other.entity.CreateHistoryDto;
import com.dsh.other.entity.GetHistoryDto;
import com.dsh.other.model.BannerVo;
import com.dsh.other.model.dto.siteDto.SelectDto;
import com.dsh.other.model.vo.questionVo.QuestionSearchVO;
import com.dsh.other.service.IBannerService;
import com.dsh.other.util.ResultUtil;
@@ -112,9 +113,12 @@
    @ResponseBody
    @PostMapping("/class/gethisotory")
    public  List<GetHistoryDto> getHistory(@RequestBody Integer studentId){
        List<GetHistoryDto> list =   bannerService.gethistory(studentId);
      return   bannerService.gethistory(studentId);
        System.out.println("=-======GetHistoryDto========"+list);
      return   list;
    }
}
cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java
@@ -4,9 +4,13 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.other.entity.Store;
import com.dsh.other.entity.TStoreOther;
import com.dsh.other.entity.TStoreOtherConfigTrue;
import com.dsh.other.feignclient.model.*;
import com.dsh.other.model.*;
import com.dsh.other.service.StoreService;
import com.dsh.other.service.TStoreOtherConfigTrueService;
import com.dsh.other.service.TStoreOtherService;
import com.dsh.other.util.GDMapGeocodingUtil;
import com.dsh.other.util.ResultUtil;
import com.dsh.other.util.ToolUtil;
@@ -29,6 +33,8 @@
    @Autowired
    private GDMapGeocodingUtil gdMapGeocodingUtil;
    @Autowired
    private TStoreOtherService tStoreOtherService;
    /**
     * 根据城市管理员id获取门店
@@ -295,6 +301,30 @@
        }
    }
    @Autowired
    private TStoreOtherConfigTrueService tStoreOtherConfigTrueService;
    @ResponseBody
    @PostMapping("/base/store/queryIndexSet")
    @ApiOperation(value = "获取门店首页设置 2.0", tags = {"APP-免费福利"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "门店id", name = "id", dataType = "int", required = true),
    })
    public ResultUtil<List<TStoreOtherConfigTrue>> queryIndexSet(Integer id){
        try {
            List<TStoreOtherConfigTrue> tStoreOtherConfigTrues = new ArrayList<>();
            List<TStoreOther> list = tStoreOtherService.list(new LambdaQueryWrapper<TStoreOther>().eq(TStoreOther::getStoreId, id));
            if(list.size()>0){
                tStoreOtherConfigTrues= tStoreOtherConfigTrueService.list(new LambdaQueryWrapper<TStoreOtherConfigTrue>().eq(TStoreOtherConfigTrue::getPid, list.get(0).getId()));
            }
            return ResultUtil.success(tStoreOtherConfigTrues);
        }catch (Exception e){
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
cloud-server-other/src/main/java/com/dsh/other/entity/GetHistoryDto.java
@@ -15,6 +15,5 @@
    private String pleasePic;
    private String passPic;
    private String createBy;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date date;
}
cloud-server-other/src/main/java/com/dsh/other/entity/Site.java
@@ -118,5 +118,11 @@
    private String nextName;
    @TableField("halfName")
    private String halfName;
    @TableField("cashPriceOne")
    private Double cashPriceOne;
    @TableField("playPaiCoinOne")
    private Double playPaiCoinOne;
    @TableField("ids")
    private String ids;
}
cloud-server-other/src/main/java/com/dsh/other/entity/TStoreOther.java
New file
@@ -0,0 +1,51 @@
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.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
 * <p>
 *
 * </p>
 *
 * @author administrator
 * @since 2023-09-19
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_store_other")
public class TStoreOther extends Model<TStoreOther> {
    private static final long serialVersionUID=1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    private String name;
    @TableField("storeId")
    private Integer storeId;
    private Integer sort;
    /**
     * 1开启 2关闭
     */
    private Integer state;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
cloud-server-other/src/main/java/com/dsh/other/entity/TStoreOtherConfigTrue.java
New file
@@ -0,0 +1,84 @@
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.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
 * <p>
 *
 * </p>
 *
 * @author administrator
 * @since 2023-09-19
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_store_other_config_true")
public class TStoreOtherConfigTrue extends Model<TStoreOtherConfigTrue> {
    private static final long serialVersionUID=1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 图片
     */
    private String url;
    /**
     * 跳转模块
     */
    private String name;
    /**
     * 跳转页面
     */
    private String page;
    /**
     * 跳转类型
     */
    private String type;
    /**
     * 跳转id
     */
    @TableField("turnId")
    private String turnId;
    /**
     * 排序
     */
    private Integer sort;
    /**
     * 1开启 2关闭
     */
    private Integer state;
    private Integer pid;
    @TableField("pageId")
    private Integer pageId;
    @TableField("typeId")
    private Integer typeId;
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
cloud-server-other/src/main/java/com/dsh/other/mapper/TStoreOtherConfigTrueMapper.java
New file
@@ -0,0 +1,17 @@
package com.dsh.other.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.other.entity.TStoreOtherConfigTrue;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author administrator
 * @since 2023-09-19
 */
public interface TStoreOtherConfigTrueMapper extends BaseMapper<TStoreOtherConfigTrue> {
}
cloud-server-other/src/main/java/com/dsh/other/mapper/TStoreOtherMapper.java
New file
@@ -0,0 +1,17 @@
package com.dsh.other.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.other.entity.TStoreOther;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author administrator
 * @since 2023-09-19
 */
public interface TStoreOtherMapper extends BaseMapper<TStoreOther> {
}
cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteInfoVo.java
@@ -47,5 +47,10 @@
    private Integer ishalf;
    @ApiModelProperty("场地说明")
    private String introduce;
    @ApiModelProperty("现金价格(x/半小时)半场")
    private Double cashPriceOne;
    @ApiModelProperty("玩湃币价格(x/半小时)半场")
    private Double playPaiCoinOne;
}
cloud-server-other/src/main/java/com/dsh/other/model/dto/siteDto/GiftSearchDto.java
New file
@@ -0,0 +1,9 @@
package com.dsh.other.model.dto.siteDto;
import lombok.Data;
@Data
public class GiftSearchDto {
    String name;
    String phone;
}
cloud-server-other/src/main/java/com/dsh/other/model/dto/siteDto/SelectDto.java
New file
@@ -0,0 +1,9 @@
package com.dsh.other.model.dto.siteDto;
import lombok.Data;
@Data
public class SelectDto {
    Integer id;
    String value;
}
cloud-server-other/src/main/java/com/dsh/other/service/IBannerService.java
@@ -22,4 +22,5 @@
    void createHistory(CreateHistoryDto createHistoryDto);
    List<GetHistoryDto> gethistory(Integer studentId);
}
cloud-server-other/src/main/java/com/dsh/other/service/TStoreOtherConfigTrueService.java
New file
@@ -0,0 +1,17 @@
package com.dsh.other.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.other.entity.TStoreOtherConfigTrue;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author administrator
 * @since 2023-09-19
 */
public interface TStoreOtherConfigTrueService extends IService<TStoreOtherConfigTrue> {
}
cloud-server-other/src/main/java/com/dsh/other/service/TStoreOtherService.java
New file
@@ -0,0 +1,17 @@
package com.dsh.other.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.other.entity.TStoreOther;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author administrator
 * @since 2023-09-19
 */
public interface TStoreOtherService extends IService<TStoreOther> {
}
cloud-server-other/src/main/java/com/dsh/other/service/impl/BannerServiceImpl.java
@@ -41,4 +41,6 @@
    public List<Banner> listAll(AdvertisementQuery query) {
        return bannerMapper.listAll(query);
    }
}
cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
@@ -112,6 +112,8 @@
        querySiteInfoVo.setStorePhone(store.getPhone());
        querySiteInfoVo.setImgs(site.getImgs());
        querySiteInfoVo.setDistance(0D);
        querySiteInfoVo.setCashPriceOne(site.getCashPriceOne());
        querySiteInfoVo.setPlayPaiCoinOne(site.getPlayPaiCoinOne());
        querySiteInfoVo.setIntroduce(site.getIntroduce());
        ArrayList<String> nextName = new ArrayList<>();
        ArrayList<String> halfName = new ArrayList<>();
cloud-server-other/src/main/java/com/dsh/other/service/impl/TStoreOtherConfigTrueServiceImpl.java
New file
@@ -0,0 +1,21 @@
package com.dsh.other.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.other.entity.TStoreOtherConfigTrue;
import com.dsh.other.mapper.TStoreOtherConfigTrueMapper;
import com.dsh.other.service.TStoreOtherConfigTrueService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author administrator
 * @since 2023-09-19
 */
@Service
public class TStoreOtherConfigTrueServiceImpl extends ServiceImpl<TStoreOtherConfigTrueMapper, TStoreOtherConfigTrue> implements TStoreOtherConfigTrueService {
}
cloud-server-other/src/main/java/com/dsh/other/service/impl/TStoreOtherServiceImpl.java
New file
@@ -0,0 +1,21 @@
package com.dsh.other.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.other.entity.TStoreOther;
import com.dsh.other.mapper.TStoreOtherMapper;
import com.dsh.other.service.TStoreOtherService;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author administrator
 * @since 2023-09-19
 */
@Service
public class TStoreOtherServiceImpl extends ServiceImpl<TStoreOtherMapper, TStoreOther> implements TStoreOtherService {
}
cloud-server-other/src/main/resources/mapper/BannerMapper.xml
@@ -38,10 +38,11 @@
    </insert>
    <select id="getHistory" resultType="com.dsh.other.entity.GetHistoryDto">
        SELECT hs.insertTime,hs.passPic,hs.pleasePic,us.`name`
        SELECT hs.insertTime as date,hs.passPic,hs.pleasePic,us.`name` as createBy
        from t_usetime_history hs
                 LEFT JOIN sys_user us on hs.createBy = us.id
        where hs.studentId = #{studentId}
    </select>
</mapper>
cloud-server-other/src/main/resources/mapper/TStoreOtherConfigTrueMapper.xml
New file
@@ -0,0 +1,6 @@
<?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.TStoreOtherConfigTrueMapper">
</mapper>
cloud-server-other/src/main/resources/mapper/TStoreOtherMapper.xml
New file
@@ -0,0 +1,6 @@
<?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.TStoreOtherMapper">
</mapper>