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(); } } } 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(); } 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); } 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); } cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/CommodityRequest.java
New file @@ -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; } cloud-server-account/src/main/java/com/dsh/account/feignclient/activity/model/PointsMerchandise.java
New file @@ -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; } 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); } cloud-server-account/src/main/java/com/dsh/account/feignclient/competition/model/PaymentCompetition.java
New file @@ -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; } cloud-server-account/src/main/java/com/dsh/account/feignclient/course/CoursePackageClient.java
New file @@ -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); } 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); } cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/CoursePackage.java
New file @@ -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; } cloud-server-account/src/main/java/com/dsh/account/feignclient/course/model/PlayPaiGoldCoursePackage.java
New file @@ -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; } 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; } cloud-server-account/src/main/java/com/dsh/account/model/dto/Coupon.java
New file @@ -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; } 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; 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 = "玩湃币") 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; } } 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); } 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); } 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); } 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; } } 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(); } } 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(); } } cloud-server-account/src/main/java/com/dsh/account/util/OssUploadUtil.java
New file @@ -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; } } 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)); } } 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)); } } 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 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); } 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); } 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; /** cloud-server-activity/src/main/java/com/dsh/activity/model/request/CommodityRequest.java
New file @@ -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; } 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") 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); } 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 { 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); } } 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); } 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; 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; } cloud-server-course/src/main/java/com/dsh/course/model/vo/request/PlayPaiGoldCoursePackage.java
New file @@ -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; } 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; 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); 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){ }