From 237d0b600b55ecbf3d4f241568862ae7b498e983 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Mon, 31 Aug 2020 18:51:12 +0800
Subject: [PATCH] modify entrsut open order when more/less/bomb/entrustClose

---
 src/test/java/com/xcong/excoin/WholeTest.java                                                        |   11 +--
 src/main/java/com/xcong/excoin/common/contants/AppContants.java                                      |    2 
 src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java       |   22 +++---
 src/main/java/com/xcong/excoin/modules/documentary/service/impl/FollowOrderOperationServiceImpl.java |    8 +-
 src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java                       |    8 +-
 src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderModel.java                                     |   16 ++++
 src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java    |   12 ++--
 src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java          |   19 +++++
 src/main/java/com/xcong/excoin/rabbit/init/OrderProducerInit.java                                    |   20 +++---
 src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java                          |    8 ++
 src/main/java/com/xcong/excoin/utils/CalculateUtil.java                                              |    8 +-
 11 files changed, 83 insertions(+), 51 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/common/contants/AppContants.java b/src/main/java/com/xcong/excoin/common/contants/AppContants.java
index 0f9ecf0..a69c75a 100644
--- a/src/main/java/com/xcong/excoin/common/contants/AppContants.java
+++ b/src/main/java/com/xcong/excoin/common/contants/AppContants.java
@@ -83,4 +83,6 @@
      */
     public static final String RABBIT_TYPE = "rabbit_type_";
 
+    public static final String MEMBER_TYPE = "member_type_";
+
 }
diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java
index 0554a2e..2cbd3fa 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java
@@ -157,12 +157,12 @@
 
             // 发送委托单队列消息
             if (submitEntrustDto.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_MORE) {
-                OrderModel model = new OrderModel(entrustOrderEntity.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_MORE.getValue(), submitEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), submitEntrustDto.getSymbol());
+                OrderModel model = new OrderModel(entrustOrderEntity.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_MORE.getValue(), submitEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), submitEntrustDto.getSymbol(), entrustOrderEntity.getMemberId());
                 producer.sendPriceOperate(JSONObject.toJSONString(model));
 
                 LogRecordUtils.insertMemberAccountFlow(memberEntity.getId(), entrustTotalAmount, walletContract.getAvailableBalance().subtract(entrustTotalAmount), submitEntrustDto.getSymbol(), "委托买涨", "买涨:" + submitEntrustDto.getSymbol());
             } else {
-                OrderModel model = new OrderModel(entrustOrderEntity.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_LESS.getValue(), submitEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), submitEntrustDto.getSymbol());
+                OrderModel model = new OrderModel(entrustOrderEntity.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_LESS.getValue(), submitEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), submitEntrustDto.getSymbol(), entrustOrderEntity.getMemberId());
                 producer.sendPriceOperate(JSONObject.toJSONString(model));
 
                 LogRecordUtils.insertMemberAccountFlow(memberEntity.getId(), entrustTotalAmount, walletContract.getAvailableBalance().subtract(entrustTotalAmount), submitEntrustDto.getSymbol(), "委托买跌", "买跌:" + submitEntrustDto.getSymbol());
@@ -216,12 +216,12 @@
 
             // 发送委托单队列消息
             if (submitEntrustDto.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_MORE) {
-                OrderModel model = new OrderModel(entrustOrderEntity.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_MORE.getValue(), submitEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), submitEntrustDto.getSymbol());
+                OrderModel model = new OrderModel(entrustOrderEntity.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_MORE.getValue(), submitEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), submitEntrustDto.getSymbol(), entrustOrderEntity.getMemberId());
                 producer.sendPriceOperate(JSONObject.toJSONString(model));
 
                 LogRecordUtils.insertMemberAccountFlow(memberEntity.getId(), entrustTotalAmount, walletContract.getAvailableBalance().subtract(entrustTotalAmount), submitEntrustDto.getSymbol(), "委托买涨", "买涨:" + submitEntrustDto.getSymbol());
             } else {
-                OrderModel model = new OrderModel(entrustOrderEntity.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_LESS.getValue(), submitEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), submitEntrustDto.getSymbol());
+                OrderModel model = new OrderModel(entrustOrderEntity.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_LESS.getValue(), submitEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), submitEntrustDto.getSymbol(), entrustOrderEntity.getMemberId());
                 producer.sendPriceOperate(JSONObject.toJSONString(model));
 
                 LogRecordUtils.insertMemberAccountFlow(memberEntity.getId(), entrustTotalAmount, walletContract.getAvailableBalance().subtract(entrustTotalAmount), submitEntrustDto.getSymbol(), "委托买跌", "买跌:" + submitEntrustDto.getSymbol());
@@ -371,10 +371,10 @@
         if (i > 0) {
             // 发送委托消息
             if (holdOrderEntity.getOpeningType() == ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_MORE) {
-                OrderModel model = new OrderModel(entrustOrder.getId(), RabbitPriceTypeEnum.ENTRUST_CLOSE_MORE.getValue(), submitCloseEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol());
+                OrderModel model = new OrderModel(entrustOrder.getId(), RabbitPriceTypeEnum.ENTRUST_CLOSE_MORE.getValue(), submitCloseEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol(), holdOrderEntity.getMemberId());
                 producer.sendPriceOperate(JSONObject.toJSONString(model));
             } else {
-                OrderModel model = new OrderModel(entrustOrder.getId(), RabbitPriceTypeEnum.ENTRUST_CLOSE_LESS.getValue(), submitCloseEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol());
+                OrderModel model = new OrderModel(entrustOrder.getId(), RabbitPriceTypeEnum.ENTRUST_CLOSE_LESS.getValue(), submitCloseEntrustDto.getEntrustPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol(), holdOrderEntity.getMemberId());
                 producer.sendPriceOperate(JSONObject.toJSONString(model));
             }
         }
diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java
index b02fbb5..27b93e2 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java
@@ -340,7 +340,7 @@
             memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), openFeePrice.negate(), null, walletContract.getId());
 
             // 发送爆仓消息
-            sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), forceClosingPrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo());
+            sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), forceClosingPrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo(), holdOrderEntity.getMemberId());
 
             // 计算佣金
             ThreadPoolUtils.calReturnMoney(memberEntity.getId(), contractOrderEntity.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_OPEN);
@@ -549,7 +549,7 @@
         contractHoldOrderDao.updateById(holdOrderEntity);
 
         // 将待平张数放入缓存
-        redisUtils.set(AppContants.CLOSING_ORDER_PREFIX + holdOrderEntity.getId(), wholeCloseOrderDto.getCount());
+        redisUtils.set(AppContants.CLOSING_ORDER_PREFIX + holdOrderEntity.getId(), wholeCloseOrderDto.getCount(), 30);
 
         // 发送平仓消息
         List<Long> ids = new ArrayList<>();
@@ -656,23 +656,23 @@
             if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) {
                 // 开多止盈
                 if (stopProfitPrice != null) {
-                    model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_MORE_STOP_PROFIT.getValue(), stopProfitPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol());
+                    model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_MORE_STOP_PROFIT.getValue(), stopProfitPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol(), holdOrderEntity.getMemberId());
                     producer.sendPriceOperate(JSONObject.toJSONString(model));
                 }
                 // 开多止损
                 if (stopLessPrice != null) {
-                    model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_MORE_STOP_LESS.getValue(), stopLessPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol());
+                    model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_MORE_STOP_LESS.getValue(), stopLessPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol(), holdOrderEntity.getMemberId());
                     producer.sendPriceOperate(JSONObject.toJSONString(model));
                 }
             } else {
                 // 开空止盈
                 if (stopProfitPrice != null) {
-                    model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_PROFIT.getValue(), stopProfitPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol());
+                    model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_PROFIT.getValue(), stopProfitPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol(), holdOrderEntity.getMemberId());
                     producer.sendPriceOperate(JSONObject.toJSONString(model));
                 }
                 // 开空止损
                 if (stopLessPrice != null) {
-                    model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_LESS.getValue(), stopLessPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol());
+                    model = new OrderModel(holdOrderEntity.getId(), RabbitPriceTypeEnum.CLOSE_LESS_STOP_LESS.getValue(), stopLessPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), holdOrderEntity.getSymbol(), holdOrderEntity.getMemberId());
                     producer.sendPriceOperate(JSONObject.toJSONString(model));
                 }
             }
@@ -716,7 +716,7 @@
 
         if (i > 0) {
             // 发送爆仓消息
-            sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), forceClosingPrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo());
+            sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), forceClosingPrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo(), holdOrderEntity.getMemberId());
             return Result.ok("调整成功");
         }
         return Result.fail("调整失败");
@@ -905,20 +905,20 @@
                     contractHoldOrderDao.updateById(holdOrderEntity);
 
                     // 发送爆仓消息
-                    sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), newForcePrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo());
+                    sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), newForcePrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo(), holdOrderEntity.getMemberId());
                 }
             }
         }
     }
 
-    public void sendOrderBombMsg(Long id, int type, BigDecimal forceClosingPrice, String symbol, int operateNo) {
+    public void sendOrderBombMsg(Long id, int type, BigDecimal forceClosingPrice, String symbol, int operateNo, Long memberId) {
         OrderModel model = null;
         // 开多
         if (ContractHoldOrderEntity.OPENING_TYPE_MORE == type) {
-            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_MORE_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo);
+            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_MORE_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo, memberId);
             // 开空
         } else {
-            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_LESS_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo);
+            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_LESS_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo, memberId);
         }
         producer.sendPriceOperate(JSONObject.toJSONString(model));
     }
diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java
index f75401d..7684e4c 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java
@@ -651,11 +651,11 @@
                 // 市价
                 if (coinsCoinsOrder.getEntrustType() == 1) {
                     // 开多
-                    OrderModel model = new OrderModel(contractHoldOrderEntity.getId(), 6, contractHoldOrderEntity.getForceClosingPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), coinsCoinsOrder.getSymbol(), 1);
+                    OrderModel model = new OrderModel(contractHoldOrderEntity.getId(), 6, contractHoldOrderEntity.getForceClosingPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), coinsCoinsOrder.getSymbol(), 1, coinsCoinsOrder.getMemberId());
                     producer.sendPriceOperate(JSONObject.toJSONString(model));
                 } else {
                     // 开空
-                    OrderModel model = new OrderModel(contractHoldOrderEntity.getId(), 7, contractHoldOrderEntity.getForceClosingPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), coinsCoinsOrder.getSymbol(), 1);
+                    OrderModel model = new OrderModel(contractHoldOrderEntity.getId(), 7, contractHoldOrderEntity.getForceClosingPrice().setScale(8, RoundingMode.HALF_UP).toPlainString(), coinsCoinsOrder.getSymbol(), 1, coinsCoinsOrder.getMemberId());
                     producer.sendPriceOperate(JSONObject.toJSONString(model));
                 }
                 // 扣除手续费
@@ -671,6 +671,21 @@
 
     private void wholeEntrustOrder(ContractEntrustOrderEntity entrustOrder) {
         log.info("全仓委托逻辑处理:{}", entrustOrder.getOrderNo());
+
+        List<Object> types = redisUtils.lGet(AppContants.MEMBER_TYPE + entrustOrder.getMemberId(), 0, -1);
+        int i = 1;
+        while (true) {
+            if (CollUtil.isEmpty(types)) {
+                break;
+            }
+            log.info("存在止盈/止损/爆仓/委托平仓,等待 -- {}", i);
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            i++;
+        }
         MemberWalletContractEntity wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(entrustOrder.getMemberId(), CoinTypeConvert.convertContractTypeToCoin(entrustOrder.getSymbol()));
 
         PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting();
diff --git a/src/main/java/com/xcong/excoin/modules/documentary/service/impl/FollowOrderOperationServiceImpl.java b/src/main/java/com/xcong/excoin/modules/documentary/service/impl/FollowOrderOperationServiceImpl.java
index 61476c1..5290f00 100644
--- a/src/main/java/com/xcong/excoin/modules/documentary/service/impl/FollowOrderOperationServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/documentary/service/impl/FollowOrderOperationServiceImpl.java
@@ -197,7 +197,7 @@
                     followFollowerOrderRelationDao.insert(relationEntity);
 
                     // 发送爆仓消息
-                    sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), forceClosingPrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo());
+                    sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), forceClosingPrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo(), holdOrderEntity.getMemberId());
 
                     // 计算佣金
                     ThreadPoolUtils.calReturnMoney(memberEntity.getId(), contractOrderEntity.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_OPEN);
@@ -215,14 +215,14 @@
         }
     }
 
-    public void sendOrderBombMsg(Long id, int type, BigDecimal forceClosingPrice, String symbol, int operateNo) {
+    public void sendOrderBombMsg(Long id, int type, BigDecimal forceClosingPrice, String symbol, int operateNo, Long memberId) {
         OrderModel model = null;
         // 开多
         if (ContractHoldOrderEntity.OPENING_TYPE_MORE == type) {
-            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_MORE_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo);
+            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_MORE_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo, memberId);
             // 开空
         } else {
-            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_LESS_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo);
+            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_LESS_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo, memberId);
         }
         producer.sendPriceOperate(JSONObject.toJSONString(model));
     }
diff --git a/src/main/java/com/xcong/excoin/rabbit/init/OrderProducerInit.java b/src/main/java/com/xcong/excoin/rabbit/init/OrderProducerInit.java
index 94d6e76..f184fea 100644
--- a/src/main/java/com/xcong/excoin/rabbit/init/OrderProducerInit.java
+++ b/src/main/java/com/xcong/excoin/rabbit/init/OrderProducerInit.java
@@ -69,7 +69,7 @@
                         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.getSymbol(), order.getOperateNo(), order.getMemberId());
                                 producer.sendPriceOperate(JSONObject.toJSONString(model));
                             }
                         }
@@ -79,7 +79,7 @@
                     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.getSymbol(), order.getMemberId());
                         producer.sendPriceOperate(JSONObject.toJSONString(model));
                     }
                     // 止盈
@@ -87,7 +87,7 @@
                     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.getSymbol(), order.getMemberId());
                         producer.sendPriceOperate(JSONObject.toJSONString(model));
                     }
 
@@ -99,7 +99,7 @@
                         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.getSymbol(), order.getOperateNo(), order.getMemberId());
                                 producer.sendPriceOperate(JSONObject.toJSONString(model));
                             }
                         }
@@ -109,7 +109,7 @@
                     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.getSymbol(), order.getMemberId());
                         producer.sendPriceOperate(JSONObject.toJSONString(model));
                     }
                     // 止盈
@@ -117,7 +117,7 @@
                     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.getSymbol(), order.getMemberId());
                         producer.sendPriceOperate(JSONObject.toJSONString(model));
                     }
                 }
@@ -151,20 +151,20 @@
                     // 开多委托
                     model = new OrderModel(order.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_MORE.getValue(),
                             entrustPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(),
-                            order.getSymbol());
+                            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.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.getSymbol(), order.getMemberId());
                 } else {
                     model = new OrderModel(order.getId(), RabbitPriceTypeEnum.ENTRUST_CLOSE_LESS.getValue(),
                             entrustPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(),
-                            order.getSymbol());
+                            order.getSymbol(), order.getMemberId());
                 }
                 producer.sendPriceOperate(JSONObject.toJSONString(model));
             }
diff --git a/src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderModel.java b/src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderModel.java
index abc7c7c..e749028 100644
--- a/src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderModel.java
+++ b/src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderModel.java
@@ -25,20 +25,24 @@
      */
     private Integer operateNo;
 
+    private Long memberId;
 
-    public OrderModel(Long orderId, Integer type, String price, String symbol){
+
+    public OrderModel(Long orderId, Integer type, String price, String symbol, Long memberId){
         this.orderId= orderId;
         this.type= type;
         this.price= price;
         this.symbol= symbol;
+        this.memberId = memberId;
     }
 
-    public OrderModel(Long orderId,Integer type,String price, String symbol,Integer operateNo){
+    public OrderModel(Long orderId,Integer type,String price, String symbol,Integer operateNo, Long memberId){
         this.orderId= orderId;
         this.type= type;
         this.price= price;
         this.symbol= symbol;
         this.operateNo= operateNo;
+        this.memberId = memberId;
     }
 
     public Integer getOperateNo() {
@@ -80,4 +84,12 @@
     public void setSymbol(String symbol) {
         this.symbol = symbol;
     }
+
+    public Long getMemberId() {
+        return memberId;
+    }
+
+    public void setMemberId(Long memberId) {
+        this.memberId = memberId;
+    }
 }
diff --git a/src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java b/src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java
index 2428c7b..adf8b4c 100644
--- a/src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java
+++ b/src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java
@@ -60,12 +60,12 @@
             // 判断这个单的这个类型是否有
 //            if (CollectionUtils.isNotEmpty(list)) {
                 // 新增
-                OrderModel orderModel = new OrderModel(orderId, type, price, null,order.getOperateNo());
+                OrderModel orderModel = new OrderModel(orderId, type, price, null,order.getOperateNo(), order.getMemberId());
                 list.add(orderModel);
 //            }
         } else {
             List<OrderModel> list = new ArrayList<OrderModel>();
-            OrderModel orderModel = new OrderModel(orderId, type, price, null,order.getOperateNo());
+            OrderModel orderModel = new OrderModel(orderId, type, price, null,order.getOperateNo(), order.getMemberId());
             list.add(orderModel);
             orderMap.put(price, list);
         }
@@ -95,12 +95,12 @@
             // 判断这个单的这个类型是否有
 //            if (CollectionUtils.isNotEmpty(list)) {
                 // 新增
-                OrderModel orderModel = new OrderModel(orderId, type, price, null,order.getOperateNo());
+                OrderModel orderModel = new OrderModel(orderId, type, price, null,order.getOperateNo(), order.getMemberId());
                 list.add(orderModel);
 //            }
         } else {
             List<OrderModel> list = new ArrayList<OrderModel>();
-            OrderModel orderModel = new OrderModel(orderId, type, price, null,order.getOperateNo());
+            OrderModel orderModel = new OrderModel(orderId, type, price, null,order.getOperateNo(), order.getMemberId());
             list.add(orderModel);
             orderMap.put(price, list);
         }
diff --git a/src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java b/src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java
index 23168f6..e04f7e5 100644
--- a/src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java
+++ b/src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java
@@ -87,6 +87,7 @@
         }
 
         redisUtils.lSet(AppContants.RABBIT_TYPE + model.getOrderId(), orderTypes, 10);
+        redisUtils.lSet(AppContants.MEMBER_TYPE + model.getMemberId(), orderTypes, 5);
     }
 
     // 处理消息 正序的 包括
@@ -204,6 +205,13 @@
             // 2:开多6:爆仓平多
             // 10:止盈平空11:止损平多
             for (OrderModel model : orderModelList) {
+                /*
+                   问题: 1、逐仓: 当行情大时,若设置的止损点与爆仓过于接近,则可能会出现直接爆仓,而不止损的情况
+                        2、全仓: 止盈价/止损价 设置的与委托平仓价相同,需优先处理止盈/止损
+                   解决: 将订单ID作为Key, 该订单执行的队列类型集合作为value, 用于在执行爆仓、委托平仓时,是否存在止盈/止损,若存在则不执行该爆仓和委托平仓
+                 */
+                addExecType(model);
+
                 // 开空止盈
                 List<OrderModel> kkzyList = new ArrayList<OrderModel>();
                 // 开多止损
diff --git a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java b/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
index 8f24589..4e3c023 100644
--- a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
+++ b/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
@@ -137,7 +137,7 @@
 
             if (forceSetPrice.compareTo(BigDecimal.ZERO) > 0) {
                 log.info("id:{}, type:{}, forceSetPrice:{}, symbol:{}, operateNo:{}", id, type, forceSetPrice, symbol, operateNo);
-                sendOrderBombMsg(id, type, forceSetPrice, symbol, operateNo);
+                sendOrderBombMsg(id, type, forceSetPrice, symbol, operateNo, memberEntity.getId());
             }
         }
     }
@@ -221,14 +221,14 @@
 
      */
 
-    private static void sendOrderBombMsg(Long id, int type, BigDecimal forceClosingPrice, String symbol, int operateNo) {
+    private static void sendOrderBombMsg(Long id, int type, BigDecimal forceClosingPrice, String symbol, int operateNo, Long memberId) {
         OrderModel model = null;
         // 开多
         if (ContractHoldOrderEntity.OPENING_TYPE_MORE == type) {
-            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_MORE_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo);
+            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_MORE_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo, memberId);
             // 开空
         } else {
-            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_LESS_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo);
+            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_LESS_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo, memberId);
         }
         SpringContextHolder.getBean(OrderProducer.class).sendPriceOperate(JSONObject.toJSONString(model));
     }
diff --git a/src/test/java/com/xcong/excoin/WholeTest.java b/src/test/java/com/xcong/excoin/WholeTest.java
index e8eb9e4..954c68d 100644
--- a/src/test/java/com/xcong/excoin/WholeTest.java
+++ b/src/test/java/com/xcong/excoin/WholeTest.java
@@ -96,14 +96,6 @@
     @Autowired
     private OrderProducer orderProducer;
 
-    @Test
-    public void sendMsg() {
-        List<OrderModel> list = new ArrayList<>();
-        OrderModel orderModel = new OrderModel(1L, RabbitPriceTypeEnum.ENTRUST_OPEN_MORE.getValue(), "111", "BTC");
-        list.add(orderModel);
-        orderProducer.sendLimitClose(JSONObject.toJSONString(list));
-    }
-
 
     // 面值*(多单张数*多单开仓价-空单张数*空单开仓价)-余额-已实现盈亏 / 面值*(多单张数-空单张数)-(维持保证金率+TAKER手续费)*面值*(开多张数+开空张数)
 
@@ -144,6 +136,9 @@
 
     @Test
     public void redisTest() {
+        for (int i = 827; i < 999; i++) {
+            redisUtils.del(AppContants.CLOSING_ORDER_PREFIX + i);
+        }
     }
 
 }

--
Gitblit v1.9.1