44323
2023-11-22 f6ba3e15355e22767e69f8fc14ae22523f8db8dc
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java
@@ -23,18 +23,15 @@
import com.dsh.course.model.vo.response.Details;
import com.dsh.course.model.vo.response.ExchangeCoursePackageResponse;
import com.dsh.course.service.TCoursePackageDiscountService;
import com.dsh.course.util.DateTimeHelper;
import com.dsh.course.util.LocalDateTimeUtils;
import com.dsh.course.util.StrUtils;
import com.dsh.course.util.*;
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.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
 * <p>
@@ -69,7 +66,7 @@
        List<Details> list = new ArrayList<>();
        QueryWrapper<TCoursePackageDiscount> tCoursePackageDiscountQueryWrapper = new QueryWrapper<>();
        tCoursePackageDiscountQueryWrapper.eq("auditStatus", 2);
        tCoursePackageDiscountQueryWrapper.eq("auditStatus", 2).eq("status",1);
        List<TCoursePackageDiscount> tCoursePackageDiscounts = new ArrayList<>();
        int weekStr = LocalDateTimeUtils.getWeekStr();
        if (null == discountType || discountType == 1) {
@@ -79,13 +76,13 @@
                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;
                    }
//                    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);
@@ -93,6 +90,25 @@
                        Date parse2 = null;
                        String startDate = jsonObject.getString("startDate");
                        String endDate = jsonObject.getString("endDate");
                        String startTime = jsonObject.getString("startTime");
                        String endTime = jsonObject.getString("endTime");
                        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
                        String currentTime = sdf.format(new Date());
                        boolean isWithinTimeRange = false;
                        try {
                            Date currentTimeDate = sdf.parse(currentTime);
                            Date startTimeDate = sdf.parse(startTime);
                            Date endTimeDate = sdf.parse(endTime);
                            if (currentTimeDate.after(startTimeDate) && currentTimeDate.before(endTimeDate)) {
                                isWithinTimeRange = true;
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        try {
                            parse1 = simpleDateFormat.parse(startDate);
                            parse2 = simpleDateFormat.parse(endDate);
@@ -116,7 +132,7 @@
                        if (isWithinRange) {
                            // 判断当前日期是否在开始时间和结束时间范围内
                            if (isDateWithinRange(localTime, parse1, parse2)) {
                            if (isDateWithinRange(localTime, parse1, parse2)){
                                Details resde = new Details();
                                resde.setCoursePackageDiscountId(tCoursePackageDiscount.getId());
@@ -128,13 +144,21 @@
                                resde.setDate(localTime);
                                resde.setOriginalPrice(paymentConfig.getCashPayment());
                                resde.setDiscountPrice(cashPayment);
                                resde.setStatus(1);
                                if (isWithinTimeRange) {
                                    resde.setStatus(1);
                                }else {
                                    resde.setStatus(2);
                                }
                                GetDistanceVo distanceVo = new GetDistanceVo();
                                distanceVo.setLatitude(lat);
                                distanceVo.setLongitude(lon);
                                distanceVo.setStoreId(coursePackage.getStoreId());
                                String s = sreClient.calculateDistance(distanceVo);
                                resde.setStoreDistance(s);
                                list.add(resde);
                            }
                        }
@@ -200,6 +224,25 @@
                        Date parse2 = null;
                        String startDate = jsonObject.getString("startDate");
                        String endDate = jsonObject.getString("endDate");
                        String startTime = jsonObject.getString("startTime");
                        String endTime = jsonObject.getString("endTime");
                        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
                        String currentTime = sdf.format(new Date());
                        boolean isWithinTimeRange = false;
                        try {
                            Date currentTimeDate = sdf.parse(currentTime);
                            Date startTimeDate = sdf.parse(startTime);
                            Date endTimeDate = sdf.parse(endTime);
                            if (currentTimeDate.after(startTimeDate) && currentTimeDate.before(endTimeDate)) {
                                isWithinTimeRange = true;
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        try {
                            parse1 = simpleDateFormat.parse(startDate);
                            parse2 = simpleDateFormat.parse(endDate);
@@ -233,10 +276,16 @@
                                CoursePackagePaymentConfig paymentConfig = cppcMapper.selectById(tCoursePackageDiscount.getCoursePackagePaymentConfigId());
                                resde.setCourseHours(paymentConfig.getClassHours());
                                resde.setDonateHours(cashPayment);
                                resde.setCoin(paymentConfig.getPlayPaiCoin());
                                resde.setDataTime("今日");
                                resde.setDate(localTime);
                                resde.setOriginalPrice(paymentConfig.getCashPayment());
                                resde.setStatus(1);
                                if (isWithinTimeRange) {
                                    resde.setStatus(1);
                                }else {
                                    resde.setStatus(2);
                                }
                                GetDistanceVo distanceVo = new GetDistanceVo();
                                distanceVo.setLatitude(lat);
                                distanceVo.setLongitude(lon);
@@ -262,6 +311,7 @@
                                resde.setCourseHours(paymentConfig.getClassHours());
                                resde.setDonateHours(cashPayment);
                                String weekOfDate = "";
                                resde.setCoin(paymentConfig.getPlayPaiCoin());
                                if (weekStr != 7 && tempDate.equals(tomorrowDate)) {
                                    weekOfDate = "明日";
                                } else {
@@ -299,20 +349,43 @@
        packageResponse.setCoursePackageDiscountId(coursePackageId);
        TCoursePackage coursePackage = tcpMapper.selectById(coursePackageId);
        packageResponse.setType(coursePackage.getType());
        packageResponse.setCoverDrawing(coursePackage.getCoverDrawing());
        packageResponse.setIntroduceDrawing(coursePackage.getIntroduceDrawing());
        packageResponse.setCoursePackageName(coursePackage.getName());
        packageResponse.setDetailDrawing(coursePackage.getDetailDrawing());
//        packageResponse.setPayType(coursePackage.getPayType());
        if (coursePackage.getType()==2) {
            Date startTime = coursePackage.getStartTime();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
            String formattedDate = sdf.format(startTime);
            Date endTime = coursePackage.getEndTime();
            String formattedDate1 = sdf.format(endTime);
            packageResponse.setHoliTime(formattedDate +"-"+ formattedDate1);
        }
        Store store = sreClient.queryStoreById(coursePackage.getStoreId());
        packageResponse.setStoreNameAddr(store.getName() +"(" +store.getAddress()+")");
        GetDistanceVo distanceVo = new GetDistanceVo();
        distanceVo.setLatitude(lat);
        distanceVo.setLongitude(lon);
        distanceVo.setStoreId(coursePackage.getStoreId());
        String s = sreClient.calculateDistance(distanceVo);
        packageResponse.setDistance(Double.valueOf(s));
        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();
            packageResponse.setDistance(wgs84);
        }
//        distanceVo.setLatitude(lat);
//        distanceVo.setLongitude(lon);
//        distanceVo.setStoreId(coursePackage.getStoreId());
//        String s = sreClient.calculateDistance(distanceVo);
//
//
//        packageResponse.setDistance(Double.valueOf(s));
        if (coursePackageDiscount.getType() == 1 || coursePackageDiscount.getType() == 2){
            return packageResponse;
        }
@@ -321,9 +394,29 @@
        CoursePackagePaymentConfig paymentConfig = cppcMapper.selectById(coursePackageDiscount.getCoursePackagePaymentConfigId());
        if (coursePackageDiscount.getType() == 3 ||coursePackageDiscount.getType() == 4){
            Double cashPayment = jsonObject.getDouble("cashPayment");
            if(ToolUtil.isNotEmpty(paymentConfig.getCashPayment()) && paymentConfig.getCashPayment()>0 && ToolUtil.isNotEmpty(paymentConfig.getPlayPaiCoin()) && paymentConfig.getPlayPaiCoin()>0 ){
                packageResponse.setPayType(3);
            }else if(ToolUtil.isNotEmpty(paymentConfig.getCashPayment()) && paymentConfig.getCashPayment()>0){
                packageResponse.setPayType(1);
            }else if( ToolUtil.isNotEmpty(paymentConfig.getPlayPaiCoin()) && paymentConfig.getPlayPaiCoin()>0 ){
                packageResponse.setPayType(2);
            }
            packageResponse.setClassHours(paymentConfig.getClassHours());
            packageResponse.setCostPrice(paymentConfig.getCashPayment());
            packageResponse.setDiscountPrice(cashPayment);
            if (paymentConfig.getPlayPaiCoin()!=null) {
                packageResponse.setWanpaiGold(paymentConfig.getPlayPaiCoin());
            }
            if (cashPayment!=null) {
                packageResponse.setDiscountPrice(cashPayment);
            }else {
                packageResponse.setDiscountPrice(paymentConfig.getCashPayment());
                packageResponse.setCostPrice(null);
            }
            Integer cashPayment1 = jsonObject.getInteger("hour");
            packageResponse.setFreeClassHours(cashPayment1);
        }else {
            packageResponse.setClassHours(paymentConfig.getClassHours());
@@ -351,7 +444,24 @@
            }
            packageResponse.setWeekTime(courWeeks.toString());
        }
        packageResponse.setTime(coursePackage.getClassStartTime()+"-"+coursePackage.getClassEndTime());
        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].substring(0,5) + "-" +  split3[i].substring(0,5);
                classTime.add(s);
            }
        }
        String classTimeAsString = String.join(" | ", classTime);
        packageResponse.setTime(classTimeAsString);
        return packageResponse;
    }
@@ -404,19 +514,16 @@
            ids.add(-1);
            queryDiscountList.setIds(ids);
        }
        List<DiscountList> discountLists = this.baseMapper.queryDiscountList(discountListPage, queryDiscountList.getPCode(), queryDiscountList.getCCode(), queryDiscountList.getName(), queryDiscountList.getType(), queryDiscountList.getIds());
        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())
                            .orderByAsc(TCoursePackageDiscount::getType));
            long count = tCoursePackageDiscounts.stream().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){