From b001f06d73fcd2016071fe7e34e0a7bee2f96a79 Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Mon, 21 Mar 2022 12:02:15 +0800 Subject: [PATCH] add modules --- src/main/java/cc/mrbird/febs/dapp/mapper/DappAccountMoneyChangeDao.java | 7 + src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java | 11 ++ src/main/resources/mapper/dapp/DappFundFlowDao.xml | 13 ++ src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java | 11 ++ src/main/java/cc/mrbird/febs/common/contants/AppContants.java | 15 +++ src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java | 12 ++ src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java | 87 ++++++++++++++++- src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java | 46 +++++++++ src/main/java/cc/mrbird/febs/dapp/entity/DappAccountMoneyChangeEntity.java | 47 +++++++++ src/main/java/cc/mrbird/febs/dapp/dto/RecordInPageDto.java | 23 ++++ 10 files changed, 265 insertions(+), 7 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/common/contants/AppContants.java b/src/main/java/cc/mrbird/febs/common/contants/AppContants.java index 1477082..14cdfbe 100644 --- a/src/main/java/cc/mrbird/febs/common/contants/AppContants.java +++ b/src/main/java/cc/mrbird/febs/common/contants/AppContants.java @@ -83,4 +83,19 @@ public static final int INT_FLAG_Y = 1; public static final int INT_FLAG_N = 2; + + /** + * 兑换 + */ + public static final int MONEY_TYPE_CHANGE = 1; + + /** + * 提现 + */ + public static final int MONEY_TYPE_WITHDRAWAL = 2; + + /** + * 采矿 + */ + public static final int MONEY_TYPE_MINE = 3; } diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java b/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java index 44d9079..0b7aea5 100644 --- a/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java +++ b/src/main/java/cc/mrbird/febs/dapp/controller/ApiDappMemberController.java @@ -1,6 +1,7 @@ package cc.mrbird.febs.dapp.controller; import cc.mrbird.febs.common.entity.FebsResponse; +import cc.mrbird.febs.dapp.dto.RecordInPageDto; import cc.mrbird.febs.dapp.dto.WalletOperateDto; import cc.mrbird.febs.dapp.service.DappWalletService; import cc.mrbird.febs.dapp.vo.WalletInfoVo; @@ -39,12 +40,20 @@ @ApiOperation(value = "兑换接口", notes = "兑换") @PostMapping(value = "/change") public FebsResponse change(@RequestBody WalletOperateDto walletOperateDto) { - return null; + dappWalletService.change(walletOperateDto); + return new FebsResponse().success().message("兑换成功"); } @ApiOperation(value = "提现接口", notes = "提现接口") @PostMapping(value = "/withdraw") public FebsResponse withdraw(@RequestBody WalletOperateDto walletOperateDto) { + dappWalletService.withdraw(walletOperateDto); + return new FebsResponse().success().message("申请成功, 等待审核"); + } + + @ApiOperation(value = "记录列表", notes = "记录列表") + @PostMapping(value = "/recordInPage") + public FebsResponse recordInPage(@RequestBody RecordInPageDto recordInPageDto) { return null; } } diff --git a/src/main/java/cc/mrbird/febs/dapp/dto/RecordInPageDto.java b/src/main/java/cc/mrbird/febs/dapp/dto/RecordInPageDto.java new file mode 100644 index 0000000..e1e2ce1 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/dapp/dto/RecordInPageDto.java @@ -0,0 +1,23 @@ +package cc.mrbird.febs.dapp.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author wzy + * @date 2022-03-21 + **/ +@Data +@ApiModel(value = "RecordInPageDto", description = "记录列表接收参数类") +public class RecordInPageDto { + + @ApiModelProperty(value = "页码") + private Integer pageNum = 1; + + @ApiModelProperty(value = "每页数量") + private Integer pageSize = 10; + + @ApiModelProperty(value = "类型", example = "1-兑换 2-提现 3-采矿") + private Integer type; +} diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappAccountMoneyChangeEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappAccountMoneyChangeEntity.java new file mode 100644 index 0000000..d757116 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappAccountMoneyChangeEntity.java @@ -0,0 +1,47 @@ +package cc.mrbird.febs.dapp.entity; + +import cc.mrbird.febs.common.entity.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @author wzy + * @date 2022-03-21 + **/ +@Data +@TableName("dapp_account_money_change") +public class DappAccountMoneyChangeEntity extends BaseEntity { + + public DappAccountMoneyChangeEntity(Long memberId, BigDecimal preAmount, BigDecimal amount, BigDecimal afterAmount, String content, Integer type) { + this.memberId = memberId; + this.preAmount = preAmount; + this.amount = amount; + this.afterAmount = afterAmount; + this.content = content; + this.type = type; + + this.setCreateBy("system"); + this.setUpdateBy("system"); + this.setCreateTime(new Date()); + this.setUpdateTime(new Date()); + this.setVersion(1); + } + + private Long memberId; + + private BigDecimal preAmount; + + private BigDecimal amount; + + private BigDecimal afterAmount; + + private String content; + + /** + * 类型 1-兑换 2-提现 3-采矿 + */ + private Integer type; +} diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java new file mode 100644 index 0000000..c697fa3 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java @@ -0,0 +1,46 @@ +package cc.mrbird.febs.dapp.entity; + +import cc.mrbird.febs.common.entity.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @author wzy + * @date 2022-03-21 + **/ +@Data +@TableName("dapp_fund_flow") +public class DappFundFlowEntity extends BaseEntity { + + public DappFundFlowEntity() {} + + public DappFundFlowEntity(Long memberId, BigDecimal amount, Integer type, Integer status) { + this.memberId = memberId; + this.amount = amount; + this.type = type; + this.status = status; + + this.setCreateBy("system"); + this.setUpdateBy("system"); + this.setCreateTime(new Date()); + this.setUpdateTime(new Date()); + this.setVersion(1); + } + + private Long memberId; + + private BigDecimal amount; + + /** + * 类型 1-兑换 2-提现 3-采矿 + */ + private Integer type; + + /** + * 状态 1-ing 2-成功 3-失败 + */ + private Integer status; +} diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappAccountMoneyChangeDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappAccountMoneyChangeDao.java new file mode 100644 index 0000000..8e8a610 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappAccountMoneyChangeDao.java @@ -0,0 +1,7 @@ +package cc.mrbird.febs.dapp.mapper; + +import cc.mrbird.febs.dapp.entity.DappAccountMoneyChangeEntity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface DappAccountMoneyChangeDao extends BaseMapper<DappAccountMoneyChangeEntity> { +} diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java new file mode 100644 index 0000000..c21f0b0 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappFundFlowDao.java @@ -0,0 +1,12 @@ +package cc.mrbird.febs.dapp.mapper; + +import cc.mrbird.febs.dapp.entity.DappFundFlowEntity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; + +public interface DappFundFlowDao extends BaseMapper<DappFundFlowEntity> { + + IPage<DappFundFlowEntity> selectInPage(Page<DappFundFlowEntity> page, @Param("record") DappFundFlowEntity dappFundFlowEntity); +} diff --git a/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java b/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java index b572bca..9d28cfa 100644 --- a/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java +++ b/src/main/java/cc/mrbird/febs/dapp/service/DappWalletService.java @@ -1,9 +1,20 @@ package cc.mrbird.febs.dapp.service; +import cc.mrbird.febs.dapp.dto.RecordInPageDto; +import cc.mrbird.febs.dapp.dto.WalletOperateDto; +import cc.mrbird.febs.dapp.entity.DappFundFlowEntity; +import cc.mrbird.febs.dapp.entity.DappWalletCoinEntity; import cc.mrbird.febs.dapp.vo.WalletInfoVo; + +import java.util.List; public interface DappWalletService { WalletInfoVo walletInfo(); + void change(WalletOperateDto walletOperateDto); + + void withdraw(WalletOperateDto walletOperateDto); + + List<DappFundFlowEntity> recordInPage(RecordInPageDto recordInPageDto); } 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..4e7c1e1 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,21 @@ package cc.mrbird.febs.dapp.service.impl; +import cc.mrbird.febs.common.contants.AppContants; +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.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 com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.List; /** * @author wzy @@ -25,6 +29,8 @@ private final DappMemberDao dappMemberDao; private final DappWalletMineDao dappWalletMineDao; private final DappWalletCoinDao dappWalletCoinDao; + private final DappFundFlowDao dappFundFlowDao; + private final DappAccountMoneyChangeDao dappAccountMoneyChangeDao; @Override public WalletInfoVo walletInfo() { @@ -39,4 +45,73 @@ walletInfo.setAvailableWallet(walletCoin.getAvailableAmount()); return walletInfo; } + + @Override + public void change(WalletOperateDto walletOperateDto) { + DappMemberEntity member = LoginUserUtil.getAppUser(); + + BigDecimal ethUsdtPrice = new BigDecimal("1234"); + + DappWalletMineEntity walletMine = dappWalletMineDao.selectByMemberId(member.getId()); + if (walletOperateDto.getAmount().compareTo(walletMine.getAvailableAmount()) > 0) { + throw new FebsException("可用金额不足"); + } + + DappFundFlowEntity fund = new DappFundFlowEntity(member.getId(), walletOperateDto.getAmount().negate(), AppContants.MONEY_TYPE_CHANGE, null); + dappFundFlowDao.insert(fund); + + BigDecimal preEthAmount = walletMine.getAvailableAmount(); + + // TODO 并发加悲观锁 + // 更新eth金额 + walletMine.setAvailableAmount(walletMine.getAvailableAmount().subtract(walletOperateDto.getAmount())); + walletMine.setTotalAmount(walletMine.getTotalAmount().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.getTotalAmount(), "ETH兑换USDT-ETH", AppContants.MONEY_TYPE_CHANGE); + DappAccountMoneyChangeEntity usdtChange = new DappAccountMoneyChangeEntity(member.getId(), preUsdtAmount, usdt, walletCoin.getTotalAmount(), "ETH兑换USDT-USDT", AppContants.MONEY_TYPE_CHANGE); + dappAccountMoneyChangeDao.insert(ethChange); + dappAccountMoneyChangeDao.insert(usdtChange); + } + + @Override + public void withdraw(WalletOperateDto walletOperateDto) { + DappMemberEntity member = LoginUserUtil.getAppUser(); + + DappWalletCoinEntity walletCoin = dappWalletCoinDao.selectByMemberId(member.getId()); + if (walletOperateDto.getAmount().compareTo(walletCoin.getAvailableAmount()) > 0) { + throw new FebsException("可用金额不足"); + } + + // TODO 并发加悲观锁 + BigDecimal preAmount = walletCoin.getAvailableAmount(); + walletCoin.setAvailableAmount(walletCoin.getAvailableAmount().subtract(walletOperateDto.getAmount())); + walletCoin.setFrozenAmount(walletCoin.getFrozenAmount().subtract(walletOperateDto.getAmount())); + dappWalletCoinDao.updateById(walletCoin); + + DappFundFlowEntity fund = new DappFundFlowEntity(member.getId(), walletOperateDto.getAmount().negate(), AppContants.MONEY_TYPE_WITHDRAWAL, 1); + dappFundFlowDao.insert(fund); + + DappAccountMoneyChangeEntity usdtChange = new DappAccountMoneyChangeEntity(member.getId(), preAmount, walletOperateDto.getAmount(), walletCoin.getTotalAmount(), "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()); + dappFundFlowDao.selectInPage(page, dappFundFlowEntity); + return null; + } } diff --git a/src/main/resources/mapper/dapp/DappFundFlowDao.xml b/src/main/resources/mapper/dapp/DappFundFlowDao.xml new file mode 100644 index 0000000..4a360a1 --- /dev/null +++ b/src/main/resources/mapper/dapp/DappFundFlowDao.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="cc.mrbird.febs.dapp.mapper.DappFundFlowDao"> + + <select id="selectInPage" resultType="cc.mrbird.febs.dapp.entity.DappFundFlowEntity"> + select * from dapp_fund_flow + <where> + <if test="record.type != null"> + and type = #{record.type} + </if> + </where> + </select> +</mapper> \ No newline at end of file -- Gitblit v1.9.1