lisy
2023-07-11 d48fe1af58f1eeef8d9d219aa508435eb42600f2
使用福利的充值玩湃币支付功能
4个文件已修改
246 ■■■■■ 已修改文件
cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/RechargeRecordsService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java
@@ -1,6 +1,7 @@
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;
@@ -29,9 +30,11 @@
    @Autowired
    private TStudentService tstuService;
    @Autowired
    private RechargeRecordsService recordsService;
    /**
     * 支付宝支付回调接口
     * 课包续课支付宝支付回调接口
     */
    @PostMapping("/base/coursePackage/alipayPaymentCallback")
    public void alipayCallback(HttpServletRequest request, HttpServletResponse response){
@@ -55,7 +58,7 @@
    /**
     * 微信支付回调接口
     * 课包续课微信支付回调接口
     */
    @PostMapping("/base/coursePackage/wechatPaymentCallback")
    public void weChatCallback(HttpServletRequest request, HttpServletResponse response){
@@ -78,5 +81,52 @@
        }
    }
    /**
     * 充值玩湃币支付宝支付回调接口
     */
    @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/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/impl/RechargeRecordsServiceImpl.java
@@ -7,13 +7,16 @@
import com.dsh.account.enums.RechargeRecordEnum;
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 +27,7 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * <p>
@@ -45,6 +49,13 @@
    @Autowired
    private CoursePaymentClient cpClient;
    @Autowired
    private PayMoneyUtil payMoneyUtil;
    @Resource
    private RechargeConfigClient reconMapper;
    @Override
@@ -86,7 +97,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 +116,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
@@ -486,6 +486,7 @@
        BillingDetailsVo vo = new BillingDetailsVo();
        List<BillingDetailsVo.ConsumeDetail> details = new ArrayList<>();
        // TODO: 2023/7/11 账单记录查询
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM-dd HH:mm");
        Date monthStart = null;
        Date monthEnd = null;