1
zj
2025-04-30 4bb0b890438349a7cfd7ab2dc30999346a5acf58
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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;
 
import org.springframework.beans.factory.annotation.Autowired;
 
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 java.math.BigDecimal;
import java.util.Date;
import java.util.List;
 
 
@Controller
@RequestMapping({"/admin/position/"})
public class AdminPositionController {
    private static final Logger log = LoggerFactory.getLogger(AdminPositionController.class);
 
    @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,  @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);
    }
 
    //持仓管理 强制平仓操作
    @RequestMapping({"sell.do"})
    @ResponseBody
    public ServerResponse sell(String positionSn) throws Exception {
        ServerResponse serverResponse = null;
        try {
            serverResponse = this.iUserPositionService.sell(positionSn, 0);
        } catch (Exception e) {
            log.error("强制平仓 异常信息 = {}", e);
        }
        return serverResponse;
    }
 
    //锁仓/解仓操作
    @RequestMapping({"lock.do"})
    @ResponseBody
    public ServerResponse lock(@RequestParam("positionId") Integer positionId, @RequestParam("state") Integer state, @RequestParam(value = "lockMsg", required = false) String lockMsg) {
        return this.iUserPositionService.lock(positionId, state, lockMsg);
    }
 
    @RequestMapping({"del.do"})
    @ResponseBody
    public ServerResponse del(@RequestParam("positionId") Integer positionId) {
        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(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);
    }
 
    //新股转持仓
    @RequestMapping({"addUserPosition.do"})
    @ResponseBody
    public ServerResponse newStockToPosition(@RequestParam("id")Integer id) {
        return this.iUserPositionService.newStockToPosition(id,BigDecimal.ZERO);
    }
 
}