|  |  | 
 |  |  | package com.xcong.excoin.modules.contract.service.impl; | 
 |  |  |  | 
 |  |  | import cn.hutool.core.collection.CollUtil; | 
 |  |  | import com.alibaba.fastjson.JSONObject; | 
 |  |  | import com.xcong.excoin.common.contants.AppContants; | 
 |  |  | import com.xcong.excoin.modules.coin.dao.MemberAccountFlowEntityDao; | 
 |  |  | import com.xcong.excoin.modules.coin.entity.MemberAccountFlowEntity; | 
 |  |  | 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.platform.entity.PlatformTradeSettingEntity; | 
 |  |  | import com.xcong.excoin.rabbit.pricequeue.OrderModel; | 
 |  |  | import com.xcong.excoin.rabbit.producer.OrderProducer; | 
 |  |  | import com.xcong.excoin.utils.CacheSettingUtils; | 
 |  |  | import com.xcong.excoin.utils.CalculateUtil; | 
 |  |  | import com.xcong.excoin.utils.CoinTypeConvert; | 
 |  |  | import com.xcong.excoin.utils.ThreadPoolUtils; | 
 |  |  | import com.xcong.excoin.utils.*; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.apache.commons.collections.CollectionUtils; | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  | 
 |  |  |     private MemberSettingDao memberSettingDao; | 
 |  |  |     @Resource | 
 |  |  |     private ContractHoldOrderDao contractHoldOrderDao; | 
 |  |  |     @Resource | 
 |  |  |     private ContractEntrustOrderDao contractEntrustOrderDao; | 
 |  |  |     @Resource | 
 |  |  |     private RedisUtils redisUtils; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     public void dealOrderFromMq(List<OrderModel> list, Integer type) { | 
 |  |  | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 止盈/止损后删除全仓委托平仓单 | 
 |  |  |      * | 
 |  |  |      * @param orderNo | 
 |  |  |      */ | 
 |  |  |     private void deleteEntrustCloseOrder(String orderNo) { | 
 |  |  |         // 若平掉所有张数,若存在委托平仓,则删除委托平仓记录 | 
 |  |  |         List<ContractEntrustOrderEntity> entrustOrders = contractEntrustOrderDao.selectEntrustOrderByOrderNo(orderNo); | 
 |  |  |         if (CollUtil.isNotEmpty(entrustOrders)) { | 
 |  |  |             for (ContractEntrustOrderEntity entrustOrder : entrustOrders) { | 
 |  |  |                 contractEntrustOrderDao.deleteById(entrustOrder.getId()); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 开多止盈 | 
 |  |  | 
 |  |  |  | 
 |  |  |                         //返佣 | 
 |  |  |                         ThreadPoolUtils.calReturnMoney(order.getMemberId(), order.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_CLOSE); | 
 |  |  |  | 
 |  |  |                         // 全仓模式,止盈/止损 删除委托平仓 | 
 |  |  |                         if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == order.getPositionType()) { | 
 |  |  |                             deleteEntrustCloseOrder(order.getOrderNo()); | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  | 
 |  |  |     /** | 
 |  |  |      * 开空止盈 | 
 |  |  |      */ | 
 |  |  |     @Transactional(rollbackFor = Exception.class) | 
 |  |  |     public void dealForLessStopPro(List<ContractHoldOrderEntity> orderList, List<OrderModel> list) { | 
 |  |  |         //List<CoinsCoinsOrder> orderList = orderMapper.selectOrderByBatchNo(batchno); | 
 |  |  |         //System.out.println("开空止盈订单batchno:" + batchno); | 
 |  |  | 
 |  |  |  | 
 |  |  |                         //返佣 | 
 |  |  |                         ThreadPoolUtils.calReturnMoney(order.getMemberId(), order.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_CLOSE); | 
 |  |  |  | 
 |  |  |                         // 全仓模式,止盈/止损 删除委托平仓 | 
 |  |  |                         if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == order.getPositionType()) { | 
 |  |  |                             deleteEntrustCloseOrder(order.getOrderNo()); | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  | 
 |  |  |      * | 
 |  |  |      * @param | 
 |  |  |      */ | 
 |  |  |     @Transactional(rollbackFor = Exception.class) | 
 |  |  |     public void dealForMoreLoss(List<ContractHoldOrderEntity> orderList, List<OrderModel> list) { | 
 |  |  |         //List<CoinsCoinsOrder> orderList = orderMapper.selectOrderByBatchNo(batchno); | 
 |  |  |         //System.out.println("开多止损批次号batchno:" + batchno); | 
 |  |  | 
 |  |  |  | 
 |  |  |                         //返佣 | 
 |  |  |                         ThreadPoolUtils.calReturnMoney(order.getMemberId(), order.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_CLOSE); | 
 |  |  |  | 
 |  |  |                         // 全仓模式,止盈/止损 删除委托平仓 | 
 |  |  |                         if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == order.getPositionType()) { | 
 |  |  |                             deleteEntrustCloseOrder(order.getOrderNo()); | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  | 
 |  |  |      * | 
 |  |  |      * @param | 
 |  |  |      */ | 
 |  |  |     @Transactional(rollbackFor = Exception.class) | 
 |  |  |     public void dealForLessLoss(List<ContractHoldOrderEntity> orderList, List<OrderModel> list) { | 
 |  |  |         // List<CoinsCoinsOrder> orderList = orderMapper.selectOrderByBatchNo(batchno); | 
 |  |  |         //System.out.println("开空止损批次号batchno:" + batchno); | 
 |  |  | 
 |  |  |  | 
 |  |  |                         //返佣 | 
 |  |  |                         ThreadPoolUtils.calReturnMoney(order.getMemberId(), order.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_CLOSE); | 
 |  |  |  | 
 |  |  |                         // 全仓模式,止盈/止损 删除委托平仓 | 
 |  |  |                         if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == order.getPositionType()) { | 
 |  |  |                             deleteEntrustCloseOrder(order.getOrderNo()); | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  | 
 |  |  |                 modelMap.put(model.getOrderId(), model.getOperateNo()); | 
 |  |  |             } | 
 |  |  |             for (ContractHoldOrderEntity coinsOrder : orderList) { | 
 |  |  |                 List<Object> types = redisUtils.lGet(AppContants.RABBIT_TYPE + coinsOrder.getId(), 0, -1); | 
 |  |  |                 if(types.contains(9) || types.contains(10) || types.contains(11) || types.contains(12)) { | 
 |  |  |                     log.info("存在止盈/止损 orderId : {}, types : {}", coinsOrder.getId(), JSONObject.toJSONString(types)); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 Long orderId = coinsOrder.getId(); | 
 |  |  |                 Integer operateNo = coinsOrder.getOperateNo(); | 
 |  |  |                 //判断当前订单是否是最新的爆仓价 不相等时直接进入下一个订单 |