src/main/java/cc/mrbird/febs/dapp/service/ApiIgtOnHookPlanService.java
@@ -28,4 +28,6 @@ void updatePlanOrderItem(); void endOnHookMessage(Long orderId); void memberCoinInsideMessage(Long withdrawId); } src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java
@@ -52,6 +52,7 @@ private final DappOnHookAwardDao dappOnHookAwardDao; private final DappWalletService dappWalletService; private final DappOnHookDoneDao dappOnHookDoneDao; private final MemberCoinWithdrawDao memberCoinWithdrawDao; @Value("${spring.profiles.active}") private String active; @@ -589,6 +590,63 @@ } @Override public void memberCoinInsideMessage(Long withdrawId) { MemberCoinWithdrawEntity memberCoinWithdrawEntity = memberCoinWithdrawDao.selectById(withdrawId); if(ObjectUtil.isEmpty(memberCoinWithdrawEntity)){ return; } memberCoinWithdrawEntity.setStatus(MemberCoinWithdrawEntity.STATUS_YES); memberCoinWithdrawDao.updateById(memberCoinWithdrawEntity); //转出账户,总额减少,冻结减少 BigDecimal amount = memberCoinWithdrawEntity.getAmount().setScale(4,BigDecimal.ROUND_DOWN); Long memberIdOut = memberCoinWithdrawEntity.getMemberId(); DappWalletCoinEntity dappWalletCoinEntityOut = dappWalletCoinDao.selectByMemberId(memberIdOut); dappWalletCoinDao.delTotalAndDelFrozenById(dappWalletCoinEntityOut.getId(),amount); String isInside = memberCoinWithdrawEntity.getIsInside(); String content = ""; Integer type = 0; if(MemberCoinWithdrawEntity.ISINSIDE_NO.equals(isInside)){ content = "提现"; type = 2; }else{ content = "转账"; type = 4; } //转出账户生成一条账户资金变化记录 DappAccountMoneyChangeEntity dappAccountMoneyChangeEntityOut = new DappAccountMoneyChangeEntity(memberIdOut, dappWalletCoinEntityOut.getTotalAmount().setScale(4,BigDecimal.ROUND_DOWN), amount.negate(), dappWalletCoinEntityOut.getTotalAmount().setScale(4,BigDecimal.ROUND_DOWN).subtract(amount), content, type); dappAccountMoneyChangeDao.insert(dappAccountMoneyChangeEntityOut); //转入账户,总额增加,余额增加 //转账 if(MemberCoinWithdrawEntity.ISINSIDE_YES.equals(isInside)){ String addressIn = memberCoinWithdrawEntity.getAddress(); DappMemberEntity dappMemberEntityIn = dappMemberDao.selectMemberInfoByInviteId(addressIn); if(ObjectUtil.isEmpty(dappMemberEntityIn)){ return; } DappWalletCoinEntity dappWalletCoinEntityIn = dappWalletCoinDao.selectByMemberId(dappMemberEntityIn.getId()); Integer countIn = dappWalletCoinDao.addTotalAndaddAvailableById(dappWalletCoinEntityIn.getId(), memberCoinWithdrawEntity.getAmount()); if(1 != countIn){ return; } //生成流水记录 DappAccountMoneyChangeEntity dappAccountMoneyChangeEntityIn = new DappAccountMoneyChangeEntity(dappMemberEntityIn.getId(), dappWalletCoinEntityIn.getTotalAmount().setScale(4,BigDecimal.ROUND_DOWN), amount, dappWalletCoinEntityIn.getTotalAmount().setScale(4,BigDecimal.ROUND_DOWN).add(amount), "转账", 4); dappAccountMoneyChangeDao.insert(dappAccountMoneyChangeEntityIn); } } private String getProfitCase(String identity,BigDecimal balance){ //匹配会员等级获取对应的收益率 List<DataDictionaryCustom> dataDictionaryCustoms = dataDictionaryCustomMapper.selectDicByType(DataDictionaryEnum.LEVEL_MB.getType()); src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
@@ -22,6 +22,7 @@ import cc.mrbird.febs.dapp.vo.ActiveNftListVo; import cc.mrbird.febs.dapp.vo.ApiMemberWalletCoinVo; import cc.mrbird.febs.dapp.vo.WalletInfoVo; import cc.mrbird.febs.rabbit.producer.UsdtUpdateProducer; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateTime; @@ -69,6 +70,7 @@ private final MemberCoinWithdrawDao memberCoinWithdrawDao; private final IgtOnHookPlanOrderItemDao igtOnHookPlanOrderItemdao; private final DappBankDao dappBankDao; private final UsdtUpdateProducer usdtUpdateProducer; private final RedisTemplate<String, Object> redisTemplate; @@ -631,6 +633,8 @@ memberCoinWithdrawEntity.setStatus(MemberCoinWithdrawEntity.STATUS_DOING); memberCoinWithdrawEntity.setIsInside(MemberCoinWithdrawEntity.ISINSIDE_YES); memberCoinWithdrawDao.insert(memberCoinWithdrawEntity); usdtUpdateProducer.sendMemberCoinInside(memberCoinWithdrawEntity.getId()); return new FebsResponse().success().message(MessageSourceUtils.getString("Operation_001")); } src/main/java/cc/mrbird/febs/rabbit/RabbitMqConfig.java
@@ -527,4 +527,23 @@ } // === 更新用户挂机 end === // === 用户内部转账 start === public static final String MEMBER_COIN_INSIDE_EXCHANGE = "exchange_member_coin_inside"; public static final String MEMBER_COIN_INSIDE_QUEUE = "queue_member_coin_inside"; public static final String MEMBER_COIN_INSIDE__ROUTE_KEY = "route_key_member_coin_inside"; @Bean public Queue memberCoinInsideQueue() { // 定义一个名称为QUEUE_A,持久化的队列 return new Queue(MEMBER_COIN_INSIDE_QUEUE, true); } @Bean public DirectExchange memberCoinInsideExchange() { return new DirectExchange(MEMBER_COIN_INSIDE_EXCHANGE); } @Bean public Binding memberCoinInsideBind() { return BindingBuilder.bind(memberCoinInsideQueue()).to(memberCoinInsideExchange()).with(RabbitMqConfig.MEMBER_COIN_INSIDE__ROUTE_KEY); } // === 用户内部转账 end === } src/main/java/cc/mrbird/febs/rabbit/consumer/UsdtUpdateConsumer.java
@@ -40,6 +40,13 @@ @Resource TrxUsdtUpdateService trxUsdtUpdateService; @RabbitListener(queues = RabbitMqConfig.MEMBER_COIN_INSIDE_QUEUE) public void memberCoinInside(Long withdrawId) { log.info("处理用户内部转账的消息:{}#", withdrawId); apiIgtOnHookPlanService.memberCoinInsideMessage(withdrawId); } @RabbitListener(queues = RabbitMqConfig.END_ON_HOOK_QUEUE) public void endOnHook(Long orderId) { log.info("处理用户结束挂机的消息:{}#", orderId); src/main/java/cc/mrbird/febs/rabbit/producer/UsdtUpdateProducer.java
@@ -27,6 +27,12 @@ rabbitTemplate.setConfirmCallback(this); } public void sendMemberCoinInside(Long withdrawId) { log.info("发送用户内部转账的消息:{}", withdrawId); CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString()); rabbitTemplate.convertAndSend(RabbitMqConfig.MEMBER_COIN_INSIDE_EXCHANGE, RabbitMqConfig.MEMBER_COIN_INSIDE__ROUTE_KEY, withdrawId, correlationData); } public void sendOnHookEnd(Long orderId) { log.info("发送用户结束挂机的消息:{}", orderId); CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString()); src/main/resources/application-test.yml
@@ -28,7 +28,7 @@ # Redis服务器连接端口 port: 6379 # Redis 密码 password: xcong123 password: d3y6dsdl;f.327 lettuce: pool: # 连接池中的最小空闲连接