From 33a69c65e1f6701bd29ef74d0681dbbe9a21cea7 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Fri, 29 Jan 2021 11:19:08 +0800
Subject: [PATCH] Merge branch 'whole_new' of https://gitee.com/chonggaoxiao/new_excoin.git into whole_new

---
 src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java |    5 ++---
 src/main/java/com/xcong/excoin/common/contants/AppContants.java                          |    1 +
 src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java           |    7 +++++++
 src/main/java/com/xcong/excoin/utils/ThreadPoolUtils.java                                |   16 +++++++++++++++-
 src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java              |   10 ++++++----
 src/main/java/com/xcong/excoin/utils/CalculateUtil.java                                  |    4 ++--
 6 files changed, 33 insertions(+), 10 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 57fb115..2cb1b13 100644
--- a/src/main/java/com/xcong/excoin/common/contants/AppContants.java
+++ b/src/main/java/com/xcong/excoin/common/contants/AppContants.java
@@ -88,5 +88,6 @@
     public static final String WHOLE_BOMB_PREFIX = "whole_bomb_";
 
     public static final String HOLD_BOND_RATIO = "hold_bond_ratio";
+    public static final String WHOLE_BOMB_MAP = "whole_bomb_map";
 
 }
diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
index c2011f0..b2fd665 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
@@ -500,9 +500,9 @@
 
                 BigDecimal rewardRatio = holdOrderDataModel.getRewardAmount().divide(holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()), 8, BigDecimal.ROUND_DOWN);
                 contractOrderEntity.setRewardRatio(rewardRatio);
-                contractOrderEntity.setRewardAmount(holdOrderDataModel.getRewardAmount());
+                contractOrderEntity.setRewardAmount(holdOrderDataModel.getRewardAmount().add(contractOrderEntity.getBondAmount().negate()));
                 contractOrderEntity.setClosingPrice(holdOrderDataModel.getClosingPrice());
-                contractOrderEntity.setForceClosingPrice(holdOrderDataModel.getClosingPrice());
+//                contractOrderEntity.setForceClosingPrice(holdOrderDataModel.getClosingPrice());
 
                 // 订单状态转换
                 if (ContractOrderEntity.ORDER_TYPE_OPEN_MORE == contractOrderEntity.getOrderType()) {
@@ -511,7 +511,6 @@
                     contractOrderEntity.setOrderType(ContractOrderEntity.ORDER_TYPE_CLOSE_LESS);
                 }
                 contractOrderEntity.setClosingTime(new Date());
-                contractOrderEntity.setClosingFeeAmount(holdOrderEntity.getOpeningFeeAmount());
 
                 contractOrderDao.insert(contractOrderEntity);
             }
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 b74d21f..3609764 100644
--- a/src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java
+++ b/src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java
@@ -1,8 +1,11 @@
 package com.xcong.excoin.rabbit.pricequeue;
 
 import com.alibaba.fastjson.JSONObject;
+import com.xcong.excoin.common.contants.AppContants;
 import com.xcong.excoin.rabbit.pricequeue.whole.WholeDataQueue;
 import com.xcong.excoin.rabbit.pricequeue.whole.WholePriceDataModel;
+import com.xcong.excoin.utils.RedisUtils;
+import com.xcong.excoin.utils.SpringContextHolder;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 
@@ -132,6 +135,8 @@
     }
 
     public static void wholePriceDataOperation(WholePriceDataModel wholePriceData) {
+        RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class);
+
         Map<String, WholePriceDataModel> dataModelMap = WholeDataQueue.MAP;
 
         WholePriceDataModel isExistData = dataModelMap.get(wholePriceData.getMemberId().toString());
@@ -140,6 +145,8 @@
         }
 
         dataModelMap.put(wholePriceData.getMemberId().toString(), wholePriceData);
+
+        redisUtils.set(AppContants.WHOLE_BOMB_MAP, JSONObject.toJSONString(dataModelMap));
     }
 
 }
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 3d1a49a..1df8876 100644
--- a/src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java
+++ b/src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java
@@ -21,6 +21,7 @@
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
@@ -282,6 +283,7 @@
         }
     }
 
+    @Transactional(rollbackFor = Exception.class)
     public void wholeBomb() {
         Map<String, WholePriceDataModel> dataModelMap = WholeDataQueue.MAP;
         if (CollUtil.isEmpty(dataModelMap)) {
@@ -297,9 +299,8 @@
                 Map<String, BigDecimal> prices = new HashMap<>();
                 for (HoldOrderDataModel holdOrderData : list) {
                     String price = redisUtils.getString(CoinTypeConvert.convertToKey(holdOrderData.getSymbol()));
-//                    BigDecimal newPrice = new BigDecimal(price);
-                    BigDecimal newPrice = new BigDecimal("29958.46627789");
-
+                    BigDecimal newPrice = new BigDecimal(price);
+//                    BigDecimal newPrice = new BigDecimal("29958.46627789");
 
                     BigDecimal rewardRatio = null;
                     if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderData.getOpeningType()) {
@@ -323,7 +324,8 @@
                 }
 
                 dataModelMap.remove(entry.getKey());
-                System.out.println("触发");
+                redisUtils.set(AppContants.WHOLE_BOMB_MAP, JSONObject.toJSONString(dataModelMap));
+                log.info("全仓爆仓触发:{}", JSONObject.toJSONString(wholePriceData));
                 wholePriceData.setPrices(prices);
                 contractHoldOrderDao.updateMemberAllHoldOrderClosingStatus(wholePriceData.getMemberId());
                 orderProducer.sendWholeBomb(JSONObject.toJSONString(wholePriceData));
diff --git a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java b/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
index 183a4a4..b097cd3 100644
--- a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
+++ b/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
@@ -275,7 +275,7 @@
 
     /**
      * 全仓模式下,维持保证金
-     * 维持保证金 = 持仓价值*维持保证金率= 面值*张数*开仓价格*维持保证金率
+     * 维持保证金 = 持仓价值*维持保证金率= 面值*张数*开仓价格*(1/杠杆倍率)*维持保证金率
      * @param contractHoldOrder
      * @return
      */
@@ -289,6 +289,6 @@
             redisUtils.set(AppContants.HOLD_BOND_RATIO, tradeSetting.getHoldBondRatio());
         }
 
-        return contractHoldOrder.getOpeningPrice().multiply(new BigDecimal(contractHoldOrder.getSymbolCntSale())).multiply(holdBondRatio).multiply(contractHoldOrder.getSymbolSku());
+        return contractHoldOrder.getOpeningPrice().multiply(new BigDecimal(contractHoldOrder.getSymbolCntSale())).multiply(holdBondRatio).multiply(contractHoldOrder.getSymbolSku()).multiply(BigDecimal.ONE.divide(new BigDecimal(contractHoldOrder.getLeverRatio()), 2, BigDecimal.ROUND_DOWN));
     }
 }
diff --git a/src/main/java/com/xcong/excoin/utils/ThreadPoolUtils.java b/src/main/java/com/xcong/excoin/utils/ThreadPoolUtils.java
index 1f89588..de3abb7 100644
--- a/src/main/java/com/xcong/excoin/utils/ThreadPoolUtils.java
+++ b/src/main/java/com/xcong/excoin/utils/ThreadPoolUtils.java
@@ -2,9 +2,12 @@
 
 import cn.hutool.core.collection.CollUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.xcong.excoin.common.contants.AppContants;
 import com.xcong.excoin.common.enumerates.CoinTypeEnum;
+import com.xcong.excoin.modules.contract.dao.ContractEntrustOrderDao;
 import com.xcong.excoin.modules.contract.dao.ContractHoldOrderDao;
 import com.xcong.excoin.modules.contract.dao.ContractOrderDao;
+import com.xcong.excoin.modules.contract.entity.ContractEntrustOrderEntity;
 import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity;
 import com.xcong.excoin.modules.contract.entity.ContractOrderEntity;
 import com.xcong.excoin.modules.contract.mapper.ContractHoldOrderEntityMapper;
@@ -110,6 +113,8 @@
             public void run() {
                 log.info("全仓操作价格");
                 ContractHoldOrderDao contractHoldOrderDao = SpringContextHolder.getBean(ContractHoldOrderDao.class);
+                ContractEntrustOrderDao contractEntrustOrderDao = SpringContextHolder.getBean(ContractEntrustOrderDao.class);
+                RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class);
                 MemberWalletContractDao memberWalletContractDao = SpringContextHolder.getBean(MemberWalletContractDao.class);
 
                 List<ContractHoldOrderEntity> holdOrders = contractHoldOrderDao.selectHoldOrderListByMemberId(memberId);
@@ -128,7 +133,16 @@
                 }
 
                 wholePriceData.setHoldBond(totalHoldBond);
-                wholePriceData.setBalance(wallet.getTotalBalance());
+
+                List<ContractEntrustOrderEntity> entrustOrder = contractEntrustOrderDao.selectEntrustOrderListByMemberId(wholePriceData.getMemberId());
+                BigDecimal totalAmount = BigDecimal.ZERO;
+                if (CollUtil.isNotEmpty(entrustOrder)) {
+                    for (ContractEntrustOrderEntity contractEntrustOrderEntity : entrustOrder) {
+                        totalAmount.add(contractEntrustOrderEntity.getEntrustAmount());
+                    }
+                }
+
+                wholePriceData.setBalance(wallet.getTotalBalance().subtract(totalAmount));
                 wholePriceData.setMemberId(memberId);
 
                 OrderProducer orderProducer = SpringContextHolder.getBean(OrderProducer.class);

--
Gitblit v1.9.1