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

---
 src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java |   32 ++++++++++++++++++++++++--------
 1 files changed, 24 insertions(+), 8 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 98bbaa7..d95dfc9 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,7 +105,7 @@
             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);
             // 暂默认逐仓
@@ -101,9 +113,8 @@
 
             int i = contractEntrustOrderDao.insert(entrustOrderEntity);
 
-            walletContract.setFrozenBalance(walletContract.getFrozenBalance().add(entrustTotalAmount.add(bondAmount)));
-            walletContract.setAvailableBalance(walletContract.getAvailableBalance().subtract(entrustTotalAmount.add(bondAmount)));
-
+            walletContract.setFrozenBalance(walletContract.getFrozenBalance().add(entrustTotalAmount));
+            walletContract.setAvailableBalance(walletContract.getAvailableBalance().subtract(entrustTotalAmount));
             memberWalletContractDao.updateById(walletContract);
             if (i > 0) {
                 return Result.ok("委托成功");
@@ -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);
@@ -157,4 +168,9 @@
         }
         return Result.fail("撤销失败");
     }
+
+    @Override
+    public List<ContractEntrustOrderEntity> selectEntrustOrderListByIds(List<Long> list) {
+        return contractEntrustOrderDao.selectEntrustOrderListByIds(list);
+    }
 }

--
Gitblit v1.9.1