From a6ef8f0dd977a30abd878f8e6106630b97d6e5b0 Mon Sep 17 00:00:00 2001
From: lisy <linlangsur163@163.com>
Date: 星期一, 10 七月 2023 16:49:14 +0800
Subject: [PATCH] 本周福利:接口开发

---
 cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java             |    2 
 cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageDiscountService.java          |    3 
 cloud-server-other/src/main/java/com/dsh/other/feignclient/StoreClient.java                          |    9 +
 cloud-server-course/src/main/java/com/dsh/course/util/DateTimeHelper.java                            |   26 +++--
 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java             |   37 +++++++
 cloud-server-course/src/main/java/com/dsh/course/feignclient/other/StoreClient.java                  |    5 +
 cloud-server-course/src/main/java/com/dsh/course/model/dto/DiscountJsonDto.java                      |    6 +
 cloud-server-other/src/main/java/com/dsh/other/feignclient/model/GetDistanceVo.java                  |   19 +++
 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java |   89 +++++++++++++++++
 cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java                       |   20 +++-
 cloud-server-course/src/main/java/com/dsh/course/model/vo/response/WeekLimitedResponse.java          |   54 ++++++++++
 cloud-server-course/src/main/java/com/dsh/course/feignclient/other/model/GetDistanceVo.java          |   19 +++
 12 files changed, 269 insertions(+), 20 deletions(-)

diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java
index 24ef20b..cbe0d58 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java
@@ -206,7 +206,7 @@
     }
 
     /**
-     * 课时详情-支付
+     * 充值中心-支付
      */
     @ResponseBody
     @PostMapping("/api/useBenefit/payment")
diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java
index 3c83277..1cc67b4 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java
@@ -1,7 +1,14 @@
 package com.dsh.course.controller;
 
 import com.dsh.course.entity.TCoursePackage;
+import com.dsh.course.model.vo.response.WeekLimitedResponse;
+import com.dsh.course.service.TCoursePackageDiscountService;
 import com.dsh.course.service.TCoursePackageService;
+import com.dsh.course.util.ResultUtil;
+import com.dsh.course.util.TokenUtil;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -16,6 +23,13 @@
     @Autowired
     private TCoursePackageService coursePackageService;
 
+
+    @Autowired
+    private TCoursePackageDiscountService tcpdService;
+
+
+    @Autowired
+    private TokenUtil tokenUtil;
 
     /**
      * 根据id获取课包
@@ -33,4 +47,27 @@
             return null;
         }
     }
+
+    /**
+     * 本周福利列表
+     */
+    @ResponseBody
+    @PostMapping("/api/useBenefit/weekLimitedBenefit")
+    @ApiOperation(value = "使用福利-本周福利限时折扣列表", tags = {"APP-开始上课"})
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
+            @ApiImplicitParam(name = "discountType",value = "默认显示 限时折扣 (1限时折扣 2赠送课时)")
+    })
+    public ResultUtil<WeekLimitedResponse> thisWeeksBenefitList(Integer discountType,String lon,String lat){
+        try {
+            Integer appUserId = tokenUtil.getUserIdFormRedis();
+            if(null == appUserId){
+                return ResultUtil.tokenErr();
+            }
+            return ResultUtil.success(tcpdService.getWeeksBenefitCourse(appUserId,discountType,lon,lat));
+        }catch (Exception e){
+            return ResultUtil.runErr();
+        }
+    }
+
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/other/StoreClient.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/other/StoreClient.java
index eb27313..447b5ae 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/feignclient/other/StoreClient.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/other/StoreClient.java
@@ -1,8 +1,10 @@
 package com.dsh.course.feignclient.other;
 
+import com.dsh.course.feignclient.other.model.GetDistanceVo;
 import com.dsh.course.feignclient.other.model.Store;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 
 import java.util.List;
 
@@ -30,4 +32,7 @@
      */
     @PostMapping("/store/queryStoreById")
     Store queryStoreById(Integer id);
+
+    @PostMapping("/base/protocol/storeDetail/distanceCal")
+    public long calculateDistance(@RequestBody GetDistanceVo distanceVo);
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/other/model/GetDistanceVo.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/other/model/GetDistanceVo.java
new file mode 100644
index 0000000..26de9c2
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/other/model/GetDistanceVo.java
@@ -0,0 +1,19 @@
+package com.dsh.course.feignclient.other.model;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class GetDistanceVo {
+
+    @ApiModelProperty(value = "经度")
+    private String longitude;
+
+    @ApiModelProperty(value = "纬度")
+    private String latitude;
+
+    @ApiModelProperty(value = "门店id")
+    private Integer storeId;
+
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/dto/DiscountJsonDto.java b/cloud-server-course/src/main/java/com/dsh/course/model/dto/DiscountJsonDto.java
index 3eba0a3..35f34af 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/model/dto/DiscountJsonDto.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/model/dto/DiscountJsonDto.java
@@ -10,6 +10,12 @@
 
 @Data
 public class DiscountJsonDto {
+
+    /**
+     * type为1,为会员折扣现金支付金额;type为3,为限时折扣现金支付金额
+     */
+    @ApiModelProperty(value = "课时数")
+    private Integer courseHours;
     /**
      * type为1,为会员折扣现金支付金额;type为3,为限时折扣现金支付金额
      */
diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/WeekLimitedResponse.java b/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/WeekLimitedResponse.java
new file mode 100644
index 0000000..0e55ce8
--- /dev/null
+++ b/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/WeekLimitedResponse.java
@@ -0,0 +1,54 @@
+package com.dsh.course.model.vo.response;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class WeekLimitedResponse {
+
+    @ApiModelProperty(value = "折扣类型 1限时折扣 2赠送课时")
+    private Integer discountType;
+
+    @ApiModelProperty(value = "数据列表")
+    private List<Details> list;
+
+    @Data
+    public static class Details{
+
+        @ApiModelProperty(value = "封面图")
+        private String image;
+
+        @ApiModelProperty(value = "课包名称")
+        private String coursePackageName;
+
+        @ApiModelProperty(value = "课包课时数")
+        private Integer courseHours;
+
+        @ApiModelProperty(value = "赠送课时数(赠送课时取改字段)")
+        private Integer donateHours;
+
+        @ApiModelProperty(value = "今日/明日/周x")
+        private String dataTime;
+
+        @ApiModelProperty(value = "日期")
+        private Date date;
+
+        @ApiModelProperty(value = "原价")
+        private Integer originalPrice;
+
+        @ApiModelProperty(value = "折后价")
+        private Integer discountPrice;
+
+        @ApiModelProperty(value = "状态")
+        private Integer status;
+
+        @ApiModelProperty(value = "门店距离")
+        private long storeDistance;
+
+    }
+
+}
diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageDiscountService.java b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageDiscountService.java
index bb3d830..852deda 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageDiscountService.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageDiscountService.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.dsh.course.entity.TCoursePackageDiscount;
+import com.dsh.course.model.vo.response.WeekLimitedResponse;
 
 
 /**
@@ -14,4 +15,6 @@
  */
 public interface TCoursePackageDiscountService extends IService<TCoursePackageDiscount> {
 
+    WeekLimitedResponse getWeeksBenefitCourse(Integer appUserId,Integer discountType,String lon,String lat);
+
 }
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 112efa9..3d92269 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,10 +1,25 @@
 package com.dsh.course.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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.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 org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -17,4 +32,78 @@
 @Service
 public class TCoursePackageDiscountServiceImpl extends ServiceImpl<TCoursePackageDiscountMapper, TCoursePackageDiscount> implements TCoursePackageDiscountService {
 
+
+    @Resource
+    private TCoursePackageMapper tcpMapper;
+
+
+    @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();
+        List<WeekLimitedResponse.Details> list = new ArrayList<>();
+        QueryWrapper<TCoursePackageDiscount> tCoursePackageDiscountQueryWrapper = new QueryWrapper<>();
+        tCoursePackageDiscountQueryWrapper.eq("auditStatus",2 );
+        List<TCoursePackageDiscount> tCoursePackageDiscounts = new ArrayList<>();
+        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) {
+                    WeekLimitedResponse.Details ls = new WeekLimitedResponse.Details();
+
+                    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;
+                        }
+                        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);
+                    } 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();
+                    }
+                }
+            }
+        }
+
+
+        return response;
+    }
 }
diff --git a/cloud-server-course/src/main/java/com/dsh/course/util/DateTimeHelper.java b/cloud-server-course/src/main/java/com/dsh/course/util/DateTimeHelper.java
index ea6f35b..97688c4 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/util/DateTimeHelper.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/util/DateTimeHelper.java
@@ -2,9 +2,8 @@
 
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
+import java.time.*;
+import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 
 
@@ -1757,13 +1756,20 @@
         return list;
     }
 
-    /*public static void main(String[] args) throws ParseException {
-        List<Date> allTheDateOftheMonth = getAllTheDateOftheMonth(new Date());
-        Date date = allTheDateOftheMonth.get(11);
-        System.out.println(date.toLocaleString());
-        int i = daysBetween(new Date(), date);
-        System.out.println(i);
-    }*/
+    public static Date getTodayTime(){
+        // 获取当天的开始时间(0点)
+        LocalDate today = LocalDate.now();
+        LocalDateTime startOfDay = LocalDateTime.of(today, LocalTime.MIN);
+        return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());
+    }
+
+    public static Date getWeekOfLastDay(){
+        // 获取本周的最后一天的时间(23点59分59秒)
+        LocalDate today = LocalDate.now();
+        LocalDate lastDayOfWeek = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
+        LocalDateTime endOfDay = LocalDateTime.of(lastDayOfWeek, LocalTime.MAX);
+        return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
+    }
 
 
 }
diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java
index 344a813..375e825 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java
@@ -3,16 +3,12 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.dsh.other.entity.Store;
-import com.dsh.other.feignclient.model.GetAllNearbyStoreList;
-import com.dsh.other.feignclient.model.StoreDetailOfCourse;
-import com.dsh.other.feignclient.model.StoreInfo;
-import com.dsh.other.feignclient.model.StoreLonLatList;
+import com.dsh.other.feignclient.model.*;
 import com.dsh.other.model.BaseVo;
 import com.dsh.other.model.QueryStoreList;
 import com.dsh.other.service.StoreService;
 import com.dsh.other.util.GDMapGeocodingUtil;
 import com.dsh.other.util.ResultUtil;
-import com.dsh.other.util.ToolUtil;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
@@ -85,6 +81,20 @@
         return storeInfos;
     }
 
+    /**
+     * 根据门店坐标与传入坐标,计算距离
+     * @param distanceVo
+     * @return
+     */
+    @PostMapping("/base/protocol/storeDetail/distanceCal")
+    public long calculateDistance(@RequestBody GetDistanceVo distanceVo){
+        String current = distanceVo.getLongitude()+","+distanceVo.getLatitude();
+        Store store = storeService.getById(distanceVo.getStoreId());
+        String result = store.getLon()+","+store.getLat();
+        String distanceTOKilometer = gdMapGeocodingUtil.getDistanceTOKilometer(current, result);
+        return Long.parseLong(distanceTOKilometer);
+    }
+
 
     @PostMapping("/base/protocol/storeDetail/storeOfLonLat")
     public List<StoreLonLatList> getAllStoreLonLats(@RequestBody GetAllNearbyStoreList list ){
diff --git a/cloud-server-other/src/main/java/com/dsh/other/feignclient/StoreClient.java b/cloud-server-other/src/main/java/com/dsh/other/feignclient/StoreClient.java
index 035d317..0dc55b4 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/feignclient/StoreClient.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/feignclient/StoreClient.java
@@ -1,9 +1,6 @@
 package com.dsh.other.feignclient;
 
-import com.dsh.other.feignclient.model.GetAllNearbyStoreList;
-import com.dsh.other.feignclient.model.StoreDetailOfCourse;
-import com.dsh.other.feignclient.model.StoreInfo;
-import com.dsh.other.feignclient.model.StoreLonLatList;
+import com.dsh.other.feignclient.model.*;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -25,4 +22,8 @@
 
     @PostMapping("/base/protocol/storeDetail/storeOfLonLat")
      List<StoreLonLatList> getAllStoreLonLats(@RequestBody GetAllNearbyStoreList list);
+
+
+    @PostMapping("/base/protocol/storeDetail/distanceCal")
+    public long calculateDistance(@RequestBody GetDistanceVo distanceVo);
 }
diff --git a/cloud-server-other/src/main/java/com/dsh/other/feignclient/model/GetDistanceVo.java b/cloud-server-other/src/main/java/com/dsh/other/feignclient/model/GetDistanceVo.java
new file mode 100644
index 0000000..057f265
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/feignclient/model/GetDistanceVo.java
@@ -0,0 +1,19 @@
+package com.dsh.other.feignclient.model;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class GetDistanceVo {
+
+    @ApiModelProperty(value = "经度")
+    private String longitude;
+
+    @ApiModelProperty(value = "纬度")
+    private String latitude;
+
+    @ApiModelProperty(value = "门店id")
+    private Integer storeId;
+
+}

--
Gitblit v1.7.1