From ca5353f982bc8b6a5cf50b9941b79939510e7eee Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Fri, 21 Aug 2020 18:00:54 +0800
Subject: [PATCH] 20200821
---
src/main/java/com/xcong/excoin/modules/documentary/service/impl/FollowOrderOperationServiceImpl.java | 55 ++++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 48 insertions(+), 7 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 a3c0f92..61476c1 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
@@ -13,19 +13,23 @@
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;
import com.xcong.excoin.modules.documentary.dao.FollowFollowerSettingDao;
import com.xcong.excoin.modules.documentary.dao.FollowTraderInfoDao;
+import com.xcong.excoin.modules.documentary.entity.FollowFollowerOrderRelationEntity;
import com.xcong.excoin.modules.documentary.entity.FollowFollowerProfitEntity;
import com.xcong.excoin.modules.documentary.entity.FollowFollowerSettingEntity;
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.MemberWalletContractDao;
import com.xcong.excoin.modules.member.entity.AgentReturnEntity;
import com.xcong.excoin.modules.member.entity.MemberEntity;
+import com.xcong.excoin.modules.member.entity.MemberLevelRateEntity;
import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity;
import com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity;
import com.xcong.excoin.rabbit.pricequeue.OrderModel;
@@ -40,6 +44,7 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
+import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -70,9 +75,15 @@
private OrderProducer producer;
@Resource
private FollowTraderInfoDao followTraderInfoDao;
+ @Resource
+ private RabbitOrderService rabbitOrderService;
+ @Resource
+ private MemberLevelRateDao memberLevelRateDao;
+
@Override
public void addFollowerOrder(Long id) {
+ log.info("进入跟单处理逻辑");
// 查询交易员订单
ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectById(id);
@@ -89,6 +100,12 @@
Long tradeMemberId = holdOrderEntity.getMemberId();
if (CollUtil.isNotEmpty(followerSettings)) {
for (FollowFollowerSettingEntity followerSetting : followerSettings) {
+
+ if (!followerSetting.getSymbols().contains(holdOrderEntity.getSymbol().replace("/USDT", ""))) {
+ log.info("不在跟单币种内,不跟单:{},{}", followerSetting.getSymbols(), holdOrderEntity.getSymbol());
+ continue;
+ }
+
// 当前持仓张数
Integer holdingCnt = followFollowerOrderRelationDao.selectFollowerHoldingSymbolCnt(tradeMemberId, followerSetting.getMemberId());
@@ -107,6 +124,7 @@
}
if (symbolCnt <= 0) {
+ LogRecordUtils.insertFollowerNotice(followerSetting.getMemberId(), NoticeConstant.OPEN_ORDER_FOLLOW_FAIL_TITLE, StrUtil.format(NoticeConstant.OPEN_ORDER_FOLLOW_FAIL_CONTENT, followTraderInfoEntity.getNickname()));
continue;
}
}
@@ -116,6 +134,7 @@
log.info("钱包地址不存在:{}", followerSetting.getMemberId());
continue;
}
+ MemberLevelRateEntity levelRateEntity = memberLevelRateDao.selectLeverRateByMemberIdAndSymbol(followerSetting.getMemberId(), holdOrderEntity.getSymbol());
// 开仓手续费 建仓价*规格*手数*手续费率
BigDecimal openFeePrice = openPrice.multiply(lotNumber)
@@ -125,20 +144,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()));
@@ -147,7 +166,7 @@
followHoldOrder.setSymbol(holdOrderEntity.getSymbol());
followHoldOrder.setSymbolCnt(symbolCnt);
followHoldOrder.setSymbolSku(lotNumber);
- followHoldOrder.setLeverRatio(holdOrderEntity.getLeverRatio());
+ followHoldOrder.setLeverRatio(levelRateEntity.getLevelRateUp());
followHoldOrder.setForceClosingPrice(forceClosingPrice);
followHoldOrder.setOpeningFeeAmount(openFeePrice);
followHoldOrder.setOpeningPrice(openPrice);
@@ -158,15 +177,24 @@
followHoldOrder.setBondAmount(bondAmount.add(openFeePrice));
followHoldOrder.setOperateNo(1);
// 设置合约类型
- holdOrderEntity.setContractType(ContractOrderEntity.CONTRACTTYPE_DOCUMENTARY);
+ followHoldOrder.setContractType(ContractOrderEntity.CONTRACTTYPE_DOCUMENTARY);
- ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(holdOrderEntity);
+ ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(followHoldOrder);
contractOrderEntity.setOpeningTime(new Date());
- contractHoldOrderDao.insert(holdOrderEntity);
+ contractHoldOrderDao.insert(followHoldOrder);
int i = contractOrderDao.insert(contractOrderEntity);
-
if (i > 0) {
memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), openFeePrice.negate(), null, walletContract.getId());
+
+ FollowFollowerOrderRelationEntity relationEntity = new FollowFollowerOrderRelationEntity();
+ relationEntity.setIsShow(FollowFollowerOrderRelationEntity.IS_SHOW_Y);
+ relationEntity.setMemberId(followHoldOrder.getMemberId());
+ relationEntity.setOrderId(followHoldOrder.getId());
+ relationEntity.setOrderType(FollowFollowerOrderRelationEntity.ORDER_TYPE_HOLD);
+ relationEntity.setTradeId(followTraderInfoEntity.getId());
+ relationEntity.setTradeMemberId(followTraderInfoEntity.getMemberId());
+ relationEntity.setTradeOrderNo(holdOrderEntity.getOrderNo());
+ followFollowerOrderRelationDao.insert(relationEntity);
// 发送爆仓消息
sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), forceClosingPrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo());
@@ -198,4 +226,17 @@
}
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