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