1
zj
2024-07-07 38a92bc8a3eb615ed3a93381e1a24891de45e9f9
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
package com.nq.controller;
 
import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nq.common.ServerResponse;
import com.nq.dao.*;
import com.nq.enums.EStockType;
import com.nq.enums.EUserAssets;
import com.nq.pojo.*;
import com.nq.service.IPriceServices;
import com.nq.service.IUserService;
import com.nq.service.UserPositionCheckDzService;
import com.nq.service.impl.UserAssetsServices;
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 javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
 
/**
 * @program: dabaogp
 * @description: 大宗交易审核
 * @create: 2024-07-02 14:33
 **/
@Controller
@RequestMapping({"/api/dzCheck/"})
public class UserPositionCheckDzController {
 
    @Autowired
    UserPositionCheckDzService service;
 
    @Autowired
    UserPositionCheckDzMapper mapper;
 
    @Autowired
    UserPositionMapper userPositionMapper;
 
    @Autowired
    UserAssetsServices userAssetsServices;
 
    @Autowired
    UserMapper userMapper;
 
    @Autowired
    IPriceServices priceServices;
 
    @Autowired
    StockDzMapper stockDzMapper;
 
    //大宗交易审核列表
    @RequestMapping({"getList.do"})
    @ResponseBody
    public ServerResponse getList(@RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
                                  @RequestParam(value = "pageSize", defaultValue = "15") int pageSize,
                                  @RequestParam(value = "type", required = false) Integer type,
                                  @RequestParam(value = "stockCode", required = false) String stockCode) {
        Page<UserPositionCheckDz> page = Page.of(pageNum, pageSize);
        LambdaQueryWrapper<UserPositionCheckDz> queryWrapper = new LambdaQueryWrapper<UserPositionCheckDz>();
 
        // 判断type是否为空,不为空则加入查询条件
        if (type != null) {
            queryWrapper.eq(UserPositionCheckDz::getCheckType, type);
        }
 
        // 判断stockCode是否为空,不为空则加入查询条件
        if (stockCode != null) {
            queryWrapper.eq(UserPositionCheckDz::getStockCode, stockCode);
        }
        queryWrapper.orderByDesc(UserPositionCheckDz::getBuyOrderTime);
        Page<UserPositionCheckDz> pageList = service.page(page, queryWrapper);
        return ServerResponse.createBySuccess(pageList);
    }
 
    //大宗审核
    @RequestMapping({"check.do"})
    @ResponseBody
    public ServerResponse check(@RequestParam(value = "id") Integer id,
                                @RequestParam(value = "checkType") Integer checkType,
                                @RequestParam(value = "orderNum") Integer orderNum) {
        if(checkType != 2 && (id == null || checkType == null || orderNum == null)){
            return ServerResponse.createByErrorMsg("参数不能为空");
        }
        UserPositionCheckDz userPositionCheckDz = service.getById(id);
        if(userPositionCheckDz == null){
            return ServerResponse.createByErrorMsg("订单不存在");
        }
        if(userPositionCheckDz.getCheckType() != 0){
            return ServerResponse.createByErrorMsg("订单已审核");
        }
        if(checkType == 2){
            userPositionCheckDz.setCheckType(checkType);
            service.updateById(userPositionCheckDz);
            return ServerResponse.createBySuccess("审核成功");
        }
        User user = userMapper.selectById(userPositionCheckDz.getUserId());
 
        StockDz stockDz = this.stockDzMapper.selectOne(new QueryWrapper<StockDz>().eq("id", userPositionCheckDz.getDzId()));
 
        UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("IN", user.getId());
        if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){
            return ServerResponse.createByErrorMsg("用户账户有待补资金未补齐,审核失败");
        }
 
        BigDecimal nowPrice = stockDz.getNowPrice();
 
        if (nowPrice.compareTo(new BigDecimal("0")) == 0) {
            return ServerResponse.createByErrorMsg("股票价格0,请重试");
        }
        userPositionCheckDz.setOrderNum(orderNum);
        userPositionCheckDz.setOrderTotalPrice(nowPrice.multiply(new BigDecimal(orderNum.intValue())));
        BigDecimal buyAmt = nowPrice.multiply(new BigDecimal(userPositionCheckDz.getOrderNum()));
        BigDecimal fundratio = new BigDecimal(user.getFundRatio()).divide(new BigDecimal(100));
        BigDecimal availableBalance = fundratio.multiply(userAssets.getAvailableBalance());
        if (buyAmt.compareTo(availableBalance) > 0) {
            return ServerResponse.createByErrorMsg("订单失败,配资不足");
        }
        userPositionCheckDz.setCheckType(checkType);
        service.updateById(userPositionCheckDz);
        UserPosition userPosition = Convert.convert(UserPosition.class, userPositionCheckDz);
        userPosition.setBuyOrderPrice(nowPrice);
        userPosition.setId(null);
        userPositionMapper.insert(userPosition);
        userAssetsServices.availablebalanceChange(EStockType.IN.getCode(), user.getId(), EUserAssets.BUY, buyAmt.negate(),"","");
        return ServerResponse.createBySuccessMsg("审核成功,订单已转客户持仓");
    }
}