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);
|
|
}
|
}
|