package com.nq.controller.protol; import com.nq.common.ServerResponse; import com.nq.pojo.User; import com.nq.service.IUserService; import com.nq.service.IUserWithdrawService; import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; 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 @RequestMapping({"/user/withdraw/"}) public class UserWithdrawController { private static final Logger log = LoggerFactory.getLogger(UserWithdrawController.class); @Autowired IUserWithdrawService iUserWithdrawService; @Autowired IUserService iUserService; //分页查询所有提现记录 @RequestMapping({"list.do"}) @ResponseBody public ServerResponse list(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "8") int pageSize, @RequestParam(value = "withStatus", required = false) String withStatus, HttpServletRequest request) { return this.iUserWithdrawService.findUserWithList(withStatus, request, pageNum, pageSize); } private final Map 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) { 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 System.currentTimeMillis() - lastRequestTime < REPEAT_REQUEST_THRESHOLD; } // 判断字符串是否是整数且大于100 public static boolean isIntegerGreaterThan100(String str) { try { int number = Integer.parseInt(str); // 尝试将字符串转换为整数 return number > 100; // 判断是否大于100 } catch (NumberFormatException e) { return false; // 如果转换失败,说明不是整数 } } @RequestMapping({"cancel.do"}) @ResponseBody public ServerResponse userCancel(Integer withId) { return this.iUserWithdrawService.userCancel(withId); } }