fix
Helius
2022-09-14 ed86dfe43e1815e6803568b137f8984735186b25
src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java
@@ -64,7 +64,7 @@
        DappMemberEntity memberInfo = dappMemberDao.selectById(member.getId());
        WalletInfoVo walletInfo = new WalletInfoVo();
        List<DappMemberEntity> direct = dappMemberDao.selectChildMemberDirectOrNot(member.getInviteId(), 1);
        List<DappMemberEntity> direct = dappMemberDao.selectChildMemberDirectOrNot(member.getInviteId(), 1, null);
        DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(member.getId());
        DappWalletMineEntity walletMine = dappWalletMineDao.selectByMemberId(member.getId());
@@ -123,6 +123,11 @@
    @Override
    public Long transfer(TransferDto transferDto) {
        DappMemberEntity member = LoginUserUtil.getAppUser();
        String upgrade = redisUtils.getString("APP_UPGRADE");
        if ("upgrade".equals(upgrade)) {
            throw new FebsException("功能升级中");
        }
        if (transferDto.getType() != 2) {
            member = dappMemberDao.selectById(member.getId());
@@ -227,7 +232,7 @@
                walletCoin.setAvailableAmount(walletCoin.getAvailableAmount().add(amount));
                // 减
            } else {
                if (amount.compareTo(walletCoin.getAvailableAmount()) < 0) {
                if (amount.compareTo(walletCoin.getAvailableAmount()) > 0) {
                    throw new FebsException("Balance Not Enough");
                }
                walletCoin.setTotalAmount(walletCoin.getTotalAmount().subtract(amount));
@@ -251,7 +256,7 @@
                walletMine.setTotalAmount(walletMine.getTotalAmount().add(amount));
                walletMine.setAvailableAmount(walletMine.getAvailableAmount().add(amount));
            } else {
                if (amount.compareTo(walletMine.getAvailableAmount()) < 0) {
                if (amount.compareTo(walletMine.getAvailableAmount()) > 0) {
                    throw new FebsException("TFC Not Enough");
                }
                walletMine.setTotalAmount(walletMine.getTotalAmount().subtract(amount));
@@ -264,4 +269,55 @@
            }
        }
    }
    @Override
    public void addFrozenAmountWithLock(BigDecimal amount, Long memberId) {
        boolean isSuccess = false;
        while(!isSuccess) {
            DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(memberId);
            walletCoin.setTotalAmount(walletCoin.getTotalAmount().add(amount));
            walletCoin.setFrozenAmount(walletCoin.getFrozenAmount().add(amount));
            int i = dappWalletCoinDao.updateWithLock(walletCoin);
            if (i > 0) {
                isSuccess = true;
                DappFundFlowEntity frozenAmount = new DappFundFlowEntity(memberId, amount, 9, 2, null, null);
                dappFundFlowDao.insert(frozenAmount);
            }
        }
    }
    @Override
    public void releaseFrozenAmountWithLock(Long memberId) {
        boolean isSuccess = false;
        while(!isSuccess) {
            DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(memberId);
            if (walletCoin.getFrozenAmount().compareTo(BigDecimal.ZERO) <= 0) {
                return;
            }
            BigDecimal frozen = walletCoin.getFrozenAmount();
            walletCoin.setAvailableAmount(walletCoin.getAvailableAmount().add(frozen));
            walletCoin.setFrozenAmount(walletCoin.getFrozenAmount().subtract(frozen));
            int i = dappWalletCoinDao.updateWithLock(walletCoin);
            if (i > 0) {
                isSuccess = true;
                DappFundFlowEntity releaseFrozen = new DappFundFlowEntity(memberId, frozen, 10, 2, null, null);
                dappFundFlowDao.insert(releaseFrozen);
                DappFundFlowEntity releaseFrozenNegate = new DappFundFlowEntity(memberId, frozen.negate(), 9, 2, null, null);
                dappFundFlowDao.insert(releaseFrozenNegate);
            }
        }
    }
    @Override
    public DappWalletCoinEntity findByMemberId(Long memberId) {
        return dappWalletCoinDao.selectByMemberId(memberId);
    }
}