From 48731a1c7023dc75fe7357fac5736adcf084e0c2 Mon Sep 17 00:00:00 2001
From: wzy <wzy19931122ai@163.com>
Date: Sat, 27 Aug 2022 15:02:10 +0800
Subject: [PATCH] fix

---
 src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java |   47 +++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 45 insertions(+), 2 deletions(-)

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 8552798..c0258d4 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
@@ -64,6 +64,7 @@
         WalletInfoVo walletInfo = new WalletInfoVo();
         List<DappMemberEntity> direct = dappMemberDao.selectChildMemberDirectOrNot(member.getInviteId(), 1);
         DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(member.getId());
+        DappWalletMineEntity walletMine = dappWalletMineDao.selectByMemberId(member.getId());
 
         walletInfo.setDirectCnt(direct.size());
         walletInfo.setInviteId(member.getInviteId());
@@ -71,6 +72,8 @@
         walletInfo.setHasBuy(memberInfo.getActiveStatus());
         walletInfo.setOutCnt(memberInfo.getOutCnt());
         walletInfo.setProfit(dappFundFlowDao.selectProfitAmountByMemberId(member.getId()));
+        walletInfo.setTFCbalance(walletMine.getAvailableAmount());
+
         return walletInfo;
     }
 
@@ -204,8 +207,13 @@
 
             chainProducer.sendAchieveTreeMsg(member.getId());
         } else {
+            int type = 1;
+            // 1-认购 2-充值tfc
+            if (transferDto.getType() == 2) {
+                type = 6;
+            }
             if (transferDto.getId() == null) {
-                DappFundFlowEntity fundFlow = new DappFundFlowEntity(member.getId(), transferDto.getAmount(), 1, 1, transferDto.getFee(), transferDto.getTxHash());
+                DappFundFlowEntity fundFlow = new DappFundFlowEntity(member.getId(), transferDto.getAmount(), type, 1, transferDto.getFee(), transferDto.getTxHash());
                 dappFundFlowDao.insert(fundFlow);
                 return fundFlow.getId();
             }
@@ -226,7 +234,11 @@
 
     @Override
     public Map<String, BigDecimal> calPrice(PriceDto priceDto) {
-        return null;
+        String priceStr = redisUtils.getString(AppContants.REDIS_KEY_TFC_NEW_PRICE);
+
+        Map<String, BigDecimal> data = new HashMap<>();
+        data.put("fee", new BigDecimal(priceStr));
+        return data;
     }
 
     @Override
@@ -347,7 +359,22 @@
 
     @Override
     public void withdraw(WithdrawDto withdrawDto) {
+        DappMemberEntity member = LoginUserUtil.getAppUser();
 
+        updateWalletCoinWithLock(withdrawDto.getAmount().negate(), member.getId());
+        updateWalletMineWithLock(withdrawDto.getFee(), member.getId());
+
+        DappFundFlowEntity feeFlow = new DappFundFlowEntity(member.getId(), withdrawDto.getFee().negate(), 7, 2, null, null);
+        dappFundFlowDao.insert(feeFlow);
+
+        DappFundFlowEntity fundFlow = new DappFundFlowEntity(member.getId(), withdrawDto.getAmount().negate(), 5, 2, withdrawDto.getFee(), null);
+        dappFundFlowDao.insert(fundFlow);
+
+        String hash = ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer(member.getAddress(), withdrawDto.getAmount());
+        fundFlow.setToHash(hash);
+        dappFundFlowDao.updateById(fundFlow);
+
+        chainProducer.sendTfcFee(withdrawDto.getFee().toPlainString());
     }
 
     @Override
@@ -365,4 +392,20 @@
             }
         }
     }
+
+    @Override
+    public void updateWalletMineWithLock(BigDecimal amount, Long memberId) {
+        boolean isSuccess = false;
+        while(!isSuccess) {
+            DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(memberId);
+
+            walletCoin.setTotalAmount(walletCoin.getTotalAmount().add(amount));
+            walletCoin.setAvailableAmount(walletCoin.getAvailableAmount().add(amount));
+
+            int i = dappWalletCoinDao.updateWithLock(walletCoin);
+            if (i > 0) {
+                isSuccess = true;
+            }
+        }
+    }
 }

--
Gitblit v1.9.1