From 36be00e0f3cbe0d559c646fd2977e6e3a74aa6f9 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Mon, 30 Sep 2024 16:57:22 +0800
Subject: [PATCH] Merge branch 'bea' of http://120.27.238.55:7000/r/exchange into bea

---
 src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java |   39 +++++++++++++++++++++++++++++++++------
 1 files changed, 33 insertions(+), 6 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 6e4a42d..a699ab2 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
@@ -6,6 +6,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huobi.client.model.Candlestick;
 import com.xcong.excoin.common.LoginUserUtils;
 import com.xcong.excoin.common.enumerates.CoinTypeEnum;
 import com.xcong.excoin.common.enumerates.RabbitPriceTypeEnum;
@@ -149,6 +150,7 @@
         holdOrderEntity.setTradeType(ContractHoldOrderEntity.TRADE_TYPE_MARK);
         holdOrderEntity.setSymbol(submitOrderDto.getSymbol());
         holdOrderEntity.setSymbolCnt(submitOrderDto.getSymbolCnt());
+        holdOrderEntity.setSymbolCntSale(submitOrderDto.getSymbolCnt());
         holdOrderEntity.setSymbolSku(lotNumber);
         holdOrderEntity.setLeverRatio(submitOrderDto.getLeverRatio());
         holdOrderEntity.setForceClosingPrice(forceClosingPrice);
@@ -467,6 +469,8 @@
         // 当前持仓列表
         List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberId(memberEntity.getId());
 
+        MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name());
+
         // 冻结保证金 -- 即委托单中的保证金之和
         BigDecimal frozenBondAmount = BigDecimal.ZERO;
         if (CollUtil.isNotEmpty(entrustOrderEntities)) {
@@ -477,6 +481,8 @@
 
         // 占用保证金 -- 即持仓单中的保证金之和
         BigDecimal beUsedBondAmount = BigDecimal.ZERO;
+        BigDecimal moreBondAmount = BigDecimal.ZERO;
+        BigDecimal lessBondAmount = BigDecimal.ZERO;
         // 总盈利
         BigDecimal totalProfitOrLess = BigDecimal.ZERO;
         if (CollUtil.isNotEmpty(holdOrderEntities)) {
@@ -490,10 +496,12 @@
                 BigDecimal profitOrLess = BigDecimal.ZERO;
                 // 开多
                 if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) {
-                    profitOrLess = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt())).multiply(lotNumber);
+                    moreBondAmount = moreBondAmount.add(holdOrderEntity.getBondAmount());
+                    profitOrLess = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale())).multiply(lotNumber);
                     // 开空
                 } else {
-                    profitOrLess = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt())).multiply(lotNumber);
+                    lessBondAmount = lessBondAmount.add(holdOrderEntity.getBondAmount());
+                    profitOrLess = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale())).multiply(lotNumber);
                 }
 
                 if (MemberEntity.IS_PROFIT_Y == memberEntity.getIsProfit()) {
@@ -508,23 +516,42 @@
             }
         }
 
-        MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name());
-
         MemberLevelRateEntity rateEntity = memberLevelRateDao.selectLeverRateByMemberIdAndSymbol(memberEntity.getId(), symbol);
 
+        ContractMoneyInfoVo contractMoneyInfoVo = new ContractMoneyInfoVo();
         // 权益
         BigDecimal equity = walletContractEntity.getTotalBalance().add(totalProfitOrLess);
+        if (equity.compareTo(BigDecimal.ZERO) <= 0) {
+            equity = BigDecimal.ZERO;
+        }
 
-        ContractMoneyInfoVo contractMoneyInfoVo = new ContractMoneyInfoVo();
-        contractMoneyInfoVo.setAvailableBalance(walletContractEntity.getAvailableBalance());
+        BigDecimal available = walletContractEntity.getAvailableBalance();
+//        if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == memberEntity.getContractPositionType()) {
+//            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();
+        BigDecimal upOrDown = newPriceSymbol.subtract(openPrice).divide(openPrice, 8, BigDecimal.ROUND_HALF_UP);
         contractMoneyInfoVo.setBeUsedBondAmount(beUsedBondAmount);
         contractMoneyInfoVo.setFrozenBondAmount(frozenBondAmount);
         contractMoneyInfoVo.setEquity(equity);
+        contractMoneyInfoVo.setAvailableBalance(available);
         contractMoneyInfoVo.setFeeRatio(tradeSetting.getFeeRatio());
         contractMoneyInfoVo.setLeverAgeRatio(tradeSetting.getLeverageRatio());
         contractMoneyInfoVo.setNewPrice(newPriceSymbol);
+        contractMoneyInfoVo.setUpOrDown(upOrDown);
         contractMoneyInfoVo.setSymbolSku(cacheSettingUtils.getSymbolSku(symbol));
         contractMoneyInfoVo.setLeverRate(rateEntity.getLevelRateUp());
+        contractMoneyInfoVo.setMoreBondAmount(moreBondAmount);
+        contractMoneyInfoVo.setLessBondAmount(lessBondAmount);
+        contractMoneyInfoVo.setProfitOrLess(totalProfitOrLess);
         return Result.ok(contractMoneyInfoVo);
     }
 

--
Gitblit v1.9.1