From 3c12858927ce26f277ba758e520c81be599d8df1 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 28 十一月 2023 15:42:24 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java |  348 +++++++++++++++++++++++++++++++++------------------------
 1 files changed, 200 insertions(+), 148 deletions(-)

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 18e5477..6b9bbdc 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
@@ -174,15 +174,29 @@
     @Resource
     private AppUserClient appUserClient;
 
+
+    @Autowired
+    private ICoursePackageOrderStudentService orderStudentService;
     //获取可转移学员
     @RequestMapping("/getSelect")
     @ResponseBody
     public List<SelectDto> getSelect(@RequestParam("payId") Long payId) {
 
-        TCoursePackagePayment byId = paymentService.getById(payId);
+//        TCoursePackagePayment byId = paymentService.getById(payId);
+//
+//        List<Integer> studentIds = paymentService.getStudentIds(payId, byId.getCoursePackageId(), byId.getAppUserId());
+//        System.out.println("=========studentIds=================>" + studentIds);
 
-        List<Integer> studentIds = paymentService.getStudentIds(payId, byId.getCoursePackageId(), byId.getAppUserId());
-        System.out.println("=========studentIds=================>" + studentIds);
+        CoursePackageOrderStudent coursePackageOrderStudent = orderStudentService.getById(payId);
+
+
+        List<CoursePackageOrderStudent> orderStudent = orderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>().eq("appUserId", coursePackageOrderStudent.getAppUserId()).eq("coursePackageId", coursePackageOrderStudent.getCoursePackageId()).ne("id",payId));
+
+        List<Integer> studentIds = new ArrayList<>();
+        for (CoursePackageOrderStudent packageOrderStudent : orderStudent) {
+            studentIds.add(packageOrderStudent.getStudentId());
+        }
+
 
         if (studentIds.size() > 0) {
             List<SelectDto> selectDtos = appUserClient.getSelects(studentIds);
@@ -269,8 +283,7 @@
     }
 
 
-    @Autowired
-    private ICoursePackageOrderStudentService orderStudentService;
+
 
     @RequestMapping("/insertBack")
     @ResponseBody
@@ -416,38 +429,47 @@
         return moneyBacksck;
     }
 
+
+
+    @Autowired
+    private ICoursePackageSchedulingService schedulingService;
+
     //课程转移
     @RequestMapping("/toClass")
     @ResponseBody
     public void toClass(@RequestBody ToClassDto toClassDto) throws ParseException {
-        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()));
+//        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()));
+
+
+        CoursePackageOrderStudent orinPay = orderStudentService.getById(toClassDto.getId());
+
+        CoursePackageOrderStudent studentPay = orderStudentService.getOne(new QueryWrapper<CoursePackageOrderStudent>().eq("studentId", toClassDto.getToStudentId()).eq("coursePackageId", orinPay.getCoursePackageId()));
+
+        TCoursePackage coursePackage = packageService.getById(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.setStatus(1);
+            orinPay.setStatus(5);
             orinPay.setAppUserId(null);
-            paymentService.updateById(orinPay);
-            //删除orin的排课记录
-            List<CoursePackageStudent> studentCourse1 = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().eq("studentId", orinPay.getStudentId()).eq("coursePackageId", orinPay.getCoursePackageId()));
-            List<Long> collect1 = studentCourse1.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList());
-            //拿到最后一天的排课记录
-            if (collect1.size() > 0) {
-                coursePackageSchedulingService.delete(new QueryWrapper<CoursePackageScheduling>().in("id", collect1));
-                coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().eq("studentId", toClassDto.getToStudentId()).eq("coursePackageId", studentPay.getCoursePackageId()));
-            }
+            orderStudentService.updateById(orinPay);
+
+
             CourseCounsum courseCounsum = new CourseCounsum();
             courseCounsum.setInsertTime(new Date());
             if (orinPay.getAppUserId() != studentPay.getAppUserId()) {
-                courseCounsum.setReason("课时转移");
+                courseCounsum.setReason("课时赠送");
             } else {
                 courseCounsum.setReason("课时转移");
             }
@@ -464,12 +486,12 @@
             studentPay.setAppUserId(null);
             studentPay.setLaveClassHours(lave);
             studentPay.setTotalClassHours(total);
-            paymentService.updateById(studentPay);
+            orderStudentService.updateById(studentPay);
 
             CourseCounsum courseCounsum1 = new CourseCounsum();
             courseCounsum1.setInsertTime(new Date());
             if (orinPay.getAppUserId() != studentPay.getAppUserId()) {
-                courseCounsum1.setReason("课时转移");
+                courseCounsum1.setReason("课时赠送");
             } else {
                 courseCounsum1.setReason("课时转移");
             }
@@ -479,112 +501,47 @@
             counsumService.save(courseCounsum1);
 
 
-            //排课
-            TCoursePackage tCoursePackage = packageService.getById(studentPay.getCoursePackageId());
-            String classWeeks = tCoursePackage.getClassWeeks();
-            List<Integer> week = week(classWeeks);
-
-            String[] split = tCoursePackage.getClassStartTime().split(",");
-            String[] split1 = tCoursePackage.getClassEndTime().split(",");
-            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
-            SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
-            // 本周周几
-
-            List<CoursePackageStudent> studentCourse = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().eq("studentId", toClassDto.getToStudentId()).eq("coursePackageId", studentPay.getCoursePackageId()));
-            List<Long> collect = studentCourse.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList());
-            //拿到最后一天的排课记录
-            if (collect.size() > 0) {
-                coursePackageSchedulingService.delete(new QueryWrapper<CoursePackageScheduling>().in("id", collect));
-                coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().eq("studentId", toClassDto.getToStudentId()).eq("coursePackageId", studentPay.getCoursePackageId()));
-            }
-
-            Student student = studentClient.queryStudentById(toClassDto.getToStudentId());
-
-            Date today = new Date();
-
-
-            TCoursePackagePayment pay = coursePackagePaymentService.getById(studentPay.getId());
-            Integer laveClassHours2 = pay.getLaveClassHours();
-            Integer codeTime = tCoursePackage.getCodeTime();
-            Integer can = 0;
-            int count = 0;
-            // 本周周几
-//        int i = DateUtil.dayOfWeek(new Date())-1;
-
-            Date[] dates = generateDateArray(14, today);
-            can = laveClassHours2 / codeTime;
-
-            for (Date date : dates) {
-                if (count == can) {
-                    break;
-                }
-                int wei = DateUtil.dayOfWeek(date);
-                if (week.contains(wei)) {
-                    for (int i1 = 0; i1 < split.length; i1++) {
-                        if (count == can) {
-                            break;
-                        }
-                        CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
-                        coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
-                        Date parse = format1.parse(format.format(date) + " " + split[i1]);
-                        Date parse1 = format1.parse(format.format(date) + " " + split1[i1]);
-                        coursePackageScheduling.setClassDate(parse);
-                        coursePackageScheduling.setEndDate(parse1);
-                        coursePackageScheduling.setStatus(1);
-                        coursePackageSchedulingService.insert(coursePackageScheduling);
-                        CoursePackageStudent student1 = new CoursePackageStudent();
-                        student1.setAppUserId(student.getAppUserId());
-                        student1.setStudentId(student.getId());
-                        student1.setCoursePackageId(tCoursePackage.getId());
-                        student1.setCoursePackagePaymentId(studentPay.getId());
-                        student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
-                        student1.setSignInOrNot(1);
-                        student1.setReservationStatus(1);
-                        student1.setInsertTime(new Date());
-                        cpsMapper.insert(student1);
-                        count++;
-                    }
-                }
-            }
+            schedulingService.addNewCoursePackageScheduling(studentPay.getId(),laveClassHours);
 
 
         } else {
 
 
+
+
             Student student = studentClient.queryStudentById(toClassDto.getToStudentId());
-            TCoursePackagePayment to = new TCoursePackagePayment();
+            CoursePackageOrderStudent to = new CoursePackageOrderStudent();
             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);
+
+            Integer validDays = coursePackage.getValidDays();
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(new Date());
+            calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + validDays);
+            to.setUseTime(calendar.getTime());
+
+            orderStudentService.save(to);
 
 
             orinPay.setTotalClassHours(0);
             orinPay.setLaveClassHours(0);
             orinPay.setAppUserId(null);
-            orinPay.setStatus(1);
-            paymentService.updateById(orinPay);
+            orinPay.setStatus(6);
+            orderStudentService.updateById(orinPay);
 
 
-            //删除orin的排课记录
-            List<CoursePackageStudent> studentCourse1 = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().eq("studentId", orinPay.getStudentId()).eq("coursePackageId", orinPay.getCoursePackageId()));
-            List<Long> collect1 = studentCourse1.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList());
-            //拿到最后一天的排课记录
-            if (collect1.size() > 0) {
-                coursePackageSchedulingService.delete(new QueryWrapper<CoursePackageScheduling>().in("id", collect1));
-                coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().eq("studentId", toClassDto.getToStudentId()).eq("coursePackageId", studentPay.getCoursePackageId()));
-            }
+
 
 
             CourseCounsum courseCounsum = new CourseCounsum();
             courseCounsum.setInsertTime(new Date());
-            courseCounsum.setReason("课时转移");
+            courseCounsum.setReason("课时赠送");
             courseCounsum.setNum(orinPay.getLaveClassHours());
             courseCounsum.setChangeType(0);
             courseCounsum.setPaymentId(orinPay.getId());
@@ -593,82 +550,177 @@
 
             CourseCounsum courseCounsum1 = new CourseCounsum();
             courseCounsum1.setInsertTime(new Date());
-            courseCounsum1.setReason("课时转移");
+            courseCounsum1.setReason("课时赠送");
             courseCounsum1.setNum(orinPay.getLaveClassHours());
             courseCounsum1.setChangeType(1);
             courseCounsum1.setPaymentId(to.getId());
             counsumService.save(courseCounsum);
 
 
-            TCoursePackage tCoursePackage = packageService.getById(studentPay.getCoursePackageId());
-            String classWeeks = tCoursePackage.getClassWeeks();
-            List<Integer> week = week(classWeeks);
 
-            String[] split = tCoursePackage.getClassStartTime().split(",");
-            String[] split1 = tCoursePackage.getClassEndTime().split(",");
-            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
-            SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
-            // 本周周几
-
-            List<CoursePackageStudent> studentCourse = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().eq("studentId", toClassDto.getToStudentId()).eq("coursePackageId", studentPay.getCoursePackageId()));
-            List<Long> collect = studentCourse.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList());
-            //拿到最后一天的排课记录
-            if (collect.size() > 0) {
-                coursePackageSchedulingService.delete(new QueryWrapper<CoursePackageScheduling>().in("id", collect));
-                coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().eq("studentId", toClassDto.getToStudentId()).eq("coursePackageId", studentPay.getCoursePackageId()));
-            }
+                //开始排课
+                addPackageStudent(coursePackage, to.getAppUserId(), to.getStudentId(), to);
 
 
-            Date today = new Date();
 
 
-            TCoursePackagePayment pay = coursePackagePaymentService.getById(studentPay.getId());
-            Integer laveClassHours2 = pay.getLaveClassHours();
-            Integer codeTime = tCoursePackage.getCodeTime();
-            Integer can = 0;
-            int count = 0;
-            // 本周周几
-//        int i = DateUtil.dayOfWeek(new Date())-1;
+        }
 
-            Date[] dates = generateDateArray(14, today);
-            can = laveClassHours2 / codeTime;
 
-            for (Date date : dates) {
-                if (count == can) {
-                    break;
-                }
-                int wei = DateUtil.dayOfWeek(date);
-                if (week.contains(wei)) {
-                    for (int i1 = 0; i1 < split.length; i1++) {
-                        if (count == can) {
+    }
+
+
+
+    /**
+     * 新购买课程后的排课
+     *
+     * @param userId
+     * @param sId
+     * @throws ParseException
+     */
+    private void addPackageStudent(TCoursePackage tCoursePackage, Integer userId, Integer sId, CoursePackageOrderStudent coursePackageOrderStudent) {
+        try {
+            //1常规 2假期 3体验
+            if (tCoursePackage.getType() == 1) {
+                //上课星期
+                String classWeeks = tCoursePackage.getClassWeeks();
+                List<Integer> week = week(classWeeks);
+                //上课时段
+                String[] split = tCoursePackage.getClassStartTime().split(",");
+                String[] split1 = tCoursePackage.getClassEndTime().split(",");
+                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+                SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+
+
+                //剩余课时
+                Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours();
+                //扣除课时数
+                Integer codeTime = tCoursePackage.getCodeTime();
+                //排课 本周+下周,课时不够扣则直接剩余不排课
+                Calendar calendar = Calendar.getInstance();
+                calendar.setTime(new Date());
+                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_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();
+
+                    //判断当天是否在排课星期内
+                    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() >= useTime.getTime()) {
+                        break;
+                    }
+                    for (int j = 0; j < split.length; j++) {
+                        //剩余数量不足以排课
+                        if (laveClassHours.compareTo(codeTime) < 0) {
                             break;
                         }
+
+                        laveClassHours -= codeTime;
+
                         CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
+                        coursePackageScheduling.setType(tCoursePackage.getType());
+                        coursePackageScheduling.setAppUserId(userId);
+                        coursePackageScheduling.setStudentId(sId);
                         coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
-                        Date parse = format1.parse(format.format(date) + " " + split[i1]);
-                        Date parse1 = format1.parse(format.format(date) + " " + split1[i1]);
+                        Date parse = format1.parse(format.format(time) + " " + split[j]);
+                        Date parse1 = format1.parse(format.format(time) + " " + split1[j]);
                         coursePackageScheduling.setClassDate(parse);
                         coursePackageScheduling.setEndDate(parse1);
                         coursePackageScheduling.setStatus(1);
                         coursePackageSchedulingService.insert(coursePackageScheduling);
                         CoursePackageStudent student1 = new CoursePackageStudent();
-                        student1.setAppUserId(student.getAppUserId());
-                        student1.setStudentId(student.getId());
+                        student1.setAppUserId(userId);
+                        student1.setStudentId(sId);
                         student1.setCoursePackageId(tCoursePackage.getId());
-                        student1.setCoursePackagePaymentId(studentPay.getId());
+                        student1.setCoursePackagePaymentId(coursePackageOrderStudent.getId());
                         student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
                         student1.setSignInOrNot(1);
                         student1.setReservationStatus(1);
                         student1.setInsertTime(new Date());
                         cpsMapper.insert(student1);
-                        count++;
                     }
+                    //增加日期,用于判断
+                    calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
                 }
             }
 
+            if (tCoursePackage.getType() == 2) {
+                //上课星期
+                String classWeeks = tCoursePackage.getClassWeeks();
+                List<Integer> week = week(classWeeks);
+                //上课时段
+                String[] split = tCoursePackage.getClassStartTime().split(",");
+                String[] split1 = tCoursePackage.getClassEndTime().split(",");
+                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+                SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+
+                Date startTime = tCoursePackage.getStartTime();
+                Date endTime = tCoursePackage.getEndTime();
+                //排课 本周+下周,课时不够扣则直接剩余不排课
+                Calendar calendar = Calendar.getInstance();
+                //假期开始使用当前时间为起始时间进行排课
+                calendar.setTime(startTime.getTime() > System.currentTimeMillis() ? startTime : new Date());
+                calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
+                while (true) {
+                    Date time = 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() > endTime.getTime()) {
+                        break;
+                    }
+                    for (int j = 0; j < split.length; j++) {
+                        CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
+                        coursePackageScheduling.setType(tCoursePackage.getType());
+                        coursePackageScheduling.setAppUserId(userId);
+                        coursePackageScheduling.setStudentId(sId);
+                        coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
+                        Date parse = format1.parse(format.format(time) + " " + split[j]);
+                        Date parse1 = format1.parse(format.format(time) + " " + split1[j]);
+                        coursePackageScheduling.setClassDate(parse);
+                        coursePackageScheduling.setEndDate(parse1);
+                        coursePackageScheduling.setStatus(1);
+                        coursePackageSchedulingService.insert(coursePackageScheduling);
+                        CoursePackageStudent student1 = new CoursePackageStudent();
+                        student1.setAppUserId(userId);
+                        student1.setStudentId(sId);
+                        student1.setCoursePackageId(tCoursePackage.getId());
+                        student1.setCoursePackagePaymentId(null);
+                        student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
+                        student1.setSignInOrNot(1);
+                        student1.setReservationStatus(1);
+                        student1.setInsertTime(new Date());
+                        cpsMapper.insert(student1);
+                    }
+                    //增加日期,用于判断
+                    calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
         }
-
-
     }
 
     @Resource

--
Gitblit v1.7.1