From 0e3374eb8ac33baa29ac77a65065a9e405e49379 Mon Sep 17 00:00:00 2001
From: lisy <linlangsur163@163.com>
Date: 星期四, 13 七月 2023 18:31:23 +0800
Subject: [PATCH] 使用福利:本周福利的限时折扣+赠送课时的列表查询

---
 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java |  276 +++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 228 insertions(+), 48 deletions(-)

diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java
index 3d92269..61796ac 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java
@@ -1,23 +1,29 @@
 package com.dsh.course.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsh.course.entity.CoursePackagePaymentConfig;
 import com.dsh.course.entity.TCoursePackage;
 import com.dsh.course.entity.TCoursePackageDiscount;
 import com.dsh.course.feignclient.other.StoreClient;
 import com.dsh.course.feignclient.other.model.GetDistanceVo;
+import com.dsh.course.mapper.CoursePackagePaymentConfigMapper;
 import com.dsh.course.mapper.TCoursePackageDiscountMapper;
 import com.dsh.course.mapper.TCoursePackageMapper;
 import com.dsh.course.model.vo.response.WeekLimitedResponse;
 import com.dsh.course.service.TCoursePackageDiscountService;
 import com.dsh.course.util.DateTimeHelper;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import com.dsh.course.util.LocalDateTimeUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 
@@ -38,72 +44,246 @@
 
 
     @Resource
+    private CoursePackagePaymentConfigMapper cppcMapper;
+
+    @Resource
     private StoreClient sreClient;
 
 
     @Override
-    public WeekLimitedResponse getWeeksBenefitCourse(Integer appUserId,Integer discountType,String lon,String lat) {
-        Date start = DateTimeHelper.getTodayTime();
-        Date lastTime = DateTimeHelper.getWeekOfLastDay();
-        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
-        WeekLimitedResponse response= new WeekLimitedResponse();
+    public WeekLimitedResponse 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<>();
+
         QueryWrapper<TCoursePackageDiscount> tCoursePackageDiscountQueryWrapper = new QueryWrapper<>();
-        tCoursePackageDiscountQueryWrapper.eq("auditStatus",2 );
+        tCoursePackageDiscountQueryWrapper.eq("auditStatus", 2);
         List<TCoursePackageDiscount> tCoursePackageDiscounts = new ArrayList<>();
-        if (null == discountType || discountType == 1){
-            tCoursePackageDiscountQueryWrapper.eq("type",3);
+        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){
+            if (tCoursePackageDiscounts.size() > 0) {
                 for (TCoursePackageDiscount tCoursePackageDiscount : tCoursePackageDiscounts) {
-                    WeekLimitedResponse.Details ls = new WeekLimitedResponse.Details();
-
+                    /**
+                     * [{
+                     * 	"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 {
-                        ObjectMapper objectMapper = new ObjectMapper();
-                        JsonNode rootNode = null;
-                        rootNode = objectMapper.readTree(tCoursePackageDiscount.getContent());
-                        String courseHours = rootNode.get("courseHours").asText();
-                        String lifespanEnd = rootNode.get("lifespanEnd").asText();
-                        Date endTime = simpleDateFormat.parse(lifespanEnd);
-                        if (endTime.compareTo(lastTime) < 0){
-                            continue;
+                        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);
                         }
-                        TCoursePackage coursePackage = tcpMapper.selectById(tCoursePackageDiscount.getCoursePackageId());
-                        GetDistanceVo distanceVo = new GetDistanceVo();
-                        distanceVo.setLatitude(lat);
-                        distanceVo.setLongitude(lon);
-                        distanceVo.setStoreId(coursePackage.getStoreId());
-                        ls.setStoreDistance(sreClient.calculateDistance(distanceVo));
-                        // TODO: 2023/7/10 限时折扣查询
-                        list.add(ls);
+                        List<Integer> weeks = jsonObject.getJSONArray("weeks").toJavaList(Integer.class);
+                        Double cashPayment = jsonObject.getDouble("cashPayment");
+                        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();
+                                TCoursePackage coursePackage = tcpMapper.selectById(tCoursePackageDiscount.getCoursePackageId());
+
+                                resde.setImage(coursePackage.getCoverDrawing());
+                                resde.setCoursePackageName(coursePackage.getName());
+                                CoursePackagePaymentConfig paymentConfig = cppcMapper.selectById(tCoursePackageDiscount.getCoursePackagePaymentConfigId());
+                                resde.setCourseHours(paymentConfig.getClassHours());
+                                resde.setDataTime("今日");
+                                resde.setDate(localTime);
+                                resde.setOriginalPrice(paymentConfig.getCashPayment());
+                                resde.setDiscountPrice(cashPayment);
+                                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();
+                                TCoursePackage coursePackage = tcpMapper.selectById(tCoursePackageDiscount.getCoursePackageId());
+
+                                resde.setImage(coursePackage.getCoverDrawing());
+                                resde.setCoursePackageName(coursePackage.getName());
+                                CoursePackagePaymentConfig paymentConfig = cppcMapper.selectById(tCoursePackageDiscount.getCoursePackagePaymentConfigId());
+                                resde.setCourseHours(paymentConfig.getClassHours());
+                                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.setDiscountPrice(cashPayment);
+                                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();
                     }
                 }
-            }
-        }else {
-            tCoursePackageDiscountQueryWrapper.eq("type",4);
-            response.setDiscountType(2);
-            tCoursePackageDiscounts = this.baseMapper.selectList(tCoursePackageDiscountQueryWrapper);
-            if (tCoursePackageDiscounts.size() > 0){
-                for (TCoursePackageDiscount tCoursePackageDiscount : tCoursePackageDiscounts) {
-                    try {
-                        ObjectMapper objectMapper = new ObjectMapper();
-                        JsonNode rootNode = null;
-                        rootNode = objectMapper.readTree(tCoursePackageDiscount.getContent());
-                        String courseHours = rootNode.get("courseHours").asText();
-                        String lifespanStart = rootNode.get("lifespanStart").asText();
-                        String lifespanEnd = rootNode.get("lifespanEnd").asText();
-                        String classHours = rootNode.get("classHours").asText();
-                    } catch (Exception e) {
-                        e.printStackTrace();
+            } else {
+                tCoursePackageDiscountQueryWrapper.eq("type", 4);
+                response.setDiscountType(2);
+                tCoursePackageDiscounts = this.baseMapper.selectList(tCoursePackageDiscountQueryWrapper);
+                if (tCoursePackageDiscounts.size() > 0) {
+                    for (TCoursePackageDiscount tCoursePackageDiscount : tCoursePackageDiscounts) {
+//                    [{
+//                        "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
+//                    }]
+                        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();
+                                    TCoursePackage coursePackage = tcpMapper.selectById(tCoursePackageDiscount.getCoursePackageId());
+
+                                    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();
+                                    TCoursePackage coursePackage = tcpMapper.selectById(tCoursePackageDiscount.getCoursePackageId());
+
+                                    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;
     }
+
+
+    private static boolean isDateWithinRange(Date date, Date startTime, Date endTime) {
+        return date.after(startTime) && date.before(endTime);
+    }
+
 }

--
Gitblit v1.7.1