44323
2023-11-14 ddbb38c54db9c3670e5ff53f4bf713525de1099d
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
@@ -54,10 +54,7 @@
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.*;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
@@ -333,7 +330,8 @@
                    re.setBuyTypeName("手动支付"+"-"+re.getBuyTypeName());
                }
            }
            BigDecimal subtract = re.getOriginalPrice().subtract(re.getCashPayment());
            re.setDiscountAmount(subtract);
            // 如果支付用户类型为管理员 则购买方式则为1线下购买
            if (re.getPayUserType()!=null){
                if (re.getPayUserType()== 2){
@@ -379,21 +377,22 @@
        }
        List<RegisterOrderVO> res = packagePaymentService.listAllRegister(query);
        // 该运营商下没有门店
        if (query.getStoresIds()!=null){
            if (query.getStoresIds().size()==0){
        if (query.getInsertType() == 2){
            if (query.getStoresIds()!=null){
                if (query.getStoresIds().size()==0){
                    List<RegisterOrderVO> registerOrderVOS = new ArrayList<>();
                    return registerOrderVOS;
                }
            }else{
                List<RegisterOrderVO> registerOrderVOS = new ArrayList<>();
                return registerOrderVOS;
            }
        }else{
            List<RegisterOrderVO> registerOrderVOS = new ArrayList<>();
            return registerOrderVOS;
        }
        List<RegisterOrderVO> result = new ArrayList<>();
        Iterator<RegisterOrderVO> iterator = res.iterator();
        while (iterator.hasNext()) {
            RegisterOrderVO re = iterator.next();
            if (re.getSalesName() == null) {
                re.setSalesName("无");
            }
@@ -404,18 +403,17 @@
                    re.setPayMoneyAndType("¥" + re.getMoney());
                }
            }
            Store store = storeClient.queryStoreById(re.getStoreId());
            if (re.getStoreId()!=null){
                Store store = storeClient.queryStoreById(re.getStoreId());
                if (store!=null){
                    re.setStoreName(store.getName());
                }
            }
            TAppUser appUser = appUserClient.queryAppUser1(re.getAppUserId());
            Student student = studentClient.queryStudentById(re.getStudentId());
            re.setPayStudent(student.getName());
            re.setPayUser(appUser.getName());
            re.setPhone(appUser.getPhone());
            re.setStoreName(store.getName());
            // 在这里添加条件来删除不满足要求的元素
            if (query.getInsertType() !=null && appUser.getInsertType() != query.getInsertType()) {
                iterator.remove(); // 使用迭代器的 remove 方法删除元素
            }
        }
        return res;
    }
@@ -437,6 +435,9 @@
        if (byUserId.size() > 0 ){
            for (TCoursePackagePayment tCoursePackagePayment : byUserId) {
                TCoursePackage tCoursePackage = tcpService.getById(tCoursePackagePayment.getCoursePackageId());
                if (tCoursePackage.getType()==3){
                    continue;
                }
                StuCourseResp resp = new StuCourseResp();
                resp.setCourseId(tCoursePackage.getId());
                resp.setId(tCoursePackagePayment.getId());
@@ -1004,6 +1005,7 @@
     */
    @PostMapping("/base/coursePackage/alipayRegisteredCoursesCallback")
    public void alipayCallback(HttpServletRequest request, HttpServletResponse response){
        System.err.println("========支付宝支付回调========");
        try {
            Map<String, String> map = payMoneyUtil.alipayCallback(request);
            if(null != map){
@@ -1089,6 +1091,20 @@
    }
    public static Date[] generateDateArray(int numDays,Date date) {
//        LocalDate tomorrow = LocalDate.now().plusDays(1);
        LocalDate tomorrow = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate().plusDays(1);
        Date[] dates = new Date[numDays];
        for (int i = 0; i < numDays; i++) {
            LocalDate currentDate = tomorrow.plusDays(i);
            dates[i] = Date.from(currentDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
        }
        return dates;
    }
    @Autowired
    private  TCoursePackageService packageService;
    @Autowired
@@ -1102,18 +1118,23 @@
    public void paymentDeductionClassHour(@RequestBody PaymentDeductionClassHour paymentDeductionClassHour){
        try {
            // 2.0 用id进行查询
            List<TCoursePackagePayment> list = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>().eq("id", paymentDeductionClassHour.getCourseId()).eq("payStatus", 2)
            TCoursePackagePayment coursePackagePayment= packagePaymentService.getOne(new QueryWrapper<TCoursePackagePayment>().eq("id", paymentDeductionClassHour.getCourseId()).eq("payStatus", 2)
                    .eq("status", 1).eq("state", 1).gt("laveClassHours", 0));
            Integer classHour = paymentDeductionClassHour.getClassHour();
            for (TCoursePackagePayment coursePackagePayment : list) {
//            for (TCoursePackagePayment coursePackagePayment : list) {
                if (coursePackagePayment.getLaveClassHours().compareTo(classHour) >= 0) {
                    coursePackagePayment.setLaveClassHours(coursePackagePayment.getLaveClassHours() - classHour);
                    coursePackagePayment.setAppUserId(null);
                    packagePaymentService.updateById(coursePackagePayment);
                    coursePackageSchedulingService.remove(new QueryWrapper<CoursePackageScheduling>().eq("courseId", coursePackagePayment.getCoursePackageId()));
                    coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().eq("coursePackageId", coursePackagePayment.getCoursePackageId()));
//                    coursePackageSchedulingService.remove(new QueryWrapper<CoursePackageScheduling>().eq("courseId", coursePackagePayment.getCoursePackageId()));
                    List<CoursePackageStudent> studentCourse = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().eq("studentId", coursePackagePayment.getStudentId()).eq("coursePackageId", coursePackagePayment.getCoursePackageId()));
                    List<Long> collect = studentCourse.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList());
                    coursePackageSchedulingService.remove(new QueryWrapper<CoursePackageScheduling>().in("id",collect));
                    coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().eq("studentId", paymentDeductionClassHour.getId()).eq("coursePackageId", coursePackagePayment.getCoursePackageId()));
@@ -1124,103 +1145,179 @@
                    String classWeeks = tCoursePackage.getClassWeeks();
                    List<Integer> week = week(classWeeks);
                    List<TCoursePackagePayment> pays = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>().eq("coursePackageId", coursePackagePayment.getCoursePackageId()).eq("studentId", coursePackagePayment.getStudentId()));
                    for (TCoursePackagePayment pay : pays) {
                        List<CoursePackageStudent> studentCourse1 = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().eq("studentId", pay.getStudentId()).eq("coursePackageId", pay.getCoursePackageId()));
                        List<Long> collect1 = studentCourse1.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList());
                        //拿到最后一天的排课记录
                        CoursePackageScheduling cs = null;
                        if (collect1.size()>0) {
                            cs = coursePackageSchedulingService.getOne(new QueryWrapper<CoursePackageScheduling>().in("id", collect1).orderByDesc("classDate").last("limit 1"));
                        }
//
//                        Calendar calendar = Calendar.getInstance();
//                        Date currentDate = calendar.getTime();
//                        calendar.add(Calendar.DAY_OF_MONTH, -1);
//                        Date today = calendar.getTime();
                        Date today = new Date();
                        //判断最后一天是否超过当前日期
                        if (cs==null||cs.getClassDate().before(new Date())){
                        }else {
                            today = cs.getClassDate();
                        }
                    Integer laveClassHours = pay.getLaveClassHours();
                    Integer codeTime = tCoursePackage.getCodeTime();
                    Integer can = laveClassHours/codeTime;
                    int count = 0;
                    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");
                    // 本周周几
                    int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date()) - 1;
                    for (Integer integer : week) {
                        if (integer < i) {
                            // 找下一周的时间
                            Calendar instance = Calendar.getInstance();
                            instance.add(Calendar.DATE, 7 - (i - integer));
                            Date time = instance.getTime();
                    Date[] dates = generateDateArray(14,today);
                    for (Date date : dates) {
                        if (count==can){
                            break;
                        }
                        int wei =  cn.hutool.core.date.DateUtil.dayOfWeek(date);
                        if (week.contains(wei)){
                            for (int i1 = 0; i1 < split.length; i1++) {
                                CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                                coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                                Date parse = format1.parse(format.format(time) + " " + split[i1]);
                                Date parse1 = format1.parse(format.format(time) + " " + split1[i1]);
                                coursePackageScheduling.setClassDate(parse);
                                coursePackageScheduling.setEndDate(parse1);
                                coursePackageScheduling.setStatus(1);
                                coursePackageSchedulingService.save(coursePackageScheduling);
                                CoursePackageStudent student1 = new CoursePackageStudent();
                                student1.setAppUserId(student.getAppUserId());
                                student1.setStudentId(student.getId());
                                student1.setCoursePackageId(tCoursePackage.getId());
                                student1.setCoursePackagePaymentId(coursePackagePayment.getId());
                                student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
                                student1.setSignInOrNot(1);
                                student1.setReservationStatus(1);
                                student1.setInsertTime(new Date());
                                studentService.save(student1);
                            }
                        } else if (integer > i) {
                            Calendar instance = Calendar.getInstance();
                            instance.add(Calendar.DATE, integer - i);
                            Date time1 = instance.getTime();
                            List<Date> list6 = new ArrayList<>();
                            list6.add(time1);
                            instance.add(Calendar.DATE, 7);
                            Date time2 = instance.getTime();
                            list6.add(time2);
                            for (Date time : list6) {
                                for (int i1 = 0; i1 < split.length; i1++) {
                                    CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                                    coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                                    Date parse = format1.parse(format.format(time) + " " + split[i1]);
                                    Date parse1 = format1.parse(format.format(time) + " " + split1[i1]);
                                    coursePackageScheduling.setClassDate(parse);
                                    coursePackageScheduling.setEndDate(parse1);
                                    coursePackageScheduling.setStatus(1);
                                    coursePackageSchedulingService.save(coursePackageScheduling);
                                    CoursePackageStudent student1 = new CoursePackageStudent();
                                    student1.setAppUserId(student.getAppUserId());
                                    student1.setStudentId(student.getId());
                                    student1.setCoursePackageId(tCoursePackage.getId());
                                    student1.setCoursePackagePaymentId(coursePackagePayment.getId());
                                    student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
                                    student1.setSignInOrNot(1);
                                    student1.setReservationStatus(1);
                                    student1.setInsertTime(new Date());
                                    studentService.save(student1);
                                if (count==can){
                                    break;
                                }
                            }
                        } else {
                            Calendar instance = Calendar.getInstance();
                            instance.add(Calendar.DATE, 7);
                            Date time = instance.getTime();
                            for (int i1 = 0; i1 < split.length; i1++) {
                                CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                                coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                                Date parse = format1.parse(format.format(time) + " " + split[i1]);
                                Date parse1 = format1.parse(format.format(time) + " " + split1[i1]);
                                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.save(coursePackageScheduling);
                                CoursePackageStudent student1 = new CoursePackageStudent();
                                student1.setAppUserId(student.getAppUserId());
                                student1.setStudentId(student.getId());
                                student1.setCoursePackageId(tCoursePackage.getId());
                                student1.setCoursePackagePaymentId(coursePackagePayment.getId());
                                student1.setAppUserId(pay.getAppUserId());
                                student1.setStudentId(pay.getStudentId());
                                student1.setCoursePackageId(pay.getCoursePackageId());
                                student1.setCoursePackagePaymentId(pay.getId());
                                student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
                                student1.setSignInOrNot(1);
                                student1.setReservationStatus(1);
                                student1.setInsertTime(new Date());
                                studentService.save(student1);
                                count++;
                            }
                        }
                    }
                    }
//                    // 本周周几
//                    int i = cn.hutool.core.date.DateUtil.dayOfWeek(new Date()) - 1;
//                    for (Integer integer : week) {
//                        if (integer < i) {
//                            // 找下一周的时间
//                            Calendar instance = Calendar.getInstance();
//                            instance.add(Calendar.DATE, 7 - (i - integer));
//                            Date time = instance.getTime();
//
//                            for (int i1 = 0; i1 < split.length; i1++) {
//
//                                CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
//                                coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
//                                Date parse = format1.parse(format.format(time) + " " + split[i1]);
//                                Date parse1 = format1.parse(format.format(time) + " " + split1[i1]);
//                                coursePackageScheduling.setClassDate(parse);
//                                coursePackageScheduling.setEndDate(parse1);
//                                coursePackageScheduling.setStatus(1);
//                                coursePackageSchedulingService.save(coursePackageScheduling);
//                                CoursePackageStudent student1 = new CoursePackageStudent();
//                                student1.setAppUserId(student.getAppUserId());
//                                student1.setStudentId(student.getId());
//                                student1.setCoursePackageId(tCoursePackage.getId());
//                                student1.setCoursePackagePaymentId(coursePackagePayment.getId());
//                                student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
//                                student1.setSignInOrNot(1);
//                                student1.setReservationStatus(1);
//                                student1.setInsertTime(new Date());
//                                studentService.save(student1);
//
//                            }
//
//                        } else if (integer > i) {
//                            Calendar instance = Calendar.getInstance();
//                            instance.add(Calendar.DATE, integer - i);
//                            Date time1 = instance.getTime();
//                            List<Date> list6 = new ArrayList<>();
//                            list6.add(time1);
//                            instance.add(Calendar.DATE, 7);
//                            Date time2 = instance.getTime();
//                            list6.add(time2);
//                            for (Date time : list6) {
//                                for (int i1 = 0; i1 < split.length; i1++) {
//                                    CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
//                                    coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
//                                    Date parse = format1.parse(format.format(time) + " " + split[i1]);
//                                    Date parse1 = format1.parse(format.format(time) + " " + split1[i1]);
//                                    coursePackageScheduling.setClassDate(parse);
//                                    coursePackageScheduling.setEndDate(parse1);
//                                    coursePackageScheduling.setStatus(1);
//                                    coursePackageSchedulingService.save(coursePackageScheduling);
//
//                                    CoursePackageStudent student1 = new CoursePackageStudent();
//                                    student1.setAppUserId(student.getAppUserId());
//                                    student1.setStudentId(student.getId());
//                                    student1.setCoursePackageId(tCoursePackage.getId());
//                                    student1.setCoursePackagePaymentId(coursePackagePayment.getId());
//                                    student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
//                                    student1.setSignInOrNot(1);
//                                    student1.setReservationStatus(1);
//                                    student1.setInsertTime(new Date());
//                                    studentService.save(student1);
//                                }
//                            }
//
//                        } else {
//                            Calendar instance = Calendar.getInstance();
//                            instance.add(Calendar.DATE, 7);
//                            Date time = instance.getTime();
//
//                            for (int i1 = 0; i1 < split.length; i1++) {
//                                CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
//                                coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
//                                Date parse = format1.parse(format.format(time) + " " + split[i1]);
//                                Date parse1 = format1.parse(format.format(time) + " " + split1[i1]);
//                                coursePackageScheduling.setClassDate(parse);
//                                coursePackageScheduling.setEndDate(parse1);
//                                coursePackageScheduling.setStatus(1);
//                                coursePackageSchedulingService.save(coursePackageScheduling);
//
//                                CoursePackageStudent student1 = new CoursePackageStudent();
//                                student1.setAppUserId(student.getAppUserId());
//                                student1.setStudentId(student.getId());
//                                student1.setCoursePackageId(tCoursePackage.getId());
//                                student1.setCoursePackagePaymentId(coursePackagePayment.getId());
//                                student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
//                                student1.setSignInOrNot(1);
//                                student1.setReservationStatus(1);
//                                student1.setInsertTime(new Date());
//                                studentService.save(student1);
//                            }
//                        }
//                    }
                        // 2.0 少于3课时 推送
@@ -1248,7 +1345,7 @@
                        cancelledClasses.setCancelledClassesNumber(classHour);
                        cancelledClasses.setInsertTime(new Date());
                        cancelledClassesService.save(cancelledClasses);
                        break;
                    }else{
                        CancelledClasses cancelledClasses = new CancelledClasses();
                        cancelledClasses.setType(2);
@@ -1264,7 +1361,7 @@
                        classHour -= cancelledClasses.getCancelledClassesNumber();
                    }
                }
//                }
        }catch (Exception e){
@@ -1711,13 +1808,18 @@
                                    in(CoursePackageStudent::getCoursePackagePaymentId, ids)
                    );
                    detailsListVo.setType(1);
                    if(list4.size()>0){
                        Integer signInOrNot = list4.get(0).getSignInOrNot();
                        detailsListVo.setType(1);
                        if(signInOrNot==2){
                            detailsListVo.setType(3);
                        }
                        detailsListVo.setIsType(list4.get(0).getType());
                    }else {
                        detailsListVo.setType(2);
                    }
                } else {