From 134d13688e4b6677133ba2d362d2978d8bda2b87 Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期三, 12 七月 2023 11:46:30 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- cloud-server-activity/src/main/java/com/dsh/activity/entity/Coupon.java | 10 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java | 4 cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/TCoursePackagePayment.java | 10 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java | 124 +++ cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/PointMallDetailsResponse.java | 8 cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/PointsMerchandise.java | 108 +++ cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseDetailsResponse.java | 3 cloud-server-account/src/main/java/com/dsh/account/util/OssUploadUtil.java | 39 + cloud-server-account/src/main/java/com/dsh/account/service/TStudentService.java | 2 cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java | 196 +++++ cloud-server-course/src/main/java/com/dsh/course/model/vo/RegisterCourseVo.java | 3 cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java | 4 cloud-server-course/src/main/java/com/dsh/course/feignclient/CoursePaymentClient.java | 23 cloud-server-activity/src/main/java/com/dsh/activity/model/request/CommodityRequest.java | 18 cloud-server-account/src/main/java/com/dsh/account/service/RechargeRecordsService.java | 1 cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java | 114 +++ cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java | 10 cloud-server-account/src/main/java/com/dsh/account/controller/UseBenefitsController.java | 25 cloud-server-activity/src/main/java/com/dsh/activity/feignclient/MerChandiseClient.java | 8 cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java | 52 + cloud-server-course/src/main/java/com/dsh/course/model/vo/request/PlayPaiGoldCoursePackage.java | 22 cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePackageClient.java | 22 cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/CoursePackage.java | 128 ++++ cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/model/PaymentCompetition.java | 65 ++ cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java | 48 + cloud-server-account/src/main/java/com/dsh/account/model/vo/classDetails/ClasspaymentRequest.java | 2 cloud-server-account/src/main/java/com/dsh/account/model/dto/Coupon.java | 119 +++ cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePaymentClient.java | 19 cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/CommodityRequest.java | 16 cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/IndexOfUserBenefirVo.java | 2 cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java | 217 ++++++ cloud-server-competition/src/main/java/com/dsh/competition/feignclient/DeductionCompetitionsClient.java | 10 cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/PlayPaiGoldCoursePackage.java | 22 cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/CoursePackage.java | 2 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java | 115 +++ cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/MerChandiseClient.java | 9 cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/UserConponClient.java | 11 cloud-server-course/src/main/java/com/dsh/course/model/vo/request/ClasspaymentRequest.java | 4 cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java | 206 ++++++ cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java | 13 cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/DeductionCompetitionsClient.java | 9 cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java | 30 42 files changed, 1,736 insertions(+), 117 deletions(-) diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java index fad5bff..84d79ba 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java +++ b/cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java @@ -1,9 +1,19 @@ package com.dsh.account.controller; +import com.dsh.account.service.RechargeRecordsService; +import com.dsh.account.service.TStudentService; +import com.dsh.account.util.PayMoneyUtil; +import com.dsh.account.util.ResultUtil; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; +import java.util.Map; /** * 支付回调控制器 @@ -15,22 +25,108 @@ public class PaymentCallbackController { - /** - * 支付宝支付回调接口 - */ - @PostMapping("/v1") - public void alipayCallback(){ + @Autowired + private PayMoneyUtil payMoneyUtil; + @Autowired + private TStudentService tstuService; + @Autowired + private RechargeRecordsService recordsService; + + /** + * 课包续课支付宝支付回调接口 + */ + @PostMapping("/base/coursePackage/alipayPaymentCallback") + public void alipayCallback(HttpServletRequest request, HttpServletResponse response){ + try { + Map<String, String> map = payMoneyUtil.alipayCallback(request); + if(null != map){ + String out_trade_no = map.get("out_trade_no"); + String transaction_id = map.get("transaction_id"); + ResultUtil resultUtil = tstuService.insertVipPaymentCallback(out_trade_no, transaction_id); + if(resultUtil.getCode() == 200){ + PrintWriter out = response.getWriter(); + out.write("success"); + out.flush(); + out.close(); + } + } + }catch (Exception e){ + e.printStackTrace(); + } } /** - * 微信支付回调接口 + * 课包续课微信支付回调接口 */ - @PostMapping("/v2") - public void weChatCallback(){ - + @PostMapping("/base/coursePackage/wechatPaymentCallback") + public void weChatCallback(HttpServletRequest request, HttpServletResponse response){ + try { + Map<String, String> map = payMoneyUtil.weixinpayCallback(request); + if(null != map){ + String out_trade_no = map.get("out_trade_no"); + String transaction_id = map.get("transaction_id"); + String result = map.get("result"); + ResultUtil resultUtil = tstuService.insertVipPaymentCallback(out_trade_no, transaction_id); + if(resultUtil.getCode() == 200){ + PrintWriter out = response.getWriter(); + out.write(result); + out.flush(); + out.close(); + } + } + }catch (Exception e){ + e.printStackTrace(); + } } + /** + * 充值玩湃币支付宝支付回调接口 + */ + @PostMapping("/base/recharge/alipayRechargeCallback") + public void alipayRechargeCallback(HttpServletRequest request, HttpServletResponse response){ + try { + Map<String, String> map = payMoneyUtil.alipayCallback(request); + if(null != map){ + String out_trade_no = map.get("out_trade_no"); + String transaction_id = map.get("transaction_id"); + ResultUtil resultUtil = recordsService.addRechargeCallbackPay(out_trade_no, transaction_id); + if(resultUtil.getCode() == 200){ + PrintWriter out = response.getWriter(); + out.write("success"); + out.flush(); + out.close(); + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + + + /** + * 课包续课微信支付回调接口 + */ + @PostMapping("/base/recharge/wechatRechargeCallback") + public void wechatRechargeCallback(HttpServletRequest request, HttpServletResponse response){ + try { + Map<String, String> map = payMoneyUtil.weixinpayCallback(request); + if(null != map){ + String out_trade_no = map.get("out_trade_no"); + String transaction_id = map.get("transaction_id"); + String result = map.get("result"); + ResultUtil resultUtil = recordsService.addRechargeCallbackPay(out_trade_no, transaction_id); + if(resultUtil.getCode() == 200){ + PrintWriter out = response.getWriter(); + out.write(result); + out.flush(); + out.close(); + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } } 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 73175a8..c5fa489 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 @@ -17,8 +17,10 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.text.SimpleDateFormat; import java.util.List; @@ -92,6 +94,26 @@ detailsVo.setMemberLifespan(format1.format(tAppUser.getVipEndTime())); } return ResultUtil.success(detailsVo); + }catch (Exception e){ + return ResultUtil.runErr(); + } + } + + + @ResponseBody + @PostMapping("/api/useBenefit/uploadImage") + @ApiOperation(value = "上传用户头像", tags = {"APP-使用福利"}) + @ApiImplicitParams({ + @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), + @ApiImplicitParam(name = "file",value = "图片字节",dataType = "MultipartFile") + }) + public ResultUtil uploadAppUserProfile(MultipartFile file, HttpServletRequest request){ + try { + Integer appUserId = tokenUtil.getUserIdFormRedis(); + if(null == appUserId){ + return ResultUtil.tokenErr(); + } + return ResultUtil.success(tauService.uploadAppUserHeadImg(appUserId,file,request)); }catch (Exception e){ return ResultUtil.runErr(); } @@ -247,8 +269,7 @@ if(null == userIdFormRedis){ return ResultUtil.tokenErr(); } - // TODO: 2023/7/10 积分商品列表查询 - return ResultUtil.success(); + return ResultUtil.success(tauService.queryAppUserIntegral(request,userIdFormRedis)); }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 bdcab0b..7d045a8 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 @@ -1,9 +1,12 @@ package com.dsh.account.feignclient.activity; +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 org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import java.util.List; @@ -14,4 +17,10 @@ public List<IntegralCommodity> getConvertibleGoods(); + @PostMapping("/base/pointMerchars/getCommoditys") + public List<PointsMerchandise> getVicinityGoods(@RequestBody CommodityRequest request); + + @PostMapping("/base/pointMerchars/getRedeemedNums") + public int getRedeemedQuantity(@RequestBody Integer goodId); + } diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/UserConponClient.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/UserConponClient.java index f336961..ec8eae1 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/UserConponClient.java +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/UserConponClient.java @@ -1,8 +1,11 @@ package com.dsh.account.feignclient.activity; +import com.dsh.account.feignclient.activity.model.CommodityRequest; +import com.dsh.account.model.dto.Coupon; import com.dsh.account.model.vo.sourceDetail.CouponStuAvailableVo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @@ -14,4 +17,12 @@ @PostMapping("/base/userConpon/getStuOfConpons") public List<CouponStuAvailableVo> queryUserWithConponList(@RequestParam("appUserId") Integer appUserId); + + @PostMapping("/base/coupon/getAllCoupons") + public List<Coupon> getAllCoupons(@RequestBody CommodityRequest request); + + + @PostMapping("/base/coupon/getRedeemedNums") + public int getRedeemedQuantity(@RequestBody Integer id); + } diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/CommodityRequest.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/CommodityRequest.java new file mode 100644 index 0000000..f7f8958 --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/CommodityRequest.java @@ -0,0 +1,16 @@ +package com.dsh.account.feignclient.activity.model; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +@Data +public class CommodityRequest { + + @ApiModelProperty(value = "经度") + private String lon; + + @ApiModelProperty(value = "纬度") + private String lat; + +} 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 new file mode 100644 index 0000000..69d9377 --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/PointsMerchandise.java @@ -0,0 +1,108 @@ +package com.dsh.account.feignclient.activity.model; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class PointsMerchandise { + + /** + * 主键 + */ + private Integer id; + /** + * 类型(1=实体商品,2=课包商品,3=门票商品) + */ + private Integer type; + /** + * 商品名称 + */ + private String name; + /** + * 课包id + */ + private Integer coursePackageId; + /** + * 原价 + */ + private BigDecimal price; + /** + * 兑换方式(1=积分,2=现金+积分) + */ + private Integer redemptionMethod; + /** + * 所需现金 + */ + private BigDecimal cash; + /** + * 所属积分 + */ + private BigDecimal integral; + /** + * 商品封面 + */ + private String cover; + /** + * 商品图片 + */ + private String productImages; + /** + * 用户人群(1=全部用户,2=年度会员,3=已有学员用户) + */ + private Integer userPopulation; + /** + * 发放数量 + */ + private Integer quantityIssued; + /** + * 限领数量 + */ + private Integer pickUpQuantity; + /** + * 开始时间 + */ + private Date startTime; + /** + * 结束时间 + */ + private Date endTime; + /** + * 使用范围(1=全国,2=指定城市,3=指定门店) + */ + private Integer useScope; + /** + * 省 + */ + private String province; + /** + * 省编号 + */ + private String provinceCode; + /** + * 市 + */ + private String city; + /** + * 市编号 + */ + private String cityCode; + /** + * 兑换说明 + */ + private String redemptionInstructions; + /** + * 排序 + */ + private Integer sort; + /** + * 状态(1=正常,2=冻结,3=删除) + */ + private Integer state; + /** + * 添加时间 + */ + private Date insertTime; + +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/DeductionCompetitionsClient.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/DeductionCompetitionsClient.java index a88b8de..fc6962a 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/DeductionCompetitionsClient.java +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/DeductionCompetitionsClient.java @@ -2,6 +2,7 @@ import com.dsh.account.feignclient.competition.model.GetStuSourseList; +import com.dsh.account.feignclient.competition.model.PaymentCompetition; import com.dsh.account.feignclient.competition.model.PurchaseRecordVo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -14,4 +15,12 @@ @PostMapping("/base/competition/getCompetitionsDetails") List<PurchaseRecordVo> getStuSourseList(@RequestBody GetStuSourseList getStuSourseList); + @PostMapping("/base/competition/getPayedCompetitions") + List<PaymentCompetition> getAllCompetitionPayRecord(@RequestBody Integer appUserId); + + @PostMapping("/base/competition/getCancelOrderOfUserPay") + public List<PaymentCompetition> getCancelOrderOfUserPayRecord(@RequestBody Integer appUserId); + + @PostMapping("/base/competition/getPlayPaiFGoldPayRecord") + List<PaymentCompetition> getPlayPaiFGoldPayRecord(@RequestBody Integer appUserId); } diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/model/PaymentCompetition.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/model/PaymentCompetition.java new file mode 100644 index 0000000..359de61 --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/model/PaymentCompetition.java @@ -0,0 +1,65 @@ +package com.dsh.account.feignclient.competition.model; + +import lombok.Data; + +import java.util.Date; + +/** + * @author zhibing.pu + * @date 2023/7/6 16:30 + */ +@Data +public class PaymentCompetition { + /** + * 主键 + */ + private Long id; + /** + * 业务流水号 + */ + private String code; + /** + * 赛事id + */ + private Integer competitionId; + /** + * 用户id + */ + private Integer appUserId; + /** + * 支付方式(1=微信,2=支付宝,3=玩湃币,4=课时) + */ + private Integer payType; + /** + * 支付金额 + */ + private Double amount; + /** + * 支付状态(1=待支付,2=已支付,3=已退款) + */ + private Integer payStatus; + /** + * 支付时间 + */ + private Date payTime; + /** + * 第三方支付流水号 + */ + private String payOrderNo; + /** + * 退款时间 + */ + private Date refundTime; + /** + * 第三方退款流水 + */ + private String refundOrderNo; + /** + * 状态(1=正常,2=冻结,3=删除) + */ + private Integer state; + /** + * 添加时间 + */ + private Date insertTime; +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePackageClient.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePackageClient.java new file mode 100644 index 0000000..c788428 --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePackageClient.java @@ -0,0 +1,22 @@ +package com.dsh.account.feignclient.course; + +import com.dsh.account.feignclient.course.model.CoursePackage; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + +/** + * @author zhibing.pu + * @date 2023/7/5 9:55 + */ +@FeignClient("mb-cloud-course") +public interface CoursePackageClient { + + + /** + * 根据id获取课包 + * @param id + * @return + */ + @PostMapping("/coursePackage/queryCoursePackageById") + CoursePackage queryCoursePackageById(Integer id); +} 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 55af25f..2e0b74f 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 @@ -33,4 +33,23 @@ @PostMapping("/base/coursePack/allPaymentCourseList") public List<TCoursePackagePayment> getAppuserCourseList(@RequestBody Integer appUserId); + + @PostMapping("/coursePackagePayment/courseRenewPlayPaiPay") + public int paymentWanpaiRenewCourse(@RequestBody PlayPaiGoldCoursePackage coursePackage); + + @PostMapping("/base/coursePack/getPaymentCoursePackage") + public TCoursePackagePayment getCoursePackagePaymentByCode(@RequestBody String code); + + @PostMapping("/base/coursePack/delPaymentCoursePackage") + public boolean delPaymentCoursePackage(@RequestBody Integer payId); + + @PostMapping("/base/coursePack/updatePaymentCoursePackage") + void updatePaymentCoursePackage(TCoursePackagePayment coursePackagePayment); + + @PostMapping("/base/coursePack/savePaymentCoursePackage") + public boolean savePaymentCoursePackage(@RequestBody TCoursePackagePayment packagePayment); + + @PostMapping("/base/coursePack/allAmountPayRecordOfUser") + public List<TCoursePackagePayment> getAmountPayRecord(@RequestBody Integer appUserId); + } diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/CoursePackage.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/CoursePackage.java new file mode 100644 index 0000000..4f54cd2 --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/CoursePackage.java @@ -0,0 +1,128 @@ +package com.dsh.account.feignclient.course.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + * @author zhibing.pu + * @date 2023/7/5 9:56 + */ +@Data +public class CoursePackage { + private Integer id; + /** + * 省 + */ + private String province; + /** + * 省编号 + */ + private String provinceCode; + /** + * 市 + */ + private String city; + /** + * 市编号 + */ + private String cityCode; + /** + * 门店id + */ + private Integer storeId; + /** + * 课包类型id + */ + private Integer coursePackageTypeId; + /** + * 课包名称 + */ + private String name; + /** + * 上课场地id + */ + private Integer siteId; + /** + * 教练id + */ + private Integer coachId; + /** + * 最多预约人数 + */ + private Integer maxSubscribeNumber; + /** + * 上课开始时间 + */ + private String classStartTime; + /** + * 上课结束时段 + */ + private String classEndTime; + /** + * 上课周,多个分号分隔 + */ + private String classWeeks; + /** + * 封面图 + */ + private String coverDrawing; + /** + * 详情图 + */ + private String detailDrawing; + /** + * 介绍图 + */ + private String introduceDrawing; + /** + * 排序 + */ + private Integer sort; + /** + * 支付方式(1=现金,2=玩湃币) + */ + private Integer payType; + /** + * 有效天数 + */ + private Integer validDays; + /** + * 课后练习课程id + */ + private Integer courseId; + /** + * 课后练习视频介绍 + */ + private String introduce; + /** + * 完成课后练习获取积分 + */ + private Integer integral; + /** + * 课程状态(1=未开始,2=进行中,3=已结束,4=已取消) + */ + private Integer status; + /** + * 审核状态(1=待审核,2=已同意,3=已拒绝) + */ + private Integer auditStatus; + /** + * 审核人id + */ + private Integer auditUserId; + /** + * 审核备注 + */ + private String authRemark; + /** + * 状态(1=正常,2=冻结,3=删除) + */ + private Integer state; + /** + * 添加时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date insertTime; +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/PlayPaiGoldCoursePackage.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/PlayPaiGoldCoursePackage.java new file mode 100644 index 0000000..d1ff02a --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/PlayPaiGoldCoursePackage.java @@ -0,0 +1,22 @@ +package com.dsh.account.feignclient.course.model; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class PlayPaiGoldCoursePackage { + + @ApiModelProperty(value = "支付配置id") + Integer coursePayConfigId; + + @ApiModelProperty(value = "学员id") + Integer stuId; + + @ApiModelProperty(value = "课包id") + Integer coursePackageId; + + @ApiModelProperty(value = "code") + String code; + +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/TCoursePackagePayment.java b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/TCoursePackagePayment.java index f0dfe8e..4c867d1 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/TCoursePackagePayment.java +++ b/cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/TCoursePackagePayment.java @@ -25,7 +25,7 @@ */ private Integer coursePackageId; /** - * 支付方式(1=现金,2=玩湃币) + * 支付方式(1=微信 2=支付宝 3=玩湃币) */ private Integer payType; /** @@ -88,5 +88,13 @@ * 添加时间 */ private Date insertTime; + /** + * 业务编号 + */ + private String code; + /** + * 原价 + */ + private Double originalPrice; } diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/dto/Coupon.java b/cloud-server-account/src/main/java/com/dsh/account/model/dto/Coupon.java new file mode 100644 index 0000000..81fecae --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/model/dto/Coupon.java @@ -0,0 +1,119 @@ +package com.dsh.account.model.dto; + + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class Coupon { + /** + * 主键 + */ + private Integer id; + /** + * 优惠券名称 + */ + private String name; + /** + * 优惠券类型(1=满减券,2=代金券,3=体验券) + */ + private Integer type; + /** + * 优惠券规则JSON + */ + private String content; + /** + * 优惠券说明 + */ + private String illustrate; + /** + * 发放方式(1=积分购买,2=注册赠送,3=自动发券) + */ + private Integer distributionMethod; + /** + * 兑换方式(1=积分,2=积分+现金) + */ + private Integer redemptionMethod; + /** + * 所需现金 + */ + private BigDecimal cash; + /** + * 所属积分 + */ + private BigDecimal integral; + /** + * 用户人群(1=全部用户,2=年度会员,3=已有学员用户) + */ + private Integer userPopulation; + /** + * 发放数量 + */ + private Integer quantityIssued; + /** + * 限领数量 + */ + private Integer pickUpQuantity; + /** + * 开始时间 + */ + private Date startTime; + /** + * 结束时间 + */ + private Date endTime; + /** + * 使用范围(1=全国,2=指定城市,3=指定门店) + */ + private Integer useScope; + /** + * 省 + */ + private String province; + /** + * 省编号 + */ + private String provinceCode; + /** + * 市 + */ + private String city; + /** + * 市编号 + */ + private String cityCode; + /** + * 审核状态(1=待审核,2=已通过,3=已拒绝) + */ + private Integer auditStatus; + /** + * 审核人id + */ + private Integer auditUserId; + /** + * 审核备注 + */ + private String auditRemark; + /** + * 状态(1=未开始,2=已开始,3=已结束,4=已取消) + */ + private Integer status; + /** + * 状态(1=正常,2=冻结,3=删除) + */ + private Integer state; + /** + * 添加时间 + */ + private Date insertTime; + /** + * 封面图 + */ + private String cover; + /** + * 图片 + */ + private String productImages; +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/vo/classDetails/ClasspaymentRequest.java b/cloud-server-account/src/main/java/com/dsh/account/model/vo/classDetails/ClasspaymentRequest.java index 5604edd..12d69b7 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/model/vo/classDetails/ClasspaymentRequest.java +++ b/cloud-server-account/src/main/java/com/dsh/account/model/vo/classDetails/ClasspaymentRequest.java @@ -25,7 +25,7 @@ private Integer conponId; @ApiModelProperty(value = "课时id") - private Long courseConfigId; + private Integer courseConfigId; @ApiModelProperty(value = "支付金额") private BigDecimal payAmount; diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/IndexOfUserBenefirVo.java b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/IndexOfUserBenefirVo.java index a766f2f..c2abae4 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/IndexOfUserBenefirVo.java +++ b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/IndexOfUserBenefirVo.java @@ -16,7 +16,7 @@ @ApiModelProperty(value = "用户名称") private String userName; - @ApiModelProperty(value = "是否年度会员") + @ApiModelProperty(value = "是否年度会员(字符:年度会员 或者 普通用户)") private String isMember; @ApiModelProperty(value = "玩湃币") diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/PointMallDetailsResponse.java b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/PointMallDetailsResponse.java index 287f537..68cc3f3 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/PointMallDetailsResponse.java +++ b/cloud-server-account/src/main/java/com/dsh/account/model/vo/userBenefitDetail/PointMallDetailsResponse.java @@ -35,18 +35,24 @@ @ApiModelProperty(value = "商品名称") private String goodName; + @ApiModelProperty(value = "1积分 2现金+积分") + private Integer condition; + @ApiModelProperty(value = "金额") private BigDecimal amount; @ApiModelProperty(value = "积分") private Integer integral; - @ApiModelProperty(value = "适用范围: 1 仅限会员 2仅限学员 3全部用户") + @ApiModelProperty(value = "适用范围: 1全部用户 2仅限会员 3仅限学员") private Integer belongsType; @ApiModelProperty(value = "商品类型: 1实物 2课包 3门票 4优惠券") private Integer goodsType; + @ApiModelProperty(value = "已兑换数量") + private Integer nums; + } } diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/RechargeRecordsService.java b/cloud-server-account/src/main/java/com/dsh/account/service/RechargeRecordsService.java index 3c920de..c1e0f4d 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/service/RechargeRecordsService.java +++ b/cloud-server-account/src/main/java/com/dsh/account/service/RechargeRecordsService.java @@ -20,4 +20,5 @@ ResultUtil rechargeCenPayment(Integer userIdFormRedis, RechargePayRequest request); + ResultUtil addRechargeCallbackPay(String code, String orderNumber); } 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 5b897dc..e63f6f4 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 @@ -7,11 +7,11 @@ import com.dsh.account.model.LoginSMSCodeVo; import com.dsh.account.model.LoginWeChatVo; import com.dsh.account.model.vo.classDetails.classInsVo.ClassInfoVo; -import com.dsh.account.model.vo.userBenefitDetail.BillingDetailsVo; -import com.dsh.account.model.vo.userBenefitDetail.IndexOfUserBenefirVo; -import com.dsh.account.model.vo.userBenefitDetail.RechargeCentVo; +import com.dsh.account.model.vo.userBenefitDetail.*; import com.dsh.account.util.ResultUtil; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; import java.util.List; /** @@ -107,7 +107,7 @@ /** * 获取用户账单列表 * @param yearMonth 年月 - * @param recordId 记录id + * @param recordId 记录 * @return */ BillingDetailsVo queryUserBillingDetails(String yearMonth, Integer recordId,Integer appUserId); @@ -119,4 +119,9 @@ void cancellation(Integer appUserId); List<RechargeCentVo> getSysRechargeConfig(Integer appUserId); + + PointMallDetailsResponse queryAppUserIntegral(MallRequest request, Integer userIdFormRedis); + + ResultUtil uploadAppUserHeadImg(Integer appUserId, MultipartFile file, HttpServletRequest request); + } 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 dcd9be9..d8cc797 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 @@ -73,4 +73,6 @@ ResultUtil renewClassPayment(Integer userIdFormRedis, ClasspaymentRequest request); + ResultUtil insertVipPaymentCallback(String outTradeNo, String transactionId); + } diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java index 511f7f2..0c946de 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java +++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java @@ -5,15 +5,20 @@ import com.dsh.account.entity.RechargeRecords; import com.dsh.account.entity.TAppUser; import com.dsh.account.enums.RechargeRecordEnum; +import com.dsh.account.feignclient.competition.DeductionCompetitionsClient; +import com.dsh.account.feignclient.competition.model.PaymentCompetition; import com.dsh.account.feignclient.course.CoursePaymentClient; import com.dsh.account.feignclient.course.model.TCoursePackagePayment; +import com.dsh.account.feignclient.other.RechargeConfigClient; import com.dsh.account.mapper.RechargeRecordsMapper; import com.dsh.account.mapper.TAppUserMapper; import com.dsh.account.model.vo.userBenefitDetail.RechargeDetailsVo; import com.dsh.account.model.vo.userBenefitDetail.RechargePayRequest; import com.dsh.account.service.RechargeRecordsService; import com.dsh.account.util.DateTimeHelper; +import com.dsh.account.util.PayMoneyUtil; import com.dsh.account.util.ResultUtil; +import com.dsh.account.util.UUIDUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -24,6 +29,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; /** * <p> @@ -45,6 +51,16 @@ @Autowired private CoursePaymentClient cpClient; + + @Autowired + private DeductionCompetitionsClient deducClient; + + @Autowired + private PayMoneyUtil payMoneyUtil; + + + @Resource + private RechargeConfigClient reconMapper; @Override @@ -70,7 +86,16 @@ vo.setWpGold(0); } // 1.赛事报名 - + List<PaymentCompetition> playPaiFGoldPayRecord = deducClient.getPlayPaiFGoldPayRecord(appUserId); + if (playPaiFGoldPayRecord.size() > 0 ){ + for (PaymentCompetition competition : playPaiFGoldPayRecord) { + RechargeDetailsVo.RechargesDetail consumeDetail = new RechargeDetailsVo.RechargesDetail(); + consumeDetail.setConsumeName(RechargeRecordEnum.EVENT_REGISTRATION.getMsg() ); + consumeDetail.setConsumeTime(simpleDateFormat.format(competition.getInsertTime())); + consumeDetail.setConsumeAmount("-" + competition.getAmount()); + details.add(consumeDetail); + } + } // 2.课包购买 List<TCoursePackagePayment> appuserCourseList = cpClient.getAppuserCourseList(appUserId); if (appuserCourseList.size() > 0){ @@ -86,7 +111,7 @@ // 4.智慧球场 // 5.充值 - List<RechargeRecords> rechargeRecords = rereMapper.selectList(new QueryWrapper<RechargeRecords>() + List<RechargeRecords> rechargeRecords = this.baseMapper.selectList(new QueryWrapper<RechargeRecords>() .eq("payStatus", 2) .eq("appUserId", appUserId) .between("insertTime", monthStart, monthEnd)); @@ -105,27 +130,178 @@ @Override public ResultUtil rechargeCenPayment(Integer userIdFormRedis, RechargePayRequest request) { - // TODO: 2023/7/10 充值支付 - switch (request.getPayType()){ - case 1: - WeChatPayment(request.getPayAmount()); - break; - case 2: - AlipayPayment(request.getPayAmount()); - break; - default: - break; + TAppUser tAppUser = tappMapper.selectById(userIdFormRedis); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); + RechargeRecords rechargeRecords = new RechargeRecords(); + rechargeRecords.setCode(code); + rechargeRecords.setAppUserId(userIdFormRedis); + rechargeRecords.setAmount(request.getPayAmount()); + List<Map<String, Object>> rechargeConfig = reconMapper.getRechargeConfig(); + if (rechargeConfig.size() > 0){ + for (Map<String, Object> stringObjectMap : rechargeConfig) { + Object o = stringObjectMap.get("money"); + if (o.equals(request.getPayAmount())){ + if (tAppUser.getIsVip() == 1){ + rechargeRecords.setPlayPaiCoins((Integer) stringObjectMap.get("MemberCoins")); + }else { + rechargeRecords.setPlayPaiCoins((Integer) stringObjectMap.get("usersCoins")); + } + } + } + } + rechargeRecords.setPayStatus(1); + rechargeRecords.setState(1); + rechargeRecords.setInsertTime(new Date()); + this.baseMapper.insert(rechargeRecords); + try { + switch (request.getPayType()){ + case 1: + return WeChatPayment(code,request.getPayAmount()); + case 2: + return AlipayPayment(code,request.getPayAmount()); + default: + break; + } + }catch (Exception e){ + ResultUtil.runErr(); } return ResultUtil.success(); } - private void AlipayPayment(BigDecimal payAmount) { + + private ResultUtil AlipayPayment(String code,BigDecimal amount) { + ResultUtil alipay = payMoneyUtil.alipay("玩湃币充值", "", "", code, amount.toString(), + "/base/recharge/alipayRechargeCallback"); + if(alipay.getCode() == 200){ + new Thread(new Runnable() { + @Override + public void run() { + try { + int num = 1; + int wait = 0; + while (num <= 10){ + int min = 5000; + wait += (min * num); + Thread.sleep(wait); + + RechargeRecords records = rereMapper.selectOne(new QueryWrapper<RechargeRecords>() + .eq("code",code)); + if(records.getPayStatus() == 2){ + break; + } + ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryALIOrder(code); + if(resultUtil.getCode() == 200 && records.getPayStatus() == 1){ + /** + * WAIT_BUYER_PAY(交易创建,等待买家付款)、 + * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、 + * TRADE_SUCCESS(交易支付成功)、 + * TRADE_FINISHED(交易结束,不可退款) + */ + Map<String, String> data1 = resultUtil.getData(); + String s = data1.get("tradeStatus"); + String tradeNo = data1.get("tradeNo"); + if("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10){ + records.setState(3); + rereMapper.deleteById(records.getId()); + break; + } + if("TRADE_SUCCESS".equals(s)){ + records.setPayStatus(2); + records.setOrderNumber(tradeNo); + rereMapper.updateById(records); + break; + } + if("WAIT_BUYER_PAY".equals(s)){ + num++; + } + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + }).start(); + } + return alipay; + } + + private ResultUtil WeChatPayment(String code,BigDecimal amount) throws Exception { + ResultUtil weixinpay = payMoneyUtil.weixinpay("玩湃币充值", "", code, amount.toString(), + "/base/recharge/wechatRechargeCallback", "APP", ""); + if(weixinpay.getCode() == 200){ + new Thread(new Runnable() { + @Override + public void run() { + try { + int num = 1; + int wait = 0; + while (num <= 10){ + int min = 5000; + wait += (min * num); + Thread.sleep(wait); + RechargeRecords records = rereMapper.selectOne(new QueryWrapper<RechargeRecords>() + .eq("code",code)); + if(records.getPayStatus() == 2){ + break; + } + ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, ""); + if(resultUtil.getCode() == 200 && records.getPayStatus() == 1){ + /** + * SUCCESS—支付成功, + * REFUND—转入退款, + * NOTPAY—未支付, + * CLOSED—已关闭, + * REVOKED—已撤销(刷卡支付), + * USERPAYING--用户支付中, + * PAYERROR--支付失败(其他原因,如银行返回失败) + */ + Map<String, String> data1 = resultUtil.getData(); + String s = data1.get("trade_state"); + String transaction_id = data1.get("transaction_id"); + if("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10){ + records.setState(3); + rereMapper.deleteById(records.getId()); + break; + } + if("SUCCESS".equals(s)){ + records.setPayStatus(2); + records.setOrderNumber(transaction_id); + rereMapper.updateById(records); + break; + } + if("USERPAYING".equals(s)){ + num++; + } + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + }).start(); + } + return weixinpay; } - private void WeChatPayment(BigDecimal payAmount) { + @Override + public ResultUtil addRechargeCallbackPay(String code, String orderNumber) { + RechargeRecords rechargeRecords = this.baseMapper.selectOne(new QueryWrapper<RechargeRecords>() + .eq("code", code)); + if (rechargeRecords.getPayStatus() == 2){ + return ResultUtil.success(); + } + rechargeRecords.setPayStatus(2); + rechargeRecords.setPayTime(new Date()); + rechargeRecords.setOrderNumber(orderNumber); + this.baseMapper.updateById(rechargeRecords); - + TAppUser tAppUser = tappMapper.selectById(rechargeRecords.getAppUserId()); + tAppUser.setPlayPaiCoins(null == tAppUser.getPlayPaiCoins()? rechargeRecords.getPlayPaiCoins(): tAppUser.getPlayPaiCoins() +rechargeRecords.getPlayPaiCoins() ); + tappMapper.updateById(tAppUser); + return null; } + } 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 4e6c0fb..80663ea 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 @@ -9,10 +9,14 @@ import com.dsh.account.entity.VipPayment; import com.dsh.account.enums.RechargeRecordEnum; import com.dsh.account.feignclient.activity.MerChandiseClient; +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.competition.DeductionCompetitionsClient; +import com.dsh.account.feignclient.competition.model.PaymentCompetition; +import com.dsh.account.feignclient.course.CoursePackageClient; import com.dsh.account.feignclient.course.CoursePaymentClient; -import com.dsh.account.feignclient.course.model.CourseOfStoreVo; -import com.dsh.account.feignclient.course.model.QueryStoreList; -import com.dsh.account.feignclient.course.model.StuCourseResp; +import com.dsh.account.feignclient.course.model.*; import com.dsh.account.feignclient.other.ImgConfigClient; import com.dsh.account.feignclient.other.RechargeConfigClient; import com.dsh.account.feignclient.other.StoreClient; @@ -26,14 +30,13 @@ import com.dsh.account.model.JoinPlayPaiVo; import com.dsh.account.model.LoginSMSCodeVo; import com.dsh.account.model.LoginWeChatVo; +import com.dsh.account.model.dto.Coupon; import com.dsh.account.model.vo.classDetails.CourseVenue; import com.dsh.account.model.vo.classDetails.ExerciseVideo; import com.dsh.account.model.vo.classDetails.RegisteredCourse; import com.dsh.account.model.vo.classDetails.WeekedCourse; import com.dsh.account.model.vo.classDetails.classInsVo.ClassInfoVo; -import com.dsh.account.model.vo.userBenefitDetail.BillingDetailsVo; -import com.dsh.account.model.vo.userBenefitDetail.IndexOfUserBenefirVo; -import com.dsh.account.model.vo.userBenefitDetail.RechargeCentVo; +import com.dsh.account.model.vo.userBenefitDetail.*; import com.dsh.account.service.TAppUserService; import com.dsh.account.util.*; import com.dsh.account.util.akeylogin.Md5Util; @@ -41,13 +44,13 @@ import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -100,6 +103,15 @@ @Resource private RechargeConfigClient reconMapper; + + @Resource + private UserConponClient ucponClient; + + @Resource + private CoursePackageClient cpageClient; + + @Resource + private DeductionCompetitionsClient deducClient; @Override public ClassInfoVo queryUserOfStus(Integer id,String latitude,String longitude) { @@ -490,11 +502,41 @@ monthEnd = DateTimeHelper.getCurrentMouthEnd(); } // 1.赛事报名 -// 2.课包购买 - -// 3.场地预约 -// 4.智慧球场 -// 5.年度会员 + List<PaymentCompetition> allCompetitionPayRecord = deducClient.getAllCompetitionPayRecord(appUserId); + if (allCompetitionPayRecord.size() > 0 ){ + for (PaymentCompetition paymentCompetition : allCompetitionPayRecord) { + BillingDetailsVo.ConsumeDetail consumeDetail = new BillingDetailsVo.ConsumeDetail(); + consumeDetail.setConsumeName(RechargeRecordEnum.EVENT_REGISTRATION.getMsg()); + consumeDetail.setConsumeTime(simpleDateFormat.format(paymentCompetition.getInsertTime())); + consumeDetail.setConsumeAmount("-" + paymentCompetition.getAmount()); + details.add(consumeDetail); + } + } +// 2.取消赛事报名 + List<PaymentCompetition> cancelOrderOfUserPayRecord = deducClient.getCancelOrderOfUserPayRecord(appUserId); + if (cancelOrderOfUserPayRecord.size() > 0 ){ + for (PaymentCompetition paymentCompetition : cancelOrderOfUserPayRecord) { + BillingDetailsVo.ConsumeDetail consumeDetail = new BillingDetailsVo.ConsumeDetail(); + consumeDetail.setConsumeName(RechargeRecordEnum.CANCEL_EVENT_REGISTRATION.getMsg()); + consumeDetail.setConsumeTime(simpleDateFormat.format(paymentCompetition.getInsertTime())); + consumeDetail.setConsumeAmount("+" + paymentCompetition.getAmount()); + details.add(consumeDetail); + } + } +// 3.课包购买 + List<TCoursePackagePayment> amountPayRecord = paymentClient.getAmountPayRecord(appUserId); + if (amountPayRecord.size() > 0 ){ + for (TCoursePackagePayment coursePackagePayment : amountPayRecord) { + BillingDetailsVo.ConsumeDetail consumeDetail = new BillingDetailsVo.ConsumeDetail(); + consumeDetail.setConsumeName(RechargeRecordEnum.COURSE_PACKAGE_PURCHASE.getMsg()); + consumeDetail.setConsumeTime(simpleDateFormat.format(coursePackagePayment.getInsertTime())); + consumeDetail.setConsumeAmount("-" + coursePackagePayment.getCashPayment()); + details.add(consumeDetail); + } + } +// 4.场地预约 +// 5.智慧球场 +// 6.年度会员 List<VipPayment> vipPayments = vipPaymentMapper.selectList(new QueryWrapper<VipPayment>() .eq("payStatus", 2) .eq("appUserId", appUserId) @@ -504,11 +546,10 @@ BillingDetailsVo.ConsumeDetail consumeDetail = new BillingDetailsVo.ConsumeDetail(); consumeDetail.setConsumeName(RechargeRecordEnum.ANNUAL_MEMBERSHIP.getMsg()); consumeDetail.setConsumeTime(simpleDateFormat.format(vipPayment.getInsertTime())); - consumeDetail.setConsumeAmount("+" + vipPayment.getAmount()); + consumeDetail.setConsumeAmount("-" + vipPayment.getAmount()); details.add(consumeDetail); } } -// 6.续课 // 7.充值 List<RechargeRecords> rechargeRecords = rrMapper.selectList(new QueryWrapper<RechargeRecords>() .eq("payStatus", 2) @@ -519,7 +560,7 @@ BillingDetailsVo.ConsumeDetail consumeDetail = new BillingDetailsVo.ConsumeDetail(); consumeDetail.setConsumeName(RechargeRecordEnum.RECHARGE.getMsg() + ":" + rechargeRecord.getPlayPaiCoins()); consumeDetail.setConsumeTime(simpleDateFormat.format(rechargeRecord.getInsertTime())); - consumeDetail.setConsumeAmount("+" + rechargeRecord.getAmount()); + consumeDetail.setConsumeAmount("-" + rechargeRecord.getAmount()); details.add(consumeDetail); } } @@ -557,4 +598,144 @@ return centVos; } + @Override + public PointMallDetailsResponse queryAppUserIntegral(MallRequest request, Integer userIdFormRedis) { + PointMallDetailsResponse detailsResponse = new PointMallDetailsResponse(); + List<PointMallDetailsResponse.Goods> goods = new ArrayList<>(); + + TAppUser tAppUser = this.baseMapper.selectById(userIdFormRedis); + detailsResponse.setName(tAppUser.getName()); + detailsResponse.setIntegral(tAppUser.getIntegral()); + detailsResponse.setHeadImg(tAppUser.getHeadImg()); + + CommodityRequest commodityRequest = new CommodityRequest(); + commodityRequest.setLon(request.getLon()); + commodityRequest.setLat(request.getLat()); + List<PointsMerchandise> vicinityGoods = mcClient.getVicinityGoods(commodityRequest); + if (vicinityGoods.size() > 0) { + for (PointsMerchandise vicinityGood : vicinityGoods) { + PointMallDetailsResponse.Goods commodity = new PointMallDetailsResponse.Goods(); + switch (vicinityGood.getType()) { + case 1: + commodity.setGoodId(vicinityGood.getId()); + commodity.setGoodName(vicinityGood.getName()); + commodity.setGoodImg(vicinityGood.getCover()); + commodity.setCondition(vicinityGood.getRedemptionMethod()); + if (vicinityGood.getRedemptionMethod() == 1) { + commodity.setIntegral(vicinityGood.getIntegral().intValue()); + } else { + commodity.setIntegral(vicinityGood.getIntegral().intValue()); + commodity.setAmount(vicinityGood.getCash()); + } + commodity.setBelongsType(vicinityGood.getUserPopulation()); + commodity.setGoodsType(1); + commodity.setNums(mcClient.getRedeemedQuantity(vicinityGood.getId())); + break; + case 2: + commodity.setGoodId(vicinityGood.getCoursePackageId()); + CoursePackage coursePackage = cpageClient.queryCoursePackageById(vicinityGood.getCoursePackageId()); + commodity.setGoodImg(coursePackage.getCoverDrawing()); + commodity.setGoodName(coursePackage.getName()); + commodity.setCondition(vicinityGood.getRedemptionMethod()); + if (vicinityGood.getRedemptionMethod() == 1) { + commodity.setIntegral(vicinityGood.getIntegral().intValue()); + } else { + commodity.setIntegral(vicinityGood.getIntegral().intValue()); + commodity.setAmount(vicinityGood.getCash()); + } + commodity.setBelongsType(vicinityGood.getUserPopulation()); + commodity.setGoodsType(2); + commodity.setNums(mcClient.getRedeemedQuantity(vicinityGood.getId())); + break; + case 3: + commodity.setGoodId(vicinityGood.getId()); + commodity.setGoodName(vicinityGood.getName()); + commodity.setGoodImg(vicinityGood.getCover()); + commodity.setCondition(vicinityGood.getRedemptionMethod()); + if (vicinityGood.getRedemptionMethod() == 1) { + commodity.setIntegral(vicinityGood.getIntegral().intValue()); + } else { + commodity.setIntegral(vicinityGood.getIntegral().intValue()); + commodity.setAmount(vicinityGood.getCash()); + } + commodity.setBelongsType(vicinityGood.getUserPopulation()); + commodity.setGoodsType(3); + commodity.setNums(mcClient.getRedeemedQuantity(vicinityGood.getId())); + break; + default: + break; + } + goods.add(commodity); + } + } + List<Coupon> allCoupons = ucponClient.getAllCoupons(commodityRequest); + if (allCoupons.size() > 0) { + for (Coupon allCoupon : allCoupons) { + PointMallDetailsResponse.Goods commodity = new PointMallDetailsResponse.Goods(); + commodity.setGoodId(allCoupon.getId()); + commodity.setGoodName(allCoupon.getName()); + commodity.setCondition(allCoupon.getRedemptionMethod()); + commodity.setGoodImg(allCoupon.getCover()); + if (allCoupon.getRedemptionMethod() == 1) { + commodity.setIntegral(allCoupon.getIntegral().intValue()); + } else { + commodity.setIntegral(allCoupon.getIntegral().intValue()); + commodity.setAmount(allCoupon.getCash()); + } + commodity.setBelongsType(allCoupon.getUserPopulation()); + commodity.setGoodsType(4); + commodity.setNums(ucponClient.getRedeemedQuantity(allCoupon.getId())); + goods.add(commodity); + } + } + if (StringUtils.hasText(request.getSearch())){ + goods = goods.stream() + .filter(merchandise -> merchandise.getGoodName().contains(request.getSearch())) + .collect(Collectors.toList()); + } + if (null != request.getRank()){ + switch (request.getRank()){ + case 1: + goods = goods.stream() + .sorted(Comparator.comparing(PointMallDetailsResponse.Goods::getIntegral).reversed()) + .collect(Collectors.toList()); + break; + case 2: + goods = goods.stream() + .sorted(Comparator.comparing(PointMallDetailsResponse.Goods::getIntegral)) + .collect(Collectors.toList()); + break; + case 3: + goods = goods.stream() + .sorted(Comparator.comparing(PointMallDetailsResponse.Goods::getNums).reversed()) + .collect(Collectors.toList()); + break; + default: + break; + } + + } + if (null != request.getGoodsType()){ + goods = goods.stream() + .filter(merchandise -> merchandise.getGoodsType().equals(request.getGoodsType())) + .collect(Collectors.toList()); + } + detailsResponse.setGoods(goods); + return detailsResponse; + } + + @Override + public ResultUtil uploadAppUserHeadImg(Integer appUserId, MultipartFile file, HttpServletRequest request) { + try { + String filePath = OssUploadUtil.ossUpload(request,file); + TAppUser tAppUser = this.baseMapper.selectById(appUserId); + tAppUser.setHeadImg(filePath); + this.baseMapper.updateById(tAppUser); + } catch (IOException e) { + ResultUtil.error("头像上传失败!"); + } + + return ResultUtil.success(); + } + } 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 4ab69ac..e55dcac 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 @@ -37,10 +37,8 @@ import com.dsh.account.model.vo.sourceDetail.CourseDetailsOfContinuationResp; import com.dsh.account.model.vo.sourceDetail.RecordTimeRequest; import com.dsh.account.service.TStudentService; -import com.dsh.account.util.DateTimeHelper; -import com.dsh.account.util.DateUtil; -import com.dsh.account.util.ResultUtil; -import com.dsh.account.util.ToolUtil; +import com.dsh.account.util.*; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -99,6 +97,10 @@ @Resource private ParticipantClient participantClient; + + + @Autowired + private PayMoneyUtil payMoneyUtil; @@ -374,35 +376,183 @@ @Override public ResultUtil renewClassPayment(Integer userIdFormRedis, ClasspaymentRequest request) { - // TODO: 2023/7/5 续课支付 - switch (request.getPayType()){ - case 1: - WeChatPayment(); - break; - case 2: - AlipayPayment(); - break; - case 3: - PlaypaiGoldPayment(); - break; - default: - break; + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); + + TCoursePackagePayment packagePayment = new TCoursePackagePayment(); + packagePayment.setCode(code); + packagePayment.setAppUserId(userIdFormRedis); + packagePayment.setStudentId(request.getStuId()); + packagePayment.setCoursePackageId(request.getLessonId()); + packagePayment.setPayType(request.getPayType()); + packagePayment.setAbsencesNumber(0); + packagePayment.setPayUserType(1); + packagePayment.setPayStatus(1); + packagePayment.setPayUserId(userIdFormRedis); + packagePayment.setStatus(1); + packagePayment.setState(1); + packagePayment.setInsertTime(new Date()); + couPayClient.savePaymentCoursePackage(packagePayment); + + try { + switch (request.getPayType()) { + case 1: + return WeChatPayment(code,request.getPayAmount()); + case 2: + return AlipayPayment(code,request.getPayAmount()); + case 3: + int i = PlaypaiGoldPayment(code,request); + switch (i){ + case 1: + return ResultUtil.success(); + case 2: + return ResultUtil.error("用户未登录!"); + case 3: + return ResultUtil.error("续课失败,玩湃币不足,请充值"); + case 4: + return ResultUtil.error("续课失败,请联系管理员"); + } + default: + break; + } + }catch (Exception e){ + ResultUtil.runErr(); } return ResultUtil.success(); } - public void WeChatPayment(){ - + public ResultUtil WeChatPayment(String code,BigDecimal amount) throws Exception { + ResultUtil weixinpay = payMoneyUtil.weixinpay("课包续费", "", code, amount.toString(), + "/base/coursePackage/wechatPaymentCallback", "APP", ""); + if(weixinpay.getCode() == 200){ + new Thread(new Runnable() { + @Override + public void run() { + try { + int num = 1; + int wait = 0; + while (num <= 10){ + int min = 5000; + wait += (min * num); + Thread.sleep(wait); + TCoursePackagePayment coursePackagePayment = couPayClient.getCoursePackagePaymentByCode(code); + if(coursePackagePayment.getPayStatus() == 2){ + break; + } + ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(code, ""); + if(resultUtil.getCode() == 200 && coursePackagePayment.getPayStatus() == 1){ + /** + * SUCCESS—支付成功, + * REFUND—转入退款, + * NOTPAY—未支付, + * CLOSED—已关闭, + * REVOKED—已撤销(刷卡支付), + * USERPAYING--用户支付中, + * PAYERROR--支付失败(其他原因,如银行返回失败) + */ + Map<String, String> data1 = resultUtil.getData(); + String s = data1.get("trade_state"); + String transaction_id = data1.get("transaction_id"); + if("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10){ + coursePackagePayment.setState(3); + couPayClient.delPaymentCoursePackage(coursePackagePayment.getId()); + break; + } + if("SUCCESS".equals(s)){ + coursePackagePayment.setPayStatus(2); + coursePackagePayment.setOrderNumber(transaction_id); + couPayClient.updatePaymentCoursePackage(coursePackagePayment); + break; + } + if("USERPAYING".equals(s)){ + num++; + } + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + }).start(); + } + return weixinpay; } - public void AlipayPayment(){ - + public ResultUtil AlipayPayment(String code,BigDecimal amount){ + ResultUtil alipay = payMoneyUtil.alipay("课包续费", "", "", code, amount.toString(), + "/base/coursePackage/alipayPaymentCallback"); + if(alipay.getCode() == 200){ + new Thread(new Runnable() { + @Override + public void run() { + try { + int num = 1; + int wait = 0; + while (num <= 10){ + int min = 5000; + wait += (min * num); + Thread.sleep(wait); + TCoursePackagePayment coursePackagePayment = couPayClient.getCoursePackagePaymentByCode(code); + if(coursePackagePayment.getPayStatus() == 2){ + break; + } + ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryALIOrder(code); + if(resultUtil.getCode() == 200 && coursePackagePayment.getPayStatus() == 1){ + /** + * WAIT_BUYER_PAY(交易创建,等待买家付款)、 + * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、 + * TRADE_SUCCESS(交易支付成功)、 + * TRADE_FINISHED(交易结束,不可退款) + */ + Map<String, String> data1 = resultUtil.getData(); + String s = data1.get("tradeStatus"); + String tradeNo = data1.get("tradeNo"); + if("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10){ + coursePackagePayment.setState(3); + couPayClient.delPaymentCoursePackage(coursePackagePayment.getId()); + break; + } + if("TRADE_SUCCESS".equals(s)){ + coursePackagePayment.setPayStatus(2); + coursePackagePayment.setOrderNumber(tradeNo); + couPayClient.updatePaymentCoursePackage(coursePackagePayment); + break; + } + if("WAIT_BUYER_PAY".equals(s)){ + num++; + } + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + }).start(); + } + return alipay; } - public void PlaypaiGoldPayment(){ - + public int PlaypaiGoldPayment(String code,ClasspaymentRequest request){ + PlayPaiGoldCoursePackage paiGoldCoursePackage = new PlayPaiGoldCoursePackage(); + paiGoldCoursePackage.setCoursePackageId(request.getLessonId()); + paiGoldCoursePackage.setStuId(request.getStuId()); + paiGoldCoursePackage.setCoursePayConfigId(request.getCourseConfigId()); + paiGoldCoursePackage.setCode(code); + return couPayClient.paymentWanpaiRenewCourse(paiGoldCoursePackage); } + @Override + public ResultUtil insertVipPaymentCallback(String code, String orderNumber) { + TCoursePackagePayment coursePackagePayment = couPayClient.getCoursePackagePaymentByCode(code); + if(coursePackagePayment.getPayStatus() != 1){ + return ResultUtil.success(); + } + coursePackagePayment.setPayStatus(2); + coursePackagePayment.setOrderNumber(orderNumber); + couPayClient.updatePaymentCoursePackage(coursePackagePayment); + return ResultUtil.success(); + } + } diff --git a/cloud-server-account/src/main/java/com/dsh/account/util/OssUploadUtil.java b/cloud-server-account/src/main/java/com/dsh/account/util/OssUploadUtil.java new file mode 100644 index 0000000..5d7b3a7 --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/util/OssUploadUtil.java @@ -0,0 +1,39 @@ +package com.dsh.account.util; + +import com.aliyun.oss.OSSClient; +import com.aliyun.oss.model.ObjectMetadata; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.io.InputStream; +import java.util.UUID; + +public class OssUploadUtil { + //OSS图片访问域名 + public static String oss_domain = "https://newok.oss-cn-shenzhen.aliyuncs.com/"; + public static String accessKeyId = "LTAI4G9Zez9H4B36vakPXGy4"; + public static String accessKeySecret = "BOVPUeZndKVbrPOq6Ef5j6oiydB3XZ"; + public static String bucketName="newok"; + public static String endpoint = "oss-cn-shenzhen.aliyuncs.com"; + + public static OSSClient ossClient = new OSSClient(endpoint, accessKeyId,accessKeySecret); + + public static String ossUpload(HttpServletRequest request, MultipartFile file) throws IOException{ + //CommonsMultipartFile file = (CommonsMultipartFile)multipartFile; + String fileName = ""; + if(file!=null && !"".equals(file.getOriginalFilename()) && file.getOriginalFilename()!=null){ + InputStream content = file.getInputStream();//获得指定文件的输入流 + ObjectMetadata meta = new ObjectMetadata();// 创建上传Object的Metadata + meta.setContentLength(file.getSize()); // 必须设置ContentLength + String originalFilename = file.getOriginalFilename(); + fileName = UUID.randomUUID().toString().replaceAll("-","") + originalFilename.subSequence(originalFilename.lastIndexOf("."), originalFilename.length()); + ossClient.putObject(bucketName,"img/"+fileName,content,meta);// 上传Object. + if(fileName != null && !"".equals(fileName)){ + System.out.println(fileName); + fileName = oss_domain+"img/"+fileName; + } + } + return fileName; + } +} diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java index c1fceaf..a3feebf 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/CouponController.java @@ -1,11 +1,15 @@ package com.dsh.activity.controller; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.dsh.activity.entity.Coupon; +import com.dsh.activity.entity.UserCoupon; import com.dsh.activity.model.CouponListVo; +import com.dsh.activity.model.request.CommodityRequest; import com.dsh.activity.model.request.CouponPackageReq; import com.dsh.activity.model.response.CouponPackageResp; import com.dsh.activity.service.ICouponService; import com.dsh.activity.service.UserCouponService; +import com.dsh.activity.util.GDMapGeocodingUtil; import com.dsh.activity.util.ResultUtil; import com.dsh.activity.util.TokenUtil; import io.swagger.annotations.ApiImplicitParam; @@ -14,7 +18,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.Iterator; import java.util.List; +import java.util.Map; +import java.util.Objects; /** * @author zhibing.pu @@ -32,6 +39,9 @@ @Autowired private UserCouponService ucService; + + @Autowired + private GDMapGeocodingUtil gdMapGeocodingUtil; @@ -103,4 +113,46 @@ } } + + @PostMapping("/base/coupon/getAllCoupons") + public List<Coupon> getAllCoupons(@RequestBody CommodityRequest request){ + String provinceCode = ""; + String cityCode = ""; + try { + Map<String, String> geocode = gdMapGeocodingUtil.geocode(request.getLon(), request.getLat()); + provinceCode = geocode.get("provinceCode"); + cityCode = geocode.get("cityCode"); + }catch (Exception e){ + e.printStackTrace(); + } + try { + Integer userAppId = tokenUtil.getUserIdFormRedis(); + List<UserCoupon> list = ucService.list(new QueryWrapper<UserCoupon>() + .eq("userId",userAppId )); + List<Coupon> couponList = couponService.list(new QueryWrapper<Coupon>() + .eq("auditStatus",2) + .eq("state",1) + .eq("status",2)); + if (couponList.size() > 0 ){ + Iterator<Coupon> iterator = couponList.iterator(); + while (iterator.hasNext()) { + Coupon merchandise = iterator.next(); + if (merchandise.getUseScope() == 2 && (!Objects.equals(merchandise.getCityCode(), cityCode) && !Objects.equals(merchandise.getProvinceCode(), provinceCode))) { + iterator.remove(); // 移除符合条件的商品 + } + } + } + return couponList; + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + @PostMapping("/base/coupon/getRedeemedNums") + public int getRedeemedQuantity(@RequestBody Integer id){ + return ucService.count(new QueryWrapper<UserCoupon>() + .eq("couponId",id)); + } + } 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 9e61d1e..e326ec9 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 @@ -3,16 +3,19 @@ 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.model.request.CommodityRequest; import com.dsh.activity.service.PointsMerchandiseService; +import com.dsh.activity.service.UserPointsMerchandiseService; +import com.dsh.activity.util.GDMapGeocodingUtil; 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.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; @RestController @RequestMapping("") @@ -21,6 +24,12 @@ @Autowired private PointsMerchandiseService pmdsService; + + @Autowired + private GDMapGeocodingUtil gdMapGeocodingUtil; + + @Autowired + private UserPointsMerchandiseService upmseService; @@ -43,4 +52,37 @@ return commodity; } + + @PostMapping("/base/pointMerchars/getCommoditys") + public List<PointsMerchandise> getVicinityGoods(@RequestBody CommodityRequest request){ + String provinceCode = ""; + String cityCode = ""; + try { + Map<String, String> geocode = gdMapGeocodingUtil.geocode(request.getLon(), request.getLat()); + provinceCode = geocode.get("provinceCode"); + cityCode = geocode.get("cityCode"); + }catch (Exception e){ + e.printStackTrace(); + } + + List<PointsMerchandise> list = pmdsService.list(new QueryWrapper<PointsMerchandise>() + .eq("state", 1)); + if (list.size() > 0 ){ + Iterator<PointsMerchandise> iterator = list.iterator(); + while (iterator.hasNext()) { + PointsMerchandise merchandise = iterator.next(); + if (merchandise.getUseScope() == 2 && (!Objects.equals(merchandise.getCityCode(), cityCode) && !Objects.equals(merchandise.getProvinceCode(), provinceCode))) { + iterator.remove(); // 移除符合条件的商品 + } + } + } + return list; + } + + @PostMapping("/base/pointMerchars/getRedeemedNums") + public int getRedeemedQuantity(@RequestBody Integer goodId){ + return upmseService.count(new QueryWrapper<UserPointsMerchandise>() + .eq("pointsMerchandiseId",goodId)); + } + } diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/entity/Coupon.java b/cloud-server-activity/src/main/java/com/dsh/activity/entity/Coupon.java index fe57f32..02e3e18 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/entity/Coupon.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/entity/Coupon.java @@ -158,6 +158,16 @@ @TableField("insertTime") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date insertTime; + /** + * 封面图 + */ + @TableField("cover") + private String cover; + /** + * 图片 + */ + @TableField("productImages") + private String productImages; @Override 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 41d7f40..fe612bd 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 @@ -1,9 +1,12 @@ package com.dsh.activity.feignclient; +import com.dsh.activity.entity.PointsMerchandise; import com.dsh.activity.feignclient.model.IntegralCommodity; +import com.dsh.activity.model.request.CommodityRequest; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import java.util.List; @@ -13,5 +16,10 @@ @PostMapping("/base/pointMerchars/convertGoods") public List<IntegralCommodity> getConvertibleGoods(); + @PostMapping("/base/pointMerchars/getCommoditys") + public List<PointsMerchandise> getVicinityGoods(@RequestBody CommodityRequest request); + + @PostMapping("/base/pointMerchars/getRedeemedNums") + public int getRedeemedQuantity(@RequestBody Integer goodId); } diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java index c13d4af..496b9c8 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java @@ -1,8 +1,11 @@ package com.dsh.activity.feignclient; +import com.dsh.activity.entity.Coupon; import com.dsh.activity.feignclient.model.CouponStuAvailableVo; +import com.dsh.activity.model.request.CommodityRequest; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @@ -14,4 +17,11 @@ @PostMapping("/base/userConpon/getStuOfConpons") public List<CouponStuAvailableVo> queryUserWithConponList(@RequestParam("appUserId") Integer appUserId); + @PostMapping("/base/coupon/getAllCoupons") + public List<Coupon> getAllCoupons(@RequestBody CommodityRequest request); + + + @PostMapping("/base/coupon/getRedeemedNums") + public int getRedeemedQuantity(@RequestBody Integer id); + } diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/CoursePackage.java b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/CoursePackage.java index 3d6097c..1b31933 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/CoursePackage.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/feignclient/course/model/CoursePackage.java @@ -81,7 +81,7 @@ */ private Integer sort; /** - * 支付方式(1=现金,2=玩湃币) + * 支付方式(1=微信 2=支付宝 3=玩湃币) */ private Integer payType; /** diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/model/request/CommodityRequest.java b/cloud-server-activity/src/main/java/com/dsh/activity/model/request/CommodityRequest.java new file mode 100644 index 0000000..e98eb6d --- /dev/null +++ b/cloud-server-activity/src/main/java/com/dsh/activity/model/request/CommodityRequest.java @@ -0,0 +1,18 @@ +package com.dsh.activity.model.request; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class CommodityRequest { + + @ApiModelProperty(value = "经度") + private String lon; + + @ApiModelProperty(value = "纬度") + private String lat; + + + +} diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java b/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java index dfbb732..2ba5aa7 100644 --- a/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java +++ b/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java @@ -63,8 +63,38 @@ private IPaymentCompetitionService paymentCompetitionService; + @PostMapping("/base/competition/getPayedCompetitions") + public List<PaymentCompetition> getAllCompetitionPayRecord(@RequestBody Integer appUserId){ + List<Integer> integers = new ArrayList<>(); + integers.add(1); + integers.add(2); + return paymentCompetitionService.list(new QueryWrapper<PaymentCompetition>() + .in("payType",integers) + .eq("appUserId",appUserId) + .eq("payStatus",2)); + } + @PostMapping("/base/competition/getCancelOrderOfUserPay") + public List<PaymentCompetition> getCancelOrderOfUserPayRecord(@RequestBody Integer appUserId){ + List<Integer> integers = new ArrayList<>(); + integers.add(1); + integers.add(2); + return paymentCompetitionService.list(new QueryWrapper<PaymentCompetition>() + .in("payType",integers) + .eq("appUserId",appUserId) + .eq("payStatus",3)); + } + + + @PostMapping("/base/competition/getPlayPaiFGoldPayRecord") + public List<PaymentCompetition> getPlayPaiFGoldPayRecord(@RequestBody Integer appUserId){ + return paymentCompetitionService.list(new QueryWrapper<PaymentCompetition>() + .eq("payType",3) + .eq("appUserId",appUserId) + .eq("payStatus",3)); + } + @PostMapping("/base/competition/getCompetitionsDetails") diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/feignclient/DeductionCompetitionsClient.java b/cloud-server-competition/src/main/java/com/dsh/competition/feignclient/DeductionCompetitionsClient.java index e23d5b5..c7292bb 100644 --- a/cloud-server-competition/src/main/java/com/dsh/competition/feignclient/DeductionCompetitionsClient.java +++ b/cloud-server-competition/src/main/java/com/dsh/competition/feignclient/DeductionCompetitionsClient.java @@ -1,6 +1,7 @@ package com.dsh.competition.feignclient; +import com.dsh.competition.entity.PaymentCompetition; import com.dsh.competition.feignclient.model.GetStuSourseList; import com.dsh.competition.feignclient.model.PurchaseRecordVo; import org.springframework.cloud.openfeign.FeignClient; @@ -15,4 +16,13 @@ @PostMapping("/base/competition/getCompetitionsDetails") public List<PurchaseRecordVo> getStuSourseList(@RequestBody GetStuSourseList sourseList); + @PostMapping("/base/competition/getPayedCompetitions") + List<PaymentCompetition> getAllCompetitionPayRecord(@RequestBody Integer appUserId); + + @PostMapping("/base/competition/getCancelOrderOfUserPay") + public List<PaymentCompetition> getCancelOrderOfUserPayRecord(@RequestBody Integer appUserId); + + @PostMapping("/base/competition/getPlayPaiFGoldPayRecord") + List<PaymentCompetition> getPlayPaiFGoldPayRecord(@RequestBody Integer appUserId); + } 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 90843b4..2159d03 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 @@ -56,7 +56,9 @@ @ApiOperation(value = "本周福利-限时折扣列表", tags = {"APP-使用福利"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), - @ApiImplicitParam(name = "discountType",value = "默认显示 限时折扣 (1限时折扣 2赠送课时)") + @ApiImplicitParam(name = "discountType",value = "默认显示 限时折扣 (1限时折扣 2赠送课时)",dataType = "int"), + @ApiImplicitParam(name = "lon",value = "经度",dataType = "String"), + @ApiImplicitParam(name = "lat",value = "纬度",dataType = "String"), }) public ResultUtil<WeekLimitedResponse> thisWeeksBenefitList(Integer discountType,String lon,String lat){ try { 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 1b0d7a6..574528c 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 @@ -2,29 +2,20 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.dsh.course.entity.TCoursePackage; -import com.dsh.course.entity.TCoursePackageDiscount; -import com.dsh.course.entity.TCoursePackagePayment; -import com.dsh.course.entity.TCoursePackageType; import com.dsh.course.entity.*; -import com.dsh.course.feignclient.account.StudentClient; +import com.dsh.course.feignclient.account.AppUserClient; +import com.dsh.course.feignclient.account.model.AppUser; import com.dsh.course.feignclient.model.*; import com.dsh.course.model.BaseVo; import com.dsh.course.model.dto.DiscountJsonDto; import com.dsh.course.model.vo.CourseDetailRequest; import com.dsh.course.model.vo.RegisterCourseVo; -import com.dsh.course.model.vo.request.ClasspaymentRequest; -import com.dsh.course.model.vo.request.CourseOfAfterRequest; -import com.dsh.course.model.vo.request.CourseWithDetailsRequest; -import com.dsh.course.model.vo.request.UpdateCourseVideoStatusRequest; +import com.dsh.course.model.vo.request.*; import com.dsh.course.model.vo.response.AppUserVideoResponse; import com.dsh.course.model.vo.response.CourseDetailsResponse; import com.dsh.course.model.vo.response.CourseOfVideoResponse; import com.dsh.course.service.*; -import com.dsh.course.util.DateUtil; -import com.dsh.course.util.ResultUtil; -import com.dsh.course.util.StrUtils; -import com.dsh.course.util.TokenUtil; +import com.dsh.course.util.*; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.annotations.Api; @@ -72,6 +63,17 @@ private CancelledClassesService cacService; @Autowired + private ICoursePackagePaymentConfigService icppcService; + + @Autowired + private UserVideoDetailsService uvdsService; + + @Autowired + private TCourseService tcService; + + + + @Autowired private TCoursePackageTypeService coursePackageTypeService; @Autowired @@ -79,6 +81,9 @@ @Autowired private CancelledClassesService cancelledClassesService; + + @Autowired + private AppUserClient appuClient; private final SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm"); @@ -304,11 +309,23 @@ @PostMapping("/base/coursePack/afterCourseTwos") public List<AfterVideoVo> getAfterCourseTwos(@RequestParam("appUserId") Integer appUserId){ List<AfterVideoVo> videoVos = new ArrayList<>(); - List<TCoursePackagePayment> tCoursePackagePayments = packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>() - .eq("appUserId", appUserId)); - List<Integer> coursePackageIds = tCoursePackagePayments.stream().map(TCoursePackagePayment::getCoursePackageId).collect(Collectors.toList()); -// List<PostCourseVideo> videoList = pcvService.queryAllVideoNoneShow(coursePackageIds); - // TODO: 2023/7/6 两个课后视频 + List<UserVideoDetails> list = uvdsService.list(new QueryWrapper<UserVideoDetails>() + .eq("appUserId",appUserId) + .eq("state",1)); + if (list.size() > 0 ){ + List<Integer> courseIds = list.stream().map(UserVideoDetails::getCourseId).collect(Collectors.toList()); + List<TCourse> courseList = tcService.list(new QueryWrapper<TCourse>() + .in("id",courseIds) + .eq("type",1) + .eq("state",1) + .last("ORDER BY insertTime desc LIMIT 2")); + for (TCourse tCourse : courseList) { + AfterVideoVo videoVo = new AfterVideoVo(); + videoVo.setCourseId(tCourse.getId()); + videoVo.setCourseUrl(tCourse.getCourseVideo()); + videoVos.add(videoVo); + } + } return videoVos; } @@ -317,6 +334,15 @@ return packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>() .eq("appUserId",appUserId) .eq("payType",3) + .eq("payStatus",2) + .eq("state",1)); + } + + @PostMapping("/base/coursePack/allAmountPayRecordOfUser") + public List<TCoursePackagePayment> getAmountPayRecord(@RequestBody Integer appUserId){ + return packagePaymentService.list(new QueryWrapper<TCoursePackagePayment>() + .eq("appUserId",appUserId) + .notIn("payType",3) .eq("payStatus",2) .eq("state",1)); } @@ -478,14 +504,15 @@ @ApiOperation(value = "已报名课程详情", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), + @ApiImplicitParam(name = "coursePayId" ,value = "课包记录id",dataType = "long"), }) - public ResultUtil<CourseDetailsResponse> getRegisteredData( Integer coursePackageId){ + public ResultUtil<CourseDetailsResponse> getRegisteredData( Integer coursePayId){ try { Integer appUserId = tokenUtil.getUserIdFormRedis(); if(null == appUserId){ return ResultUtil.tokenErr(); } - return ResultUtil.success(packagePaymentService.queryRegisteredCourseDetails(coursePackageId,appUserId)); + return ResultUtil.success(packagePaymentService.queryRegisteredCourseDetails(coursePayId,appUserId)); }catch (Exception e){ return ResultUtil.runErr(); } @@ -605,4 +632,61 @@ e.printStackTrace(); } } + + + /** + * 课包续费玩湃币支付 + * @param + */ + @PostMapping("/coursePackagePayment/courseRenewPlayPaiPay") + public int paymentWanpaiRenewCourse(@RequestBody PlayPaiGoldCoursePackage coursePackage){ + try { + Integer userIdFormRedis = tokenUtil.getUserIdFormRedis(); + if (null == userIdFormRedis){ + return 2; + } + CoursePackagePaymentConfig paymentConfig = icppcService.getById(coursePackage.getCoursePayConfigId()); + AppUser appUser = appuClient.queryAppUser(userIdFormRedis); + if (appUser.getPlayPaiCoins() < paymentConfig.getPlayPaiCoin()){ + return 3; + } + TCoursePackagePayment packagePayment = packagePaymentService.getOne(new QueryWrapper<TCoursePackagePayment>() + .eq("code",coursePackage.getCode() )); + packagePayment.setPayStatus(2); + packagePayment.setPayUserId(userIdFormRedis); + packagePayment.setClassHours(paymentConfig.getClassHours()); + packagePayment.setPlayPaiCoin(paymentConfig.getPlayPaiCoin()); + packagePayment.setTotalClassHours(paymentConfig.getClassHours()); + packagePayment.setLaveClassHours(paymentConfig.getClassHours()); + packagePaymentService.updateById(packagePayment); + + appUser.setPlayPaiCoins(appUser.getPlayPaiCoins()-paymentConfig.getPlayPaiCoin()); + appuClient.updateAppUser(appUser); + } catch (Exception e) { + return 4; + } + return 1; + } + + @PostMapping("/base/coursePack/getPaymentCoursePackage") + public TCoursePackagePayment getCoursePackagePaymentByCode(@RequestBody String code){ + return packagePaymentService.getOne(new QueryWrapper<TCoursePackagePayment>() + .eq("code",code)); + } + + @PostMapping("/base/coursePack/delPaymentCoursePackage") + public boolean delPaymentCoursePackage(@RequestBody Integer payId){ + return packagePaymentService.removeById(payId); + } + @PostMapping("/base/coursePack/updatePaymentCoursePackage") + public boolean updatePaymentCoursePackage(@RequestBody TCoursePackagePayment packagePayment){ + return packagePaymentService.update(packagePayment,new QueryWrapper<TCoursePackagePayment>() + .eq("id",packagePayment.getId())); + } + + @PostMapping("/base/coursePack/savePaymentCoursePackage") + public boolean savePaymentCoursePackage(@RequestBody TCoursePackagePayment packagePayment){ + return packagePaymentService.save(packagePayment); + } + } 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 68b1d06..d081599 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 @@ -3,6 +3,7 @@ import com.dsh.course.entity.TCoursePackagePayment; import com.dsh.course.feignclient.model.*; +import com.dsh.course.model.vo.request.PlayPaiGoldCoursePackage; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -35,4 +36,26 @@ @PostMapping("/base/coursePack/allPaymentCourseList") public List<TCoursePackagePayment> getAppuserCourseList(@RequestBody Integer appUserId); + + + @PostMapping("/coursePackagePayment/courseRenewPlayPaiPay") + public int paymentWanpaiRenewCourse(@RequestBody PlayPaiGoldCoursePackage coursePackage); + + @PostMapping("/base/coursePack/getPaymentCoursePackage") + public TCoursePackagePayment getCoursePackagePaymentByCode(@RequestBody String payId); + + + @PostMapping("/base/coursePack/delPaymentCoursePackage") + public boolean delPaymentCoursePackage(@RequestBody Integer payId); + + @PostMapping("/base/coursePack/updatePaymentCoursePackage") + public boolean updatePaymentCoursePackage(@RequestBody TCoursePackagePayment packagePayment); + + + @PostMapping("/base/coursePack/savePaymentCoursePackage") + public boolean savePaymentCoursePackage(@RequestBody TCoursePackagePayment packagePayment); + + @PostMapping("/base/coursePack/allAmountPayRecordOfUser") + public List<TCoursePackagePayment> getAmountPayRecord(@RequestBody Integer appUserId); + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/vo/RegisterCourseVo.java b/cloud-server-course/src/main/java/com/dsh/course/model/vo/RegisterCourseVo.java index c9dc4d5..6ad8055 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/model/vo/RegisterCourseVo.java +++ b/cloud-server-course/src/main/java/com/dsh/course/model/vo/RegisterCourseVo.java @@ -10,6 +10,9 @@ @ApiModelProperty(value = "课包id") private Integer coursePackageId; + @ApiModelProperty(value = "课包记录id") + private Long coursePayId; + @ApiModelProperty(value = "课包封面图") private String packageImg; diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/ClasspaymentRequest.java b/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/ClasspaymentRequest.java index e8cada9..f56ccc1 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/ClasspaymentRequest.java +++ b/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/ClasspaymentRequest.java @@ -22,8 +22,8 @@ @ApiModelProperty(value = "优惠券Id") private Integer conponId; - @ApiModelProperty(value = "课时id") - private Long courseConfigId; + @ApiModelProperty(value = "支付记录id") + private Long coursePayId; } diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/PlayPaiGoldCoursePackage.java b/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/PlayPaiGoldCoursePackage.java new file mode 100644 index 0000000..37cd6cc --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/vo/request/PlayPaiGoldCoursePackage.java @@ -0,0 +1,22 @@ +package com.dsh.course.model.vo.request; + + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class PlayPaiGoldCoursePackage { + + @ApiModelProperty(value = "支付配置id") + Integer coursePayConfigId; + + @ApiModelProperty(value = "学员id") + Integer stuId; + + @ApiModelProperty(value = "课包id") + Integer coursePackageId; + + @ApiModelProperty(value = "课包id") + String code; + +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseDetailsResponse.java b/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseDetailsResponse.java index 820d95d..d98b2db 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseDetailsResponse.java +++ b/cloud-server-course/src/main/java/com/dsh/course/model/vo/response/CourseDetailsResponse.java @@ -10,6 +10,9 @@ @ApiModelProperty(value = "课包id") private Integer coursePackageId; + @ApiModelProperty(value = "支付记录id") + private Long coursePayId; + @ApiModelProperty(value = "课包封面图") private String coverDrawing; 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 35a855e..8d57092 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 @@ -67,11 +67,11 @@ /** * 获取已报名课包详情 - * @param coursePackageId + * @param coursePayId * @param appUserId * @return */ - CourseDetailsResponse queryRegisteredCourseDetails(Integer coursePackageId, Integer appUserId); + CourseDetailsResponse queryRegisteredCourseDetails(Integer coursePayId, Integer appUserId); 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 e147946..93feb54 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 @@ -6,7 +6,9 @@ import com.dsh.course.feignclient.account.CoachClient; import com.dsh.course.feignclient.account.model.Coach; import com.dsh.course.feignclient.activity.BenefitVideoClient; +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.other.StoreClient; import com.dsh.course.feignclient.other.model.Store; import com.dsh.course.mapper.*; @@ -20,8 +22,10 @@ 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.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; @@ -29,6 +33,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; +import java.text.SimpleDateFormat; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -74,6 +79,11 @@ @Resource private TCoursePackageDiscountMapper tcpdMapper; + @Resource + private CouponClient client; + + @Autowired + private PayMoneyUtil payMoneyUtil; /** @@ -178,6 +188,7 @@ TCoursePackage coursePackage = tcpmapper.selectById(tCoursePackagePayment.getCoursePackageId()); Store store = stoClient.queryStoreById(coursePackage.getStoreId()); RegisterCourseVo registerCourseVo = new RegisterCourseVo(); + registerCourseVo.setCoursePayId(tCoursePackagePayment.getId()); registerCourseVo.setCoursePackageId(tCoursePackagePayment.getCoursePackageId()); registerCourseVo.setPackageImg(coursePackage.getCoverDrawing()); String storeAndCourse = coursePackage.getName()+"("+ store.getName() +")"; @@ -197,18 +208,16 @@ } @Override - public CourseDetailsResponse queryRegisteredCourseDetails(Integer coursePackageId, Integer appUserId) { + public CourseDetailsResponse queryRegisteredCourseDetails(Integer coursePayId, Integer appUserId) { CourseDetailsResponse response = new CourseDetailsResponse(); - List<TCoursePackagePayment> tCoursePackagePayments = this.list(new QueryWrapper<TCoursePackagePayment>() - .eq("coursePackageId",coursePackageId ) - .eq("appUserId",appUserId)); + TCoursePackagePayment tCoursePackagePayment = this.baseMapper.selectById(coursePayId); - if (tCoursePackagePayments.size() > 0){ - TCoursePackagePayment tCoursePackagePayment = tCoursePackagePayments.get(0); + if (null != tCoursePackagePayment){ TCoursePackage coursePackage = tcpmapper.selectById(tCoursePackagePayment.getCoursePackageId()); response.setCoursePackageId(tCoursePackagePayment.getCoursePackageId()); response.setCoverDrawing(coursePackage.getCoverDrawing()); response.setCoursePackageName(coursePackage.getName()); + response.setCoursePayId(tCoursePackagePayment.getId()); List<Integer> integers = StrUtils.dealStrToList(coursePackage.getClassWeeks()); if (integers.size() > 0){ StringBuilder courWeeks = new StringBuilder("每"); @@ -282,16 +291,39 @@ @Override public ResultUtil ContinuationOrpaymentCourse(Integer userIdFormRedis, ClasspaymentRequest request) { - // TODO: 2023/7/5 报名课程支付 + TCoursePackagePayment tCoursePackagePayment = this.baseMapper.selectById(request.getCoursePayId()); + String code = ""; + if (tCoursePackagePayment.getPayStatus() == 1){ + code = tCoursePackagePayment.getCode(); + }else { + TCoursePackagePayment newPayment = new TCoursePackagePayment(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + newPayment.setCode(sdf.format(new Date()) + UUIDUtil.getNumberRandom(5)); + newPayment.setAppUserId(userIdFormRedis); + newPayment.setStudentId(request.getStuId()); + newPayment.setCoursePackageId(request.getLessonId()); + newPayment.setClassHours(tCoursePackagePayment.getClassHours()); + newPayment.setOriginalPrice(tCoursePackagePayment.getOriginalPrice()); + newPayment.setTotalClassHours(tCoursePackagePayment.getTotalClassHours()); + newPayment.setLaveClassHours(tCoursePackagePayment.getTotalClassHours()); + newPayment.setAbsencesNumber(0); + newPayment.setPayUserType(1); + newPayment.setPayStatus(1); + newPayment.setStatus(1); + newPayment.setState(1); + newPayment.setInsertTime(new Date()); + this.baseMapper.insert(newPayment); + code = newPayment.getCode(); + } switch (request.getPayType()){ case 1: - WeChatPayment(); + WeChatPayment(code,request); break; case 2: - AlipayPayment(); + AlipayPayment(code,request); break; case 3: - PlaypaiGoldPayment(); + PlaypaiGoldPayment(code,request); break; default: break; @@ -300,15 +332,72 @@ } - public void WeChatPayment(){ + public void WeChatPayment(String code, ClasspaymentRequest request){ } - public void AlipayPayment(){ + public ResultUtil AlipayPayment(String code, ClasspaymentRequest request){ + BigDecimal amount = BigDecimal.ZERO; + if (request.getUseConpon() == 1){ + Coupon coupon = client.queryCouponById(request.getConponId()); + // TODO: 2023/7/11 课包购买的微信支付 + } + + ResultUtil alipay = payMoneyUtil.alipay("课包购买", "", "", code, amount.toString(), + "/base/coursePackage/alipayNewPaymentCallback"); +// if(alipay.getCode() == 200){ +// new Thread(new Runnable() { +// @Override +// public void run() { +// try { +// int num = 1; +// int wait = 0; +// while (num <= 10){ +// int min = 5000; +// wait += (min * num); +// Thread.sleep(wait); +// TCoursePackagePayment coursePackagePayment = couPayClient.getCoursePackagePaymentByCode(code); +// if(coursePackagePayment.getPayStatus() == 2){ +// break; +// } +// ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryALIOrder(code); +// if(resultUtil.getCode() == 200 && coursePackagePayment.getPayStatus() == 1){ +// /** +// * WAIT_BUYER_PAY(交易创建,等待买家付款)、 +// * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、 +// * TRADE_SUCCESS(交易支付成功)、 +// * TRADE_FINISHED(交易结束,不可退款) +// */ +// Map<String, String> data1 = resultUtil.getData(); +// String s = data1.get("tradeStatus"); +// String tradeNo = data1.get("tradeNo"); +// if("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10){ +// coursePackagePayment.setState(3); +// couPayClient.delPaymentCoursePackage(coursePackagePayment.getId()); +// break; +// } +// if("TRADE_SUCCESS".equals(s)){ +// coursePackagePayment.setPayStatus(2); +// coursePackagePayment.setOrderNumber(tradeNo); +// couPayClient.updatePaymentCoursePackage(coursePackagePayment); +// break; +// } +// if("WAIT_BUYER_PAY".equals(s)){ +// num++; +// } +// } +// } +// }catch (Exception e){ +// e.printStackTrace(); +// } +// } +// }).start(); +// } + return alipay; } - public void PlaypaiGoldPayment(){ + public void PlaypaiGoldPayment(String code, ClasspaymentRequest request){ } -- Gitblit v1.7.1