From c54f0c60faae496e0fd989b281b776b69b65a87a Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Sat, 27 Aug 2022 22:29:30 +0800 Subject: [PATCH] finish sde --- src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java | 210 +++------------------------------------------------- 1 files changed, 13 insertions(+), 197 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 c0258d4..8268809 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 @@ -72,46 +72,9 @@ walletInfo.setHasBuy(memberInfo.getActiveStatus()); walletInfo.setOutCnt(memberInfo.getOutCnt()); walletInfo.setProfit(dappFundFlowDao.selectProfitAmountByMemberId(member.getId())); - walletInfo.setTFCbalance(walletMine.getAvailableAmount()); + walletInfo.setTfcBalance(walletMine.getAvailableAmount()); return walletInfo; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void change(WalletOperateDto walletOperateDto) { - DappMemberEntity member = LoginUserUtil.getAppUser(); - - BigDecimal ethUsdtPrice = (BigDecimal) redisUtils.get(AppContants.REDIS_KEY_ETH_NEW_PRICE); - - DappWalletMineEntity walletMine = dappWalletMineDao.selectByMemberId(member.getId()); - if (walletOperateDto.getAmount().compareTo(walletMine.getAvailableAmount()) > 0) { - throw new FebsException("可用金额不足"); - } - - DappFundFlowEntity fund = new DappFundFlowEntity(member.getId(), walletOperateDto.getAmount(), AppContants.MONEY_TYPE_CHANGE, null, null); - dappFundFlowDao.insert(fund); - - BigDecimal preEthAmount = walletMine.getAvailableAmount(); - - // TODO 并发加悲观锁 - // 更新eth金额 - walletMine.setAvailableAmount(walletMine.getAvailableAmount().subtract(walletOperateDto.getAmount())); - dappWalletMineDao.updateById(walletMine); - - DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(member.getId()); - BigDecimal preUsdtAmount = walletCoin.getAvailableAmount(); - - // 更新usdt金额 - BigDecimal usdt = walletOperateDto.getAmount().multiply(ethUsdtPrice); - walletCoin.setAvailableAmount(walletCoin.getAvailableAmount().add(usdt)); - walletCoin.setTotalAmount(walletCoin.getTotalAmount().add(usdt)); - dappWalletCoinDao.updateById(walletCoin); - - 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 @@ -137,37 +100,6 @@ } @Override - @Transactional(rollbackFor = Exception.class) - public void withdrawAgreeOrNot(Long id, int type) { - DappFundFlowEntity fundFlow = dappFundFlowDao.selectById(id); - if (fundFlow == null) { - throw new FebsException("数据不存在"); - } - - DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(fundFlow.getMemberId()); - if (type == 1) { - walletCoin.setFrozenAmount(walletCoin.getFrozenAmount().subtract(fundFlow.getAmount())); - walletCoin.setTotalAmount(walletCoin.getTotalAmount().subtract(fundFlow.getAmount())); - fundFlow.setStatus(DappFundFlowEntity.WITHDRAW_STATUS_AGREE); - } else if (type == 2) { - BigDecimal preAmount = walletCoin.getAvailableAmount(); - - walletCoin.setFrozenAmount(walletCoin.getFrozenAmount().subtract(fundFlow.getAmount())); - walletCoin.setAvailableAmount(walletCoin.getAvailableAmount().add(fundFlow.getAmount())); - - DappAccountMoneyChangeEntity accountMoneyChange = new DappAccountMoneyChangeEntity(walletCoin.getMemberId(), preAmount, fundFlow.getAmount(), walletCoin.getAvailableAmount(), "提现申请被驳回", 2); - fundFlow.setStatus(DappFundFlowEntity.WITHDRAW_STATUS_DISAGREE); - - dappAccountMoneyChangeDao.insert(accountMoneyChange); - } else { - throw new FebsException("参数错误"); - } - - dappWalletCoinDao.updateById(walletCoin); - dappFundFlowDao.updateById(fundFlow); - } - - @Override public IPage<DappWalletCoinEntity> walletCoinInPage(DappWalletCoinEntity walletCoin, QueryRequest request) { Page<DappWalletCoinEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); return dappWalletCoinDao.selectInPage(walletCoin, page); @@ -189,9 +121,11 @@ public Long transfer(TransferDto transferDto) { DappMemberEntity member = LoginUserUtil.getAppUser(); - member = dappMemberDao.selectById(member.getId()); - if (member.getActiveStatus() == 1) { - throw new FebsException("Do not repeat purchase"); + if (transferDto.getType() != 2) { + member = dappMemberDao.selectById(member.getId()); + if (member.getActiveStatus() == 1) { + throw new FebsException("Do not repeat purchase"); + } } if (transferDto.getBuyType() == 1) { @@ -233,128 +167,10 @@ } @Override - public Map<String, BigDecimal> calPrice(PriceDto priceDto) { + public BigDecimal calPrice(PriceDto priceDto) { 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 - public ActiveNftListVo boxSurprise() { - DappMemberEntity member = LoginUserUtil.getAppUser(); - - DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(member.getId()); - if (walletCoin.getBoxCnt() < 1) { - throw new FebsException(MessageSourceUtils.getString("box_surprise_001")); - } - - walletCoin.setBoxCnt(walletCoin.getBoxCnt() - 1); - dappWalletCoinDao.updateById(walletCoin); - - BoxUtil.Box box = BoxUtil.openBox(); - -// DappFundFlowEntity boxFundFlow = new DappFundFlowEntity(member.getId(), new BigDecimal(box.getIndex()), 6, 2, BigDecimal.ZERO); -// dappFundFlowDao.insert(boxFundFlow); -// -// new Thread(() -> { -// try { -// int count = box.getIndex(); -// while (count > 0) { -// ChainService.getInstance(ChainEnum.BSC_NFT_SDC.name()).safeMintNFT(member.getAddress()); -// Thread.sleep(5000); -// count--; -// } -// } catch (Exception e) { -// e.printStackTrace(); -// log.error("发放卡牌错误", e); -// } -// }).start(); - - Date time = new Date(); - Date expire = DateUtil.offset(time, DateField.HOUR, 2); - DappNftActivation nftActivation = new DappNftActivation(); - nftActivation.setMemberId(member.getId()); - nftActivation.setCount(box.getIndex()); - nftActivation.setOpenTime(time); - nftActivation.setExpireTime(expire); - nftActivation.setStatus(1); - dappNftActivationDao.insert(nftActivation); - - ActiveNftListVo nft = new ActiveNftListVo(); - nft.setCount(box.getIndex()); - nft.setId(nftActivation.getId()); - nft.setRemain(DateUtil.between(time, expire, DateUnit.SECOND)); - return nft; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public synchronized void activeNft(ActiveDto activeDto) { - DappMemberEntity member = LoginUserUtil.getAppUser(); - - DappNftActivation nftActive = dappNftActivationDao.selectById(activeDto.getId()); - if (nftActive == null) { - throw new FebsException(MessageSourceUtils.getString("nft_active_003")); - } - - if (nftActive.getCount() < activeDto.getCount()) { - throw new FebsException(MessageSourceUtils.getString("nft_active_004")); - } - - if (DateUtil.between(new Date(), nftActive.getExpireTime(), DateUnit.SECOND) < 0) { - throw new FebsException(MessageSourceUtils.getString("nft_active_005")); - } - - if (nftActive.getStatus() != 1) { - throw new FebsException(MessageSourceUtils.getString("nft_active_001")); - } - - PriceDto priceDto = new PriceDto(); - priceDto.setAmount(BigDecimal.ZERO); - Map<String, BigDecimal> price = calPrice(priceDto); - DappFundFlowEntity fundFlow = new DappFundFlowEntity(member.getId(), new BigDecimal(activeDto.getCount()), 8, 1, BigDecimal.ZERO, activeDto.getTxHash()); - - fundFlow.setTargetAmount(price.get("x").multiply(new BigDecimal(activeDto.getCount()))); - fundFlow.setNewestPrice(AppContants.NFT_ACTIVE_PRICE.multiply(BigDecimal.valueOf(nftActive.getCount()))); - dappFundFlowDao.insert(fundFlow); - - int count = nftActive.getCount() - activeDto.getCount(); - if (count == 0) { - nftActive.setStatus(3); - } - - nftActive.setCount(count); - nftActive.setHash(activeDto.getTxHash()); - dappNftActivationDao.updateById(nftActive); - } - - @Override - public List<ActiveNftListVo> findUnActiveNftList() { - DappMemberEntity member = LoginUserUtil.getAppUser(); - List<ActiveNftListVo> list = new ArrayList<>(); - - UpdateWrapper<DappNftActivation> query = new UpdateWrapper<>(); - query.eq("status", 1); - query.eq("member_id", member.getId()); - query.ge("expire_time", new Date()); - List<DappNftActivation> nftActivations = dappNftActivationDao.selectList(query); - - if (CollUtil.isEmpty(nftActivations)) { - return list; - } - - Date now = new Date(); - nftActivations.forEach(nft -> { - ActiveNftListVo nftVo = new ActiveNftListVo(); - nftVo.setId(nft.getId()); - nftVo.setRemain(DateUtil.between(now, nft.getExpireTime(), DateUnit.SECOND, false)); - nftVo.setCount(nft.getCount()); - list.add(nftVo); - }); - - return list; + return priceDto.getAmount().multiply(new BigDecimal("0.1")).multiply(new BigDecimal(priceStr)); } @Override @@ -362,7 +178,7 @@ DappMemberEntity member = LoginUserUtil.getAppUser(); updateWalletCoinWithLock(withdrawDto.getAmount().negate(), member.getId()); - updateWalletMineWithLock(withdrawDto.getFee(), member.getId()); + updateWalletMineWithLock(withdrawDto.getFee().negate(), member.getId()); DappFundFlowEntity feeFlow = new DappFundFlowEntity(member.getId(), withdrawDto.getFee().negate(), 7, 2, null, null); dappFundFlowDao.insert(feeFlow); @@ -397,12 +213,12 @@ public void updateWalletMineWithLock(BigDecimal amount, Long memberId) { boolean isSuccess = false; while(!isSuccess) { - DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(memberId); + DappWalletMineEntity walletMine = dappWalletMineDao.selectByMemberId(memberId); - walletCoin.setTotalAmount(walletCoin.getTotalAmount().add(amount)); - walletCoin.setAvailableAmount(walletCoin.getAvailableAmount().add(amount)); + walletMine.setTotalAmount(walletMine.getTotalAmount().add(amount)); + walletMine.setAvailableAmount(walletMine.getAvailableAmount().add(amount)); - int i = dappWalletCoinDao.updateWithLock(walletCoin); + int i = dappWalletMineDao.updateWithLock(walletMine); if (i > 0) { isSuccess = true; } -- Gitblit v1.9.1