From 1e97d92a4c7548574e7e426dfa15dba4eb85f21d Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Tue, 02 Feb 2021 15:31:24 +0800
Subject: [PATCH] modify

---
 src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java |   36 ++++++++++++++++++++++++++++++++----
 1 files changed, 32 insertions(+), 4 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 72c565f..2057b81 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
@@ -233,7 +233,7 @@
         holdOrderEntity.setOpeningPrice(openingPrice);
         holdOrderEntity.setOpeningType(submitOrderDto.getOrderType());
         holdOrderEntity.setMarkPrice(newPrice);
-        holdOrderEntity.setIsCanClosing(ContractHoldOrderEntity.ORDER_CAN_CLOSING_N);
+        holdOrderEntity.setIsCanClosing(ContractHoldOrderEntity.ORDER_CAN_CLOSING_Y);
         holdOrderEntity.setPrePaymentAmount(prePaymentAmount);
         holdOrderEntity.setBondAmount(bondAmount.add(openFeePrice));
         holdOrderEntity.setOperateNo(1);
@@ -443,12 +443,18 @@
     @Override
     public Result findHoldOrderList(String symbol, int type) {
         MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
+        List<ContractHoldOrderEntity> list = null;
 
-//        List<ContractHoldOrderEntity> list = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbol(memberEntity.getId(), symbol, type);
-        List<ContractHoldOrderEntity> list = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbolTest(memberEntity.getId(),type);
+        if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == memberEntity.getContractPositionType()) {
+            list = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbolTest(memberEntity.getId(), type);
+        } else {
+            list = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbol(memberEntity.getId(), symbol, type);
+        }
+
         MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name());
         if (CollUtil.isNotEmpty(list)) {
             BigDecimal totalProfitOrLoss = BigDecimal.ZERO;
+            BigDecimal totalHoldBond = BigDecimal.ZERO;
             List<HoldOrderListVo> resultList = new ArrayList<>();
             for (ContractHoldOrderEntity holdOrderEntity : list) {
                 HoldOrderListVo holdOrderListVo = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToDto(holdOrderEntity);
@@ -500,6 +506,7 @@
                     canReduceMaxBond = BigDecimal.ZERO;
                 }
 
+                holdOrderListVo.setBondAmount(walletContractEntity.getTotalBalance());
                 holdOrderListVo.setCanReduceMaxBond(canReduceMaxBond);
                 holdOrderListVo.setCanAddMaxBond(walletContractEntity.getAvailableBalance());
                 holdOrderListVo.setReturnRate(returnRate);
@@ -510,9 +517,22 @@
                 }
                 resultList.add(holdOrderListVo);
                 totalProfitOrLoss = totalProfitOrLoss.add(rewardRatio);
+                totalHoldBond = totalHoldBond.add(holdOrderEntity.getHoldBond() == null ? BigDecimal.ZERO : holdOrderEntity.getHoldBond());
             }
 
             Map<String, Object> result = new HashMap<>();
+            if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == memberEntity.getContractPositionType()) {
+                List<ContractEntrustOrderEntity> entrustOrder = contractEntrustOrderDao.selectEntrustOrderListByMemberId(memberEntity.getId());
+                BigDecimal totalEntrustAmount = BigDecimal.ZERO;
+                if (CollUtil.isNotEmpty(entrustOrder)) {
+                    for (ContractEntrustOrderEntity contractEntrustOrderEntity : entrustOrder) {
+                        totalEntrustAmount.add(contractEntrustOrderEntity.getEntrustAmount());
+                    }
+                }
+                BigDecimal riskRatio = totalHoldBond.divide(walletContractEntity.getTotalBalance().add(totalProfitOrLoss).subtract(totalEntrustAmount), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100));
+                result.put("riskRatio", riskRatio);
+            }
+
             result.put("hold", resultList);
             result.put("totalProfitOrLoss", totalProfitOrLoss.setScale(4, BigDecimal.ROUND_DOWN).toPlainString());
             return Result.ok(result);
@@ -845,6 +865,14 @@
             equity = BigDecimal.ZERO;
         }
         
+        BigDecimal available = walletContractEntity.getAvailableBalance();
+        if (totalProfitOrLess.compareTo(BigDecimal.ZERO) <= 0) {
+            available = available.add(totalProfitOrLess);
+            if (available.compareTo(BigDecimal.ZERO) <= 0) {
+                available = BigDecimal.ZERO;
+            }
+        }
+        
         // 获取当日k线的开盘价
         Candlestick symbolObject = (Candlestick) redisUtils.get(symbol);
         BigDecimal openPrice = symbolObject.getOpen();
@@ -852,7 +880,7 @@
         contractMoneyInfoVo.setBeUsedBondAmount(beUsedBondAmount);
         contractMoneyInfoVo.setFrozenBondAmount(frozenBondAmount);
         contractMoneyInfoVo.setEquity(equity);
-        contractMoneyInfoVo.setAvailableBalance(walletContractEntity.getAvailableBalance());
+        contractMoneyInfoVo.setAvailableBalance(available);
         contractMoneyInfoVo.setFeeRatio(tradeSetting.getFeeRatio());
         contractMoneyInfoVo.setLeverAgeRatio(tradeSetting.getLeverageRatio());
         contractMoneyInfoVo.setNewPrice(newPriceSymbol);

--
Gitblit v1.9.1