From ddd4919fdd5c5dd4fc96eb99e590403cad58bbd7 Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期六, 03 六月 2023 02:03:18 +0800 Subject: [PATCH] 更新支付 --- user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java | 54 +++++++------ user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Order.java | 7 + user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java | 165 +++++++++++++++++++++++++---------------- 3 files changed, 137 insertions(+), 89 deletions(-) diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java index 4fcd34e..d440b13 100644 --- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java +++ b/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("支付回调验签失败"); diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Order.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Order.java index 4aa6a66..56f7a1c 100644 --- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Order.java +++ b/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") diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java index 5e7ddfb..8535c55 100644 --- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java +++ b/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; + } + } + } + } } } - - } -- Gitblit v1.7.1