| | |
| | | |
| | | import com.google.common.collect.Maps; |
| | | import com.nq.common.ServerResponse; |
| | | import com.nq.pojo.StockSubscribe; |
| | | import com.nq.pojo.UserStockSubscribe; |
| | | 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 org.apache.ibatis.annotations.Property; |
| | | import com.nq.vo.stock.UserStockSubscribeAddIn; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | 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 org.springframework.web.bind.annotation.*; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | @Controller |
| | |
| | | IFileUploadService iFileUploadService; |
| | | |
| | | @Autowired |
| | | IUserIndexPositionService iUserIndexPositionService; |
| | | |
| | | @Autowired |
| | | IUserFuturesPositionService iUserFuturesPositionService; |
| | | |
| | | @Autowired |
| | | IUserStockSubscribeService iUserStockSubscribeService; |
| | | @Autowired |
| | | IStockSubscribeService iStockSubscribeService; |
| | | @Autowired |
| | | UserPendingorderService userPendingorderService; |
| | | |
| | | @Autowired |
| | | IRateServices rateServices; |
| | | |
| | | @Autowired |
| | | PayServiceImpl payService; |
| | | |
| | | @Autowired |
| | | IApplyLeverServices iApplyLeverServices; |
| | | |
| | | private static final ThreadLocal<Boolean> orderCreated = ThreadLocal.withInitial(() -> false); |
| | | private final Lock lock = new ReentrantLock(); |
| | | |
| | | private static final ThreadLocal<Boolean> buyOrderCreated = ThreadLocal.withInitial(() -> false); |
| | | private final Lock buyLock = new ReentrantLock(); |
| | | |
| | | private static final ThreadLocal<Boolean> payCreated = ThreadLocal.withInitial(() -> false); |
| | | private final Lock payLock = new ReentrantLock(); |
| | | |
| | | //添加到自选股 |
| | | @RequestMapping({"addOption.do"}) |
| | |
| | | @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; |
| | | BigDecimal profitTarget,@RequestParam(value = "stopLoss",required = false) BigDecimal stopLoss, HttpServletRequest request) { |
| | | buyLock.lock(); |
| | | try { |
| | | serverResponse = this.iUserPositionService.buy(stockId, buyNum, buyType, lever,profitTarget,stopTarget, request); |
| | | if (buyOrderCreated.get()) { |
| | | return ServerResponse.createByErrorMsg("当前下单人数过多,请稍后重试", request); |
| | | } |
| | | buyOrderCreated.set(true); |
| | | return this.iUserPositionService.buy(stockId, buyNum, buyType, lever,profitTarget,stopLoss, request); |
| | | } catch (Exception e) { |
| | | log.error("用户下单操作 = {}", e); |
| | | e.printStackTrace(); |
| | | return ServerResponse.createByErrorMsg("订单异常,请稍后重试", request); |
| | | } finally{ |
| | | buyLock.unlock(); |
| | | buyOrderCreated.set(false); |
| | | } |
| | | return serverResponse; |
| | | } |
| | | //修改涨跌板 |
| | | @RequestMapping({"updateProfitTarget.do"}) |
| | |
| | | //用户平仓操作 |
| | | @RequestMapping({"sell.do"}) |
| | | @ResponseBody |
| | | public ServerResponse sell(HttpServletRequest request, @RequestParam("positionSn") String positionSn) { |
| | | try { |
| | | return this.iUserPositionService.sell(positionSn, 1); |
| | | } catch (Exception e) { |
| | | return ServerResponse.createByErrorMsg("Sell Fail"); |
| | | } |
| | | public ServerResponse sell(HttpServletRequest request, @RequestParam("positionSn") String positionSn,@RequestParam("number") Integer number) { |
| | | return this.iUserPositionService.sell(positionSn,1,number,request); |
| | | } |
| | | |
| | | |
| | |
| | | try { |
| | | return this.iUserPositionService.allSell(request,positionSn); |
| | | } catch (Exception e) { |
| | | return ServerResponse.createByErrorMsg("Sell Fail"); |
| | | return ServerResponse.createByErrorMsg("Sell Fail",request); |
| | | } |
| | | } |
| | | |
| | |
| | | return serverResponse; |
| | | } |
| | | |
| | | @RequestMapping({"buyIndex.do"}) |
| | | @ResponseBody |
| | | public ServerResponse buyIndex(@RequestParam("indexId") Integer indexId, @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.iUserIndexPositionService.buyIndex(indexId, buyNum, buyType, lever,profitTarget,stopTarget, request); |
| | | } catch (Exception e) { |
| | | log.error("用户下单指数操作 = {}", e); |
| | | } |
| | | return serverResponse; |
| | | } |
| | | |
| | | @RequestMapping({"sellIndex.do"}) |
| | | @ResponseBody |
| | | public ServerResponse sellIndex(HttpServletRequest request, @RequestParam("positionSn") String positionSn) { |
| | | ServerResponse serverResponse = null; |
| | | try { |
| | | serverResponse = this.iUserIndexPositionService.sellIndex(positionSn, 1); |
| | | } catch (Exception e) { |
| | | log.error("用户平仓指数操作 = {}", e); |
| | | } |
| | | return serverResponse; |
| | | } |
| | | |
| | | //期货交易 用户下单 |
| | | @RequestMapping({"buyFutures.do"}) |
| | | @ResponseBody |
| | | public ServerResponse buyFutures(@RequestParam("FuturesId") Integer FuturesId, @RequestParam("buyNum") Integer buyNum, @RequestParam("buyType") Integer buyType, @RequestParam("lever") Integer lever, HttpServletRequest request) { |
| | | ServerResponse serverResponse = null; |
| | | try { |
| | | serverResponse = this.iUserFuturesPositionService.buyFutures(FuturesId, buyNum, buyType, lever, request); |
| | | } catch (Exception e) { |
| | | log.error("用户下单 期货 操作 = {}", e); |
| | | } |
| | | return serverResponse; |
| | | } |
| | | |
| | | @RequestMapping({"sellFutures.do"}) |
| | | @ResponseBody |
| | | public ServerResponse sellFutures(HttpServletRequest request, @RequestParam("positionSn") String positionSn) { |
| | | ServerResponse serverResponse = null; |
| | | try { |
| | | serverResponse = this.iUserFuturesPositionService.sellFutures(positionSn, 1); |
| | | } catch (Exception e) { |
| | | log.error("用户平仓 期货 操作 = {}", e); |
| | | } |
| | | return serverResponse; |
| | | } |
| | | |
| | | @Autowired |
| | | IUserRechargeService iUserRechargeService; |
| | | |
| | | |
| | | //查询 用户信息 |
| | | @RequestMapping({"getUserInfo.do"}) |
| | |
| | | return serverResponse; |
| | | } |
| | | |
| | | //资产互转 |
| | | @RequestMapping({"transAmt.do"}) |
| | | /** |
| | | * 新股列表 |
| | | * @param pageNum |
| | | * @param pageSize |
| | | * @param request |
| | | * @return |
| | | */ |
| | | @RequestMapping({"getStockSubscribeList.do"}) |
| | | @ResponseBody |
| | | public ServerResponse transAmt(@RequestParam("amt") Integer amt, @RequestParam("type") Integer type, HttpServletRequest request) { |
| | | return this.iUserService.transAmt(amt, type, request); |
| | | 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); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 用户新股列表 |
| | |
| | | */ |
| | | @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, HttpServletRequest request) { |
| | | return this.iStockSubscribeService.list(name,code,zt,isLock,type,request); |
| | | 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); |
| | | } |
| | | /** |
| | | * 新股申购 添加 |
| | |
| | | */ |
| | | @RequestMapping({"add.do"}) |
| | | @ResponseBody |
| | | public ServerResponse add(UserStockSubscribe model,HttpServletRequest request) throws Exception { |
| | | 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, HttpServletRequest request) { |
| | | return this.iUserStockSubscribeService.getOneSubscribeByUserId(type,request); |
| | | 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); |
| | | } |
| | | |
| | | /*新股申购-用户提交金额*/ |
| | |
| | | @ResponseBody |
| | | public ServerResponse transfer(@RequestParam("fromType") String fromType, @RequestParam("toType") String toType, |
| | | @RequestParam("amt") String amt, HttpServletRequest request) { |
| | | ServerResponse serverResponse = null; |
| | | try { |
| | | serverResponse = this.iUserService.transfer(fromType, toType, amt,request); |
| | | } catch (Exception e) { |
| | | log.error("vip抢筹下单操作出错 = {}", e); |
| | | if (fromType.equals(toType)) { |
| | | return ServerResponse.createByErrorMsg("货币类型不能相同", request); |
| | | } |
| | | return serverResponse; |
| | | return iUserService.transfer(fromType, toType, amt,request); |
| | | } |
| | | |
| | | |
| | |
| | | */ |
| | | @RequestMapping({"buyStockDz.do"}) |
| | | @ResponseBody |
| | | public ServerResponse buyDz(@RequestParam("stockCode") String stockCode, @RequestParam("password") String password,@RequestParam("num") Integer num, HttpServletRequest request) throws Exception { |
| | | return this.iUserPositionService.buyDz(stockCode, password, num, request); |
| | | 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"}) |
| | |
| | | } |
| | | |
| | | |
| | | //大宗下单列表 |
| | | |
| | | @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) { |
| | | 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); |
| | | } |
| | | } |