lisy
2023-07-19 a0dd7e4a251536f9622fe47d35c0f6c8506f5b95
course:开始上课的已报名课程支付功能完善
12个文件已修改
427 ■■■■ 已修改文件
cloud-server-activity/src/main/java/com/dsh/activity/controller/UserCouponController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/feignclient/UserConponClient.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/feignclient/activity/CouponClient.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackagePaymentMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/model/vo/request/ClasspaymentRequest.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageDiscountService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackagePaymentService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java 292 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/resources/mapper/TCoursePackagePaymentMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>