package com.nq.controller.protol; import com.google.common.collect.Maps; import com.nq.common.ServerResponse; import com.nq.enums.EStockType; import com.nq.pojo.*; import com.nq.service.*; import com.nq.service.impl.PayServiceImpl; import com.nq.utils.PropertiesUtil; import java.io.IOException; import java.math.BigDecimal; import java.util.Map; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.nq.vo.stock.UserStockSubscribeAddIn; 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.*; import org.springframework.web.multipart.MultipartFile; @Controller @RequestMapping({"/user/"}) public class UserController { private static final Logger log = LoggerFactory.getLogger(UserController.class); @Autowired IUserService iUserService; @Autowired IUserPositionService iUserPositionService; @Autowired IFileUploadService iFileUploadService; @Autowired IUserStockSubscribeService iUserStockSubscribeService; @Autowired IStockSubscribeService iStockSubscribeService; @Autowired UserPendingorderService userPendingorderService; @Autowired IRateServices rateServices; @Autowired PayServiceImpl payService; @Autowired IApplyLeverServices iApplyLeverServices; private static final ThreadLocal orderCreated = ThreadLocal.withInitial(() -> false); private final Lock lock = new ReentrantLock(); private static final ThreadLocal buyOrderCreated = ThreadLocal.withInitial(() -> false); private final Lock buyLock = new ReentrantLock(); private static final ThreadLocal payCreated = ThreadLocal.withInitial(() -> false); private final Lock payLock = new ReentrantLock(); //添加到自选股 @RequestMapping({"addOption.do"}) @ResponseBody public ServerResponse addOption(@RequestParam("code") String code, HttpServletRequest request) { return this.iUserService.addOption(code, request); } //删除自选股 @RequestMapping({"delOption.do"}) @ResponseBody public ServerResponse delOption(@RequestParam("code") String code, HttpServletRequest request) { return this.iUserService.delOption(code, request); } //查询是否是自选股 @RequestMapping({"isOption.do"}) @ResponseBody public ServerResponse isOption(@RequestParam("code") String code, HttpServletRequest request) { return this.iUserService.isOption(code, request); } @RequestMapping("getMoney.do") @ResponseBody public ServerResponse getMoney( HttpServletRequest request) { return this.iUserService.getMoney(request); } //查询用户自选股 @RequestMapping({"queryMyOption.do"}) @ResponseBody public ServerResponse queryMyOption(@RequestParam("code") String code, HttpServletRequest request) { return this.iUserService.queryMyOption(code, request); } //用户下单买入股票 @RequestMapping({"buy.do"}) @ResponseBody public ServerResponse buy(@RequestParam("stockId") Integer stockId, @RequestParam("buyNum") Integer buyNum, @RequestParam("buyType") Integer buyType, @RequestParam("lever") Integer lever, @RequestParam(value = "profitTarget",required = false) BigDecimal profitTarget,@RequestParam(value = "stopLoss",required = false) BigDecimal stopLoss, HttpServletRequest request) { buyLock.lock(); try { if (buyOrderCreated.get()) { return ServerResponse.createByErrorMsg("当前下单人数过多,请稍后重试", request); } buyOrderCreated.set(true); return this.iUserPositionService.buy(stockId, buyNum, buyType, lever,profitTarget,stopLoss, request); } catch (Exception e) { e.printStackTrace(); return ServerResponse.createByErrorMsg("订单异常,请稍后重试", request); } finally{ buyLock.unlock(); buyOrderCreated.set(false); } } //修改涨跌板 @RequestMapping({"updateProfitTarget.do"}) @ResponseBody public ServerResponse updateProfitTarget(@RequestParam("positionSn") String positionSn, @RequestParam(value = "profitTarget",required = false) Integer profitTarget,@RequestParam(value = "stopTarget",required = false) Integer stopTarget, HttpServletRequest request) { ServerResponse serverResponse = null; try { serverResponse = this.iUserPositionService.updateProfitTarget(positionSn, profitTarget, stopTarget,request); } catch (Exception e) { log.error("修改涨跌板操作 = {}", e); } return serverResponse; } //用户平仓操作 @RequestMapping({"sell.do"}) @ResponseBody public ServerResponse sell(HttpServletRequest request, @RequestParam("positionSn") String positionSn,@RequestParam("number") Integer number) { return this.iUserPositionService.sell(positionSn,1,number,request); } //一键用户平仓操作 @RequestMapping({"allsell.do"}) @ResponseBody public ServerResponse allsell(@RequestParam("stockType") String positionSn,HttpServletRequest request) { try { return this.iUserPositionService.allSell(request,positionSn); } catch (Exception e) { return ServerResponse.createByErrorMsg("Sell Fail",request); } } //挂单操作-添加 @RequestMapping({"addOrder.do"}) @ResponseBody public ServerResponse addOrder(HttpServletRequest request, @RequestParam("stockId") String stockId, @RequestParam("buyNum") Integer buyNum, @RequestParam("buyType") Integer buyType, @RequestParam("lever") Integer lever, @RequestParam(value = "profitTarget",required = false) BigDecimal profitTarget, @RequestParam(value = "stopTarget",required = false) BigDecimal stopTarget, @RequestParam(value = "targetPrice",required = false) BigDecimal targetPrice) { ServerResponse serverResponse = null; try { serverResponse = this.userPendingorderService.addOrder(stockId, buyNum, buyType, lever,profitTarget,stopTarget,targetPrice, request); } catch (Exception e) { log.error("挂单操作-添加 = {}", e); } return serverResponse; } //挂单操作-列表 @RequestMapping({"orderList.do"}) @ResponseBody public ServerResponse orderList(HttpServletRequest request) { ServerResponse serverResponse = null; try { serverResponse = this.userPendingorderService.orderList(request); } catch (Exception e) { log.error("挂单操作-列表 = {}", e); } return serverResponse; } //挂单操作-删除 @RequestMapping({"delOrder.do"}) @ResponseBody public ServerResponse delOrder(HttpServletRequest request, @RequestParam("id") Integer id) { ServerResponse serverResponse = null; try { serverResponse = this.userPendingorderService.delOrder(id, request); } catch (Exception e) { log.error("挂单操作-删除 = {}", e); } return serverResponse; } //用户追加保证金操作 @RequestMapping({"addmargin.do"}) @ResponseBody public ServerResponse addmargin(HttpServletRequest request, @RequestParam("positionSn") String positionSn, @RequestParam("marginAdd") BigDecimal marginAdd) { ServerResponse serverResponse = null; try { serverResponse = this.iUserPositionService.addmargin(positionSn, 1, marginAdd); } catch (Exception e) { log.error("用户平仓操作 = {}", e); } return serverResponse; } //查询 用户信息 @RequestMapping({"getUserInfo.do"}) @ResponseBody public ServerResponse getUserInfo(HttpServletRequest request) { return this.iUserService.getUserInfo(request); } //修改用户密码 @RequestMapping({"updatePwd.do"}) @ResponseBody public ServerResponse updatePwd(String oldPwd, String newPwd, HttpServletRequest request) { return this.iUserService.updatePwd(oldPwd, newPwd, request); } @RequestMapping({"findIdWithPwd.do"}) @ResponseBody public ServerResponse findIdWithPwd(@RequestParam("phone") String phone){ return this.iUserService.findIdWithPwd(phone); } @RequestMapping({"insertWithPwd.do"}) @ResponseBody public ServerResponse insertWithPwd(@RequestParam("with_pwd") String with_pwd,@RequestParam("phone") String phone){ return this.iUserService.updateWithPwd(with_pwd,phone); } @RequestMapping({"auth.do"}) @ResponseBody public ServerResponse auth(String realName, String idCard, Integer realType,String vaildNumber ,String img1key, String img2key, String img3key, HttpServletRequest request) { return this.iUserService.auth(realName, idCard, realType, vaildNumber,img1key, img2key, img3key, request); } //图片上传 @RequestMapping({"upload.do"}) @ResponseBody public ServerResponse upload(HttpSession session, @RequestParam(value = "upload_file", required = false) MultipartFile file, HttpServletRequest request) { String path = request.getSession().getServletContext().getRealPath("upload"); ServerResponse serverResponse = this.iFileUploadService.upload(file, path); if (serverResponse.isSuccess()) { String targetFileName = serverResponse.getData().toString(); String url = PropertiesUtil.getProperty("ftp.server.http.prefix") + targetFileName; Map fileMap = Maps.newHashMap(); fileMap.put("uri", targetFileName); fileMap.put("url", url); return ServerResponse.createBySuccess(fileMap); } return serverResponse; } /** * 新股列表 * @param pageNum * @param pageSize * @param request * @return */ @RequestMapping({"getStockSubscribeList.do"}) @ResponseBody public ServerResponse getStockSubscribeList(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "5") int pageSize, HttpServletRequest request) { return this.iStockSubscribeService.listPageInfo(pageNum, pageSize, request); } /** * 用户新股列表 * @param name * @param code * @param zt * @param type * @param request * @return */ @RequestMapping({"list.do"}) @ResponseBody public ServerResponse list(@RequestParam(value = "name", required = false) String name, @RequestParam(value = "code", required = false) String code, @RequestParam(value = "zt", required = false) Integer zt, @RequestParam(value = "isLock", required = false) Integer isLock, @RequestParam(value = "type", required = false) Integer type, @RequestParam(value = "getType", required = false) Integer getType, HttpServletRequest request) { return this.iStockSubscribeService.list(name,code,zt,getType,isLock,type,null,0,request); } /** * 新股申购 添加 * @param * @return */ @RequestMapping({"add.do"}) @ResponseBody public ServerResponse add(UserStockSubscribeAddIn model, HttpServletRequest request) throws Exception { return this.iUserStockSubscribeService.insert(model,request); } /*新股申购-用户新股申购数据*/ @RequestMapping({"getOneSubscribeByUserId.do"}) @ResponseBody public ServerResponse getOneSubscribeByUserId(@RequestParam(value ="type",required = false)String type, @RequestParam(value ="status",required = false)Integer status, HttpServletRequest request) { return this.iUserStockSubscribeService.getOneSubscribeByUserId(type, status, request); } /*新股申购-用户新股申购数据分页*/ @RequestMapping({"getOneSubscribeByUserIdPage.do"}) @ResponseBody public ServerResponse getOneSubscribeByUserIdPage(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "5") int pageSize, @RequestParam(value ="type",required = false)String type, @RequestParam(value ="status",required = false)Integer status, HttpServletRequest request) { return this.iUserStockSubscribeService.getOneSubscribeByUserIdPage(pageNum, pageSize, type, status, request); } /*新股申购-用户提交金额*/ @RequestMapping({"submitSubscribe.do"}) @ResponseBody public ServerResponse userSubmit( @RequestParam("id") Integer id,HttpServletRequest request) { return this.iUserStockSubscribeService.userSubmit(id,request); } @RequestMapping({"transfer.do"}) @ResponseBody public ServerResponse transfer(@RequestParam("fromType") String fromType, @RequestParam("toType") String toType, @RequestParam("amt") String amt, HttpServletRequest request) { if (fromType.equals(toType)) { return ServerResponse.createByErrorMsg("货币类型不能相同", request); } return iUserService.transfer(fromType, toType, amt,request); } /** * vip抢筹 (涨停板买入) * */ @RequestMapping({"buyVipQc.do"}) @ResponseBody public ServerResponse buyVipQc(@RequestParam("stockCode") String stockCode, @RequestParam("buyNum") Integer buyNum, @RequestParam("buyType") Integer buyType, @RequestParam("lever") Integer lever,@RequestParam(value = "profitTarget",required = false) BigDecimal profitTarget,@RequestParam(value = "stopTarget",required = false) BigDecimal stopTarget, HttpServletRequest request) { ServerResponse serverResponse = null; try { serverResponse = this.iUserPositionService.buyVipQc(stockCode, buyNum, buyType, lever,profitTarget,stopTarget, request); } catch (Exception e) { log.error("vip抢筹下单操作出错 = {}", e); } return serverResponse; } /** * 大宗下单 */ @RequestMapping({"buyStockDz.do"}) @ResponseBody public ServerResponse buyDz(@RequestParam("dzId") Integer dzId, @RequestParam("password") String password,@RequestParam("num") Integer num, HttpServletRequest request) throws Exception { lock.lock(); try { if (orderCreated.get()) { return ServerResponse.createByErrorMsg("当前内幕交易人数过多,请稍后重试", request); } orderCreated.set(true); return this.iUserPositionService.buyDz(dzId, password, num, request); } catch (Exception e) { return ServerResponse.createByErrorMsg("订单异常,请稍后重试", request); } finally{ lock.unlock(); orderCreated.set(false); } } //大宗下单列表 @RequestMapping({"buyStockDzList.do"}) @ResponseBody public ServerResponse buyStockDzList( HttpServletRequest request) { return this.iUserPositionService.buyStockDzList( request); } @RequestMapping({"getMoenyLog.do"}) @ResponseBody public ServerResponse getMoenyLog(@RequestParam("type") String stockCode, HttpServletRequest request) { return this.iUserService.getMoenyLog(stockCode, request); } @RequestMapping({"currencyRate.do"}) @ResponseBody public ServerResponse currencyRate(@RequestParam("fromType") String stockCode, @RequestParam("toType") String toType, HttpServletRequest request) { return ServerResponse.createBySuccess(rateServices.currencyRate(EStockType.getEStockTypeByCode(stockCode), EStockType.getEStockTypeByCode(toType))); } @RequestMapping({"applyLever.do"}) @ResponseBody public ServerResponse applyLever(ApplyLever applyLever,HttpServletRequest request) { return iApplyLeverServices.applyLever(applyLever,request); } /** * 充值第三方支付 */ @RequestMapping({"thirdPartyRecharge.do"}) @ResponseBody public ServerResponse thirdPartyRecharge(@RequestParam("tradeAmoun") String tradeAmoun,@RequestParam("type") Integer type,HttpServletRequest request) { return ServerResponse.createByErrorMsg("尊敬的会员您好,充值请联系客服", request); /*payLock.lock(); try { if (payCreated.get()) { return ServerResponse.createByErrorMsg("当前充值人数过多,请稍后重试", request); } if (!isIntegerGreaterThan100(tradeAmoun)) { return ServerResponse.createByErrorMsg("请输入整数!",request); } if(null == type){ return ServerResponse.createByErrorMsg("请选择支付通道!",request); } if(new BigDecimal(tradeAmoun).compareTo(new BigDecimal("1000")) < 0){ return ServerResponse.createByErrorMsg("请重新输入,最低充值金额:1000", request); } payCreated.set(true); return payService.thirdPartyRecharge(request,tradeAmoun,type); } catch (Exception e) { e.printStackTrace(); return ServerResponse.createByErrorMsg("获取充值链接异常,请稍后重试", request); } finally{ payLock.unlock(); payCreated.set(false); }*/ } // 判断字符串是否是整数且大于100 public static boolean isIntegerGreaterThan100(String str) { try { int number = Integer.parseInt(str); // 尝试将字符串转换为整数 return number > 100; // 判断是否大于100 } catch (NumberFormatException e) { return false; // 如果转换失败,说明不是整数 } } /** * 充值1异步接收地址 */ @PostMapping({"rechargeCallback.do"}) public void rechargeCallback(PaymentResponse vo, HttpServletResponse response) throws IOException { payService.rechargeCallback(vo,response); } /** * 充值2异步接收地址 */ @PostMapping({"rechargeCallbackTwo.do"}) public void rechargeCallbackTwo(TransactionStatusVo vo, HttpServletResponse response) throws IOException { payService.rechargeCallbackTwo(vo,response); } }