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