puzhibing
2023-06-03 ddd4919fdd5c5dd4fc96eb99e590403cad58bbd7
更新支付
3个文件已修改
226 ■■■■■ 已修改文件
user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Order.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java
@@ -57,6 +57,9 @@
    @Autowired
    private IRechargeRecordService rechargeRecordService;
    @Autowired
    private IAccountChangeDetailService accountChangeDetailService;
@@ -351,34 +354,37 @@
     */
    @ResponseBody
    @PostMapping("/base/order/orderPayCallback")
    public void orderPayCallback(HttpServletRequest request, HttpServletResponse response){
    public void orderPayCallback(@RequestBody InterfaceResponse interfaceResponse, HttpServletResponse response){
        try {
            String code = request.getParameter("code");
            String version = request.getParameter("version");
            String msg = request.getParameter("msg");
            String date = request.getParameter("date");
            String result = request.getParameter("result");
            String sign = request.getParameter("sign");
            InterfaceResponse interfaceResponse = new InterfaceResponse();
            interfaceResponse.setCode(code);
            interfaceResponse.setVersion(version);
            interfaceResponse.setMsg(msg);
            interfaceResponse.setDate(date);
            interfaceResponse.setResult(result);
            interfaceResponse.setSign(sign);
            // 验签
            boolean verify = RSASignature.validate(interfaceResponse.content(), interfaceResponse.getSign());
            if (verify) {//验签成功业务处理逻辑
                JSONObject jsonObject = JSON.parseObject(result);
                String merOrderId = jsonObject.getString("merOrderId");
                String orderId = jsonObject.getString("parameter1");
                ResultUtil resultUtil = orderService.orderPayCallback(orderId, merOrderId);
                if(resultUtil.getCode() == 10000){
                    response.setStatus(200);
                    PrintWriter out = response.getWriter();
                    out.print("OK");
                    out.flush();
                    out.close();
                if("0000".equals(interfaceResponse.getCode())){
                    JSONObject jsonObject = JSON.parseObject(interfaceResponse.getResult());
                    Integer status = jsonObject.getInteger("status");
                    String orderId = jsonObject.getString("parameter1");
                    String parameter2 = jsonObject.getString("parameter2");
                    if(2 == status){
                        Order order = orderService.selectById(orderId);
                        AccountChangeDetail accountChangeDetail = accountChangeDetailService.selectById(parameter2);
                        Double m = accountChangeDetail.getOldData() - accountChangeDetail.getNewData();
                        AppUser appUser1 = appUserService.selectById(order.getUserId());
                        appUser1.setAccountBalance(appUser1.getAccountBalance() + m);
                        appUserService.updateById(appUser1);
                        accountChangeDetailService.deleteById(accountChangeDetail.getId());
                        System.err.println("支付失败");
                    }
                    if(1 == status){
                        String merOrderId = jsonObject.getString("merOrderId");
                        ResultUtil resultUtil = orderService.orderPayCallback(orderId, merOrderId);
                        if(resultUtil.getCode() == 10000){
                            response.setStatus(200);
                            PrintWriter out = response.getWriter();
                            out.print("OK");
                            out.flush();
                            out.close();
                        }
                    }
                }
            } else {//验签失败业务处理逻辑
                System.err.println("支付回调验签失败");
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Order.java
@@ -258,7 +258,7 @@
    @TableField("discount")
    private Double discount;
    /**
     * 支付类型(1=微信支付,2=余额支付,3=线下支付)
     * 支付类型(1=微信支付,2=余额支付,3=线下支付,4=微信+余额)
     */
    @TableField("payType")
    private Integer payType;
@@ -268,6 +268,11 @@
    @TableField("payTime")
    private Date payTime;
    /**
     * 账户余额支付金额
     */
    @TableField("balancePayment")
    private Double balancePayment;
    /**
     * 第三方支付流水号
     */
    @TableField("orderNo")
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java
@@ -1009,7 +1009,7 @@
                accountChangeDetail.setChangeType(7);
                accountChangeDetail.setOrderId(order.getId());
                accountChangeDetail.setExplain("优惠券收入");
                driver.setCouponBalance(driver.getCouponBalance() + coupon.getCouponPreferentialAmount());
                driver.setCommission(driver.getCommission() + coupon.getCouponPreferentialAmount());
                accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
                driverService.updateById(driver);
                accountChangeDetailService.insert(accountChangeDetail);
@@ -1077,10 +1077,27 @@
                payMoney = payMoney - coupon.getCouponPreferentialAmount();
                order.setCouponId(coupon.getId());
                order.setDiscountedPrice(coupon.getCouponPreferentialAmount());
                Driver driver = driverService.selectById(order.getDriverId());
                AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
                accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
                accountChangeDetail.setUserType(2);
                accountChangeDetail.setUserId(order.getDriverId());
                accountChangeDetail.setCreateTime(new Date());
                accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
                accountChangeDetail.setType(1);
                accountChangeDetail.setChangeType(7);
                accountChangeDetail.setOrderId(order.getId());
                accountChangeDetail.setExplain("优惠券收入");
                driver.setCommission(driver.getCommission() + coupon.getCouponPreferentialAmount());
                accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
                driverService.updateById(driver);
                accountChangeDetailService.insert(accountChangeDetail);
            }
        }
        order.setPayType(1);
        order.setPayMoney(payMoney);
        order.setBalancePayment(payMoney > appUser.getAccountBalance() ? appUser.getAccountBalance() : payMoney);
        payMoney = payMoney > appUser.getAccountBalance() ? payMoney - appUser.getAccountBalance() : 0D;
@@ -1110,7 +1127,7 @@
            paymentOrder.setPayType("WX_MINI");
            paymentOrder.setTransferType("0");
            paymentOrder.setAsynSplitFlag("1");
            paymentOrder.setAppid("");
            paymentOrder.setAppid(appletsAppid);
            paymentOrder.setOpenid(appUser.getOpenid());
            paymentOrder.setTerminalIp(InetAddress.getLocalHost().getHostAddress());
            List<PaymentOrderGood> goodsDetail = new ArrayList<>();
@@ -1121,7 +1138,7 @@
            paymentOrder.setFrontUrl(callbackPath + "/base/order/orderPayCallback");
            paymentOrder.setNotifyUrl(callbackPath + "/base/order/orderPayCallback");
            paymentOrder.setParameter1(order.getId().toString());
            paymentOrder.setParameter2(payMoney.toString());
            paymentOrder.setParameter2(accountChangeDetail.getId().toString());
            TrhRequest<PaymentOrder> request = new TrhRequest();
            InterfaceResponse execute = request.execute(paymentOrder, PaymentOrder.SERVICE_CODE);
@@ -1176,7 +1193,7 @@
                                        Double m = accountChangeDetail.getOldData() - accountChangeDetail.getNewData();
                                        AppUser appUser1 = appUserService.selectById(order1.getUserId());
                                        appUser1.setAccountBalance(appUser1.getAccountBalance() + m);
                                        appUserService.updateById(appUser1)
                                        appUserService.updateById(appUser1);
                                        accountChangeDetailService.deleteById(accountChangeDetail.getId());
                                        break;
                                    }
@@ -1191,17 +1208,17 @@
                    }
                }).start();
            }
            return ResultUtil.success(payCode);
        }else{
            order.setPayType(2);
            order.setPayMoney(payMoney);
            order.setPayTime(new Date());
            order.setState(108);
            this.updateById(order);
            //处理佣金和收入记录
            saveCommission(order);
        }
//        order.setPayTime(new Date());
//        this.updateById(order);
        return ResultUtil.success();
    }
@@ -1384,11 +1401,11 @@
                                    }
                                    break;
                                }else{
                                    num1_ -= surplusDividedAmount;
                                    ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                                    if(10000 == zhaunzhang.getCode()){
                                        rechargeRecord.setSurplusDividedAmount(0D);
                                        rechargeRecordService.updateById(rechargeRecord);
                                        num1_ -= surplusDividedAmount;
                                    }else{
                                        break;
                                    }
@@ -1446,11 +1463,11 @@
                                            }
                                            break;
                                        }else{
                                            num5_ -= surplusDividedAmount;
                                            ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                                            if(10000 == zhaunzhang.getCode()){
                                                rechargeRecord.setSurplusDividedAmount(0D);
                                                rechargeRecordService.updateById(rechargeRecord);
                                                num5_ -= surplusDividedAmount;
                                            }else{
                                                break;
                                            }
@@ -1497,11 +1514,11 @@
                                            }
                                            break;
                                        }else{
                                            num6_ -= surplusDividedAmount;
                                            ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver2.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                                            if(10000 == zhaunzhang.getCode()){
                                                rechargeRecord.setSurplusDividedAmount(0D);
                                                rechargeRecordService.updateById(rechargeRecord);
                                                num6_ -= surplusDividedAmount;
                                            }else{
                                                break;
                                            }
@@ -1549,11 +1566,11 @@
                                            }
                                            break;
                                        }else{
                                            num7_ -= surplusDividedAmount;
                                            ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver3.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                                            if(10000 == zhaunzhang.getCode()){
                                                rechargeRecord.setSurplusDividedAmount(0D);
                                                rechargeRecordService.updateById(rechargeRecord);
                                                num7_ -= surplusDividedAmount;
                                            }else{
                                                break;
                                            }
@@ -1603,11 +1620,11 @@
                                            }
                                            break;
                                        }else{
                                            num3_1 -= surplusDividedAmount;
                                            ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                                            if(10000 == zhaunzhang.getCode()){
                                                rechargeRecord.setSurplusDividedAmount(0D);
                                                rechargeRecordService.updateById(rechargeRecord);
                                                num3_1 -= surplusDividedAmount;
                                            }else{
                                                break;
                                            }
@@ -1654,11 +1671,11 @@
                                            }
                                            break;
                                        }else{
                                            num4_1 -= surplusDividedAmount;
                                            ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver2.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                                            if(10000 == zhaunzhang.getCode()){
                                                rechargeRecord.setSurplusDividedAmount(0D);
                                                rechargeRecordService.updateById(rechargeRecord);
                                                num4_1 -= surplusDividedAmount;
                                            }else{
                                                break;
                                            }
@@ -1708,11 +1725,11 @@
                                        }
                                        break;
                                    }else{
                                        num2_1 -= surplusDividedAmount;
                                        ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver1.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                                        if(10000 == zhaunzhang.getCode()){
                                            rechargeRecord.setSurplusDividedAmount(0D);
                                            rechargeRecordService.updateById(rechargeRecord);
                                            num2_1 -= surplusDividedAmount;
                                        }else{
                                            break;
                                        }
@@ -1749,11 +1766,11 @@
                                }
                                break;
                            }else{
                                num3_1 -= surplusDividedAmount;
                                ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), agent.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                                if(10000 == zhaunzhang.getCode()){
                                    rechargeRecord.setSurplusDividedAmount(0D);
                                    rechargeRecordService.updateById(rechargeRecord);
                                    num3_1 -= surplusDividedAmount;
                                }else{
                                    break;
                                }
@@ -1783,9 +1800,8 @@
        accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
        accountChangeDetail.setExplain("订单收入");
        accountChangeDetail.setCreateTime(new Date());
        driver.setCommission(driver.getCommission() + payMoney + order.getDiscountedPrice() + order.getDiscountAmount());
        if(null != order.getCouponId()){
            driver.setCouponBalance(driver.getCouponBalance() + order.getDiscountedPrice());
            driver.setCommission(driver.getCommission() + order.getDiscountedPrice());
            //补贴中分账
            Double discountedPrice = order.getDiscountedPrice();
            List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
@@ -1799,11 +1815,11 @@
                    }
                    break;
                }else{
                    discountedPrice -= surplusDividedAmount;
                    ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                    if(10000 == zhaunzhang.getCode()){
                        rechargeRecord.setSurplusDividedAmount(0D);
                        rechargeRecordService.updateById(rechargeRecord);
                        discountedPrice -= surplusDividedAmount;
                    }else{
                        break;
                    }
@@ -1812,7 +1828,20 @@
        }
        if(null != order.getDiscountAmount() && 0 < order.getDiscountAmount()){
            driver.setCouponBalance(driver.getCouponBalance() + order.getDiscountAmount());
            accountChangeDetail = new AccountChangeDetail();
            accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
            accountChangeDetail.setUserType(2);
            accountChangeDetail.setUserId(order.getDriverId());
            accountChangeDetail.setCreateTime(new Date());
            accountChangeDetail.setOldData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
            accountChangeDetail.setType(1);
            accountChangeDetail.setChangeType(7);
            accountChangeDetail.setOrderId(order.getId());
            accountChangeDetail.setExplain("折扣优惠收入");
            driver.setCommission(driver.getCommission() + order.getDiscountAmount());
            accountChangeDetail.setNewData(driver.getBalance() + driver.getBackgroundBalance() + driver.getCouponBalance() + driver.getCommission());
            driverService.updateById(driver);
            accountChangeDetailService.insert(accountChangeDetail);
            //补贴中分账
            Double discountedPrice = order.getDiscountAmount();
            List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
@@ -1826,11 +1855,11 @@
                    }
                    break;
                }else{
                    discountedPrice -= surplusDividedAmount;
                    ResultUtil zhaunzhang = zhaunzhang(rechargeRecord.getId(), rechargeRecord.getOrderNumber(), driver.getMerchantNumber(), surplusDividedAmount, callbackPath + "/base/order/zhaunzhangCallback");
                    if(10000 == zhaunzhang.getCode()){
                        rechargeRecord.setSurplusDividedAmount(0D);
                        rechargeRecordService.updateById(rechargeRecord);
                        discountedPrice -= surplusDividedAmount;
                    }else{
                        break;
                    }
@@ -1868,11 +1897,11 @@
                    }
                    break;
                }else{
                    payMoney -= surplusDividedAmount;
                    ResultUtil fengzhang = fengzhang(1, driver.getId(), driver.getMerchantNumber(), order.getId().longValue(), order.getOrderNo(), surplusDividedAmount, 1);
                    if(10000 == fengzhang.getCode()){
                        rechargeRecord.setSurplusDividedAmount(0D);
                        rechargeRecordService.updateById(rechargeRecord);
                        payMoney -= surplusDividedAmount;
                    }else{
                        break;
                    }
@@ -1897,11 +1926,11 @@
                        }
                        break;
                    }else{
                        payMoney -= surplusDividedAmount;
                        ResultUtil fengzhang = fengzhang(3, null, "553021440975", order.getId().longValue(), order.getOrderNo(), surplusDividedAmount, 1);
                        if(10000 == fengzhang.getCode()){
                            rechargeRecord.setSurplusDividedAmount(0D);
                            rechargeRecordService.updateById(rechargeRecord);
                            payMoney -= surplusDividedAmount;
                        }else{
                            break;
                        }
@@ -1911,62 +1940,70 @@
        }
        if(order.getPayType() == 4){//微信+余额(使用用户的充值数据分账)
            List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 1).eq("userId", order.getUserId())
                    .eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
            for (RechargeRecord rechargeRecord : rechargeRecords) {
                Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
                if(surplusDividedAmount.compareTo(payMoney) >= 0){
                    //分账司机收入
                    ResultUtil fengzhang = fengzhang(1, driver.getId(), driver.getMerchantNumber(), order.getId().longValue(), order.getOrderNo(), payMoney, 1);
                    if(10000 == fengzhang.getCode()){
                        rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - payMoney);
                        rechargeRecordService.updateById(rechargeRecord);
                    }
                    break;
                }else{
                    payMoney -= surplusDividedAmount;
                    ResultUtil fengzhang = fengzhang(1, driver.getId(), driver.getMerchantNumber(), order.getId().longValue(), order.getOrderNo(), surplusDividedAmount, 1);
                    if(10000 == fengzhang.getCode()){
                        rechargeRecord.setSurplusDividedAmount(0D);
                        rechargeRecordService.updateById(rechargeRecord);
                    }else{
                        break;
                    }
            Double xj = order.getPayMoney() - order.getBalancePayment();
            if(xj > 0){
                //分账司机收入
                fengzhang(1, driver.getId(), driver.getMerchantNumber(), order.getId().longValue(), order.getOrderNo(), payMoney, 1);
                if(payMoney.compareTo(order.getPayMoney()) < 0){//司机获取部分需将剩余的分给平台
                    Double money = order.getPayMoney() - payMoney + order.getDiscountedPrice();
                    fengzhang(3, null, "553021440975", order.getId().longValue(), order.getOrderNo(), money, 1);
                }
            }
            if(payMoney.compareTo(order.getPayMoney()) < 0){//司机获取部分需将剩余的分给平台
                Double money = order.getPayMoney() - payMoney;
                List<RechargeRecord> rechargeRecords1 = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 1).eq("userId", order.getUserId())
            }else{
                Double balancePayment = order.getBalancePayment();
                List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 1).eq("userId", order.getUserId())
                        .eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                for (RechargeRecord rechargeRecord : rechargeRecords1) {
                for (RechargeRecord rechargeRecord : rechargeRecords) {
                    Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
                    if(surplusDividedAmount.compareTo(money) >= 0){
                    if(surplusDividedAmount.compareTo(balancePayment) >= 0){
                        //分账司机收入
                        ResultUtil fengzhang = fengzhang(3, null, "553021440975", order.getId().longValue(), order.getOrderNo(), money, 1);
                        ResultUtil fengzhang = fengzhang(1, driver.getId(), driver.getMerchantNumber(), order.getId().longValue(), order.getOrderNo(), balancePayment, 1);
                        if(10000 == fengzhang.getCode()){
                            rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - money);
                            rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - balancePayment);
                            rechargeRecordService.updateById(rechargeRecord);
                        }
                        break;
                    }else{
                        payMoney -= surplusDividedAmount;
                        ResultUtil fengzhang = fengzhang(3, null, "553021440975", order.getId().longValue(), order.getOrderNo(), surplusDividedAmount, 1);
                        ResultUtil fengzhang = fengzhang(1, driver.getId(), driver.getMerchantNumber(), order.getId().longValue(), order.getOrderNo(), surplusDividedAmount, 1);
                        if(10000 == fengzhang.getCode()){
                            rechargeRecord.setSurplusDividedAmount(0D);
                            rechargeRecordService.updateById(rechargeRecord);
                            balancePayment -= surplusDividedAmount;
                        }else{
                            break;
                        }
                    }
                }
                if(payMoney.compareTo(order.getPayMoney()) < 0){//司机获取部分需将剩余的分给平台
                    Double money = order.getPayMoney() - payMoney;
                    List<RechargeRecord> rechargeRecords1 = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 1).eq("userId", order.getUserId())
                            .eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime"));
                    for (RechargeRecord rechargeRecord : rechargeRecords1) {
                        Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount();
                        if(surplusDividedAmount.compareTo(money) >= 0){
                            //分账司机收入
                            ResultUtil fengzhang = fengzhang(3, null, "553021440975", order.getId().longValue(), order.getOrderNo(), money, 1);
                            if(10000 == fengzhang.getCode()){
                                rechargeRecord.setSurplusDividedAmount(rechargeRecord.getSurplusDividedAmount() - money);
                                rechargeRecordService.updateById(rechargeRecord);
                            }
                            break;
                        }else{
                            ResultUtil fengzhang = fengzhang(3, null, "553021440975", order.getId().longValue(), order.getOrderNo(), surplusDividedAmount, 1);
                            if(10000 == fengzhang.getCode()){
                                rechargeRecord.setSurplusDividedAmount(0D);
                                rechargeRecordService.updateById(rechargeRecord);
                                payMoney -= surplusDividedAmount;
                            }else{
                                break;
                            }
                        }
                    }
                }
            }
        }
    }