From e2d0dd77df52bc725e3d5868f0e00694edbdbca6 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Mon, 01 Jun 2020 15:31:42 +0800
Subject: [PATCH] modify

---
 src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java |   33 ++++++++++++++++++++++-----------
 1 files changed, 22 insertions(+), 11 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 3abc098..c705603 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
@@ -16,6 +16,7 @@
 import com.xcong.excoin.modules.member.dao.MemberWalletContractDao;
 import com.xcong.excoin.modules.member.entity.MemberEntity;
 import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity;
+import com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity;
 import com.xcong.excoin.utils.CacheSettingUtils;
 import com.xcong.excoin.utils.CoinTypeConvert;
 import com.xcong.excoin.utils.RedisUtils;
@@ -78,12 +79,23 @@
             }
 
             MemberWalletContractEntity walletContract = memberWalletContractDao.selectById(memberEntity.getId());
-            // 委托总额
-            BigDecimal entrustTotalAmount = submitEntrustDto.getEntrustPrice().multiply(BigDecimal.valueOf(submitEntrustDto.getSymbolCnt())).setScale(8, BigDecimal.ROUND_DOWN);
 
             BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(submitEntrustDto.getSymbol());
+            PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting();
+
             // 保证金计算 -- 建仓价X规格X手数X(1/杠杆倍率)
-            BigDecimal bondAmount = entrustTotalAmount.multiply(lotNumber).multiply((BigDecimal.ONE.divide(BigDecimal.valueOf(submitEntrustDto.getLeverRatio()), 8, BigDecimal.ROUND_DOWN)));
+            BigDecimal bondAmount = submitEntrustDto.getEntrustPrice().multiply(lotNumber).multiply((BigDecimal.ONE.divide(BigDecimal.valueOf(submitEntrustDto.getLeverRatio()), 8, BigDecimal.ROUND_DOWN)));
+
+            // 开仓手续费 建仓价*规格*手数*手续费率
+            BigDecimal openFeePrice = submitEntrustDto.getEntrustPrice().multiply(lotNumber)
+                    .multiply(new BigDecimal(submitEntrustDto.getSymbolCnt()))
+                    .multiply(tradeSettingEntity.getFeeRatio().divide(new BigDecimal(100)))
+                    .setScale(8, BigDecimal.ROUND_DOWN);
+            log.info("手续费:{}", openFeePrice);
+
+            // 预付款
+            BigDecimal entrustTotalAmount = bondAmount.add(openFeePrice).add(openFeePrice);
+            log.info("预付款:{}", entrustTotalAmount);
 
             if (entrustTotalAmount.add(bondAmount).compareTo(walletContract.getAvailableBalance()) > -1) {
                 return Result.fail("可用余额不足");
@@ -93,19 +105,18 @@
             ContractEntrustOrderEntity entrustOrderEntity = convert.submitEntrustDtoToEntity(submitEntrustDto);
             entrustOrderEntity.setOrderNo(commonService.generateOrderNo(memberEntity.getId()));
             entrustOrderEntity.setMemberId(memberEntity.getId());
-            entrustOrderEntity.setBondAmount(bondAmount);
+            entrustOrderEntity.setBondAmount(bondAmount.add(openFeePrice));
             entrustOrderEntity.setSymbolSku(lotNumber);
             entrustOrderEntity.setEntrustAmount(entrustTotalAmount);
             // 暂默认逐仓
             entrustOrderEntity.setPositionType(ContractEntrustOrderEntity.POSITION_TYPE_ADD);
 
-            int i = contractEntrustOrderDao.insert(entrustOrderEntity);
+//            int i = contractEntrustOrderDao.insert(entrustOrderEntity);
 
-            walletContract.setFrozenBalance(walletContract.getFrozenBalance().add(entrustTotalAmount.add(bondAmount)));
-            walletContract.setAvailableBalance(walletContract.getAvailableBalance().subtract(entrustTotalAmount.add(bondAmount)));
-
-            memberWalletContractDao.updateById(walletContract);
-            if (i > 0) {
+            walletContract.setFrozenBalance(walletContract.getFrozenBalance().add(entrustTotalAmount));
+            walletContract.setAvailableBalance(walletContract.getAvailableBalance().subtract(entrustTotalAmount));
+//            memberWalletContractDao.updateById(walletContract);
+            if (1 > 0) {
                 return Result.ok("委托成功");
             } else {
                 return Result.fail("委托失败");
@@ -141,7 +152,7 @@
 
         MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), MemberWalletCoinEnum.WALLETCOINCODE.getValue());
 
-        BigDecimal total = entrustOrderEntity.getEntrustAmount().add(entrustOrderEntity.getBondAmount());
+        BigDecimal total = entrustOrderEntity.getEntrustAmount();
         walletContractEntity.setAvailableBalance(walletContractEntity.getAvailableBalance().add(total));
         walletContractEntity.setFrozenBalance(walletContractEntity.getFrozenBalance().subtract(total));
         memberWalletContractDao.updateById(walletContractEntity);

--
Gitblit v1.9.1