44323
2023-11-27 e9085eb620dcae1ceae24bc8b70e1a6bca228b15
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java
@@ -1,9 +1,10 @@
package com.dsh.course.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -12,7 +13,6 @@
import com.dsh.course.feignclient.account.StudentClient;
import com.dsh.course.feignclient.account.model.AppUser;
import com.dsh.course.feignclient.account.model.Student;
import com.dsh.course.feignclient.account.model.TCourseInfoRecord;
import com.dsh.course.feignclient.activity.CouponClient;
import com.dsh.course.feignclient.activity.UserCouponClient;
import com.dsh.course.feignclient.activity.model.Coupon;
@@ -28,11 +28,15 @@
import com.dsh.course.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.Period;
import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
@@ -60,6 +64,9 @@
    private ICoursePackagePaymentConfigService coursePackagePaymentConfigService;
    @Autowired
    private CourseCounsumService courseCounsumService;
    @Autowired
    private TCoursePackageDiscountService coursePackageDiscountService;
    @Resource
@@ -85,6 +92,16 @@
    @Resource
    private CoursePackageStudentMapper cpsMapper;
    @Autowired
    private ICoursePackageOrderStudentService coursePackageOrderStudentService;
    @Autowired
    private ICoursePackageOrderService coursePackageOrderService;
    @Autowired
    private TOrderService orderService;
    @Autowired
    private TCoursePackageService coursePackageService;
    @Override
@@ -95,6 +112,7 @@
    /**
     * 获取课程列表
     *
     * @param coursePackageList
     * @return
     * @throws Exception
@@ -105,26 +123,36 @@
        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);
        QueryWrapper<TCoursePackage> wrapper = new QueryWrapper<TCoursePackage>().in("status", Arrays.asList(1, 2))
                .eq("auditStatus", 2).eq("state", 1).eq("provinceCode", provinceCode).eq("cityCode", cityCode);
        if(null != coursePackageList.getCoursePackageTypeId()){
                .eq("auditStatus", 2).eq("state", 1);
        if (null != coursePackageList.getCoursePackageTypeId()) {
            wrapper.eq("coursePackageTypeId", coursePackageList.getCoursePackageTypeId());
        }
        if(null != coursePackageList.getStoreId()){
        if (null != coursePackageList.getStoreId()) {
            wrapper.eq("storeId", coursePackageList.getStoreId());
        }
        if(null != coursePackageList.getStoreId()){
        if (null != coursePackageList.getStoreId()) {
            wrapper.eq("storeId", coursePackageList.getStoreId());
        }
        if(ToolUtil.isNotEmpty(coursePackageList.getSearch())){
        if (ToolUtil.isNotEmpty(coursePackageList.getSearch())) {
            wrapper.like("name", coursePackageList.getSearch());
            List<Store> stores = storeClient.queryStoreListByName(coursePackageList.getSearch());
            List<Integer> collect = stores.stream().map(Store::getId).collect(Collectors.toList());
            if(collect.size() > 0){
                wrapper.or().in("id", collect);
            if (collect.size() > 0) {
                wrapper.or().in("storeId", collect);
            }
        }
        List<TCoursePackage> list = this.list(wrapper.last(" order by sort, insertTime desc"));
        List<TCoursePackage> list1 = this.list(wrapper.last(" order by sort desc, insertTime desc"));
        Date currentTime = new Date();
// Filter the list based on the conditions
        List<TCoursePackage> list = list1.stream()
                .filter(coursePackage -> coursePackage.getType() != 2 || currentTime.before(coursePackage.getEndTime()))
                .collect(Collectors.toList());
        List<CoursePackageListVo> listVos = new ArrayList<>();
        for (TCoursePackage coursePackage : list) {
            Store store = storeClient.queryStoreById(coursePackage.getStoreId());
@@ -143,122 +171,162 @@
            ArrayList<String> classTime = new ArrayList<>();
            String[] split = classStartTime.split(",");
            String[] split3 = classEndTime.split(",");
            for (int i = 0; i < split.length; i++) {
                String s = split[i] + "-" +  split3[i];
                classTime.add(s);
            if (ToolUtil.isNotEmpty(classStartTime)) {
                for (int i = 0; i < split.length; i++) {
                    String s = split[i].substring(0, 5) + "-" + split3[i].substring(0, 5);
                    classTime.add(s);
                }
            }
            coursePackageListVo.setClassStartTime(classTime);
            coursePackageListVo.setType(coursePackage.getType());
            coursePackageListVo.setApplicantsNumber(integer);
            coursePackageListVo.setPayType(coursePackage.getPayType());
            coursePackageListVo.setPlayPaiCoin(coursePackagePaymentConfig.getPlayPaiCoin());
            Double cashPayment1 = coursePackagePaymentConfig.getCashPayment();
            Integer playPaiCoin = coursePackagePaymentConfig.getPlayPaiCoin();
            if (ToolUtil.isNotEmpty(cashPayment1) && cashPayment1 > 0 && ToolUtil.isNotEmpty(playPaiCoin) && playPaiCoin > 0) {
                coursePackageListVo.setPayType(3);
            } else if (ToolUtil.isNotEmpty(cashPayment1) && cashPayment1 > 0) {
                coursePackageListVo.setPayType(1);
            } else if (ToolUtil.isNotEmpty(playPaiCoin) && playPaiCoin > 0) {
                coursePackageListVo.setPayType(2);
            }
            if (coursePackagePaymentConfig != null) {
                coursePackageListVo.setPlayPaiCoin(coursePackagePaymentConfig.getPlayPaiCoin());
            }
            //会员显示原价和会员价(最低)。非会员显示会员价和支付价(最低)
            if(appUser.getIsVip() == 0){//非会员
                List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
                        .eq("type", 1).eq("auditStatus", 2));
                Double vipPrice = coursePackagePaymentConfig.getCashPayment();
                for (TCoursePackageDiscount coursePackageDiscount : list2) {
                    Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("discountMember");
                    if(vipPrice.compareTo(num1) > 0){
                        vipPrice = num1;
                    }
//            if(appUser.getIsVip() == 0){//非会员
            List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
                    .eq("type", 1).eq("auditStatus", 2).eq("status", 1));
            Double vipPrice = coursePackagePaymentConfig.getCashPayment();
            for (TCoursePackageDiscount coursePackageDiscount : list2) {
                Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("discountMember");
                if (vipPrice.compareTo(num1) > 0) {
                    vipPrice = num1;
                }
                coursePackageListVo.setVipPrice(vipPrice);
            }
            coursePackageListVo.setVipPrice(vipPrice);
            coursePackageListVo.setOriginalPrice(coursePackagePaymentConfig.getCashPayment());
                Double paymentPrice = coursePackagePaymentConfig.getCashPayment();
                List<TCoursePackageDiscount> list3 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
                        .eq("type", 3).eq("auditStatus", 2));
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                for (TCoursePackageDiscount coursePackageDiscount : list3) {
                    /**
                     * [{
                     *    "startDate": "2023-01-01 00:00:00",
                     *    "endDate": "2023-12-31 23:59:59",
                     *    "startTime": "02:00:00",
                     *    "endTime": "23:00:00",
                     *    "weeks": [1, 2, 7],
                     *    "cashPayment": 100
                     * }]
                     */
                    JSONArray jsonArray = JSON.parseArray(coursePackageDiscount.getContent());
                    for (int i = 0; i < jsonArray.size(); i++) {
                        try {
                            JSONObject jsonObject = jsonArray.getJSONObject(i);
                            String startDate = jsonObject.getString("startDate");
                            String endDate = jsonObject.getString("endDate");
                            String startTime = jsonObject.getString("startTime");
                            String endTime = jsonObject.getString("endTime");
                            List<Integer> weeks = jsonObject.getJSONArray("weeks").toJavaList(Integer.class);
                            Double cashPayment = jsonObject.getDouble("cashPayment");
                            Date startDate_date = sdf.parse(startDate);
                            Date endDate_date = sdf.parse(endDate);
                            long timeMillis = System.currentTimeMillis();
                            if(timeMillis >= startDate_date.getTime() && timeMillis < endDate_date.getTime()){
                                Date date = new Date();
                                Calendar calendar = Calendar.getInstance();
                                calendar.setTime(date);
                                int week = calendar.get(Calendar.DAY_OF_WEEK);
                                boolean isFirstSunday = (calendar.getFirstDayOfWeek() == Calendar.SUNDAY);
                                if(isFirstSunday){
                                    week = week - 1;
                                    if(week == 0){
                                        week = 7;
                                    }
                                }
                                if(!weeks.contains(week)){
                                    continue;
                                }
                                String[] split1 = startTime.split(":");
                                Integer hour1 = Integer.valueOf(split1[0]);
                                Calendar s = Calendar.getInstance();
                                s.setTime(date);
                                s.set(Calendar.HOUR_OF_DAY, hour1);
                                s.set(Calendar.MINUTE, Integer.valueOf(split1[1]));
                                s.set(Calendar.SECOND, Integer.valueOf(split1[2]));
                                String[] split2 = endTime.split(":");
                                Integer hour2 = Integer.valueOf(split2[0]);
                                Calendar e = Calendar.getInstance();
                                e.setTime(date);
                                e.set(Calendar.HOUR_OF_DAY, hour2);
                                e.set(Calendar.MINUTE, Integer.valueOf(split2[1]));
                                e.set(Calendar.SECOND, Integer.valueOf(split2[2]));
                                if(hour1 > hour2){
                                    if(s.getTimeInMillis() > date.getTime()){
                                        s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1);
                                    }else{
                                        e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1);
                                    }
                                }
                                if(timeMillis >= s.getTimeInMillis() && timeMillis < e.getTimeInMillis() && paymentPrice.compareTo(cashPayment) > 0){
                                    paymentPrice = cashPayment;
            Double paymentPrice = coursePackagePaymentConfig.getCashPayment();
            List<TCoursePackageDiscount> list3 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
                    .eq("type", 3).eq("auditStatus", 2).eq("status", 1));
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            for (TCoursePackageDiscount coursePackageDiscount : list3) {
                /**
                 * [{
                 *    "startDate": "2023-01-01 00:00:00",
                 *    "endDate": "2023-12-31 23:59:59",
                 *    "startTime": "02:00:00",
                 *    "endTime": "23:00:00",
                 *    "weeks": [1, 2, 7],
                 *    "cashPayment": 100
                 * }]
                 */
                JSONArray jsonArray = JSON.parseArray(coursePackageDiscount.getContent());
                for (int i = 0; i < jsonArray.size(); i++) {
                    try {
                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        String startDate = jsonObject.getString("startDate");
                        String endDate = jsonObject.getString("endDate");
                        String startTime = jsonObject.getString("startTime");
                        String endTime = jsonObject.getString("endTime");
                        List<Integer> weeks = jsonObject.getJSONArray("weeks").toJavaList(Integer.class);
                        Double cashPayment = jsonObject.getDouble("cashPayment");
                        Date startDate_date = sdf.parse(startDate);
                        Date endDate_date = sdf.parse(endDate);
                        long timeMillis = System.currentTimeMillis();
                        if (timeMillis >= startDate_date.getTime() && timeMillis < endDate_date.getTime()) {
                            Date date = new Date();
                            Calendar calendar = Calendar.getInstance();
                            calendar.setTime(date);
                            int week = calendar.get(Calendar.DAY_OF_WEEK);
                            boolean isFirstSunday = (calendar.getFirstDayOfWeek() == Calendar.SUNDAY);
                            if (isFirstSunday) {
                                week = week - 1;
                                if (week == 0) {
                                    week = 7;
                                }
                            }
                        }catch (Exception e){
                            e.printStackTrace();
                            if (!weeks.contains(week)) {
                                continue;
                            }
                            String[] split1 = startTime.split(":");
                            Integer hour1 = Integer.valueOf(split1[0]);
                            Calendar s = Calendar.getInstance();
                            s.setTime(date);
                            s.set(Calendar.HOUR_OF_DAY, hour1);
                            s.set(Calendar.MINUTE, Integer.valueOf(split1[1]));
                            s.set(Calendar.SECOND, Integer.valueOf(split1[2]));
                            String[] split2 = endTime.split(":");
                            Integer hour2 = Integer.valueOf(split2[0]);
                            Calendar e = Calendar.getInstance();
                            e.setTime(date);
                            e.set(Calendar.HOUR_OF_DAY, hour2);
                            e.set(Calendar.MINUTE, Integer.valueOf(split2[1]));
                            e.set(Calendar.SECOND, Integer.valueOf(split2[2]));
                            if (hour1 > hour2) {
                                if (s.getTimeInMillis() > date.getTime()) {
                                    s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1);
                                } else {
                                    e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1);
                                }
                            }
                            if (timeMillis >= s.getTimeInMillis() && timeMillis < e.getTimeInMillis() && paymentPrice.compareTo(cashPayment) > 0) {
                                paymentPrice = cashPayment;
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                coursePackageListVo.setPaymentPrice(paymentPrice);
            }else{
                List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
                        .eq("type", 1).eq("auditStatus", 2));
                Double vipPrice = coursePackagePaymentConfig.getCashPayment();
                for (TCoursePackageDiscount coursePackageDiscount : list2) {
                    Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("discountMember");
                    if(vipPrice.compareTo(num1) > 0){
                        vipPrice = num1;
                    }
                }
                coursePackageListVo.setPaymentPrice(vipPrice);
                coursePackageListVo.setOriginalPrice(coursePackagePaymentConfig.getCashPayment());
            }
            coursePackageListVo.setPaymentPrice(paymentPrice);
            double vipPrice1 = coursePackageListVo.getVipPrice();
            double originalPrice1 = coursePackageListVo.getOriginalPrice();
            double paymentPrice1 = coursePackageListVo.getPaymentPrice();
//            double minPrice = Math.min(vipPrice1, Math.min(originalPrice1, paymentPrice1));
//            double maxPrice = Math.max(vipPrice1, Math.max(originalPrice1, paymentPrice1));
//            coursePackageListVo.setPaymentPrice(minPrice);
//            coursePackageListVo.setOriginalPrice(maxPrice);
//            System.out.println("Minimum price: " + minPrice);
//            }
//            else{
//                List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
//                        .eq("type", 1).eq("auditStatus", 2).eq("status",1));
//                Double vipPrice = coursePackagePaymentConfig.getCashPayment();
//                for (TCoursePackageDiscount coursePackageDiscount : list2) {
//                    Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("discountMember");
//                    if(vipPrice.compareTo(num1) > 0){
//                        vipPrice = num1;
//                    }
//                }
//                coursePackageListVo.setPaymentPrice(vipPrice);
//                coursePackageListVo.setOriginalPrice(coursePackagePaymentConfig.getCashPayment());
//            }
            if (coursePackageListVo.getPaymentPrice() < coursePackageListVo.getVipPrice()) {
                coursePackageListVo.setOriginalPrice(coursePackagePaymentConfig.getCashPayment());
//                coursePackageListVo.setVipPrice(null);
            }
            if (appUser.getIsVip() == 1) {
                if (coursePackageListVo.getVipPrice() < coursePackageListVo.getPaymentPrice()) {
                    coursePackageListVo.setPaymentPrice(coursePackageListVo.getVipPrice());
                }
            } else {
                coursePackageListVo.setVipPrice(null);
            }
            Map<String, Double> distance = GeodesyUtil.getDistance(coursePackageList.getLon() + "," + coursePackageList.getLat(), store.getLon() + "," + store.getLat());
            coursePackageListVo.setDistance(distance.get("WGS84") / 1000);
@@ -266,21 +334,41 @@
        }
        //销量排行
        if(ToolUtil.isNotEmpty(coursePackageList.getSalesRanking())){
        if (ToolUtil.isNotEmpty(coursePackageList.getSalesRanking()) && coursePackageList.getSalesRanking().equals("asc")) {
            Collections.sort(listVos, new Comparator<CoursePackageListVo>() {
                public int compare(CoursePackageListVo s1, CoursePackageListVo s2) {
                    return Integer.compare(s1.getApplicantsNumber(), s2.getApplicantsNumber());
                }
            });
        }
        if (ToolUtil.isNotEmpty(coursePackageList.getSalesRanking()) && coursePackageList.getSalesRanking().equals("desc")) {
            Collections.sort(listVos, new Comparator<CoursePackageListVo>() {
                public int compare(CoursePackageListVo s1, CoursePackageListVo s2) {
                    return Integer.compare(s2.getApplicantsNumber(), s1.getApplicantsNumber());
                }
            });
        }
        //距离排行
        if(ToolUtil.isNotEmpty(coursePackageList.getDistanceSort())){
        if (ToolUtil.isNotEmpty(coursePackageList.getDistanceSort()) && coursePackageList.getDistanceSort().equals("asc")) {
            Collections.sort(listVos, new Comparator<CoursePackageListVo>() {
                public int compare(CoursePackageListVo s1, CoursePackageListVo s2) {
                    return Double.compare(s1.getDistance(), s2.getDistance());
                }
            });
        }
        if (ToolUtil.isNotEmpty(coursePackageList.getDistanceSort()) && coursePackageList.getDistanceSort().equals("desc")) {
            Collections.sort(listVos, new Comparator<CoursePackageListVo>() {
                public int compare(CoursePackageListVo s1, CoursePackageListVo s2) {
                    return Double.compare(s2.getDistance(), s1.getDistance());
                }
            });
        }
        return listVos;
    }
@@ -293,20 +381,20 @@
        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);
        if(null != coursePackageList.getCoursePackageTypeId()){
        if (null != coursePackageList.getCoursePackageTypeId()) {
            wrapper.eq("coursePackageTypeId", coursePackageList.getCoursePackageTypeId());
        }
        if(null != coursePackageList.getStoreId()){
        if (null != coursePackageList.getStoreId()) {
            wrapper.eq("storeId", coursePackageList.getStoreId());
        }
        if(null != coursePackageList.getStoreId()){
        if (null != coursePackageList.getStoreId()) {
            wrapper.eq("storeId", coursePackageList.getStoreId());
        }
        if(ToolUtil.isNotEmpty(coursePackageList.getSearch())){
        if (ToolUtil.isNotEmpty(coursePackageList.getSearch())) {
            wrapper.like("name", coursePackageList.getSearch());
            List<Store> stores = storeClient.queryStoreListByName(coursePackageList.getSearch());
            List<Integer> collect = stores.stream().map(Store::getId).collect(Collectors.toList());
            if(collect.size() > 0){
            if (collect.size() > 0) {
                wrapper.or().in("storeId", collect);
            }
        }
@@ -321,7 +409,18 @@
            coursePackageListVo.setId(coursePackage.getId());
            coursePackageListVo.setName(coursePackage.getName());
            coursePackageListVo.setStoreName(null != store ? store.getName() : "");
//            coursePackageListVo.setPayType();
            coursePackageListVo.setCoverDrawing(coursePackage.getCoverDrawing());
            Double cashPayment1 = coursePackagePaymentConfig.getCashPayment();
            Integer playPaiCoin = coursePackagePaymentConfig.getPlayPaiCoin();
            if (ToolUtil.isNotEmpty(cashPayment1) && cashPayment1 > 0 && ToolUtil.isNotEmpty(playPaiCoin) && playPaiCoin > 0) {
                coursePackageListVo.setPayType(3);
            } else if (ToolUtil.isNotEmpty(cashPayment1) && cashPayment1 > 0) {
                coursePackageListVo.setPayType(1);
            } else if (ToolUtil.isNotEmpty(playPaiCoin) && playPaiCoin > 0) {
                coursePackageListVo.setPayType(2);
            }
            // 2.0修改
            String classStartTime = coursePackage.getClassStartTime();
@@ -330,12 +429,11 @@
            String[] split = classStartTime.split(",");
            String[] split3 = classEndTime.split(",");
            for (int i = 0; i < split.length; i++) {
                String s = split[i] + "-" +  split3[i];
                String s = split[i] + "-" + split3[i];
                classTime.add(s);
            }
            coursePackageListVo.setClassStartTime(classTime);
            coursePackageListVo.setType(coursePackage.getType());
            coursePackageListVo.setApplicantsNumber(integer);
@@ -343,13 +441,13 @@
            coursePackageListVo.setPlayPaiCoin(coursePackagePaymentConfig.getPlayPaiCoin());
            //会员显示原价和会员价(最低)。非会员显示会员价和支付价(最低)
            if(false){//非会员
            if (false) {//非会员
                List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
                        .eq("type", 1).eq("auditStatus", 2));
                Double vipPrice = coursePackagePaymentConfig.getCashPayment();
                for (TCoursePackageDiscount coursePackageDiscount : list2) {
                    Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("discountMember");
                    if(vipPrice.compareTo(num1) > 0){
                    if (vipPrice.compareTo(num1) > 0) {
                        vipPrice = num1;
                    }
                }
@@ -383,19 +481,19 @@
                            Date startDate_date = sdf.parse(startDate);
                            Date endDate_date = sdf.parse(endDate);
                            long timeMillis = System.currentTimeMillis();
                            if(timeMillis >= startDate_date.getTime() && timeMillis < endDate_date.getTime()){
                            if (timeMillis >= startDate_date.getTime() && timeMillis < endDate_date.getTime()) {
                                Date date = new Date();
                                Calendar calendar = Calendar.getInstance();
                                calendar.setTime(date);
                                int week = calendar.get(Calendar.DAY_OF_WEEK);
                                boolean isFirstSunday = (calendar.getFirstDayOfWeek() == Calendar.SUNDAY);
                                if(isFirstSunday){
                                if (isFirstSunday) {
                                    week = week - 1;
                                    if(week == 0){
                                    if (week == 0) {
                                        week = 7;
                                    }
                                }
                                if(!weeks.contains(week)){
                                if (!weeks.contains(week)) {
                                    continue;
                                }
@@ -415,30 +513,30 @@
                                e.set(Calendar.MINUTE, Integer.valueOf(split2[1]));
                                e.set(Calendar.SECOND, Integer.valueOf(split2[2]));
                                if(hour1 > hour2){
                                    if(s.getTimeInMillis() > date.getTime()){
                                if (hour1 > hour2) {
                                    if (s.getTimeInMillis() > date.getTime()) {
                                        s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1);
                                    }else{
                                    } else {
                                        e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1);
                                    }
                                }
                                if(timeMillis >= s.getTimeInMillis() && timeMillis < e.getTimeInMillis() && paymentPrice.compareTo(cashPayment) > 0){
                                if (timeMillis >= s.getTimeInMillis() && timeMillis < e.getTimeInMillis() && paymentPrice.compareTo(cashPayment) > 0) {
                                    paymentPrice = cashPayment;
                                }
                            }
                        }catch (Exception e){
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
                coursePackageListVo.setPaymentPrice(paymentPrice);
            }else{
            } else {
                List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
                        .eq("type", 1).eq("auditStatus", 2));
                Double vipPrice = coursePackagePaymentConfig.getCashPayment();
                for (TCoursePackageDiscount coursePackageDiscount : list2) {
                    Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("discountMember");
                    if(vipPrice.compareTo(num1) > 0){
                    if (vipPrice.compareTo(num1) > 0) {
                        vipPrice = num1;
                    }
                }
@@ -452,7 +550,7 @@
        }
        //销量排行
        if(ToolUtil.isNotEmpty(coursePackageList.getSalesRanking())){
        if (ToolUtil.isNotEmpty(coursePackageList.getSalesRanking())) {
            Collections.sort(listVos, new Comparator<CoursePackageListVo>() {
                public int compare(CoursePackageListVo s1, CoursePackageListVo s2) {
                    return Integer.compare(s1.getApplicantsNumber(), s2.getApplicantsNumber());
@@ -460,7 +558,7 @@
            });
        }
        //距离排行
        if(ToolUtil.isNotEmpty(coursePackageList.getDistanceSort())){
        if (ToolUtil.isNotEmpty(coursePackageList.getDistanceSort())) {
            Collections.sort(listVos, new Comparator<CoursePackageListVo>() {
                public int compare(CoursePackageListVo s1, CoursePackageListVo s2) {
                    return Double.compare(s1.getDistance(), s2.getDistance());
@@ -473,6 +571,7 @@
    /**
     * 获取课包详情
     *
     * @param uid
     * @param id
     * @return
@@ -480,174 +579,226 @@
     */
    @Override
    public CoursePackageInfo queryCourseInfo(Integer uid, Integer id, String lon, String lat) throws Exception {
            AppUser appUser = appUserClient.queryAppUser(uid);
            TCoursePackage coursePackage = this.getById(id);
            CoursePackageInfo coursePackageInfo = new CoursePackageInfo();
            coursePackageInfo.setId(id);
            coursePackageInfo.setTime(coursePackage.getStartTime()+"-"+coursePackage.getEndTime());
            coursePackageInfo.setCoverDrawing(coursePackage.getCoverDrawing());
            coursePackageInfo.setName(coursePackage.getName());
            Store store = storeClient.queryStoreById(coursePackage.getStoreId());
            coursePackageInfo.setStoreName(store.getName());
            coursePackageInfo.setStoreCoverDrawing(store.getCoverDrawing());
            coursePackageInfo.setStoreAddress(store.getAddress());
            coursePackageInfo.setLon(store.getLon());
            coursePackageInfo.setLat(store.getLat());
            if(ToolUtil.isNotEmpty(lon) && ToolUtil.isNotEmpty(lat)){
                Map<String, Double> distance = GeodesyUtil.getDistance(lon + "," + lat, store.getLon() + "," + store.getLat());
                double wgs84 = new BigDecimal(distance.get("WGS84")).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                coursePackageInfo.setDistance(wgs84);
            }
        AppUser appUser = appUserClient.queryAppUser(uid);
        TCoursePackage coursePackage = this.getById(id);
        CoursePackageInfo coursePackageInfo = new CoursePackageInfo();
        coursePackageInfo.setIsVip(appUser.getIsVip());
        coursePackageInfo.setId(id);
        SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd");
        if (coursePackage.getType() == 2) {
            String[] split = coursePackage.getClassWeeks().split(";");
            coursePackageInfo.setWeeks(Arrays.asList(split));
            coursePackageInfo.setTime(format.format(coursePackage.getStartTime()) + "-" + format.format(coursePackage.getEndTime()));
        }
        coursePackageInfo.setCoverDrawing(coursePackage.getCoverDrawing());
            // 2.0
            String classStartTime = coursePackage.getClassStartTime();
            String classEndTime = coursePackage.getClassEndTime();
            ArrayList<String> classTime = new ArrayList<>();
            String[] split4 = classStartTime.split(",");
            String[] split3 = classEndTime.split(",");
        coursePackageInfo.setName(coursePackage.getName());
        Store store = storeClient.queryStoreById(coursePackage.getStoreId());
        coursePackageInfo.setStoreName(store.getName());
        coursePackageInfo.setStoreCoverDrawing(store.getCoverDrawing());
        coursePackageInfo.setStoreAddress(store.getAddress());
        coursePackageInfo.setLon(store.getLon());
        coursePackageInfo.setLat(store.getLat());
        if (ToolUtil.isNotEmpty(lon) && ToolUtil.isNotEmpty(lat)) {
            Map<String, Double> distance = GeodesyUtil.getDistance(lon + "," + lat, store.getLon() + "," + store.getLat());
            double wgs84 = new BigDecimal(distance.get("WGS84")).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
            coursePackageInfo.setDistance(wgs84);
        }
        String[] split = coursePackage.getClassWeeks().split(";");
        coursePackageInfo.setWeeks(Arrays.asList(split));
        // 2.0
        String classStartTime = coursePackage.getClassStartTime();
        String classEndTime = coursePackage.getClassEndTime();
        ArrayList<String> classTime = new ArrayList<>();
        String[] split4 = classStartTime.split(",");
        String[] split3 = classEndTime.split(",");
        if (ToolUtil.isNotEmpty(classStartTime)) {
            for (int i = 0; i < split4.length; i++) {
                String s = split4[i] + "-" +  split3[i];
                String s = split4[i].substring(0, 5) + "-" + split3[i].substring(0, 5);
                classTime.add(s);
            }
            coursePackageInfo.setTimes(classTime);
            coursePackageInfo.setType(coursePackage.getType());
        }
            coursePackageInfo.setDetailDrawing(coursePackage.getDetailDrawing());
            coursePackageInfo.setIntroduceDrawing(coursePackage.getIntroduceDrawing());
            List<CoursePackagePaymentConfigVo> list = new ArrayList<>();
            List<CoursePackagePaymentConfig> list1 = coursePackagePaymentConfigService.list(new QueryWrapper<CoursePackagePaymentConfig>().eq("coursePackageId", id).orderByAsc("classHours"));
            list1.forEach(coursePackagePaymentConfig -> {
                CoursePackagePaymentConfigVo coursePackagePaymentConfigVo = new CoursePackagePaymentConfigVo();
                coursePackagePaymentConfigVo.setId(coursePackagePaymentConfig.getId());
                coursePackagePaymentConfigVo.setClassHours(coursePackagePaymentConfig.getClassHours());
                coursePackagePaymentConfigVo.setPayType(coursePackage.getPayType());
                coursePackagePaymentConfigVo.setPlayPaiCoin(coursePackagePaymentConfig.getPlayPaiCoin());
                //会员显示原价和支付价(会员价)。非会员显示会员价和支付价(最低)
                if(appUser.getIsVip() == 0){//非会员
                    List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
                            .eq("type", 1).eq("auditStatus", 2));
                    Double vipPrice = coursePackagePaymentConfig.getCashPayment();
                    for (TCoursePackageDiscount coursePackageDiscount : list2) {
                        Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("discountMember");
                        if(vipPrice.compareTo(num1) > 0){
                            vipPrice = num1;
                        }
                    }
                    coursePackagePaymentConfigVo.setVipPrice(vipPrice);
        coursePackageInfo.setTimes(classTime);
        coursePackageInfo.setType(coursePackage.getType());
                    Double paymentPrice = coursePackagePaymentConfig.getCashPayment();
                    List<TCoursePackageDiscount> list3 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
                            .eq("type", 3).eq("auditStatus", 2));
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    for (TCoursePackageDiscount coursePackageDiscount : list3) {
                        /**
                         * [{
                         *    "startDate": "2023-01-01 00:00:00",
                         *    "endDate": "2023-12-31 23:59:59",
                         *    "startTime": "02:00:00",
                         *    "endTime": "23:00:00",
                         *    "weeks": [1, 2, 7],
                         *    "cashPayment": 100
                         * }]
                         */
                        JSONArray jsonArray = JSON.parseArray(coursePackageDiscount.getContent());
                        for (int i = 0; i < jsonArray.size(); i++) {
                            try {
                                JSONObject jsonObject = jsonArray.getJSONObject(i);
                                String startDate = jsonObject.getString("startDate");
                                String endDate = jsonObject.getString("endDate");
                                String startTime = jsonObject.getString("startTime");
                                String endTime = jsonObject.getString("endTime");
                                List<Integer> weeks = jsonObject.getJSONArray("weeks").toJavaList(Integer.class);
                                Double cashPayment = jsonObject.getDouble("cashPayment");
                                Date startDate_date = sdf.parse(startDate);
                                Date endDate_date = sdf.parse(endDate);
                                long timeMillis = System.currentTimeMillis();
                                if(timeMillis >= startDate_date.getTime() && timeMillis < endDate_date.getTime()){
                                    Date date = new Date();
                                    Calendar calendar = Calendar.getInstance();
                                    calendar.setTime(date);
                                    int week = calendar.get(Calendar.DAY_OF_WEEK);
                                    boolean isFirstSunday = (calendar.getFirstDayOfWeek() == Calendar.SUNDAY);
                                    if(isFirstSunday){
                                        week = week - 1;
                                        if(week == 0){
                                            week = 7;
                                        }
                                    }
                                    if(!weeks.contains(week)){
                                        continue;
                                    }
        coursePackageInfo.setDetailDrawing(coursePackage.getDetailDrawing());
        coursePackageInfo.setIntroduceDrawing(coursePackage.getIntroduceDrawing());
                                    String[] split1 = startTime.split(":");
                                    Integer hour1 = Integer.valueOf(split1[0]);
                                    Calendar s = Calendar.getInstance();
                                    s.setTime(date);
                                    s.set(Calendar.HOUR_OF_DAY, hour1);
                                    s.set(Calendar.MINUTE, Integer.valueOf(split1[1]));
                                    s.set(Calendar.SECOND, Integer.valueOf(split1[2]));
                                    String[] split2 = endTime.split(":");
                                    Integer hour2 = Integer.valueOf(split2[0]);
                                    Calendar e = Calendar.getInstance();
                                    e.setTime(date);
                                    e.set(Calendar.HOUR_OF_DAY, hour2);
                                    e.set(Calendar.MINUTE, Integer.valueOf(split2[1]));
                                    e.set(Calendar.SECOND, Integer.valueOf(split2[2]));
        List<CoursePackagePaymentConfigVo> list = new ArrayList<>();
        List<CoursePackagePaymentConfig> list1 = coursePackagePaymentConfigService.list(new QueryWrapper<CoursePackagePaymentConfig>().eq("coursePackageId", id).orderByAsc("classHours"));
        list1.forEach(coursePackagePaymentConfig -> {
            CoursePackagePaymentConfigVo coursePackagePaymentConfigVo = new CoursePackagePaymentConfigVo();
            coursePackagePaymentConfigVo.setId(coursePackagePaymentConfig.getId());
            coursePackagePaymentConfigVo.setClassHours(coursePackagePaymentConfig.getClassHours());
            coursePackagePaymentConfigVo.setPlayPaiCoin(coursePackagePaymentConfig.getPlayPaiCoin());
                                    if(hour1 > hour2){
                                        if(s.getTimeInMillis() > date.getTime()){
                                            s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1);
                                        }else{
                                            e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1);
                                        }
                                    }
                                    if(timeMillis >= s.getTimeInMillis() && timeMillis < e.getTimeInMillis() && paymentPrice.compareTo(cashPayment) > 0){
                                        paymentPrice = cashPayment;
                                    }
            if (ToolUtil.isNotEmpty(coursePackagePaymentConfig.getCashPayment()) && coursePackagePaymentConfig.getCashPayment() > 0 && ToolUtil.isNotEmpty(coursePackagePaymentConfig.getPlayPaiCoin()) && coursePackagePaymentConfig.getPlayPaiCoin() > 0) {
                coursePackagePaymentConfigVo.setPayType(3);
            } else if (ToolUtil.isNotEmpty(coursePackagePaymentConfig.getCashPayment()) && coursePackagePaymentConfig.getCashPayment() > 0) {
                coursePackagePaymentConfigVo.setPayType(1);
            } else if (ToolUtil.isNotEmpty(coursePackagePaymentConfig.getPlayPaiCoin()) && coursePackagePaymentConfig.getPlayPaiCoin() > 0) {
                coursePackagePaymentConfigVo.setPayType(2);
            }
//                coursePackagePaymentConfigVo.setPayType(coursePackage.getPayType());
            //会员显示原价和支付价(会员价)。非会员显示会员价和支付价(最低)
//                if(appUser.getIsVip() == 0){//非会员
            List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
                    .eq("type", 1).eq("auditStatus", 2));
            Double vipPrice = coursePackagePaymentConfig.getCashPayment();
            for (TCoursePackageDiscount coursePackageDiscount : list2) {
                Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("discountMember");
                if (vipPrice.compareTo(num1) > 0) {
                    vipPrice = num1;
                }
            }
            coursePackagePaymentConfigVo.setVipPrice(vipPrice);
            Double paymentPrice = coursePackagePaymentConfig.getCashPayment();
            List<TCoursePackageDiscount> list3 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
                    .eq("type", 3).eq("auditStatus", 2));
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            for (TCoursePackageDiscount coursePackageDiscount : list3) {
                /**
                 * [{
                 *    "startDate": "2023-01-01 00:00:00",
                 *    "endDate": "2023-12-31 23:59:59",
                 *    "startTime": "02:00:00",
                 *    "endTime": "23:00:00",
                 *    "weeks": [1, 2, 7],
                 *    "cashPayment": 100
                 * }]
                 */
                JSONArray jsonArray = JSON.parseArray(coursePackageDiscount.getContent());
                for (int i = 0; i < jsonArray.size(); i++) {
                    try {
                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        String startDate = jsonObject.getString("startDate");
                        String endDate = jsonObject.getString("endDate");
                        String startTime = jsonObject.getString("startTime");
                        String endTime = jsonObject.getString("endTime");
                        List<Integer> weeks = jsonObject.getJSONArray("weeks").toJavaList(Integer.class);
                        Double cashPayment = jsonObject.getDouble("cashPayment");
                        Date startDate_date = sdf.parse(startDate);
                        Date endDate_date = sdf.parse(endDate);
                        long timeMillis = System.currentTimeMillis();
                        if (timeMillis >= startDate_date.getTime() && timeMillis < endDate_date.getTime()) {
                            Date date = new Date();
                            Calendar calendar = Calendar.getInstance();
                            calendar.setTime(date);
                            int week = calendar.get(Calendar.DAY_OF_WEEK);
                            boolean isFirstSunday = (calendar.getFirstDayOfWeek() == Calendar.SUNDAY);
                            if (isFirstSunday) {
                                week = week - 1;
                                if (week == 0) {
                                    week = 7;
                                }
                            }catch (Exception e){
                                e.printStackTrace();
                            }
                            if (!weeks.contains(week)) {
                                continue;
                            }
                            String[] split1 = startTime.split(":");
                            Integer hour1 = Integer.valueOf(split1[0]);
                            Calendar s = Calendar.getInstance();
                            s.setTime(date);
                            s.set(Calendar.HOUR_OF_DAY, hour1);
                            s.set(Calendar.MINUTE, Integer.valueOf(split1[1]));
                            s.set(Calendar.SECOND, Integer.valueOf(split1[2]));
                            String[] split2 = endTime.split(":");
                            Integer hour2 = Integer.valueOf(split2[0]);
                            Calendar e = Calendar.getInstance();
                            e.setTime(date);
                            e.set(Calendar.HOUR_OF_DAY, hour2);
                            e.set(Calendar.MINUTE, Integer.valueOf(split2[1]));
                            e.set(Calendar.SECOND, Integer.valueOf(split2[2]));
                            if (hour1 > hour2) {
                                if (s.getTimeInMillis() > date.getTime()) {
                                    s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1);
                                } else {
                                    e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1);
                                }
                            }
                            if (timeMillis >= s.getTimeInMillis() && timeMillis < e.getTimeInMillis() && paymentPrice.compareTo(cashPayment) > 0) {
                                paymentPrice = cashPayment;
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    coursePackagePaymentConfigVo.setPaymentPrice(paymentPrice);
                }else{
                    List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
                            .eq("type", 1).eq("auditStatus", 2));
                    Double vipPrice = coursePackagePaymentConfig.getCashPayment();
                    for (TCoursePackageDiscount coursePackageDiscount : list2) {
                        Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("discountMember");
                        if(vipPrice.compareTo(num1) > 0){
                            vipPrice = num1;
                        }
                    }
                    coursePackagePaymentConfigVo.setPaymentPrice(vipPrice);
                }
            }
            coursePackagePaymentConfigVo.setPaymentPrice(paymentPrice);
//                    TCoursePackageDiscount discount = coursePackageDiscountService.getOne(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
//                            .eq("type", 2).eq("auditStatus", 2));
//
//
//                    //这里是续课优惠
//                    Double continuingMember = JSON.parseObject(discount.getContent()).getDouble("continuingUser");
//                    Double vipcontinuingMember = JSON.parseObject(discount.getContent()).getDouble("continuingMember");
//
//
//                    if (coursePackagePaymentConfigVo.getPaymentPrice()>continuingMember){
//                        coursePackagePaymentConfigVo.setPaymentPrice(continuingMember);
//                    }
//                    if (coursePackagePaymentConfigVo.getVipPrice()>vipcontinuingMember){
//                        coursePackagePaymentConfigVo.setVipPrice(vipcontinuingMember);
//                    }
            if (appUser.getIsVip() == 1) {
                if (coursePackagePaymentConfigVo.getVipPrice() < coursePackagePaymentConfigVo.getPaymentPrice()) {
                    coursePackagePaymentConfigVo.setPaymentPrice(coursePackagePaymentConfigVo.getVipPrice());
                    coursePackagePaymentConfigVo.setOriginalPrice(coursePackagePaymentConfig.getCashPayment());
                }
                list.add(coursePackagePaymentConfigVo);
            });
            coursePackageInfo.setList(list);
            Student student = studentClient.queryDefaultStudent(uid);
            StudentVo studentVo = new StudentVo();
            if(null != student){
                studentVo.setId(student.getId());
                studentVo.setPhone(student.getPhone());
                studentVo.setName(student.getName());
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
                studentVo.setAge(Integer.valueOf(sdf.format(new Date())) - Integer.valueOf(sdf.format(student.getBirthday())));
            }
            coursePackageInfo.setStudent(studentVo);
            return coursePackageInfo;
            if (coursePackagePaymentConfigVo.getPaymentPrice() < coursePackagePaymentConfigVo.getVipPrice()) {
                coursePackagePaymentConfigVo.setOriginalPrice(coursePackagePaymentConfig.getCashPayment());
                coursePackagePaymentConfigVo.setVipPrice(null);
            }
//                }
//                else{
//                    List<TCoursePackageDiscount> list2 = coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId())
//                            .eq("type", 1).eq("auditStatus", 2));
//                    Double vipPrice = coursePackagePaymentConfig.getCashPayment();
//                    for (TCoursePackageDiscount coursePackageDiscount : list2) {
//                        Double num1 = JSON.parseObject(coursePackageDiscount.getContent()).getDouble("discountMember");
//                        if(vipPrice.compareTo(num1) > 0){
//                            vipPrice = num1;
//                        }
//                    }
//                    coursePackagePaymentConfigVo.setPaymentPrice(vipPrice);
//                    coursePackagePaymentConfigVo.setOriginalPrice(coursePackagePaymentConfig.getCashPayment());
//                }
            list.add(coursePackagePaymentConfigVo);
        });
        coursePackageInfo.setList(list);
        Student student = studentClient.queryDefaultStudent(uid);
        StudentVo studentVo = new StudentVo();
        if (null != student) {
            studentVo.setId(student.getId());
            studentVo.setPhone(student.getPhone());
            studentVo.setName(student.getName());
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
            studentVo.setAge(Integer.valueOf(sdf.format(new Date())) - Integer.valueOf(sdf.format(student.getBirthday())));
        }
        coursePackageInfo.setStudent(studentVo);
        return coursePackageInfo;
    }
    /**
     * 课程包名支付
     *
     * @param uid
     * @param paymentCourseVo
     * @return
@@ -657,74 +808,96 @@
    public ResultUtil paymentCourse(Integer uid, PaymentCourseVo paymentCourseVo) throws Exception {
        AppUser appUser = appUserClient.queryAppUser(uid);
        CoursePackageInfo coursePackageInfo = queryCourseInfo(uid, paymentCourseVo.getId(), null, null);
        List<CoursePackagePaymentConfigVo> list = coursePackageInfo.getList();
        //校验是否已经报满
        Integer integer = coursePackagePaymentService.queryCountNumber(paymentCourseVo.getId());
        TCoursePackage course = coursePackageService.getById(paymentCourseVo.getId());
        if (course.getType() == 1) {
            if (integer + paymentCourseVo.getStudentIds().split(";").length > course.getMaxSubscribeNumber()) {
                return ResultUtil.error("报名失败,已达最大报名人数");
            }
        }
        List<CoursePackagePaymentConfigVo> list = coursePackageInfo.getList();
        String[] students = paymentCourseVo.getStudentIds().split(";");
        for (CoursePackagePaymentConfigVo coursePackagePaymentConfigVo : list) {
            if(paymentCourseVo.getCoursePackagePaymentConfigId().compareTo(coursePackagePaymentConfigVo.getId()) == 0){
            if (paymentCourseVo.getCoursePackagePaymentConfigId().compareTo(coursePackagePaymentConfigVo.getId()) == 0) {
                CoursePackagePaymentConfig byId = coursePackagePaymentConfigService.getById(paymentCourseVo.getCoursePackagePaymentConfigId());
                Double cashPayment = byId.getCashPayment();
                Integer payType = coursePackagePaymentConfigVo.getPayType();
                if(payType == 1 && paymentCourseVo.getPayType() == 3){//现金支付
                    return ResultUtil.error("支付方式错误,请刷新后重试");
                Integer playPaiCoin1 = byId.getPlayPaiCoin();
                if (cashPayment != null || cashPayment > 0) {
                    payType = 1;
                }
                if(payType == 2 && paymentCourseVo.getPayType() != 3){//玩湃币支付
                    return ResultUtil.error("支付方式错误,请刷新后重试");
                if (playPaiCoin1 != null || playPaiCoin1 > 0) {
                    payType = 2;
                }
                if ((cashPayment != null || cashPayment > 0) && (playPaiCoin1 != null || playPaiCoin1 > 0)) {
                    payType = 3;
                }
                if (cashPayment != null && cashPayment > 0 && playPaiCoin1 != null && playPaiCoin1 > 0) {
                } else {
                    if (payType == 1 && paymentCourseVo.getPayType() == 3) {//现金支付
                        return ResultUtil.error("支付方式错误,请刷新后重试");
                    }
                    if (payType == 2 && paymentCourseVo.getPayType() != 3) {//玩湃币支付
                        return ResultUtil.error("支付方式错误,请刷新后重试");
                    }
                }
                Double paymentPrice = coursePackagePaymentConfigVo.getPaymentPrice();//支付价
                paymentPrice = new BigDecimal(students.length).multiply(new BigDecimal(paymentPrice)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                Double playPaiCoin = coursePackagePaymentConfigVo.getPlayPaiCoin().doubleValue();//支付币
                playPaiCoin = new BigDecimal(students.length).multiply(new BigDecimal(playPaiCoin)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
                if(payType == 1 && paymentPrice.compareTo(paymentCourseVo.getPrice()) != 0){
                    return ResultUtil.error("支付金额异常,请刷新后重试");
                }
                if(payType == 2 && playPaiCoin.compareTo(paymentCourseVo.getPrice()) != 0){
                if (paymentCourseVo.getPayType() == 3 && playPaiCoin.compareTo(paymentCourseVo.getPrice()) != 0) {
                    return ResultUtil.error("支付金额异常,请刷新后重试");
                }
            }
        }
        Double price = paymentCourseVo.getPrice();//支付金额
        //校验优惠券
        Long couponId = paymentCourseVo.getCouponId();
        if(null != couponId && paymentCourseVo.getPayType() != 3){
        if (null != couponId && paymentCourseVo.getPayType() != 3) {
            UserCoupon userCoupon = userCouponClient.queryUserCouponById(couponId);
            if(userCoupon.getStatus() == 2){
                return ResultUtil.error("优惠券已被核销");
            if (userCoupon.getStatus() == 2) {
                return ResultUtil.error("优惠券已被使用");
            }
            Coupon coupon = couponClient.queryCouponById(userCoupon.getCouponId());
            long time = coupon.getEndTime().getTime();
            if(System.currentTimeMillis() >= time){
            if (System.currentTimeMillis() >= time) {
                return ResultUtil.error("优惠券已过期");
            }
            if(coupon.getType() == 1){//满减
            if (coupon.getType() == 1) {//满减
                JSONObject jsonObject = JSON.parseObject(coupon.getContent());
//                {"conditionalAmount":50,"deductionAmount":10,"experienceName":""}
                Double num1 = jsonObject.getDouble("conditionalAmount");
                Double num2 = jsonObject.getDouble("deductionAmount");
                if(price.compareTo(num1) <= 0){
                if (price.compareTo(num1) <= 0) {
                    return ResultUtil.error("该优惠券无法使用");
                }
                price = new BigDecimal(price).subtract(new BigDecimal(num2)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
            }
            if(coupon.getType() == 2){//代金券
            if (coupon.getType() == 2) {//代金券
                JSONObject jsonObject = JSON.parseObject(coupon.getContent());
                Double num1 = jsonObject.getDouble("conditionalAmount");
                if(price.compareTo(num1) <= 0){
                if (price.compareTo(num1) <= 0) {
                    return ResultUtil.error("该优惠券无法使用");
                }
                price = new BigDecimal(price).subtract(new BigDecimal(num1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
            }
            userCoupon.setStatus(2);
            userCouponClient.edit(userCoupon);
        }
        if(paymentCourseVo.getPayType() == 1){//微信支付
        if (paymentCourseVo.getPayType() == 1) {//微信支付
            return weChatPaymentCourse(uid, price, paymentCourseVo);
        }
        if(paymentCourseVo.getPayType() == 2){//支付宝支付
        if (paymentCourseVo.getPayType() == 2) {//支付宝支付
            return aliPaymentCourse(uid, price, paymentCourseVo);
        }
        if(paymentCourseVo.getPayType() == 3){//玩湃币支付
            if(appUser.getPlayPaiCoins() < price.intValue()){
        if (paymentCourseVo.getPayType() == 3) {//玩湃币支付
            if (appUser.getPlayPaiCoins() < price.intValue()) {
                return ResultUtil.error("报名失败,玩湃币不足,请充值!");
            }
            return playPaiCoinPaymentCourse(appUser, price, paymentCourseVo);
@@ -737,65 +910,54 @@
    /**
     * 课程微信支付
     *
     * @param uid
     * @param paymentPrice
     * @param paymentCourseVo
     * @return
     * @throws Exception
     */
    public ResultUtil weChatPaymentCourse(Integer uid, Double paymentPrice, PaymentCourseVo paymentCourseVo) throws Exception{
    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);
        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", "");
        if(weixinpay.getCode() == 200){
            Integer finalSid = sid;
        ResultUtil weixinpay = payMoneyUtil.weixinpay("购买课程", coursePackagePaymentConfig.getId().toString(), code, paymentPrice.toString(), "/base/course/weChatPaymentCourseCallback", "APP", "");
        if (weixinpay.getCode() == 200) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        int num = 1;
                        int wait = 0;
                        while (num <= 10){
                        while (num <= 10) {
                            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—转入退款,
@@ -808,31 +970,26 @@
                                Map<String, String> data1 = resultUtil.getData();
                                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);
                                if ("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) {
                                    //有待支付的订单,这里不处理
//                                    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());
                                if ("SUCCESS".equals(s)) {
                                    coursePackageOrder1.setPayStatus(2);
                                    coursePackageOrder1.setOrderNumber(transaction_id);
                                    coursePackageOrder1.setAppUserId(null);
                                    coursePackageOrderService.updateById(coursePackageOrder1);
                                    addCoursePackageOrderStudent(coursePackageOrder1.getId(), coursePackagePaymentConfig);
                                    break;
                                }
                                if("USERPAYING".equals(s)){
                                if ("USERPAYING".equals(s)) {
                                    num++;
                                }
                            }
                        }
                    }catch (Exception e){
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
@@ -844,106 +1001,85 @@
    /**
     * 课程支付宝支付
     *
     * @param uid
     * @param paymentPrice
     * @param paymentCourseVo
     * @return
     * @throws Exception
     */
    public ResultUtil aliPaymentCourse(Integer uid, Double paymentPrice, PaymentCourseVo paymentCourseVo) throws Exception{
    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);
        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);
        Student student = studentClient.queryDefaultStudent(uid);
        Integer sid=null;
        if(student!=null){
            sid=student.getId();
        }
        ResultUtil alipay = payMoneyUtil.alipay("购买课程", "购买课程", "", code, paymentPrice.toString(), "/base/course/aliPaymentCourseCallback");
        if(alipay.getCode() == 200){
            Integer finalSid = sid;
        ResultUtil alipay = payMoneyUtil.alipay("购买课程", "购买课程", coursePackagePaymentConfig.getId().toString(), code, paymentPrice.toString(), "/base/course/aliPaymentCourseCallback");
        if (alipay.getCode() == 200) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(1000);
                        int num = 1;
                        int wait = 0;
                        while (num <= 10){
                        while (num <= 10) {
                            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);
                            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.queryALIOrder(code);
                            if(resultUtil.getCode() == 200 && one.getPayStatus() == 1){
                            AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(code);
                            if (null != alipayTradeQueryResponse) {
                                /**
                                 * WAIT_BUYER_PAY(交易创建,等待买家付款)、
                                 * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、
                                 * TRADE_SUCCESS(交易支付成功)、
                                 * TRADE_FINISHED(交易结束,不可退款)
                                 */
                                Map<String, String> data1 = resultUtil.getData();
                                String s = data1.get("tradeStatus");
                                String tradeNo = data1.get("tradeNo");
                                if("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10){
                                    for (TCoursePackagePayment coursePackagePayment : list) {
                                        coursePackagePayment.setStatus(3);
                                    }
                                    coursePackagePaymentService.updateBatchById(list);
                                String s = alipayTradeQueryResponse.getTradeStatus();
                                String tradeNo = alipayTradeQueryResponse.getTradeNo();
                                if ("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10) {
                                    //有待支付的订单,这里不处理
//                                    coursePackageOrder1.setState(3);
//                                    coursePackageOrderService.updateById(coursePackageOrder1);
                                    break;
                                }
                                if("TRADE_SUCCESS".equals(s)){
                                    for (TCoursePackagePayment coursePackagePayment : list) {
                                        coursePackagePayment.setPayStatus(2);
                                        coursePackagePayment.setOrderNumber(tradeNo);
                                    }
                                    coursePackagePaymentService.updateBatchById(list);
                                    // 2.0
                                    userCouponClient.sendUserCoupon(new SendCouponReq(uid,coursePackagePaymentConfig.getCouponIds()));
                                    if(student!=null){
                                    }
                                    addPackageStudent(paymentCourseVo.getId(),uid, finalSid,one.getId());
                                if ("TRADE_SUCCESS".equals(s)) {
                                    coursePackageOrder1.setPayStatus(2);
                                    coursePackageOrder1.setOrderNumber(tradeNo);
                                    coursePackageOrder1.setAppUserId(null);
                                    coursePackageOrderService.updateById(coursePackageOrder1);
                                    addCoursePackageOrderStudent(coursePackageOrder1.getId(), coursePackagePaymentConfig);
                                    break;
                                }
                                if("WAIT_BUYER_PAY".equals(s)){
                                if ("WAIT_BUYER_PAY".equals(s)) {
                                    num++;
                                }
                            }
                        }
                    }catch (Exception e){
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
@@ -955,228 +1091,364 @@
    /**
     * 玩湃币支付课程
     *
     * @param appUser
     * @param paymentPrice
     * @param paymentCourseVo
     * @return
     * @throws Exception
     */
    public ResultUtil playPaiCoinPaymentCourse(AppUser appUser, 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(appUser.getId());
            coursePackagePayment.setStudentId(Integer.valueOf(s));
            coursePackagePayment.setCoursePackageId(paymentCourseVo.getId());
            coursePackagePayment.setPayType(paymentCourseVo.getPayType());
            coursePackagePayment.setClassHours(coursePackagePaymentConfig.getClassHours());
            coursePackagePayment.setOriginalPrice(paymentCourseVo.getPrice());
            coursePackagePayment.setPlayPaiCoin(paymentPrice.intValue());
            coursePackagePayment.setTotalClassHours(coursePackagePaymentConfig.getClassHours());
            coursePackagePayment.setLaveClassHours(coursePackagePaymentConfig.getClassHours());
            coursePackagePayment.setAbsencesNumber(0);
            coursePackagePayment.setPayUserType(1);
            coursePackagePayment.setPayStatus(2);
            coursePackagePayment.setPayUserId(appUser.getId());
            coursePackagePayment.setStatus(1);
            coursePackagePayment.setState(1);
            coursePackagePayment.setInsertTime(new Date());
            coursePackagePaymentService.save(coursePackagePayment);
            Integer sId=null;
            Student student = studentClient.queryDefaultStudent(appUser.getId());
            if(student!=null){
                sId=student.getId();
            }
            addPackageStudent(paymentCourseVo.getId(),appUser.getId(),sId,coursePackagePayment.getId());
        }
    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);
        // 2.0
        String couponIds = coursePackagePaymentConfig.getCouponIds();
        if(ToolUtil.isNotEmpty(couponIds)){
            // 赠送优惠券
            userCouponClient.sendUserCoupon(new SendCouponReq(appUser.getId(),couponIds));
        }
        CoursePackagePaymentConfig coursePackagePaymentConfig = coursePackagePaymentConfigService.getById(paymentCourseVo.getCoursePackagePaymentConfigId());
        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.setPlayPaiCoin(paymentCourseVo.getPrice().intValue());
        coursePackageOrder.setPayUserType(1);
        coursePackageOrder.setPayStatus(2);
        coursePackageOrder.setPayUserId(appUser.getId());
        coursePackageOrder.setState(1);
        coursePackageOrder.setInsertTime(new Date());
        coursePackageOrderService.save(coursePackageOrder);
        addCoursePackageOrderStudent(coursePackageOrder.getId(), coursePackagePaymentConfig);
        return ResultUtil.success();
    }
    private void addPackageStudent(Integer courseId, Integer userId, Integer sId,Long paymentId){
        // 课包
        TCoursePackage tCoursePackage = this.baseMapper.selectById(courseId);
    /**
     * 购买课程支付成功后的回调处理
     *
     * @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.getId(), coursePackagePaymentConfig);
        return ResultUtil.success();
    }
    /**
     * 支付成功后添加学员课时数据
     *
     * @param coursePackagePaymentConfig
     */
    public void addCoursePackageOrderStudent(Long coursePackageOrderId, CoursePackagePaymentConfig coursePackagePaymentConfig) {
        CoursePackageOrder coursePackageOrder = coursePackageOrderService.getById(coursePackageOrderId);
        // 发放优惠券
        userCouponClient.sendUserCoupon(new SendCouponReq(coursePackageOrder.getAppUserId(), coursePackagePaymentConfig.getCouponIds()));
        String classWeeks = tCoursePackage.getClassWeeks();
        List<Integer> week = week(classWeeks);
        //开始处理学员课程课时记录和排课数据
        TCoursePackage coursePackage = coursePackageService.getById(coursePackageOrder.getCoursePackageId());
        String[] split = coursePackageOrder.getStudentIds().split(";");
        for (String id : split) {
            if(coursePackage.getType() == 1){
                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);
        String[] split = tCoursePackage.getClassStartTime().split(",");
        String[] split1 = tCoursePackage.getClassEndTime().split(",");
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        // 本周周几
        int i = DateUtil.dayOfWeek(new Date())-1;
        for (Integer integer : week) {
            if(integer<i){
                // 找下一周的时间
                Calendar instance = Calendar.getInstance();
                instance.add(Calendar.DATE,7-(i-integer));
                Date time = instance.getTime();
                    Integer validDays = coursePackage.getValidDays();
                    Calendar calendar = Calendar.getInstance();
                    calendar.setTime(new Date());
                    calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + validDays);
                    coursePackageOrderStudent.setUseTime(calendar.getTime());
                    coursePackageOrderStudentService.saveOrUpdate(coursePackageOrderStudent);
                for (int i1 = 0; i1 < split.length; i1++) {
                    CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                    coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                    try {
                        Date parse = format1.parse(format.format(time) + " " + split[i1]);
                        Date parse1 = format1.parse(format.format(time) + " " + split1[i1]);
                        coursePackageScheduling.setClassDate(parse);
                        coursePackageScheduling.setEndDate(parse1);
                        coursePackageScheduling.setStatus(1);
                        coursePackageSchedulingService.save(coursePackageScheduling);
                        CoursePackageStudent student1 = new CoursePackageStudent();
                        student1.setAppUserId(userId);
                        student1.setStudentId(sId);
                        student1.setCoursePackageId(tCoursePackage.getId());
                        student1.setCoursePackagePaymentId(paymentId);
                        student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
                        student1.setSignInOrNot(0);
                        student1.setReservationStatus(1);
                        student1.setInsertTime(new Date());
                        cpsMapper.insert(student1);
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                }
            }else if(integer>i) {
                Calendar instance = Calendar.getInstance();
                instance.add(Calendar.DATE,integer-i);
                Date time1 = instance.getTime();
                List<Date> list = new ArrayList<>();
                list.add(time1);
                instance.add(Calendar.DATE,7);
                Date time2 = instance.getTime();
                list.add(time2);
                for (Date time : list) {
                    for (int i1 = 0; i1 < split.length; i1++) {
                        CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                        coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                        try {
                            Date parse = format1.parse(format.format(time) + " " + split[i1]);
                            Date parse1 = format1.parse(format.format(time) + " " + split1[i1]);
                            coursePackageScheduling.setClassDate(parse);
                            coursePackageScheduling.setEndDate(parse1);
                            coursePackageScheduling.setStatus(1);
                            coursePackageSchedulingService.save(coursePackageScheduling);
                            CoursePackageStudent student1 = new CoursePackageStudent();
                            student1.setAppUserId(userId);
                            student1.setStudentId(sId);
                            student1.setCoursePackageId(tCoursePackage.getId());
                            student1.setCoursePackagePaymentId(paymentId);
                            student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
                            student1.setSignInOrNot(0);
                            student1.setReservationStatus(1);
                            student1.setInsertTime(new Date());
                            cpsMapper.insert(student1);
                        } catch (ParseException e) {
                            e.printStackTrace();
                        }
                    //开始排课
                    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());
                    coursePackageOrderStudentService.saveOrUpdate(coursePackageOrderStudent);
                    //中间断课,没有连续续费的情况需要重新排课
                    if (useTime.compareTo(new Date()) < 0) {
                        addPackageStudent(coursePackage, coursePackageOrder.getAppUserId(), Integer.valueOf(id), coursePackageOrderStudent);
                    }
                }
            }else {
                Calendar instance = Calendar.getInstance();
                instance.add(Calendar.DATE,7);
                Date time = instance.getTime();
                for (int i1 = 0; i1 < split.length; i1++) {
                    CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                    coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                    try {
                        Date parse = format1.parse(format.format(time) + " " + split[i1]);
                        Date parse1 = format1.parse(format.format(time) + " " + split1[i1]);
                        coursePackageScheduling.setClassDate(parse);
                        coursePackageScheduling.setEndDate(parse1);
                        coursePackageScheduling.setStatus(1);
                        coursePackageScheduling.setCourseId(tCoursePackage.getId());
                        coursePackageScheduling.setIntegral(0);
                        coursePackageScheduling.setCancelClasses("");
                        coursePackageScheduling.setDeductClassHour(0);
                        coursePackageSchedulingService.save(coursePackageScheduling);
                        CoursePackageStudent student1 = new CoursePackageStudent();
                        student1.setAppUserId(userId);
                        student1.setStudentId(sId);
                        student1.setCoursePackageId(tCoursePackage.getId());
                        student1.setCoursePackagePaymentId(paymentId);
                        student1.setCoursePackageSchedulingId(coursePackageScheduling.getId());
                        student1.setSignInOrNot(0);
                        student1.setReservationStatus(1);
                        student1.setInsertTime(new Date());
                        cpsMapper.insert(student1);
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                }
                CourseCounsum courseCounsum = new CourseCounsum();
                courseCounsum.setPaymentId(coursePackageOrderStudent.getId());
                courseCounsum.setChangeType(1);
                courseCounsum.setNum(coursePackagePaymentConfig.getClassHours());
                courseCounsum.setInsertTime(new Date());
                courseCounsum.setReason("购买课包");
                courseCounsumService.save(courseCounsum);
            }
            if(coursePackage.getType() == 2){
                addPackageStudent(coursePackage, coursePackageOrder.getAppUserId(), Integer.valueOf(id), null);
            }
        }
        // 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);
    }
    private List<Integer> week(String week){
    /**
     * 新购买课程后的排课
     *
     * @param userId
     * @param sId
     * @throws ParseException
     */
    private void addPackageStudent(TCoursePackage tCoursePackage, Integer userId, Integer sId, CoursePackageOrderStudent coursePackageOrderStudent) {
        try {
            //1常规 2假期 3体验
            if (tCoursePackage.getType() == 1) {
                //上课星期
                String classWeeks = tCoursePackage.getClassWeeks();
                List<Integer> week = week(classWeeks);
                //上课时段
                String[] split = tCoursePackage.getClassStartTime().split(",");
                String[] split1 = tCoursePackage.getClassEndTime().split(",");
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                //剩余课时
                Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours();
                //扣除课时数
                Integer codeTime = tCoursePackage.getCodeTime();
                //排课 本周+下周,课时不够扣则直接剩余不排课
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(new Date());
                calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
                calendar.set(Calendar.HOUR_OF_DAY, 0);
                calendar.set(Calendar.MINUTE, 0);
                calendar.set(Calendar.SECOND, 0);
                int day_week = calendar.get(Calendar.DAY_OF_WEEK);
                day_week = day_week - 1 == 0 ? 7 : day_week - 1;
                int num = 8 - day_week + 7;
                Date useTime = coursePackageOrderStudent.getUseTime();
                for (int i = 0; i < num; i++) {
                    Date time = calendar.getTime();
                    //判断当天是否在排课星期内
                    int day = calendar.get(Calendar.DAY_OF_WEEK);
                    day = day - 1 == 0 ? 7 : day - 1;
                    if (!week.contains(day)) {
                        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 1);
                        continue;
                    }
                    //大于有效期不进行排课
                    if (calendar.getTimeInMillis() >= useTime.getTime()) {
                        break;
                    }
                    for (int j = 0; j < split.length; j++) {
                        //剩余数量不足以排课
                        if (laveClassHours.compareTo(codeTime) < 0) {
                            break;
                        }
                        laveClassHours -= codeTime;
                        CoursePackageScheduling coursePackageScheduling = new CoursePackageScheduling();
                        coursePackageScheduling.setType(tCoursePackage.getType());
                        coursePackageScheduling.setAppUserId(userId);
                        coursePackageScheduling.setStudentId(sId);
                        coursePackageScheduling.setCoursePackageId(tCoursePackage.getId());
                        Date parse = format1.parse(format.format(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();
        }
    }
    public static Date[] generateDateArray1(Date startDate, Date endDate) {
        List<Date> dateList = new ArrayList<>();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(startDate);
        while (!calendar.getTime().after(endDate)) {
            Date currentDate = calendar.getTime();
            dateList.add(currentDate);
            calendar.add(Calendar.DAY_OF_MONTH, 1);
        }
        return dateList.toArray(new Date[0]);
    }
    public static Date createDate1(int year, int month, int day) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(year, month - 1, day);
        return calendar.getTime();
    }
    private List<Integer> week(String week) {
        String[] split = week.split(";");
        ArrayList<Integer> integers = new ArrayList<>();
        for (String s : split) {
                switch (s){
                    case "周一":
                        integers.add(1);
                        break;
                    case "周二":
                        integers.add(2);
                        break;
                    case "周三":
                        integers.add(3);
                        break;
                    case "周四":
                        integers.add(4);
                        break;
                    case "周五":
                        integers.add(5);
                        break;
                    case "周六":
                        integers.add(6);
                        break;
                    case "周日":
                        integers.add(7);
                        break;
            switch (s) {
                case "周一":
                    integers.add(1);
                    break;
                case "周二":
                    integers.add(2);
                    break;
                case "周三":
                    integers.add(3);
                    break;
                case "周四":
                    integers.add(4);
                    break;
                case "周五":
                    integers.add(5);
                    break;
                case "周六":
                    integers.add(6);
                    break;
                case "周日":
                    integers.add(7);
                    break;
            }
        }
        return integers;
    }
    public static Date[] generateDateArray(int numDays, Date date) {
//        LocalDate tomorrow = LocalDate.now().plusDays(1);
        LocalDate tomorrow = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate().plusDays(1);
        Date[] dates = new Date[numDays];
        for (int i = 0; i < numDays; i++) {
            LocalDate currentDate = tomorrow.plusDays(i);
            dates[i] = Date.from(currentDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
        }
        return dates;
    }
    /**
     * 获取课包管理列表数据
     *
     * @param queryCoursePackageLists
     * @return
     */
@@ -1192,14 +1464,14 @@
            boolean coin = false;
            List<CoursePackagePaymentConfig> coursePackagePaymentConfigs = coursePackagePaymentConfigService.list(new QueryWrapper<CoursePackagePaymentConfig>().eq("coursePackageId", id));
            for (CoursePackagePaymentConfig coursePackagePaymentConfig : coursePackagePaymentConfigs) {
                if(0 != coursePackagePaymentConfig.getCashPayment()){
                if (0 != coursePackagePaymentConfig.getCashPayment()) {
                    cash = true;
                }
                if(0 != coursePackagePaymentConfig.getPlayPaiCoin()){
                if (0 != coursePackagePaymentConfig.getPlayPaiCoin()) {
                    coin = true;
                }
            }
            map.put("payType", (cash ? "现金支付" : "") + (coin ?  cash ? "&玩湃币支付" : "玩湃币支付" : ""));
            map.put("payType", (cash ? "现金支付" : "") + (coin ? cash ? "&玩湃币支付" : "玩湃币支付" : ""));
        }
        return list;
    }
@@ -1207,84 +1479,88 @@
    /**
     * 添加课包
     *
     * @param coursePackage
     * @return
     */
    @Override
    public Integer addCoursePackage(TCoursePackage coursePackage) {
        try {
            this.baseMapper.insert(coursePackage);
            //生成排课数据
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = sdf1.parse(sdf.format(new Date()) + " 00:00:00");
            List<String> list = Arrays.asList(coursePackage.getClassWeeks().split(";"));
            String value = coursePackage.getClassStartTime();
            String value1 = coursePackage.getClassEndTime().trim();
            String[] star = value.split(",");
            String[] end = value1.split(",");
            if (coursePackage.getClassStartTime() != null && coursePackage.getClassStartTime() != "") {
                //生成排课数据
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date date = sdf1.parse(sdf.format(new Date()) + " 00:00:00");
                List<String> list = Arrays.asList(coursePackage.getClassWeeks().split(";"));
                String value = coursePackage.getClassStartTime();
                String value1 = coursePackage.getClassEndTime().trim();
            for (int i = 0; i < star.length; i++) {
                String[] star = value.split(",");
                String[] end = value1.split(",");
                for (int i = 0; i < star.length; i++) {
//                int index = star[i].indexOf(",");
//
//
//                String result = value.substring(0, index).trim();
                String classStartTime = star[i];
                String[] split = classStartTime.split(":");
                    String classStartTime = star[i];
                    String[] split = classStartTime.split(":");
//            String value1 = en;
                int index1 = value1.indexOf(",");
                    int index1 = value1.indexOf(",");
//                String result1 = value.substring(0, index1).trim();
                String classEndTime = end[i];
                String[] split1 = classEndTime.split(":");
                Calendar s = Calendar.getInstance();
                s.setTime(date);
                s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 1);
                s.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
                s.set(Calendar.MINUTE, Integer.valueOf(split[1]));
                s.set(Calendar.SECOND, 0);
                Calendar e = Calendar.getInstance();
                e.setTime(date);
                e.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 13);
                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 coursePackageScheduling = new CoursePackageScheduling();
                        coursePackageScheduling.setCoursePackageId(coursePackage.getId());
                        coursePackageScheduling.setClassDate(classDate.getTime());
                        coursePackageScheduling.setEndDate(endDate.getTime());
                        coursePackageScheduling.setStatus(1);
                        coursePackageSchedulingService.save(coursePackageScheduling);
                    }
                    String classEndTime = end[i];
                    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;
                    s.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
                    s.set(Calendar.MINUTE, Integer.valueOf(split[1]));
                    s.set(Calendar.SECOND, 0);
                    Calendar e = Calendar.getInstance();
                    e.setTime(date);
                    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 coursePackageScheduling = new CoursePackageScheduling();
                            coursePackageScheduling.setCoursePackageId(coursePackage.getId());
                            coursePackageScheduling.setClassDate(classDate.getTime());
                            coursePackageScheduling.setEndDate(endDate.getTime());
                            coursePackageScheduling.setStatus(1);
                            coursePackageSchedulingService.save(coursePackageScheduling);
                        }
                        s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 1);
                        if (s.getTimeInMillis() >= timeInMillis) {
                            break;
                        }
                    }
                }
            }
            return coursePackage.getId();
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
@@ -1293,6 +1569,7 @@
    /**
     * 修改数据
     *
     * @param coursePackage
     */
    @Override
@@ -1302,20 +1579,21 @@
            List<Long> collect = coursePackageStudents.stream().map(CoursePackageStudent::getCoursePackageSchedulingId).collect(Collectors.toList());
            QueryWrapper<CoursePackageScheduling> coursePackageSchedulingQueryWrapper = new QueryWrapper<CoursePackageScheduling>().eq("coursePackageId", coursePackage.getId());
            if(collect.size() > 0){
            if (collect.size() > 0) {
                coursePackageSchedulingQueryWrapper.notIn("id", collect);
            }
            coursePackageSchedulingService.remove(coursePackageSchedulingQueryWrapper);
            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){
            if (null != coursePackageScheduling) {
                date = sdf1.parse(sdf.format(coursePackageScheduling.getClassDate()) + " 00:00:00");
            }else{
            } else {
                date = sdf1.parse(sdf.format(new Date()) + " 00:00:00");
            }
            List<String> list = Arrays.asList(coursePackage.getClassWeeks().split(";"));
@@ -1329,19 +1607,19 @@
            Calendar e = Calendar.getInstance();
            e.setTime(date);
            if(null != coursePackageScheduling){
            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) + 13);
            } else {
                e.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 14);
            }
            long timeInMillis = e.getTimeInMillis();
            while (true){
            while (true) {
                int w = s.get(Calendar.DAY_OF_WEEK);
                WeekEnum weekEnum = WeekEnum.getWeekEnum(w);
                if(list.contains(weekEnum.getChineseName())){
                if (list.contains(weekEnum.getChineseName())) {
                    Calendar classDate = Calendar.getInstance();
                    classDate.setTime(s.getTime());
                    classDate.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
@@ -1362,11 +1640,11 @@
                    coursePackageSchedulingService.save(coursePackageScheduling1);
                }
                s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) + 1);
                if(s.getTimeInMillis() > timeInMillis){
                if (s.getTimeInMillis() > timeInMillis) {
                    break;
                }
            }
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
@@ -1374,6 +1652,7 @@
    /**
     * 获取课包审核列表
     *
     * @param page
     * @param queryExamineCoursePackageLists
     * @return
@@ -1387,14 +1666,14 @@
            boolean coin = false;
            List<CoursePackagePaymentConfig> coursePackagePaymentConfigs = coursePackagePaymentConfigService.list(new QueryWrapper<CoursePackagePaymentConfig>().eq("coursePackageId", id));
            for (CoursePackagePaymentConfig coursePackagePaymentConfig : coursePackagePaymentConfigs) {
                if(0 != coursePackagePaymentConfig.getCashPayment()){
                if (0 != coursePackagePaymentConfig.getCashPayment()) {
                    cash = true;
                }
                if(0 != coursePackagePaymentConfig.getPlayPaiCoin()){
                if (0 != coursePackagePaymentConfig.getPlayPaiCoin()) {
                    coin = true;
                }
            }
            map.put("payType", (cash ? "现金支付" : "") + (coin ?  cash ? "&玩湃币支付" : "玩湃币支付" : ""));
            map.put("payType", (cash ? "现金支付" : "") + (coin ? cash ? "&玩湃币支付" : "玩湃币支付" : ""));
        }
        return list;
    }
@@ -1405,17 +1684,34 @@
    }
    @Override
    public String getHours(Integer coursePackageId) {
    public List<Integer> getHours(Integer coursePackageId) {
        return this.baseMapper.getHours(coursePackageId);
    }
    @Override
    public ResultUtil paymentCourseCouponList(Integer uid, Integer coursePackagePaymentConfigId) {
        CoursePackagePaymentConfig coursePackagePaymentConfig = coursePackagePaymentConfigService.getById(coursePackagePaymentConfigId);
        if(ToolUtil.isEmpty(coursePackagePaymentConfig.getCouponIds())){
            coursePackagePaymentConfig.setCouponIds("-1");
//        CoursePackagePaymentConfig coursePackagePaymentConfig = coursePackagePaymentConfigService.getById(coursePackagePaymentConfigId);
//        if(ToolUtil.isEmpty(coursePackagePaymentConfig.getCouponIds())){
//            coursePackagePaymentConfig.setCouponIds("-1");
//        }
//        List<Coupon> coupons = couponClient.getCoupons(coursePackagePaymentConfig.getCouponIds());
        List<Coupon> coupons = couponClient.queryCouponByUid(uid);
        if (CollectionUtil.isNotEmpty(coupons)) {
            for (Coupon coupon : coupons) {
                Date date1 = coupon.getStartTime(); // 2023-10-01 00:00:00
                Date date2 = coupon.getEndTime(); // 2023-10-12 00:00:00
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
                String dateString1 = sdf.format(date1);
                String dateString2 = sdf.format(date2);
                String result = dateString1 + "-" + dateString2;
                coupon.setTimePeriod(result);
            }
        }
        List<Coupon> coupons = couponClient.getCoupons(coursePackagePaymentConfig.getCouponIds());
        return ResultUtil.success(coupons);
    }
}