From 5c53b4e1e7dc2bae956332a0dc446992725c80bb Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Mon, 14 Nov 2022 10:00:37 +0800
Subject: [PATCH] 20221114,内转改成不需要审核,通过mq处理

---
 src/main/java/cc/mrbird/febs/rabbit/RabbitMqConfig.java                         |   19 +++++++++
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java       |    4 ++
 src/main/java/cc/mrbird/febs/rabbit/consumer/UsdtUpdateConsumer.java            |    7 +++
 src/main/java/cc/mrbird/febs/dapp/service/ApiIgtOnHookPlanService.java          |    2 +
 src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java |   58 +++++++++++++++++++++++++++++
 src/main/resources/application-test.yml                                         |    2 
 src/main/java/cc/mrbird/febs/rabbit/producer/UsdtUpdateProducer.java            |    6 +++
 7 files changed, 97 insertions(+), 1 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/dapp/service/ApiIgtOnHookPlanService.java b/src/main/java/cc/mrbird/febs/dapp/service/ApiIgtOnHookPlanService.java
index 51d8c56..cf7d503 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/ApiIgtOnHookPlanService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/ApiIgtOnHookPlanService.java
@@ -28,4 +28,6 @@
     void updatePlanOrderItem();
 
     void endOnHookMessage(Long orderId);
+
+    void memberCoinInsideMessage(Long withdrawId);
 }
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java
index 7329890..d7d3c9e 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/ApiIgtOnHookPlanServiceImpl.java
+++ b/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());
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
index 3880818..9885008 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
+++ b/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"));
     }
 
diff --git a/src/main/java/cc/mrbird/febs/rabbit/RabbitMqConfig.java b/src/main/java/cc/mrbird/febs/rabbit/RabbitMqConfig.java
index 481d54a..24fa086 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/RabbitMqConfig.java
+++ b/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 ===
+
 }
diff --git a/src/main/java/cc/mrbird/febs/rabbit/consumer/UsdtUpdateConsumer.java b/src/main/java/cc/mrbird/febs/rabbit/consumer/UsdtUpdateConsumer.java
index 967c75f..f5d613c 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/consumer/UsdtUpdateConsumer.java
+++ b/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);
diff --git a/src/main/java/cc/mrbird/febs/rabbit/producer/UsdtUpdateProducer.java b/src/main/java/cc/mrbird/febs/rabbit/producer/UsdtUpdateProducer.java
index ad6292a..0d282f5 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/producer/UsdtUpdateProducer.java
+++ b/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());
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
index 06e8926..38104b9 100644
--- a/src/main/resources/application-test.yml
+++ b/src/main/resources/application-test.yml
@@ -28,7 +28,7 @@
     # Redis服务器连接端口
     port: 6379
     # Redis 密码
-    password: xcong123
+    password: d3y6dsdl;f.327
     lettuce:
       pool:
         # 连接池中的最小空闲连接

--
Gitblit v1.9.1