From d23645e976981bc9b670eea1d469fe8a36be309c Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Wed, 17 Apr 2024 17:19:53 +0800
Subject: [PATCH] 55测试环境

---
 src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java |   67 ++++++++++++++++++++++++++-------
 1 files changed, 53 insertions(+), 14 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
index 56a7f21..1d8078e 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
@@ -6,9 +6,11 @@
 import com.alibaba.fastjson.JSONObject;
 import com.xcong.excoin.common.contants.AppContants;
 import com.xcong.excoin.common.enumerates.CoinTypeEnum;
+import com.xcong.excoin.common.enumerates.MemberWalletCoinEnum;
 import com.xcong.excoin.common.enumerates.OrderClosingTypeEnum;
 import com.xcong.excoin.common.system.service.CommonService;
 import com.xcong.excoin.modules.coin.entity.MemberAccountFlowEntity;
+import com.xcong.excoin.modules.coin.entity.MemberAccountMoneyChange;
 import com.xcong.excoin.modules.contract.dao.ContractEntrustOrderDao;
 import com.xcong.excoin.modules.contract.dao.ContractHoldOrderDao;
 import com.xcong.excoin.modules.contract.dao.ContractOrderDao;
@@ -97,24 +99,36 @@
                 if (ids.size() == 1) {
                     ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectById(ids.get(0));
 
-                    // 判断仓位类型是否逐仓
-                    if (holdOrderEntity.getPositionType() == ContractEntrustOrderEntity.POSITION_TYPE_ADD) {
-                        // 逐仓平仓
-                        cancelHoldOrderMethod(holdOrderEntity);
+                    if (holdOrderEntity != null) {
+                        // 判断仓位类型是否逐仓
+                        if (holdOrderEntity.getPositionType() == ContractEntrustOrderEntity.POSITION_TYPE_ADD) {
+                            // 逐仓平仓
+                            cancelHoldOrderMethod(holdOrderEntity);
+                        } else {
+                            // 全仓模式平仓
+                            closingWholeOrder(holdOrderEntity);
+                        }
                     } else {
-                        // 全仓模式平仓
-                        closingWholeOrder(holdOrderEntity);
+                        log.info("持仓订单为空: {}", ids.get(0));
                     }
                 } else {
                     List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectBatchIds(ids);
                     if (CollUtil.isNotEmpty(holdOrderEntities)) {
                         for (ContractHoldOrderEntity holdOrder : holdOrderEntities) {
-                            cancelHoldOrderMethod(holdOrder);
+                            // 判断仓位类型是否逐仓
+                            if (holdOrder.getPositionType() == ContractEntrustOrderEntity.POSITION_TYPE_ADD) {
+                                // 逐仓平仓
+                                cancelHoldOrderMethod(holdOrder);
+                            } else {
+                                // 全仓模式平仓
+                                closingWholeOrder(holdOrder);
+                            }
                         }
                     }
                 }
             } catch (Exception e) {
                 log.error("平仓异常", e);
+                throw e;
             }
 
         }
@@ -168,12 +182,12 @@
             // 盈亏比例(回报率)
             BigDecimal rewardRatio = profitOrLoss.divide(holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()), 8, BigDecimal.ROUND_DOWN);
 
-            FollowTraderInfoEntity traderInfoEntity = null;
+            FollowTraderInfoEntity traderInfoEntity = followTraderInfoDao.selectTraderInfoByOrderId(holdOrderEntity.getId());
             // 判断当前订单是否为跟单
             if (ContractOrderEntity.CONTRACTTYPE_DOCUMENTARY == holdOrderEntity.getContractType()) {
-                // 若不为交易员,则计算跟随者订单返利
-                if (!MemberEntity.IS_TRADER_Y.equals(memberEntity.getIsTrader())) {
-                    traderInfoEntity = followTraderInfoDao.selectTraderInfoByOrderId(holdOrderEntity.getId());
+                // 若不为交易员且不是测试账号,则计算跟随者订单返利
+                if (!MemberEntity.IS_TRADER_Y.equals(memberEntity.getIsTrader()) &&
+                        !MemberEntity.ACCOUNT_TYPE_TEST.equals(memberEntity.getAccountType())) {
                     if (profitOrLoss.compareTo(BigDecimal.ZERO) > 0) {
                         // 计算需返利给交易员的金额
                         BigDecimal returnMoney = profitOrLoss.multiply(traderInfoEntity.getProfitRatio());
@@ -181,6 +195,25 @@
                         MemberWalletContractEntity traderWallet = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(traderInfoEntity.getMemberId(), CoinTypeEnum.USDT.name());
                         memberWalletContractDao.increaseWalletContractBalanceById(returnMoney, returnMoney, null, traderWallet.getId());
                         insertReturnProfitDetail(traderInfoEntity.getMemberId(), memberEntity.getId(), returnMoney, holdOrderEntity.getOrderNo());
+                        //增加返佣提醒
+//                        String orderNo = holdOrderEntity.getOrderNo();
+//                        LogRecordUtils.insertFollowerNotice(traderInfoEntity.getMemberId(),
+//                                NoticeConstant.RETURN_MONEY_TITLE,
+//                                StrUtil.format(NoticeConstant.RETURN_MONEY_CONTENT,
+//                                        orderNo,
+//                                		holdOrderEntity.getSymbol(),
+//                                        returnMoney.setScale(2, BigDecimal.ROUND_HALF_UP).toString()));
+//                        //带单返利的记录要在资产页面的其他记录
+//                        LogRecordUtils.insertMemberAccountMoneyChange(
+//                        		traderInfoEntity.getMemberId(),
+//                                StrUtil.format(NoticeConstant.RETURN_MONEY_CONTENT_MAMC,
+//                                        orderNo,
+//                                		holdOrderEntity.getSymbol(),
+//                                        returnMoney.setScale(2, BigDecimal.ROUND_HALF_UP).toString()),
+//                        		returnMoney.setScale(2, BigDecimal.ROUND_HALF_UP),
+//                        		MemberWalletCoinEnum.WALLETCOINCODE.getValue(),
+//                        		MemberAccountMoneyChange.STATUS_SUCCESS_INTEGER,
+//                        		MemberAccountMoneyChange.TYPE_WALLET_AGENT);
                     }
                 }
             }
@@ -214,8 +247,8 @@
                 if (MemberEntity.IS_TRADER_Y.equals(memberEntity.getIsTrader())) {
                     followOrderOperationService.closingFollowOrders(holdOrderEntity.getOrderNo());
                 } else {
-                    followFollowerProfitDao.updateFollowerProfitByTradeMemberId(holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()), profitOrLoss, traderInfoEntity.getMemberId(), memberEntity.getId());
-                    LogRecordUtils.insertFollowerNotice(memberEntity.getId(), NoticeConstant.CLOSE_ORDER_TITLE, StrUtil.format(NoticeConstant.CLOSE_ORDER_CONTENT, contractOrderEntity.getSymbol(), contractOrderEntity.getClosingPrice(), profitOrLoss.setScale(8, BigDecimal.ROUND_DOWN).toString(), traderInfoEntity.getNickname()));
+                    //followFollowerProfitDao.updateFollowerProfitByTradeMemberId(holdOrderEntity.getBondAmount(), profitOrLoss, traderInfoEntity.getMemberId(), memberEntity.getId());
+                    LogRecordUtils.insertFollowerNotice(memberEntity.getId(), NoticeConstant.CLOSE_ORDER_TITLE, StrUtil.format(NoticeConstant.CLOSE_ORDER_CONTENT, contractOrderEntity.getSymbol(), contractOrderEntity.getClosingPrice().setScale(2, BigDecimal.ROUND_HALF_UP).toString(), profitOrLoss.setScale(2, BigDecimal.ROUND_HALF_UP).toString(), traderInfoEntity.getNickname()));
                 }
             }
         }
@@ -274,6 +307,11 @@
 
             // 获取平仓张数
             Integer closeCnt = (Integer) redisUtils.get(AppContants.CLOSING_ORDER_PREFIX + holdOrderEntity.getId());
+            // 无法从redis中获取平仓张数,说明来自一键平仓
+            if (closeCnt == null) {
+                closeCnt = holdOrderEntity.getSymbolCntSale();
+                holdOrderEntity.setSymbolCntSale(0);
+            }
 
             MemberSettingEntity memberSettingEntity = memberSettingDao.selectMemberSettingByMemberId(memberEntity.getId());
             // 开多
@@ -453,6 +491,7 @@
         contractOrderEntity.setSymbolCnt(closeCnt);
         contractOrderEntity.setRewardAmount(profitOrLoss);
         contractOrderEntity.setBondAmount(bondAmount);
+        contractOrderEntity.setClosingTime(new Date());
         contractOrderEntity.setClosingFeeAmount(fee);
         contractOrderDao.insert(contractOrderEntity);
 
@@ -498,7 +537,7 @@
                     continue;
                 }
 
-//                holdOrderEntity.setForceClosingPrice(getForceSetPrice(wholePriceData, holdOrderEntity, holdOrderDataModel.getSymbol()));
+                holdOrderEntity.setStopLossPrice(CalculateUtil.calWholePriceTwo(memberEntity, holdOrderEntity, 2));
                 contractHoldOrderDao.deleteById(holdOrderDataModel.getId());
 
                 ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(holdOrderEntity);

--
Gitblit v1.9.1