From df1f1d655c2ede40933ea047f00d2ce975489e23 Mon Sep 17 00:00:00 2001
From: wzy <wzy19931122ai@163.com>
Date: Sat, 27 Aug 2022 15:29:20 +0800
Subject: [PATCH] fix
---
src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java | 77 ++++++++++++++++++++++----------------
1 files changed, 45 insertions(+), 32 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 89f2928..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;
}
@@ -108,36 +111,6 @@
DappAccountMoneyChangeEntity ethChange = new DappAccountMoneyChangeEntity(member.getId(), preEthAmount, walletOperateDto.getAmount(), walletMine.getAvailableAmount(), "ETH兑换USDT-ETH, 兑换价格为:" + ethUsdtPrice, AppContants.MONEY_TYPE_CHANGE);
DappAccountMoneyChangeEntity usdtChange = new DappAccountMoneyChangeEntity(member.getId(), preUsdtAmount, usdt, walletCoin.getAvailableAmount(), "ETH兑换USDT-USDT, 兑换价格为:" + ethUsdtPrice, AppContants.MONEY_TYPE_CHANGE);
dappAccountMoneyChangeDao.insert(ethChange);
- dappAccountMoneyChangeDao.insert(usdtChange);
- }
-
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void withdraw(WalletOperateDto walletOperateDto) {
- DappMemberEntity member = LoginUserUtil.getAppUser();
-
- List<DappFundFlowEntity> fundFlows = dappFundFlowDao.selectListForMemberAndDay(member.getId(), 2);
- if (CollUtil.isNotEmpty(fundFlows)) {
- throw new FebsException("一天只能提现一次");
- }
-
- DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(member.getId());
- if (walletOperateDto.getAmount().compareTo(walletCoin.getAvailableAmount()) > 0) {
- throw new FebsException("可用金额不足");
- }
-
- Integer fee = (Integer) redisUtils.get(AppContants.REDIS_KEY_CHANGE_FEE);
-
- //TODO 并发加悲观锁
- BigDecimal preAmount = walletCoin.getAvailableAmount();
- walletCoin.setAvailableAmount(walletCoin.getAvailableAmount().subtract(walletOperateDto.getAmount()));
- walletCoin.setFrozenAmount(walletCoin.getFrozenAmount().add(walletOperateDto.getAmount()));
- dappWalletCoinDao.updateById(walletCoin);
-
- DappFundFlowEntity fund = new DappFundFlowEntity(member.getId(), walletOperateDto.getAmount(), AppContants.MONEY_TYPE_WITHDRAWAL, 1, new BigDecimal(fee));
- dappFundFlowDao.insert(fund);
-
- DappAccountMoneyChangeEntity usdtChange = new DappAccountMoneyChangeEntity(member.getId(), preAmount, walletOperateDto.getAmount(), walletCoin.getAvailableAmount(), "USDT申请提现", AppContants.MONEY_TYPE_WITHDRAWAL);
dappAccountMoneyChangeDao.insert(usdtChange);
}
@@ -234,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();
}
@@ -256,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
@@ -377,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
@@ -395,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