package com.nq.controller.protol;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
import com.google.common.collect.Maps;
|
import com.google.gson.Gson;
|
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.utils.translate.GoogleTranslateUtil;
|
import com.nq.vo.stock.UserStockSubscribeAddIn;
|
import org.apache.ibatis.annotations.Property;
|
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.*;
|
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
|
IUserIndexPositionService iUserIndexPositionService;
|
|
@Autowired
|
IUserFuturesPositionService iUserFuturesPositionService;
|
|
@Autowired
|
IUserStockSubscribeService iUserStockSubscribeService;
|
@Autowired
|
IStockSubscribeService iStockSubscribeService;
|
@Autowired
|
UserPendingorderService userPendingorderService;
|
|
@Autowired
|
IRateServices rateServices;
|
|
@Autowired
|
IUserRechargeService iUserRechargeService;
|
|
@Autowired
|
PayServiceImpl payService;
|
|
@Autowired
|
IApplyLeverServices iApplyLeverServices;
|
|
@Autowired
|
IUserWithdrawService iUserWithdrawService;
|
|
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"})
|
@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,String vaildNumber ,String img1key, String img2key, String img3key, HttpServletRequest request) {
|
return this.iUserService.auth(realName, idCard, 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({"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) {
|
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) {
|
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);
|
}
|
}
|