cloud-server-account/src/main/java/com/dsh/account/feignclient/other/SiteClient.java
New file @@ -0,0 +1,22 @@ package com.dsh.account.feignclient.other; import com.dsh.account.feignclient.other.model.SiteBooking; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import java.util.List; @FeignClient("mb-cloud-other") public interface SiteClient { @PostMapping("/base/site/queryPaymentSiteDetail") List<SiteBooking> getAllSiteBookingList(@RequestBody Integer appUserId); @PostMapping("/base/site/queryPlaypaiGoldSiteDetail") List<SiteBooking> wanpaiGoldSiteBookingList(@RequestBody Integer appUserId); } cloud-server-account/src/main/java/com/dsh/account/feignclient/other/model/SiteBooking.java
New file @@ -0,0 +1,125 @@ package com.dsh.account.feignclient.other.model; import lombok.Data; import java.util.Date; /** * @author zhibing.pu * @date 2023/7/13 16:11 */ @Data public class SiteBooking { /** * 主键 */ private Integer id; /** * 业务流水号 */ private String orderNo; /** * 省 */ private String province; /** * 省编号 */ private String provinceCode; /** * 市名称 */ private String city; /** * 市编号 */ private String cityCode; /** * 门店id */ private Integer storeId; /** * 场地id */ private Integer siteId; /** * 用户id */ private Integer appUserId; /** * 预约时段 */ private String times; /** * 预约开始时间 */ private Date startTime; /** * 预约结束 */ private Date endTime; /** * 预约人 */ private String booker; /** * 联系方式 */ private String phone; /** * 支付方式(1=微信,2=支付宝,3=玩湃比,4=手动支付) */ private Integer payType; /** * 支付时间 */ private Date payTime; /** * 支付金额 */ private Double payMoney; /** * 优惠券id */ private Long userCouponId; /** * 状态(0=待支付,1=待核销,2=已到店,3=已完成,4=已过期,5=已取消) */ private Integer status; /** * 第三方支付流水号 */ private String payOrderNo; /** * 手动支付操作用户id */ private Integer payUserId; /** * 取消用户id */ private Integer cancelUserId; /** * 取消凭证 */ private String voucher; /** * 取消备注 */ private String remark; /** * 取消时间 */ private Date cancelTime; /** * 第三方取消退款流水号 */ private String refundOrderNo; /** * 状态(1=正常,2=冻结,3=删除) */ private Integer state; /** * 添加时间 */ private Date insertTime; } cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java
@@ -10,6 +10,8 @@ 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.feignclient.other.SiteClient; import com.dsh.account.feignclient.other.model.SiteBooking; import com.dsh.account.mapper.RechargeRecordsMapper; import com.dsh.account.mapper.TAppUserMapper; import com.dsh.account.model.vo.userBenefitDetail.RechargeDetailsVo; @@ -25,11 +27,9 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.*; /** * <p> @@ -57,6 +57,9 @@ @Autowired private PayMoneyUtil payMoneyUtil; @Resource private SiteClient stClient; @Resource @@ -108,8 +111,16 @@ } } // 3.场地预约 // TODO: 2023/7/14 充值明细的场地预约查询 List<SiteBooking> siteBookings = stClient.wanpaiGoldSiteBookingList(appUserId); if (siteBookings.size() > 0 ){ for (SiteBooking booking : siteBookings) { RechargeDetailsVo.RechargesDetail consumeDetail = new RechargeDetailsVo.RechargesDetail(); consumeDetail.setConsumeName(RechargeRecordEnum.VENUE_RESERVATION.name()); consumeDetail.setConsumeTime(simpleDateFormat.format(booking.getInsertTime())); consumeDetail.setConsumeAmount("-" + booking.getPayMoney()); details.add(consumeDetail); } } // 4.智慧球场 // 5.充值 @@ -126,6 +137,21 @@ details.add(consumeDetail); } } if (details.size() > 0 ){ Collections.sort(details, new Comparator<RechargeDetailsVo.RechargesDetail>() { @Override public int compare(RechargeDetailsVo.RechargesDetail o1, RechargeDetailsVo.RechargesDetail o2) { try { Date date1 = simpleDateFormat.parse(o1.getConsumeTime()); Date date2 = simpleDateFormat.parse(o2.getConsumeTime()); return date2.compareTo(date1); // 降序排序 } catch (ParseException e) { e.printStackTrace(); } return 0; } }); } vo.setDetailList(details); return vo; } cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
@@ -17,7 +17,9 @@ 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.SiteClient; import com.dsh.account.feignclient.other.StoreClient; import com.dsh.account.feignclient.other.model.SiteBooking; import com.dsh.account.feignclient.other.model.Store; import com.dsh.account.feignclient.other.model.StoreDetailOfCourse; import com.dsh.account.feignclient.other.model.TImgConfig; @@ -119,8 +121,11 @@ @Resource private CoursePackageConfigClient cpconClient; @Autowired @Resource private PayMoneyUtil payMoneyUtil; @Resource private SiteClient stClient; @Override public ClassInfoVo queryUserOfStus(Integer id,String latitude,String longitude) { @@ -545,7 +550,22 @@ } } // 4.场地预约 // TODO: 2023/7/14 账单的场地预约查询 List<SiteBooking> allSiteBookingList = stClient.getAllSiteBookingList(appUserId); if (allSiteBookingList.size() > 0){ for (SiteBooking booking : allSiteBookingList) { BillingDetailsVo.ConsumeDetail consumeDetail = new BillingDetailsVo.ConsumeDetail(); if (booking.getStatus() != 5){ consumeDetail.setConsumeName(RechargeRecordEnum.VENUE_RESERVATION.getMsg()); consumeDetail.setConsumeAmount("-" + booking.getPayMoney()); consumeDetail.setConsumeTime(simpleDateFormat.format(booking.getPayTime())); }else { consumeDetail.setConsumeName(RechargeRecordEnum.CANCEL_VENUE_RESERVATION.getMsg()); consumeDetail.setConsumeAmount("+" + booking.getPayMoney()); consumeDetail.setConsumeTime(simpleDateFormat.format(booking.getCancelTime())); } details.add(consumeDetail); } } // 5.智慧球场 // 6.年度会员 cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java
@@ -87,6 +87,11 @@ return availableVos; } @PostMapping("/base/userConpon/queryCouponRules") public Map<String,Object> getCouponRules(@RequestBody Integer couponId){ return cService.queryConponRuleOfJson(couponId); } @ResponseBody cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java
@@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.RequestParam; import java.util.List; import java.util.Map; @FeignClient(value = "mb-cloud-activity") public interface UserConponClient { @@ -32,4 +33,8 @@ @PostMapping("/userCoupon/queryCouponOfStore") List<Integer> getCouponStoreIds(@RequestBody Integer couponId); @PostMapping("/base/userConpon/queryCouponRules") Map<String,Object> getCouponRules(@RequestBody Integer couponId); } cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java
@@ -96,29 +96,4 @@ } } /** * 折扣课包支付 */ @ResponseBody @PostMapping("/api/useBenefit/paymentOfDiscountCoursePack") @ApiOperation(value = "本周福利-折扣课包支付", tags = {"APP-使用福利"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), @ApiImplicitParam(name = "coursePackageDiscountId",value = "限时折扣配置id/赠送课时配置id",dataType = "int"), @ApiImplicitParam(name = "lon",value = "经度",dataType = "String"), @ApiImplicitParam(name = "lat",value = "纬度",dataType = "String"), }) public ResultUtil paymentWeeksFreeCourse(Integer coursePackageDiscountId){ try { Integer appuserId = tokenUtil.getUserIdFormRedis(); if(null == appuserId){ return ResultUtil.tokenErr(); } return tcpdService.paymentDiscountCoursePack(coursePackageDiscountId,appuserId); }catch (Exception e){ return ResultUtil.runErr(); } } } cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
@@ -28,11 +28,16 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Api @@ -75,7 +80,9 @@ private CancelledClassesService cancelledClassesService; @Autowired private AppUserClient appuClient; private PayMoneyUtil payMoneyUtil; @Resource private AppUserClient auClitn; private final SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm"); @@ -342,7 +349,7 @@ @ResponseBody @PostMapping("/api/course/queryArrangeCourseList") @ApiOperation(value = "获取布置课程列表", tags = {"APP-课程列表"}) @ApiOperation(value = "课后练习-获取布置课程列表", tags = {"APP-开始上课"}) @ApiImplicitParams({ }) public ResultUtil<List<BaseVo>> queryArrangePackageType(){ @@ -374,7 +381,7 @@ */ @ResponseBody @PostMapping("/api/startCource/afterSourceList") @ApiOperation(value = "课后视频课表", tags = {"APP-开始上课"}) @ApiOperation(value = "课后练习-课后视频列表", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) @@ -403,7 +410,7 @@ */ @ResponseBody @PostMapping("/api/startCource/afterSourceDetail") @ApiOperation(value = "课后视频详情", tags = {"APP-开始上课"}) @ApiOperation(value = "课后练习-课后视频详情", tags = {"APP-开始上课"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."), }) @@ -534,6 +541,58 @@ } /** * 课包续课支付宝支付回调接口 */ @PostMapping("/base/coursePackage/alipayRegisteredCoursesCallback") 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 = packagePaymentService.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("/base/coursePackage/wechatRegisteredCoursesCallback") 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 = packagePaymentService.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(); } } /** * 获取学员剩余课时 * @param id @@ -638,7 +697,7 @@ return 2; } CoursePackagePaymentConfig paymentConfig = icppcService.getById(coursePackage.getCoursePayConfigId()); AppUser appUser = appuClient.queryAppUser(userIdFormRedis); AppUser appUser = auClitn.queryAppUser(userIdFormRedis); if (appUser.getPlayPaiCoins() < paymentConfig.getPlayPaiCoin()){ return 3; } @@ -653,7 +712,7 @@ packagePaymentService.updateById(packagePayment); appUser.setPlayPaiCoins(appUser.getPlayPaiCoins()-paymentConfig.getPlayPaiCoin()); appuClient.updateAppUser(appUser); auClitn.updateAppUser(appUser); } catch (Exception e) { return 4; } cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/CouponClient.java
@@ -3,6 +3,9 @@ import com.dsh.course.feignclient.activity.model.Coupon; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import java.util.Map; /** * @author zhibing.pu @@ -19,4 +22,7 @@ */ @PostMapping("/coupon/queryCouponById") Coupon queryCouponById(Integer id); @PostMapping("/base/userConpon/queryCouponRules") Map<String,Object> getCouponRules(@RequestBody Integer couponId); } cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java
@@ -23,4 +23,6 @@ */ Integer queryCountNumber(@Param("coursePackageId") Integer coursePackageId); TCoursePackagePayment getCoursePackagePaymentByCode(@Param("code") String code); } cloud-server-course/src/main/java/com/dsh/course/model/vo/request/ClasspaymentRequest.java
@@ -25,5 +25,8 @@ @ApiModelProperty(value = "支付记录id") private Long coursePayId; @ApiModelProperty(value = "课时数") private Integer courseHoursNum; } cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageDiscountService.java
@@ -4,7 +4,6 @@ import com.dsh.course.entity.TCoursePackageDiscount; import com.dsh.course.model.vo.response.Details; import com.dsh.course.model.vo.response.ExchangeCoursePackageResponse; import com.dsh.course.util.ResultUtil; import java.util.List; @@ -23,6 +22,5 @@ ExchangeCoursePackageResponse getWeekFreeCourseDetails(Integer coursePackageDiscountId,String lat,String lon); ResultUtil paymentDiscountCoursePack(Integer coursePackageDiscountId, Integer appuserId); } cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java
@@ -86,4 +86,6 @@ */ List<RecordAppoint> obtainStuClassDetails(Integer stuId, Integer appUserId); ResultUtil insertVipPaymentCallback(String code, String orderNumber); } cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java
@@ -21,7 +21,6 @@ import com.dsh.course.service.TCoursePackageDiscountService; import com.dsh.course.util.DateTimeHelper; import com.dsh.course.util.LocalDateTimeUtils; import com.dsh.course.util.ResultUtil; import com.dsh.course.util.StrUtils; import org.springframework.stereotype.Service; @@ -391,11 +390,6 @@ return packageResponse; } @Override public ResultUtil paymentDiscountCoursePack(Integer coursePackageDiscountId, Integer appuserId) { // TODO: 2023/7/13 折扣课包支付 return null; } private static boolean isDateWithinRange(Date date, Date startTime, Date endTime) { cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java
@@ -1,9 +1,13 @@ package com.dsh.course.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.course.entity.*; import com.dsh.course.feignclient.account.AppUserClient; import com.dsh.course.feignclient.account.CoachClient; import com.dsh.course.feignclient.account.model.AppUser; import com.dsh.course.feignclient.account.model.Coach; import com.dsh.course.feignclient.activity.BenefitVideoClient; import com.dsh.course.feignclient.activity.CouponClient; @@ -26,7 +30,6 @@ import com.dsh.course.util.*; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -78,11 +81,18 @@ @Resource private TCoursePackageDiscountMapper tcpdMapper; @Resource private CoursePackagePaymentConfigMapper cpConfigMapper; @Resource private CouponClient client; @Autowired @Resource private PayMoneyUtil payMoneyUtil; @Resource private AppUserClient appuClient; /** @@ -174,7 +184,7 @@ uvdmapper.updateById(userVideoDetails); return "SUCCESS"; } return null; return "ERROR"; } @Override @@ -289,26 +299,61 @@ } @Override public ResultUtil ContinuationOrpaymentCourse(Integer userIdFormRedis, ClasspaymentRequest request) { public ResultUtil ContinuationOrpaymentCourse(Integer ids, ClasspaymentRequest request) { AppUser userIdFormRedis = appuClient.queryAppUser(ids); TCoursePackagePayment tCoursePackagePayment = this.baseMapper.selectById(request.getCoursePayId()); String code = ""; BigDecimal money = tCoursePackagePayment.getCashPayment(); Integer wpGold = tCoursePackagePayment.getPlayPaiCoin(); if (tCoursePackagePayment.getPayStatus() == 1){ // 待支付的订单 code = tCoursePackagePayment.getCode(); tCoursePackagePayment.setPayType(request.getPayType()); if (request.getUseConpon() == 1){ tCoursePackagePayment.setUserCouponId(Long.valueOf(request.getUseConpon())); } this.baseMapper.updateById(tCoursePackagePayment); }else { // 续课的订单 // 查询是否续课优惠 CoursePackagePaymentConfig paymentConfig = cpConfigMapper.selectOne(new QueryWrapper<CoursePackagePaymentConfig>() .eq("coursePackageId", request.getLessonId()) .eq("classHours", request.getCourseHoursNum())); TCoursePackageDiscount coursePackageDiscount = tcpdMapper.selectOne(new QueryWrapper<TCoursePackageDiscount>() .eq("coursePackageId", request.getLessonId()) .eq("type", 2) .eq("auditStatus", 1) .eq("coursePackagePaymentConfigId", paymentConfig.getCoursePackageId())); if (ToolUtil.isNotEmpty(coursePackageDiscount)){ String content = coursePackageDiscount.getContent(); JSONObject jsonObject = JSON.parseObject(content); if (userIdFormRedis.getIsVip() == 1){ Double jsonObjectDouble = jsonObject.getDouble("num1"); money = BigDecimal.valueOf(jsonObjectDouble); }else { Double jsonObjectDouble = jsonObject.getDouble("num2"); money = BigDecimal.valueOf(jsonObjectDouble); } } TCoursePackagePayment newPayment = new TCoursePackagePayment(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); newPayment.setCode(sdf.format(new Date()) + UUIDUtil.getNumberRandom(5)); newPayment.setAppUserId(userIdFormRedis); newPayment.setAppUserId(userIdFormRedis.getId()); newPayment.setStudentId(request.getStuId()); newPayment.setCoursePackageId(request.getLessonId()); newPayment.setClassHours(tCoursePackagePayment.getClassHours()); newPayment.setOriginalPrice(tCoursePackagePayment.getOriginalPrice()); newPayment.setTotalClassHours(tCoursePackagePayment.getTotalClassHours()); newPayment.setLaveClassHours(tCoursePackagePayment.getTotalClassHours()); if (request.getUseConpon() == 1){ newPayment.setUserCouponId(Long.valueOf(request.getUseConpon())); } newPayment.setAbsencesNumber(0); newPayment.setPayUserType(1); newPayment.setPayStatus(1); newPayment.setStatus(1); newPayment.setPayType(request.getPayType()); newPayment.setState(1); newPayment.setInsertTime(new Date()); this.baseMapper.insert(newPayment); @@ -316,13 +361,47 @@ } switch (request.getPayType()){ case 1: WeChatPayment(code,request); break; if (request.getUseConpon() == 1){ Coupon coupon = client.queryCouponById(request.getConponId()); if (coupon.getType() == 1){ Map<String, Object> couponRules = client.getCouponRules(coupon.getId()); Double conditionalAmount = (Double) couponRules.get("conditionalAmount"); Double deductionAmount = (Double) couponRules.get("deductionAmount"); if (money.compareTo(BigDecimal.valueOf(conditionalAmount)) >= 0){ money = BigDecimal.valueOf(deductionAmount); } } if (coupon.getType() == 2){ Map<String, Object> couponRules = client.getCouponRules(coupon.getId()); Object amount = couponRules.get("deductionAmount"); money = BigDecimal.valueOf((Double) amount); } } try { return WeChatPayment(code,money); }catch (Exception e){ return ResultUtil.runErr(); } case 2: AlipayPayment(code,request); break; if (request.getUseConpon() == 1){ Coupon coupon = client.queryCouponById(request.getConponId()); if (coupon.getType() == 1){ Map<String, Object> couponRules = client.getCouponRules(coupon.getId()); Double conditionalAmount = (Double) couponRules.get("conditionalAmount"); Double deductionAmount = (Double) couponRules.get("deductionAmount"); if (money.compareTo(BigDecimal.valueOf(conditionalAmount)) >= 0){ money = BigDecimal.valueOf(deductionAmount); } } if (coupon.getType() == 2){ Map<String, Object> couponRules = client.getCouponRules(coupon.getId()); Object amount = couponRules.get("deductionAmount"); money = BigDecimal.valueOf((Double) amount); } } return AlipayPayment(code,money); case 3: PlaypaiGoldPayment(code,request); PlaypaiGoldPayment(userIdFormRedis,code,wpGold); break; default: break; @@ -331,73 +410,135 @@ } public void WeChatPayment(String code, ClasspaymentRequest request){ public ResultUtil WeChatPayment(String code, BigDecimal request) throws Exception { TCoursePackagePaymentMapper baseMapper1 = this.baseMapper; ResultUtil weixinpay = payMoneyUtil.weixinpay("课包续费", "", code, request.toString(), "/base/coursePackage/wechatRegisteredCoursesCallback", "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 = baseMapper1.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); baseMapper1.deleteById(coursePackagePayment.getId()); break; } if("SUCCESS".equals(s)){ coursePackagePayment.setPayStatus(2); coursePackagePayment.setOrderNumber(transaction_id); baseMapper1.updateById(coursePackagePayment); break; } if("USERPAYING".equals(s)){ num++; } } } }catch (Exception e){ e.printStackTrace(); } } }).start(); } return weixinpay; } 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(); // } public ResultUtil AlipayPayment(String code, BigDecimal request){ TCoursePackagePaymentMapper baseMapper1 = this.baseMapper; ResultUtil alipay = payMoneyUtil.alipay("课包购买", "", "", code, request.toString(), "/base/coursePackage/alipayRegisteredCoursesCallback"); 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 = baseMapper1.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); baseMapper1.deleteById(coursePackagePayment.getId()); break; } if("TRADE_SUCCESS".equals(s)){ coursePackagePayment.setPayStatus(2); coursePackagePayment.setOrderNumber(tradeNo); baseMapper1.updateById(coursePackagePayment); break; } if("WAIT_BUYER_PAY".equals(s)){ num++; } } } }catch (Exception e){ e.printStackTrace(); } } }).start(); } return alipay; } public void PlaypaiGoldPayment(String code, ClasspaymentRequest request){ public ResultUtil PlaypaiGoldPayment(AppUser appUser,String code, Integer wpGold){ TCoursePackagePayment packagePayment = this.baseMapper.selectOne(new QueryWrapper<TCoursePackagePayment>() .eq("code",code )); if (appUser.getPlayPaiCoins() < wpGold){ return ResultUtil.error("玩牌币不足!"); } packagePayment.setPayStatus(2); packagePayment.setPayUserId(appUser.getId()); packagePayment.setPlayPaiCoin(wpGold); this.baseMapper.updateById(packagePayment); appUser.setPlayPaiCoins(ToolUtil.isNotEmpty(appUser.getPlayPaiCoins()) ? appUser.getPlayPaiCoins()-wpGold : wpGold); appuClient.updateAppUser(appUser); return ResultUtil.success(); } @@ -476,4 +617,17 @@ return recordVoList; } @Override public ResultUtil insertVipPaymentCallback(String code, String orderNumber) { TCoursePackagePayment coursePackagePayment = this.baseMapper.getCoursePackagePaymentByCode(code); if(coursePackagePayment.getPayStatus() != 1){ return ResultUtil.success(); } coursePackagePayment.setPayStatus(2); coursePackagePayment.setOrderNumber(orderNumber); this.baseMapper.updateById(coursePackagePayment); return ResultUtil.success(); } } cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml
@@ -34,4 +34,12 @@ SELECT appUserId FROM t_course_package_payment WHERE payStatus = 2 AND state = 1 and coursePackageId = #{coursePackageId} GROUP BY appUserId ) AS aa </select> <select id="getCoursePackagePaymentByCode" resultType="com.dsh.course.entity.TCoursePackagePayment"> select * from t_course_package_payment where 1=1 <if test="code != null"> and `code` = #{code} </if> </select> </mapper> cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java
@@ -22,6 +22,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -353,5 +354,43 @@ } } /** * 查询所有现金支付的预约记录 * @param appUserId * @return */ @PostMapping("/base/site/queryPaymentSiteDetail") public List<SiteBooking> getAllSiteBookingList(@RequestBody Integer appUserId){ ArrayList<Integer> integers = new ArrayList<>(); integers.add(1); integers.add(2); integers.add(3); integers.add(4); integers.add(5); return siteBookingService.list(new QueryWrapper<SiteBooking>() .in("status",integers) .ne("payType",3) .eq("appUserId",appUserId)); } /** * 查询所有玩湃币支付的预约记录 * @param appUserId * @return */ @PostMapping("/base/site/queryPlaypaiGoldSiteDetail") public List<SiteBooking> wanpaiGoldSiteBookingList(@RequestBody Integer appUserId){ ArrayList<Integer> integers = new ArrayList<>(); integers.add(1); integers.add(2); integers.add(3); integers.add(4); integers.add(5); return siteBookingService.list(new QueryWrapper<SiteBooking>() .in("status",integers) .eq("payType",3) .eq("appUserId",appUserId)); } } cloud-server-other/src/main/java/com/dsh/other/feignclient/SiteClient.java
New file @@ -0,0 +1,20 @@ package com.dsh.other.feignclient; import com.dsh.other.entity.SiteBooking; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import java.util.List; @FeignClient("mb-cloud-other") public interface SiteClient { @PostMapping("/base/site/queryPaymentSiteDetail") List<SiteBooking> getAllSiteBookingList(@RequestBody Integer appUserId); @PostMapping("/base/site/queryPlaypaiGoldSiteDetail") List<SiteBooking> wanpaiGoldSiteBookingList(@RequestBody Integer appUserId); }