From 4d366b62e09fd9269222cd7b3dc37f5cbcef8c75 Mon Sep 17 00:00:00 2001
From: wzy <wzy19931122ai@163.com>
Date: Mon, 04 Apr 2022 12:46:30 +0800
Subject: [PATCH] fix
---
src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 150 insertions(+), 6 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 125da6c..fde1fbb 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
@@ -1,17 +1,26 @@
package cc.mrbird.febs.dapp.service.impl;
+import cc.mrbird.febs.common.contants.AppContants;
+import cc.mrbird.febs.common.entity.QueryRequest;
+import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.LoginUserUtil;
-import cc.mrbird.febs.dapp.entity.DappMemberEntity;
-import cc.mrbird.febs.dapp.entity.DappWalletCoinEntity;
-import cc.mrbird.febs.dapp.entity.DappWalletMineEntity;
-import cc.mrbird.febs.dapp.mapper.DappMemberDao;
-import cc.mrbird.febs.dapp.mapper.DappWalletCoinDao;
-import cc.mrbird.febs.dapp.mapper.DappWalletMineDao;
+import cc.mrbird.febs.common.utils.RedisUtils;
+import cc.mrbird.febs.dapp.dto.RecordInPageDto;
+import cc.mrbird.febs.dapp.dto.WalletOperateDto;
+import cc.mrbird.febs.dapp.entity.*;
+import cc.mrbird.febs.dapp.mapper.*;
import cc.mrbird.febs.dapp.service.DappWalletService;
import cc.mrbird.febs.dapp.vo.WalletInfoVo;
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.List;
/**
* @author wzy
@@ -25,6 +34,9 @@
private final DappMemberDao dappMemberDao;
private final DappWalletMineDao dappWalletMineDao;
private final DappWalletCoinDao dappWalletCoinDao;
+ private final DappFundFlowDao dappFundFlowDao;
+ private final DappAccountMoneyChangeDao dappAccountMoneyChangeDao;
+ private final RedisUtils redisUtils;
@Override
public WalletInfoVo walletInfo() {
@@ -39,4 +51,136 @@
walletInfo.setAvailableWallet(walletCoin.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
+ @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, fee);
+ dappFundFlowDao.insert(fund);
+
+ DappAccountMoneyChangeEntity usdtChange = new DappAccountMoneyChangeEntity(member.getId(), preAmount, walletOperateDto.getAmount(), walletCoin.getAvailableAmount(), "USDT申请提现", AppContants.MONEY_TYPE_WITHDRAWAL);
+ dappAccountMoneyChangeDao.insert(usdtChange);
+ }
+
+ @Override
+ public List<DappFundFlowEntity> recordInPage(RecordInPageDto recordInPageDto) {
+ Page<DappFundFlowEntity> page = new Page<>(recordInPageDto.getPageNum(), recordInPageDto.getPageSize());
+
+ DappFundFlowEntity dappFundFlowEntity = new DappFundFlowEntity();
+ dappFundFlowEntity.setType(recordInPageDto.getType());
+ IPage<DappFundFlowEntity> records = dappFundFlowDao.selectInPage(page, dappFundFlowEntity);
+ return records.getRecords();
+ }
+
+ @Override
+ public IPage<DappFundFlowEntity> fundFlowInPage(DappFundFlowEntity dappFundFlowEntity, QueryRequest request) {
+ Page<DappFundFlowEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
+ return dappFundFlowDao.selectInPage(page, dappFundFlowEntity);
+ }
+
+ @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);
+ }
+
+ @Override
+ public IPage<DappWalletMineEntity> walletMineInPage(DappWalletMineEntity walletMine, QueryRequest request) {
+ Page<DappWalletMineEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
+ return dappWalletMineDao.selectInPage(walletMine, page);
+ }
+
+ @Override
+ public IPage<DappAccountMoneyChangeEntity> accountMoneyChangeInPage(DappAccountMoneyChangeEntity change, QueryRequest request) {
+ Page<DappAccountMoneyChangeEntity> page = new Page<>(request.getPageNum(), request.getPageSize());
+ return dappAccountMoneyChangeDao.selectInPage(change, page);
+ }
}
--
Gitblit v1.9.1