From 4687e36631bb949bf9fe68f36628781c7e7aafca Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Fri, 06 Feb 2026 14:27:57 +0800
Subject: [PATCH] 1

---
 src/main/java/com/nq/controller/protol/UserWithdrawController.java |   53 ++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 48 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/nq/controller/protol/UserWithdrawController.java b/src/main/java/com/nq/controller/protol/UserWithdrawController.java
index c089075..43e696e 100644
--- a/src/main/java/com/nq/controller/protol/UserWithdrawController.java
+++ b/src/main/java/com/nq/controller/protol/UserWithdrawController.java
@@ -7,6 +7,7 @@
 
 import javax.servlet.http.HttpServletRequest;
 
+import com.nq.vo.pay.OutMoneyVo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,6 +15,9 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 
 @Controller
@@ -34,19 +38,49 @@
         return this.iUserWithdrawService.findUserWithList(withStatus, request, pageNum, pageSize);
     }
 
+    private final Map<String, Long> requestTimestamps = new ConcurrentHashMap<>();
+    private static final long REPEAT_REQUEST_THRESHOLD = 1000;  // 5秒内重复提交视为无效请求
     //用户提现
     @RequestMapping({"outMoney.do"})
     @ResponseBody
-    public ServerResponse outMoney(@RequestParam(value = "amt") String amt,@RequestParam(value = "bankId") String bankId,
+    public ServerResponse outMoney(@RequestParam(value = "amt") String amt,
                                    @RequestParam(value = "assetsType") String accsetType,
+                                   @RequestParam(value = "bankId") String bankId,
+                                   @RequestParam(value = "bankName", required = false) String bankName,
+                                   @RequestParam(value = "bankAddress", required = false) String bankAddress,
+                                   @RequestParam(value = "branchCode", required = false) String branchCode,
+                                   @RequestParam(value = "cardholderName", required = false) String cardholderName,
                                    HttpServletRequest request) {
+
+
+        OutMoneyVo outMoneyVo = new OutMoneyVo();
+        outMoneyVo.setBankNo(bankId);
+        outMoneyVo.setBankName(bankName);
+        outMoneyVo.setBankAddress(bankAddress);
+        outMoneyVo.setBranchCode(branchCode);
+        outMoneyVo.setCardholderName(cardholderName);
+
         ServerResponse serverResponse = null;
         User user = this.iUserService.getCurrentRefreshUser(request);
+
+
+        String requestId = user.getId() + "_" + amt + "_" + bankId;
+
+        // 检查是否在短时间内重复请求
+        if (isDuplicateRequest(requestId)) {
+            return ServerResponse.createByErrorMsg("重复提交,请稍后再试。!",request);
+        }
+
+        // 更新请求时间戳
+        requestTimestamps.put(requestId, System.currentTimeMillis());
+
         try {
-            if (!isIntegerGreaterThan100(amt)) {
-                return ServerResponse.createByErrorMsg("请输入整数!",request);
+//            if (!isIntegerGreaterThan100(amt)) {
+//                return ServerResponse.createByErrorMsg("请输入整数!",request);
+//            }
+            synchronized (user.getId()){
+                serverResponse = this.iUserWithdrawService.outMoney(outMoneyVo,amt, user.getWithPwd(), accsetType,request);
             }
-            serverResponse = this.iUserWithdrawService.outMoney(amt, user.getWithPwd(), accsetType,bankId,request);
         } catch (Exception e) {
             log.error("出金异常 e = {}", e);
             serverResponse = ServerResponse.createByErrorMsg("提现异常,请稍后再试",request);
@@ -54,11 +88,20 @@
         return serverResponse;
     }
 
+    private boolean isDuplicateRequest(String requestId) {
+        Long lastRequestTime = requestTimestamps.get(requestId);
+        if (lastRequestTime == null) {
+            return false;  // 如果没有该请求记录,认为是首次请求
+        }
+        // 如果请求时间小于设定的时间窗口,则视为重复请求
+        return System.currentTimeMillis() - lastRequestTime < REPEAT_REQUEST_THRESHOLD;
+    }
+
     // 判断字符串是否是整数且大于100
     public static boolean isIntegerGreaterThan100(String str) {
         try {
             int number = Integer.parseInt(str);  // 尝试将字符串转换为整数
-            return number > 100;  // 判断是否大于100
+            return number >= 100;  // 判断是否大于100
         } catch (NumberFormatException e) {
             return false;  // 如果转换失败,说明不是整数
         }

--
Gitblit v1.9.3