From 68d946debea91cc5afb2f7a870bf04b393335926 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Wed, 02 Sep 2020 18:07:58 +0800
Subject: [PATCH] modify

---
 src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java |    4 ++++
 src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java       |   31 ++++++++++++++++++++-----------
 src/main/java/com/xcong/excoin/utils/CalculateUtil.java                                           |    6 +++---
 3 files changed, 27 insertions(+), 14 deletions(-)

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 c3f8e36..54a64c4 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
@@ -213,6 +213,7 @@
         int i = contractEntrustOrderDao.insert(entrustOrderEntity);
         memberWalletContractDao.increaseWalletContractBalanceById(entrustTotalAmount.negate(), null, entrustOrderEntity.getBondAmount(), walletContract.getId());
         if (i > 0) {
+            CalculateUtil.getForceSetPriceForWhole(submitEntrustDto.getSymbol(), memberEntity);
 
             // 发送委托单队列消息
             if (submitEntrustDto.getEntrustType() == ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_MORE) {
@@ -284,6 +285,9 @@
         contractEntrustOrderDao.deleteById(entrustOrderEntity.getId());
 
         if (i > 0) {
+            if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == entrustOrderEntity.getPositionType()) {
+                CalculateUtil.getForceSetPriceForWhole(entrustOrderEntity.getSymbol(), memberEntity);
+            }
             return Result.ok(MessageSourceUtils.getString("cancellation_success"));
         }
         return Result.fail(MessageSourceUtils.getString("cancellation_fail"));
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 3c7daff..c6d461b 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
@@ -892,21 +892,30 @@
             } else {
                 MemberWalletContractEntity wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memId, CoinTypeConvert.convertContractTypeToCoin(coinsOrder.getSymbol()));
 
-                BigDecimal rewardRatio = BigDecimal.ZERO;
-                // 开多
-                if (ContractHoldOrderEntity.OPENING_TYPE_MORE == coinsOrder.getOpeningType()) {
-                    // (最新价-开仓价)*规格*张数
-                    rewardRatio = nowPrice.subtract(coinsOrder.getOpeningPrice()).multiply(coinsOrder.getSymbolSku()).multiply(new BigDecimal(coinsOrder.getSymbolCntSale()));
-                    // 开空
-                } else {
-                    // (开仓价-最新价)*规格*张数
-                    rewardRatio = coinsOrder.getOpeningPrice().subtract(nowPrice).multiply(coinsOrder.getSymbolSku()).multiply(new BigDecimal(coinsOrder.getSymbolCntSale()));
+//                BigDecimal rewardRatio = BigDecimal.ZERO;
+//                // 开多
+//                if (ContractHoldOrderEntity.OPENING_TYPE_MORE == coinsOrder.getOpeningType()) {
+//                    // (最新价-开仓价)*规格*张数
+//                    rewardRatio = nowPrice.subtract(coinsOrder.getOpeningPrice()).multiply(coinsOrder.getSymbolSku()).multiply(new BigDecimal(coinsOrder.getSymbolCntSale()));
+//                    // 开空
+//                } else {
+//                    // (开仓价-最新价)*规格*张数
+//                    rewardRatio = coinsOrder.getOpeningPrice().subtract(nowPrice).multiply(coinsOrder.getSymbolSku()).multiply(new BigDecimal(coinsOrder.getSymbolCntSale()));
+//                }
+
+                // 委托单总委托金额
+                BigDecimal totalPrePayment = BigDecimal.ZERO;
+                List<ContractEntrustOrderEntity> entrustOrderEntities = contractEntrustOrderDao.selectEntrustOrderListByMemberId(memId);
+                if (CollUtil.isNotEmpty(entrustOrderEntities)) {
+                    for (ContractEntrustOrderEntity entrustOrderEntity : entrustOrderEntities) {
+                        totalPrePayment = totalPrePayment.add(entrustOrderEntity.getEntrustAmount());
+                    }
                 }
 
-                contractOrderEntity.setRewardAmount(wallet.getTotalBalance().subtract(contractOrderEntity.getOpeningFeeAmount()).negate());
+                contractOrderEntity.setRewardAmount(wallet.getTotalBalance().subtract(totalPrePayment).subtract(contractOrderEntity.getOpeningFeeAmount()).negate());
                 contractOrderService.save(contractOrderEntity);
 
-                memberWalletContractService.increaseWalletContractBalanceById(wallet.getAvailableBalance().negate(), wallet.getTotalBalance().negate(), null, wallet.getId());
+                memberWalletContractService.increaseWalletContractBalanceById(wallet.getAvailableBalance().negate(), wallet.getTotalBalance().subtract(totalPrePayment).negate(), null, wallet.getId());
             }
         }
     }
diff --git a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java b/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
index 4e3c023..cc84320 100644
--- a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
+++ b/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
@@ -99,7 +99,7 @@
             int subCnt = 0;
             BigDecimal openPrice = BigDecimal.ZERO;
             int type = 1;
-            BigDecimal feeAmount = BigDecimal.ZERO;
+            BigDecimal bondAmount = BigDecimal.ZERO;
             BigDecimal sku = BigDecimal.ZERO;
 
             Long id = 0L;
@@ -118,12 +118,12 @@
                     subCnt = maxCnt - holdOrderEntity.getSymbolCntSale();
                 }
 
-                feeAmount = feeAmount.add(holdOrderEntity.getOpeningFeeAmount());
+                bondAmount = bondAmount.add(holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()));
                 sku = holdOrderEntity.getSymbolSku();
             }
             BigDecimal forceSetPrice = BigDecimal.ZERO;
             if (subCnt != 0) {
-                forceSetPrice = getForceSetPrice(walletContract.getTotalBalance().subtract(feeAmount), openPrice, subCnt, sku, type, memberEntity);
+                forceSetPrice = getForceSetPrice(walletContract.getAvailableBalance().add(bondAmount), openPrice, subCnt, sku, type, memberEntity);
             }
 
             log.info("强平价:{}", forceSetPrice);

--
Gitblit v1.9.1