From 75077ad781cec8a590f36aceadb27e930d69f48f Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Thu, 04 Mar 2021 16:13:24 +0800
Subject: [PATCH] 20210304   昵称只能修改一次

---
 src/main/java/com/xcong/excoin/modules/documentary/service/impl/FollowOrderOperationServiceImpl.java |   85 ++++++++++++++++++++++++++++++++++++------
 1 files changed, 72 insertions(+), 13 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/documentary/service/impl/FollowOrderOperationServiceImpl.java b/src/main/java/com/xcong/excoin/modules/documentary/service/impl/FollowOrderOperationServiceImpl.java
index bb3a3a8..e0f411b 100644
--- a/src/main/java/com/xcong/excoin/modules/documentary/service/impl/FollowOrderOperationServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/documentary/service/impl/FollowOrderOperationServiceImpl.java
@@ -1,8 +1,11 @@
 package com.xcong.excoin.modules.documentary.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.xcong.excoin.common.enumerates.CoinTypeEnum;
 import com.xcong.excoin.common.enumerates.RabbitPriceTypeEnum;
 import com.xcong.excoin.common.response.Result;
@@ -13,6 +16,7 @@
 import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity;
 import com.xcong.excoin.modules.contract.entity.ContractOrderEntity;
 import com.xcong.excoin.modules.contract.mapper.ContractHoldOrderEntityMapper;
+import com.xcong.excoin.modules.contract.service.RabbitOrderService;
 import com.xcong.excoin.modules.documentary.common.NoticeConstant;
 import com.xcong.excoin.modules.documentary.dao.FollowFollowerOrderRelationDao;
 import com.xcong.excoin.modules.documentary.dao.FollowFollowerProfitDao;
@@ -24,23 +28,27 @@
 import com.xcong.excoin.modules.documentary.entity.FollowTraderInfoEntity;
 import com.xcong.excoin.modules.documentary.service.FollowOrderOperationService;
 import com.xcong.excoin.modules.member.dao.MemberDao;
+import com.xcong.excoin.modules.member.dao.MemberLevelRateDao;
+import com.xcong.excoin.modules.member.dao.MemberSettingDao;
 import com.xcong.excoin.modules.member.dao.MemberWalletContractDao;
-import com.xcong.excoin.modules.member.entity.AgentReturnEntity;
-import com.xcong.excoin.modules.member.entity.MemberEntity;
-import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity;
+import com.xcong.excoin.modules.member.entity.*;
 import com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity;
 import com.xcong.excoin.rabbit.pricequeue.OrderModel;
+import com.xcong.excoin.rabbit.producer.FollowProducer;
 import com.xcong.excoin.rabbit.producer.OrderProducer;
 import com.xcong.excoin.utils.CacheSettingUtils;
 import com.xcong.excoin.utils.CalculateUtil;
 import com.xcong.excoin.utils.LogRecordUtils;
 import com.xcong.excoin.utils.ThreadPoolUtils;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -71,15 +79,37 @@
     private OrderProducer producer;
     @Resource
     private FollowTraderInfoDao followTraderInfoDao;
+    @Resource
+    private RabbitOrderService rabbitOrderService;
+    @Resource
+    private MemberLevelRateDao memberLevelRateDao;
+    @Resource
+    private MemberSettingDao memberSettingDao;
+
+    @Autowired
+    private FollowProducer followProducer;
 
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void addFollowerOrder(Long id) {
-        log.info("进入跟单处理逻辑");
+        log.info("进入跟单处理逻辑 : {}", id);
         // 查询交易员订单
         ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectById(id);
 
+        if (holdOrderEntity == null) {
+            try {
+                log.info("等待事务提交:{}", id);
+                Thread.sleep(200);
+                followProducer.sendAddFollowOrder(id);
+                return;
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+
         List<FollowFollowerSettingEntity> followerSettings = followFollowerSettingDao.selectAllFollowerSettingByTradeMemberId(holdOrderEntity.getMemberId());
+        log.info("进入跟单处理逻辑---跟单人数"+followerSettings.size());
         // 开仓价
         BigDecimal openPrice = holdOrderEntity.getOpeningPrice();
         PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting();
@@ -92,6 +122,20 @@
         Long tradeMemberId = holdOrderEntity.getMemberId();
         if (CollUtil.isNotEmpty(followerSettings)) {
             for (FollowFollowerSettingEntity followerSetting : followerSettings) {
+
+            	//更新更新消息提醒的状态
+                MemberSettingEntity memberSettingEntity = memberSettingDao.selectMemberSettingByMemberId(followerSetting.getId());
+                if(ObjectUtil.isNotEmpty(memberSettingEntity)){
+                	Long memberId = memberSettingEntity.getMemberId();
+                	log.info("更新更新消息提醒的状态");
+                	memberSettingDao.updateMessageReminderByMemberId(memberId);
+                }
+            	
+                if (!followerSetting.getSymbols().contains(holdOrderEntity.getSymbol().replace("/USDT", ""))) {
+                    log.info("不在跟单币种内,不跟单:{},{}", followerSetting.getSymbols(), holdOrderEntity.getSymbol());
+                    continue;
+                }
+
                 // 当前持仓张数
                 Integer holdingCnt = followFollowerOrderRelationDao.selectFollowerHoldingSymbolCnt(tradeMemberId, followerSetting.getMemberId());
 
@@ -110,7 +154,7 @@
                     }
 
                     if (symbolCnt <= 0) {
-//                        LogRecordUtils.insertFollowerNotice(memberEntity.getId(), NoticeConstant.OPEN_ORDER_TITLE, StrUtil.format(NoticeConstant.OPEN_ORDER_CONTENT, holdOrderEntity.getSymbol() + "开空", openPrice, followTraderInfoEntity.getNickname()));
+                        LogRecordUtils.insertFollowerNotice(followerSetting.getMemberId(), NoticeConstant.OPEN_ORDER_FOLLOW_FAIL_TITLE, StrUtil.format(NoticeConstant.OPEN_ORDER_FOLLOW_FAIL_CONTENT, followTraderInfoEntity.getNickname()));
                         continue;
                     }
                 }
@@ -120,6 +164,7 @@
                     log.info("钱包地址不存在:{}", followerSetting.getMemberId());
                     continue;
                 }
+                MemberLevelRateEntity levelRateEntity = memberLevelRateDao.selectLeverRateByMemberIdAndSymbol(followerSetting.getMemberId(), holdOrderEntity.getSymbol());
 
                 // 开仓手续费 建仓价*规格*手数*手续费率
                 BigDecimal openFeePrice = openPrice.multiply(lotNumber)
@@ -129,20 +174,20 @@
 
                 // 保证金
                 BigDecimal bondAmount = openPrice.multiply(lotNumber).multiply(new BigDecimal(symbolCnt))
-                        .multiply(BigDecimal.ONE.divide(new BigDecimal(holdOrderEntity.getLeverRatio())))
+                        .multiply(BigDecimal.ONE.divide(new BigDecimal(levelRateEntity.getLevelRateUp())))
                         .setScale(8, BigDecimal.ROUND_DOWN);
 
                 // 预付款
                 BigDecimal prePaymentAmount = bondAmount.add(openFeePrice).add(openFeePrice);
                 if (prePaymentAmount.compareTo(walletContract.getAvailableBalance()) > -1) {
                     log.info("可用金额不足");
+                    LogRecordUtils.insertFollowerNotice(followerSetting.getMemberId(), NoticeConstant.MONEY_NOT_ENOUGH_TITLE, StrUtil.format(NoticeConstant.MONEY_NOT_ENOUGH_CONTENT, followTraderInfoEntity.getNickname()));
                     continue;
                 }
 
                 MemberEntity memberEntity = memberDao.selectById(followerSetting.getMemberId());
                 // 强平价
                 BigDecimal forceClosingPrice = CalculateUtil.getForceSetPrice(bondAmount, openPrice, symbolCnt, lotNumber, holdOrderEntity.getOpeningType(), memberEntity);
-
                 ContractHoldOrderEntity followHoldOrder = new ContractHoldOrderEntity();
                 followHoldOrder.setMemberId(memberEntity.getId());
                 followHoldOrder.setOrderNo(commonService.generateOrderNo(memberEntity.getId()));
@@ -150,8 +195,9 @@
                 followHoldOrder.setTradeType(ContractHoldOrderEntity.TRADE_TYPE_MARK);
                 followHoldOrder.setSymbol(holdOrderEntity.getSymbol());
                 followHoldOrder.setSymbolCnt(symbolCnt);
+                followHoldOrder.setSymbolCntSale(symbolCnt);
                 followHoldOrder.setSymbolSku(lotNumber);
-                followHoldOrder.setLeverRatio(holdOrderEntity.getLeverRatio());
+                followHoldOrder.setLeverRatio(levelRateEntity.getLevelRateUp());
                 followHoldOrder.setForceClosingPrice(forceClosingPrice);
                 followHoldOrder.setOpeningFeeAmount(openFeePrice);
                 followHoldOrder.setOpeningPrice(openPrice);
@@ -178,11 +224,11 @@
                     relationEntity.setOrderType(FollowFollowerOrderRelationEntity.ORDER_TYPE_HOLD);
                     relationEntity.setTradeId(followTraderInfoEntity.getId());
                     relationEntity.setTradeMemberId(followTraderInfoEntity.getMemberId());
-                    relationEntity.setTradeOrderId(id);
+                    relationEntity.setTradeOrderNo(holdOrderEntity.getOrderNo());
                     followFollowerOrderRelationDao.insert(relationEntity);
 
                     // 发送爆仓消息
-                    sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), forceClosingPrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo());
+                    sendOrderBombMsg(followHoldOrder.getId(), followHoldOrder.getOpeningType(), forceClosingPrice, followHoldOrder.getSymbol(), followHoldOrder.getOperateNo(), followHoldOrder.getMemberId());
 
                     // 计算佣金
                     ThreadPoolUtils.calReturnMoney(memberEntity.getId(), contractOrderEntity.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_OPEN);
@@ -200,15 +246,28 @@
         }
     }
 
-    public void sendOrderBombMsg(Long id, int type, BigDecimal forceClosingPrice, String symbol, int operateNo) {
+    public void sendOrderBombMsg(Long id, int type, BigDecimal forceClosingPrice, String symbol, int operateNo, Long memberId) {
         OrderModel model = null;
         // 开多
         if (ContractHoldOrderEntity.OPENING_TYPE_MORE == type) {
-            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_MORE_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo);
+            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_MORE_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo, memberId);
             // 开空
         } else {
-            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_LESS_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo);
+            model = new OrderModel(id, RabbitPriceTypeEnum.CLOSE_LESS_BOMB.getValue(), forceClosingPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), symbol, operateNo, memberId);
         }
         producer.sendPriceOperate(JSONObject.toJSONString(model));
     }
+
+
+    @Override
+    public void closingFollowOrders(String orderNo) {
+        List<FollowFollowerOrderRelationEntity> orderRelations = followFollowerOrderRelationDao.selectFollowHoldOrderByTradeOrderNo(orderNo);
+        if (CollUtil.isNotEmpty(orderRelations)) {
+            for (FollowFollowerOrderRelationEntity orderRelation : orderRelations) {
+                List<Long> ids= new ArrayList<>();
+                ids.add(orderRelation.getOrderId());
+                rabbitOrderService.cancelHoldOrder(ids);
+            }
+        }
+    }
 }

--
Gitblit v1.9.1