1
zj
2024-10-11 5f97f550b3fb60ac2142d7ca3c78d6bd04f18b80
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
package com.nq.service.impl;
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.nq.dao.UserPositionMapper;
import com.nq.enums.EStockType;
import com.nq.pojo.StockRealTimeBean;
import com.nq.pojo.UserPosition;
import com.nq.service.IMandatoryLiquidationService;
import com.nq.utils.redis.RedisKeyUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
 
@Service
public class MandatoryLiquidationService implements IMandatoryLiquidationService {
 
 
    @Resource
    UserPositionMapper userPositionMapper;
 
    @Transactional
    @Override
    public void RealTimeDataProcess(EStockType eStockType, StockRealTimeBean timeBean) {
        QueryWrapper<UserPosition>  upQuery  = new QueryWrapper<>();
        upQuery.eq("stock_code",timeBean.getPid());
        upQuery.isNotNull("sell_order_id");
        // 查询未平仓的价格
        List<UserPosition> userPositionList =  userPositionMapper.selectList(upQuery);
        for (int i = 0; i <userPositionList.size() ; i++) {
            UserPosition userPosition = userPositionList.get(i);
            BigDecimal bigDecimal =    new BigDecimal(timeBean.getLast()).subtract(userPosition.getBuyOrderPrice())
                    .multiply(new BigDecimal(userPosition.getOrderNum()));
            if(!userPosition.getOrderDirection().equals("买涨")){
                bigDecimal =  bigDecimal.negate();
            }
            userPosition.setProfitAndLose(bigDecimal);
            userPosition.setAllProfitAndLose(bigDecimal);
            userPositionMapper.updateById(userPosition);
        }
 
 
        RedisKeyUtil.setCacheRealTimeStock(eStockType,timeBean);
 
    }
}