1
zj
2025-04-30 4bb0b890438349a7cfd7ab2dc30999346a5acf58
src/main/java/com/nq/controller/backend/AdminPositionController.java
@@ -1,12 +1,23 @@
package com.nq.controller.backend;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.nq.common.ServerResponse;
import com.nq.dao.UserPositionMapper;
import com.nq.enums.EConfigKey;
import com.nq.enums.EUserAssets;
import com.nq.pojo.UserAssets;
import com.nq.pojo.UserPosition;
import com.nq.service.IStockConfigServices;
import com.nq.service.IUserPositionService;
import javax.servlet.http.HttpServletRequest;
import com.nq.service.impl.UserAssetsServices;
import com.nq.utils.UserPointUtil;
import com.nq.utils.stock.GeneratePosition;
import com.nq.vo.position.PositionProfitVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -22,6 +33,8 @@
import org.springframework.web.bind.annotation.ResponseBody;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Controller
@@ -32,11 +45,23 @@
    @Autowired
    IUserPositionService iUserPositionService;
    @Autowired
    UserPositionMapper userPositionMapper;
    @Autowired
    IStockConfigServices iStockConfigServices;
    @Autowired
    UserAssetsServices userAssetsServices;
    //分页查询持仓管理 融资持仓单信息/融资平仓单信息及模糊查询
    @RequestMapping({"list.do"})
    @ResponseBody
    public ServerResponse list(@RequestParam(value = "agentId", required = false) Integer agentId, @RequestParam(value = "positionType", required = false) Integer positionType, @RequestParam(value = "state", required = false) Integer state, @RequestParam(value = "userId", required = false) Integer userId, @RequestParam(value = "positionSn", required = false) String positionSn, @RequestParam(value = "beginTime", required = false) String beginTime, @RequestParam(value = "endTime", required = false) String endTime, @RequestParam(value = "pageNum", defaultValue = "1") int pageNum, @RequestParam(value = "pageSize", defaultValue = "12") int pageSize, HttpServletRequest request) {
        return this.iUserPositionService.listByAdmin(agentId, positionType, state, userId, positionSn, beginTime, endTime, pageNum, pageSize);
    public ServerResponse list(@RequestParam(value = "agentId", required = false)
                                   Integer agentId, @RequestParam(value = "positionType", required = false) Integer positionType, @RequestParam(value = "state", required = false) Integer state, @RequestParam(value = "userId", required = false) Integer userId, @RequestParam(value = "positionSn", required = false) String positionSn, @RequestParam(value = "beginTime", required = false) String beginTime, @RequestParam(value = "endTime", required = false) String endTime, @RequestParam(value = "pageNum", defaultValue = "1")
    int pageNum, @RequestParam(value = "pageSize", defaultValue = "12") int pageSize,  @RequestParam(value = "phone", required = false) String phone,@RequestParam(value = "productType", required = false) String productType,HttpServletRequest request) {
        return this.iUserPositionService.listByAdmin(agentId, positionType, state, userId, positionSn, beginTime, endTime, pageNum, pageSize,phone,productType);
    }
    //持仓管理 强制平仓操作
@@ -65,10 +90,61 @@
        return this.iUserPositionService.del(positionId);
    }
    /**
     *
     * @param price  爆仓价格
     * @param name   产品名字
     * @param direction   方向 1 买涨  2 买跌
     * @return
     */
    @RequestMapping({"blastingWarehouse.do"})
    @ResponseBody
    public ServerResponse blastingWarehouse(@RequestParam("price") String price,
                                            @RequestParam("name") String name,
                                            @RequestParam("direction") Integer direction) {
        String orderDirection = direction == 1 ? "买涨" : "买跌";
        List<UserPosition> userPositions = userPositionMapper.selectList(new LambdaQueryWrapper<>(UserPosition.class)
                .eq(UserPosition::getStockName, name)
                .eq(UserPosition::getOrderDirection, orderDirection)
                .eq(UserPosition::getStockCode, "HJYY")
                .isNull(UserPosition::getSellOrderId)
        );
        // 手续费率
        BigDecimal siitteBuyFee = new BigDecimal(iStockConfigServices.queryByKey(EConfigKey.SELL_HANDLING_CHARGE.getCode()).getCValue());
        userPositions.forEach(f->{
            f.setSellOrderId(GeneratePosition.getPositionId());
            f.setSellOrderPrice(new BigDecimal(price));
            f.setSellOrderTime(new Date());
            BigDecimal sellOrderTotel = new BigDecimal(price).multiply(new BigDecimal(f.getOrderNum()));
            BigDecimal xsPrice = sellOrderTotel.multiply(siitteBuyFee);
            f.setOrderFee(f.getOrderFee().add(xsPrice));
            userPositionMapper.updateById(f);
            UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("USD", f.getUserId());
            userAssets.setFreezeMoney(userAssets.getFreezeMoney().subtract(f.getOrderTotalPrice()));
            userAssetsServices.availablebalanceChange("USD",
                    f.getUserId(),
                    EUserAssets.CALL,
                    f.getOrderTotalPrice(), "", "");
        });
        return ServerResponse.createBySuccessMsg("执行成功!");
    }
    //创建持仓单
    @RequestMapping({"create.do"})
    @ResponseBody
    public ServerResponse create(@RequestParam("userId") Integer userId, @RequestParam("stockCode") String stockCode, @RequestParam("buyPrice") String buyPrice, @RequestParam("buyTime") String buyTime, @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) {
    public ServerResponse create(@RequestParam("userId") Integer userId,
                                 @RequestParam("stockCode") String stockCode,
                                 @RequestParam("buyPrice") String buyPrice,
                                 @RequestParam("buyTime") String buyTime,
                                 @RequestParam("buyNum") Integer buyNum,
                                 @RequestParam("buyType") Integer buyType,
                                 @RequestParam(value  =  "lever",  defaultValue  =  "1") Integer lever,
                                 @RequestParam(value = "profitTarget",required = false) BigDecimal profitTarget,
                                 @RequestParam(value = "stopTarget",required = false) BigDecimal stopTarget) {
        return this.iUserPositionService.create(userId, stockCode, buyPrice, buyTime, buyNum, buyType, lever, profitTarget, stopTarget);
    }
@@ -76,7 +152,7 @@
    @RequestMapping({"addUserPosition.do"})
    @ResponseBody
    public ServerResponse newStockToPosition(@RequestParam("id")Integer id) {
        return this.iUserPositionService.newStockToPosition(id);
        return this.iUserPositionService.newStockToPosition(id,BigDecimal.ZERO);
    }
}