44323
2023-11-28 fade481769731552d9a16c79c9a5323e6f015b36
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
@@ -16,6 +16,7 @@
import com.dsh.course.feignclient.other.StoreClient;
import com.dsh.course.feignclient.other.model.Store;
import com.dsh.course.mapper.CoursePackageSchedulingMapper;
import com.dsh.course.mapper.CoursePackageStudentMapper;
import com.dsh.course.mapper.TCoursePackageMapper;
import com.dsh.course.model.*;
import com.dsh.course.model.dto.DiscountJsonDto;
@@ -31,6 +32,7 @@
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
@@ -60,6 +62,8 @@
    @Autowired
    private TCoursePackagePaymentService packagePaymentService;
    @Resource
    private CoursePackageStudentMapper cpsMapper;
    @Autowired
    private ICoursePackageOrderService coursePackageOrderService;
@@ -161,17 +165,15 @@
     */
    @RequestMapping("/base/coursePackagePayment/add")
    public Object addCoursePackagePayment(@RequestBody TCoursePackagePayment packagePayment) {
        //校验是否已经报满
        Integer cpId = Integer.valueOf((int) packagePayment.getCoursePackageId());
        Integer integer = coursePackagePaymentService.queryCountNumber(cpId);
        TCoursePackage course = coursePackageService.getById(packagePayment.getId());
        TCoursePackage course = coursePackageService.getById(packagePayment.getCoursePackageId());
        if (course.getType() != 3) {
            if (integer + 1 > course.getMaxSubscribeNumber()) {
                return 5001;
            }
        }
        // 如果重复购买 累加课时
        CoursePackageOrder coursePackageOrder = new CoursePackageOrder();
        coursePackageOrder.setAppUserId(packagePayment.getAppUserId());
        coursePackageOrder.setStudentIds(String.valueOf(packagePayment.getStudentId()));
@@ -185,29 +187,9 @@
        coursePackageOrder.setInsertTime(new Date());
        coursePackageOrder.setSalesName(packagePayment.getSalesName());
        coursePackageOrderService.save(coursePackageOrder);
        TCoursePackage byId = coursePackageService.getById(packagePayment.getCoursePackageId());
        if (byId.getType()==1){
            CoursePackageOrderStudent coursePackageOrderStudent = new CoursePackageOrderStudent();
            coursePackageOrderStudent.setAppUserId(packagePayment.getAppUserId());
            coursePackageOrderStudent.setStudentId(packagePayment.getStudentId());
            coursePackageOrderStudent.setCoursePackageId(packagePayment.getCoursePackageId());
            coursePackageOrderStudent.setTotalClassHours(packagePayment.getClassHours());
            coursePackageOrderStudent.setLaveClassHours(packagePayment.getClassHours());
            coursePackageOrderStudent.setAbsencesNumber(0);
            coursePackageOrderStudent.setDropoutsNumber(0);
            coursePackageOrderStudent.setStatus(1);
            coursePackageOrderStudent.setState(1);
            coursePackageOrderStudent.setInsertTime(new Date());
            coursePackageOrderStudent.setGiftClassHours(packagePayment.getGiftClassHours());
            // 获取常规课的有效期 计算是哪一天
            Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.DAY_OF_MONTH, byId.getValidDays());
            Date time = calendar.getTime();
            coursePackageOrderStudent.setUseTime(time);
            return coursePackageOrderStudentService.save(coursePackageOrderStudent);
        }
        // 生成排课数据
        return null;
        return 200;
    }
@@ -218,13 +200,95 @@
     */
    @RequestMapping("/base/coursePackagePayment/changeState")
    public Object changeState(@RequestBody CoursePackagePayDTO dto) {
        String ids = dto.getIds();
        Long aLong = Long.valueOf(ids);
        CoursePackageOrder byId1 = coursePackageOrderService.getById(aLong);
        TCoursePackage byId = coursePackageService.getById(byId1.getCoursePackageId());
        if (byId.getType()==1){
            // 如果重复购买 累加课时
            CoursePackageOrderStudent coursePackageOrderStudent = coursePackageOrderStudentService
                    .getOne(new QueryWrapper<CoursePackageOrderStudent>().eq("studentId", Integer.valueOf(byId1.getStudentIds()))
                            .eq("coursePackageId", byId1.getCoursePackageId()).eq("status", 1).eq("state", 1));
            if (null == coursePackageOrderStudent) {
                coursePackageOrderStudent = new CoursePackageOrderStudent();
                coursePackageOrderStudent.setAppUserId(byId1.getAppUserId());
                coursePackageOrderStudent.setStudentId(Integer.valueOf(byId1.getStudentIds()));
                coursePackageOrderStudent.setCoursePackageId(byId1.getCoursePackageId());
                coursePackageOrderStudent.setTotalClassHours(byId1.getClassHours());
                coursePackageOrderStudent.setLaveClassHours(byId1.getClassHours());
                coursePackageOrderStudent.setAbsencesNumber(0);
                coursePackageOrderStudent.setStatus(1);
                coursePackageOrderStudent.setState(1);
                coursePackageOrderStudent.setInsertTime(new Date());
                // 判断这个订单购买的是哪一个课时规格
                CoursePackagePaymentConfig one1 = icppcService.getOne(new QueryWrapper<CoursePackagePaymentConfig>()
                        .eq("coursePackageId", byId.getId())
                        .eq("classHours", byId1.getClassHours()));
                // 判断当前购买的课包有没有赠送课时
                TCoursePackageDiscount one = tcpdService.getOne(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackageId", byId.getId())
                        .eq("type", 4).eq("auditStatus", 2).eq("status", 1)
                        .eq("coursePackagePaymentConfigId",one1.getId()));
                if (one!=null){
                    Integer giftClassHours = getGiftClassHours(one);
                    coursePackageOrderStudent.setGiftClassHours(giftClassHours);
                    coursePackageOrderStudent.setTotalClassHours(coursePackageOrderStudent.getTotalClassHours()+giftClassHours);
                    coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours()+giftClassHours);
                }else{
                    coursePackageOrderStudent.setGiftClassHours(0);
                }
                Integer validDays = byId.getValidDays();
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(new Date());
                calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + validDays);
                coursePackageOrderStudent.setUseTime(calendar.getTime());
                coursePackageOrderStudentService.saveOrUpdate(coursePackageOrderStudent);
                Integer studentId = Integer.valueOf(byId1.getStudentIds());
                //开始排课
                addPackageStudent1(byId, byId1.getAppUserId(), studentId, coursePackageOrderStudent);
            } else {
                Date useTime = coursePackageOrderStudent.getUseTime();
                coursePackageOrderStudent.setTotalClassHours(coursePackageOrderStudent.getTotalClassHours() + byId1.getClassHours());
                coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours() + byId1.getClassHours());
                Integer validDays = byId.getValidDays();
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(useTime.compareTo(new Date()) < 0 ? new Date() : useTime);
                calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + validDays);
                coursePackageOrderStudent.setUseTime(calendar.getTime());
                // 判断这个订单购买的是哪一个课时规格
                CoursePackagePaymentConfig one1 = icppcService.getOne(new QueryWrapper<CoursePackagePaymentConfig>()
                        .eq("coursePackageId", byId.getId())
                        .eq("classHours", byId1.getClassHours()));
                // 判断当前购买的课包有没有赠送课时
                TCoursePackageDiscount one = tcpdService.getOne(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackageId", byId.getId())
                        .eq("type", 4).eq("auditStatus", 2).eq("status", 1)
                        .eq("coursePackagePaymentConfigId",one1.getId()));
                if (one!=null){
                    Integer giftClassHours = getGiftClassHours(one);
                    coursePackageOrderStudent.setGiftClassHours(giftClassHours);
                }else{
                    coursePackageOrderStudent.setGiftClassHours(0);
                }
                // 获取常规课的有效期 计算是哪一天
                Calendar calendar9 = Calendar.getInstance();
                calendar9.add(Calendar.DAY_OF_MONTH, byId.getValidDays());
                Date time = calendar9.getTime();
                coursePackageOrderStudent.setUseTime(time);
                coursePackageOrderStudentService.saveOrUpdate(coursePackageOrderStudent);
                Integer studentId = Integer.valueOf(byId1.getStudentIds());
                //中间断课,没有连续续费的情况需要重新排课
                if (useTime.compareTo(new Date()) < 0) {
                    addPackageStudent1(byId, byId1.getAppUserId(), studentId, coursePackageOrderStudent);
                }
            }
        }
        return packagePaymentService.changeState(dto);
    }
    @GetMapping("/coursePackagePayment/courseStore/{appUserId}/{coursePackageId}")
    public List<TCoursePackagePayment> getByUserIdAndCoursePackageId(@PathVariable("appUserId") Integer appUserId, @PathVariable("coursePackageId") Integer coursePackageId) {
        List<TCoursePackagePayment> list = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>()
    public List<CoursePackageOrderStudent> getByUserIdAndCoursePackageId(@PathVariable("appUserId") Integer appUserId, @PathVariable("coursePackageId") Integer coursePackageId) {
        List<CoursePackageOrderStudent> list = coursePackageOrderStudentService.list(new QueryWrapper<CoursePackageOrderStudent>()
                .eq("appUserId", appUserId)
                .eq("coursePackageId", coursePackageId));
        return list;
@@ -245,11 +309,21 @@
                    re.setCashPayment(new BigDecimal(value));
                }
            }
            Store store = storeClient.queryStoreById(re.getStoreId());
            TAppUser appUser = appUserClient.queryAppUser1(re.getAppUserId());
            Student student = studentClient.queryStudentById(re.getStudentId());
            re.setPayStudent(student.getName());
            String studentId = re.getStudentId();
            String[] split = studentId.split(",");
            StringBuilder stringBuilder = new StringBuilder("");
            for (String s : split) {
                Student student = studentClient.queryStudentById(Integer.valueOf(s));
                stringBuilder.append(student.getName()+",");
            }
            String string = stringBuilder.toString();
            if (string.length() > 0) {
                String stringWithoutLastCharacter = string.substring(0, string.length() - 1);
                re.setPayStudent(stringWithoutLastCharacter);
            }
            re.setPayUser(appUser.getName());
            re.setPhone(appUser.getPhone());
            re.setStoreName(store.getName());
@@ -262,7 +336,7 @@
                        } else {
                            List<Student> students = studentClient.queryStudentListByName(query.getPayStudent());
                            for (Student student1 : students) {
                                if (student.getName().equals(student1.getName())) {
                                if (string.contains(student1.getName())) {
                                    result.add(re);
                                }
                            }
@@ -270,7 +344,6 @@
                    }
                }
            }
            if (re.getPayType() != null) {
                if (re.getPayType() == 1) {
                    re.setBuyTypeName("微信支付");
@@ -1717,9 +1790,208 @@
        return dateList.toArray(new Date[0]);
    }
    public Integer getGiftClassHours(TCoursePackageDiscount one){
        // 判断购买时间 是否满足折扣规则
        char c = one.getContent().charAt(0);
        String value1 = String.valueOf(c);
        JSONObject jsonObject ;
        if (value1.equals("[")){
            jsonObject = JSONObject.fromObject(one.getContent()
                    .substring(1,one.getContent().length() - 1));
        }else{
            jsonObject = JSONObject.fromObject(one.getContent());
        }
        // 赠送课时 判断当前课包有没有赠送课时
        String weeks = jsonObject.getString("weeks");
        // 判断当前周几 是否满足折扣规则
        // 获取当前日期
        LocalDate currentDate = LocalDate.now();
        // 获取当前日期是星期几的数字表示
        int dayOfWeekAsNumber = currentDate.getDayOfWeek().getValue();
        if (weeks.contains(String.valueOf(dayOfWeekAsNumber))){
            // 限时折扣判断是否在有效期
            try {
                // 判断当日时间是否能享受到折扣
                String startTime = jsonObject.getString("startTime");
                String endTime = jsonObject.getString("endTime");
                // 获取当前时间
                Date currentTime = new Date();
                // 定义时间格式
                SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
                // 解析开始时间和结束时间为Date对象
                Date startTime1 = sdf.parse(startTime);
                Date endTime1 = sdf.parse(endTime);
                Date date1 = new Date();
                date1.setHours(startTime1.getHours());
                date1.setMinutes(startTime1.getMinutes());
                date1.setSeconds(startTime1.getSeconds());
                Date date2 = new Date();
                date2.setHours(endTime1.getHours());
                date2.setMinutes(endTime1.getMinutes());
                date2.setSeconds(endTime1.getSeconds());
                // 检查当前时间是否在开始时间和结束时间之间
                if (currentTime.after(date1) && currentTime.before(date2)) {
                    System.out.println("当前时间在开始时间和结束时间之间。");
                    String hour = jsonObject.getString("hour");
                    return Integer.valueOf(hour);
                } else {
                    System.out.println("当前时间不在开始时间和结束时间之间。");
                    return 0;
                }
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
            return 0;
    }
    @Autowired
    private TCoursePackageService coursePackageService;
    private void addPackageStudent1(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(time) + " " + split[j]);
                        Date parse1 = format1.parse(format.format(time) + " " + split1[j]);
                        coursePackageScheduling.setClassDate(parse);
                        coursePackageScheduling.setEndDate(parse1);
                        coursePackageScheduling.setStatus(1);
                        coursePackageSchedulingService.save(coursePackageScheduling);
                        CoursePackageStudent student1 = new CoursePackageStudent();
                        student1.setAppUserId(userId);
                        student1.setStudentId(sId);
                        student1.setCoursePackageId(tCoursePackage.getId());
                        student1.setCoursePackagePaymentId(coursePackageOrderStudent.getId());
                        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);
                }
            }
            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.save(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();
        }
    }
    private void addPackageStudent(Integer courseId, Integer userId, Integer sId, Long paymentId) throws ParseException {
        // 课包
        TCoursePackage tCoursePackage = coursePackageService.getById(courseId);
@@ -1855,8 +2127,6 @@
                }
            }
        }
        // 2.0
        TCourseInfoRecord tCourseInfoRecord = new TCourseInfoRecord();
        tCourseInfoRecord.setUserId(userId);
@@ -1866,8 +2136,6 @@
        tCourseInfoRecord.setTime(new Date());
        tCourseInfoRecord.setType(2);
        appUserClient.addCourseInfoRecord(tCourseInfoRecord);
    }
    @ResponseBody