liujie
2023-10-26 e030255c23c7ba3e2cbad1036a810d6d72fa864f
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java
@@ -3,7 +3,9 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.course.entity.CoursePackagePaymentConfig;
import com.dsh.course.entity.TCoursePackage;
@@ -16,12 +18,13 @@
import com.dsh.course.mapper.TCoursePackageDiscountMapper;
import com.dsh.course.mapper.TCoursePackageMapper;
import com.dsh.course.mapper.TCoursePackagePaymentMapper;
import com.dsh.course.model.DiscountList;
import com.dsh.course.model.QueryDiscountList;
import com.dsh.course.model.vo.response.Details;
import com.dsh.course.model.vo.response.ExchangeCoursePackageResponse;
import com.dsh.course.model.vo.response.WeekLimitedResponse;
import com.dsh.course.service.TCoursePackageDiscountService;
import com.dsh.course.util.DateTimeHelper;
import com.dsh.course.util.LocalDateTimeUtils;
import com.dsh.course.util.ResultUtil;
import com.dsh.course.util.StrUtils;
import org.springframework.stereotype.Service;
@@ -59,12 +62,11 @@
    @Override
    public WeekLimitedResponse getWeeksBenefitCourse(Integer appUserId, Integer discountType, String lon, String lat) {
    public List<Details> getWeeksBenefitCourse(Integer appUserId, Integer discountType, String lon, String lat) {
        Date localTime = DateTimeHelper.getWXTime();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        WeekLimitedResponse response = new WeekLimitedResponse();
        List<WeekLimitedResponse.Details> list = new ArrayList<>();
        List<Details> list = new ArrayList<>();
        QueryWrapper<TCoursePackageDiscount> tCoursePackageDiscountQueryWrapper = new QueryWrapper<>();
        tCoursePackageDiscountQueryWrapper.eq("auditStatus", 2);
@@ -72,7 +74,6 @@
        int weekStr = LocalDateTimeUtils.getWeekStr();
        if (null == discountType || discountType == 1) {
            tCoursePackageDiscountQueryWrapper.eq("type", 3);
            response.setDiscountType(1);
            tCoursePackageDiscounts = this.baseMapper.selectList(tCoursePackageDiscountQueryWrapper);
            if (tCoursePackageDiscounts.size() > 0) {
                for (TCoursePackageDiscount tCoursePackageDiscount : tCoursePackageDiscounts) {
@@ -85,16 +86,6 @@
                    if (integer >= maxSubscribeNumber){
                        continue;
                    }
                    /**
                     * [{
                     *    "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
                     * }]
                     */
                    try {
                        JSONArray jsonArray = JSON.parseArray(tCoursePackageDiscount.getContent());
                        JSONObject jsonObject = jsonArray.getJSONObject(0);
@@ -126,7 +117,7 @@
                        if (isWithinRange) {
                            // 判断当前日期是否在开始时间和结束时间范围内
                            if (isDateWithinRange(localTime, parse1, parse2)) {
                                WeekLimitedResponse.Details resde = new WeekLimitedResponse.Details();
                                Details resde = new Details();
                                resde.setCoursePackageDiscountId(tCoursePackageDiscount.getId());
                                resde.setImage(coursePackage.getCoverDrawing());
@@ -142,7 +133,8 @@
                                distanceVo.setLatitude(lat);
                                distanceVo.setLongitude(lon);
                                distanceVo.setStoreId(coursePackage.getStoreId());
                                resde.setStoreDistance(sreClient.calculateDistance(distanceVo));
                                String s = sreClient.calculateDistance(distanceVo);
                                resde.setStoreDistance(s);
                                list.add(resde);
                            }
                        }
@@ -154,7 +146,7 @@
                            Date tempDate = tempCalendar.getTime();
                            int weekNumOfDate = DateTimeHelper.getWeekNumOfDate(tempDate);
                            if (isDateWithinRange(tempDate, parse1, parse2) && weeks.contains(weekNumOfDate)) {
                                WeekLimitedResponse.Details resde = new WeekLimitedResponse.Details();
                                Details resde = new Details();
                                resde.setCoursePackageDiscountId(tCoursePackageDiscount.getId());
                                resde.setImage(coursePackage.getCoverDrawing());
@@ -186,133 +178,125 @@
                        e.printStackTrace();
                    }
                }
            } else {
                tCoursePackageDiscountQueryWrapper.eq("type", 4);
                response.setDiscountType(2);
                tCoursePackageDiscounts = this.baseMapper.selectList(tCoursePackageDiscountQueryWrapper);
                if (tCoursePackageDiscounts.size() > 0) {
                    for (TCoursePackageDiscount tCoursePackageDiscount : tCoursePackageDiscounts) {
                        TCoursePackage coursePackage = tcpMapper.selectById(tCoursePackageDiscount.getCoursePackageId());
            }
        }else {
            tCoursePackageDiscountQueryWrapper.eq("type", 4);
            tCoursePackageDiscounts = this.baseMapper.selectList(tCoursePackageDiscountQueryWrapper);
            if (tCoursePackageDiscounts.size() > 0) {
                for (TCoursePackageDiscount tCoursePackageDiscount : tCoursePackageDiscounts) {
                    TCoursePackage coursePackage = tcpMapper.selectById(tCoursePackageDiscount.getCoursePackageId());
//                    判断预约人数是否已满
                        Integer maxSubscribeNumber = coursePackage.getMaxSubscribeNumber();
                        Integer integer = tcppMapper.selectCount(new QueryWrapper<TCoursePackagePayment>()
                                .eq("appUserId",appUserId )
                                .eq("status",1));
                        if (integer >= maxSubscribeNumber){
                            continue;
                        }
//                    [{
//                        "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],
//                        "hour": 10
//                    }]
                    Integer maxSubscribeNumber = coursePackage.getMaxSubscribeNumber();
                    Integer integer = tcppMapper.selectCount(new QueryWrapper<TCoursePackagePayment>()
                            .eq("appUserId",appUserId )
                            .eq("status",1));
                    if (integer >= maxSubscribeNumber){
                        continue;
                    }
                    try {
                        JSONArray jsonArray = JSON.parseArray(tCoursePackageDiscount.getContent());
                        JSONObject jsonObject = jsonArray.getJSONObject(0);
                        Date parse1 = null;
                        Date parse2 = null;
                        String startDate = jsonObject.getString("startDate");
                        String endDate = jsonObject.getString("endDate");
                        try {
                            JSONArray jsonArray = JSON.parseArray(tCoursePackageDiscount.getContent());
                            JSONObject jsonObject = jsonArray.getJSONObject(0);
                            Date parse1 = null;
                            Date parse2 = null;
                            String startDate = jsonObject.getString("startDate");
                            String endDate = jsonObject.getString("endDate");
                            try {
                                parse1 = simpleDateFormat.parse(startDate);
                                parse2 = simpleDateFormat.parse(endDate);
                            } catch (ParseException e) {
                                throw new RuntimeException(e);
                            }
                            List<Integer> weeks = jsonObject.getJSONArray("weeks").toJavaList(Integer.class);
                            Integer cashPayment = jsonObject.getInteger("hour");
                            Date tomorrowDate = null;
                            if (weekStr != 7) {
                                Calendar calendar = Calendar.getInstance();
                                calendar.setTime(localTime);
                                calendar.add(Calendar.DAY_OF_WEEK, 1);
                                tomorrowDate = calendar.getTime();
                            }
                            boolean isWithinRange = false;
                            if (weeks.contains(weekStr)) {
                                isWithinRange = true;
                            }
                            if (isWithinRange) {
                                // 判断当前日期是否在开始时间和结束时间范围内
                                if (isDateWithinRange(localTime, parse1, parse2)) {
                                    WeekLimitedResponse.Details resde = new WeekLimitedResponse.Details();
                                    resde.setCoursePackageDiscountId(tCoursePackageDiscount.getId());
                                    resde.setImage(coursePackage.getCoverDrawing());
                                    resde.setCoursePackageName(coursePackage.getName());
                                    CoursePackagePaymentConfig paymentConfig = cppcMapper.selectById(tCoursePackageDiscount.getCoursePackagePaymentConfigId());
                                    resde.setCourseHours(paymentConfig.getClassHours());
                                    resde.setDonateHours(cashPayment);
                                    resde.setDataTime("今日");
                                    resde.setDate(localTime);
                                    resde.setOriginalPrice(paymentConfig.getCashPayment());
                                    resde.setStatus(1);
                                    GetDistanceVo distanceVo = new GetDistanceVo();
                                    distanceVo.setLatitude(lat);
                                    distanceVo.setLongitude(lon);
                                    distanceVo.setStoreId(coursePackage.getStoreId());
                                    resde.setStoreDistance(sreClient.calculateDistance(distanceVo));
                                    list.add(resde);
                                }
                            }
                            Calendar tempCalendar = Calendar.getInstance();
                            tempCalendar.setTime(localTime);
                            tempCalendar.add(Calendar.DAY_OF_WEEK, 1);
                            while (tempCalendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
                                Date tempDate = tempCalendar.getTime();
                                int weekNumOfDate = DateTimeHelper.getWeekNumOfDate(tempDate);
                                if (isDateWithinRange(tempDate, parse1, parse2) && weeks.contains(weekNumOfDate)) {
                                    WeekLimitedResponse.Details resde = new WeekLimitedResponse.Details();
                                    resde.setCoursePackageDiscountId(tCoursePackageDiscount.getId());
                                    resde.setImage(coursePackage.getCoverDrawing());
                                    resde.setCoursePackageName(coursePackage.getName());
                                    CoursePackagePaymentConfig paymentConfig = cppcMapper.selectById(tCoursePackageDiscount.getCoursePackagePaymentConfigId());
                                    resde.setCourseHours(paymentConfig.getClassHours());
                                    resde.setDonateHours(cashPayment);
                                    String weekOfDate = "";
                                    if (weekStr != 7 && tempDate.equals(tomorrowDate)) {
                                        weekOfDate = "明日";
                                    } else {
                                        weekOfDate = DateTimeHelper.getWeekOfDate(tempDate);
                                    }
                                    resde.setDataTime(weekOfDate);
                                    resde.setDate(tempDate);
                                    resde.setOriginalPrice(paymentConfig.getCashPayment());
                                    resde.setStatus(2);
                                    GetDistanceVo distanceVo = new GetDistanceVo();
                                    distanceVo.setLatitude(lat);
                                    distanceVo.setLongitude(lon);
                                    distanceVo.setStoreId(coursePackage.getStoreId());
                                    resde.setStoreDistance(sreClient.calculateDistance(distanceVo));
                                    list.add(resde);
                                }
                                tempCalendar.add(Calendar.DAY_OF_WEEK, 1);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                            parse1 = simpleDateFormat.parse(startDate);
                            parse2 = simpleDateFormat.parse(endDate);
                        } catch (ParseException e) {
                            throw new RuntimeException(e);
                        }
                        List<Integer> weeks = jsonObject.getJSONArray("weeks").toJavaList(Integer.class);
                        Integer cashPayment = jsonObject.getInteger("hour");
                        Date tomorrowDate = null;
                        if (weekStr != 7) {
                            Calendar calendar = Calendar.getInstance();
                            calendar.setTime(localTime);
                            calendar.add(Calendar.DAY_OF_WEEK, 1);
                            tomorrowDate = calendar.getTime();
                        }
                        boolean isWithinRange = false;
                        if (weeks.contains(weekStr)) {
                            isWithinRange = true;
                        }
                        if (isWithinRange) {
                            // 判断当前日期是否在开始时间和结束时间范围内
                            if (isDateWithinRange(localTime, parse1, parse2)) {
                                Details resde = new Details();
                                resde.setCoursePackageDiscountId(tCoursePackageDiscount.getId());
                                resde.setImage(coursePackage.getCoverDrawing());
                                resde.setCoursePackageName(coursePackage.getName());
                                CoursePackagePaymentConfig paymentConfig = cppcMapper.selectById(tCoursePackageDiscount.getCoursePackagePaymentConfigId());
                                resde.setCourseHours(paymentConfig.getClassHours());
                                resde.setDonateHours(cashPayment);
                                resde.setDataTime("今日");
                                resde.setDate(localTime);
                                resde.setOriginalPrice(paymentConfig.getCashPayment());
                                resde.setStatus(1);
                                GetDistanceVo distanceVo = new GetDistanceVo();
                                distanceVo.setLatitude(lat);
                                distanceVo.setLongitude(lon);
                                distanceVo.setStoreId(coursePackage.getStoreId());
                                resde.setStoreDistance(sreClient.calculateDistance(distanceVo));
                                list.add(resde);
                            }
                        }
                        Calendar tempCalendar = Calendar.getInstance();
                        tempCalendar.setTime(localTime);
                        tempCalendar.add(Calendar.DAY_OF_WEEK, 1);
                        while (tempCalendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
                            Date tempDate = tempCalendar.getTime();
                            int weekNumOfDate = DateTimeHelper.getWeekNumOfDate(tempDate);
                            if (isDateWithinRange(tempDate, parse1, parse2) && weeks.contains(weekNumOfDate)) {
                                Details resde = new Details();
                                resde.setCoursePackageDiscountId(tCoursePackageDiscount.getId());
                                resde.setImage(coursePackage.getCoverDrawing());
                                resde.setCoursePackageName(coursePackage.getName());
                                CoursePackagePaymentConfig paymentConfig = cppcMapper.selectById(tCoursePackageDiscount.getCoursePackagePaymentConfigId());
                                resde.setCourseHours(paymentConfig.getClassHours());
                                resde.setDonateHours(cashPayment);
                                String weekOfDate = "";
                                if (weekStr != 7 && tempDate.equals(tomorrowDate)) {
                                    weekOfDate = "明日";
                                } else {
                                    weekOfDate = DateTimeHelper.getWeekOfDate(tempDate);
                                }
                                resde.setDataTime(weekOfDate);
                                resde.setDate(tempDate);
                                resde.setOriginalPrice(paymentConfig.getCashPayment());
                                resde.setStatus(2);
                                GetDistanceVo distanceVo = new GetDistanceVo();
                                distanceVo.setLatitude(lat);
                                distanceVo.setLongitude(lon);
                                distanceVo.setStoreId(coursePackage.getStoreId());
                                resde.setStoreDistance(sreClient.calculateDistance(distanceVo));
                                list.add(resde);
                            }
                            tempCalendar.add(Calendar.DAY_OF_WEEK, 1);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        return response;
        System.out.println("list"+list);
        return list;
    }
    @Override
    public ExchangeCoursePackageResponse getWeekFreeCourseDetails(Integer coursePackageDiscountId,String lat,String lon) {
        ExchangeCoursePackageResponse packageResponse = new ExchangeCoursePackageResponse();
        TCoursePackageDiscount coursePackageDiscount = this.baseMapper.selectById(coursePackageDiscountId);
        packageResponse.setCoursePackageDiscountId(coursePackageDiscount.getId());
        Integer coursePackageId = coursePackageDiscount.getCoursePackageId();
        packageResponse.setCoursePackageDiscountId(coursePackageId);
        TCoursePackage coursePackage = tcpMapper.selectById(coursePackageId);
@@ -327,9 +311,11 @@
        distanceVo.setLatitude(lat);
        distanceVo.setLongitude(lon);
        distanceVo.setStoreId(coursePackage.getStoreId());
        long l = sreClient.calculateDistance(distanceVo);
        packageResponse.setDistance(l);
        String s = sreClient.calculateDistance(distanceVo);
        packageResponse.setDistance(Double.valueOf(s));
        if (coursePackageDiscount.getType() == 1 || coursePackageDiscount.getType() == 2){
            return packageResponse;
        }
        JSONArray jsonArray = JSON.parseArray(coursePackageDiscount.getContent());
        JSONObject jsonObject = jsonArray.getJSONObject(0);
        CoursePackagePaymentConfig paymentConfig = cppcMapper.selectById(coursePackageDiscount.getCoursePackagePaymentConfigId());
@@ -354,37 +340,13 @@
            packageResponse.setDiscountPrice(vipPrice);
            packageResponse.setWanpaiGold(paymentConfig.getPlayPaiCoin());
        }
        List<Integer> weeks = StrUtils.dealStrToList(coursePackage.getClassWeeks());
        if (weeks.size() > 0){
        String[] split = coursePackage.getClassWeeks().split(";");
        if (split.length > 0){
            StringBuilder courWeeks = new StringBuilder("每");
            for (Integer integer : weeks) {
                switch (integer){
                    case 1:
                        courWeeks.append("周一、");
                        break;
                    case 2:
                        courWeeks.append("周二、");
                        break;
                    case 3:
                        courWeeks.append("周三、");
                        break;
                    case 4:
                        courWeeks.append("周四、");
                        break;
                    case 5:
                        courWeeks.append("周五、");
                        break;
                    case 6:
                        courWeeks.append("周六、");
                        break;
                    case 7:
                        courWeeks.append("周末、");
                        break;
                    default:
                        break;
                }
            for (String integer : split) {
                courWeeks.append(integer).append("、");
            }
            if (courWeeks.length() > 0 && courWeeks.charAt(courWeeks.length() - 1) == ','){
            if (courWeeks.length() > 0 && courWeeks.charAt(courWeeks.length() - 1) == '、'){
                courWeeks.deleteCharAt(courWeeks.length() - 1);
            }
            packageResponse.setWeekTime(courWeeks.toString());
@@ -393,13 +355,69 @@
        return packageResponse;
    }
    @Override
    public ResultUtil paymentDiscountCoursePack(Integer coursePackageDiscountId, Integer appuserId) {
        // TODO: 2023/7/13 折扣课包支付
        return null;
    public List<DiscountList> queryDiscountListAudit(QueryDiscountList queryDiscountList) {
        Page<DiscountList> discountListPage = new Page<>(queryDiscountList.getOffset(), queryDiscountList.getLimit());
        List<DiscountList> discountLists = this.baseMapper.queryDiscountListAudit(discountListPage, queryDiscountList.getPCode(), queryDiscountList.getCCode(), queryDiscountList.getName(), queryDiscountList.getType(), queryDiscountList.getIds());
        for (DiscountList discountList : discountLists) {
            List<TCoursePackageDiscount> tCoursePackageDiscounts = this.baseMapper.selectList(new LambdaQueryWrapper<TCoursePackageDiscount>().eq(TCoursePackageDiscount::getCoursePackageId, discountList.getCourseId()).ne(TCoursePackageDiscount::getAuditStatus,2).orderByAsc(TCoursePackageDiscount::getType));
            long count = tCoursePackageDiscounts.stream().filter(e -> e.getAuditStatus().equals(2)).count();
            if(count>0){
                discountList.setStatus(2);
            }else {
                discountList.setStatus(1);
            }
            String type="";
            for (int i = 0; i < tCoursePackageDiscounts.size(); i++) {
                if(tCoursePackageDiscounts.get(i).getType()==1){
                    type += "会员折扣、";
                }else if(tCoursePackageDiscounts.get(i).getType()==3){
                    type += "限时折扣、";
                }else if(tCoursePackageDiscounts.get(i).getType()==4){
                    type += "赠送课时、";
                }
            }
            if(type.length()>0){
                type = type.substring(0,type.length()-1);
            }
            discountList.setType(type);
        }
        return discountLists;
    }
    @Override
    public List<DiscountList> queryDiscountList(QueryDiscountList queryDiscountList) {
        Page<DiscountList> discountListPage = new Page<>(queryDiscountList.getOffset(), queryDiscountList.getLimit());
        List<Integer> ids = queryDiscountList.getIds();
        if(ids.size()==0){
            ids.add(-1);
            queryDiscountList.setIds(ids);
        }
        List<DiscountList> discountLists = this.baseMapper.queryDiscountList(discountListPage, queryDiscountList.getPCode(), queryDiscountList.getCCode(), queryDiscountList.getName(), queryDiscountList.getType(), queryDiscountList.getIds());
        for (DiscountList discountList : discountLists) {
            List<TCoursePackageDiscount> tCoursePackageDiscounts = this.baseMapper.selectList(new LambdaQueryWrapper<TCoursePackageDiscount>().eq(TCoursePackageDiscount::getCoursePackageId, discountList.getCourseId()).eq(TCoursePackageDiscount::getAuditStatus,2).orderByAsc(TCoursePackageDiscount::getType));
            long count = tCoursePackageDiscounts.stream().filter(e -> e.getStatus().equals(2)).count();
            if(count>0){
                discountList.setStatus(2);
            }else {
                discountList.setStatus(1);
            }
            String type="";
            for (int i = 0; i < tCoursePackageDiscounts.size(); i++) {
                if(tCoursePackageDiscounts.get(i).getType()==1){
                    type += "会员折扣、";
                }else if(tCoursePackageDiscounts.get(i).getType()==3){
                    type += "限时折扣、";
                }else if(tCoursePackageDiscounts.get(i).getType()==4){
                    type += "赠送课时、";
                }
            }
            if(type.length()>0){
                type = type.substring(0,type.length()-1);
            }
            discountList.setType(type);
        }
        return discountLists;
    }
    private static boolean isDateWithinRange(Date date, Date startTime, Date endTime) {
        return date.after(startTime) && date.before(endTime);