From 1ac6fa11ef63570afcda9db21997b1c8b09f22e9 Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Fri, 02 Apr 2021 10:29:46 +0800 Subject: [PATCH] modify --- src/main/java/com/xcong/excoin/modules/documentary/service/impl/FollowOrderOperationServiceImpl.java | 107 +++++++++++++++++++++++++++++++++-------------------- 1 files changed, 66 insertions(+), 41 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 a081a3e..b66d405 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 @@ -6,6 +6,7 @@ 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.contants.AppContants; import com.xcong.excoin.common.enumerates.CoinTypeEnum; import com.xcong.excoin.common.enumerates.MemberWalletCoinEnum; import com.xcong.excoin.common.enumerates.RabbitPriceTypeEnum; @@ -35,10 +36,7 @@ import com.xcong.excoin.rabbit.pricequeue.OrderModel; import com.xcong.excoin.rabbit.producer.FollowProducer; import com.xcong.excoin.rabbit.producer.OrderProducer; -import com.xcong.excoin.utils.CacheSettingUtils; -import com.xcong.excoin.utils.CalculateUtil; -import com.xcong.excoin.utils.LogRecordUtils; -import com.xcong.excoin.utils.ThreadPoolUtils; +import com.xcong.excoin.utils.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -89,7 +87,8 @@ private FollowProducer followProducer; @Autowired private FollowTraderProfitDetailDao followTraderProfitDetailDao; - + @Resource + private RedisUtils redisUtils; @Override @Transactional(rollbackFor = Exception.class) @@ -122,9 +121,28 @@ BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(holdOrderEntity.getSymbol()); Long tradeMemberId = holdOrderEntity.getMemberId(); if (CollUtil.isNotEmpty(followerSettings)) { + List<Object> hasExist = new ArrayList<>(); for (FollowFollowerSettingEntity followerSetting : followerSettings) { + // 加redis锁,同一个用户不能同时触发两个跟单任务,否则会出现金额问题 + while (true) { + List<Object> followerMemberId = redisUtils.lGet(AppContants.MEMBER_HAS_FOLLOW, 0, -1); + log.info("#跟单用户任务已存在:{}, 当前:{}#", followerMemberId, followerSetting.getMemberId()); + log.info("#------->{}#", followerMemberId.contains(followerSetting.getMemberId().intValue())); + if (CollUtil.isEmpty(followerMemberId) || !followerMemberId.contains(followerSetting.getMemberId().intValue())) { + log.info("跳出"); + hasExist.add(followerSetting.getMemberId()); + redisUtils.lSet(AppContants.MEMBER_HAS_FOLLOW, hasExist); + break; + } - //更新更新消息提醒的状态 + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + //更新更新消息提醒的状态 MemberSettingEntity memberSettingEntity = memberSettingDao.selectMemberSettingByMemberId(followerSetting.getMemberId()); if(ObjectUtil.isNotEmpty(memberSettingEntity)){ Long memberId = memberSettingEntity.getMemberId(); @@ -180,6 +198,7 @@ // 预付款 BigDecimal prePaymentAmount = bondAmount.add(openFeePrice).add(openFeePrice); + log.info("可用的余额:{}, {}", prePaymentAmount, walletContract.getAvailableBalance()); 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())); @@ -244,6 +263,7 @@ } } } + redisUtils.del(AppContants.MEMBER_HAS_FOLLOW); } } @@ -264,47 +284,52 @@ public void closingFollowOrders(String orderNo) { List<FollowFollowerOrderRelationEntity> orderRelations = followFollowerOrderRelationDao.selectFollowHoldOrderByTradeOrderNo(orderNo); if (CollUtil.isNotEmpty(orderRelations)) { - List<Long> orderIds = new ArrayList<>(); for (FollowFollowerOrderRelationEntity orderRelation : orderRelations) { List<Long> ids= new ArrayList<>(); ids.add(orderRelation.getOrderId()); - orderIds.add(orderRelation.getOrderId()); rabbitOrderService.cancelHoldOrder(ids); } - if(CollUtil.isNotEmpty(orderIds)){ - //获取对应的平仓记录单号 - List<String> orderNosList = new ArrayList<>(); - - for(Long orderId : orderIds) { - String orderNos = contractOrderDao.selectOrderNoByOrderIds(orderId); - ContractOrderEntity contractOrderEntity = contractOrderDao.selectById(orderId); - orderNosList.add(orderNos); + //生成返利记录和资金变化记录 + List<FollowFollowerOrderRelationEntity> orderRelationDone = followFollowerOrderRelationDao.selectFollowOrderByTradeOrderNo(orderNo); + if(CollUtil.isNotEmpty(orderRelationDone)) { + List<Long> orderIds = new ArrayList<>(); + for (FollowFollowerOrderRelationEntity orderRelationd : orderRelationDone) { + orderIds.add(orderRelationd.getOrderId()); } - //获取总返佣 - 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 = orderRelations.get(0).getTradeOrderNo(); - Long traderMemberId = orderRelations.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); - } + + 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, + symbol, + orderNoTrader.substring(8)), + totalAmount, + MemberWalletCoinEnum.WALLETCOINCODE.getValue(), + MemberAccountMoneyChange.STATUS_SUCCESS_INTEGER, + MemberAccountMoneyChange.TYPE_WALLET_AGENT); + } + } } } } -- Gitblit v1.9.1