From 5f804115139dfdeeb2ce950a0f584b30f94b285c Mon Sep 17 00:00:00 2001
From: 44323 <443237572@qq.com>
Date: 星期六, 23 九月 2023 17:57:27 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/PlayPai

---
 cloud-server-course/src/main/java/com/dsh/course/mapper/MoneyBackMapper.java                                    |    8 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit_three.html                         |  124 
 cloud-server-management/src/main/java/com/dsh/course/model/dto/InsertBackDto.java                               |    9 
 cloud-server-management/src/main/webapp/static/modular/system/tShopEvaluation/tShop_info.js                     |    1 
 cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java                        |  405 ++
 cloud-server-other/src/main/java/com/dsh/other/mapper/TStoreOtherConfigTrueMapper.java                          |   17 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/tCoupon_add.html                            |   56 
 cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml                                    |    8 
 cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java                                 |    9 
 cloud-server-course/src/main/java/com/dsh/course/service/CourseCounsumService.java                              |    9 
 cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java                         |    4 
 cloud-server-other/src/main/java/com/dsh/other/service/TStoreOtherConfigTrueService.java                        |   17 
 .idea/workspace.xml                                                                                             |  175 
 cloud-server-activity/src/main/java/com/dsh/activity/mapper/CouponMapper.java                                   |    6 
 cloud-server-course/src/main/java/com/dsh/course/service/impl/CourseCounsumServiceImpl.java                     |   14 
 cloud-server-other/src/main/java/com/dsh/other/controller/AskedQuestionsController.java                         |    1 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit_one.html                           |   42 
 cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js                    |   16 
 cloud-server-account/src/main/java/com/dsh/account/mapper/TStudentMapper.java                                   |   10 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html                |   46 
 cloud-server-activity/src/main/resources/mapper/CouponMapper.xml                                                |   13 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add.html                                |    9 
 cloud-server-account/src/main/resources/mapper/TStudentMapper.xml                                               |    7 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_imgAll.html                             |   10 
 cloud-server-management/src/main/webapp/static/modular/system/tShop/tShopOther.js                               |   38 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/ConsumeQuery.java                   |   19 
 cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppGiftServiceImpl.java                        |    4 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackageStudent.html             |    5 
 cloud-server-management/src/main/webapp/static/modular/system/tShop/tShopOtherTwo.js                            |  812 +++++
 cloud-server-management/src/main/java/com/dsh/course/feignClient/other/HistoryClient.java                       |    4 
 cloud-server-account/src/main/java/com/dsh/account/model/vo/exploreDetail/QuestionIns.java                      |    6 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/Site.java                          |   22 
 cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/CouponListOfSearch.java                  |    3 
 cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackage.java                                     |    6 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/TOperatorCityService.java             |   17 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackagePaymentConfig.java   |    1 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add_one.html                            |    2 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit.html                          | 1102 ++++++-
 cloud-server-other/src/main/java/com/dsh/other/service/IBannerService.java                                      |    1 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/TStudentController.java     |  324 ++
 cloud-server-management/src/main/java/com/dsh/course/util/ChineseMoneyUtils.java                                |  104 
 cloud-server-management/src/main/java/com/dsh/course/model/MoneyBack.java                                       |   22 
 cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js                                    |  289 +
 cloud-server-course/pom.xml                                                                                     |    6 
 cloud-server-management/src/main/webapp/static/modular/system/tShop/tShopOtherOne.js                            |    5 
 cloud-server-other/src/main/resources/mapper/BannerMapper.xml                                                   |    3 
 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java                 |   85 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackagePayment.java        |   11 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_edit.html                               |  233 +
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java        |   23 
 cloud-server-account/src/main/java/com/dsh/account/entity/GiftSearchDto.java                                    |   11 
 cloud-server-course/src/main/java/com/dsh/course/feignclient/account/StudentClient.java                         |    4 
 cloud-server-other/src/main/java/com/dsh/other/service/impl/TStoreOtherConfigTrueServiceImpl.java               |   21 
 cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java              |    5 
 cloud-server-management/pom.xml                                                                                 |   15 
 cloud-server-course/src/main/java/com/dsh/course/entity/CourseCounsum.java                                      |   28 
 cloud-server-other/src/main/java/com/dsh/other/mapper/TStoreOtherMapper.java                                    |   17 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit_first.html                    |    6 
 cloud-server-management/src/main/java/com/dsh/course/util/HtmlToPdfUtils.java                                   |   53 
 cloud-server-course/src/main/java/com/dsh/course/entity/dto/ClassListDto.java                                   |    8 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/ToHoliDto.java                      |   13 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/banckmoney.html                            |  347 ++
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html                               |   58 
 cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java                        |    2 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html               |   11 
 cloud-server-other/src/main/resources/mapper/TStoreOtherMapper.xml                                              |    6 
 cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java                       |   11 
 cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/StuCourseResp.java                  |    1 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/classRecord.html                      |   16 
 cloud-server-other/src/main/java/com/dsh/other/entity/GetHistoryDto.java                                        |    1 
 cloud-server-course/src/main/java/com/dsh/course/controller/CancelSourceController.java                         |    2 
 cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java                  |    6 
 cloud-server-management/src/main/webapp/static/modular/system/coursePackage/classRecord.js                      |   35 
 cloud-server-other/src/main/java/com/dsh/other/service/impl/BannerServiceImpl.java                              |    2 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackage.java               |    3 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java        |    8 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/classelct.html                             |  283 ++
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TStudent.java                           |    4 
 cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteInfoVo.java                                       |    5 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseStuddentClient.java               |   56 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TOperatorCity.java                      |   58 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEditTTT.html                       |  136 
 cloud-server-course/src/main/java/com/dsh/course/feignclient/model/StuCourseResp.java                           |    1 
 cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml                                   |    9 
 cloud-server-management/src/main/webapp/static/modular/system/tStudent/htmlToPdf.js                             |   66 
 cloud-server-course/src/main/java/com/dsh/course/entity/InsertBackDto.java                                      |    9 
 cloud-server-course/src/main/java/com/dsh/course/mapper/CourseCounsumMapper.java                                |    8 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord.html               |    3 
 cloud-server-other/src/main/java/com/dsh/other/entity/TStoreOtherConfigTrue.java                                |   84 
 cloud-server-other/src/main/java/com/dsh/other/controller/BannerController.java                                 |    8 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/util/BigDecimalToChineseAmountUtil.java       |   80 
 cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java                        |   17 
 cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java                           |    3 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/tCoupon_edit.html                           |   56 
 cloud-server-other/src/main/java/com/dsh/other/service/impl/TStoreOtherServiceImpl.java                         |   21 
 cloud-server-management/src/main/webapp/static/modular/system/coursePackage/TCoupon.js                          |  337 ++
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_add.html                                |  113 
 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java                    |  151 
 cloud-server-account/src/main/java/com/dsh/account/service/TAppGiftService.java                                 |    2 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/GiftSearchDto.java                  |   11 
 cloud-server-other/src/main/java/com/dsh/other/service/TStoreOtherService.java                                  |   17 
 cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponServiceImpl.java                        |    2 
 cloud-server-course/src/main/java/com/dsh/course/util/ResultUtil.java                                           |  108 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/TCoupon.html                          |   80 
 cloud-server-management/src/main/java/com/dsh/course/mapper/TOperatorCityMapper.java                            |   17 
 cloud-server-course/src/main/java/com/dsh/course/service/MoneyBackService.java                                  |    9 
 cloud-server-course/src/main/java/com/dsh/course/entity/dto/ToHoliDto.java                                      |   13 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java |   96 
 cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java                                |    2 
 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java             |   55 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TOperatorCityServiceImpl.java    |   21 
 cloud-server-management/src/main/java/com/dsh/course/dto/ClassListDto.java                                      |    8 
 cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackagePaymentConfig.java                         |    1 
 cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js                               |  149 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CourseCounsum.java                      |   19 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/ToClassDto.java                     |   10 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java          |   40 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/TCouponEdit.html                      |   80 
 cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java                         |    2 
 cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java                            |   40 
 cloud-server-other/src/main/java/com/dsh/other/model/dto/siteDto/SelectDto.java                                 |    9 
 cloud-server-management/src/main/resources/mapper/TOperatorCityMapper.xml                                       |    6 
 cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java                                  |   30 
 cloud-server-other/src/main/java/com/dsh/other/model/dto/siteDto/GiftSearchDto.java                             |    9 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add_three.html                          |  134 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java          |  220 +
 cloud-server-other/src/main/java/com/dsh/other/entity/Site.java                                                 |    6 
 cloud-server-course/src/main/java/com/dsh/course/entity/MoneyBack.java                                          |   28 
 .idea/modules.xml                                                                                               |    1 
 cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java                      |    3 
 cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord.js               |   40 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage.html                    |   17 
 cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java                          |    3 
 cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java                       |    4 
 cloud-server-course/src/main/java/com/dsh/course/entity/dto/ConsumeQuery.java                                   |   18 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java                     |    4 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/trans.html                                 |  128 
 cloud-server-account/src/main/java/com/dsh/account/model/vo/classDetails/RegisteredCourse.java                  |    2 
 cloud-server-other/src/main/resources/mapper/TStoreOtherConfigTrueMapper.xml                                    |    6 
 cloud-server-management/src/main/webapp/static/modular/system/tShop/tShop_info.js                               |   63 
 cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java                              |    6 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TSite.java                              |   21 
 cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage_info.js               |   83 
 cloud-server-course/src/main/java/com/dsh/course/service/impl/MoneyBackServiceImpl.java                         |   14 
 cloud-server-management/src/main/webapp/static/modular/system/coursePackage/TCouponEdit.js                      |  314 ++
 cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/CouponListOfSearch.java         |    2 
 cloud-server-other/src/main/java/com/dsh/other/entity/TStoreOther.java                                          |   51 
 cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java                        |    2 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java         |    4 
 cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackageStudent.js             |   26 
 cloud-server-course/src/main/java/com/dsh/course/model/dto/ToClassDto.java                                      |    9 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/HoliSelect.java                     |    5 
 152 files changed, 7,652 insertions(+), 759 deletions(-)

diff --git a/.idea/modules.xml b/.idea/modules.xml
index 7931019..b047c60 100644
--- a/.idea/modules.xml
+++ b/.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>
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index e8767ab..3dda1b2 100644
--- a/.idea/workspace.xml
+++ b/.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">
diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java
index 45bcdcc..3ba94f2 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java
+++ b/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);
diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java
index 07ccdea..805c510 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java
+++ b/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();
         }
diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java
index 5dc844f..292ef63 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java
+++ b/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;
+    }
 }
diff --git a/cloud-server-account/src/main/java/com/dsh/account/entity/GiftSearchDto.java b/cloud-server-account/src/main/java/com/dsh/account/entity/GiftSearchDto.java
new file mode 100644
index 0000000..712302d
--- /dev/null
+++ b/cloud-server-account/src/main/java/com/dsh/account/entity/GiftSearchDto.java
@@ -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;
+}
diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java
index 290de04..d035236 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java
+++ b/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);
diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/StuCourseResp.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/StuCourseResp.java
index 3a7fe9a..64baa1c 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/StuCourseResp.java
+++ b/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;
diff --git a/cloud-server-account/src/main/java/com/dsh/account/mapper/TStudentMapper.java b/cloud-server-account/src/main/java/com/dsh/account/mapper/TStudentMapper.java
index 2830077..f3bc468 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/mapper/TStudentMapper.java
+++ b/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);
 }
diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/vo/classDetails/RegisteredCourse.java b/cloud-server-account/src/main/java/com/dsh/account/model/vo/classDetails/RegisteredCourse.java
index 7f05d00..9c672fc 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/model/vo/classDetails/RegisteredCourse.java
+++ b/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;
 
diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/vo/exploreDetail/QuestionIns.java b/cloud-server-account/src/main/java/com/dsh/account/model/vo/exploreDetail/QuestionIns.java
index 46721d3..4a04537 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/model/vo/exploreDetail/QuestionIns.java
+++ b/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;
 
 }
diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/TAppGiftService.java b/cloud-server-account/src/main/java/com/dsh/account/service/TAppGiftService.java
index c283d2a..919ab30 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/service/TAppGiftService.java
+++ b/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);
 
 
 }
diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java b/cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java
index c3beb00..668232d 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java
+++ b/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);
 }
diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppGiftServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppGiftServiceImpl.java
index 60fe644..e3d4252 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppGiftServiceImpl.java
+++ b/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;
     }
 }
diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
index 656063c..20c6292 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
+++ 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);
diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java
index a4d184e..2a17749 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java
+++ b/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);
+    }
+
+
+
 
 }
diff --git a/cloud-server-account/src/main/resources/mapper/TStudentMapper.xml b/cloud-server-account/src/main/resources/mapper/TStudentMapper.xml
index 2450b6c..c37cace 100644
--- a/cloud-server-account/src/main/resources/mapper/TStudentMapper.xml
+++ b/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>
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/CouponListOfSearch.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/CouponListOfSearch.java
index eceb9b3..b557c6b 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/CouponListOfSearch.java
+++ b/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;
+
 
 }
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/CouponMapper.java b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/CouponMapper.java
index b622619..091436a 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/CouponMapper.java
+++ b/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,
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponServiceImpl.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponServiceImpl.java
index 1483b1c..0377fd4 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponServiceImpl.java
+++ b/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
diff --git a/cloud-server-activity/src/main/resources/mapper/CouponMapper.xml b/cloud-server-activity/src/main/resources/mapper/CouponMapper.xml
index a09094e..91343f2 100644
--- a/cloud-server-activity/src/main/resources/mapper/CouponMapper.xml
+++ b/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>
diff --git a/cloud-server-course/pom.xml b/cloud-server-course/pom.xml
index 1626e9e..8a34b7b 100644
--- a/cloud-server-course/pom.xml
+++ b/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>
diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CancelSourceController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CancelSourceController.java
index ae65256..bef6424 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/controller/CancelSourceController.java
+++ b/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;
diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
index 95220d3..7c6bc1d 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
+++ b/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);
                 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java
index e60bb31..631575c 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java
+++ b/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 "转课成功";
+
+
+
+
+    }
+
+
+
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/CourseCounsum.java b/cloud-server-course/src/main/java/com/dsh/course/entity/CourseCounsum.java
new file mode 100644
index 0000000..0725d67
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/entity/CourseCounsum.java
@@ -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;
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackagePaymentConfig.java b/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackagePaymentConfig.java
index 41ad552..68d4ee9 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackagePaymentConfig.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackagePaymentConfig.java
@@ -40,4 +40,5 @@
     private Integer playPaiCoin;
     @TableField("couponIds")
     private String couponIds;
+
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/InsertBackDto.java b/cloud-server-course/src/main/java/com/dsh/course/entity/InsertBackDto.java
new file mode 100644
index 0000000..8fc3e85
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/entity/InsertBackDto.java
@@ -0,0 +1,9 @@
+package com.dsh.course.entity;
+
+import lombok.Data;
+
+@Data
+public class InsertBackDto {
+    Integer id;
+    String ids;
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/MoneyBack.java b/cloud-server-course/src/main/java/com/dsh/course/entity/MoneyBack.java
new file mode 100644
index 0000000..1ce9e05
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/entity/MoneyBack.java
@@ -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;
+
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackage.java b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackage.java
index 9adac73..e9c4168 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackage.java
+++ b/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;
     /**
      * 上课开始时间
      */
diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java
index 47fcba7..66c684a 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackagePayment.java
+++ b/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;
     /**
      * 业务编号
diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/dto/ClassListDto.java b/cloud-server-course/src/main/java/com/dsh/course/entity/dto/ClassListDto.java
index c482bb5..07462f7 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/entity/dto/ClassListDto.java
+++ b/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;
 
diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/dto/ConsumeQuery.java b/cloud-server-course/src/main/java/com/dsh/course/entity/dto/ConsumeQuery.java
new file mode 100644
index 0000000..ea49194
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/entity/dto/ConsumeQuery.java
@@ -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;
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/dto/ToHoliDto.java b/cloud-server-course/src/main/java/com/dsh/course/entity/dto/ToHoliDto.java
new file mode 100644
index 0000000..09e6ceb
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/entity/dto/ToHoliDto.java
@@ -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;
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java
index 5d8cbb7..ef4c078 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java
+++ b/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);
diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java
index 12efef4..233d34b 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java
+++ b/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);
+
+
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/StudentClient.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/StudentClient.java
index 5754fcc..830c804 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/StudentClient.java
+++ b/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);
+
+
+
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/model/StuCourseResp.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/model/StuCourseResp.java
index 440631b..aa50a57 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/feignclient/model/StuCourseResp.java
+++ b/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;
diff --git a/cloud-server-course/src/main/java/com/dsh/course/mapper/CourseCounsumMapper.java b/cloud-server-course/src/main/java/com/dsh/course/mapper/CourseCounsumMapper.java
new file mode 100644
index 0000000..228421f
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/mapper/CourseCounsumMapper.java
@@ -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> {
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java b/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java
index a8668aa..af725af 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/mapper/CoursePackageStudentMapper.java
+++ b/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);
+
+
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/mapper/MoneyBackMapper.java b/cloud-server-course/src/main/java/com/dsh/course/mapper/MoneyBackMapper.java
new file mode 100644
index 0000000..328996c
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/mapper/MoneyBackMapper.java
@@ -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> {
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java b/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java
index e5f35fc..6881ae8 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java
+++ b/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);
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/dto/ToClassDto.java b/cloud-server-course/src/main/java/com/dsh/course/model/dto/ToClassDto.java
new file mode 100644
index 0000000..2f28104
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/model/dto/ToClassDto.java
@@ -0,0 +1,9 @@
+package com.dsh.course.model.dto;
+
+import lombok.Data;
+
+@Data
+public class ToClassDto {
+    Integer id;
+    Integer toStudentId;
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/CourseCounsumService.java b/cloud-server-course/src/main/java/com/dsh/course/service/CourseCounsumService.java
new file mode 100644
index 0000000..99f8528
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/CourseCounsumService.java
@@ -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> {
+
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java b/cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java
index af73f12..da9421a 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/CoursePackageStudentService.java
+++ b/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);
+
+
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/MoneyBackService.java b/cloud-server-course/src/main/java/com/dsh/course/service/MoneyBackService.java
new file mode 100644
index 0000000..bee5744
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/MoneyBackService.java
@@ -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> {
+
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java
index 929efbb..fbb40ef 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java
+++ b/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);
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CourseCounsumServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CourseCounsumServiceImpl.java
new file mode 100644
index 0000000..5f4467c
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CourseCounsumServiceImpl.java
@@ -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 {
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java
index 0178d52..ad47688 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageStudentServiceImpl.java
+++ b/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);
+    }
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/MoneyBackServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/MoneyBackServiceImpl.java
new file mode 100644
index 0000000..75c9b66
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/MoneyBackServiceImpl.java
@@ -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 {
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java
index 7d3a215..4cc970a 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java
+++ b/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);
+    }
+
 
 
 
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java
index 854a8af..18512d7 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java
+++ b/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();
diff --git a/cloud-server-course/src/main/java/com/dsh/course/util/ResultUtil.java b/cloud-server-course/src/main/java/com/dsh/course/util/ResultUtil.java
index 45a64c6..52cf2de 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/util/ResultUtil.java
+++ b/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);
     }
 
 }
diff --git a/cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml b/cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml
index 2c7eee1..72b98e5 100644
--- a/cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml
+++ b/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">
diff --git a/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml b/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml
index 2b2bb8f..64e77bc 100644
--- a/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml
+++ b/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>
diff --git a/cloud-server-management/pom.xml b/cloud-server-management/pom.xml
index 85e929b..eecc3ec 100644
--- a/cloud-server-management/pom.xml
+++ b/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>
 
 
diff --git a/cloud-server-management/src/main/java/com/dsh/course/dto/ClassListDto.java b/cloud-server-management/src/main/java/com/dsh/course/dto/ClassListDto.java
index dffe07c..99cd02b 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/dto/ClassListDto.java
+++ b/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;
 
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java
index 0e0dfae..88eb6bf 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java
+++ b/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);
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/CouponListOfSearch.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/CouponListOfSearch.java
index a41f7f6..4fff639 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/CouponListOfSearch.java
+++ b/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;
 
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java
index f251e0d..76e484f 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java
+++ b/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);
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseStuddentClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseStuddentClient.java
index 8ea647a..c7528fb 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseStuddentClient.java
+++ b/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);
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackagePaymentConfig.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackagePaymentConfig.java
index 6533a11..af4cc16 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackagePaymentConfig.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackagePaymentConfig.java
@@ -32,4 +32,5 @@
      * 玩湃币价格
      */
     private Integer playPaiCoin;
+    private String couponIds;
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackage.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackage.java
index 3e75872..2f040b1 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackage.java
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackage.java
@@ -63,6 +63,9 @@
      * 最多预约人数
      */
     private Integer maxSubscribeNumber;
+
+    private Integer codeTime;
+
     /**
      * 上课开始时间
      */
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackagePayment.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackagePayment.java
index c73435a..778cf54 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackagePayment.java
+++ b/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;
+
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/HistoryClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/HistoryClient.java
index 06d2662..66646b4 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/HistoryClient.java
+++ b/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);
+
+
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/Site.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/Site.java
index 90d6814..d8d1dcf 100644
--- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/model/Site.java
+++ b/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;
+
+
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/course/mapper/TOperatorCityMapper.java b/cloud-server-management/src/main/java/com/dsh/course/mapper/TOperatorCityMapper.java
new file mode 100644
index 0000000..87dd0a3
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/mapper/TOperatorCityMapper.java
@@ -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> {
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/model/MoneyBack.java b/cloud-server-management/src/main/java/com/dsh/course/model/MoneyBack.java
new file mode 100644
index 0000000..017bb80
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/model/MoneyBack.java
@@ -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;
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/model/dto/InsertBackDto.java b/cloud-server-management/src/main/java/com/dsh/course/model/dto/InsertBackDto.java
new file mode 100644
index 0000000..7a3161c
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/model/dto/InsertBackDto.java
@@ -0,0 +1,9 @@
+package com.dsh.course.model.dto;
+
+import lombok.Data;
+
+@Data
+public class InsertBackDto {
+    Integer id;
+    String ids;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/util/ChineseMoneyUtils.java b/cloud-server-management/src/main/java/com/dsh/course/util/ChineseMoneyUtils.java
new file mode 100644
index 0000000..022557f
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/util/ChineseMoneyUtils.java
@@ -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();
+    }
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/util/HtmlToPdfUtils.java b/cloud-server-management/src/main/java/com/dsh/course/util/HtmlToPdfUtils.java
new file mode 100644
index 0000000..62463d6
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/util/HtmlToPdfUtils.java
@@ -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();
+    }
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java
index bf6aacd..77b294d 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java
+++ b/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");
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java
index f6d119e..fcef6e6 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java
+++ b/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);
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java
index 16910ce..3598333 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java
+++ b/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;
+        }
+    }
 
 
 
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java
index 2cfba7a..ecd68dc 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java
+++ b/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
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/TStudentController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/TStudentController.java
index 47961f2..5373667 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/TStudentController.java
+++ b/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,"");
+    }
+
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CourseCounsum.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CourseCounsum.java
new file mode 100644
index 0000000..d90ee06
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CourseCounsum.java
@@ -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;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TOperatorCity.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TOperatorCity.java
new file mode 100644
index 0000000..0260382
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TOperatorCity.java
@@ -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;
+    }
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TSite.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TSite.java
index 8e9fd3f..6c398b4 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TSite.java
+++ b/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;
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TStudent.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TStudent.java
index 80a7df3..b9e0a44 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TStudent.java
+++ b/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;
 }
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/ConsumeQuery.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/ConsumeQuery.java
new file mode 100644
index 0000000..cb17e8b
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/ConsumeQuery.java
@@ -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;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/GiftSearchDto.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/GiftSearchDto.java
new file mode 100644
index 0000000..61424c4
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/GiftSearchDto.java
@@ -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;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/HoliSelect.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/HoliSelect.java
new file mode 100644
index 0000000..b6ffeec
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/HoliSelect.java
@@ -0,0 +1,5 @@
+package com.dsh.guns.modular.system.model.dto;
+
+public class HoliSelect {
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/ToClassDto.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/ToClassDto.java
new file mode 100644
index 0000000..5ac720f
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/ToClassDto.java
@@ -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;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/ToHoliDto.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/ToHoliDto.java
new file mode 100644
index 0000000..04b57d0
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/ToHoliDto.java
@@ -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;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/TOperatorCityService.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/TOperatorCityService.java
new file mode 100644
index 0000000..7a7d2c0
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/TOperatorCityService.java
@@ -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> {
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java
index 994cab8..5fa98fd 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java
+++ b/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();
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TOperatorCityServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TOperatorCityServiceImpl.java
new file mode 100644
index 0000000..53b05f8
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TOperatorCityServiceImpl.java
@@ -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 {
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/util/BigDecimalToChineseAmountUtil.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/util/BigDecimalToChineseAmountUtil.java
new file mode 100644
index 0000000..1b267de
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/util/BigDecimalToChineseAmountUtil.java
@@ -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: 壹万贰仟叁佰肆拾伍元陆角柒分
+    }
+}
\ No newline at end of file
diff --git a/cloud-server-management/src/main/resources/mapper/TOperatorCityMapper.xml b/cloud-server-management/src/main/resources/mapper/TOperatorCityMapper.xml
new file mode 100644
index 0000000..f32c9b8
--- /dev/null
+++ b/cloud-server-management/src/main/resources/mapper/TOperatorCityMapper.xml
@@ -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>
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/TCoupon.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/TCoupon.html
new file mode 100644
index 0000000..670f376
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/TCoupon.html
@@ -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>
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/TCouponEdit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/TCouponEdit.html
new file mode 100644
index 0000000..fb57482
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/TCouponEdit.html
@@ -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>
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/classRecord.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/classRecord.html
index 36e6cfb..38673a9 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/classRecord.html
+++ b/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>
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage.html
index 7d082e6..0500b54 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage.html
+++ b/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>
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackageStudent.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackageStudent.html
index 5dbed35..ea7809e 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackageStudent.html
+++ b/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>
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html
index c0f1ae6..dd050df 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html
+++ b/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>
 @}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html
index aab2577..2fe98b4 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html
+++ b/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'
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord.html
index c193dc6..eb94bdd 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord.html
+++ b/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>
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/tCoupon_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/tCoupon_add.html
new file mode 100644
index 0000000..1ff93e8
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/tCoupon_add.html
@@ -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>
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/tCoupon_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/tCoupon_edit.html
new file mode 100644
index 0000000..e8e8c75
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCoupon/tCoupon_edit.html
@@ -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>
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add.html
index c538791..8d065f1 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add.html
+++ b/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>
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add_one.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add_one.html
index 301ef2a..87fa3b5 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add_one.html
+++ b/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"/>
 
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add_three.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add_three.html
new file mode 100644
index 0000000..7379f20
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add_three.html
@@ -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>
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html
index 17ba78f..c793baf 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html
+++ b/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">
 
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit_one.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit_one.html
new file mode 100644
index 0000000..e8ea2a9
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit_one.html
@@ -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>
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit_three.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit_three.html
new file mode 100644
index 0000000..0674a16
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit_three.html
@@ -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>
+    @}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_imgAll.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_imgAll.html
index bd5cfc4..2df1d24 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_imgAll.html
+++ b/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"/>
 
 
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_add.html
index 834906e..4423bc2 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_add.html
+++ b/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>
 @}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_edit.html
index a608a3d..735ca1a 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_edit.html
+++ b/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>
 @}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/banckmoney.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/banckmoney.html
new file mode 100644
index 0000000..a148919
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/banckmoney.html
@@ -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>
\ No newline at end of file
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/classelct.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/classelct.html
new file mode 100644
index 0000000..5fbc47d
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/classelct.html
@@ -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>
\ No newline at end of file
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit.html
index 68e832b..ced5d12 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit.html
+++ b/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": "退费",
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEditTTT.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEditTTT.html
new file mode 100644
index 0000000..b348230
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEditTTT.html
@@ -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>
\ No newline at end of file
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit_first.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit_first.html
index 41683c9..5fdb7da 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit_first.html
+++ b/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",
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/trans.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/trans.html
new file mode 100644
index 0000000..f7e742c
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/trans.html
@@ -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>
\ No newline at end of file
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/TCoupon.js b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/TCoupon.js
new file mode 100644
index 0000000..962bc3d
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/TCoupon.js
@@ -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();
+});
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/TCouponEdit.js b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/TCouponEdit.js
new file mode 100644
index 0000000..f781b6a
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/TCouponEdit.js
@@ -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();
+});
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/classRecord.js b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/classRecord.js
index f3dfaa7..06f15c7 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/classRecord.js
+++ b/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>';
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js
index 1e461a3..d65fccd 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js
+++ b/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("");
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackageStudent.js b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackageStudent.js
index 6cb31aa..c1d1b38 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackageStudent.js
+++ b/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 '正常';
                 }
             }
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage_info.js b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage_info.js
index 23da9f0..9c0e374 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage_info.js
+++ b/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();
 }
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord.js b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord.js
index 9d07773..1e07b58 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord.js
+++ b/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
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShopOther.js b/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShopOther.js
index 0302161..58e35c3 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShopOther.js
+++ b/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
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShopOtherOne.js b/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShopOtherOne.js
index 1897c1c..6d13e5c 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShopOtherOne.js
+++ b/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);
 }
\ No newline at end of file
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShopOtherTwo.js b/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShopOtherTwo.js
new file mode 100644
index 0000000..4c2cf6c
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShopOtherTwo.js
@@ -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);
+}
\ No newline at end of file
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShop_info.js b/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShop_info.js
index 2d4e403..8dd039a 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShop_info.js
+++ b/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();
+}
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tShopEvaluation/tShop_info.js b/cloud-server-management/src/main/webapp/static/modular/system/tShopEvaluation/tShop_info.js
index e218aa8..83702a1 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/tShopEvaluation/tShop_info.js
+++ b/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){
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js b/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js
index 8dfc8cf..e08209b 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite.js
+++ b/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();
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js b/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js
index 152f2e9..68ddf22 100644
--- a/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js
+++ b/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) {
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tStudent/htmlToPdf.js b/cloud-server-management/src/main/webapp/static/modular/system/tStudent/htmlToPdf.js
new file mode 100644
index 0000000..983a829
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/static/modular/system/tStudent/htmlToPdf.js
@@ -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;
diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/AskedQuestionsController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/AskedQuestionsController.java
index 6004b4a..8fe6133 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/controller/AskedQuestionsController.java
+++ b/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<>();
diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/BannerController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/BannerController.java
index bf05b03..7dde961 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/controller/BannerController.java
+++ b/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;
 
     }
+
+
 }
diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java
index 9dc6cfa..5f79d70 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java
+++ b/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();
+        }
+    }
+
+
 
 
 
diff --git a/cloud-server-other/src/main/java/com/dsh/other/entity/GetHistoryDto.java b/cloud-server-other/src/main/java/com/dsh/other/entity/GetHistoryDto.java
index 8124433..22e6e1b 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/entity/GetHistoryDto.java
+++ b/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;
 }
diff --git a/cloud-server-other/src/main/java/com/dsh/other/entity/Site.java b/cloud-server-other/src/main/java/com/dsh/other/entity/Site.java
index ca87875..e7d6edc 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/entity/Site.java
+++ b/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;
 
 }
diff --git a/cloud-server-other/src/main/java/com/dsh/other/entity/TStoreOther.java b/cloud-server-other/src/main/java/com/dsh/other/entity/TStoreOther.java
new file mode 100644
index 0000000..c2562e6
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/entity/TStoreOther.java
@@ -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;
+    }
+
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/entity/TStoreOtherConfigTrue.java b/cloud-server-other/src/main/java/com/dsh/other/entity/TStoreOtherConfigTrue.java
new file mode 100644
index 0000000..7492083
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/entity/TStoreOtherConfigTrue.java
@@ -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;
+    }
+
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/mapper/TStoreOtherConfigTrueMapper.java b/cloud-server-other/src/main/java/com/dsh/other/mapper/TStoreOtherConfigTrueMapper.java
new file mode 100644
index 0000000..e3959a7
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/mapper/TStoreOtherConfigTrueMapper.java
@@ -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> {
+
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/mapper/TStoreOtherMapper.java b/cloud-server-other/src/main/java/com/dsh/other/mapper/TStoreOtherMapper.java
new file mode 100644
index 0000000..a7daf6c
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/mapper/TStoreOtherMapper.java
@@ -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> {
+
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteInfoVo.java b/cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteInfoVo.java
index 0826ae5..eff35c2 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteInfoVo.java
+++ b/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;
 
 }
diff --git a/cloud-server-other/src/main/java/com/dsh/other/model/dto/siteDto/GiftSearchDto.java b/cloud-server-other/src/main/java/com/dsh/other/model/dto/siteDto/GiftSearchDto.java
new file mode 100644
index 0000000..abcc814
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/model/dto/siteDto/GiftSearchDto.java
@@ -0,0 +1,9 @@
+package com.dsh.other.model.dto.siteDto;
+
+import lombok.Data;
+
+@Data
+public class GiftSearchDto {
+    String name;
+    String phone;
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/model/dto/siteDto/SelectDto.java b/cloud-server-other/src/main/java/com/dsh/other/model/dto/siteDto/SelectDto.java
new file mode 100644
index 0000000..132eea7
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/model/dto/siteDto/SelectDto.java
@@ -0,0 +1,9 @@
+package com.dsh.other.model.dto.siteDto;
+
+import lombok.Data;
+
+@Data
+public class SelectDto {
+    Integer id;
+    String value;
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/IBannerService.java b/cloud-server-other/src/main/java/com/dsh/other/service/IBannerService.java
index e9b3718..de49917 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/service/IBannerService.java
+++ b/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);
+
 }
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/TStoreOtherConfigTrueService.java b/cloud-server-other/src/main/java/com/dsh/other/service/TStoreOtherConfigTrueService.java
new file mode 100644
index 0000000..4002d0e
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/service/TStoreOtherConfigTrueService.java
@@ -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> {
+
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/TStoreOtherService.java b/cloud-server-other/src/main/java/com/dsh/other/service/TStoreOtherService.java
new file mode 100644
index 0000000..db1f636
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/service/TStoreOtherService.java
@@ -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> {
+
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/impl/BannerServiceImpl.java b/cloud-server-other/src/main/java/com/dsh/other/service/impl/BannerServiceImpl.java
index 7141a16..376f464 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/service/impl/BannerServiceImpl.java
+++ b/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);
     }
+
+
 }
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java b/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
index 1c5a8eb..e2eb379 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
+++ b/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<>();
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/impl/TStoreOtherConfigTrueServiceImpl.java b/cloud-server-other/src/main/java/com/dsh/other/service/impl/TStoreOtherConfigTrueServiceImpl.java
new file mode 100644
index 0000000..32b37fd
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/service/impl/TStoreOtherConfigTrueServiceImpl.java
@@ -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 {
+
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/impl/TStoreOtherServiceImpl.java b/cloud-server-other/src/main/java/com/dsh/other/service/impl/TStoreOtherServiceImpl.java
new file mode 100644
index 0000000..80ae476
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/service/impl/TStoreOtherServiceImpl.java
@@ -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 {
+
+}
diff --git a/cloud-server-other/src/main/resources/mapper/BannerMapper.xml b/cloud-server-other/src/main/resources/mapper/BannerMapper.xml
index 70ff0c9..dc7ae6b 100644
--- a/cloud-server-other/src/main/resources/mapper/BannerMapper.xml
+++ b/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>
diff --git a/cloud-server-other/src/main/resources/mapper/TStoreOtherConfigTrueMapper.xml b/cloud-server-other/src/main/resources/mapper/TStoreOtherConfigTrueMapper.xml
new file mode 100644
index 0000000..8752b1b
--- /dev/null
+++ b/cloud-server-other/src/main/resources/mapper/TStoreOtherConfigTrueMapper.xml
@@ -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>
diff --git a/cloud-server-other/src/main/resources/mapper/TStoreOtherMapper.xml b/cloud-server-other/src/main/resources/mapper/TStoreOtherMapper.xml
new file mode 100644
index 0000000..dcb2212
--- /dev/null
+++ b/cloud-server-other/src/main/resources/mapper/TStoreOtherMapper.xml
@@ -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>

--
Gitblit v1.7.1