From 56a2846bfdf17b5d90f9dc1c8a519b2660714151 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Fri, 09 Apr 2021 10:58:12 +0800
Subject: [PATCH] modify

---
 src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java       |    2 +-
 src/test/java/com/xcong/excoin/WholeTest.java                                                  |    6 +++---
 src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java |    2 +-
 src/main/java/com/xcong/excoin/utils/CalculateUtil.java                                        |   32 ++++++++++++++++++++++++++++----
 4 files changed, 33 insertions(+), 9 deletions(-)

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 7bc06a4..70940c6 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
@@ -531,7 +531,7 @@
                 holdOrderListVo.setReturnRate(returnRate);
                 holdOrderListVo.setProfitOrLoss(rewardRatio);
                 if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == memberEntity.getContractPositionType()) {
-                    BigDecimal forcePrice = CalculateUtil.calWholePriceTwo(memberEntity, holdOrderEntity, 1, newPrice);
+                    BigDecimal forcePrice = CalculateUtil.calWholePriceTwo(memberEntity, holdOrderEntity, 1);
 //                    contractHoldOrderDao.updateForcePriceBySymbolAndMemberId(forcePrice, memberEntity.getId(), holdOrderEntity.getSymbol());
                     holdOrderListVo.setForceClosingPrice(forcePrice);
                 }
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 27ae60f..9ff4d66 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
@@ -536,7 +536,7 @@
                     continue;
                 }
 
-                holdOrderEntity.setStopLossPrice(CalculateUtil.calWholePriceTwo(memberEntity, holdOrderEntity, 2, holdOrderDataModel.getClosingPrice()));
+                holdOrderEntity.setStopLossPrice(CalculateUtil.calWholePriceTwo(memberEntity, holdOrderEntity, 2));
                 contractHoldOrderDao.deleteById(holdOrderDataModel.getId());
 
                 ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(holdOrderEntity);
diff --git a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java b/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
index 2d3f66a..45b88c9 100644
--- a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
+++ b/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
@@ -211,10 +211,11 @@
      * @param contractHoldOrderEntity
      * @return
      */
-    public static BigDecimal calWholePriceTwo(MemberEntity memberEntity, ContractHoldOrderEntity contractHoldOrderEntity, int type, BigDecimal newPrice) {
+    public static BigDecimal calWholePriceTwo(MemberEntity memberEntity, ContractHoldOrderEntity contractHoldOrderEntity, int type) {
         ContractHoldOrderDao holdOrderDao = SpringContextHolder.getBean(ContractHoldOrderDao.class);
         MemberWalletContractDao walletContractDao = SpringContextHolder.getBean(MemberWalletContractDao.class);
         CacheSettingUtils cacheSettingUtils = SpringContextHolder.getBean(CacheSettingUtils.class);
+        RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class);
 
         Long memberId = memberEntity.getId();
         MemberWalletContractEntity walletContract = walletContractDao.findWalletContractByMemberIdAndSymbol(memberId, CoinTypeEnum.USDT.name());
@@ -230,7 +231,31 @@
                     totalBondAmount = totalBondAmount.add(holdOrderEntity.getBondAmount());
                 }
 
-                totalProfitOrLoss = totalProfitOrLoss.add(calProfitOrLoss(holdOrderEntity, memberEntity));
+
+                BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(contractHoldOrderEntity.getSymbol())));
+                if (type == 2) {
+                    log.info("newPrice : {}", newPrice);
+                }
+                // 盈亏
+                BigDecimal rewardRatio = BigDecimal.ZERO;
+                // 开多
+                if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) {
+                    // (最新价-开仓价)*规格*张数
+                    rewardRatio = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(contractHoldOrderEntity.getSymbolSku()).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale()));
+                    // 开空
+                } else {
+                    // (开仓价-最新价)*规格*张数
+                    rewardRatio = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(contractHoldOrderEntity.getSymbolSku()).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale()));
+                }
+
+                if (memberEntity.getIsProfit() == MemberEntity.IS_PROFIT_Y) {
+                    PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting();
+                    if (rewardRatio.compareTo(BigDecimal.ZERO) > -1) {
+                        rewardRatio = rewardRatio.multiply(BigDecimal.ONE.subtract(tradeSettingEntity.getProfitParam()));
+                    }
+                }
+
+                totalProfitOrLoss = totalProfitOrLoss.add(rewardRatio);
             }
 
             // 维持保证金
@@ -247,7 +272,7 @@
             BigDecimal prefix = cost.subtract(ratio);
             BigDecimal divideChild;
             if (ContractHoldOrderEntity.OPENING_TYPE_MORE == contractHoldOrderEntity.getOpeningType()) {
-                divideChild = prefix.subtract(orderProfitOrLoss).subtract(qy);
+                divideChild = cost.subtract(orderProfitOrLoss).subtract(qy);
             } else {
                 divideChild = prefix.add(orderProfitOrLoss).add(qy);
             }
@@ -274,7 +299,6 @@
         RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class);
         BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(holdOrderEntity.getSymbol());
         BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(holdOrderEntity.getSymbol())));
-        log.info("最新价为:{}", newPrice);
 
         // 盈亏
         BigDecimal rewardRatio = BigDecimal.ZERO;
diff --git a/src/test/java/com/xcong/excoin/WholeTest.java b/src/test/java/com/xcong/excoin/WholeTest.java
index 2cc497a..6e5ce6a 100644
--- a/src/test/java/com/xcong/excoin/WholeTest.java
+++ b/src/test/java/com/xcong/excoin/WholeTest.java
@@ -203,10 +203,10 @@
     public void wholeForceNewTest() {
         BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey("BTC/USDT")));
 
-        MemberEntity memberEntity = memberDao.selectById(22L);
-        ContractHoldOrderEntity holdOrder = contractHoldOrderDao.selectById(743L);
+        MemberEntity memberEntity = memberDao.selectById(15L);
+        ContractHoldOrderEntity holdOrder = contractHoldOrderDao.selectById(767L);
 
-        System.out.println(CalculateUtil.calWholePriceTwo(memberEntity, holdOrder, 1, newPrice));
+        System.out.println(CalculateUtil.calWholePriceTwo(memberEntity, holdOrder, 2));
     }
 
     @Test

--
Gitblit v1.9.1