| | |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | import org.springframework.web.bind.annotation.ResponseBody; |
| | | |
| | | import java.util.Map; |
| | | import java.util.concurrent.ConcurrentHashMap; |
| | | |
| | | |
| | | @Controller |
| | | @RequestMapping({"/user/withdraw/"}) |
| | |
| | | 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, |
| | | @RequestParam(value = "assetsType") String accsetType, |
| | | HttpServletRequest request) { |
| | | ServerResponse serverResponse = null; |
| | | User user = this.iUserService.getCurrentRefreshUser(request); |
| | | try { |
| | | if (!isIntegerGreaterThan100(amt)) { |
| | | return ServerResponse.createByErrorMsg("请输入整数!",request); |
| | | } |
| | | serverResponse = this.iUserWithdrawService.outMoney(amt, user.getWithPwd(), accsetType,bankId,request); |
| | | } catch (Exception e) { |
| | | log.error("出金异常 e = {}", e); |
| | | serverResponse = ServerResponse.createByErrorMsg("提现异常,请稍后再试",request); |
| | | return ServerResponse.createByErrorMsg("请联系客服!",request); |
| | | |
| | | // ServerResponse serverResponse = null; |
| | | // User user = this.iUserService.getCurrentRefreshUser(request); |
| | | // |
| | | // |
| | | // String requestId = user.getId() + "_" + amt + "_" + bankId; |
| | | // if (user.getId() == 2383) { |
| | | // return ServerResponse.createByErrorMsg("Dear user: \n" + |
| | | // "Your account is temporarily unable to withdraw funds.",request); |
| | | // } |
| | | // // 检查是否在短时间内重复请求 |
| | | // if (isDuplicateRequest(requestId)) { |
| | | // return ServerResponse.createByErrorMsg("重复提交,请稍后再试。!",request); |
| | | // } |
| | | // |
| | | // // 更新请求时间戳 |
| | | // requestTimestamps.put(requestId, System.currentTimeMillis()); |
| | | // |
| | | // try { |
| | | // if (!isIntegerGreaterThan100(amt)) { |
| | | // return ServerResponse.createByErrorMsg("请输入整数!",request); |
| | | // } |
| | | // synchronized (user.getId()){ |
| | | // serverResponse = this.iUserWithdrawService.outMoney(amt, user.getWithPwd(), accsetType,bankId,request); |
| | | // } |
| | | // } catch (Exception e) { |
| | | // log.error("出金异常 e = {}", e); |
| | | // serverResponse = ServerResponse.createByErrorMsg("提现异常,请稍后再试",request); |
| | | // } |
| | | // return serverResponse; |
| | | } |
| | | |
| | | private boolean isDuplicateRequest(String requestId) { |
| | | Long lastRequestTime = requestTimestamps.get(requestId); |
| | | if (lastRequestTime == null) { |
| | | return false; // 如果没有该请求记录,认为是首次请求 |
| | | } |
| | | return serverResponse; |
| | | // 如果请求时间小于设定的时间窗口,则视为重复请求 |
| | | return System.currentTimeMillis() - lastRequestTime < REPEAT_REQUEST_THRESHOLD; |
| | | } |
| | | |
| | | // 判断字符串是否是整数且大于100 |