From c81d766cd91be3b3a24c8db94dcd93c071a66c62 Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期五, 14 七月 2023 09:30:19 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ExchangeDetailsResponse.java | 31 cloud-server-course/src/main/java/com/dsh/course/util/DateTimeHelper.java | 18 cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/ProductDetailRequest.java | 13 cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/PointDetailsVo.java | 45 + cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/RecordAppoint.java | 30 cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/PointsMerchandise.java | 2 cloud-server-account/src/main/java/com/dsh/account/service/UserIntegralChangesService.java | 10 cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/CoursePackageConfigClient.java | 18 cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java | 13 cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java | 42 + cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java | 3 cloud-server-account/src/main/java/com/dsh/account/service/impl/UserIntegralChangesServiceImpl.java | 30 cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePackageConfigClient.java | 18 cloud-server-course/src/main/java/com/dsh/course/feignclient/model/RecordAppoint.java | 30 cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java | 64 + cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseClient.java | 14 cloud-server-account/src/main/java/com/dsh/account/util/JuHeUtil.java | 44 + cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java | 319 +++++++++ cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandise.java | 4 cloud-server-course/src/main/java/com/dsh/course/controller/CourseRecordController.java | 38 + cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageDiscountService.java | 6 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java | 83 ++ cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseClient.java | 13 cloud-server-course/src/main/java/com/dsh/course/model/vo/response/ExchangeCoursePackageResponse.java | 49 + cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java | 47 + cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java | 27 cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ProductDetailsVo.java | 58 + cloud-server-activity/src/main/resources/mapper/PointsMerchandiseStoreMapper.xml | 6 cloud-server-activity/src/main/java/com/dsh/activity/mapper/PointsMerchandiseStoreMapper.java | 16 cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CourseRecordClient.java | 4 cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java | 9 cloud-server-activity/src/main/java/com/dsh/activity/service/PointsMerchandiseStoreService.java | 16 cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/CoursePackagePaymentConfig.java | 31 cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java | 3 cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PointsMerchandiseStoreServiceImpl.java | 20 cloud-server-course/src/main/java/com/dsh/course/feignclient/CourseRecordClient.java | 3 cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ProductDetailsVo.java | 58 + cloud-server-course/src/main/java/com/dsh/course/model/vo/response/WeekLimitedResponse.java | 11 cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java | 67 + cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandiseStore.java | 49 + cloud-server-activity/src/main/java/com/dsh/activity/entity/UserPointsMerchandise.java | 15 cloud-server-account/src/main/java/com/dsh/account/model/vo/classDetails/AppointmentRecordVo.java | 22 cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/PointDetailsVo.java | 45 + cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ExchangeDetailsResponse.java | 31 cloud-server-account/src/main/java/com/dsh/account/util/DateTimeHelper.java | 17 cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java | 5 cloud-server-course/src/main/java/com/dsh/course/util/LocalDateTimeUtils.java | 23 cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java | 9 cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ProductDetailRequest.java | 13 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java | 395 ++++++++++- cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java | 2 51 files changed, 1,845 insertions(+), 94 deletions(-) diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java index d371b09..5079f5f 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java +++ b/cloud-server-account/src/main/java/com/dsh/account/controller/ClassDetailsController.java @@ -4,9 +4,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.dsh.account.entity.TStudent; import com.dsh.account.feignclient.competition.model.PurchaseRecordVo; +import com.dsh.account.model.vo.classDetails.AppointmentRecordVo; import com.dsh.account.model.vo.classDetails.ClasspaymentRequest; import com.dsh.account.model.vo.classDetails.classInsVo.*; import com.dsh.account.model.vo.commentDetail.StuCommentsVo; +import com.dsh.account.model.vo.exploreDetail.LonLatRequest; import com.dsh.account.model.vo.medalDetail.GongVo; import com.dsh.account.model.vo.medalDetail.StuMedalVo; import com.dsh.account.model.vo.sourceDetail.CouponStuAvailableVo; @@ -64,17 +66,15 @@ @PostMapping("/api/startCource/queryStudentData") @ApiOperation(value = "上课首页", tags = {"APP-开始上课"}) @ApiImplicitParams({ - @ApiImplicitParam(value = "经度值", name = "longitude", required = true, dataType = "String"), - @ApiImplicitParam(value = "纬度值", name = "latitude", required = true, dataType = "String"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) - public ResultUtil<ClassInfoVo> queryCouponRecord(String longitude, String latitude){ + public ResultUtil<ClassInfoVo> queryCouponRecord(LonLatRequest lonLatRequest){ try { Integer userIdFormRedis = tokenUtil.getUserIdFormRedis(); if(null == userIdFormRedis){ return ResultUtil.tokenErr(); } - return ResultUtil.success(tappuService.queryUserOfStus(userIdFormRedis,longitude,latitude)); + return ResultUtil.success(tappuService.queryUserOfStus(userIdFormRedis,lonLatRequest.getLongitude(),lonLatRequest.getLatitude())); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); @@ -86,7 +86,7 @@ @PostMapping("/api/startCource/queryPhysical") @ApiOperation(value = "获取学员测试报告", tags = {"APP-开始上课"}) @ApiImplicitParams({ - @ApiImplicitParam(value = "学员id", name = "id", required = true, dataType = "int"), + @ApiImplicitParam(value = "学员id", name = "stuID", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil<StuPhysicalVo> getStuPhysicalInfo(Integer stuID){ @@ -117,8 +117,7 @@ if(null == userIdFormRedis){ return ResultUtil.tokenErr(); } - istuService.addStuOfAppUser(stu,userIdFormRedis); - return ResultUtil.success(); + return istuService.addStuOfAppUser(stu,userIdFormRedis); }catch (Exception e){ return ResultUtil.runErr(ResultUtil.ERROR); } @@ -244,7 +243,9 @@ @PostMapping("/api/startCource/renewal") @ApiOperation(value = "课时详情-续课课包详情", tags = {"APP-开始上课"}) @ApiImplicitParams({ - @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") + @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), + @ApiImplicitParam(value = "课包id", name = "lessonId", required = true, dataType = "int"), + @ApiImplicitParam(value = "学员id", name = "stuId", required = true, dataType = "int"), }) public ResultUtil<CourseDetailsOfContinuationResp> renewalOfCourses(Integer lessonId, Integer stuId){ try { @@ -317,7 +318,7 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(value = "学员id", name = "stuId", required = true, dataType = "int"), }) - public ResultUtil<List<StuCommentsVo>> queryStuComment(@RequestParam("stuId") Integer stuId){ + public ResultUtil<List<StuCommentsVo>> queryStuComment( Integer stuId){ try { return ResultUtil.success(evalstuService.queryStuCommentsList(stuId)); }catch (Exception e){ @@ -336,7 +337,7 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(value = "学员id", name = "stuId", required = true, dataType = "int"), }) - public ResultUtil<List<StuMedalVo>> queryStuMedal(@RequestParam("stuId") Integer stuId){ + public ResultUtil<List<StuMedalVo>> queryStuMedal( Integer stuId){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ @@ -359,7 +360,7 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(value = "学员id", name = "stuId", required = true, dataType = "int"), }) - public ResultUtil<List<GongVo>> queryStuGoog(@RequestParam("stuId") Integer stuId){ + public ResultUtil<List<GongVo>> queryStuGoog(Integer stuId){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ @@ -371,6 +372,50 @@ } } + /** + * 上课预约记录 + */ + @ResponseBody + @PostMapping("/api/startCource/stuAppointList") + @ApiOperation(value = "上课预约记录", tags = {"APP-开始上课"}) + @ApiImplicitParams({ + @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), + @ApiImplicitParam(value = "学员id", name = "stuId", required = true, dataType = "int"), + }) + public ResultUtil<AppointmentRecordVo> cgeClassAppointmentRecordList(Integer stuId){ + try { + Integer appUserId = tokenUtil.getUserIdFormRedis(); + if(null == appUserId){ + return ResultUtil.tokenErr(); + } + return ResultUtil.success(istuService.getAppointmentRecords(stuId,appUserId)); + }catch (Exception e){ + return ResultUtil.runErr(); + } + } + + /** + * 取消预约 + */ + @ResponseBody + @PostMapping("/api/startCource/cancelCourse") + @ApiOperation(value = "上课预约-取消预约", tags = {"APP-开始上课"}) + @ApiImplicitParams({ + @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), + @ApiImplicitParam(value = "上课记录id", name = "courseStuRecordId", required = true, dataType = "int"), + }) + public ResultUtil cancelReservation(Integer courseStuRecordId){ + try { + Integer appUserId = tokenUtil.getUserIdFormRedis(); + if(null == appUserId){ + return ResultUtil.tokenErr(); + } + return istuService.cancelReservationOfCourse(courseStuRecordId); + }catch (Exception e){ + return ResultUtil.runErr(); + } + } + } diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java index b195abe..64fd0c1 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java +++ b/cloud-server-account/src/main/java/com/dsh/account/controller/ExploreWPController.java @@ -82,6 +82,9 @@ @ResponseBody @PostMapping("/base/exploreWP/exceptionDetail") @ApiOperation(value = "联系客服-常见问题详情", tags = {"APP-探索玩湃"}) + @ApiImplicitParams({ + @ApiImplicitParam(value = "问题记录id", name = "quesId", required = true, dataType = "int"), + }) public ResultUtil<QuestionIns> queryQuestionData(Integer quesId){ try { return ResultUtil.success(tsService.queryQuestionDataInfo(quesId)); 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 c5fa489..cc1e617 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 @@ -277,11 +277,31 @@ /** + * 商品详情 + */ + @ResponseBody + @PostMapping("/api/useBenefit/goodsDetails") + @ApiOperation(value = "积分商城-商品详情", tags = {"APP-使用福利"}) + @ApiImplicitParams({ + @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), + @ApiImplicitParam(value = "商品id", name = "goodId", required = true, dataType = "int"), + @ApiImplicitParam(value = "商品类型 1实物 2课包 3门票 4优惠券", name = "goodsType", required = true, dataType = "int"), + }) + public ResultUtil<ProductDetailsVo> productDetails(Integer goodId, Integer goodsType){ + try { + return ResultUtil.success(tauService.productDetails(goodId,goodsType)); + }catch (Exception e){ + return ResultUtil.runErr(); + } + } + + + /** * 积分明细 */ @ResponseBody @PostMapping("/api/useBenefit/integralDetails") - @ApiOperation(value = "积分明细", tags = {"APP-使用福利"}) + @ApiOperation(value = "积分商城-积分明细", tags = {"APP-使用福利"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(value = "年月", name = "yearMonth", required = true, dataType = "string"), @@ -300,6 +320,48 @@ } + /** + * 兑换记录 + */ + @ResponseBody + @PostMapping("/api/useBenefit/exchangeRecords") + @ApiOperation(value = "积分商城-兑换记录", tags = {"APP-使用福利"}) + @ApiImplicitParams({ + @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), + @ApiImplicitParam(value = "使用状态 (1已使用 2未使用)", name = "useType", required = true, dataType = "string"), + @ApiImplicitParam(value = "商品类型 1实物 2课包 3门票 4优惠券", name = "goodType", required = true, dataType = "int"), + }) + public ResultUtil<List<ExchangeDetailsResponse>> exchangeRecordsDetails(Integer useType, Integer goodType){ + try { + Integer userIdFormRedis = tokenUtil.getUserIdFormRedis(); + if(null == userIdFormRedis){ + return ResultUtil.tokenErr(); + } + return ResultUtil.success(uicService.queryExchangeGoodsdetails(userIdFormRedis,useType,goodType)); + }catch (Exception e){ + return ResultUtil.runErr(); + } + } + + + /** + * 兑换记录详情 + */ + @ResponseBody + @PostMapping("/api/useBenefit/redemptionDetails") + @ApiOperation(value = "积分商城-兑换记录详情", tags = {"APP-使用福利"}) + @ApiImplicitParams({ + @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), + @ApiImplicitParam(value = "记录id", name = "detailsId", required = true, dataType = "string"), + }) + public ResultUtil<PointDetailsVo> redemptionDetails(Integer detailsId){ + try { + return ResultUtil.success(uicService.queryRedemptionDetails(detailsId)); + }catch (Exception e){ + return ResultUtil.runErr(); + } + } + } diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseClient.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseClient.java index 7d045a8..ba61917 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseClient.java +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseClient.java @@ -4,6 +4,10 @@ import com.dsh.account.feignclient.activity.model.CommodityRequest; import com.dsh.account.feignclient.activity.model.IntegralCommodity; import com.dsh.account.feignclient.activity.model.PointsMerchandise; +import com.dsh.account.feignclient.activity.model.ProductDetailRequest; +import com.dsh.account.model.vo.userBenefitDetail.ExchangeDetailsResponse; +import com.dsh.account.model.vo.userBenefitDetail.PointDetailsVo; +import com.dsh.account.model.vo.userBenefitDetail.ProductDetailsVo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -23,4 +27,13 @@ @PostMapping("/base/pointMerchars/getRedeemedNums") public int getRedeemedQuantity(@RequestBody Integer goodId); + @PostMapping("/base/pointMerchars/getGoodDetails") + ProductDetailsVo getGoodDetailsWithId(@RequestBody ProductDetailRequest detailRequest); + + + @PostMapping("/base/pointMerchars/getDetailsOfExchange") + List<ExchangeDetailsResponse> getIntegralExchangeDetails(@RequestBody Integer appUserId); + + @PostMapping("/base/pointMerchars/getSpecificsOfGoods") + public PointDetailsVo getSpecificsOfGoods(@RequestBody Integer speMercharsId); } diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/PointsMerchandise.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/PointsMerchandise.java index 69d9377..84177d7 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/PointsMerchandise.java +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/PointsMerchandise.java @@ -39,7 +39,7 @@ /** * 所属积分 */ - private BigDecimal integral; + private Integer integral; /** * 商品封面 */ diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/ProductDetailRequest.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/ProductDetailRequest.java new file mode 100644 index 0000000..33659e0 --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/ProductDetailRequest.java @@ -0,0 +1,13 @@ +package com.dsh.account.feignclient.activity.model; + + +import lombok.Data; + +@Data +public class ProductDetailRequest { + + Integer goodId; + + Integer goodsType; + +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java index 2e0b74f..f960001 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java @@ -44,7 +44,7 @@ public boolean delPaymentCoursePackage(@RequestBody Integer payId); @PostMapping("/base/coursePack/updatePaymentCoursePackage") - void updatePaymentCoursePackage(TCoursePackagePayment coursePackagePayment); + void updatePaymentCoursePackage(@RequestBody TCoursePackagePayment coursePackagePayment); @PostMapping("/base/coursePack/savePaymentCoursePackage") public boolean savePaymentCoursePackage(@RequestBody TCoursePackagePayment packagePayment); @@ -52,4 +52,7 @@ @PostMapping("/base/coursePack/allAmountPayRecordOfUser") public List<TCoursePackagePayment> getAmountPayRecord(@RequestBody Integer appUserId); + @PostMapping("/base/coursePack/obtainStudentClassDetails") + List<RecordAppoint> obtainStudentClassDetailsData(@RequestBody Integer stuId); + } diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CourseRecordClient.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CourseRecordClient.java index 67b286f..41e0c1f 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CourseRecordClient.java +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CourseRecordClient.java @@ -11,4 +11,8 @@ @PostMapping("/base/courseRecord/queryDeduClassHours") public Integer getDeductionClassHour(@RequestBody GetStudentCourse course); + @PostMapping("/base/courseRecord/cancelCourseData") + Integer cancelCourseRecordClass(@RequestBody Integer courseRecordId); + + } diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/RecordAppoint.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/RecordAppoint.java new file mode 100644 index 0000000..e4c0131 --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/RecordAppoint.java @@ -0,0 +1,30 @@ +package com.dsh.account.feignclient.course.model; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class RecordAppoint { + + @ApiModelProperty(value = "课包id") + private Integer coursePackageId; + + @ApiModelProperty(value = "上课记录id") + private Long courseStuRecordId; + + @ApiModelProperty(value = "课包名称") + private String coursePackageName; + + @ApiModelProperty(value = "课时数") + private Integer courseHours; + + @ApiModelProperty(value = "上课时间范围(例如:2021.03.01 8:00-11:00)") + private String timeFrame; + + @ApiModelProperty(value = "门店名称+地址") + private String storeNameAddr; + + @ApiModelProperty(value = "课状态(1待上课 2已开始 3已完成 4已取消)") + private Integer status; + +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/vo/classDetails/AppointmentRecordVo.java b/cloud-server-account/src/main/java/com/dsh/account/model/vo/classDetails/AppointmentRecordVo.java new file mode 100644 index 0000000..296e9e7 --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/model/vo/classDetails/AppointmentRecordVo.java @@ -0,0 +1,22 @@ +package com.dsh.account.model.vo.classDetails; + + +import com.dsh.account.feignclient.course.model.RecordAppoint; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class AppointmentRecordVo { + + @ApiModelProperty(value = "学员id") + private Integer stuId; + + @ApiModelProperty(value = "当前学员姓名") + private String stuName; + + @ApiModelProperty(value = "记录列表") + private List<RecordAppoint> appointList; + +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ExchangeDetailsResponse.java b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ExchangeDetailsResponse.java new file mode 100644 index 0000000..21ce630 --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ExchangeDetailsResponse.java @@ -0,0 +1,31 @@ +package com.dsh.account.model.vo.userBenefitDetail; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ExchangeDetailsResponse { + + @ApiModelProperty(value = "记录id") + private Long detailsId; + + @ApiModelProperty(value = "商品名称") + private String goodName; + + @ApiModelProperty(value = "支付类型(积分 / 积分+现金)") + private String requiredType; + + @ApiModelProperty(value = "有效期开始时间") + private String startTime; + + @ApiModelProperty(value = "有效期结束时间") + private String endTime; + + @ApiModelProperty(value = "使用状态 (1已使用 2未使用)") + private Integer useStatus; + + @ApiModelProperty(value = "商品类型 1实物 2课包 3门票 4优惠券") + private Integer goodType; + +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/PointDetailsVo.java b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/PointDetailsVo.java new file mode 100644 index 0000000..237c23d --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/PointDetailsVo.java @@ -0,0 +1,45 @@ +package com.dsh.account.model.vo.userBenefitDetail; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class PointDetailsVo { + + @ApiModelProperty(value = "记录id") + private Integer detailsId; + + @ApiModelProperty(value = "图片集") + private List<String> pics; + + @ApiModelProperty(value = "商品名称") + private String goodName; + + @ApiModelProperty(value = "适用状态(1已使用 2未使用)") + private Integer useType; + + @ApiModelProperty(value = "有效期开始时间") + private String startTime; + + @ApiModelProperty(value = "有效期结束时间") + private String endTime; + + @ApiModelProperty(value = "下单时间") + private String orderTime; + + @ApiModelProperty(value = "核销时间") + private String writeOffTime; + + @ApiModelProperty(value = "核销门店") + private String writeOffName; + + @ApiModelProperty(value = "适用范围(指定门店可用)") + private String belongs; + + @ApiModelProperty(value = "兑换说明") + private String contents; + +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ProductDetailsVo.java b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ProductDetailsVo.java new file mode 100644 index 0000000..52e811f --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/ProductDetailsVo.java @@ -0,0 +1,58 @@ +package com.dsh.account.model.vo.userBenefitDetail; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public class ProductDetailsVo { + + @ApiModelProperty(value = "商品id") + private Integer goodId; + + @ApiModelProperty(value = "图片列表") + private List<String> pics; + + @ApiModelProperty(value = "商品名称") + private String goodName; + + @ApiModelProperty(value = "适用人群") + private Integer belongsScope; + + @ApiModelProperty(value = "已兑换数量") + private Integer redeemedNum; + + @ApiModelProperty(value = "剩余数量") + private Integer residueNum; + + @ApiModelProperty(value = "每人限额") + private Integer perLimit; + + @ApiModelProperty(value = "所需类型(积分/积分+现金)") + private String requiredType; + + @ApiModelProperty(value = "价值") + private BigDecimal cost; + + @ApiModelProperty(value = "课时数") + private Integer courseHours; + + @ApiModelProperty(value = "适用范围") + private String belongs; + + @ApiModelProperty(value = "有效期开始时间") + private String startTime; + + @ApiModelProperty(value = "有效期结束时间") + private String endTime; + + @ApiModelProperty(value = "兑换说明") + private String contents; + + @ApiModelProperty(value = "商品类型 1实物 2课包 3门票 4优惠券") + private Integer goodType; + +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java b/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java index e63f6f4..b8cf145 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java +++ b/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java @@ -124,4 +124,6 @@ ResultUtil uploadAppUserHeadImg(Integer appUserId, MultipartFile file, HttpServletRequest request); + ProductDetailsVo productDetails(Integer goodId, Integer goodsType ); + } diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java b/cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java index d8cc797..0006542 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java +++ b/cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java @@ -4,6 +4,7 @@ import com.dsh.account.entity.TStudent; import com.dsh.account.feignclient.competition.model.PurchaseRecordVo; import com.dsh.account.feignclient.other.model.SysNotice; +import com.dsh.account.model.vo.classDetails.AppointmentRecordVo; import com.dsh.account.model.vo.classDetails.ClasspaymentRequest; import com.dsh.account.model.vo.classDetails.classInsVo.ClassDetailsInsVo; import com.dsh.account.model.vo.classDetails.classInsVo.StuDetailsReq; @@ -29,7 +30,7 @@ */ public interface TStudentService extends IService<TStudent> { - void addStuOfAppUser(StuDetailsReq stu,Integer appUserId); + ResultUtil addStuOfAppUser(StuDetailsReq stu,Integer appUserId) throws Exception; ClassDetailsInsVo querySessionDetailsDt(Integer userIdFormRedis, Integer lessonId, Integer stuId); @@ -75,4 +76,14 @@ ResultUtil insertVipPaymentCallback(String outTradeNo, String transactionId); + /** + * 查询学院的上课记录 + * @param stuId + * @param appUserId + * @return + */ + AppointmentRecordVo getAppointmentRecords(Integer stuId, Integer appUserId); + + ResultUtil cancelReservationOfCourse( Integer courseStuRecordId); + } diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/UserIntegralChangesService.java b/cloud-server-account/src/main/java/com/dsh/account/service/UserIntegralChangesService.java index 2d1b48a..b45c68a 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/service/UserIntegralChangesService.java +++ b/cloud-server-account/src/main/java/com/dsh/account/service/UserIntegralChangesService.java @@ -3,7 +3,11 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.account.entity.UserIntegralChanges; import com.dsh.account.model.SaveUserIntegralChangesVo; +import com.dsh.account.model.vo.userBenefitDetail.ExchangeDetailsResponse; import com.dsh.account.model.vo.userBenefitDetail.IntegralDetailsResponse; +import com.dsh.account.model.vo.userBenefitDetail.PointDetailsVo; + +import java.util.List; /** * <p> @@ -24,4 +28,10 @@ * @throws Exception */ void saveUserIntegralChanges(SaveUserIntegralChangesVo vo) throws Exception; + + List<ExchangeDetailsResponse> queryExchangeGoodsdetails(Integer userIdFormRedis, Integer useType, Integer goodType); + + + PointDetailsVo queryRedemptionDetails(Integer detailsId); + } diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java index cb4076e..5119fd7 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java +++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java @@ -12,6 +12,7 @@ import com.dsh.account.feignclient.activity.UserConponClient; import com.dsh.account.feignclient.activity.model.CommodityRequest; import com.dsh.account.feignclient.activity.model.PointsMerchandise; +import com.dsh.account.feignclient.activity.model.ProductDetailRequest; import com.dsh.account.feignclient.competition.DeductionCompetitionsClient; import com.dsh.account.feignclient.competition.model.PaymentCompetition; import com.dsh.account.feignclient.course.CoursePackageClient; @@ -739,4 +740,12 @@ return ResultUtil.success(); } + @Override + public ProductDetailsVo productDetails(Integer goodId, Integer goodsType ) { + ProductDetailRequest detailsVo = new ProductDetailRequest(); + detailsVo.setGoodsType(goodsType); + detailsVo.setGoodId(goodId); + return mcClient.getGoodDetailsWithId(detailsVo); + } + } diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java index e55dcac..03a738d 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java +++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java @@ -25,6 +25,7 @@ import com.dsh.account.mapper.CoachMapper; import com.dsh.account.mapper.TAppUserMapper; import com.dsh.account.mapper.TStudentMapper; +import com.dsh.account.model.vo.classDetails.AppointmentRecordVo; import com.dsh.account.model.vo.classDetails.ClasspaymentRequest; import com.dsh.account.model.vo.classDetails.classInsVo.ClassDetailsInsVo; import com.dsh.account.model.vo.classDetails.classInsVo.StuDetailsReq; @@ -106,8 +107,14 @@ @Override - public void addStuOfAppUser(StuDetailsReq stu,Integer appUserId) { + public ResultUtil addStuOfAppUser(StuDetailsReq stu,Integer appUserId) throws Exception { TStudent student = new TStudent(); + if(ToolUtil.isNotEmpty(stu.getName()) && ToolUtil.isNotEmpty(stu.getIdCard())){ + Boolean aBoolean = JuHeUtil.idcardAuthentication(stu.getIdCard(), stu.getName()); + if(!aBoolean){ + return ResultUtil.error("身份证和姓名不匹配"); + } + } student.setAppUserId(appUserId); student.setName(stu.getName()); student.setHeadImg(stu.getHeadImg()); @@ -136,6 +143,7 @@ saveParticipant.setPhone(student.getPhone()); saveParticipant.setIdcard(student.getIdCard()); participantClient.saveParticipant(saveParticipant); + return ResultUtil.success(); } @Override @@ -555,4 +563,36 @@ return ResultUtil.success(); } + @Override + public AppointmentRecordVo getAppointmentRecords(Integer stuId, Integer appUserId) { + AppointmentRecordVo recordVo = new AppointmentRecordVo(); + TStudent tStudent = this.baseMapper.selectOne(new QueryWrapper<TStudent>() + .eq("id",stuId ) + .eq("appUserId",appUserId)); + if (ToolUtil.isNotEmpty(tStudent)){ + recordVo.setStuId(tStudent.getId()); + recordVo.setStuName(tStudent.getName()); + recordVo.setAppointList(couPayClient.obtainStudentClassDetailsData(stuId)); + } + return recordVo; + } + + @Override + public ResultUtil cancelReservationOfCourse(Integer courseStuRecordId) { + Integer integer = crClient.cancelCourseRecordClass(courseStuRecordId); + switch (integer){ + case 1: + ResultUtil.success(); + break; + case 2: + ResultUtil.error("开课前三小时不能取消!"); + break; + default: + ResultUtil.runErr(); + break; + } + return null; + } + + } diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/UserIntegralChangesServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/UserIntegralChangesServiceImpl.java index 309550a..e04b185 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/UserIntegralChangesServiceImpl.java +++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/UserIntegralChangesServiceImpl.java @@ -4,12 +4,16 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.account.entity.TAppUser; import com.dsh.account.entity.UserIntegralChanges; +import com.dsh.account.feignclient.activity.MerChandiseClient; import com.dsh.account.mapper.TAppUserMapper; import com.dsh.account.mapper.UserIntegralChangesMapper; import com.dsh.account.model.SaveUserIntegralChangesVo; +import com.dsh.account.model.vo.userBenefitDetail.ExchangeDetailsResponse; import com.dsh.account.model.vo.userBenefitDetail.IntegralDetailsResponse; +import com.dsh.account.model.vo.userBenefitDetail.PointDetailsVo; import com.dsh.account.service.UserIntegralChangesService; import com.dsh.account.util.DateTimeHelper; +import com.dsh.account.util.ToolUtil; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -34,7 +38,10 @@ @Resource private TAppUserMapper tauMapper; - + + @Resource + private MerChandiseClient mcClient; + @Override public IntegralDetailsResponse queryUserPointsDetails(String yearMonth, Integer recordId, Integer userIdFormRedis) { IntegralDetailsResponse vo = new IntegralDetailsResponse(); @@ -116,4 +123,25 @@ userIntegralChanges.setInsertTime(new Date()); this.save(userIntegralChanges); } + + @Override + public List<ExchangeDetailsResponse> queryExchangeGoodsdetails(Integer userIdFormRedis, Integer useType, Integer goodType) { + List<ExchangeDetailsResponse> integralExchangeDetails = mcClient.getIntegralExchangeDetails(userIdFormRedis); + if (ToolUtil.isNotEmpty(useType)){ + integralExchangeDetails = integralExchangeDetails.stream() + .filter(response -> Objects.equals(response.getUseStatus(), useType)) + .collect(Collectors.toList()); + } + if (ToolUtil.isNotEmpty(goodType)){ + integralExchangeDetails = integralExchangeDetails.stream() + .filter(response -> Objects.equals(response.getGoodType(), goodType)) + .collect(Collectors.toList()); + } + return integralExchangeDetails; + } + + @Override + public PointDetailsVo queryRedemptionDetails(Integer detailsId) { + return mcClient.getSpecificsOfGoods(detailsId); + } } diff --git a/cloud-server-account/src/main/java/com/dsh/account/util/DateTimeHelper.java b/cloud-server-account/src/main/java/com/dsh/account/util/DateTimeHelper.java index 03bb3d3..2d7b310 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/util/DateTimeHelper.java +++ b/cloud-server-account/src/main/java/com/dsh/account/util/DateTimeHelper.java @@ -1484,6 +1484,23 @@ } /** + * 获取当前日期是星期几<br> + * Obtain the day of the week for the current date. + * @param dt + * @return 当前日期是星期几 + */ + public static int getWeekNumOfDate(Date dt) { + Integer[] weekDays = {7, 1, 2, 3, 4, 5, 6}; // 将周一的数值设为2,依次递增表示周二到周日 + Calendar cal = Calendar.getInstance(); + cal.setTime(dt); + int w = cal.get(Calendar.DAY_OF_WEEK) - 1; + if (w < 0) { + w = 6; // 如果为负数,将其设为6,表示周日 + } + return weekDays[w]; + } + + /** * 获取今天时间 2017-11-20 00:00:00 */ public static Date todayDate() { diff --git a/cloud-server-account/src/main/java/com/dsh/account/util/JuHeUtil.java b/cloud-server-account/src/main/java/com/dsh/account/util/JuHeUtil.java new file mode 100644 index 0000000..af3b28f --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/util/JuHeUtil.java @@ -0,0 +1,44 @@ +package com.dsh.account.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.dsh.account.util.httpClinet.HttpClientUtil; +import com.dsh.account.util.httpClinet.HttpResult; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author zhibing.pu + * @date 2023/7/11 12:05 + */ +public class JuHeUtil { + + + /** + * 校验实名认证 + * @param idcard + * @param name + * @return + * @throws Exception + */ + public static Boolean idcardAuthentication(String idcard, String name) throws Exception{ + Map<String, Object> params = new HashMap<>(); + params.put("idcard", idcard); + params.put("realname", name); + params.put("key", "29fec4bbe3108e4fbf52704e5a906fe0"); + HttpResult httpResult = HttpClientUtil.pushHttpRequset("POST", "http://op.juhe.cn/idcard/query", params, null, "form"); + if(httpResult.getCode() != 200){ + return false; + } + JSONObject jsonObject = JSON.parseObject(httpResult.getData()); + Integer error_code = jsonObject.getInteger("error_code"); + if(0 == error_code){ + JSONObject result = jsonObject.getJSONObject("result"); + Integer res = result.getInteger("res"); + return res == 1 ? true : false; + } + return false; + } + +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java index e326ec9..26c9023 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java @@ -2,19 +2,26 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.dsh.activity.entity.PointsMerchandise; -import com.dsh.activity.entity.UserPointsMerchandise; -import com.dsh.activity.feignclient.model.IntegralCommodity; +import com.dsh.activity.entity.*; +import com.dsh.activity.feignclient.course.CoursePackageClient; +import com.dsh.activity.feignclient.course.CoursePackageConfigClient; +import com.dsh.activity.feignclient.course.model.CoursePackage; +import com.dsh.activity.feignclient.course.model.CoursePackagePaymentConfig; +import com.dsh.activity.feignclient.model.*; +import com.dsh.activity.feignclient.other.StoreClient; +import com.dsh.activity.feignclient.other.model.StoreDetailOfCourse; import com.dsh.activity.model.request.CommodityRequest; -import com.dsh.activity.service.PointsMerchandiseService; -import com.dsh.activity.service.UserPointsMerchandiseService; +import com.dsh.activity.service.*; import com.dsh.activity.util.GDMapGeocodingUtil; +import com.dsh.activity.util.StrUtils; +import com.dsh.activity.util.ToolUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.text.SimpleDateFormat; import java.util.*; @RestController @@ -31,6 +38,26 @@ @Autowired private UserPointsMerchandiseService upmseService; + @Autowired + private ICouponService iCouponService; + + @Autowired + private CoursePackageClient cpClient; + + @Autowired + private StoreClient stoClient; + + @Autowired + private CoursePackageConfigClient cpcfigClient; + + @Autowired + private PointsMerchandiseStoreService pmdstoService; + + @Autowired + private UserCouponService uconService; + + @Autowired + private CouponStoreService cstoreService; @PostMapping("/base/pointMerchars/convertGoods") @@ -85,4 +112,286 @@ .eq("pointsMerchandiseId",goodId)); } + + @PostMapping("/base/pointMerchars/getGoodDetails") + public ProductDetailsVo getGoodDetailsWithId(@RequestBody ProductDetailRequest detailRequest){ + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + ProductDetailsVo detailsVo = new ProductDetailsVo(); + PointsMerchandise merchandise = pmdsService.getById(detailRequest.getGoodId()); + switch (detailRequest.getGoodsType()){ + case 2: +// 课包 + CoursePackage coursePackage = cpClient.queryCoursePackageById(detailRequest.getGoodId()); + + detailsVo.setGoodId(coursePackage.getId()); + List<String> list1 = Arrays.asList(StrUtils.splitStr2StrArr(coursePackage.getDetailDrawing(), ",")); + list1.add(coursePackage.getCoverDrawing()); + detailsVo.setPics(list1); + Collections.sort(detailsVo.getPics(), (s1, s2) -> { + if (s1.equals(coursePackage.getCoverDrawing())) { + return -1; // s1排在前面 + } else if (s2.equals(coursePackage.getCoverDrawing())) { + return 1; // s2排在前面 + } else { + return 0; // 保持原顺序 + } + }); + detailsVo.setGoodName(coursePackage.getName()); + detailsVo.setBelongsScope(merchandise.getUserPopulation()); + int coursePackageNums = upmseService.count(new QueryWrapper<UserPointsMerchandise>() + .eq("pointsMerchandiseId",merchandise.getId() )); + detailsVo.setRedeemedNum(coursePackageNums); + detailsVo.setResidueNum(merchandise.getQuantityIssued() - coursePackageNums); + detailsVo.setPerLimit(merchandise.getPickUpQuantity()); + if (merchandise.getRedemptionMethod() == 1){ + detailsVo.setRequiredType(merchandise.getIntegral() + "积分"); + }else { + detailsVo.setRequiredType(merchandise.getIntegral() + "积分+¥"+merchandise.getCash()); + } + detailsVo.setCost(merchandise.getPrice()); + if (merchandise.getUseScope() == 1){ + detailsVo.setBelongs("全国通用"); + }else if (merchandise.getUseScope() == 2){ + detailsVo.setBelongs(merchandise.getProvince()+"|"+merchandise.getCity() + "用户可用"); + }else { + List<PointsMerchandiseStore> list = pmdstoService.list(new QueryWrapper<PointsMerchandiseStore>() + .eq("pointsMerchandiseId",merchandise.getId() )); + PointsMerchandiseStore pointsMerchandiseStore = list.get(0); + StoreDetailOfCourse courseOfStore = stoClient.getCourseOfStore(pointsMerchandiseStore.getStoreId()); + detailsVo.setBelongs(courseOfStore.getStoreName()+"可用"); + } + List<CoursePackagePaymentConfig> courseConfigList = cpcfigClient.getCourseConfigList(coursePackage.getId()); + int redul = 0; + + for (CoursePackagePaymentConfig coursePackagePaymentConfig : courseConfigList) { + redul = redul + coursePackagePaymentConfig.getClassHours(); + } + detailsVo.setCourseHours(redul); + detailsVo.setStartTime(format.format(merchandise.getStartTime())); + detailsVo.setEndTime(format.format(merchandise.getEndTime())); + + detailsVo.setContents(merchandise.getRedemptionInstructions()); + detailsVo.setGoodType(merchandise.getType()); + + break; + case 1: + case 3: + + detailsVo.setGoodId(merchandise.getId()); + List<String> list2 = Arrays.asList(StrUtils.splitStr2StrArr(merchandise.getProductImages(), ",")); + list2.add(merchandise.getCover()); + detailsVo.setPics(list2); + Collections.sort(detailsVo.getPics(), (s1, s2) -> { + if (s1.equals(merchandise.getCover())) { + return -1; // s1排在前面 + } else if (s2.equals(merchandise.getCover())) { + return 1; // s2排在前面 + } else { + return 0; // 保持原顺序 + } + }); + detailsVo.setPics(list2); + detailsVo.setGoodName(merchandise.getName()); + detailsVo.setBelongsScope(merchandise.getUserPopulation()); + int count = upmseService.count(new QueryWrapper<UserPointsMerchandise>() + .eq("pointsMerchandiseId",merchandise.getId() )); + detailsVo.setRedeemedNum(count); + detailsVo.setResidueNum(merchandise.getQuantityIssued()-count); + detailsVo.setPerLimit(merchandise.getPickUpQuantity()); + if (merchandise.getRedemptionMethod() == 1){ + detailsVo.setRequiredType(merchandise.getIntegral() + "积分"); + }else { + detailsVo.setRequiredType(merchandise.getIntegral() + "积分+¥"+merchandise.getCash()); + } + detailsVo.setCost(merchandise.getPrice()); + if (merchandise.getUseScope() == 1){ + detailsVo.setBelongs("全国通用"); + }else if (merchandise.getUseScope() == 2){ + detailsVo.setBelongs(merchandise.getProvince()+"|"+merchandise.getCity() + "用户可用"); + }else { + List<PointsMerchandiseStore> list = pmdstoService.list(new QueryWrapper<PointsMerchandiseStore>() + .eq("pointsMerchandiseId",merchandise.getId() )); + PointsMerchandiseStore pointsMerchandiseStore = list.get(0); + StoreDetailOfCourse courseOfStore = stoClient.getCourseOfStore(pointsMerchandiseStore.getStoreId()); + detailsVo.setBelongs(courseOfStore.getStoreName()+"可用"); + } + + detailsVo.setStartTime(format.format(merchandise.getStartTime())); + detailsVo.setEndTime(format.format(merchandise.getEndTime())); + + detailsVo.setContents(merchandise.getRedemptionInstructions()); + detailsVo.setGoodType(merchandise.getType()); + break; + case 4: +// 优惠券 + Coupon coupon = iCouponService.getById(detailRequest.getGoodId()); + detailsVo.setGoodId(coupon.getId()); + List<String> list3 = Arrays.asList(StrUtils.splitStr2StrArr(coupon.getProductImages(), ",")); + list3.add(coupon.getCover()); + detailsVo.setPics(list3); + Collections.sort(detailsVo.getPics(), (s1, s2) -> { + if (s1.equals(coupon.getCover())) { + return -1; // s1排在前面 + } else if (s2.equals(coupon.getCover())) { + return 1; // s2排在前面 + } else { + return 0; // 保持原顺序 + } + }); + detailsVo.setGoodName(coupon.getName()); + detailsVo.setBelongsScope(coupon.getUserPopulation()); + int couponNums = uconService.count(new QueryWrapper<UserCoupon>() + .eq("couponId",coupon.getId() )); + detailsVo.setRedeemedNum(couponNums); + detailsVo.setResidueNum(coupon.getQuantityIssued()-couponNums); + detailsVo.setPerLimit(coupon.getPickUpQuantity()); + if (merchandise.getRedemptionMethod() == 1){ + detailsVo.setRequiredType(merchandise.getIntegral() + "积分"); + }else { + detailsVo.setRequiredType(merchandise.getIntegral() + "积分+¥"+merchandise.getCash()); + } + if (coupon.getUseScope() == 1){ + detailsVo.setBelongs("全国通用"); + }else if (coupon.getUseScope() == 2){ + detailsVo.setBelongs(coupon.getProvince()+"|"+coupon.getCity() + "用户可用"); + }else { + List<CouponStore> list = cstoreService.list(new QueryWrapper<CouponStore>() + .eq("couponId",coupon.getId() )); + StoreDetailOfCourse courseOfStore = stoClient.getCourseOfStore(list.get(0).getStoreId()); + detailsVo.setBelongs(courseOfStore.getStoreName()+"可用"); + } + detailsVo.setStartTime(format.format(merchandise.getStartTime())); + detailsVo.setEndTime(format.format(merchandise.getEndTime())); + + detailsVo.setContents(coupon.getIllustrate()); + detailsVo.setGoodType(4); + break; + default: + break; + } + return detailsVo; + } + + + + @PostMapping("/base/pointMerchars/getDetailsOfExchange") + public List<ExchangeDetailsResponse> getIntegralExchangeDetails(@RequestBody Integer appUserId){ + List<ExchangeDetailsResponse> responses = new ArrayList<>(); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + List<UserPointsMerchandise> pointsMerchandises = upmseService.list(new QueryWrapper<UserPointsMerchandise>() + .eq("userId",appUserId )); + if (pointsMerchandises.size() > 0 ){ + for (UserPointsMerchandise pointsMerchandise : pointsMerchandises) { + PointsMerchandise merchandise = pmdsService.getById(pointsMerchandise.getPointsMerchandiseId()); + ExchangeDetailsResponse detailsResponse = new ExchangeDetailsResponse(); + detailsResponse.setDetailsId(pointsMerchandise.getId()); + detailsResponse.setGoodName(merchandise.getName()); + if (merchandise.getRedemptionMethod() == 1){ + detailsResponse.setRequiredType(merchandise.getIntegral()+"积分"); + }else { + detailsResponse.setRequiredType(merchandise.getIntegral()+"积分 ¥"+merchandise.getCash()); + } + detailsResponse.setStartTime(simpleDateFormat.format(merchandise.getStartTime())); + detailsResponse.setEndTime(simpleDateFormat.format(merchandise.getEndTime())); + detailsResponse.setUseStatus(pointsMerchandise.getStatus()); + detailsResponse.setGoodType(merchandise.getType()); + responses.add(detailsResponse); + } + } + return responses; + } + + + + @PostMapping("/base/pointMerchars/getSpecificsOfGoods") + public PointDetailsVo getSpecificsOfGoods(@RequestBody Integer speMercharsId){ + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + PointDetailsVo detailsVo = new PointDetailsVo(); + UserPointsMerchandise byId = upmseService.getById(speMercharsId); + if (ToolUtil.isNotEmpty(byId)){ + PointsMerchandise pmdsServiceById = pmdsService.getById(byId.getPointsMerchandiseId()); + detailsVo.setDetailsId(byId.getId()); + switch (pmdsServiceById.getType()){ + case 1: + case 3: + List<String> list2 = Arrays.asList(StrUtils.splitStr2StrArr(pmdsServiceById.getProductImages(), ",")); + list2.add(pmdsServiceById.getCover()); + detailsVo.setPics(list2); + Collections.sort(detailsVo.getPics(), (s1, s2) -> { + if (s1.equals(pmdsServiceById.getCover())) { + return -1; // s1排在前面 + } else if (s2.equals(pmdsServiceById.getCover())) { + return 1; // s2排在前面 + } else { + return 0; // 保持原顺序 + } + }); + break; + case 2: + CoursePackage coursePackage = cpClient.queryCoursePackageById(pmdsServiceById.getCoursePackageId()); + List<String> list1 = Arrays.asList(StrUtils.splitStr2StrArr(coursePackage.getDetailDrawing(), ",")); + list1.add(coursePackage.getCoverDrawing()); + detailsVo.setPics(list1); + Collections.sort(detailsVo.getPics(), (s1, s2) -> { + if (s1.equals(coursePackage.getCoverDrawing())) { + return -1; // s1排在前面 + } else if (s2.equals(coursePackage.getCoverDrawing())) { + return 1; // s2排在前面 + } else { + return 0; // 保持原顺序 + } + }); + break; + case 4: + Coupon coupon = iCouponService.getById(pmdsServiceById.getId()); + List<String> list3 = Arrays.asList(StrUtils.splitStr2StrArr(coupon.getProductImages(), ",")); + list3.add(coupon.getCover()); + detailsVo.setPics(list3); + Collections.sort(detailsVo.getPics(), (s1, s2) -> { + if (s1.equals(coupon.getCover())) { + return -1; // s1排在前面 + } else if (s2.equals(coupon.getCover())) { + return 1; // s2排在前面 + } else { + return 0; // 保持原顺序 + } + }); + break; + default: + break; + } + + detailsVo.setGoodName(pmdsServiceById.getName()); + detailsVo.setStartTime(simpleDateFormat.format(pmdsServiceById.getStartTime())); + detailsVo.setEndTime(simpleDateFormat.format(pmdsServiceById.getEndTime())); + detailsVo.setOrderTime(simpleDateFormat.format(byId.getInsertTime())); + if (byId.getStatus() == 1){ + detailsVo.setUseType(2); + }else { + detailsVo.setUseType(1); + detailsVo.setWriteOffTime(simpleDateFormat.format(byId.getVerificationTime())); + StoreDetailOfCourse courseOfStore = stoClient.getCourseOfStore(byId.getVerifiStoreId()); + detailsVo.setWriteOffName(courseOfStore.getStoreName()); + } + switch (pmdsServiceById.getUseScope()){ + case 1: + detailsVo.setBelongs("全国通用"); + break; + case 2: + detailsVo.setBelongs(pmdsServiceById.getProvince()+pmdsServiceById.getCity()); + break; + case 3: + PointsMerchandiseStore one = pmdstoService.getOne(new QueryWrapper<PointsMerchandiseStore>() + .eq("pointsMerchandiseId",pmdsServiceById.getId() )); + StoreDetailOfCourse courseOfStore = stoClient.getCourseOfStore(one.getStoreId()); + detailsVo.setBelongs(courseOfStore.getStoreName()+" "+courseOfStore.getStoreAddr()); + break; + default: + break; + } + detailsVo.setContents(pmdsServiceById.getRedemptionInstructions()); + } + return detailsVo; + } + } diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandise.java b/cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandise.java index 989c500..c5b362d 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandise.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandise.java @@ -35,7 +35,7 @@ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** - * 类型(1=实体商品,2=课包商品,3=门票商品) + * 类型(1=实体商品,2=课包商品,3=门票商品 4=优惠券) */ @TableField("type") private Integer type; @@ -68,7 +68,7 @@ * 所属积分 */ @TableField("integral") - private BigDecimal integral; + private Integer integral; /** * 商品封面 */ diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandiseStore.java b/cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandiseStore.java new file mode 100644 index 0000000..8d8e480 --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/entity/PointsMerchandiseStore.java @@ -0,0 +1,49 @@ +package com.dsh.activity.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * <p> + * 积分商品使用门店关系数据 + * </p> + * + * @author jqs + * @since 2023-07-12 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("t_points_merchandise_store") +public class PointsMerchandiseStore extends Model<PointsMerchandiseStore> { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + /** + * 积分商品id + */ + private Integer pointsMerchandiseId; + /** + * 门店id + */ + private Integer storeId; + + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/entity/UserPointsMerchandise.java b/cloud-server-activity/src/main/java/com/dsh/activity/entity/UserPointsMerchandise.java index 22f0842..81c510f 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/entity/UserPointsMerchandise.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/entity/UserPointsMerchandise.java @@ -44,21 +44,26 @@ @TableField("userId") private Integer userId; /** - * 状态(1=待核销,2=已核销) - */ - @TableField("status") - private Integer status; - /** * 核销人员id */ @TableField("verificationUserId") private Integer verificationUserId; /** + * 核销门店id + */ + @TableField("verifiStoreId") + private Integer verifiStoreId; + /** * 核销时间 */ @TableField("verificationTime") private Date verificationTime; /** + * 状态(1=待核销,2=已核销) + */ + @TableField("status") + private Integer status; + /** * 领取时间 */ @TableField("insertTime") diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseClient.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseClient.java index fe612bd..d6937db 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseClient.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseClient.java @@ -2,7 +2,7 @@ import com.dsh.activity.entity.PointsMerchandise; -import com.dsh.activity.feignclient.model.IntegralCommodity; +import com.dsh.activity.feignclient.model.*; import com.dsh.activity.model.request.CommodityRequest; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -22,4 +22,16 @@ @PostMapping("/base/pointMerchars/getRedeemedNums") public int getRedeemedQuantity(@RequestBody Integer goodId); + + @PostMapping("/base/pointMerchars/getGoodDetails") + ProductDetailsVo getGoodDetailsWithId(@RequestBody ProductDetailRequest detailRequest); + + @PostMapping("/base/pointMerchars/getDetailsOfExchange") + List<ExchangeDetailsResponse> getIntegralExchangeDetails(@RequestBody Integer appUserId); + + + @PostMapping("/base/pointMerchars/getSpecificsOfGoods") + public PointDetailsVo getSpecificsOfGoods(@RequestBody Integer speMercharsId); + + } diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/CoursePackageConfigClient.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/CoursePackageConfigClient.java new file mode 100644 index 0000000..645a366 --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/CoursePackageConfigClient.java @@ -0,0 +1,18 @@ +package com.dsh.activity.feignclient.course; + + +import com.dsh.activity.feignclient.course.model.CoursePackagePaymentConfig; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + + +@FeignClient(value = "mb-cloud-course") +public interface CoursePackageConfigClient { + + @PostMapping("/base/coursePack/getCoursePackageConfig") + List<CoursePackagePaymentConfig> getCourseConfigList(@RequestBody Integer coursePackageId); + +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/CoursePackagePaymentConfig.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/CoursePackagePaymentConfig.java new file mode 100644 index 0000000..99ed0bd --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/CoursePackagePaymentConfig.java @@ -0,0 +1,31 @@ +package com.dsh.activity.feignclient.course.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @date 2023/6/29 10:42 + */ +@Data +public class CoursePackagePaymentConfig { + /** + * 主键 + */ + private Integer id; + /** + * 课包id + */ + private Integer coursePackageId; + /** + * 课时数 + */ + private Integer classHours; + /** + * 现金支付价格 + */ + private Double cashPayment; + /** + * 玩湃币价格 + */ + private Integer playPaiCoin; +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ExchangeDetailsResponse.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ExchangeDetailsResponse.java new file mode 100644 index 0000000..2588782 --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ExchangeDetailsResponse.java @@ -0,0 +1,31 @@ +package com.dsh.activity.feignclient.model; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ExchangeDetailsResponse { + + @ApiModelProperty(value = "记录id") + private Long detailsId; + + @ApiModelProperty(value = "商品名称") + private String goodName; + + @ApiModelProperty(value = "支付类型(积分 / 积分+现金)") + private String requiredType; + + @ApiModelProperty(value = "有效期开始时间") + private String startTime; + + @ApiModelProperty(value = "有效期结束时间") + private String endTime; + + @ApiModelProperty(value = "使用状态 (1已使用 2未使用)") + private Integer useStatus; + + @ApiModelProperty(value = "商品类型 1实物 2课包 3门票 4优惠券") + private Integer goodType; + +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/PointDetailsVo.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/PointDetailsVo.java new file mode 100644 index 0000000..8bf0fac --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/PointDetailsVo.java @@ -0,0 +1,45 @@ +package com.dsh.activity.feignclient.model; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class PointDetailsVo { + + @ApiModelProperty(value = "记录id") + private Long detailsId; + + @ApiModelProperty(value = "图片集") + private List<String> pics; + + @ApiModelProperty(value = "商品名称") + private String goodName; + + @ApiModelProperty(value = "适用状态(1已使用 2未使用)") + private Integer useType; + + @ApiModelProperty(value = "有效期开始时间") + private String startTime; + + @ApiModelProperty(value = "有效期结束时间") + private String endTime; + + @ApiModelProperty(value = "下单时间") + private String orderTime; + + @ApiModelProperty(value = "核销时间") + private String writeOffTime; + + @ApiModelProperty(value = "核销门店") + private String writeOffName; + + @ApiModelProperty(value = "适用范围(指定门店可用)") + private String belongs; + + @ApiModelProperty(value = "兑换说明") + private String contents; + +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ProductDetailRequest.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ProductDetailRequest.java new file mode 100644 index 0000000..a1bc3ea --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ProductDetailRequest.java @@ -0,0 +1,13 @@ +package com.dsh.activity.feignclient.model; + + +import lombok.Data; + +@Data +public class ProductDetailRequest { + + Integer goodId; + + Integer goodsType; + +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ProductDetailsVo.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ProductDetailsVo.java new file mode 100644 index 0000000..db38c2a --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/model/ProductDetailsVo.java @@ -0,0 +1,58 @@ +package com.dsh.activity.feignclient.model; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public class ProductDetailsVo { + + @ApiModelProperty(value = "商品id") + private Integer goodId; + + @ApiModelProperty(value = "图片列表") + private List<String> pics; + + @ApiModelProperty(value = "商品名称") + private String goodName; + + @ApiModelProperty(value = "适用人群") + private Integer belongsScope; + + @ApiModelProperty(value = "已兑换数量") + private Integer redeemedNum; + + @ApiModelProperty(value = "剩余数量") + private Integer residueNum; + + @ApiModelProperty(value = "每人限额") + private Integer perLimit; + + @ApiModelProperty(value = "所需类型(积分/积分+现金)") + private String requiredType; + + @ApiModelProperty(value = "价值") + private BigDecimal cost; + + @ApiModelProperty(value = "课时数") + private Integer courseHours; + + @ApiModelProperty(value = "适用范围") + private String belongs; + + @ApiModelProperty(value = "有效期开始时间") + private String startTime; + + @ApiModelProperty(value = "有效期结束时间") + private String endTime; + + @ApiModelProperty(value = "兑换说明") + private String contents; + + @ApiModelProperty(value = "商品类型 1实物 2课包 3门票 4优惠券") + private Integer goodType; + +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/mapper/PointsMerchandiseStoreMapper.java b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/PointsMerchandiseStoreMapper.java new file mode 100644 index 0000000..93b1594 --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/mapper/PointsMerchandiseStoreMapper.java @@ -0,0 +1,16 @@ +package com.dsh.activity.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dsh.activity.entity.PointsMerchandiseStore; + +/** + * <p> + * 积分商品使用门店关系数据 Mapper 接口 + * </p> + * + * @author jqs + * @since 2023-07-12 + */ +public interface PointsMerchandiseStoreMapper extends BaseMapper<PointsMerchandiseStore> { + +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/PointsMerchandiseStoreService.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/PointsMerchandiseStoreService.java new file mode 100644 index 0000000..6adb70d --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/PointsMerchandiseStoreService.java @@ -0,0 +1,16 @@ +package com.dsh.activity.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dsh.activity.entity.PointsMerchandiseStore; + +/** + * <p> + * 积分商品使用门店关系数据 服务类 + * </p> + * + * @author jqs + * @since 2023-07-12 + */ +public interface PointsMerchandiseStoreService extends IService<PointsMerchandiseStore> { + +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PointsMerchandiseStoreServiceImpl.java b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PointsMerchandiseStoreServiceImpl.java new file mode 100644 index 0000000..fa13f02 --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/service/impl/PointsMerchandiseStoreServiceImpl.java @@ -0,0 +1,20 @@ +package com.dsh.activity.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dsh.activity.entity.PointsMerchandiseStore; +import com.dsh.activity.mapper.PointsMerchandiseStoreMapper; +import com.dsh.activity.service.PointsMerchandiseStoreService; +import org.springframework.stereotype.Service; + +/** + * <p> + * 积分商品使用门店关系数据 服务实现类 + * </p> + * + * @author jqs + * @since 2023-07-12 + */ +@Service +public class PointsMerchandiseStoreServiceImpl extends ServiceImpl<PointsMerchandiseStoreMapper, PointsMerchandiseStore> implements PointsMerchandiseStoreService { + +} diff --git a/cloud-server-activity/src/main/resources/mapper/PointsMerchandiseStoreMapper.xml b/cloud-server-activity/src/main/resources/mapper/PointsMerchandiseStoreMapper.xml new file mode 100644 index 0000000..f198ce1 --- /dev/null +++ b/cloud-server-activity/src/main/resources/mapper/PointsMerchandiseStoreMapper.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.dsh.activity.mapper.PointsMerchandiseStoreMapper"> + + +</mapper> 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 2159d03..ad053e0 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,6 +1,7 @@ package com.dsh.course.controller; import com.dsh.course.entity.TCoursePackage; +import com.dsh.course.model.vo.response.ExchangeCoursePackageResponse; import com.dsh.course.model.vo.response.WeekLimitedResponse; import com.dsh.course.service.TCoursePackageDiscountService; import com.dsh.course.service.TCoursePackageService; @@ -72,4 +73,50 @@ } } + + /** + * 折扣课包详情 + */ + @ResponseBody + @PostMapping("/api/useBenefit/discountCourseDatas") + @ApiOperation(value = "本周福利-折扣课包详情", tags = {"APP-使用福利"}) + @ApiImplicitParams({ + @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), + @ApiImplicitParam(name = "coursePackageDiscountId",value = "限时折扣配置id/赠送课时配置id",dataType = "int"), + @ApiImplicitParam(name = "lon",value = "经度",dataType = "String"), + @ApiImplicitParam(name = "lat",value = "纬度",dataType = "String"), + }) + public ResultUtil<ExchangeCoursePackageResponse> discountCourseDatas(Integer coursePackageDiscountId,String lon,String lat){ + try { + return ResultUtil.success(tcpdService.getWeekFreeCourseDetails(coursePackageDiscountId,lat,lon)); + }catch (Exception e){ + return ResultUtil.runErr(); + } + } + + + /** + * 折扣课包支付 + */ + @ResponseBody + @PostMapping("/api/useBenefit/paymentOfDiscountCoursePack") + @ApiOperation(value = "本周福利-折扣课包支付", tags = {"APP-使用福利"}) + @ApiImplicitParams({ + @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), + @ApiImplicitParam(name = "coursePackageDiscountId",value = "限时折扣配置id/赠送课时配置id",dataType = "int"), + @ApiImplicitParam(name = "lon",value = "经度",dataType = "String"), + @ApiImplicitParam(name = "lat",value = "纬度",dataType = "String"), + }) + public ResultUtil paymentWeeksFreeCourse(Integer coursePackageDiscountId){ + try { + Integer appuserId = tokenUtil.getUserIdFormRedis(); + if(null == appuserId){ + return ResultUtil.tokenErr(); + } + return tcpdService.paymentDiscountCoursePack(coursePackageDiscountId,appuserId); + }catch (Exception e){ + return ResultUtil.runErr(); + } + } + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java index 574528c..b9be5bb 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java +++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java @@ -53,14 +53,6 @@ @Autowired private TCoursePackageDiscountService tcpdService; - @Autowired - private PostCourseVideoService pcvService; - - @Autowired - private CoursePackageStudentService cpsService; - - @Autowired - private CancelledClassesService cacService; @Autowired private ICoursePackagePaymentConfigService icppcService; @@ -689,4 +681,23 @@ return packagePaymentService.save(packagePayment); } + + @PostMapping("/base/coursePack/obtainStudentClassDetails") + public List<RecordAppoint> obtainStudentClassDetailsData(@RequestBody Integer stuId){ + try { + Integer appUserId = tokenUtil.getUserIdFormRedis(); + return packagePaymentService.obtainStuClassDetails(stuId,appUserId); + }catch (Exception e){ + e.printStackTrace(); + throw new RuntimeException(); + } + } + + + @PostMapping("/base/coursePack/getCoursePackageConfig") + public List<CoursePackagePaymentConfig> getCourseConfigList(@RequestBody Integer coursePackageId){ + return icppcService.list(new QueryWrapper<CoursePackagePaymentConfig>() + .eq("coursePackageId",coursePackageId)); + } + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CourseRecordController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CourseRecordController.java index 81e2384..db47c6d 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/controller/CourseRecordController.java +++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CourseRecordController.java @@ -9,10 +9,17 @@ import com.dsh.course.service.CancelledClassesService; import com.dsh.course.service.CoursePackageStudentService; import com.dsh.course.service.TCoursePackageService; +import com.dsh.course.util.ToolUtil; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; +import java.util.Date; import java.util.List; @Api @@ -57,4 +64,35 @@ return sult; } + + @PostMapping("/base/courseRecord/cancelCourseData") + public Integer cancelCourseRecordClass(@RequestBody Integer courseRecordId){ + int sult = 0; + CoursePackageStudent packageStudent = cosService.getById(courseRecordId); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd"); + SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); + String tis = simpleDateFormat.format(new Date()); + + if (ToolUtil.isNotEmpty(packageStudent)){ + TCoursePackage coursePackage = tcpService.getById(packageStudent.getCoursePackageId()); + String startTime = tis +" " + coursePackage.getClassStartTime(); + Date parse = null; + try { + parse = format.parse(startTime); + } catch (ParseException e) { + throw new RuntimeException(e); + } + LocalDateTime localDateTime = parse.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + // 计算时间间隔 + long hours = ChronoUnit.HOURS.between(LocalDateTime.now(), localDateTime); + // 判断是否在前三小时内 + if (hours <= 3 && hours >= 0){ + sult = 1; + }else { + sult = 2; + } + } + return sult; + } + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePackageConfigClient.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePackageConfigClient.java new file mode 100644 index 0000000..fc9f11f --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePackageConfigClient.java @@ -0,0 +1,18 @@ +package com.dsh.course.feignclient; + + +import com.dsh.course.entity.CoursePackagePaymentConfig; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + + +@FeignClient(value = "mb-cloud-course") +public interface CoursePackageConfigClient { + + @PostMapping("/base/coursePack/getCoursePackageConfig") + List<CoursePackagePaymentConfig> getCourseConfigList(@RequestBody Integer coursePackageId); + +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java index d081599..4798270 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java +++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java @@ -58,4 +58,7 @@ @PostMapping("/base/coursePack/allAmountPayRecordOfUser") public List<TCoursePackagePayment> getAmountPayRecord(@RequestBody Integer appUserId); + @PostMapping("/base/coursePack/obtainStudentClassDetails") + List<RecordAppoint> obtainStudentClassDetailsData(@RequestBody Integer stuId); + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/CourseRecordClient.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/CourseRecordClient.java index e553ce5..4d3be7a 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/feignclient/CourseRecordClient.java +++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/CourseRecordClient.java @@ -11,4 +11,7 @@ @PostMapping("/base/courseRecord/queryDeduClassHours") public Integer getDeductionClassHour(@RequestBody GetStudentCourse course); + @PostMapping("/base/courseRecord/cancelCourseData") + Integer cancelCourseRecordClass(@RequestBody Integer courseRecordId); + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/feignclient/model/RecordAppoint.java b/cloud-server-course/src/main/java/com/dsh/course/feignclient/model/RecordAppoint.java new file mode 100644 index 0000000..ca6a2cf --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/feignclient/model/RecordAppoint.java @@ -0,0 +1,30 @@ +package com.dsh.course.feignclient.model; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class RecordAppoint { + + @ApiModelProperty(value = "课包id") + private Integer coursePackageId; + + @ApiModelProperty(value = "上课记录id") + private Long courseStuRecordId; + + @ApiModelProperty(value = "课包名称") + private String coursePackageName; + + @ApiModelProperty(value = "课时数") + private Integer courseHours; + + @ApiModelProperty(value = "上课时间范围(例如:2021.03.01 8:00-11:00)") + private String timeFrame; + + @ApiModelProperty(value = "门店名称+地址") + private String storeNameAddr; + + @ApiModelProperty(value = "课状态(1待上课 2已开始 3已完成 4已取消)") + private Integer status; + +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/ExchangeCoursePackageResponse.java b/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/ExchangeCoursePackageResponse.java new file mode 100644 index 0000000..d07f170 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/ExchangeCoursePackageResponse.java @@ -0,0 +1,49 @@ +package com.dsh.course.model.vo.response; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ExchangeCoursePackageResponse { + + @ApiModelProperty(value = "限时折扣配置id/赠送课时配置id") + private Integer coursePackageDiscountId; + + @ApiModelProperty(value = "课包封面图") + private String coverDrawing; + + @ApiModelProperty(value = "课包介绍图") + private String introduceDrawing; + + @ApiModelProperty(value = "课包名称") + private String coursePackageName; + + @ApiModelProperty(value = "门店名称+地址") + private String storeNameAddr; + + @ApiModelProperty(value = "门店距离 单位km") + private double distance; + + @ApiModelProperty(value = "课时数") + private Integer classHours; + + @ApiModelProperty(value = "赠送课时数") + private Integer freeClassHours; + + @ApiModelProperty(value = "上课周数") + private String weekTime; + + @ApiModelProperty(value = "上课时间") + private String time; + + @ApiModelProperty(value = "原价") + private Double costPrice; + + @ApiModelProperty(value = "折扣价/会员价") + private Double discountPrice; + + @ApiModelProperty(value = "玩湃币") + private Integer wanpaiGold; + +} 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 index 0e55ce8..297caa6 100644 --- 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 @@ -19,6 +19,9 @@ @Data public static class Details{ + @ApiModelProperty(value = "限时折扣配置id/赠送课时配置id") + private Integer coursePackageDiscountId; + @ApiModelProperty(value = "封面图") private String image; @@ -28,7 +31,7 @@ @ApiModelProperty(value = "课包课时数") private Integer courseHours; - @ApiModelProperty(value = "赠送课时数(赠送课时取改字段)") + @ApiModelProperty(value = "赠送课时数(赠送课时 取该字段)") private Integer donateHours; @ApiModelProperty(value = "今日/明日/周x") @@ -38,12 +41,12 @@ private Date date; @ApiModelProperty(value = "原价") - private Integer originalPrice; + private Double originalPrice; @ApiModelProperty(value = "折后价") - private Integer discountPrice; + private Double discountPrice; - @ApiModelProperty(value = "状态") + @ApiModelProperty(value = "状态(1=查看详情 2=暂未开始)") private Integer status; @ApiModelProperty(value = "门店距离") 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 852deda..c9ba179 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,7 +2,9 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.course.entity.TCoursePackageDiscount; +import com.dsh.course.model.vo.response.ExchangeCoursePackageResponse; import com.dsh.course.model.vo.response.WeekLimitedResponse; +import com.dsh.course.util.ResultUtil; /** @@ -17,4 +19,8 @@ WeekLimitedResponse getWeeksBenefitCourse(Integer appUserId,Integer discountType,String lon,String lat); + ExchangeCoursePackageResponse getWeekFreeCourseDetails(Integer coursePackageDiscountId,String lat,String lon); + + ResultUtil paymentDiscountCoursePack(Integer coursePackageDiscountId, Integer appuserId); + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java index 8d57092..d41eb94 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.course.entity.TCoursePackagePayment; +import com.dsh.course.feignclient.model.RecordAppoint; import com.dsh.course.model.vo.RegisterCourseVo; import com.dsh.course.model.vo.request.ClasspaymentRequest; import com.dsh.course.model.vo.request.CourseOfAfterRequest; @@ -77,4 +78,12 @@ ResultUtil ContinuationOrpaymentCourse(Integer userIdFormRedis, ClasspaymentRequest request); + /** + * 查询学员的课包上课记录 + * @param stuId + * @param appUserId + * @return + */ + List<RecordAppoint> obtainStuClassDetails(Integer stuId, Integer appUserId); + } 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..aa8c8de 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,35 @@ 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.entity.TCoursePackagePayment; import com.dsh.course.feignclient.other.StoreClient; import com.dsh.course.feignclient.other.model.GetDistanceVo; +import com.dsh.course.feignclient.other.model.Store; +import com.dsh.course.mapper.CoursePackagePaymentConfigMapper; import com.dsh.course.mapper.TCoursePackageDiscountMapper; import com.dsh.course.mapper.TCoursePackageMapper; +import com.dsh.course.mapper.TCoursePackagePaymentMapper; +import com.dsh.course.model.vo.response.ExchangeCoursePackageResponse; 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 com.dsh.course.util.ResultUtil; +import com.dsh.course.util.StrUtils; 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; @@ -36,74 +48,361 @@ @Resource private TCoursePackageMapper tcpMapper; + @Resource + private TCoursePackagePaymentMapper tcppMapper; + + @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(); - + 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; + } + /** + * [{ + * "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(); + + resde.setCoursePackageDiscountId(tCoursePackageDiscount.getId()); + 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(); + + resde.setCoursePackageDiscountId(tCoursePackageDiscount.getId()); + 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) { + 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; + } +// [{ +// "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(); + + resde.setCoursePackageDiscountId(tCoursePackageDiscount.getId()); + 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(); + + resde.setCoursePackageDiscountId(tCoursePackageDiscount.getId()); + 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; } + + @Override + public ExchangeCoursePackageResponse getWeekFreeCourseDetails(Integer coursePackageDiscountId,String lat,String lon) { + ExchangeCoursePackageResponse packageResponse = new ExchangeCoursePackageResponse(); + TCoursePackageDiscount coursePackageDiscount = this.baseMapper.selectById(coursePackageDiscountId); + packageResponse.setCoursePackageDiscountId(coursePackageDiscount.getId()); + Integer coursePackageId = coursePackageDiscount.getCoursePackageId(); + + TCoursePackage coursePackage = tcpMapper.selectById(coursePackageId); + + packageResponse.setCoverDrawing(coursePackage.getCoverDrawing()); + packageResponse.setIntroduceDrawing(coursePackage.getIntroduceDrawing()); + packageResponse.setCoursePackageName(coursePackage.getName()); + + 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()); + long l = sreClient.calculateDistance(distanceVo); + packageResponse.setDistance(l); + + JSONArray jsonArray = JSON.parseArray(coursePackageDiscount.getContent()); + JSONObject jsonObject = jsonArray.getJSONObject(0); + CoursePackagePaymentConfig paymentConfig = cppcMapper.selectById(coursePackageDiscount.getCoursePackagePaymentConfigId()); + if (coursePackageDiscount.getType() == 3){ + Double cashPayment = jsonObject.getDouble("cashPayment"); + packageResponse.setClassHours(paymentConfig.getClassHours()); + packageResponse.setCostPrice(paymentConfig.getCashPayment()); + packageResponse.setDiscountPrice(cashPayment); + }else { + packageResponse.setClassHours(paymentConfig.getClassHours()); + + Integer cashPayment = jsonObject.getInteger("hour"); + packageResponse.setFreeClassHours(cashPayment); + + packageResponse.setCostPrice(paymentConfig.getCashPayment()); + TCoursePackageDiscount coursePackageDiscount1 = this.baseMapper.selectOne(new QueryWrapper<TCoursePackageDiscount>() + .eq("type", 1) + .eq("coursePackageId",coursePackage.getId())); + String content = coursePackageDiscount1.getContent(); + JSONObject jsonObject1 = JSON.parseObject(content); + Double vipPrice = jsonObject1.getDouble("num1"); + packageResponse.setDiscountPrice(vipPrice); + packageResponse.setWanpaiGold(paymentConfig.getPlayPaiCoin()); + } + List<Integer> weeks = StrUtils.dealStrToList(coursePackage.getClassWeeks()); + if (weeks.size() > 0){ + StringBuilder courWeeks = new StringBuilder("每"); + for (Integer integer : weeks) { + switch (integer){ + case 1: + courWeeks.append("周一、"); + break; + case 2: + courWeeks.append("周二、"); + break; + case 3: + courWeeks.append("周三、"); + break; + case 4: + courWeeks.append("周四、"); + break; + case 5: + courWeeks.append("周五、"); + break; + case 6: + courWeeks.append("周六、"); + break; + case 7: + courWeeks.append("周末、"); + break; + default: + break; + } + } + if (courWeeks.length() > 0 && courWeeks.charAt(courWeeks.length() - 1) == ','){ + courWeeks.deleteCharAt(courWeeks.length() - 1); + } + packageResponse.setWeekTime(courWeeks.toString()); + } + packageResponse.setTime(coursePackage.getClassStartTime()+"-"+coursePackage.getClassEndTime()); + + return packageResponse; + } + + @Override + public ResultUtil paymentDiscountCoursePack(Integer coursePackageDiscountId, Integer appuserId) { + // TODO: 2023/7/13 折扣课包支付 + return null; + } + + + private static boolean isDateWithinRange(Date date, Date startTime, Date endTime) { + return date.after(startTime) && date.before(endTime); + } + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java index 93feb54..bba42cc 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java @@ -9,6 +9,7 @@ import com.dsh.course.feignclient.activity.CouponClient; import com.dsh.course.feignclient.activity.model.BenefitsVideos; import com.dsh.course.feignclient.activity.model.Coupon; +import com.dsh.course.feignclient.model.RecordAppoint; import com.dsh.course.feignclient.other.StoreClient; import com.dsh.course.feignclient.other.model.Store; import com.dsh.course.mapper.*; @@ -22,10 +23,7 @@ import com.dsh.course.model.vo.response.CourseDetailsResponse; import com.dsh.course.model.vo.response.CourseOfVideoResponse; import com.dsh.course.service.TCoursePackagePaymentService; -import com.dsh.course.util.PayMoneyUtil; -import com.dsh.course.util.ResultUtil; -import com.dsh.course.util.StrUtils; -import com.dsh.course.util.UUIDUtil; +import com.dsh.course.util.*; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; @@ -33,6 +31,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.regex.Matcher; @@ -401,4 +400,80 @@ } + + @Override + public List<RecordAppoint> obtainStuClassDetails(Integer stuId, Integer appUserId) { + List<RecordAppoint> recordVoList = new ArrayList<>(); + List<TCoursePackagePayment> tCoursePackagePayments = this.baseMapper.selectList(new QueryWrapper<TCoursePackagePayment>() + .eq("studentId",stuId ) + .eq("appUserId",appUserId ) + .eq("payStatus",2 ) + .eq("status",1 ) + .orderByDesc("insertTime")); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd"); + SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm"); + if (tCoursePackagePayments.size() > 0 ){ + for (TCoursePackagePayment tCoursePackagePayment : tCoursePackagePayments) { + RecordAppoint recordVo = new RecordAppoint(); + recordVo.setCoursePackageId(tCoursePackagePayment.getCoursePackageId()); + + TCoursePackage coursePackage = tcpmapper.selectById(tCoursePackagePayment.getCoursePackageId()); + + recordVo.setCoursePackageName(coursePackage.getName()); + recordVo.setCourseHours(tCoursePackagePayment.getClassHours()); + Date date = DateUtil.getDate(); + + String classStartTime = coursePackage.getClassStartTime(); + String classEndTime = coursePackage.getClassEndTime(); + recordVo.setTimeFrame(simpleDateFormat.format(date)+" "+classStartTime+"-"+classEndTime); + Store store = stoClient.queryStoreById(coursePackage.getStoreId()); + recordVo.setStoreNameAddr(store.getName()+store.getAddress()); + CoursePackageStudent coursePackageStudent = cpsMapper.selectOne(new QueryWrapper<CoursePackageStudent>() + .eq("coursePackageId",tCoursePackagePayment.getCoursePackageId() ) + .eq("studentId",stuId) + .eq("appUserId",appUserId) + .eq("reservationStatus",1)); + if (ToolUtil.isNotEmpty(coursePackageStudent) && coursePackageStudent.getReservationStatus() == 1){ + + recordVo.setCourseStuRecordId(coursePackageStudent.getId()); + String classWeeks = coursePackage.getClassWeeks(); + String[] split = classWeeks.split(";"); + List<Integer> integerList = Arrays.stream(split) + .map(Integer::parseInt) + .collect(Collectors.toList()); + int dayOfWeek = DateTimeHelper.getDayOfWeek(new Date()); + + if (integerList.contains(dayOfWeek)){ + String dat = simpleDateFormat.format(date) +" "+ classStartTime; + + Date start = null; + try { + start = format.parse(dat); + } catch (ParseException e) { + throw new RuntimeException(e); + } + if (start.after(new Date())){ + recordVo.setStatus(1); + }else { + CancelledClasses cancelledClasses = cacMapper.selectOne(new QueryWrapper<CancelledClasses>() + .eq("coursePackageId",tCoursePackagePayment.getCoursePackageId() )); + if (ToolUtil.isNotEmpty(cancelledClasses)){ + recordVo.setStatus(3); + }else { + recordVo.setStatus(2); + } + } + }else { + recordVo.setStatus(1); + } + }else { + recordVo.setStatus(4); + } + + recordVoList.add(recordVo); + } + } + return recordVoList; + } + } 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 97688c4..017f6ac 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 @@ -1438,6 +1438,24 @@ return weekDays[w]; } + + /** + * 获取当前日期是星期几<br> + * Obtain the day of the week for the current date. + * @param dt + * @return 当前日期是星期几 + */ + public static int getWeekNumOfDate(Date dt) { + Integer[] weekDays = {7, 1, 2, 3, 4, 5, 6}; // 将周一的数值设为2,依次递增表示周二到周日 + Calendar cal = Calendar.getInstance(); + cal.setTime(dt); + int w = cal.get(Calendar.DAY_OF_WEEK) - 1; + if (w < 0) { + w = 6; // 如果为负数,将其设为6,表示周日 + } + return weekDays[w]; + } + /** * 获取今天时间 2017-11-20 00:00:00 */ diff --git a/cloud-server-course/src/main/java/com/dsh/course/util/LocalDateTimeUtils.java b/cloud-server-course/src/main/java/com/dsh/course/util/LocalDateTimeUtils.java index 1a83e4d..b706602 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/util/LocalDateTimeUtils.java +++ b/cloud-server-course/src/main/java/com/dsh/course/util/LocalDateTimeUtils.java @@ -5,6 +5,8 @@ import java.time.Duration; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.Calendar; +import java.util.Date; /** * LocalDateTimeUtils @@ -89,5 +91,26 @@ return dayOfWeek.getValue(); } + /** + * 根据输入本周的周几,获取当天的时间 + * @param dayOfWeekInput 周几 + * @return + */ + public static Date getDateOfWeekNum(int dayOfWeekInput){ + // 获取当前日期 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + + // 设置为本周的第一天(星期一) + calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); + + // 根据输入的星期几数值,计算出相应的偏移量 + int dayOfWeekIndex = (dayOfWeekInput + 6) % 7; + calendar.add(Calendar.DAY_OF_WEEK, dayOfWeekIndex); + + // 获取计算后的日期 + return calendar.getTime(); + } + } -- Gitblit v1.7.1