puzhibing
2023-12-08 f88cfa02e36752e4acad7adc4b045155e8e50f21
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java
@@ -123,9 +123,9 @@
    @Override
    public List<CoursePackageListVo> queryCourseList(Integer uid, CoursePackageList coursePackageList) throws Exception {
        AppUser appUser = appUserClient.queryAppUser(uid);
        Map<String, String> geocode = gdMapGeocodingUtil.geocode(coursePackageList.getLon(), coursePackageList.getLat());
        String provinceCode = geocode.get("provinceCode");
        String cityCode = geocode.get("cityCode");
//        Map<String, String> geocode = gdMapGeocodingUtil.geocode(coursePackageList.getLon(), coursePackageList.getLat());
//        String provinceCode = geocode.get("provinceCode");
//        String cityCode = geocode.get("cityCode");
//        QueryWrapper<TCoursePackage> wrapper = new QueryWrapper<TCoursePackage>().in("status", Arrays.asList(1, 2))
//                .eq("auditStatus", 2).eq("state", 1).eq("provinceCode", provinceCode).eq("cityCode", cityCode);
@@ -581,7 +581,7 @@
     * @throws Exception
     */
    @Override
    public CoursePackageInfo queryCourseInfo(Integer uid, Integer id, String lon, String lat) throws Exception {
    public CoursePackageInfo queryCourseInfo(Integer uid, Integer id, String lon, String lat, Integer stuId) throws Exception {
        AppUser appUser = appUserClient.queryAppUser(uid);
        TCoursePackage coursePackage = this.getById(id);
        CoursePackageInfo coursePackageInfo = new CoursePackageInfo();
@@ -783,8 +783,13 @@
        });
        coursePackageInfo.setList(list);
        Student student = studentClient.queryDefaultStudent(uid);
        StudentVo studentVo = new StudentVo();
        Student student = null;
        if(null != stuId){
            student = studentClient.queryStudentById(stuId);
        }else{
            student = studentClient.queryDefaultStudent(uid);
        }
        if (null != student) {
            studentVo.setId(student.getId());
            studentVo.setPhone(student.getPhone());
@@ -808,7 +813,7 @@
    @Override
    public ResultUtil paymentCourse(Integer uid, PaymentCourseVo paymentCourseVo) throws Exception {
        AppUser appUser = appUserClient.queryAppUser(uid);
        CoursePackageInfo coursePackageInfo = queryCourseInfo(uid, paymentCourseVo.getId(), null, null);
        CoursePackageInfo coursePackageInfo = queryCourseInfo(uid, paymentCourseVo.getId(), null, null, null);
        //校验是否已经报满
        Integer integer = coursePackagePaymentService.queryCountNumber(paymentCourseVo.getId());
        TCoursePackage course = coursePackageService.getById(paymentCourseVo.getId());
@@ -1018,24 +1023,29 @@
        String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
        //生成支付订单
        CoursePackageOrder coursePackageOrder = new CoursePackageOrder();
        coursePackageOrder.setCode(code);
        coursePackageOrder.setAppUserId(uid);
        coursePackageOrder.setStudentIds(paymentCourseVo.getStudentIds());
        coursePackageOrder.setCoursePackageId(paymentCourseVo.getId());
        coursePackageOrder.setPayType(paymentCourseVo.getPayType());
        coursePackageOrder.setClassHours(coursePackagePaymentConfig.getClassHours());
        coursePackageOrder.setOriginalPrice(paymentCourseVo.getPrice());
        coursePackageOrder.setUserCouponId(paymentCourseVo.getCouponId());
        coursePackageOrder.setCashPayment(new BigDecimal(paymentPrice));
        coursePackageOrder.setPayUserType(1);
        coursePackageOrder.setPayStatus(1);
        coursePackageOrder.setPayUserId(uid);
        coursePackageOrder.setState(1);
        coursePackageOrder.setInsertTime(new Date());
        coursePackageOrderService.save(coursePackageOrder);
        if (paymentCourseVo.getOrderId()==null) {
            coursePackageOrder.setCode(code);
            coursePackageOrder.setAppUserId(uid);
            coursePackageOrder.setStudentIds(paymentCourseVo.getStudentIds());
            coursePackageOrder.setCoursePackageId(paymentCourseVo.getId());
            coursePackageOrder.setPayType(paymentCourseVo.getPayType());
            coursePackageOrder.setClassHours(coursePackagePaymentConfig.getClassHours());
            coursePackageOrder.setOriginalPrice(paymentCourseVo.getPrice());
            coursePackageOrder.setUserCouponId(paymentCourseVo.getCouponId());
            coursePackageOrder.setCashPayment(new BigDecimal(paymentPrice));
            coursePackageOrder.setPayUserType(1);
            coursePackageOrder.setPayStatus(1);
            coursePackageOrder.setPayUserId(uid);
            coursePackageOrder.setState(1);
            coursePackageOrder.setInsertTime(new Date());
            coursePackageOrderService.save(coursePackageOrder);
        }else {
            code = coursePackageOrderService.getById(paymentCourseVo.getOrderId()).getCode();
        }
        ResultUtil alipay = payMoneyUtil.alipay("购买课程", "购买课程", coursePackagePaymentConfig.getId().toString(), code, paymentPrice.toString(), "/base/course/aliPaymentCourseCallback");
        if (alipay.getCode() == 200) {
            String finalCode = code;
            new Thread(new Runnable() {
                @Override
                public void run() {
@@ -1049,11 +1059,11 @@
                            wait += (min * num);
                            Thread.sleep(wait);
                            CoursePackageOrder coursePackageOrder1 = coursePackageOrderService.getOne(new QueryWrapper<CoursePackageOrder>()
                                    .eq("code", code).eq("state", 1));
                                    .eq("code", finalCode).eq("state", 1));
                            if (coursePackageOrder1.getPayStatus() == 2) {
                                break;
                            }
                            AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(code);
                            AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(finalCode);
                            if (null != alipayTradeQueryResponse) {
                                /**
                                 * WAIT_BUYER_PAY(交易创建,等待买家付款)、
@@ -1237,6 +1247,7 @@
                    coursePackageOrderStudent.setTotalClassHours(coursePackageOrderStudent.getTotalClassHours() + coursePackagePaymentConfig.getClassHours());
                    coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours() + coursePackagePaymentConfig.getClassHours());
                    coursePackageOrderStudent.setStatus(1);
                    coursePackageOrderStudent.setInsertTime(new Date());
                    Integer validDays = coursePackage.getValidDays();
                    Calendar calendar = Calendar.getInstance();
                    calendar.setTime(useTime.compareTo(new Date()) < 0 ? new Date() : useTime);
@@ -1310,7 +1321,6 @@
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                //剩余课时
                Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours();
                //扣除课时数
@@ -1337,11 +1347,26 @@
                        continue;
                    }
                    //大于有效期不进行排课
                    if (calendar.getTimeInMillis() >= validity.getTime()) {
                        break;
                    }
                    //检查是否有体验购课
                    int count = coursePackageSchedulingService.count(new QueryWrapper<CoursePackageScheduling>()
                            .eq("type", 3)
                            .eq("appUserId", userId)
                            .eq("studentId", sId)
                            .eq("coursePackageId", tCoursePackage.getId())
                            .eq("status", 1)
                            .eq("DATE_FORMAT(classDate, '%Y-%m-%d')", format.format(time))
                    );
                    //有体验购课,不进行排课
                    if(count != 0){
                        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
                        continue;
                    }
                    for (int j = 0; j < split.length; j++) {
                        //剩余数量不足以排课
                        if (laveClassHours.compareTo(codeTime) < 0) {
@@ -1697,9 +1722,8 @@
    @Override
    public Integer addCoursePackage(TCoursePackage coursePackage) {
        try {
            coursePackage.setInsertTime(new Date());
            this.baseMapper.insert(coursePackage);
            if (coursePackage.getClassStartTime() != null && coursePackage.getClassStartTime() != "") {
                //生成排课数据
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
@@ -1778,6 +1802,8 @@
    }
    @Autowired
    private ICoursePackageOrderStudentService orderStudentService;
    /**
     * 修改数据
     *
@@ -1794,65 +1820,67 @@
                coursePackageSchedulingQueryWrapper.notIn("id", collect);
            }
            coursePackageSchedulingService.remove(coursePackageSchedulingQueryWrapper);
            int coursePackageId = orderStudentService.count(new QueryWrapper<CoursePackageOrderStudent>().eq("coursePackageId", coursePackage.getId()));
            if (coursePackageId>0) {
                this.baseMapper.updateById(coursePackage);
            this.baseMapper.updateById(coursePackage);
            //生成排课数据
            Date date = null;
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            CoursePackageScheduling coursePackageScheduling = coursePackageSchedulingService.getOne(new QueryWrapper<CoursePackageScheduling>().eq("coursePackageId", coursePackage.getId()).last(" and classDate > now() order by classDate desc limit 0, 1"));
            if (null != coursePackageScheduling) {
                date = sdf1.parse(sdf.format(coursePackageScheduling.getClassDate()) + " 00:00:00");
            } else {
                date = sdf1.parse(sdf.format(new Date()) + " 00:00:00");
            }
            List<String> list = Arrays.asList(coursePackage.getClassWeeks().split(";"));
            String classStartTime = coursePackage.getClassStartTime();
            String[] split = classStartTime.split(":");
            String classEndTime = coursePackage.getClassEndTime();
            String[] split1 = classEndTime.split(":");
            Calendar s = Calendar.getInstance();
            s.setTime(date);
            s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 1);
            Calendar e = Calendar.getInstance();
            e.setTime(date);
            if (null != coursePackageScheduling) {
                long time = sdf1.parse(sdf.format(new Date()) + " 00:00:00").getTime();
                int d = Long.valueOf(14L - ((s.getTimeInMillis() - time) / 86400000L)).intValue();
                e.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + d);
            } else {
                e.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 14);
            }
            long timeInMillis = e.getTimeInMillis();
            while (true) {
                int w = s.get(Calendar.DAY_OF_WEEK);
                WeekEnum weekEnum = WeekEnum.getWeekEnum(w);
                if (list.contains(weekEnum.getChineseName())) {
                    Calendar classDate = Calendar.getInstance();
                    classDate.setTime(s.getTime());
                    classDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
                    classDate.set(Calendar.MINUTE, Integer.valueOf(split[1]));
                    classDate.set(Calendar.SECOND, 0);
                    Calendar endDate = Calendar.getInstance();
                    endDate.setTime(s.getTime());
                    endDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split1[0]));
                    endDate.set(Calendar.MINUTE, Integer.valueOf(split1[1]));
                    endDate.set(Calendar.SECOND, 0);
                    CoursePackageScheduling coursePackageScheduling1 = new CoursePackageScheduling();
                    coursePackageScheduling1.setCoursePackageId(coursePackage.getId());
                    coursePackageScheduling1.setClassDate(classDate.getTime());
                    coursePackageScheduling1.setEndDate(endDate.getTime());
                    coursePackageScheduling1.setStatus(1);
                    coursePackageSchedulingService.save(coursePackageScheduling1);
                //生成排课数据
                Date date = null;
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                CoursePackageScheduling coursePackageScheduling = coursePackageSchedulingService.getOne(new QueryWrapper<CoursePackageScheduling>().eq("coursePackageId", coursePackage.getId()).last(" and classDate > now() order by classDate desc limit 0, 1"));
                if (null != coursePackageScheduling) {
                    date = sdf1.parse(sdf.format(coursePackageScheduling.getClassDate()) + " 00:00:00");
                } else {
                    date = sdf1.parse(sdf.format(new Date()) + " 00:00:00");
                }
                List<String> list = Arrays.asList(coursePackage.getClassWeeks().split(";"));
                String classStartTime = coursePackage.getClassStartTime();
                String[] split = classStartTime.split(":");
                String classEndTime = coursePackage.getClassEndTime();
                String[] split1 = classEndTime.split(":");
                Calendar s = Calendar.getInstance();
                s.setTime(date);
                s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 1);
                if (s.getTimeInMillis() > timeInMillis) {
                    break;
                Calendar e = Calendar.getInstance();
                e.setTime(date);
                if (null != coursePackageScheduling) {
                    long time = sdf1.parse(sdf.format(new Date()) + " 00:00:00").getTime();
                    int d = Long.valueOf(14L - ((s.getTimeInMillis() - time) / 86400000L)).intValue();
                    e.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + d);
                } else {
                    e.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 14);
                }
                long timeInMillis = e.getTimeInMillis();
                while (true) {
                    int w = s.get(Calendar.DAY_OF_WEEK);
                    WeekEnum weekEnum = WeekEnum.getWeekEnum(w);
                    if (list.contains(weekEnum.getChineseName())) {
                        Calendar classDate = Calendar.getInstance();
                        classDate.setTime(s.getTime());
                        classDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
                        classDate.set(Calendar.MINUTE, Integer.valueOf(split[1]));
                        classDate.set(Calendar.SECOND, 0);
                        Calendar endDate = Calendar.getInstance();
                        endDate.setTime(s.getTime());
                        endDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split1[0]));
                        endDate.set(Calendar.MINUTE, Integer.valueOf(split1[1]));
                        endDate.set(Calendar.SECOND, 0);
                        CoursePackageScheduling coursePackageScheduling1 = new CoursePackageScheduling();
                        coursePackageScheduling1.setCoursePackageId(coursePackage.getId());
                        coursePackageScheduling1.setClassDate(classDate.getTime());
                        coursePackageScheduling1.setEndDate(endDate.getTime());
                        coursePackageScheduling1.setStatus(1);
                        coursePackageSchedulingService.save(coursePackageScheduling1);
                    }
                    s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 1);
                    if (s.getTimeInMillis() > timeInMillis) {
                        break;
                    }
                }
            }
        } catch (Exception e) {