From 6357f89bf38b83b779e233249c2b0e480b78e164 Mon Sep 17 00:00:00 2001
From: luo <2855143437@qq.com>
Date: 星期六, 23 九月 2023 17:24:16 +0800
Subject: [PATCH] 学员

---
 cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml                                   |    6 
 cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java                        |  405 ++++++++
 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord.html               |    3 
 cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml                                    |    4 
 cloud-server-other/src/main/java/com/dsh/other/controller/BannerController.java                                 |    8 
 cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java                                 |    9 
 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 
 .idea/workspace.xml                                                                                             |  169 ++-
 cloud-server-activity/src/main/java/com/dsh/activity/mapper/CouponMapper.java                                   |    6 
 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-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java                    |   96 +
 cloud-server-account/src/main/resources/mapper/TStudentMapper.xml                                               |    7 
 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/coursePackageStudent.html             |    5 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/other/HistoryClient.java                       |    4 
 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/controller/code/TCoursePackageController.java |  101 +
 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackagePaymentConfig.java   |    1 
 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/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-course/pom.xml                                                                                     |    6 
 cloud-server-course/src/main/java/com/dsh/course/feignclient/account/AppUserClient.java                         |    2 
 cloud-server-other/src/main/resources/mapper/BannerMapper.xml                                                   |    3 
 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java                 |   17 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackagePayment.java        |   11 
 cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java                            |   43 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java        |   20 
 cloud-server-course/src/main/java/com/dsh/course/feignclient/account/StudentClient.java                         |    4 
 .idea/modules.xml                                                                                               |    1 
 cloud-server-management/pom.xml                                                                                 |   15 
 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-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit_first.html                    |    6 
 cloud-server-course/src/main/java/com/dsh/course/entity/dto/ClassListDto.java                                   |    8 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java                     |    4 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html               |   11 
 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-management/src/main/webapp/static/modular/system/coursePackage/coursePackage_info.js               |   83 +
 cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/CouponListOfSearch.java         |    2 
 cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java                  |    4 
 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/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java         |    4 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TStudent.java                           |    4 
 cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackageStudent.js             |   26 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseStuddentClient.java               |   56 +
 59 files changed, 2,466 insertions(+), 472 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..de4ad98 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -23,43 +23,65 @@
   </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/feignclient/course/CoursePaymentClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.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-activity/src/main/java/com/dsh/activity/feignclient/model/CouponListOfSearch.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/CouponListOfSearch.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/mapper/CouponMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/mapper/CouponMapper.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/CouponServiceImpl.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-activity/src/main/resources/mapper/CouponMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-activity/src/main/resources/mapper/CouponMapper.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-course/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/controller/CancelSourceController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/controller/CancelSourceController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackagePaymentConfig.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/entity/CoursePackagePaymentConfig.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackage.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackage.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/entity/dto/ClassListDto.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/entity/dto/ClassListDto.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.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/feignclient/account/StudentClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/StudentClient.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/java/com/dsh/course/util/ResultUtil.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/util/ResultUtil.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/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/pom.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/dto/ClassListDto.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/dto/ClassListDto.java" 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/course/feignClient/activity/model/CouponListOfSearch.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/activity/model/CouponListOfSearch.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackagePaymentClient.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseStuddentClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseStuddentClient.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackagePaymentConfig.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/CoursePackagePaymentConfig.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackage.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackage.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackagePayment.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/TCoursePackagePayment.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/HistoryClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/feignClient/other/HistoryClient.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.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/java/com/dsh/guns/modular/system/model/TStudent.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TStudent.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/CoursePackageService.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/classRecord.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/classRecord.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackageStudent.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackageStudent.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/registrationRecord.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-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit_first.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tStudent/tStudentEdit_first.html" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/classRecord.js" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/classRecord.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackageStudent.js" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackageStudent.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage_info.js" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage_info.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord.js" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/registrationRecord.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/entity/GetHistoryDto.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/entity/GetHistoryDto.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" />
+      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/resources/mapper/BannerMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/resources/mapper/BannerMapper.xml" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -97,48 +119,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 +174,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 +273,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 +313,20 @@
       <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="24288000" />
     </task>
     <task id="LOCAL-00001" summary="后台代码删除">
       <created>1690249807612</created>
@@ -407,6 +466,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/StudentController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java
index e3b035a..5341278 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,24 +1,23 @@
 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.TAppUserService;
 import com.dsh.account.service.TStudentService;
 import com.dsh.account.util.ResultUtil;
 import com.dsh.account.util.TokenUtil;
-import io.micrometer.core.instrument.search.Search;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-import jdk.nashorn.internal.ir.annotations.Ignore;
 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;
@@ -133,6 +132,8 @@
     }
 
 
+
+
     /**
      * 根据名称模糊搜索学员
      * @param name
@@ -188,4 +189,32 @@
 
         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/feignclient/course/CoursePaymentClient.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java
index 9d6d07e..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);
 
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/service/TStudentService.java b/cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java
index 008f808..28932bf 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;
@@ -113,4 +111,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/TStudentServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java
index 3d66997..b47bd81 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;
@@ -836,5 +830,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 5c556a6..da36346 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;
@@ -30,6 +31,7 @@
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.models.auth.In;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -933,6 +935,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);
@@ -1055,6 +1062,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
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/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/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/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/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/service/impl/TCoursePackageServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java
index 27a1c55..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
@@ -1219,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 3e08177..72b98e5 100644
--- a/cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml
+++ b/cloud-server-course/src/main/resources/mapper/CoursePackageStudentMapper.xml
@@ -46,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 9d7f250..64e77bc 100644
--- a/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml
+++ b/cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml
@@ -131,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 beea36f..6016a36 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.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -57,4 +59,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 3bfda52..224d9c8 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
@@ -50,4 +50,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/guns/modular/system/controller/code/TCouponController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCouponController.java
index db73c5c..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
@@ -224,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) {
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 62c7ec2..68e7007 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,13 +20,11 @@
 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.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.util.*;
@@ -102,7 +99,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();
@@ -125,6 +122,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";
     }
 
@@ -170,11 +172,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";
     }
 
@@ -225,6 +233,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";
     }
 
@@ -272,6 +281,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);
@@ -279,6 +309,9 @@
         return PREFIX + "registrationRecord.html";
     }
 
+
+    @Resource
+    @Autowired CoursePackagePaymentClient packagePaymentClient;
 
     /**
      * 跳转到上课记录列表页
@@ -289,11 +322,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";
     }
 
@@ -486,11 +533,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/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/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/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/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/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/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/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-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/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/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/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/resources/mapper/BannerMapper.xml b/cloud-server-other/src/main/resources/mapper/BannerMapper.xml
index 254f4bf..f95fd97 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>

--
Gitblit v1.7.1