puzhibing
2023-11-25 53e7558400dcacecdce70e39ebfe1727740f9296
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java
@@ -39,6 +39,7 @@
import io.vertx.core.json.Json;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
@@ -74,6 +75,9 @@
    private ICoursePackagePaymentConfigService coursePackagePaymentConfigService;
    @Autowired
    private CourseCounsumService courseCounsumService;
    @Autowired
    private TCoursePackageDiscountService coursePackageDiscountService;
    @Resource
@@ -99,6 +103,9 @@
    @Resource
    private CoursePackageStudentMapper cpsMapper;
    @Autowired
    private ICoursePackageOrderStudentService coursePackageOrderStudentService;
    private String aliAppid = "2021004105665036";//支付宝appid
@@ -107,6 +114,14 @@
    private String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAouYvZ1v4RiydwNOnGcU0Hb4hQu0x6XUooaE2Bi6/atNOobtFdunnATGP6OMOW7yF9DpP8qH5mbFXAiaQD721y/7qlayI50UcV4mngRU4ZcaAVE3bp721Eg2H85RISa+Tb1CiOh+pc9p4l5UBseKsvB2ruHHForfZDPI8FL7AVUKBYCQPsa4zL6KAO2C6KULaTg/lCa+bYQKU0n9ca569VtdsqJUyxB9eSZjVd+9nKl62FLqp2NELGj7cXqiVBgDnBnVS5ZUO3mrBM5z/AxQbw3RwE3JqdkhzUA1BFjejAlT2zIGNOjUFagF8ao0wGElYfuk0bum6Hz5qWAt02QdNNwIDAQAB";//支付宝应用公钥
    private String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB";//支付宝支付公钥
    @Autowired
    private ICoursePackageOrderService coursePackageOrderService;
    @Autowired
    private TOrderService orderService;
    @Autowired
    private TCoursePackageService coursePackageService;
    @Override
@@ -117,6 +132,7 @@
    /**
     * 获取课程列表
     *
     * @param coursePackageList
     * @return
     * @throws Exception
@@ -185,7 +201,6 @@
            coursePackageListVo.setType(coursePackage.getType());
            coursePackageListVo.setApplicantsNumber(integer);
            Double cashPayment1 = coursePackagePaymentConfig.getCashPayment();
            Integer playPaiCoin = coursePackagePaymentConfig.getPlayPaiCoin();
@@ -196,7 +211,6 @@
            }else if(ToolUtil.isNotEmpty(playPaiCoin) && playPaiCoin>0){
                coursePackageListVo.setPayType(2);
            }
            if (coursePackagePaymentConfig!=null) {
@@ -305,7 +319,6 @@
//            System.out.println("Minimum price: " + minPrice);
//            }
//            else{
//                List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
@@ -380,7 +393,6 @@
    }
    @Override
    public List<CoursePackageListVo> queryCourseListOne(CoursePackageList coursePackageList) throws Exception {
//        AppUser appUser = appUserClient.queryAppUser(uid);
@@ -442,7 +454,6 @@
            }
            coursePackageListVo.setClassStartTime(classTime);
            coursePackageListVo.setType(coursePackage.getType());
            coursePackageListVo.setApplicantsNumber(integer);
@@ -580,6 +591,7 @@
    /**
     * 获取课包详情
     *
     * @param uid
     * @param id
     * @return
@@ -743,7 +755,6 @@
                    coursePackagePaymentConfigVo.setPaymentPrice(paymentPrice);
//                    TCoursePackageDiscount discount = coursePackageDiscountService.getOne(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
//                            .eq("type", 2).eq("auditStatus", 2));
//
@@ -771,8 +782,6 @@
                        coursePackagePaymentConfigVo.setOriginalPrice(coursePackagePaymentConfig.getCashPayment());
                        coursePackagePaymentConfigVo.setVipPrice(null);
                    }
//                }
@@ -809,6 +818,7 @@
    /**
     * 课程包名支付
     *
     * @param uid
     * @param paymentCourseVo
     * @return
@@ -858,9 +868,6 @@
                Double playPaiCoin = coursePackagePaymentConfigVo.getPlayPaiCoin().doubleValue();//支付币
                playPaiCoin = new BigDecimal(students.length).multiply(new BigDecimal(playPaiCoin)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
//                if(paymentCourseVo.getPayType() != 3 && paymentPrice.compareTo(paymentCourseVo.getPrice()) != 0&&paymentCourseVo.getCouponId()!=null){
//                    return ResultUtil.error("支付金额异常,请刷新后重试");
//                }
                if(paymentCourseVo.getPayType() == 3 && playPaiCoin.compareTo(paymentCourseVo.getPrice()) != 0){
                    return ResultUtil.error("支付金额异常,请刷新后重试");
                }
@@ -923,6 +930,7 @@
    /**
     * 课程微信支付
     *
     * @param uid
     * @param paymentPrice
     * @param paymentCourseVo
@@ -931,49 +939,28 @@
     */
    public ResultUtil weChatPaymentCourse(Integer uid, Double paymentPrice, PaymentCourseVo paymentCourseVo) throws Exception{
        CoursePackagePaymentConfig coursePackagePaymentConfig = coursePackagePaymentConfigService.getById(paymentCourseVo.getCoursePackagePaymentConfigId());
        String[] split = paymentCourseVo.getStudentIds().split(";");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
        for (String s : split) {
            TCoursePackagePayment coursePackagePayment = new TCoursePackagePayment();
            coursePackagePayment.setCode(code);
            coursePackagePayment.setAppUserId(uid);
            coursePackagePayment.setStudentId(Integer.valueOf(s));
            coursePackagePayment.setCoursePackageId(paymentCourseVo.getId());
            coursePackagePayment.setPayType(paymentCourseVo.getPayType());
            coursePackagePayment.setClassHours(coursePackagePaymentConfig.getClassHours());
            coursePackagePayment.setOriginalPrice(paymentCourseVo.getPrice());
            coursePackagePayment.setUserCouponId(paymentCourseVo.getCouponId());
            coursePackagePayment.setCashPayment(new BigDecimal(paymentPrice));
            coursePackagePayment.setTotalClassHours(coursePackagePaymentConfig.getClassHours());
            coursePackagePayment.setLaveClassHours(coursePackagePaymentConfig.getClassHours());
            coursePackagePayment.setAbsencesNumber(0);
            coursePackagePayment.setPayUserType(1);
            coursePackagePayment.setPayStatus(1);
            coursePackagePayment.setPayUserId(uid);
            coursePackagePayment.setStatus(1);
            coursePackagePayment.setState(1);
            coursePackagePayment.setInsertTime(new Date());
            coursePackagePaymentService.save(coursePackagePayment);
        //生成支付订单
        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);
            CourseCounsum courseCounsum = new CourseCounsum();
            courseCounsum.setPaymentId(coursePackagePayment.getId());
            courseCounsum.setChangeType(1);
            courseCounsum.setNum(coursePackagePaymentConfig.getClassHours());
            courseCounsum.setInsertTime(new Date());
            courseCounsum.setReason("购买课包");
            courseCounsumService.save(courseCounsum);
        }
        Student student = studentClient.queryDefaultStudent(uid);
        Integer sid=null;
        if(student!=null){
            sid=student.getId();
        }
        ResultUtil weixinpay = payMoneyUtil.weixinpay("购买课程", "", code, paymentPrice.toString(), "/base/course/weChatPaymentCourseCallback", "APP", "");
        ResultUtil weixinpay = payMoneyUtil.weixinpay("购买课程", coursePackagePaymentConfig.getId().toString(), code, paymentPrice.toString(), "/base/course/weChatPaymentCourseCallback", "APP", "");
        if(weixinpay.getCode() == 200){
            Integer finalSid = sid;
            new Thread(new Runnable() {
                @Override
                public void run() {
@@ -984,13 +971,13 @@
                            int min = 5000;
                            wait += (min * num);
                            Thread.sleep(wait);
                            List<TCoursePackagePayment> list = coursePackagePaymentService.list(new QueryWrapper<TCoursePackagePayment>().eq("state", 1).eq("code", code).eq("payType", 1));
                            TCoursePackagePayment one = list.get(0);
                            if(one.getPayStatus() == 2){
                            CoursePackageOrder coursePackageOrder1 = coursePackageOrderService.getOne(new QueryWrapper<CoursePackageOrder>()
                                    .eq("code", code).eq("state", 1));
                            if (coursePackageOrder1.getPayStatus() == 2) {
                                break;
                            }
                            ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, "");
                            if(resultUtil.getCode() == 200 && one.getPayStatus() == 1){
                            if (resultUtil.getCode() == 200 && coursePackageOrder1.getPayStatus() == 1) {
                                /**
                                 * SUCCESS—支付成功,
                                 * REFUND—转入退款,
@@ -1004,22 +991,17 @@
                                String s = data1.get("trade_state");
                                String transaction_id = data1.get("transaction_id");
                                if("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10){
                                    for (TCoursePackagePayment coursePackagePayment : list) {
                                        coursePackagePayment.setStatus(3);
                                    }
                                    coursePackagePaymentService.updateBatchById(list);
                                    //有待支付的订单,这里不处理
//                                    coursePackageOrder1.setState(3);
//                                    coursePackageOrderService.updateById(coursePackageOrder1);
                                    break;
                                }
                                if("SUCCESS".equals(s)){
                                    for (TCoursePackagePayment coursePackagePayment : list) {
                                        coursePackagePayment.setPayStatus(2);
                                        coursePackagePayment.setOrderNumber(transaction_id);
                                    }
                                    coursePackagePaymentService.updateBatchById(list);
                                    // 2.0
                                    userCouponClient.sendUserCoupon(new SendCouponReq(uid,coursePackagePaymentConfig.getCouponIds()));
                                    addPackageStudent(paymentCourseVo.getId(),uid, finalSid,one.getId(),null);
                                    coursePackageOrder1.setPayStatus(2);
                                    coursePackageOrder1.setOrderNumber(transaction_id);
                                    coursePackageOrder1.setAppUserId(null);
                                    coursePackageOrderService.updateById(coursePackageOrder1);
                                    addCoursePackageOrderStudent(coursePackageOrder1, coursePackagePaymentConfig);
                                    break;
                                }
                                if("USERPAYING".equals(s)){
@@ -1036,11 +1018,10 @@
        return weixinpay;
    }
    @Autowired
    private TOrderService orderService;
    /**
     * 课程支付宝支付
     *
     * @param uid
     * @param paymentPrice
     * @param paymentCourseVo
@@ -1049,192 +1030,28 @@
     */
    public ResultUtil aliPaymentCourse(Integer uid, Double paymentPrice, PaymentCourseVo paymentCourseVo) throws Exception{
        CoursePackagePaymentConfig coursePackagePaymentConfig = coursePackagePaymentConfigService.getById(paymentCourseVo.getCoursePackagePaymentConfigId());
        String[] split = paymentCourseVo.getStudentIds().split(";");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
        List<Long> pays = new ArrayList<>();
        //生成支付订单
        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);
        int isContinue = 0;
        for (String s : split) {
//            TCoursePackagePayment coursePackagePayment = new TCoursePackagePayment();
//            coursePackagePayment.setCode(code);
//            coursePackagePayment.setAppUserId(uid);
//            coursePackagePayment.setStudentId(Integer.valueOf(s));
//            coursePackagePayment.setCoursePackageId(paymentCourseVo.getId());
//            coursePackagePayment.setPayType(paymentCourseVo.getPayType());
//            coursePackagePayment.setClassHours(coursePackagePaymentConfig.getClassHours());
//            coursePackagePayment.setOriginalPrice(paymentCourseVo.getPrice());
//            coursePackagePayment.setUserCouponId(paymentCourseVo.getCouponId());
//            coursePackagePayment.setCashPayment(new BigDecimal(paymentPrice));
//            coursePackagePayment.setTotalClassHours(coursePackagePaymentConfig.getClassHours());
//            coursePackagePayment.setLaveClassHours(coursePackagePaymentConfig.getClassHours());
//            coursePackagePayment.setAbsencesNumber(0);
//            coursePackagePayment.setPayUserType(1);
//            coursePackagePayment.setPayStatus(1);
//            coursePackagePayment.setPayUserId(uid);
//            coursePackagePayment.setStatus(1);
//            coursePackagePayment.setState(1);
//            coursePackagePayment.setInsertTime(new Date());
//            coursePackagePaymentService.save(coursePackagePayment);
//
//
//            CourseCounsum courseCounsum = new CourseCounsum();
//            courseCounsum.setPaymentId(coursePackagePayment.getId());
//            courseCounsum.setChangeType(1);
//            courseCounsum.setNum(coursePackagePaymentConfig.getClassHours());
//            courseCounsum.setInsertTime(new Date());
//            courseCounsum.setReason("购买课包");
//            courseCounsumService.save(courseCounsum);
            TCoursePackagePayment coursePackagePaymentServiceOne = coursePackagePaymentService.getOne(new QueryWrapper<TCoursePackagePayment>().eq("studentId", s).eq("coursePackageId", paymentCourseVo.getId()));
            //赠送课时
            int weekday = DateUtil.dayOfWeek(new Date()) - 1;
            TCoursePackageDiscount discount = coursePackageDiscountService.getOne(new QueryWrapper<TCoursePackageDiscount>().eq("type",4).eq("coursePackageId", paymentCourseVo.getId()).last("limit 1"));
            Integer hour = 0;
            if (discount!=null) {
                JSONArray objects = JSONObject.parseArray(discount.getContent());
                JSONObject parse = JSONObject.parseObject(JSONObject.toJSONString(objects.get(0)));
                hour = parse.getInteger("hour");
                if (hour == null) {
                    hour = 0;
                }
            }
            if (coursePackagePaymentServiceOne==null) {
                isContinue = 1;
                TCoursePackagePayment coursePackagePayment = new TCoursePackagePayment();
                coursePackagePayment.setCode(code);
                coursePackagePayment.setAppUserId(uid);
                coursePackagePayment.setStudentId(Integer.valueOf(s));
                coursePackagePayment.setCoursePackageId(paymentCourseVo.getId());
                coursePackagePayment.setPayType(paymentCourseVo.getPayType());
                coursePackagePayment.setClassHours(coursePackagePaymentConfig.getClassHours()+hour);
                coursePackagePayment.setOriginalPrice(paymentCourseVo.getPrice());
                coursePackagePayment.setPlayPaiCoin(paymentPrice.intValue());
                coursePackagePayment.setTotalClassHours(coursePackagePaymentConfig.getClassHours()+hour);
                coursePackagePayment.setLaveClassHours(coursePackagePaymentConfig.getClassHours()+hour);
                coursePackagePayment.setAbsencesNumber(0);
                coursePackagePayment.setPayUserType(1);
                coursePackagePayment.setPayStatus(1);
                coursePackagePayment.setPayUserId(uid);
                coursePackagePayment.setStatus(1);
                coursePackagePayment.setState(1);
                coursePackagePayment.setInsertTime(new Date());
                coursePackagePaymentService.save(coursePackagePayment);
                Integer sId = null;
                Student student = studentClient.queryDefaultStudent(uid);
                if (student != null) {
                    sId = student.getId();
                }
                pays.add(coursePackagePayment.getId());
//                coursePackagePaymentServiceOne.setPlayPaiCoin(coursePackagePaymentServiceOne.getPlayPaiCoin()+paymentPrice.intValue());
//                addPackageStudent(paymentCourseVo.getId(), uid, Integer.valueOf(s), coursePackagePayment.getId());
                CourseCounsum courseCounsum = new CourseCounsum();
                courseCounsum.setPaymentId(coursePackagePayment.getId());
                courseCounsum.setChangeType(1);
                courseCounsum.setNum(coursePackagePaymentConfig.getClassHours());
                courseCounsum.setInsertTime(new Date());
                courseCounsum.setReason("购买课包");
                courseCounsumService.save(courseCounsum);
                if (hour!=0){
                    CourseCounsum courseCounsum1 = new CourseCounsum();
                    courseCounsum1.setPaymentId(coursePackagePayment.getId());
                    courseCounsum1.setChangeType(1);
                    courseCounsum1.setNum(hour);
                    courseCounsum1.setInsertTime(new Date());
                    courseCounsum1.setReason("赠送课时");
                    courseCounsumService.save(courseCounsum);
                }
                //保存订单
            }else {
                if (coursePackagePaymentServiceOne.getPayStatus()==1){
                    isContinue = 1;
                }
//                coursePackagePaymentServiceOne.setClassHours(coursePackagePaymentServiceOne.getClassHours()+coursePackagePaymentConfig.getClassHours());
//                coursePackagePaymentServiceOne.setOriginalPrice(coursePackagePaymentServiceOne.getOriginalPrice()+paymentCourseVo.getPrice());
//                coursePackagePaymentServiceOne.setPlayPaiCoin(coursePackagePaymentServiceOne.getPlayPaiCoin()+paymentPrice.intValue());
//                coursePackagePaymentServiceOne.setTotalClassHours(coursePackagePaymentServiceOne.getTotalClassHours()+coursePackagePaymentConfig.getClassHours());
//                coursePackagePaymentServiceOne.setLaveClassHours(coursePackagePaymentServiceOne.getLaveClassHours()+coursePackagePaymentConfig.getClassHours());
                coursePackagePaymentServiceOne.setCode(code);
//
                coursePackagePaymentServiceOne.setPayStatus(1);
//                coursePackagePaymentServiceOne.setSalesName("续课");
                coursePackagePaymentServiceOne.setAppUserId(null);
//                coursePackagePaymentServiceOne.setPayStatus(2);
                coursePackagePaymentService.updateById(coursePackagePaymentServiceOne);
                pays.add(coursePackagePaymentServiceOne.getId());
//
//                Integer sId = null;
//                Student student = studentClient.queryDefaultStudent(uid);
//                if (student != null) {
//                    sId = student.getId();
//                }
//                coursePackagePaymentServiceOne.setPlayPaiCoin(coursePackagePaymentServiceOne.getPlayPaiCoin()+paymentPrice.intValue());
//
//
//                CourseCounsum courseCounsum = new CourseCounsum();
//                courseCounsum.setPaymentId(coursePackagePaymentServiceOne.getId());
//                courseCounsum.setChangeType(1);
//                courseCounsum.setNum(coursePackagePaymentConfig.getClassHours());
//                courseCounsum.setInsertTime(new Date());
//                courseCounsum.setReason("续课");
//                courseCounsumService.save(courseCounsum);
            }
        }
        //新的订单添加
        if (paymentCourseVo.getOrderId()==null) {
            TOrder order = new TOrder();
            order.setIsPay(1);
            order.setPayType(1);
            order.setAppUserId(uid);
            order.setPrice(paymentPrice);
            order.setCode(code);
            String paysStr = pays.stream()
                    .map(String::valueOf)
                    .collect(Collectors.joining(","));
            order.setPaysId(paysStr);
            orderService.save(order);
        }
        Student student = studentClient.queryDefaultStudent(uid);
        Integer sid=null;
        if(student!=null){
            sid=student.getId();
        }
        ResultUtil alipay = payMoneyUtil.alipay("购买课程", "购买课程", student.getId().toString(), code, paymentPrice.toString(), "/base/course/aliPaymentCourseCallback");
        ResultUtil alipay = payMoneyUtil.alipay("购买课程", "购买课程", coursePackagePaymentConfig.getId().toString(), code, paymentPrice.toString(), "/base/course/aliPaymentCourseCallback");
        if(alipay.getCode() == 200){
            Integer finalSid = sid;
            int finalIsContinue = isContinue;
            new Thread(new Runnable() {
                @Override
                public void run() {
@@ -1247,19 +1064,13 @@
                            int min = 5000;
                            wait += (min * num);
                            Thread.sleep(wait);
                            List<TCoursePackagePayment> list = coursePackagePaymentService.list(new QueryWrapper<TCoursePackagePayment>().eq("state", 1).eq("code", code).eq("payType", 2));
                            TCoursePackagePayment one = list.get(0);
                            List<TOrder> list1 = orderService.list(new QueryWrapper<TOrder>().eq("code", code).eq("payType", 1));
                            TOrder order = list1.get(0);
                            AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(code);
                            if(order.getIsPay() == 2){
                            CoursePackageOrder coursePackageOrder1 = coursePackageOrderService.getOne(new QueryWrapper<CoursePackageOrder>()
                                    .eq("code", code).eq("state", 1));
                            if (coursePackageOrder1.getPayStatus() == 2) {
                                break;
                            }
                            if(order.getIsPay() == 1){
                            AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(code);
                            if (null != alipayTradeQueryResponse) {
                                /**
                                 * WAIT_BUYER_PAY(交易创建,等待买家付款)、
                                 * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、
@@ -1270,114 +1081,17 @@
                                String tradeNo = alipayTradeQueryResponse.getTradeNo();
                                if("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10){
                                        for (TCoursePackagePayment coursePackagePayment : list) {
                                        coursePackagePayment.setStatus(3);
                                    }
                                    coursePackagePaymentService.updateBatchById(list);
                                    //有待支付的订单,这里不处理
//                                    coursePackageOrder1.setState(3);
//                                    coursePackageOrderService.updateById(coursePackageOrder1);
                                    break;
                                }
                                if("TRADE_SUCCESS".equals(s)){
                                    for (TCoursePackagePayment coursePackagePayment : list) {
                                        coursePackagePayment.setPayStatus(2);
                                        coursePackagePayment.setOrderNumber(tradeNo);
                                        coursePackagePayment.setAppUserId(null);
                                    }
                                    coursePackagePaymentService.updateBatchById(list);
                                    for (TOrder tOrder : list1) {
                                        tOrder.setIsPay(2);
                                        tOrder.setOrderNum(tradeNo);
                                    }
                                    orderService.updateBatchById(list1);
                                    for (String s1 : split) {
                                        TCoursePackagePayment coursePackagePaymentServiceOne = coursePackagePaymentService.getOne(new QueryWrapper<TCoursePackagePayment>().eq("studentId", s1).eq("coursePackageId", paymentCourseVo.getId()));
                                        if (finalIsContinue !=1) {
                                            TCoursePackageDiscount discount = coursePackageDiscountService.getOne(new QueryWrapper<TCoursePackageDiscount>().eq("type",4).eq("coursePackageId", paymentCourseVo.getId()).last("limit 1"));
                                            Integer hour = 0;
                                            if (discount!=null) {
                                                JSONArray objects = JSONObject.parseArray(discount.getContent());
                                                JSONObject parse = JSONObject.parseObject(JSONObject.toJSONString(objects.get(0)));
                                                hour = parse.getInteger("hour");
                                                if (hour == null) {
                                                    hour = 0;
                                                }
                                            }
                                            coursePackagePaymentServiceOne.setClassHours(coursePackagePaymentServiceOne.getClassHours()+coursePackagePaymentConfig.getClassHours()+hour);
                                            coursePackagePaymentServiceOne.setOriginalPrice(coursePackagePaymentServiceOne.getOriginalPrice()+paymentCourseVo.getPrice());
                                            coursePackagePaymentServiceOne.setPlayPaiCoin(coursePackagePaymentServiceOne.getPlayPaiCoin()+paymentPrice.intValue());
                                            coursePackagePaymentServiceOne.setTotalClassHours(coursePackagePaymentServiceOne.getTotalClassHours()+coursePackagePaymentConfig.getClassHours()+hour);
                                            coursePackagePaymentServiceOne.setLaveClassHours(coursePackagePaymentServiceOne.getLaveClassHours()+coursePackagePaymentConfig.getClassHours()+hour);
                                            coursePackagePaymentServiceOne.setCode(code);
                                            coursePackagePaymentServiceOne.setAppUserId(null);
                                            coursePackagePaymentServiceOne.setPayStatus(2);
                                            coursePackagePaymentService.updateById(coursePackagePaymentServiceOne);
                                            Integer sId = null;
                                            Student student = studentClient.queryDefaultStudent(uid);
                                            if (student != null) {
                                                sId = student.getId();
                                            }
                                            coursePackagePaymentServiceOne.setPlayPaiCoin(coursePackagePaymentServiceOne.getPlayPaiCoin()+paymentPrice.intValue());
                                            CourseCounsum courseCounsum = new CourseCounsum();
                                            courseCounsum.setPaymentId(coursePackagePaymentServiceOne.getId());
                                            courseCounsum.setChangeType(1);
                                            courseCounsum.setNum(coursePackagePaymentConfig.getClassHours());
                                            courseCounsum.setInsertTime(new Date());
                                            courseCounsum.setReason("续课");
                                            courseCounsumService.save(courseCounsum);
                                            if (hour!=0){
                                                CourseCounsum courseCounsum1 = new CourseCounsum();
                                                courseCounsum1.setPaymentId(coursePackagePaymentServiceOne.getId());
                                                courseCounsum1.setChangeType(1);
                                                courseCounsum1.setNum(hour);
                                                courseCounsum1.setInsertTime(new Date());
                                                courseCounsum1.setReason("赠送课时");
                                                courseCounsumService.save(courseCounsum);
                                            }
                                        }
                                    }
                                System.out.println("===========到达支付");
                                    // 2.0
                                    String[] coupons = coursePackagePaymentConfig.getCouponIds().split(",");
                                    userCouponClient.sendUserCoupon(new SendCouponReq(uid,coursePackagePaymentConfig.getCouponIds()));
                                    for (TCoursePackagePayment coursePackagePayment : list) {
                                        addPackageStudent(paymentCourseVo.getId(),uid, finalSid,coursePackagePayment.getId(),paymentPrice);
                                    }
                                    moneyOut(tradeNo,tradeNo);
                                    if(student!=null){
                                    }
                                    coursePackageOrder1.setPayStatus(2);
                                    coursePackageOrder1.setOrderNumber(tradeNo);
                                    coursePackageOrder1.setAppUserId(null);
                                    coursePackageOrderService.updateById(coursePackageOrder1);
                                    addCoursePackageOrderStudent(coursePackageOrder1, coursePackagePaymentConfig);
                                    break;
                                }
                                if("WAIT_BUYER_PAY".equals(s)){
@@ -1395,99 +1109,9 @@
    }
    @Autowired
    private TCoursePackageService coursePackageService;
    public void moneyOut(String outNum,String tradeNo) throws AlipayApiException {
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2");
        AlipayTradeOrderSettleRequest request = new AlipayTradeOrderSettleRequest();
        AlipayTradeOrderSettleModel model = new AlipayTradeOrderSettleModel();
        model.setOutRequestNo(outNum);
        model.setTradeNo(tradeNo);
        List<RoyaltyDetailInfos> royaltyDetailInfos = new ArrayList<>();
//
        AlipayTradeRoyaltyRelationBindRequest request1 = new AlipayTradeRoyaltyRelationBindRequest();
        AlipayTradeRoyaltyRelationBindModel bindModel = new AlipayTradeRoyaltyRelationBindModel();
        request1.setBizContent("{" +
                "  \"receiver_list\":[" +
                "    {" +
                "      \"type\":\"loginName\"," +
                "      \"account\":\"19522115070\"," +
                "      \"name\":\"罗易胜\"," +
                "      \"memo\":\"分账给测试商户\"," +
                "    }" +
                "  ]," +
                "  \"out_request_no\":\""+tradeNo+"\"" +
                "}");
        AlipayTradeRoyaltyRelationBindResponse response = alipayClient.execute(request1);
        if(response.isSuccess()){
            System.out.println("绑定调用成功");
        } else {
            System.out.println("调用失败");
        }
//        RoyaltyDetailInfos royaltyDetailInfos1 = new RoyaltyDetailInfos();
//        royaltyDetailInfos1.setTransOutType("loginName");
//        royaltyDetailInfos1.setTransOut("happysports@weparklife.com");
//        royaltyDetailInfos1.setTransInType("loginName");
//        royaltyDetailInfos1.setTransIn("19522115070");
////        royaltyDetailInfos1.setAmount("0.01");
//        royaltyDetailInfos1.setAmountPercentage("100");
//        royaltyDetailInfos.add(royaltyDetailInfos1);
        TCoursePackagePayment one = coursePackagePaymentService.getOne(new QueryWrapper<TCoursePackagePayment>().eq("code", outNum));
        TCoursePackage byId = coursePackageService.getById(one.getCoursePackageId());
        OperatorUser operatorUser =  storeClient.queryByStoreId(byId.getStoreId());
//        Integer paymentCompetitions = competitionsClient.queryByCode(outTradeNo);
//        Integer siteBookings = siteClient.queryByCode(outTradeNo);
//        List<Integer> stores = new ArrayList<>();
//        stores.add(coursePackagePayments);
//        stores.add(paymentCompetitions);
//        stores.add(siteBookings);
//        OperatorUser operatorUser = siteClient.queryOperator(stores);
        OpenApiRoyaltyDetailInfoPojo op = new OpenApiRoyaltyDetailInfoPojo();
        op.setTransOutType("loginName");
        op.setTransOut("happysports@weparklife.com");
        op.setTransInType("userId");
        op.setTransIn(operatorUser.getAlipayNum());
        op.setAmountPercentage(Long.valueOf(operatorUser.getAlipayProportion()));
        List<OpenApiRoyaltyDetailInfoPojo> ops = new ArrayList<>();
        ops.add(op);
        model.setRoyaltyParameters(ops);
        request.setBizModel(model);
        AlipayTradeOrderSettleResponse response1 = alipayClient.execute(request);
        if(response1.isSuccess()){
            System.out.println("调用成功");
        } else {
            System.out.println("调用失败");
        }
    }
    @Autowired
    private  CourseCounsumService courseCounsumService;
    /**
     * 玩湃币支付课程
     *
     * @param appUser
     * @param paymentPrice
     * @param paymentCourseVo
@@ -1495,276 +1119,191 @@
     * @throws Exception
     */
    public ResultUtil playPaiCoinPaymentCourse(AppUser appUser, Double paymentPrice, PaymentCourseVo paymentCourseVo) throws Exception{
        Integer playPaiCoins = appUser.getPlayPaiCoins();
        if (playPaiCoins.compareTo(paymentPrice.intValue()) < 0) {
            return ResultUtil.error("玩湃币不足");
        }
        appUser.setPlayPaiCoins(playPaiCoins - paymentPrice.intValue());
        appUserClient.updateAppUser(appUser);
        CoursePackagePaymentConfig coursePackagePaymentConfig = coursePackagePaymentConfigService.getById(paymentCourseVo.getCoursePackagePaymentConfigId());
        String[] split = paymentCourseVo.getStudentIds().split(";");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
        //生成支付订单
        CoursePackageOrder coursePackageOrder = new CoursePackageOrder();
        coursePackageOrder.setCode(code);
        coursePackageOrder.setAppUserId(appUser.getId());
        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(2);
        coursePackageOrder.setPayUserId(appUser.getId());
        coursePackageOrder.setState(1);
        coursePackageOrder.setInsertTime(new Date());
        coursePackageOrderService.save(coursePackageOrder);
        List<Long> pays = new ArrayList<>();
        TCoursePackage course = coursePackageService.getById(paymentCourseVo.getId());
        //赠送课时
        int weekday = DateUtil.dayOfWeek(new Date()) - 1;
        TCoursePackageDiscount discount = coursePackageDiscountService.getOne(new QueryWrapper<TCoursePackageDiscount>().eq("type",4).eq("coursePackageId", paymentCourseVo.getId()).last("limit 1"));
        Integer hour = 0;
        if (discount!=null) {
            JSONArray objects = JSONObject.parseArray(discount.getContent());
            JSONObject parse = JSONObject.parseObject(JSONObject.toJSONString(objects.get(0)));
             hour = parse.getInteger("hour");
            if (hour == null) {
                hour = 0;
            }
        addCoursePackageOrderStudent(coursePackageOrder, coursePackagePaymentConfig);
        return ResultUtil.success();
        }
        for (String s : split) {
            TCoursePackagePayment coursePackagePaymentServiceOne = coursePackagePaymentService.getOne(new QueryWrapper<TCoursePackagePayment>().eq("studentId", s).eq("coursePackageId", paymentCourseVo.getId()));
    /**
     * 购买课程支付成功后的回调处理
     *
     * @param code
     * @param trade_no
     * @return
     */
    @Override
    public ResultUtil paymentCourseCallback(String code, String trade_no, String attach) {
        CoursePackageOrder coursePackageOrder1 = coursePackageOrderService.getOne(new QueryWrapper<CoursePackageOrder>()
                .eq("code", code).eq("state", 1));
        if (coursePackageOrder1.getPayStatus() == 2) {
            return ResultUtil.success();
        }
        coursePackageOrder1.setPayStatus(2);
        coursePackageOrder1.setOrderNumber(trade_no);
        coursePackageOrder1.setAppUserId(null);
        coursePackageOrderService.updateById(coursePackageOrder1);
        CoursePackagePaymentConfig coursePackagePaymentConfig = coursePackagePaymentConfigService.getById(attach);
        addCoursePackageOrderStudent(coursePackageOrder1, coursePackagePaymentConfig);
        return ResultUtil.success();
    }
    /**
     * 支付成功后添加学员课时数据
     *
     * @param coursePackageOrder
     * @param coursePackagePaymentConfig
     */
    public void addCoursePackageOrderStudent(CoursePackageOrder coursePackageOrder, CoursePackagePaymentConfig coursePackagePaymentConfig) {
        // 发放优惠券
        userCouponClient.sendUserCoupon(new SendCouponReq(coursePackageOrder.getAppUserId(), coursePackagePaymentConfig.getCouponIds()));
            if (coursePackagePaymentServiceOne==null) {
                TCoursePackagePayment coursePackagePayment = new TCoursePackagePayment();
                coursePackagePayment.setCode(code);
                coursePackagePayment.setAppUserId(appUser.getId());
                coursePackagePayment.setStudentId(Integer.valueOf(s));
                coursePackagePayment.setCoursePackageId(paymentCourseVo.getId());
                coursePackagePayment.setPayType(paymentCourseVo.getPayType());
                coursePackagePayment.setClassHours(coursePackagePaymentConfig.getClassHours()+hour);
                coursePackagePayment.setOriginalPrice(paymentCourseVo.getPrice());
                coursePackagePayment.setPlayPaiCoin(paymentPrice.intValue());
                coursePackagePayment.setTotalClassHours(coursePackagePaymentConfig.getClassHours()+hour);
                coursePackagePayment.setLaveClassHours(coursePackagePaymentConfig.getClassHours()+hour);
                coursePackagePayment.setAbsencesNumber(0);
                coursePackagePayment.setPayUserType(1);
                coursePackagePayment.setPayStatus(2);
                coursePackagePayment.setPayUserId(appUser.getId());
                coursePackagePayment.setStatus(1);
                coursePackagePayment.setState(1);
                coursePackagePayment.setInsertTime(new Date());
        //开始处理学员课程课时记录和排课数据
        TCoursePackage coursePackage = coursePackageService.getById(coursePackageOrder.getCoursePackageId());
        String[] split = coursePackageOrder.getStudentIds().split(";");
        for (String id : split) {
            CoursePackageOrderStudent coursePackageOrderStudent = coursePackageOrderStudentService.getOne(new QueryWrapper<CoursePackageOrderStudent>().eq("studentId", id)
                    .eq("coursePackageId", coursePackageOrder.getCoursePackageId()).eq("status", 1).eq("state", 1));
            if (null == coursePackageOrderStudent) {
                coursePackageOrderStudent = new CoursePackageOrderStudent();
                coursePackageOrderStudent.setAppUserId(coursePackageOrder.getAppUserId());
                coursePackageOrderStudent.setStudentId(Integer.valueOf(id));
                coursePackageOrderStudent.setCoursePackageId(coursePackageOrder.getCoursePackageId());
                coursePackageOrderStudent.setTotalClassHours(coursePackagePaymentConfig.getClassHours());
                coursePackageOrderStudent.setLaveClassHours(coursePackagePaymentConfig.getClassHours());
                coursePackageOrderStudent.setAbsencesNumber(0);
                coursePackageOrderStudent.setStatus(1);
                coursePackageOrderStudent.setState(1);
                coursePackageOrderStudent.setInsertTime(new Date());
                coursePackageOrderStudent.setGiftClassHours(0);
                if (course.getValidDays()!=null) {
                    Date date = new Date();
                Integer validDays = coursePackage.getValidDays();
                    Calendar calendar = Calendar.getInstance();
                    calendar.setTime(date);
                    calendar.add(Calendar.DATE, course.getValidDays());
                    date = calendar.getTime();
                    coursePackagePayment.setUseTime(date);
                }
                calendar.setTime(new Date());
                calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + validDays);
                coursePackageOrderStudent.setUseTime(calendar.getTime());
                coursePackagePaymentService.save(coursePackagePayment);
                Integer sId = null;
                Student student = studentClient.queryDefaultStudent(appUser.getId());
                if (student != null) {
                    sId = student.getId();
                //开始排课
                addPackageStudent(coursePackage, coursePackageOrder.getAppUserId(), Integer.valueOf(id), coursePackageOrderStudent);
            } else {
                Date useTime = coursePackageOrderStudent.getUseTime();
                coursePackageOrderStudent.setTotalClassHours(coursePackageOrderStudent.getTotalClassHours() + coursePackagePaymentConfig.getClassHours());
                coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours() + coursePackagePaymentConfig.getClassHours());
                Integer validDays = coursePackage.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());
                //中间断课,没有连续续费的情况需要重新排课
                if (useTime.compareTo(new Date()) < 0) {
                    addPackageStudent(coursePackage, coursePackageOrder.getAppUserId(), Integer.valueOf(id), coursePackageOrderStudent);
                }
                addPackageStudent(paymentCourseVo.getId(), appUser.getId(), Integer.valueOf(s), coursePackagePayment.getId(),null);
            }
            coursePackageOrderStudentService.saveOrUpdate(coursePackageOrderStudent);
                //课时记录
                CourseCounsum courseCounsum = new CourseCounsum();
                courseCounsum.setPaymentId(coursePackagePayment.getId());
            courseCounsum.setPaymentId(coursePackageOrder.getId());
                courseCounsum.setChangeType(1);
                courseCounsum.setNum(coursePackagePaymentConfig.getClassHours());
                courseCounsum.setInsertTime(new Date());
                courseCounsum.setReason("购买课包");
                courseCounsumService.save(courseCounsum);
                if (hour!=0){
                    CourseCounsum courseCounsum1 = new CourseCounsum();
                    courseCounsum1.setPaymentId(coursePackagePayment.getId());
                    courseCounsum1.setChangeType(1);
                    courseCounsum1.setNum(hour);
                    courseCounsum1.setInsertTime(new Date());
                    courseCounsum1.setReason("赠送课时");
                    courseCounsumService.save(courseCounsum1);
        }
                }
                pays.add(coursePackagePayment.getId());
            }else{
                coursePackagePaymentServiceOne.setClassHours(coursePackagePaymentServiceOne.getClassHours()+coursePackagePaymentConfig.getClassHours()+hour);
                if (coursePackagePaymentServiceOne.getOriginalPrice()!=null) {
                    coursePackagePaymentServiceOne.setOriginalPrice(coursePackagePaymentServiceOne.getOriginalPrice() + paymentCourseVo.getPrice());
                }else {
                    coursePackagePaymentServiceOne.setOriginalPrice(paymentCourseVo.getPrice());
                }
                if (coursePackagePaymentServiceOne.getPlayPaiCoin()==null){
                    coursePackagePaymentServiceOne.setPlayPaiCoin(paymentPrice.intValue());
                }else {
                coursePackagePaymentServiceOne.setPlayPaiCoin(coursePackagePaymentServiceOne.getPlayPaiCoin()+paymentPrice.intValue());}
                coursePackagePaymentServiceOne.setTotalClassHours(coursePackagePaymentServiceOne.getTotalClassHours()+coursePackagePaymentConfig.getClassHours()+hour);
                coursePackagePaymentServiceOne.setLaveClassHours(coursePackagePaymentServiceOne.getLaveClassHours()+coursePackagePaymentConfig.getClassHours()+hour);
                coursePackagePaymentServiceOne.setAppUserId(null);
                if (course.getValidDays()!=null) {
                    Date date = coursePackagePaymentServiceOne.getUseTime();
                    Calendar calendar = Calendar.getInstance();
                    calendar.setTime(date);
                    calendar.add(Calendar.DATE, course.getValidDays());
                    date = calendar.getTime();
                    coursePackagePaymentServiceOne.setUseTime(date);
                }
                coursePackagePaymentService.updateById(coursePackagePaymentServiceOne);
//                coursePackagePaymentService.save(coursePackagePayment);
                Integer sId = null;
                Student student = studentClient.queryDefaultStudent(appUser.getId());
                if (student != null) {
                    sId = student.getId();
                }
                addPackageStudent(paymentCourseVo.getId(), appUser.getId(), Integer.valueOf(s), coursePackagePaymentServiceOne.getId(),null);
                CourseCounsum courseCounsum = new CourseCounsum();
                courseCounsum.setPaymentId(coursePackagePaymentServiceOne.getId());
                courseCounsum.setChangeType(1);
                courseCounsum.setNum(coursePackagePaymentConfig.getClassHours());
                courseCounsum.setInsertTime(new Date());
                courseCounsum.setReason("续课");
                courseCounsumService.save(courseCounsum);
                if (hour!=0){
                    CourseCounsum courseCounsum1 = new CourseCounsum();
                    courseCounsum1.setPaymentId(coursePackagePaymentServiceOne.getId());
                    courseCounsum1.setChangeType(1);
                    courseCounsum1.setNum(hour);
                    courseCounsum1.setInsertTime(new Date());
                    courseCounsum1.setReason("赠送课时");
                    courseCounsumService.save(courseCounsum1);
                }
                pays.add(coursePackagePaymentServiceOne.getId());
            }
        }
        if (paymentCourseVo.getOrderId()==null) {
            TOrder order = new TOrder();
            order.setIsPay(1);
            order.setPayType(2);
            order.setAppUserId(appUser.getId());
            order.setPrice(paymentPrice);
            order.setCode(code);
            String paysStr = pays.stream()
                    .map(String::valueOf)
                    .collect(Collectors.joining(","));
            order.setPaysId(paysStr);
            orderService.save(order);
        }
        Integer playPaiCoins = appUser.getPlayPaiCoins();
        appUser.setPlayPaiCoins(playPaiCoins - paymentPrice.intValue());
        appUserClient.updateAppUser(appUser);
        // 2.0
        String couponIds = coursePackagePaymentConfig.getCouponIds();
        if(ToolUtil.isNotEmpty(couponIds)){
            // 赠送优惠券
            userCouponClient.sendUserCoupon(new SendCouponReq(appUser.getId(),couponIds));
        }
        return ResultUtil.success();
    }
    private void addPackageStudent(Integer courseId, Integer userId, Integer sId,Long paymentId,Double price) throws ParseException {
        // 课包
        TCoursePackage tCoursePackage = this.baseMapper.selectById(courseId);
    /**
     * 新购买课程后的排课
     *
     * @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");
            //查出当前用户当前学员当前课包最后一天的排课数据
            List<CoursePackageStudent> studentCourse = coursePackageStudentService.list(new QueryWrapper<CoursePackageStudent>().eq("studentId", sId).eq("coursePackageId", courseId));
            List<Long> collect = studentCourse.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList());
            //拿到最后一天的排课记录
            if (collect.size() > 0){
                coursePackageSchedulingService.remove(new QueryWrapper<CoursePackageScheduling>().in("id", collect));
                coursePackageStudentService.remove(new QueryWrapper<CoursePackageStudent>().eq("studentId", sId).eq("coursePackageId", courseId));
                if (price!=null) {
                    CourseCounsum courseCounsum = new CourseCounsum();
                    courseCounsum.setPaymentId(paymentId);
                    courseCounsum.setChangeType(3);
                    courseCounsum.setInsertTime(new Date());
                    courseCounsum.setReason("续课;" + price);
                    courseCounsum.setAppUserId(userId);
                    courseCounsumService.save(courseCounsum);
                }
            }else {
                if (price!=null) {
                    CourseCounsum courseCounsum = new CourseCounsum();
                    courseCounsum.setPaymentId(paymentId);
                    courseCounsum.setChangeType(3);
                    courseCounsum.setInsertTime(new Date());
                    courseCounsum.setReason("报名课程;" + price);
                    courseCounsum.setAppUserId(userId);
                    courseCounsumService.save(courseCounsum);
                }
            }
            Date today = new Date();
            TCoursePackagePayment pay = coursePackagePaymentService.getById(paymentId);
            Integer laveClassHours = pay.getLaveClassHours();
                //剩余课时
                Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours();
                //扣除课时数
            Integer codeTime = tCoursePackage.getCodeTime();
            Integer can = 0;
            int count = 0;
            // 本周周几
            Date[] dates = generateDateArray(14, today);
            if (tCoursePackage.getType() == 1) {
                can = laveClassHours / codeTime;
                //排课 本周+下周,课时不够扣则直接剩余不排课
                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();
                    for (int j = 0; j < split.length; j++) {
                        //判断当天是否在排课星期内
                        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 (tCoursePackage.getType() == 2) {
                Date startDate = tCoursePackage.getStartTime();
                Date endDate = tCoursePackage.getEndTime();
                dates = generateDateArray1(startDate, endDate);
                can = 999;
            }
            for (Date date : dates) {
                if (count == can) {
                        //大于有效期不进行排课
                        if (calendar.getTimeInMillis() >= useTime.getTime()) {
                    break;
                }
                int wei = DateUtil.dayOfWeek(date)-1;
                if (wei == 0){
                    wei = 7;
                }
                if (week.contains(wei)) {
                    for (int i1 = 0; i1 < split.length; i1++) {
                        if (count == can) {
                        //剩余数量不足以排课
                        if (laveClassHours.compareTo(codeTime) < 0) {
                            break;
                        }
                        laveClassHours -= codeTime;
                        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]);
                        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);
@@ -1773,61 +1312,57 @@
                        student1.setAppUserId(userId);
                        student1.setStudentId(sId);
                        student1.setCoursePackageId(tCoursePackage.getId());
                        student1.setCoursePackagePaymentId(paymentId);
                        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);
                    }
                }
            }
        }else if (tCoursePackage.getType()==2){
            if (tCoursePackage.getType() == 2) {
                //上课星期
            String classWeeks = tCoursePackage.getClassWeeks();
            List<Integer> week = week(classWeeks);
            Date today = new Date();
                //上课时段
                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();
            LocalDate startDate = startTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
            LocalDate endDate = endTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
            Period period = Period.between(startDate, endDate);
            int days = period.getDays() + 1;
            Integer can =999;
            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");
                //排课 本周+下周,课时不够扣则直接剩余不排课
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(startTime);
            calendar.add(Calendar.DAY_OF_MONTH, -1);
            TCoursePackagePayment pay = coursePackagePaymentService.getById(paymentId);
            Date[] dates = generateDateArray(days,calendar.getTime());
            for (Date date : dates) {
                if (count==can){
                    break;
                //假期开始使用当前时间为起始时间进行排课
                calendar.setTime(startTime.getTime() > System.currentTimeMillis() ? startTime : new Date());
                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;
                for (int i = 0; i < num; i++) {
                    Date time = calendar.getTime();
                    for (int j = 0; j < split.length; j++) {
                        //判断当天是否在排课星期内
                        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;
                }
                int wei =  cn.hutool.core.date.DateUtil.dayOfWeek(date)-1;
                if (wei == 0){
                    wei =7;
                }
                if (week.contains(wei)){
                    for (int i1 = 0; i1 < split.length; i1++) {
                        if (count==can){
                        //大于有效期不进行排课
                        if (calendar.getTimeInMillis() >= endTime.getTime()) {
                            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]);
                        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);
@@ -1836,51 +1371,21 @@
                        student1.setAppUserId(userId);
                        student1.setStudentId(sId);
                        student1.setCoursePackageId(tCoursePackage.getId());
                        student1.setCoursePackagePaymentId(pay.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);
                    }
                }
            }
        }else if (tCoursePackage.getType()==3){
            if (price!=null) {
                CourseCounsum courseCounsum = new CourseCounsum();
                courseCounsum.setPaymentId(paymentId);
                courseCounsum.setChangeType(3);
                courseCounsum.setInsertTime(new Date());
                courseCounsum.setReason("购买体验课;" + price);
                courseCounsum.setAppUserId(userId);
                courseCounsumService.save(courseCounsum);
        } catch (Exception e) {
            e.printStackTrace();
            }
            //生成当天的排课记录
            //生成学员的上课表
        }
        // 2.0
        TCourseInfoRecord tCourseInfoRecord = new TCourseInfoRecord();
        tCourseInfoRecord.setUserId(userId);
        tCourseInfoRecord.setCourseId(courseId);
        tCourseInfoRecord.setName("报名运动营");
        tCourseInfoRecord.setNum(tCoursePackage.getNeedNum());
        tCourseInfoRecord.setTime(new Date());
        tCourseInfoRecord.setType(2);
        appUserClient.addCourseInfoRecord(tCourseInfoRecord);
    }
@@ -1936,7 +1441,6 @@
    }
    public static Date[] generateDateArray(int numDays,Date date) {
//        LocalDate tomorrow = LocalDate.now().plusDays(1);
        LocalDate tomorrow = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate().plusDays(1);
@@ -1950,8 +1454,10 @@
        return dates;
    }
    /**
     * 获取课包管理列表数据
     *
     * @param queryCoursePackageLists
     * @return
     */
@@ -1982,6 +1488,7 @@
    /**
     * 添加课包
     *
     * @param coursePackage
     * @return
     */
@@ -2071,6 +1578,7 @@
    /**
     * 修改数据
     *
     * @param coursePackage
     */
    @Override
@@ -2153,6 +1661,7 @@
    /**
     * 获取课包审核列表
     *
     * @param page
     * @param queryExamineCoursePackageLists
     * @return