From eee4a9fdb1e87d25b39d9c08a7b43b09642df5ad Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Wed, 19 Aug 2020 15:19:20 +0800
Subject: [PATCH] finish closing order

---
 src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java       |   18 +++++++++++++++++-
 src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java |    2 +-
 src/main/java/com/xcong/excoin/utils/CalculateUtil.java                                        |    1 +
 3 files changed, 19 insertions(+), 2 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 ba25dbf..cc77bc4 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
@@ -239,7 +239,7 @@
         holdOrderEntity.setOpeningPrice(openingPrice);
         holdOrderEntity.setOpeningType(submitOrderDto.getOrderType());
         holdOrderEntity.setMarkPrice(newPrice);
-        holdOrderEntity.setIsCanClosing(ContractHoldOrderEntity.ORDER_CAN_CLOSING_Y);
+        holdOrderEntity.setIsCanClosing(ContractHoldOrderEntity.ORDER_CAN_CLOSING_N);
         holdOrderEntity.setPrePaymentAmount(prePaymentAmount);
         holdOrderEntity.setBondAmount(bondAmount.add(openFeePrice));
         holdOrderEntity.setOperateNo(1);
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 e7e6a55..726f020 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
@@ -297,6 +297,12 @@
                 }
             }
 
+            // 保证金
+            BigDecimal bondAmount = CalculateUtil.getBondAmount(holdOrderEntity.getOpeningPrice(), lotNumber, closeCnt, holdOrderEntity.getLeverRatio());
+
+            // 平仓手续费
+            BigDecimal fee = holdOrderEntity.getOpeningFeeAmount().divide(BigDecimal.valueOf(holdOrderEntity.getSymbolCnt()), 8, BigDecimal.ROUND_DOWN).multiply(BigDecimal.valueOf(closeCnt));
+
             ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(holdOrderEntity);
             contractOrderEntity.setId(null);
             contractOrderEntity.setClosingPrice(newPrice);
@@ -304,11 +310,21 @@
             contractOrderEntity.setClosingType(closingType);
             contractOrderEntity.setSymbolCnt(closeCnt);
             contractOrderEntity.setRewardAmount(profitOrLoss);
+            contractOrderEntity.setBondAmount(bondAmount);
+            contractOrderEntity.setClosingFeeAmount(fee);
             contractOrderDao.insert(contractOrderEntity);
 
             holdOrderEntity.setSymbolCntSale(holdOrderEntity.getSymbolCntSale() - closeCnt);
             contractHoldOrderDao.updateById(holdOrderEntity);
-        }
 
+            BigDecimal changeAmount = profitOrLoss.add(bondAmount).subtract(fee);
+
+            memberWalletContractDao.increaseWalletContractBalanceById(changeAmount, fee.negate(), null, walletContract.getId());
+
+            ThreadPoolUtils.sendWholeForceClosingPrice(holdOrderEntity.getSymbol(), memberEntity);
+            // 计算佣金
+            ThreadPoolUtils.calReturnMoney(memberEntity.getId(), fee, contractOrderEntity, AgentReturnEntity.ORDER_TYPE_CLOSE);
+
+        }
     }
 }
diff --git a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java b/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
index 53e5705..841beee 100644
--- a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
+++ b/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
@@ -142,6 +142,7 @@
 
             for (ContractHoldOrderEntity updateHoldOrder : holdOrderEntities) {
                 updateHoldOrder.setForceClosingPrice(forceSetPrice);
+                updateHoldOrder.setIsCanClosing(ContractHoldOrderEntity.ORDER_CAN_CLOSING_Y);
                 holdOrderDao.updateById(updateHoldOrder);
 
                 if (forceSetPrice.compareTo(BigDecimal.ZERO) >= 0) {

--
Gitblit v1.9.1