package com.xcong.excoin.rabbit.init;
|
|
import cn.hutool.core.collection.CollUtil;
|
import com.alibaba.fastjson.JSONObject;
|
import com.xcong.excoin.common.enumerates.RabbitPriceTypeEnum;
|
import com.xcong.excoin.modules.contract.dao.ContractEntrustOrderDao;
|
import com.xcong.excoin.modules.contract.dao.ContractHoldOrderDao;
|
import com.xcong.excoin.modules.contract.entity.ContractEntrustOrderEntity;
|
import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity;
|
import com.xcong.excoin.modules.member.dao.MemberDao;
|
import com.xcong.excoin.modules.member.entity.MemberEntity;
|
import com.xcong.excoin.rabbit.pricequeue.OrderModel;
|
import com.xcong.excoin.rabbit.producer.OrderProducer;
|
import com.xcong.excoin.utils.CalculateUtil;
|
import com.xcong.excoin.utils.ThreadPoolUtils;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.collections.CollectionUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.context.annotation.DependsOn;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.PostConstruct;
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.util.HashMap;
|
import java.util.List;
|
|
/**
|
* 后台开启 APP不开启
|
*
|
* @author helius
|
*/
|
@Slf4j
|
@DependsOn("springContextHolder")
|
@Component
|
@ConditionalOnProperty(prefix = "app", name = "newest-price-update-job", havingValue = "true")
|
public class OrderProducerInit {
|
|
@Resource
|
private ContractEntrustOrderDao contractEntrustOrderDao;
|
|
@Resource
|
private ContractHoldOrderDao contractHoldOrderDao;
|
|
@Resource
|
private OrderProducer producer;
|
@Resource
|
private MemberDao memberDao;
|
|
@PostConstruct
|
public void initOrder() {
|
log.info("=======初始化未完成订单信息=======");
|
|
// 查询所有未平仓的单
|
List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectAllHoldOrder();
|
// 查询所有未完成的委托单
|
List<ContractEntrustOrderEntity> entrustOrderEntities = contractEntrustOrderDao.selectAllEntrustOrder();
|
|
if (CollectionUtils.isNotEmpty(holdOrderEntities)) {
|
for (ContractHoldOrderEntity order : holdOrderEntities) {
|
// 开多1,开空 2
|
int openingType = order.getOpeningType();
|
// 1:买入委托2:开多3:开空4:平多5:平空6:爆仓平多7:爆仓平空
|
// 9:止盈平多10:止盈平空11:止损平多12:止损平空
|
if (ContractHoldOrderEntity.OPENING_TYPE_MORE == openingType) {
|
// 开多 发送开多止损 止盈 爆仓
|
if (order.getPositionType() == ContractEntrustOrderEntity.POSITION_TYPE_ADD) {
|
// 爆仓价
|
BigDecimal forceSetPrice = order.getForceClosingPrice();
|
if (forceSetPrice != null) {
|
if (forceSetPrice.compareTo(BigDecimal.ZERO) >= 0) {
|
OrderModel model = new OrderModel(order.getId(), RabbitPriceTypeEnum.CLOSE_MORE_BOMB.getValue(), forceSetPrice.toPlainString(),
|
order.getSymbol(), order.getOperateNo(), order.getMemberId());
|
producer.sendPriceOperate(JSONObject.toJSONString(model));
|
}
|
}
|
}
|
// 止损
|
BigDecimal stopLossPrice = order.getStopLossPrice();
|
if (stopLossPrice != null && stopLossPrice.compareTo(BigDecimal.ZERO) > 0) {
|
OrderModel model = new OrderModel(order.getId(), RabbitPriceTypeEnum.CLOSE_MORE_STOP_LESS.getValue(),
|
stopLossPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(),
|
order.getSymbol(), order.getMemberId());
|
producer.sendPriceOperate(JSONObject.toJSONString(model));
|
}
|
// 止盈
|
BigDecimal stopProfitPrice = order.getStopProfitPrice();
|
if (stopProfitPrice != null && stopProfitPrice.compareTo(BigDecimal.ZERO) > 0) {
|
OrderModel model = new OrderModel(order.getId(), RabbitPriceTypeEnum.CLOSE_MORE_STOP_PROFIT.getValue(),
|
stopProfitPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(),
|
order.getSymbol(), order.getMemberId());
|
producer.sendPriceOperate(JSONObject.toJSONString(model));
|
}
|
|
} else {
|
// 开空 发送开空止损 止盈 爆仓
|
// 爆仓价
|
if (order.getPositionType() == ContractEntrustOrderEntity.POSITION_TYPE_ADD) {
|
BigDecimal forceSetPrice = order.getForceClosingPrice();
|
if (forceSetPrice != null) {
|
if (forceSetPrice.compareTo(BigDecimal.ZERO) >= 0) {
|
OrderModel model = new OrderModel(order.getId(), RabbitPriceTypeEnum.CLOSE_LESS_BOMB.getValue(), forceSetPrice.toPlainString(),
|
order.getSymbol(), order.getOperateNo(), order.getMemberId());
|
producer.sendPriceOperate(JSONObject.toJSONString(model));
|
}
|
}
|
}
|
// 止损
|
BigDecimal stopLossPrice = order.getStopLossPrice();
|
if (stopLossPrice != null && stopLossPrice.compareTo(BigDecimal.ZERO) > 0) {
|
OrderModel model = new OrderModel(order.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_LESS.getValue(),
|
stopLossPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(),
|
order.getSymbol(), order.getMemberId());
|
producer.sendPriceOperate(JSONObject.toJSONString(model));
|
}
|
// 止盈
|
BigDecimal stopProfitPrice = order.getStopProfitPrice();
|
if (stopProfitPrice != null && stopProfitPrice.compareTo(BigDecimal.ZERO) > 0) {
|
OrderModel model = new OrderModel(order.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_PROFIT.getValue(),
|
stopProfitPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(),
|
order.getSymbol(), order.getMemberId());
|
producer.sendPriceOperate(JSONObject.toJSONString(model));
|
}
|
}
|
|
}
|
}
|
|
// 全仓持仓
|
List<Long> wholeHoldOrders = contractHoldOrderDao.selectAllWholeOrderMemberId();
|
if (CollUtil.isNotEmpty(wholeHoldOrders)) {
|
for (Long memberId : wholeHoldOrders) {
|
ThreadPoolUtils.sendWholePrice(memberId);
|
}
|
}
|
|
if (CollectionUtils.isNotEmpty(entrustOrderEntities)) {
|
for (ContractEntrustOrderEntity order : entrustOrderEntities) {
|
// 开多1,开空 2
|
int entrustType = order.getEntrustType();
|
// 开多
|
BigDecimal entrustPrice = order.getEntrustPrice();
|
OrderModel model;
|
if (ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_MORE == entrustType) {
|
// 开多委托
|
model = new OrderModel(order.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_MORE.getValue(),
|
entrustPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(),
|
order.getSymbol(), order.getMemberId());
|
|
} else if (ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_LESS == entrustType){
|
model = new OrderModel(order.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_LESS.getValue(),
|
entrustPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(),
|
order.getSymbol(), order.getMemberId());
|
} else if (ContractEntrustOrderEntity.ENTRUST_TYPE_CLOSE_MORE == entrustType) {
|
model = new OrderModel(order.getId(), RabbitPriceTypeEnum.ENTRUST_CLOSE_MORE.getValue(),
|
entrustPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(),
|
order.getSymbol(), order.getMemberId());
|
} else {
|
model = new OrderModel(order.getId(), RabbitPriceTypeEnum.ENTRUST_CLOSE_LESS.getValue(),
|
entrustPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(),
|
order.getSymbol(), order.getMemberId());
|
}
|
producer.sendPriceOperate(JSONObject.toJSONString(model));
|
}
|
}
|
}
|
}
|