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