From bf68aa759bc3c0a858d80cb3d1ae1f1682cd6c94 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Tue, 06 Apr 2021 15:38:42 +0800
Subject: [PATCH] Merge branch 'activity' of http://120.27.238.55:7000/r/exchange into activity

---
 src/main/java/com/xcong/excoin/modules/documentary/service/FollowOrderOperationService.java          |    4 
 src/main/java/com/xcong/excoin/rabbit/producer/FollowProducer.java                                   |   22 ++
 src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java       |    4 
 src/main/java/com/xcong/excoin/modules/documentary/service/impl/FollowOrderOperationServiceImpl.java |   68 ++++++
 src/main/java/com/xcong/excoin/modules/documentary/common/NoticeConstant.java                        |    5 
 src/main/java/com/xcong/excoin/modules/blackchain/service/Impl/BlockSeriveImpl.java                  |    4 
 src/main/java/com/xcong/excoin/rabbit/consumer/FollowConsumer.java                                   |   16 +
 src/test/java/com/xcong/excoin/FollowTest.java                                                       |  512 +--------------------------------------------
 8 files changed, 142 insertions(+), 493 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/blackchain/service/Impl/BlockSeriveImpl.java b/src/main/java/com/xcong/excoin/modules/blackchain/service/Impl/BlockSeriveImpl.java
index f999aac..3f547ce 100644
--- a/src/main/java/com/xcong/excoin/modules/blackchain/service/Impl/BlockSeriveImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/blackchain/service/Impl/BlockSeriveImpl.java
@@ -104,12 +104,12 @@
                         }
                         break;
                     case "EOS":
-                        address = "biyicteos123";
+                        address = "hibitdeposit";
                         map.put("address", address);
                         map.put("lable", uuid);
                         break;
                     case "XRP":
-                        address = "biyicteos123";
+                        address = "rUzWJkXyEtT8ekSSxkBYPqCvHpngcy6Fks";
                         map.put("address", address);
                         map.put("lable", uuid);
                         break;
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 8a8b96f..1c3431f 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
@@ -851,6 +851,10 @@
         if (i > 0) {
             // 发送爆仓消息
             sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), forceClosingPrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo(), holdOrderEntity.getMemberId());
+
+            if (ContractOrderEntity.CONTRACTTYPE_DOCUMENTARY == holdOrderEntity.getContractType()) {
+                followProducer.sendChangeFollowOrderBond(holdOrderEntity.getId(), changeBondDto.getAmount(), changeBondDto.getType());
+            }
             return Result.ok("调整成功");
         }
         return Result.fail("调整失败");
diff --git a/src/main/java/com/xcong/excoin/modules/documentary/common/NoticeConstant.java b/src/main/java/com/xcong/excoin/modules/documentary/common/NoticeConstant.java
index dd1ab04..c44da35 100644
--- a/src/main/java/com/xcong/excoin/modules/documentary/common/NoticeConstant.java
+++ b/src/main/java/com/xcong/excoin/modules/documentary/common/NoticeConstant.java
@@ -34,4 +34,9 @@
     public static final String RETURN_MONEY_CONTENT = "平仓成功,收到的合约{},币种{}的返利金额:{}";
     public static final String RETURN_MONEY_CONTENT_MAMC = "合约-{},订单{}的带单返利";
 
+    public static final String CHANGE_BOND_TITLE = "跟单-调整保证金";
+    public static final String CHANGE_BOND_ADD_CONTENT_FAIL = "金额不足无法跟随交易员调整保证金";
+    public static final String CHANGE_BOND_CONTENT_SUCCESS = "跟随交易员调整保证金成功,金额为{}, 交易员:{}";
+
+    public static final String CHANGE_BOND_REDUCE_CONTENT_FAIL = "超出保证金最大减少金额,无法跟随交易员调整保证金";
 }
diff --git a/src/main/java/com/xcong/excoin/modules/documentary/service/FollowOrderOperationService.java b/src/main/java/com/xcong/excoin/modules/documentary/service/FollowOrderOperationService.java
index bde0247..401a228 100644
--- a/src/main/java/com/xcong/excoin/modules/documentary/service/FollowOrderOperationService.java
+++ b/src/main/java/com/xcong/excoin/modules/documentary/service/FollowOrderOperationService.java
@@ -3,6 +3,8 @@
 
 import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity;
 
+import java.math.BigDecimal;
+
 /**
  * @author helius
  */
@@ -23,4 +25,6 @@
      * @param newOrderId 交易员平仓后历史ID
      */
     public void closingFollowOrders(String orderNo);
+
+    public void changeFollowOrdersBond(Long id, BigDecimal bond, Integer type);
 }
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 f218e29..eae5138 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
@@ -10,6 +10,7 @@
 import com.xcong.excoin.common.enumerates.CoinTypeEnum;
 import com.xcong.excoin.common.enumerates.MemberWalletCoinEnum;
 import com.xcong.excoin.common.enumerates.RabbitPriceTypeEnum;
+import com.xcong.excoin.common.exception.GlobalException;
 import com.xcong.excoin.common.response.Result;
 import com.xcong.excoin.common.system.service.CommonService;
 import com.xcong.excoin.modules.coin.entity.MemberAccountMoneyChange;
@@ -19,6 +20,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.parameter.dto.ChangeBondDto;
 import com.xcong.excoin.modules.contract.service.RabbitOrderService;
 import com.xcong.excoin.modules.documentary.common.NoticeConstant;
 import com.xcong.excoin.modules.documentary.dao.*;
@@ -368,4 +370,70 @@
             }
         }
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void changeFollowOrdersBond(Long id, BigDecimal bond, Integer type) {
+        log.info("==跟单调整保证金:{}, {}, {}==", id, bond, type);
+        ContractHoldOrderEntity contractHoldOrderEntity = contractHoldOrderDao.selectById(id);
+        if (contractHoldOrderEntity == null) {
+            log.info("持仓不存在:{}", id);
+            return;
+        }
+
+        // 交易员信息
+        FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectTraderInfoByMemberId(contractHoldOrderEntity.getMemberId());
+
+        List<FollowFollowerOrderRelationEntity> relations = followFollowerOrderRelationDao.selectFollowHoldOrderByTradeOrderNo(contractHoldOrderEntity.getOrderNo());
+        if (CollUtil.isNotEmpty(relations)) {
+            for (FollowFollowerOrderRelationEntity relation : relations) {
+                ContractHoldOrderEntity followHoldOrder = contractHoldOrderDao.selectById(relation.getOrderId());
+                MemberEntity memberEntity = memberDao.selectById(relation.getMemberId());
+                MemberWalletContractEntity wallet = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name());
+
+                // 增加保证金
+                if (type == ChangeBondDto.TYPE_ADD) {
+                    if (bond.compareTo(wallet.getAvailableBalance()) > 0) {
+                        log.info("可用金额不足:{}, {}", memberEntity.getId(), followHoldOrder.getOrderNo());
+                        LogRecordUtils.insertFollowerNotice(memberEntity.getId(), NoticeConstant.CHANGE_BOND_TITLE, NoticeConstant.CHANGE_BOND_ADD_CONTENT_FAIL);
+                        continue;
+                    }
+
+                    memberWalletContractDao.increaseWalletContractBalanceById(bond.negate(), null, null, wallet.getId());
+                    followHoldOrder.setBondAmount(followHoldOrder.getBondAmount().add(bond));
+                    LogRecordUtils.insertFollowerNotice(memberEntity.getId(), NoticeConstant.CHANGE_BOND_TITLE, StrUtil.format(NoticeConstant.CHANGE_BOND_CONTENT_SUCCESS, bond, followTraderInfoEntity.getNickname()));
+                } else {
+                    if (followHoldOrder.getBondAmount().subtract(followHoldOrder.getPrePaymentAmount()).subtract(bond).compareTo(BigDecimal.ZERO) < 0) {
+                        log.info("超出保证金最大减少金额-1");
+                        LogRecordUtils.insertFollowerNotice(memberEntity.getId(), NoticeConstant.CHANGE_BOND_TITLE, NoticeConstant.CHANGE_BOND_ADD_CONTENT_FAIL);
+                        continue;
+                    }
+
+                    BigDecimal profitOrLoss = CalculateUtil.calProfitOrLoss(followHoldOrder, memberEntity);
+                    if (profitOrLoss.compareTo(BigDecimal.ZERO) < 0) {
+                        BigDecimal canReduceMax = followHoldOrder.getBondAmount().subtract(followHoldOrder.getPrePaymentAmount()).add(profitOrLoss);
+                        if (canReduceMax.subtract(bond).compareTo(BigDecimal.ZERO) < 0) {
+                            log.info("超出保证金最大减少金额-2");
+                            LogRecordUtils.insertFollowerNotice(memberEntity.getId(), NoticeConstant.CHANGE_BOND_TITLE, NoticeConstant.CHANGE_BOND_ADD_CONTENT_FAIL);
+                            continue;
+                        }
+                    }
+
+                    memberWalletContractDao.increaseWalletContractBalanceById(bond, null, null, wallet.getId());
+                    followHoldOrder.setBondAmount(followHoldOrder.getBondAmount().subtract(bond));
+                    LogRecordUtils.insertFollowerNotice(memberEntity.getId(), NoticeConstant.CHANGE_BOND_TITLE, StrUtil.format(NoticeConstant.CHANGE_BOND_CONTENT_SUCCESS, bond.negate(), followTraderInfoEntity.getNickname()));
+                }
+
+                BigDecimal forceClosingPrice = CalculateUtil.getForceSetPrice(followHoldOrder.getBondAmount(), followHoldOrder.getOpeningPrice(), followHoldOrder.getSymbolCnt(), followHoldOrder.getSymbolSku(), followHoldOrder.getOpeningType(), memberEntity);
+                followHoldOrder.setForceClosingPrice(forceClosingPrice);
+                followHoldOrder.setOperateNo(followHoldOrder.getOperateNo() + 1);
+                int i = contractHoldOrderDao.updateById(followHoldOrder);
+                if (i > 0) {
+                    sendOrderBombMsg(followHoldOrder.getId(), followHoldOrder.getOpeningType(), forceClosingPrice, followHoldOrder.getSymbol(), followHoldOrder.getOperateNo(), followHoldOrder.getMemberId());
+                } else {
+                    throw new GlobalException("更新失败");
+                }
+            }
+        }
+    }
 }
diff --git a/src/main/java/com/xcong/excoin/rabbit/consumer/FollowConsumer.java b/src/main/java/com/xcong/excoin/rabbit/consumer/FollowConsumer.java
index b5db176..d206b1b 100644
--- a/src/main/java/com/xcong/excoin/rabbit/consumer/FollowConsumer.java
+++ b/src/main/java/com/xcong/excoin/rabbit/consumer/FollowConsumer.java
@@ -1,5 +1,6 @@
 package com.xcong.excoin.rabbit.consumer;
 
+import com.alibaba.fastjson.JSONObject;
 import com.rabbitmq.client.Channel;
 import com.xcong.excoin.configurations.RabbitMqConfig;
 import com.xcong.excoin.modules.documentary.service.FollowOrderOperationService;
@@ -9,6 +10,10 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.stereotype.Component;
+import org.web3j.abi.datatypes.Int;
+
+import java.math.BigDecimal;
+import java.util.Map;
 
 /**
  * @author wzy
@@ -29,4 +34,15 @@
 
         followOrderOperationService.addFollowerOrder(Long.parseLong(content));
     }
+
+//    @RabbitListener(queues = RabbitMqConfig.QUEUE_FOLLOW_CHANGE_BOND)
+    public void changeFollowOrderBond(Message message, Channel channel) {
+        String content = new String(message.getBody());
+        log.info("==收到跟单保证金调整消息 : {}", content);
+        Map map = JSONObject.parseObject(content, Map.class);
+        Integer id = (Integer) map.get("id");
+        BigDecimal bond = (BigDecimal) map.get("bond");
+        Integer type = (Integer) map.get("type");
+        followOrderOperationService.changeFollowOrdersBond(id.longValue(), bond, type);
+    }
 }
diff --git a/src/main/java/com/xcong/excoin/rabbit/producer/FollowProducer.java b/src/main/java/com/xcong/excoin/rabbit/producer/FollowProducer.java
index cecb098..1c5e466 100644
--- a/src/main/java/com/xcong/excoin/rabbit/producer/FollowProducer.java
+++ b/src/main/java/com/xcong/excoin/rabbit/producer/FollowProducer.java
@@ -1,13 +1,19 @@
 package com.xcong.excoin.rabbit.producer;
 
 
+import com.alibaba.fastjson.JSONObject;
 import com.xcong.excoin.configurations.RabbitMqConfig;
 import lombok.extern.slf4j.Slf4j;
+import net.sf.json.JSON;
 import org.springframework.amqp.rabbit.connection.CorrelationData;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.web3j.abi.datatypes.Int;
 
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.UUID;
 
 /**
@@ -41,4 +47,20 @@
         log.info("发送跟单下单消息: {}, {}", id, correlationData.getId());
         rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_A, RabbitMqConfig.ROUTINGKEY_FOLLOW_ORDER, id.toString(), correlationData);
     }
+
+    /**
+     * 发送跟单调整保证金信息
+     *
+     * @param id
+     */
+    public void sendChangeFollowOrderBond(Long id, BigDecimal changeBond, Integer type) {
+        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
+        Map<String, Object> map = new HashMap<>();
+        map.put("id", id);
+        map.put("bond", changeBond);
+        map.put("type", type);
+        String msg = JSONObject.toJSONString(map);
+        log.info("发送跟单保证金调整消息: {}, {}", msg, correlationData.getId());
+        rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_A, RabbitMqConfig.ROUTINGKEY_FOLLOW_CHANGE_BOND, msg, correlationData);
+    }
 }
diff --git a/src/test/java/com/xcong/excoin/FollowTest.java b/src/test/java/com/xcong/excoin/FollowTest.java
index 748f6e7..3a2f865 100644
--- a/src/test/java/com/xcong/excoin/FollowTest.java
+++ b/src/test/java/com/xcong/excoin/FollowTest.java
@@ -1,57 +1,16 @@
 package com.xcong.excoin;
 
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.xcong.excoin.common.LoginUserUtils;
-import com.xcong.excoin.common.enumerates.MemberWalletCoinEnum;
-import com.xcong.excoin.common.response.Result;
-import com.xcong.excoin.modules.activity.dao.ActivityMainDao;
-import com.xcong.excoin.modules.activity.dao.ActivityMemberDetailDao;
-import com.xcong.excoin.modules.activity.dao.ActivityReceiveRecordDao;
-import com.xcong.excoin.modules.activity.dao.ActivitySubDao;
-import com.xcong.excoin.modules.activity.entity.ActivityMain;
-import com.xcong.excoin.modules.activity.entity.ActivityMemberDetail;
-import com.xcong.excoin.modules.activity.entity.ActivityReceiveRecord;
-import com.xcong.excoin.modules.activity.entity.ActivitySub;
-import com.xcong.excoin.modules.coin.entity.MemberAccountMoneyChange;
-import com.xcong.excoin.modules.contract.dao.ContractOrderDao;
-import com.xcong.excoin.modules.contract.entity.ContractOrderEntity;
-import com.xcong.excoin.modules.documentary.common.NoticeConstant;
-import com.xcong.excoin.modules.documentary.dao.*;
-import com.xcong.excoin.modules.documentary.dto.MyFollowOrderDto;
-import com.xcong.excoin.modules.documentary.dto.TradeOrderInfoDto;
-import com.xcong.excoin.modules.documentary.entity.FollowFollowerOrderRelationEntity;
-import com.xcong.excoin.modules.documentary.entity.FollowFollowerProfitEntity;
-import com.xcong.excoin.modules.documentary.entity.FollowTraderInfoEntity;
-import com.xcong.excoin.modules.documentary.entity.FollowTraderProfitInfoEntity;
 import com.xcong.excoin.modules.documentary.service.FollowOrderOperationService;
-import com.xcong.excoin.modules.documentary.vo.MyFollowOrderVo;
-import com.xcong.excoin.modules.documentary.vo.TradeHistoryOrderInfoVo;
-import com.xcong.excoin.modules.member.dao.MemberDao;
-import com.xcong.excoin.modules.member.entity.MemberEntity;
 import com.xcong.excoin.quartz.job.FollowProfitUpdateJob;
-import com.xcong.excoin.utils.LogRecordUtils;
+import com.xcong.excoin.rabbit.producer.FollowProducer;
 import com.xcong.excoin.utils.ThreadPoolUtils;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.ObjectUtil;
-import jnr.ffi.Struct.int16_t;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 import javax.annotation.Resource;
-import javax.validation.Valid;
+import java.math.BigDecimal;
 
 /**
  * @author wzy
@@ -63,456 +22,27 @@
 
     @Resource
     private FollowOrderOperationService followOrderOperationService;
-    @Resource
-    private ActivityMainDao activityMainDao;
-	@Resource
-	private ActivitySubDao activitySubDao;
-	@Resource
-    private ActivityMemberDetailDao activityMemberDetailDao;
-	@Resource
-	private ActivityReceiveRecordDao activityReceiveRecordDao;
-	@Resource
-	private MemberDao memberDao;
-	@Resource
-	private FollowFollowerProfitDao followFollowerProfitDao;
-	@Resource
-	private FollowFollowerOrderRelationDao followFollowerOrderRelationDao;
-	@Resource
-	private FollowTraderInfoDao followTraderInfoDao;
-	@Resource
-	private FollowTraderProfitInfoDao followTraderProfitInfoDao;
-	@Resource
-	private ContractOrderDao contractOrderDao;
-	@Resource
-	private FollowTraderProfitDetailDao followTraderProfitDetailDao;
-	
-//	public static void main(String[] args) {
-//		String orderNo = "2021033112500017";
-//		System.out.println(orderNo.substring(8));
-//	}
-//
-//	@Test
-//	public void getReturn(){
-//	    String orderNo = "2021033112880019";
-//
-//		//生成返利记录和资金变化记录
-//		List<FollowFollowerOrderRelationEntity> orderRelationDone = followFollowerOrderRelationDao.selectFollowOrderByTradeOrderNo(orderNo);
-//		if(CollUtil.isNotEmpty(orderRelationDone)) {
-//			List<Long> orderIds = new ArrayList<>();
-//			for (FollowFollowerOrderRelationEntity orderRelationd : orderRelationDone) {
-//				orderIds.add(orderRelationd.getOrderId());
-//			}
-//
-//			if(CollUtil.isNotEmpty(orderIds)){
-//				//获取对应的平仓记录单号
-//				List<String> orderNosList = new ArrayList<>();
-//				for(Long orderId : orderIds) {
-//					String orderNos = contractOrderDao.selectOrderNoByOrderIds(orderId);
-//					orderNosList.add(orderNos);
-//				}
-//				//获取总返佣
-//				BigDecimal totalAmount = followTraderProfitDetailDao.selectFollowHoldOrderByFollowOrderNo(orderNosList);
-//				totalAmount = (totalAmount == null?BigDecimal.ZERO:totalAmount.setScale(2, BigDecimal.ROUND_DOWN));
-//				if(totalAmount.compareTo(BigDecimal.ZERO) > 0){
-//					//增加返佣提醒
-//					String symbol = contractOrderDao.selectById(orderIds.get(0)).getSymbol();
-//					String orderNoTrader = orderRelationDone.get(0).getTradeOrderNo();
-//					Long traderMemberId = orderRelationDone.get(0).getTradeMemberId();
-//					LogRecordUtils.insertFollowerNotice(traderMemberId,
-//							NoticeConstant.RETURN_MONEY_TITLE,
-//							StrUtil.format(NoticeConstant.RETURN_MONEY_CONTENT,
-//									orderNoTrader,
-//									symbol,
-//									totalAmount));
-//					//带单返利的记录要在资产页面的其他记录
-//					LogRecordUtils.insertMemberAccountMoneyChange(
-//							traderMemberId,
-//							StrUtil.format(NoticeConstant.RETURN_MONEY_CONTENT_MAMC,
-//									orderNoTrader,
-//									symbol),
-//							totalAmount,
-//							MemberWalletCoinEnum.WALLETCOINCODE.getValue(),
-//							MemberAccountMoneyChange.STATUS_SUCCESS_INTEGER,
-//							MemberAccountMoneyChange.TYPE_WALLET_AGENT);
-//				}
-//			}
-//		}
-//	}
 
+    @Test
+    public void addFollowTest() {
+        followOrderOperationService.addFollowerOrder(601L);
+//        ThreadPoolUtils.sendFollowOrderTask(601L);
 
-//	@Test
-//	public void getTradeHistoryOrderInfo() {
-//		//获取用户ID
-//		Long memberId = 14L;
-//		List<TradeHistoryOrderInfoVo> myFollowOrderVos = new ArrayList<>();
-//		//历史跟单
-//		Page<ContractOrderEntity> page = new Page<>(1, 5);
-//		IPage<ContractOrderEntity> contractOrderEntitys = followFollowerProfitDao.getMyFollowOrderHistoryRecords(page, memberId);
-//
-//		List<ContractOrderEntity> records = contractOrderEntitys.getRecords();
-//		if(CollUtil.isNotEmpty(records)) {
-//			for(ContractOrderEntity contractOrderEntity : records) {
-//				TradeHistoryOrderInfoVo myFollowOrderVo = new TradeHistoryOrderInfoVo();
-//				//获取【跟随者-订单关联表】中的累计数据
-//				BigDecimal allRewardAmount = BigDecimal.ZERO;
-//				BigDecimal allRewardRatio = BigDecimal.ZERO;
-//
-//				Long orderId = contractOrderEntity.getId();
-//				String orderNo = contractOrderEntity.getOrderNo();
-//				Map<String, Object> columnMapRelation = new HashMap<>();
-//				columnMapRelation.put("trade_order_no", orderNo);
-//				columnMapRelation.put("trade_member_id", memberId);
-//				columnMapRelation.put("order_type", 2);
-//				columnMapRelation.put("is_show", 1);
-//				List<FollowFollowerOrderRelationEntity> followFollowerOrderRelations = followFollowerOrderRelationDao.selectByMap(columnMapRelation);
-//				if(CollUtil.isNotEmpty(followFollowerOrderRelations)) {
-//					int size = followFollowerOrderRelations.size() - 1;
-//					myFollowOrderVo.setFollowerNumber(size);
-//					for(FollowFollowerOrderRelationEntity followFollowerOrderRelation : followFollowerOrderRelations) {
-//						Long followerMemberId = followFollowerOrderRelation.getMemberId();
-//						if(!memberId.equals(followerMemberId)) {
-//							Long followerOrderId = followFollowerOrderRelation.getOrderId();
-//							ContractOrderEntity orderEntity = contractOrderDao.selectById(followerOrderId);
-//							BigDecimal rewardAmount = orderEntity.getRewardAmount();
-//							allRewardAmount = allRewardAmount.add(rewardAmount);
-//							BigDecimal rewardRatio = orderEntity.getRewardRatio();
-//							rewardRatio = rewardRatio == null ? BigDecimal.ZERO : rewardRatio;
-//							allRewardRatio = allRewardRatio.add(rewardRatio);
-//						}
-//					}
-//				}else {
-//					myFollowOrderVo.setFollowerNumber(0);
-//				}
-//				myFollowOrderVo.setFollowerRewardAmount(allRewardAmount);
-//				myFollowOrderVo.setFollowerRewardRatio(allRewardRatio);
-//
-//				//获取交易员信息
-//				FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectTraderInfoByMemberId(memberId);
-//				String nickname = followTraderInfoEntity.getNickname();
-//				myFollowOrderVo.setNickname(nickname);
-//				myFollowOrderVo.setOrderId(orderId);
-//				String symbol = contractOrderEntity.getSymbol();
-//				myFollowOrderVo.setSymbol(symbol);
-//				int orderType = contractOrderEntity.getOrderType();
-//				myFollowOrderVo.setOrderType(orderType);
-//				int leverRatio = contractOrderEntity.getLeverRatio();
-//				myFollowOrderVo.setLeverRatio(leverRatio);
-//				BigDecimal rewardAmount = contractOrderEntity.getRewardAmount().setScale(2, BigDecimal.ROUND_DOWN);
-//				myFollowOrderVo.setRewardAmount(rewardAmount);
-//				BigDecimal rewardRatio = contractOrderEntity.getRewardRatio() == null ? BigDecimal.ZERO : contractOrderEntity.getRewardRatio().setScale(4, BigDecimal.ROUND_DOWN);
-//				myFollowOrderVo.setRewardRatio(rewardRatio);
-//				int symbolCnt = contractOrderEntity.getSymbolCnt();
-//				myFollowOrderVo.setSymbolCnt(symbolCnt);
-//				BigDecimal bondAmount = contractOrderEntity.getBondAmount().setScale(2, BigDecimal.ROUND_DOWN);
-//				myFollowOrderVo.setBondAmount(bondAmount);
-//				BigDecimal openingPrice = contractOrderEntity.getOpeningPrice().setScale(2, BigDecimal.ROUND_DOWN);
-//				myFollowOrderVo.setOpeningPrice(openingPrice);
-//				BigDecimal closingPrice = contractOrderEntity.getClosingPrice().setScale(2, BigDecimal.ROUND_DOWN);
-//				myFollowOrderVo.setClosingPrice(closingPrice);
-//				Date openingTime = contractOrderEntity.getOpeningTime();
-//				myFollowOrderVo.setOpeningTime(openingTime);
-//				Date closingTime = contractOrderEntity.getClosingTime();
-//				myFollowOrderVo.setClosingTime(closingTime);
-//
-//				myFollowOrderVo.setOrderNo(orderNo);
-//				myFollowOrderVos.add(myFollowOrderVo);
-//			}
-//		}
-//		System.out.println(myFollowOrderVos);
-//	}
-
-	@Test
-	public void traderProfitUpdate() {
-        log.info("交易员定时任务执行");
-        // 查询所有交易员信息
-        List<FollowTraderInfoEntity> allTraders = followTraderInfoDao.selectAllTraderInfo();
-        if (CollUtil.isNotEmpty(allTraders)) {
-            for (FollowTraderInfoEntity trader : allTraders) {
-                Long tradeMemberId = trader.getMemberId();
-                //获取交易员的当前跟随者
-                Map<String, Object> hashMap = new HashMap<>();
-                hashMap.put("trade_member_id", tradeMemberId);
-                hashMap.put("is_follow", FollowFollowerProfitEntity.IS_FOLLOW_Y);
-                List<FollowFollowerProfitEntity> followFollowerProfitEntityList = followFollowerProfitDao.selectByMap(hashMap);
-                if(CollUtil.isNotEmpty(followFollowerProfitEntityList)) {
-                	for(FollowFollowerProfitEntity followFollowerProfitEntity : followFollowerProfitEntityList) {
-                		//获取当前跟随者的跟随本金
-                		Long memberId = followFollowerProfitEntity.getMemberId();
-                		BigDecimal sumBondAmountBigDecimal = followFollowerProfitDao.selectSumBondAmountBymemberId(memberId,trader.getId());
-                		sumBondAmountBigDecimal = (sumBondAmountBigDecimal == null?BigDecimal.ZERO:sumBondAmountBigDecimal.setScale(2, BigDecimal.ROUND_DOWN));
-                		followFollowerProfitEntity.setTotalPrincipal(sumBondAmountBigDecimal);
-                		//获取当前的盈亏
-                		BigDecimal sumRewardAmountBigDecimal = followFollowerProfitDao.selectSumRewardAmountByMemberId(memberId,trader.getId());
-                		sumRewardAmountBigDecimal = (sumRewardAmountBigDecimal == null?BigDecimal.ZERO:sumRewardAmountBigDecimal.setScale(2, BigDecimal.ROUND_DOWN));
-                		followFollowerProfitEntity.setTotalProfit(sumRewardAmountBigDecimal);
-                		followFollowerProfitDao.updateById(followFollowerProfitEntity);
-                	}
-                }
-
-
-                FollowTraderProfitInfoEntity traderInfoProfit = followTraderProfitInfoDao.selectTraderInfoProfitByMemberId(tradeMemberId);
-                // 累计收益率
-                BigDecimal ljsyl = contractOrderDao.selectFollowOrderTotalProfitByMemberId(tradeMemberId);
-                BigDecimal totalProfitRatio = (ljsyl == null?BigDecimal.ZERO:ljsyl.setScale(2, BigDecimal.ROUND_DOWN));
-                traderInfoProfit.setTotalProfitRatio(totalProfitRatio);
-                // 带单总收益,只查询交易员自己的带单总收益
-                BigDecimal totalProfit = followFollowerOrderRelationDao.selectTraderTotalProfitSelf(tradeMemberId);
-                //BigDecimal totalProfit = followFollowerOrderRelationDao.selectTraderTotalProfit(tradeMemberId);
-                traderInfoProfit.setTotalProfit(totalProfit);
-                // 交易笔数
-//                List<ContractOrderEntity> orders = contractOrderDao.selectFollowOrderByMemberId(tradeMemberId);
-                List<ContractOrderEntity> orders = contractOrderDao.selectFollowOrderListByMemberId(tradeMemberId);
-                traderInfoProfit.setTotalOrderCnt(CollUtil.isNotEmpty(orders) ? orders.size() : 0);
-                // 近三周胜率
-                Integer winCnt = contractOrderDao.selectFollowOrderCntForWinRate(tradeMemberId, 1);
-                Integer allCnt = contractOrderDao.selectFollowOrderCntForWinRate(tradeMemberId, null);
-
-                if (winCnt != null && allCnt != null && allCnt!=0) {
-                    BigDecimal winRate = BigDecimal.valueOf(winCnt).divide(BigDecimal.valueOf(allCnt), 4, BigDecimal.ROUND_DOWN);
-                    traderInfoProfit.setWinRate(winRate);
-                }
-                Date date = new Date();
-                DateTime offsetDay = DateUtil.offsetDay(new Date(), -30);
-                //30天胜率(30天盈利总张数/30平仓总张数)
-                BigDecimal thirtyTotalCnt = contractOrderDao.selectThirtyTotalCntByMemberId(tradeMemberId,date,offsetDay);
-                BigDecimal thirtyWinCnt = contractOrderDao.selectThirtyWinCntByMemberId(tradeMemberId,date,offsetDay);
-                BigDecimal thirtyTotalCntRatio = (thirtyTotalCnt == null?BigDecimal.ZERO:thirtyTotalCnt.setScale(2, BigDecimal.ROUND_DOWN));
-                BigDecimal thirtyWinCntRatio = (thirtyWinCnt == null?BigDecimal.ZERO:thirtyWinCnt.setScale(2, BigDecimal.ROUND_DOWN));
-                BigDecimal thirtyProfitRatio = BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_DOWN);;
-                if(thirtyTotalCnt.compareTo(BigDecimal.ZERO) > 0) {
-                    thirtyProfitRatio = thirtyWinCntRatio.divide(thirtyTotalCntRatio, 2, BigDecimal.ROUND_DOWN).setScale(2, BigDecimal.ROUND_DOWN);
-                }
-                traderInfoProfit.setThirtyProfitRatio(thirtyProfitRatio);
-                //30天最大回撤率(30天最高收益率-30天最低收益率)
-                BigDecimal thirtyMaxRatio = contractOrderDao.selectThirtyMaxRatioByMemberId(tradeMemberId,date,offsetDay);
-                BigDecimal thirtyMinRatio = contractOrderDao.selectThirtyMinRatioByMemberId(tradeMemberId,date,offsetDay);
-                BigDecimal thirtyRatio = (thirtyMaxRatio == null?BigDecimal.ZERO:thirtyMaxRatio.setScale(2, BigDecimal.ROUND_DOWN))
-                		.subtract((thirtyMinRatio == null?BigDecimal.ZERO:thirtyMinRatio.setScale(2, BigDecimal.ROUND_DOWN)));
-                traderInfoProfit.setThirtyRatio(thirtyRatio);
-                // 当前跟随者总收益
-                BigDecimal followerProfit = followFollowerProfitDao.selectAllFollowerProfit(tradeMemberId);
-                traderInfoProfit.setFollowerTotalProfit(followerProfit);
-                // 当前跟随人数
-                int followerCnt = followFollowerProfitDao.selectFollowerCntByTradeMemberId(tradeMemberId);
-                traderInfoProfit.setTotalFollowerCnt(followerCnt);
-
-                followTraderProfitInfoDao.updateById(traderInfoProfit);
-            }
-        }
     }
 
-//	@Test
-//	public void getTradeHistoryOrderInfo() {
-//		//获取用户ID
-//		Long memberId = 3L;
-//		List<TradeHistoryOrderInfoVo> myFollowOrderVos = new ArrayList<>();
-//		//历史跟单
-//		Page<ContractOrderEntity> page = new Page<>(1, 5);
-//		IPage<ContractOrderEntity> contractOrderEntitys = followFollowerProfitDao.getMyFollowOrderHistoryRecords(page, memberId);
-//
-//		List<ContractOrderEntity> records = contractOrderEntitys.getRecords();
-//		if(CollUtil.isNotEmpty(records)) {
-//			for(ContractOrderEntity contractOrderEntity : records) {
-//				TradeHistoryOrderInfoVo myFollowOrderVo = new TradeHistoryOrderInfoVo();
-//				//获取【跟随者-订单关联表】中的累计数据
-//				BigDecimal allRewardAmount = BigDecimal.ZERO;
-//				BigDecimal allRewardRatio = BigDecimal.ZERO;
-//
-//				Long orderId = contractOrderEntity.getId();
-//				String orderNo = contractOrderEntity.getOrderNo();
-//				Map<String, Object> columnMapRelation = new HashMap<>();
-//				columnMapRelation.put("trade_order_no", orderNo);
-//				columnMapRelation.put("trade_member_id", memberId);
-//				columnMapRelation.put("order_type", 2);
-//				columnMapRelation.put("is_show", 1);
-//				List<FollowFollowerOrderRelationEntity> followFollowerOrderRelations = followFollowerOrderRelationDao.selectByMap(columnMapRelation);
-//				if(CollUtil.isNotEmpty(followFollowerOrderRelations)) {
-//					int size = followFollowerOrderRelations.size() - 1;
-//					myFollowOrderVo.setFollowerNumber(size);
-//					for(FollowFollowerOrderRelationEntity followFollowerOrderRelation : followFollowerOrderRelations) {
-//						Long followerMemberId = followFollowerOrderRelation.getMemberId();
-//						if(!memberId.equals(followerMemberId)) {
-//							Long followerOrderId = followFollowerOrderRelation.getOrderId();
-//							ContractOrderEntity orderEntity = contractOrderDao.selectById(followerOrderId);
-//							BigDecimal rewardAmount = orderEntity.getRewardAmount();
-//							allRewardAmount = allRewardAmount.add(rewardAmount);
-//							BigDecimal rewardRatio = orderEntity.getRewardRatio();
-//							allRewardRatio = allRewardRatio.add(rewardRatio);
-//						}
-//					}
-//				}else {
-//					myFollowOrderVo.setFollowerNumber(0);
-//				}
-//				myFollowOrderVo.setFollowerRewardAmount(allRewardAmount);
-//				myFollowOrderVo.setFollowerRewardRatio(allRewardRatio);
-//
-//				//获取交易员信息
-//				FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectTraderInfoByMemberId(memberId);
-//				String nickname = followTraderInfoEntity.getNickname();
-//				myFollowOrderVo.setNickname(nickname);
-//				myFollowOrderVo.setOrderId(orderId);
-//				String symbol = contractOrderEntity.getSymbol();
-//				myFollowOrderVo.setSymbol(symbol);
-//				int orderType = contractOrderEntity.getOrderType();
-//				myFollowOrderVo.setOrderType(orderType);
-//				int leverRatio = contractOrderEntity.getLeverRatio();
-//				myFollowOrderVo.setLeverRatio(leverRatio);
-//				BigDecimal rewardAmount = contractOrderEntity.getRewardAmount().setScale(2, BigDecimal.ROUND_DOWN);
-//				myFollowOrderVo.setRewardAmount(rewardAmount);
-//				BigDecimal rewardRatio = contractOrderEntity.getRewardRatio().setScale(4, BigDecimal.ROUND_DOWN);
-//				myFollowOrderVo.setRewardRatio(rewardRatio);
-//				int symbolCnt = contractOrderEntity.getSymbolCnt();
-//				myFollowOrderVo.setSymbolCnt(symbolCnt);
-//				BigDecimal bondAmount = contractOrderEntity.getBondAmount().setScale(2, BigDecimal.ROUND_DOWN);
-//				myFollowOrderVo.setBondAmount(bondAmount);
-//				BigDecimal openingPrice = contractOrderEntity.getOpeningPrice().setScale(2, BigDecimal.ROUND_DOWN);
-//				myFollowOrderVo.setOpeningPrice(openingPrice);
-//				BigDecimal closingPrice = contractOrderEntity.getClosingPrice().setScale(2, BigDecimal.ROUND_DOWN);
-//				myFollowOrderVo.setClosingPrice(closingPrice);
-//				Date openingTime = contractOrderEntity.getOpeningTime();
-//				myFollowOrderVo.setOpeningTime(openingTime);
-//				Date closingTime = contractOrderEntity.getClosingTime();
-//				myFollowOrderVo.setClosingTime(closingTime);
-//
-//				myFollowOrderVo.setOrderNo(orderNo);
-//				myFollowOrderVos.add(myFollowOrderVo);
-//			}
-//		}
-//		System.out.println(myFollowOrderVos);
-//	}
-	
-//	@Test
-//	public void getHistoryMyFollowOrderRecords() {
-//		//获取用户ID
-//        Long memberId = 4L;
-//        List<MyFollowOrderVo> myFollowOrderVos = new ArrayList<>();
-//        //历史跟单
-//        	Page<ContractOrderEntity> page = new Page<>(1, 5);
-//        	IPage<ContractOrderEntity> contractOrderEntitys = followFollowerProfitDao.getMyFollowOrderHistoryRecords(page, memberId);
-//
-//        	List<ContractOrderEntity> records = contractOrderEntitys.getRecords();
-//        	if(CollUtil.isNotEmpty(records)) {
-//        		for(ContractOrderEntity contractOrderEntity : records) {
-//        			MyFollowOrderVo myFollowOrderVo = new MyFollowOrderVo();
-//        			//获取交易员信息
-//					Long orderId = contractOrderEntity.getId();
-//					FollowFollowerOrderRelationEntity FollowFollowerOrderRelation = followFollowerOrderRelationDao.selectHistoryOneByorderId(orderId);
-//					if(ObjectUtil.isNotEmpty(FollowFollowerOrderRelation)) {
-//						myFollowOrderVo.setOrderId(orderId);
-//						Long tradeId = FollowFollowerOrderRelation.getTradeId();
-//						FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectById(tradeId);
-//						if(ObjectUtil.isNotEmpty(followTraderInfoEntity)) {
-//							String nickname = followTraderInfoEntity.getNickname();
-//							myFollowOrderVo.setNickname(nickname);
-//						}
-//						String symbol = contractOrderEntity.getSymbol();
-//						myFollowOrderVo.setSymbol(symbol);
-//						int orderType = contractOrderEntity.getOrderType();
-//						myFollowOrderVo.setOrderType(orderType);
-//						int leverRatio = contractOrderEntity.getLeverRatio();
-//						myFollowOrderVo.setLeverRatio(leverRatio);
-//						BigDecimal rewardAmount = contractOrderEntity.getRewardAmount().setScale(2, BigDecimal.ROUND_DOWN);
-//						myFollowOrderVo.setRewardAmount(rewardAmount);
-//						BigDecimal rewardRatio = contractOrderEntity.getRewardRatio().setScale(4, BigDecimal.ROUND_DOWN);
-//						myFollowOrderVo.setRewardRatio(rewardRatio);
-//						int symbolCnt = contractOrderEntity.getSymbolCnt();
-//						myFollowOrderVo.setSymbolCnt(symbolCnt);
-//						BigDecimal bondAmount = contractOrderEntity.getBondAmount().setScale(2, BigDecimal.ROUND_DOWN);
-//						myFollowOrderVo.setBondAmount(bondAmount);
-//						BigDecimal openingPrice = contractOrderEntity.getOpeningPrice().setScale(2, BigDecimal.ROUND_DOWN);
-//						myFollowOrderVo.setOpeningPrice(openingPrice);
-//						BigDecimal closingPrice = contractOrderEntity.getClosingPrice().setScale(2, BigDecimal.ROUND_DOWN);
-//						myFollowOrderVo.setClosingPrice(closingPrice);
-//						Date openingTime = contractOrderEntity.getOpeningTime();
-//						myFollowOrderVo.setOpeningTime(openingTime);
-//						Date closingTime = contractOrderEntity.getClosingTime();
-//						myFollowOrderVo.setClosingTime(closingTime);
-//						String orderNo = contractOrderEntity.getOrderNo();
-//						myFollowOrderVo.setOrderNo(orderNo);
-//						myFollowOrderVos.add(myFollowOrderVo);
-//					}
-//        		}
-//        	}
-//		System.out.println(myFollowOrderVos);
-//	}
-	
-//	@Test
-//	public void test() {
-//		//查询是否可以点击平仓按钮
-//        Long memberIdLong = Long.parseLong("102");
-//        MemberEntity selectById = memberDao.selectById(memberIdLong);
-//        Integer pcState = selectById.getPcState();
-//        if(memberEntity.PCSTATE_N == pcState) {
-//        	return Result.loading("loading_type");
-//        }
-//	}
-    
-//    @Test
-//	public void add() {
-//		Map<String, Object> columnMap = new HashMap<>();
-//		List<MemberEntity> memberEntitys = memberDao.selectByMap(columnMap);
-//		int i =0;
-//		for(MemberEntity member :memberEntitys) {
-//			System.out.println(i++);
-//			Long id = member.getId();
-//			if(ObjectUtil.isNotEmpty(id)) {
-//				//获取开始中的活动
-//		        ActivityMain activityMain = activityMainDao.selectById(1);
-//		        if(ObjectUtil.isNotEmpty(activityMain)) {
-//		        	if(ActivityMain.STATE_START == activityMain.getState()) {
-//		        		//新增【活动记录表】信息
-//		        		ActivityReceiveRecord activityReceiveRecord = new ActivityReceiveRecord();
-//		        		activityReceiveRecord.setMemberId(member.getId());
-//		        		activityReceiveRecord.setMainId(activityMain.getId());
-//		        		activityReceiveRecord.setReceiveCoinAmount(BigDecimal.ZERO);
-//		        		activityReceiveRecord.setReceiveState(ActivityReceiveRecord.RECEIVESTATE_TWO);
-//		        		Date startTime = new Date();
-//		        		Date date = new Date(startTime.getTime() + ActivityReceiveRecord.DAYS*24*60*60*1000);
-//		        		activityReceiveRecord.setInvalidTime(date);
-//		        		Map<String, Object> activitySubMap = new HashMap<>();
-//		        		activitySubMap.put("main_id", activityMain.getId());
-//						List<ActivitySub> activitySubs = activitySubDao.selectByMap(activitySubMap );
-//						if(CollUtil.isNotEmpty(activitySubs)) {
-//							for(ActivitySub ActivitySub : activitySubs) {
-//								Long subId = ActivitySub.getId();
-//								activityReceiveRecord.setSubId(subId);
-//								activityReceiveRecordDao.insert(activityReceiveRecord);
-//							}
-//						}
-//		        		//新增【活动个人详情表】信息
-//		        		ActivityMemberDetail activityMemberDetail = new ActivityMemberDetail();
-//		        		activityMemberDetail.setMainId(activityMain.getId());
-//		        		activityMemberDetail.setBurstUsdt(BigDecimal.ZERO);
-//		        		activityMemberDetail.setReceivedUsdt(BigDecimal.ZERO);
-//		        		activityMemberDetail.setSurplusUsdt(activityMain.getAmount());
-//		        		activityMemberDetail.setMemberId(member.getId());
-//		        		activityMemberDetailDao.insert(activityMemberDetail);
-//		        	}
-//		        }
-//			}
-//		}
-//	}
+    @Test
+    public void strContainsTest() {
+        String symbols = "BTC,ETH,LTC,BCH";
+        String symbol = "BTC/USDT";
 
-//    @Test
-//    public void addFollowTest() {
-//        followOrderOperationService.addFollowerOrder(601L);
-////        ThreadPoolUtils.sendFollowOrderTask(601L);
-//
-//    }
-//
-//    @Test
-//    public void strContainsTest() {
-//        String symbols = "BTC,ETH,LTC,BCH";
-//        String symbol = "BTC/USDT";
-//
-//        System.out.println(symbols.contains(symbol.replace("/USDT", "")));
-//    }
-//
-//    @Resource
-//    private FollowProfitUpdateJob followProfitUpdateJob;
-//
-//    @Test
-//    public void updateJobTest() {
-//        followProfitUpdateJob.traderProfitUpdate();
-//    }
+        System.out.println(symbols.contains(symbol.replace("/USDT", "")));
+    }
+
+    @Autowired
+    private FollowProducer followProducer;
+
+    @Test
+    public void sendMsgTest() {
+//        followProducer.sendChangeFollowOrderBond(11L, new BigDecimal("1234.1234"));
+    }
 }

--
Gitblit v1.9.1