From 8a7d76e132e4dbb587d3fd473748dc11124437a1 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Tue, 02 Mar 2021 15:49:37 +0800 Subject: [PATCH] 20210302 消息提醒 --- src/main/java/com/xcong/excoin/modules/documentary/service/impl/FollowOrderOperationServiceImpl.java | 80 ++++++++++++++++++++++++++++++++------- 1 files changed, 65 insertions(+), 15 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 8f7b81f..ae2f137 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 @@ -3,6 +3,8 @@ import cn.hutool.core.collection.CollUtil; 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,20 +15,22 @@ 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.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.OrderProducer; @@ -36,10 +40,12 @@ import com.xcong.excoin.utils.ThreadPoolUtils; import lombok.extern.slf4j.Slf4j; 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; @@ -70,15 +76,22 @@ private OrderProducer producer; @Resource private FollowTraderInfoDao followTraderInfoDao; + @Resource + private RabbitOrderService rabbitOrderService; + @Resource + private MemberLevelRateDao memberLevelRateDao; + @Resource + private MemberSettingDao memberSettingDao; + @Override + @Transactional public void addFollowerOrder(Long id) { log.info("进入跟单处理逻辑"); // 查询交易员订单 ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectById(id); List<FollowFollowerSettingEntity> followerSettings = followFollowerSettingDao.selectAllFollowerSettingByTradeMemberId(holdOrderEntity.getMemberId()); - log.info("---->{}, {}", followerSettings.size(), holdOrderEntity.getMemberId()); // 开仓价 BigDecimal openPrice = holdOrderEntity.getOpeningPrice(); PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting(); @@ -91,6 +104,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()); @@ -109,6 +128,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; } } @@ -118,6 +138,7 @@ log.info("钱包地址不存在:{}", followerSetting.getMemberId()); continue; } + MemberLevelRateEntity levelRateEntity = memberLevelRateDao.selectLeverRateByMemberIdAndSymbol(followerSetting.getMemberId(), holdOrderEntity.getSymbol()); // 开仓手续费 建仓价*规格*手数*手续费率 BigDecimal openFeePrice = openPrice.multiply(lotNumber) @@ -127,20 +148,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())); @@ -148,8 +169,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); @@ -160,18 +182,27 @@ 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()); + sendOrderBombMsg(followHoldOrder.getId(), followHoldOrder.getOpeningType(), forceClosingPrice, followHoldOrder.getSymbol(), followHoldOrder.getOperateNo(), followHoldOrder.getMemberId()); // 计算佣金 ThreadPoolUtils.calReturnMoney(memberEntity.getId(), contractOrderEntity.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_OPEN); @@ -184,20 +215,39 @@ LogRecordUtils.insertMemberAccountFlow(memberEntity.getId(), prePaymentAmount, walletContract.getAvailableBalance().subtract(prePaymentAmount), holdOrderEntity.getSymbol(), "买跌持仓", "买跌:" + holdOrderEntity.getSymbol()); LogRecordUtils.insertFollowerNotice(memberEntity.getId(), NoticeConstant.OPEN_ORDER_TITLE, StrUtil.format(NoticeConstant.OPEN_ORDER_CONTENT, holdOrderEntity.getSymbol() + "开空", openPrice, followTraderInfoEntity.getNickname())); } + //更新更新消息提醒的状态 + //Wrapper<MemberSettingEntity> queryWrapperOrepool = new QueryWrapper<>(); + //((QueryWrapper<MemberSettingEntity>) queryWrapperOrepool).eq("member_id", memberEntity.getId()); + //MemberSettingEntity memberWalletOrepoolEntity = memberSettingDao.selectOne(queryWrapperOrepool); + //memberWalletOrepoolEntity.setMessageReminder(1); + //memberSettingDao.updateById(memberWalletOrepoolEntity); } } } } - 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