1
zj
2025-04-30 4bb0b890438349a7cfd7ab2dc30999346a5acf58
src/main/java/com/nq/controller/protol/UserController.java
@@ -6,7 +6,9 @@
import com.google.common.collect.Maps;
import com.nq.common.ServerResponse;
import com.nq.dao.StockConfigMapper;
import com.nq.dao.UserPositionMapper;
import com.nq.enums.EStockType;
import com.nq.enums.EUserAssets;
import com.nq.pojo.*;
import com.nq.service.*;
import com.nq.utils.PropertiesUtil;
@@ -17,6 +19,7 @@
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@@ -72,6 +75,9 @@
    @Autowired
    StockConfigMapper stockConfigMapper;
    @Autowired
    UserPositionMapper userPositionMapper;
    private static final ThreadLocal<Boolean> orderCreated = ThreadLocal.withInitial(() -> false);
    private final Lock lock = new ReentrantLock();
@@ -178,10 +184,39 @@
    //用户平仓操作
    @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);
    public ServerResponse sell(HttpServletRequest request, @RequestParam("positionSn") String positionSn,
                               @RequestParam("number") Integer number,
                               @RequestParam(value = "targetPrice", required = false) String targetPrice
    ) {
            return this.iUserPositionService.sell(positionSn,1,number,targetPrice,request);
    }
    //用户仓位查询
    @RequestMapping({"getPosition.do"})
    @ResponseBody
    public ServerResponse getPosition(HttpServletRequest request, @RequestParam("stock") String stock,
                                      @RequestParam("stockType") Integer stockType) {
        User user = this.iUserService.getCurrentRefreshUser(request);
        if (user == null) {
            return ServerResponse.createByErrorMsg("请重新登录",request);
        }
        LambdaQueryWrapper<UserPosition> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(UserPosition::getUserId, user.getId());
        queryWrapper.isNull(UserPosition::getSellOrderId);
        if (stockType == 1) {
            queryWrapper.eq(UserPosition::getStockName, stock);
        } else {
            queryWrapper.eq(UserPosition::getStockCode, stock);
        }
        try {
            UserPosition userPosition = userPositionMapper.selectOne(queryWrapper);
            return ServerResponse.createBySuccess(userPosition);
        }catch (Exception e){
            log.error("用户仓位查询失败",e.getMessage());
        }
        return ServerResponse.createByErrorMsg("当前产品有多个持仓方向,不支持挂单操作!",request);
    }
    //一键用户平仓操作
    @RequestMapping({"allsell.do"})
@@ -249,7 +284,15 @@
                if(ObjectUtil.isNotEmpty(userPendingorder)){
                    userPendingorder.setPositionType(2);
                }
                if(userPendingorder.getHangingOrderType() == 2){
                    userPendingorderService.updateById(userPendingorder);
                    return ServerResponse.createBySuccess("撤销挂单成功",request);
                }
                userPendingorderService.updateById(userPendingorder);
                iUserAssetsServices.availablebalanceChange(userPendingorder.getStockGid().equals("ST") ? userPendingorder.getStockGid() : "USD",
                        userPendingorder.getUserId(),
                        EUserAssets.CLOSE_POSITION_RETURN_SECURITY_DEPOSIT,
                        userPendingorder.getOrderTotalPrice(), "", "");
                return ServerResponse.createBySuccess("撤销挂单成功",request);
            }
        } catch (Exception e) {