From f1ec85f268b3dfd206cb756bd19ed1594c4bff7e Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 28 十一月 2023 19:43:19 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/PlayPai

---
 cloud-server-course/src/main/java/com/dsh/course/feignclient/account/StudentClient.java               |    6 +
 cloud-server-account/src/main/java/com/dsh/account/entity/TStudent.java                               |    1 
 cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java              |    3 
 cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java |   17 +++-
 cloud-server-course/src/main/java/com/dsh/course/feignclient/account/model/Student.java               |    5 +
 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java          |  184 ++++++++++++++++++++++++++++++++++++++++++++-
 6 files changed, 205 insertions(+), 11 deletions(-)

diff --git a/cloud-server-account/src/main/java/com/dsh/account/entity/TStudent.java b/cloud-server-account/src/main/java/com/dsh/account/entity/TStudent.java
index 15142ba..7dde998 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/entity/TStudent.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/entity/TStudent.java
@@ -108,6 +108,7 @@
      * 所有课时有效期
      */
     @TableField("validity")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date validity;
 
 
diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
index bb4fc3d..a025fe7 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
@@ -303,6 +303,7 @@
                 ;
             }
         }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         if (tStudents.size() > 0) {
             TStudent tStudent = tStudents.get(0);
             classInfoVo.setStuId(tStudent.getId());
@@ -328,7 +329,7 @@
                     course.setTotalNums(ToolUtil.isEmpty(tCoursePackagePayment.getTotalCourseNums()) ? 0 : tCoursePackagePayment.getTotalCourseNums());
                     course.setDeductedNums(ToolUtil.isEmpty(tCoursePackagePayment.getDeductionNums()) ? 0 : tCoursePackagePayment.getDeductionNums());
                     course.setRemainingNums(ToolUtil.isEmpty(tCoursePackagePayment.getResidueNums()) ? 0 : tCoursePackagePayment.getResidueNums());
-                    course.setPeriodOfValidity(tCoursePackagePayment.getPeriodOfValidity());
+                    course.setPeriodOfValidity(sdf.format(tStudent.getValidity()));
                     course.setIsAble(tCoursePackagePayment.getIsAble());
                     course.setCourseType(tCoursePackagePayment.getCourseType());
                     courseList.add(course);
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 e7ef08b..31eedce 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
@@ -57,4 +57,10 @@
     List<TStudent> queryTStudentListByName(@RequestBody String name);
 
 
+    /**
+     * 修改数据
+     * @param student
+     */
+    @PostMapping("/student/frozen")
+    void frozen(@RequestBody Student student);
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/model/Student.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/model/Student.java
index 2f41ab3..48b858c 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/model/Student.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/account/model/Student.java
@@ -70,4 +70,9 @@
      * 是否默认 1默认 2不是默认
      */
     private Integer isDefault;
+    /**
+     * 所有课时有效期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date validity;
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java
index 7b2c2fb..0f46a7b 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/CoursePackageSchedulingServiceImpl.java
@@ -5,6 +5,8 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dsh.course.controller.CoursePackagePaymentController;
 import com.dsh.course.entity.*;
+import com.dsh.course.feignclient.account.StudentClient;
+import com.dsh.course.feignclient.account.model.Student;
 import com.dsh.course.mapper.CoursePackageSchedulingMapper;
 import com.dsh.course.mapper.CoursePackageStudentMapper;
 import com.dsh.course.model.QueryCoursePackageSchedulingList;
@@ -44,6 +46,9 @@
 
     @Resource
     private CoursePackageStudentMapper coursePackageStudentMapper;
+
+    @Resource
+    private StudentClient studentClient;
 
 
     /**
@@ -157,6 +162,8 @@
                     .orderByDesc("classDate")
                     .last(" limit 0, 1")
             );
+            Student student = studentClient.queryStudentById(coursePackageScheduling.getStudentId());
+            Date validity = student.getValidity();
             TCoursePackage coursePackage = coursePackageService.getById(coursePackageScheduling.getCoursePackageId());
             //上课星期
             String classWeeks = coursePackage.getClassWeeks();
@@ -206,7 +213,7 @@
                     continue;
                 }
                 //大于有效期不进行排课
-                if (start.getTimeInMillis() >= useTime.getTime()) {
+                if (start.getTimeInMillis() >= validity.getTime()) {
                     break;
                 }
                 for (int j = 0; j < split.length; j++) {
@@ -303,6 +310,8 @@
         Integer codeTime = coursePackage.getCodeTime();
         Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours();
         Date classDate = coursePackageScheduling.getClassDate();
+        Student student = studentClient.queryStudentById(coursePackageScheduling.getStudentId());
+        Date validity = student.getValidity();
 
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(new Date());
@@ -319,7 +328,7 @@
             //从第二天开始
             Calendar startTime = Calendar.getInstance();
             startTime.setTime(new Date());
-            startTime.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
+            startTime.set(Calendar.DAY_OF_YEAR, startTime.get(Calendar.DAY_OF_YEAR) + 1);
             startTime.set(Calendar.HOUR_OF_DAY, 0);
             startTime.set(Calendar.MINUTE, 0);
             startTime.set(Calendar.SECOND, 0);
@@ -342,7 +351,7 @@
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
             SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
             String format = sdf.format(coursePackageScheduling.getClassDate());
-            String time = format.substring(format.indexOf(" "));
+            String time = format.substring(format.indexOf(" ") + 1);
             String classStartTime = coursePackage.getClassStartTime();
             String classEndTime = coursePackage.getClassEndTime();
             String[] split = classStartTime.split(",");
@@ -397,7 +406,7 @@
                 }
 
                 //大于有效期不进行排课
-                if (startTime.getTimeInMillis() >= useTime.getTime()) {
+                if (startTime.getTimeInMillis() >= validity.getTime()) {
                     break;
                 }
                 for (int j = 0; j < split.length; j++) {
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 953ae02..ea7de54 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
@@ -103,6 +103,9 @@
     @Autowired
     private TCoursePackageService coursePackageService;
 
+    @Resource
+    private CoursePackageStudentMapper coursePackageStudentMapper;
+
 
     @Override
     public List<CourseOfStoreVo> queryStoreOfCourse() {
@@ -1174,6 +1177,8 @@
         String[] split = coursePackageOrder.getStudentIds().split(";");
         for (String id : split) {
             if(coursePackage.getType() == 1){
+                //增加学员课时有效期
+                Student student = studentClient.queryStudentById(Integer.valueOf(id));
                 CoursePackageOrderStudent coursePackageOrderStudent = coursePackageOrderStudentService.getOne(new QueryWrapper<CoursePackageOrderStudent>().eq("studentId", id)
                         .eq("coursePackageId", coursePackageOrder.getCoursePackageId()).eq("status", 1).eq("state", 1));
                 if (null == coursePackageOrderStudent) {
@@ -1195,9 +1200,18 @@
                     calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + validDays);
                     coursePackageOrderStudent.setUseTime(calendar.getTime());
                     coursePackageOrderStudentService.saveOrUpdate(coursePackageOrderStudent);
+                    //更新学员课时有效期
+                    if(null == student.getValidity()){
+                        student.setValidity(calendar.getTime());
+                        addOldPackageStudent(student);
+                    }else if(calendar.getTimeInMillis() > student.getValidity().getTime()){
+                        student.setValidity(calendar.getTime());
+                        addOldPackageStudent(student);
+                    }
+                    studentClient.frozen(student);
 
                     //开始排课
-                    addPackageStudent(coursePackage, coursePackageOrder.getAppUserId(), Integer.valueOf(id), coursePackageOrderStudent);
+                    addPackageStudent(coursePackage, coursePackageOrder.getAppUserId(), Integer.valueOf(id), coursePackageOrderStudent, student.getValidity());
                 } else {
                     Date useTime = coursePackageOrderStudent.getUseTime();
                     coursePackageOrderStudent.setTotalClassHours(coursePackageOrderStudent.getTotalClassHours() + coursePackagePaymentConfig.getClassHours());
@@ -1208,9 +1222,19 @@
                     calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + validDays);
                     coursePackageOrderStudent.setUseTime(calendar.getTime());
                     coursePackageOrderStudentService.saveOrUpdate(coursePackageOrderStudent);
+                    //更新学员课时有效期
+                    if(null == student.getValidity()){
+                        student.setValidity(calendar.getTime());
+                        addOldPackageStudent(student);
+                    }else if(calendar.getTimeInMillis() > student.getValidity().getTime()){
+                        student.setValidity(calendar.getTime());
+                        addOldPackageStudent(student);
+                    }
+                    studentClient.frozen(student);
+
                     //中间断课,没有连续续费的情况需要重新排课
                     if (useTime.compareTo(new Date()) < 0) {
-                        addPackageStudent(coursePackage, coursePackageOrder.getAppUserId(), Integer.valueOf(id), coursePackageOrderStudent);
+                        addPackageStudent(coursePackage, coursePackageOrder.getAppUserId(), Integer.valueOf(id), coursePackageOrderStudent, student.getValidity());
                     }
                 }
                 CourseCounsum courseCounsum = new CourseCounsum();
@@ -1224,7 +1248,7 @@
 
             }
             if(coursePackage.getType() == 2){
-                addPackageStudent(coursePackage, coursePackageOrder.getAppUserId(), Integer.valueOf(id), null);
+                addPackageStudent(coursePackage, coursePackageOrder.getAppUserId(), Integer.valueOf(id), null, null);
             }
         }
     }
@@ -1237,7 +1261,7 @@
      * @param sId
      * @throws ParseException
      */
-    private void addPackageStudent(TCoursePackage tCoursePackage, Integer userId, Integer sId, CoursePackageOrderStudent coursePackageOrderStudent) {
+    private void addPackageStudent(TCoursePackage tCoursePackage, Integer userId, Integer sId, CoursePackageOrderStudent coursePackageOrderStudent, Date validity) {
         try {
             //1常规 2假期 3体验
             if (tCoursePackage.getType() == 1) {
@@ -1265,7 +1289,6 @@
                 int day_week = calendar.get(Calendar.DAY_OF_WEEK);
                 day_week = day_week - 1 == 0 ? 7 : day_week - 1;
                 int num = 8 - day_week + 7;
-                Date useTime = coursePackageOrderStudent.getUseTime();
 
                 for (int i = 0; i < num; i++) {
                     Date time = calendar.getTime();
@@ -1280,7 +1303,7 @@
 
 
                     //大于有效期不进行排课
-                    if (calendar.getTimeInMillis() >= useTime.getTime()) {
+                    if (calendar.getTimeInMillis() >= validity.getTime()) {
                         break;
                     }
                     for (int j = 0; j < split.length; j++) {
@@ -1383,6 +1406,155 @@
     }
 
 
+    /**
+     * 课时有效期更新后-更新历史排课数据
+     * @param student
+     */
+    public void addOldPackageStudent(Student student){
+        Integer studentId = student.getId();
+        Date validity = student.getValidity();
+        List<CoursePackageOrderStudent> list = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>()
+                .eq("studentId", studentId)
+                .eq("status", 1)
+                .gt("laveClassHours", 0)
+                .eq("state", 1)
+        );
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        for (CoursePackageOrderStudent coursePackageOrderStudent : list) {
+            TCoursePackage coursePackage = coursePackageService.getById(coursePackageOrderStudent.getCoursePackageId());
+            CoursePackageScheduling one = coursePackageSchedulingService.getOne(new QueryWrapper<CoursePackageScheduling>()
+                    .eq("studentId", studentId)
+                    .eq("coursePackageId", coursePackageOrderStudent.getCoursePackageId())
+                    .eq("status", 1)
+                    .orderByDesc("classDate")
+                    .last(" limit 0, 1")
+            );
+
+            Calendar calendar = Calendar.getInstance();
+            if(null == one){
+                calendar.setTime(new Date());
+                calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
+            }else{
+                Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours();
+                Integer codeTime = coursePackage.getCodeTime();
+                String classStartTime = coursePackage.getClassStartTime();
+                String classEndTime = coursePackage.getClassEndTime();
+                String format = sdf1.format(one.getClassDate());
+                String time = format.substring(format.indexOf(" ") + 1);
+                String[] split = classStartTime.split(",");
+                String[] split1 = classEndTime.split(",");
+                int n = Arrays.asList(split).indexOf(time);
+                if(n != split.length - 1){
+                    calendar.setTime(one.getClassDate());
+                    //单独处理当天的剩余时间段
+                    n++;
+                    for (int i = n; i < split.length; i++) {
+                        //剩余数量不足以排课
+                        if (laveClassHours.compareTo(codeTime) < 0) {
+                            break;
+                        }
+                        laveClassHours -= codeTime;
+                        CoursePackageScheduling packageScheduling = new CoursePackageScheduling();
+                        packageScheduling.setType(coursePackage.getType());
+                        packageScheduling.setAppUserId(coursePackageOrderStudent.getAppUserId());
+                        packageScheduling.setStudentId(coursePackageOrderStudent.getStudentId());
+                        packageScheduling.setCoursePackageId(coursePackage.getId());
+                        try {
+                            Date parse = sdf.parse(format.format(time) + " " + split[i]);
+                            Date parse1 = sdf.parse(format.format(time) + " " + split1[i]);
+                            packageScheduling.setClassDate(parse);
+                            packageScheduling.setEndDate(parse1);
+                        }catch (Exception e){
+                            e.printStackTrace();
+                        }
+                        packageScheduling.setStatus(1);
+                        coursePackageSchedulingService.save(packageScheduling);
+                        CoursePackageStudent student1 = new CoursePackageStudent();
+                        student1.setAppUserId(coursePackageOrderStudent.getAppUserId());
+                        student1.setStudentId(coursePackageOrderStudent.getStudentId());
+                        student1.setCoursePackageId(coursePackage.getId());
+                        student1.setCoursePackagePaymentId(coursePackageOrderStudent.getId());
+                        student1.setCoursePackageSchedulingId(packageScheduling.getId());
+                        student1.setSignInOrNot(1);
+                        student1.setReservationStatus(1);
+                        student1.setInsertTime(new Date());
+                        coursePackageStudentMapper.insert(student1);
+                    }
+
+                }else{
+                    calendar.setTime(one.getClassDate());
+                    calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
+                    calendar.set(Calendar.HOUR_OF_DAY, 0);
+                    calendar.set(Calendar.MINUTE, 0);
+                    calendar.set(Calendar.SECOND, 0);
+                    int day_week1 = calendar.get(Calendar.DAY_OF_WEEK);
+                    day_week1 = day_week1 - 1 == 0 ? 7 : day_week1 - 1;
+                    int num = 8 - day_week1 + 7;
+
+                    //上课星期
+                    String classWeeks = coursePackage.getClassWeeks();
+                    List<Integer> week = week(classWeeks);
+
+                    for (int i = 0; i < num; i++) {
+                        Date time1 = calendar.getTime();
+
+                        //判断当天是否在排课星期内
+                        int day = calendar.get(Calendar.DAY_OF_WEEK);
+                        day = day - 1 == 0 ? 7 : day - 1;
+                        if (!week.contains(day)) {
+                            calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
+                            continue;
+                        }
+
+                        //大于有效期不进行排课
+                        if (calendar.getTimeInMillis() >= validity.getTime()) {
+                            break;
+                        }
+                        for (int j = 0; j < split.length; j++) {
+                            //剩余数量不足以排课
+                            if (laveClassHours.compareTo(codeTime) < 0) {
+                                break;
+                            }
+
+                            laveClassHours -= codeTime;
+
+                            CoursePackageScheduling packageScheduling = new CoursePackageScheduling();
+                            packageScheduling.setType(coursePackage.getType());
+                            packageScheduling.setAppUserId(coursePackageOrderStudent.getAppUserId());
+                            packageScheduling.setStudentId(coursePackageOrderStudent.getStudentId());
+                            packageScheduling.setCoursePackageId(coursePackage.getId());
+                            try {
+                                Date parse = sdf.parse(sdf1.format(time1) + " " + split[j]);
+                                Date parse1 = sdf.parse(sdf1.format(time1) + " " + split1[j]);
+                                packageScheduling.setClassDate(parse);
+                                packageScheduling.setEndDate(parse1);
+                            }catch (Exception e){
+                                e.printStackTrace();
+                            }
+                            packageScheduling.setStatus(1);
+                            coursePackageSchedulingService.save(packageScheduling);
+                            CoursePackageStudent student1 = new CoursePackageStudent();
+                            student1.setAppUserId(coursePackageOrderStudent.getAppUserId());
+                            student1.setStudentId(coursePackageOrderStudent.getStudentId());
+                            student1.setCoursePackageId(coursePackage.getId());
+                            student1.setCoursePackagePaymentId(coursePackageOrderStudent.getId());
+                            student1.setCoursePackageSchedulingId(packageScheduling.getId());
+                            student1.setSignInOrNot(1);
+                            student1.setReservationStatus(1);
+                            student1.setInsertTime(new Date());
+                            coursePackageStudentMapper.insert(student1);
+                        }
+                        //增加日期,用于判断
+                        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
+                    }
+                }
+            }
+        }
+    }
+
+
+
     public static Date[] generateDateArray1(Date startDate, Date endDate) {
         List<Date> dateList = new ArrayList<>();
         Calendar calendar = Calendar.getInstance();

--
Gitblit v1.7.1