From 0e2ecf41e6ff7dadd8b2f5bd18d118e88f23d9eb Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Tue, 30 Mar 2021 16:37:13 +0800
Subject: [PATCH] modify

---
 src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java |   70 ++++++++++++++++++++--------------
 1 files changed, 41 insertions(+), 29 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 9c93699..c8e82ea 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
@@ -385,17 +385,7 @@
 
             // 若该用户为交易员且开启带单模式,则发送带单异步
             if (isOpenFollow) {
-                FollowFollowerOrderRelationEntity relationEntity = new FollowFollowerOrderRelationEntity();
-                relationEntity.setIsShow(FollowFollowerOrderRelationEntity.IS_SHOW_Y);
-                relationEntity.setMemberId(holdOrderEntity.getMemberId());
-                relationEntity.setOrderId(holdOrderEntity.getId());
-                relationEntity.setOrderType(FollowFollowerOrderRelationEntity.ORDER_TYPE_HOLD);
-                relationEntity.setTradeId(tradeInfo.getId());
-                relationEntity.setTradeMemberId(tradeInfo.getMemberId());
-                relationEntity.setTradeOrderNo(holdOrderEntity.getOrderNo());
-                followFollowerOrderRelationDao.insert(relationEntity);
-
-                followProducer.sendAddFollowOrder(holdOrderEntity.getId());
+                sendFollowOrder(tradeInfo, holdOrderEntity);
 //                ThreadPoolUtils.sendFollowOrderTask(holdOrderEntity.getId());
             }
             // 提交成功
@@ -405,6 +395,20 @@
         return Result.fail(MessageSourceUtils.getString("member_service_0067"));
     }
 
+    @Override
+    public void sendFollowOrder(FollowTraderInfoEntity tradeInfo, ContractHoldOrderEntity holdOrderEntity) {
+        FollowFollowerOrderRelationEntity relationEntity = new FollowFollowerOrderRelationEntity();
+        relationEntity.setIsShow(FollowFollowerOrderRelationEntity.IS_SHOW_Y);
+        relationEntity.setMemberId(holdOrderEntity.getMemberId());
+        relationEntity.setOrderId(holdOrderEntity.getId());
+        relationEntity.setOrderType(FollowFollowerOrderRelationEntity.ORDER_TYPE_HOLD);
+        relationEntity.setTradeId(tradeInfo.getId());
+        relationEntity.setTradeMemberId(tradeInfo.getMemberId());
+        relationEntity.setTradeOrderNo(holdOrderEntity.getOrderNo());
+        followFollowerOrderRelationDao.insert(relationEntity);
+
+        followProducer.sendAddFollowOrder(holdOrderEntity.getId());
+    }
 
     /**
      * 全仓模式--若当前已经存在持仓,则合并当前持仓
@@ -499,7 +503,7 @@
                 }
 
                 // 回报率
-                BigDecimal returnRate = rewardRatio.divide(holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getPrePaymentAmount()), 8, BigDecimal.ROUND_DOWN);
+                BigDecimal returnRate = rewardRatio.divide(holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()), 8, BigDecimal.ROUND_DOWN);
 
                 // 成本价格
                 BigDecimal costPrice = holdOrderEntity.getOpeningPrice()
@@ -512,7 +516,7 @@
 //                if (canAddMaxBond.compareTo(BigDecimal.ZERO) < 0) {
 //                    canAddMaxBond = BigDecimal.ZERO;
 //                }
-                BigDecimal canReduceMaxBond = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount());
+                BigDecimal canReduceMaxBond = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getPrePaymentAmount());
 
                 if (rewardRatio.compareTo(BigDecimal.ZERO) < 0) {
                     canReduceMaxBond = canReduceMaxBond.add(rewardRatio);
@@ -549,7 +553,7 @@
             }
 
             result.put("hold", resultList);
-            result.put("totalProfitOrLoss", totalProfitOrLoss.setScale(4, BigDecimal.ROUND_DOWN).toPlainString());
+            result.put("totalProfitOrLoss", totalProfitOrLoss.setScale(2, BigDecimal.ROUND_DOWN).toPlainString());
             return Result.ok(result);
         }
         return Result.ok("success");
@@ -648,7 +652,7 @@
         	return Result.loading("loading_type");
         }
         
-        List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbol(memberEntity.getId(), symbolDto.getSymbol(), 1);
+        List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbol(memberEntity.getId(), symbolDto.getSymbol(), null);
         if (CollUtil.isEmpty(holdOrderEntities)) {
             return Result.fail("订单不存在");
         }
@@ -859,7 +863,7 @@
         BigDecimal newPriceSymbol = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(symbol)));
 
         List<ContractEntrustOrderEntity> entrustOrderEntities = contractEntrustOrderDao.selectEntrustOrderListByMemberId(memberEntity.getId());
-        List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberId(memberEntity.getId());
+        List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbolTest(memberEntity.getId(), null);
         MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name());
 //        if (memberEntity.getContractPositionType().equals(ContractEntrustOrderEntity.POSITION_TYPE_ADD)) {
 //            // 当前合约委托单
@@ -951,6 +955,7 @@
         contractMoneyInfoVo.setLeverRate(rateEntity.getLevelRateUp());
         contractMoneyInfoVo.setMoreBondAmount(moreBondAmount);
         contractMoneyInfoVo.setLessBondAmount(lessBondAmount);
+        contractMoneyInfoVo.setProfitOrLess(totalProfitOrLess);
         return Result.ok(contractMoneyInfoVo);
     }
 
@@ -1134,28 +1139,35 @@
 
         if (CollUtil.isNotEmpty(list)) {
             for (ContractHoldOrderEntity holdOrderEntity : list) {
+                BigDecimal thisTimeHold = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()).multiply(tradeSettingEntity.getDoingRatio());
+                MemberWalletContractEntity wallet = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(holdOrderEntity.getMemberId(), CoinTypeEnum.USDT.name());
+                log.info("订单编号:{}, 持仓费:{}", holdOrderEntity.getOrderNo(), thisTimeHold);
+
                 BigDecimal holdAmount = holdOrderEntity.getHoldAmount();
                 if (holdAmount == null) {
                     holdAmount = BigDecimal.ZERO;
                 }
 
-                BigDecimal thisTimeHold = holdOrderEntity.getBondAmount().multiply(tradeSettingEntity.getDoingRatio());
-                log.info("订单编号:{}, 持仓费:{}", holdOrderEntity.getOrderNo(), thisTimeHold);
-
-                MemberEntity memberEntity = memberDao.selectById(holdOrderEntity.getMemberId());
-                BigDecimal subBond = holdOrderEntity.getBondAmount().subtract(thisTimeHold);
-
-                BigDecimal newForcePrice = CalculateUtil.getForceSetPrice(subBond.subtract(holdOrderEntity.getOpeningFeeAmount()), holdOrderEntity.getOpeningPrice(), holdOrderEntity.getSymbolCnt(), holdOrderEntity.getSymbolSku(), holdOrderEntity.getOpeningType(), memberEntity);
                 holdAmount = holdAmount.add(thisTimeHold);
-                holdOrderEntity.setBondAmount(subBond);
-                holdOrderEntity.setHoldAmount(holdAmount);
-                holdOrderEntity.setForceClosingPrice(newForcePrice);
-                holdOrderEntity.setOperateNo(holdOrderEntity.getOperateNo() + 1);
-                contractHoldOrderDao.updateById(holdOrderEntity);
-
                 if (ContractEntrustOrderEntity.POSITION_TYPE_ADD == holdOrderEntity.getPositionType()) {
+
+                    MemberEntity memberEntity = memberDao.selectById(holdOrderEntity.getMemberId());
+                    BigDecimal subBond = holdOrderEntity.getBondAmount().subtract(thisTimeHold);
+                    BigDecimal newForcePrice = CalculateUtil.getForceSetPrice(subBond.subtract(holdOrderEntity.getOpeningFeeAmount()), holdOrderEntity.getOpeningPrice(), holdOrderEntity.getSymbolCnt(), holdOrderEntity.getSymbolSku(), holdOrderEntity.getOpeningType(), memberEntity);
+                    holdOrderEntity.setBondAmount(subBond);
+                    holdOrderEntity.setHoldAmount(holdAmount);
+                    holdOrderEntity.setForceClosingPrice(newForcePrice);
+                    holdOrderEntity.setOperateNo(holdOrderEntity.getOperateNo() + 1);
+                    contractHoldOrderDao.updateById(holdOrderEntity);
+
+                    memberWalletContractDao.increaseWalletContractBalanceById(null, thisTimeHold.negate(), null, wallet.getId());
                     // 发送爆仓消息
                     sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), newForcePrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo(), holdOrderEntity.getMemberId());
+                } else {
+                    holdOrderEntity.setHoldAmount(holdAmount);
+                    contractHoldOrderDao.updateById(holdOrderEntity);
+                    memberWalletContractDao.increaseWalletContractBalanceById(thisTimeHold.negate(), thisTimeHold.negate(), null, wallet.getId());
+                    ThreadPoolUtils.sendWholePrice(holdOrderEntity.getMemberId());
                 }
             }
         }

--
Gitblit v1.9.1