From 8f720d592d6ea2229cac4c051828af39f8425325 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Mon, 03 Jun 2024 11:45:00 +0800
Subject: [PATCH] 批量转账

---
 src/main/java/cc/mrbird/febs/dapp/controller/MemberMoneyFlowController.java |   91 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 90 insertions(+), 1 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/MemberMoneyFlowController.java b/src/main/java/cc/mrbird/febs/dapp/controller/MemberMoneyFlowController.java
index c900507..4585a57 100644
--- a/src/main/java/cc/mrbird/febs/dapp/controller/MemberMoneyFlowController.java
+++ b/src/main/java/cc/mrbird/febs/dapp/controller/MemberMoneyFlowController.java
@@ -1,20 +1,33 @@
 package cc.mrbird.febs.dapp.controller;
 
+import cc.mrbird.febs.common.annotation.ControllerEndpoint;
 import cc.mrbird.febs.common.controller.BaseController;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
+import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
 import cc.mrbird.febs.common.utils.FebsUtil;
+import cc.mrbird.febs.dapp.chain.ChainEnum;
+import cc.mrbird.febs.dapp.chain.ChainService;
+import cc.mrbird.febs.dapp.dto.BatchTransferDto;
 import cc.mrbird.febs.dapp.entity.DappAccountMoneyChangeEntity;
 import cc.mrbird.febs.dapp.entity.DappAchieve;
 import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
+import cc.mrbird.febs.dapp.entity.DappMemberEntity;
+import cc.mrbird.febs.dapp.mapper.DappFundFlowDao;
+import cc.mrbird.febs.dapp.mapper.DappMemberDao;
+import cc.mrbird.febs.dapp.service.AsyncCjService;
 import cc.mrbird.febs.dapp.service.DappWalletService;
 import cc.mrbird.febs.system.entity.User;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -29,6 +42,9 @@
 public class MemberMoneyFlowController extends BaseController {
 
     private final DappWalletService dappWalletService;
+    private final DappFundFlowDao dappFundFlowDao;
+    private final DappMemberDao dappMemberDao;
+    private final AsyncCjService asyncCjService;
 
     @GetMapping("/dappAchieveItem")
     public FebsResponse dappAchieveItem(QueryRequest request, DappAchieve dappAchieve, Integer parentId) {
@@ -54,6 +70,79 @@
         return new FebsResponse().success().data(getDataTable(dappWalletService.fundFlowInPage(dappFundFlowEntity, request)));
     }
 
+    @GetMapping("confirmOrder")
+    @ControllerEndpoint(operation = "批量转账", exceptionMessage = "操作失败")
+    public FebsResponse confirmOrder(DappFundFlowEntity dappFundFlowIn){
+        String orderIds = dappFundFlowIn.getOrderIds();
+        List<String> ids = StrUtil.splitTrim(orderIds, ",");
+        Integer type = 0;
+        List<BatchTransferDto> batchTransferDtos = new ArrayList<>();
+        for(String id : ids){
+            long orderId = Long.parseLong(id);
+            DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(orderId);
+            if(1 != dappFundFlowEntity.getStatus()){
+                continue;
+            }
+            BigDecimal amount = dappFundFlowEntity.getAmount().negate();
+            if(BigDecimal.ZERO.compareTo(amount) >=0){
+                amount = amount.negate();
+            }
+            Long memberId = dappFundFlowEntity.getMemberId();
+            DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId);
+            batchTransferDtos.add(new BatchTransferDto(dappMemberEntity.getAddress(), amount));
+
+            dappFundFlowEntity.setStatus(2);
+            dappFundFlowDao.updateById(dappFundFlowEntity);
+
+            type = dappFundFlowEntity.getType();
+        }
+        if(CollUtil.isNotEmpty(batchTransferDtos)){
+            if(FlowTypeEnum.USDT_OUT.getValue() == type){
+                ChainService.getInstance(ChainEnum.BSC_USDT.name()).transferList(batchTransferDtos);
+            }else if(FlowTypeEnum.DAI_BI_OUT.getValue() == type){
+                ChainService.getInstance(ChainEnum.BSC_GFA.name()).transferList(batchTransferDtos);
+            }
+        }
+        return new FebsResponse().success();
+    }
+
+    @GetMapping("confirmOrderV2")
+    @ControllerEndpoint(operation = "批量转账", exceptionMessage = "操作失败")
+    public FebsResponse confirmOrderV2(DappFundFlowEntity dappFundFlowIn){
+        String orderIds = dappFundFlowIn.getOrderIds();
+        List<String> ids = StrUtil.splitTrim(orderIds, ",");
+        for(String id : ids){
+            long orderId = Long.parseLong(id);
+            DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(orderId);
+            if(1 != dappFundFlowEntity.getStatus()){
+                continue;
+            }
+            try {
+                Thread.sleep(2000);
+                asyncCjService.confirmOrder(dappFundFlowEntity);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+        return new FebsResponse().success();
+    }
+
+    @GetMapping("confirmCancel")
+    @ControllerEndpoint(operation = "取消", exceptionMessage = "操作失败")
+    public FebsResponse confirmCancel(DappFundFlowEntity dappFundFlowIn){
+        String orderIds = dappFundFlowIn.getOrderIds();
+        List<String> ids = StrUtil.splitTrim(orderIds, ",");
+        for(String id : ids){
+            long orderId = Long.parseLong(id);
+            DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(orderId);
+            if(1 != dappFundFlowEntity.getStatus()){
+                continue;
+            }
+            asyncCjService.confirmCancel(dappFundFlowEntity);
+        }
+        return new FebsResponse().success();
+    }
+
     @PostMapping(value = "/withdrawAgree/{id}")
     public FebsResponse withdrawAgree(@PathVariable("id") Long id) {
         dappWalletService.withdrawAgreeOrNot(id, 1);

--
Gitblit v1.9.1