From f69463ba6fd8b6672fe58aaaa811a5bc7e5ae8c0 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期二, 19 八月 2025 09:00:29 +0800
Subject: [PATCH] bug修改

---
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java |   97 ++++++++++++++++++++++++++----------------------
 1 files changed, 53 insertions(+), 44 deletions(-)

diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java
index e98cf90..d9e25c6 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java
@@ -1,14 +1,12 @@
 package com.ruoyi.other.controller;
 
 
-import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.account.api.feignClient.AppUserClient;
-import com.ruoyi.account.api.model.AppUser;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.StringUtils;
@@ -21,12 +19,12 @@
 import com.ruoyi.other.service.ShopBalanceStatementService;
 import com.ruoyi.other.service.ShopService;
 import com.ruoyi.other.service.ShopWithdrawService;
-import com.ruoyi.other.util.payment.TransferUtil;
-import com.ruoyi.other.util.payment.model.AccountBalanceQueryResult;
-import com.ruoyi.other.util.payment.model.SinglePay;
-import com.ruoyi.other.util.payment.model.SinglePayCallbackResult;
-import com.ruoyi.other.util.payment.model.SinglePayResult;
+import com.ruoyi.other.util.BankCode;
+import com.ruoyi.other.util.withdraw.HttpUtilWithdraw;
+import com.ruoyi.other.util.pay.HttpRequester;
+import com.ruoyi.other.util.pay.HttpRespons;
 import com.ruoyi.other.util.payment.wx.WechatPayService;
+import com.ruoyi.other.util.withdraw.WithdrawCallBackDTO;
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.feignClient.SysUserClient;
 import com.ruoyi.system.api.model.LoginUser;
@@ -42,10 +40,7 @@
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -265,7 +260,7 @@
      */
     @PostMapping("/audit")
     @ApiOperation("提现审核")
-    public R<Void> audit(@RequestBody ShopWithdraw shopWithdraw) {
+    public R<Void> audit(@RequestBody ShopWithdraw shopWithdraw) throws IOException {
         LoginUser loginUser = tokenService.getLoginUser();
 
         ShopWithdraw shopWithdraw1 = shopWithdrawService.getById(shopWithdraw.getId());
@@ -275,21 +270,25 @@
         Shop shop = shopService.getById(shopWithdraw1.getShopId());
         BigDecimal money = shopWithdraw1.getMoney();
         if(1 == shopWithdraw.getAuditStatus()){
-            //取消商户转账,线下转账
-           /*
-           try {
-                Map<String, String> map = wechatPayService.payToBankCard(shopWithdraw1.getId().toString(),
-                        shopWithdraw1.getReceiverAccountNoEnc(),shopWithdraw1.getReceiverNameEnc(),shopWithdraw1.getReceiverBankChannelNo(),shopWithdraw1.getMoney(),shopWithdraw.getRemark());
-                if (map.get("return_code").equals("SUCCESS")) {
-                    System.out.println("转账申请成功");
-                    shopWithdraw1.setStatus(1);
-                }else {
-                    return R.fail("转账申请失败");
-                }
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }*/
-            //到账
+            // 打款
+            String url = "https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8&" +
+                    "cardNo="+shopWithdraw1.getReceiverAccountNoEnc()+"&cardBinCheck=true";
+            HashMap<String, String> hashMap = new HashMap<>();
+            HttpRequester hr = new HttpRequester();
+            HttpRespons HP = hr.sendPost(url, hashMap);
+            System.out.println("接收返回参数:" + HP.getContent());
+            com.alibaba.fastjson.JSONObject resPay = com.alibaba.fastjson.JSONObject.parseObject(HP.getContent());
+            System.err.println(resPay);
+            if (resPay.getString("validated")==null){
+                System.err.println("不合法的银行卡号");
+            }
+            String bankCode = resPay.getString("bank");
+            String bankName = BankCode.getBankNameByCode(bankCode); // 返回ABC枚举实例
+            System.err.println(bankName);
+            String withdraw = HttpUtilWithdraw.withdraw(shopWithdraw1, bankName);
+            if (!withdraw.equals("success")){
+                return R.fail("打款失败,原因:"+withdraw);
+            }
 
             shopWithdraw1.setStatus(2);
             shopWithdraw1.setArrivalTime(LocalDateTime.now());
@@ -334,21 +333,34 @@
     }
 
 
+
     /**
      * 提现审核通过后转账回调通知
      * @param singlePayCallbackResult
      */
     @ResponseBody
     @PostMapping("/withdrawalCallback")
-    public Object withdrawalCallback(@RequestBody SinglePayCallbackResult singlePayCallbackResult){
+    public Object withdrawalCallback(@RequestBody WithdrawCallBackDTO singlePayCallbackResult){
+        String sign = singlePayCallbackResult.getSign();
+        String orderCode = singlePayCallbackResult.getOrderCode();
+        String tradeNo = singlePayCallbackResult.getTradeNo();
+        BigDecimal money = singlePayCallbackResult.getMoney();
         Integer status = singlePayCallbackResult.getStatus();
-        String merchantOrderNo = singlePayCallbackResult.getMerchantOrderNo();
-        ShopWithdraw shopWithdraw = shopWithdrawService.getById(merchantOrderNo);
-        if(203 == status || 205 == status){
+        LocalDateTime time = singlePayCallbackResult.getTime();
+        String message = singlePayCallbackResult.getMessage();
+        ShopWithdraw shopWithdraw = shopWithdrawService.lambdaQuery().eq(ShopWithdraw::getCode, orderCode).one();
+        if (shopWithdraw == null){
+            return R.ok();
+        }
+        if (shopWithdraw.getStatus()==2 || 3 == shopWithdraw.getStatus()){
+            return R.ok();
+        }
+        if(1 == status && Objects.equals(money, shopWithdraw.getMoney())){
             //到账
             if(1 == shopWithdraw.getStatus()){
                 shopWithdraw.setStatus(2);
                 shopWithdraw.setArrivalTime(LocalDateTime.now());
+                shopWithdraw.setOrderNumber(tradeNo);
                 shopWithdrawService.updateById(shopWithdraw);
             }
             //更新店铺审核中的金额,和提现金额
@@ -357,27 +369,25 @@
             shop.setWithdrawMoney(shop.getWithdrawMoney().add(shopWithdraw.getMoney()));//提现金额
             shopService.updateById(shop);
 
-            JSONObject jsonObject = new JSONObject();
-            jsonObject.put("statusCode", 2001);
-            return jsonObject;
-        }else{
+            return R.ok();
+        }else if (4 == status){
             //回退金额和添加变动明细
-            BigDecimal money = shopWithdraw.getMoney().setScale(2, RoundingMode.HALF_EVEN);
+            BigDecimal withdrawMoney = shopWithdraw.getMoney().setScale(2, RoundingMode.HALF_EVEN);
             Shop shop = shopService.getById(shopWithdraw.getShopId());
             BigDecimal balance = shop.getBalance();
             BigDecimal canWithdrawMoney = shop.getCanWithdrawMoney();
             BigDecimal withdrawAuditMoney = shop.getWithdrawAuditMoney();
-            shop.setBalance(balance.add(money).setScale(2, RoundingMode.HALF_EVEN));
-            shop.setCanWithdrawMoney(canWithdrawMoney.add(money).setScale(2, RoundingMode.HALF_EVEN));
+            shop.setBalance(balance.add(withdrawMoney).setScale(2, RoundingMode.HALF_EVEN));
+            shop.setCanWithdrawMoney(canWithdrawMoney.add(withdrawMoney).setScale(2, RoundingMode.HALF_EVEN));
             //审核中的金额减少
-            shop.setWithdrawAuditMoney(withdrawAuditMoney.subtract(money).setScale(2, RoundingMode.HALF_EVEN));
+            shop.setWithdrawAuditMoney(withdrawAuditMoney.subtract(withdrawMoney).setScale(2, RoundingMode.HALF_EVEN));
             shopService.updateById(shop);
             //添加门店变动明细
             ShopBalanceStatement shopBalanceStatement = new ShopBalanceStatement();
             shopBalanceStatement.setShopId(shop.getId());
             shopBalanceStatement.setType(7);
             shopBalanceStatement.setHistoricalBalance(balance);
-            shopBalanceStatement.setVariableAmount(money);
+            shopBalanceStatement.setVariableAmount(withdrawMoney);
             shopBalanceStatement.setBalance(shop.getBalance());
             shopBalanceStatement.setCreateUserId(shopWithdraw.getAuditUserId());
             shopBalanceStatement.setCreateTime(LocalDateTime.now());
@@ -386,13 +396,12 @@
 
 
             shopWithdraw.setStatus(3);
-            shopWithdraw.setRemark(singlePayCallbackResult.getErrorCodeDesc());
+            shopWithdraw.setRemark(singlePayCallbackResult.getMessage());
             shopWithdrawService.updateById(shopWithdraw);
 
-            JSONObject jsonObject = new JSONObject();
-            jsonObject.put("statusCode", 2001);
-            return jsonObject;
+            return R.ok();
         }
+        return R.ok();
     }
 }
 

--
Gitblit v1.7.1