cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java
@@ -206,7 +206,7 @@ } /** * 课时详情-支付 * 充值中心-支付 */ @ResponseBody @PostMapping("/api/useBenefit/payment") 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(); } } } 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); } cloud-server-course/src/main/java/com/dsh/course/feignclient/other/model/GetDistanceVo.java
New file @@ -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; } 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,为限时折扣现金支付金额 */ cloud-server-course/src/main/java/com/dsh/course/model/vo/response/WeekLimitedResponse.java
New file @@ -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; } } 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); } 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; } } 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()); } } 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 ){ 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); } cloud-server-other/src/main/java/com/dsh/other/feignclient/model/GetDistanceVo.java
New file @@ -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; }