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