From ef506d591338c4e1deabede781550cf2e0156f3f Mon Sep 17 00:00:00 2001
From: wzy <wzy19931122ai@163.com>
Date: Wed, 09 Nov 2022 23:46:18 +0800
Subject: [PATCH] 增加每日返利,提现逻辑修改,手续费分发逻辑
---
src/main/java/cc/mrbird/febs/job/ProfitDailyJob.java | 95 +++++++++++++
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java | 40 +++++
src/main/java/cc/mrbird/febs/dapp/controller/ViewController.java | 24 ++-
src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java | 10 +
src/main/java/cc/mrbird/febs/dapp/service/impl/DappWalletServiceImpl.java | 23 ++
src/main/java/cc/mrbird/febs/dapp/vo/AdminSystemFeeVo.java | 2
src/main/java/cc/mrbird/febs/dapp/service/impl/DappMemberServiceImpl.java | 5
src/main/resources/application-prod.yml | 1
src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java | 2
src/main/resources/templates/febs/views/dapp/system-fee-set.html | 10 +
src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java | 11 +
src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java | 19 ++
src/main/java/cc/mrbird/febs/dapp/service/impl/AdminOperationServiceImpl.java | 85 +++--------
src/main/resources/mapper/dapp/DappMemberDao.xml | 11 +
src/main/java/cc/mrbird/febs/dapp/entity/MemberCoinWithdrawEntity.java | 2
src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java | 10
src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java | 2
src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java | 2
src/test/java/cc/mrbird/febs/ChainTest.java | 9 +
src/main/resources/application-dev.yml | 3
20 files changed, 285 insertions(+), 81 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/dapp/controller/ViewController.java b/src/main/java/cc/mrbird/febs/dapp/controller/ViewController.java
index ddb28f3..82a9167 100644
--- a/src/main/java/cc/mrbird/febs/dapp/controller/ViewController.java
+++ b/src/main/java/cc/mrbird/febs/dapp/controller/ViewController.java
@@ -21,7 +21,7 @@
import java.math.BigDecimal;
/**
- * @author
+ * @author
* @date 2022-03-21
**/
@Controller("dappView")
@@ -114,7 +114,7 @@
}
- @GetMapping(value ="priceSetting")
+ @GetMapping(value = "priceSetting")
@RequiresPermissions("price:setting:view")
public String priceSetting(Model model) {
BigDecimal price = (BigDecimal) redisUtils.get(AppContants.REDIS_KEY_ETH_NEW_PRICE);
@@ -123,25 +123,31 @@
}
//费率设置
- @GetMapping(value ="systemFeeSet")
+ @GetMapping(value = "systemFeeSet")
@RequiresPermissions("fee:setting:view")
public String systemFeeSet(Model model) {
AdminSystemFeeVo adminSystemFeeVo = new AdminSystemFeeVo();
DataDictionaryCustom rebateDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.REBATE_PERCENT.getType(), DataDictionaryEnum.REBATE_PERCENT.getCode());
- if(ObjectUtil.isNotEmpty(rebateDic)){
- String value = rebateDic.getValue() == null ? "0":rebateDic.getValue();
+ if (ObjectUtil.isNotEmpty(rebateDic)) {
+ String value = rebateDic.getValue() == null ? "0" : rebateDic.getValue();
adminSystemFeeVo.setRebatePercent(value);
}
DataDictionaryCustom memberFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.MEMBER_FEE.getType(), DataDictionaryEnum.MEMBER_FEE.getCode());
- if(ObjectUtil.isNotEmpty(memberFeeDic)){
- String value = memberFeeDic.getValue() == null ? "0":memberFeeDic.getValue();
+ if (ObjectUtil.isNotEmpty(memberFeeDic)) {
+ String value = memberFeeDic.getValue() == null ? "0" : memberFeeDic.getValue();
adminSystemFeeVo.setMemberFee(value);
}
DataDictionaryCustom serviceFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.WITHDRAW_SERVICE_FEE.getType(), DataDictionaryEnum.WITHDRAW_SERVICE_FEE.getCode());
- if(ObjectUtil.isNotEmpty(serviceFeeDic)){
- String value = serviceFeeDic.getValue() == null ? "0":serviceFeeDic.getValue();
+ if (ObjectUtil.isNotEmpty(serviceFeeDic)) {
+ String value = serviceFeeDic.getValue() == null ? "0" : serviceFeeDic.getValue();
adminSystemFeeVo.setServiceFee(value);
}
+
+ DataDictionaryCustom symbolPrice = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SYMBOL_PRICE.getType(), DataDictionaryEnum.SYMBOL_PRICE.getCode());
+ if (ObjectUtil.isNotEmpty(symbolPrice)) {
+ String value = symbolPrice.getValue() == null ? "0" : symbolPrice.getValue();
+ adminSystemFeeVo.setSymbolPrice(value);
+ }
model.addAttribute("systemFee", adminSystemFeeVo);
return FebsUtil.view("dapp/system-fee-set");
}
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 b1dc889..48b26b4 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/DappFundFlowEntity.java
@@ -47,7 +47,7 @@
private BigDecimal amount;
/**
- * 类型 1-买入 2-矩阵收益 3-直推收益 4-保险池 5-提现 6-手续费充值 7-手续费扣除 8-结算 9-冻结 10-冻结释放
+ * 类型 1-买入 2-矩阵收益 3-直推收益 4-保险池 5-提现 6-手续费充值 7-手续费扣除 8-结算 9-冻结 10-冻结释放 11-产矿 12-手续费返利
*/
private Integer type;
diff --git a/src/main/java/cc/mrbird/febs/dapp/entity/MemberCoinWithdrawEntity.java b/src/main/java/cc/mrbird/febs/dapp/entity/MemberCoinWithdrawEntity.java
index b96e243..a5da297 100644
--- a/src/main/java/cc/mrbird/febs/dapp/entity/MemberCoinWithdrawEntity.java
+++ b/src/main/java/cc/mrbird/febs/dapp/entity/MemberCoinWithdrawEntity.java
@@ -55,6 +55,8 @@
private String tag;
+ private Long flowId;
+
/**
* 后台操作用户的标识
*/
diff --git a/src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java b/src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java
index 54569d3..fcd2b5f 100644
--- a/src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java
+++ b/src/main/java/cc/mrbird/febs/dapp/enumerate/DataDictionaryEnum.java
@@ -4,12 +4,14 @@
@Getter
public enum DataDictionaryEnum {
- //每日返利的产矿百分比
+ // 每日返利的产矿百分比
REBATE_PERCENT("SYSTEM_SETTING","REBATE_PERCENT"),
- //分给推荐三人的终身VIP会员手续费
+ // 分给推荐三人的终身VIP会员手续费
MEMBER_FEE("SYSTEM_SETTING","MEMBER_FEE"),
- //提现手续费
- WITHDRAW_SERVICE_FEE("SYSTEM_SETTING", "WITHDRAW_SERVICE_FEE");
+ // 提现手续费
+ WITHDRAW_SERVICE_FEE("SYSTEM_SETTING", "WITHDRAW_SERVICE_FEE"),
+ // 币的价格
+ SYMBOL_PRICE("SYSTEM_SETTING", "SYMBOL_PRICE");
private String type;
diff --git a/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java b/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java
index 218c222..8d31cec 100644
--- a/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java
+++ b/src/main/java/cc/mrbird/febs/dapp/mapper/DappMemberDao.java
@@ -42,4 +42,6 @@
int updateMemberActive();
DappMemberEntity selectNewestDirectMember(@Param("inviteId") String inviteId);
+
+ List<DappMemberEntity> selectMemberListNeedProfit();
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java b/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
index b3c6361..48b585c 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/DappSystemService.java
@@ -22,4 +22,6 @@
void tfcNewPrice(String data);
void resetMatrix();
+
+ void feeDistribute(String data);
}
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/AdminOperationServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/AdminOperationServiceImpl.java
index 13bf4f4..2437f41 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/AdminOperationServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/AdminOperationServiceImpl.java
@@ -3,16 +3,12 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.exception.FebsException;
-import cc.mrbird.febs.dapp.entity.DappAccountMoneyChangeEntity;
-import cc.mrbird.febs.dapp.entity.DappMemberEntity;
-import cc.mrbird.febs.dapp.entity.DappWalletCoinEntity;
-import cc.mrbird.febs.dapp.entity.MemberCoinWithdrawEntity;
-import cc.mrbird.febs.dapp.mapper.DappAccountMoneyChangeDao;
-import cc.mrbird.febs.dapp.mapper.DappMemberDao;
-import cc.mrbird.febs.dapp.mapper.DappWalletCoinDao;
-import cc.mrbird.febs.dapp.mapper.MemberCoinWithdrawDao;
+import cc.mrbird.febs.dapp.entity.*;
+import cc.mrbird.febs.dapp.mapper.*;
import cc.mrbird.febs.dapp.service.AdminOperationService;
+import cc.mrbird.febs.dapp.service.DappWalletService;
import cc.mrbird.febs.dapp.vo.AdminMemberCoinWithdrawVo;
+import cc.mrbird.febs.rabbit.producer.ChainProducer;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -31,6 +27,9 @@
private final DappWalletCoinDao dappWalletCoinDao;
private final DappMemberDao dappMemberDao;
private final DappAccountMoneyChangeDao dappAccountMoneyChangeDao;
+ private final DappWalletService dappWalletService;
+ private final DappFundFlowDao dappFundFlowDao;
+ private final ChainProducer chainProducer;
@Override
public IPage<AdminMemberCoinWithdrawVo> findMemberWithdrawCoinAllOneInPage(MemberCoinWithdrawEntity memberCoinWithdrawEntity, QueryRequest request) {
@@ -48,53 +47,12 @@
}
memberCoinWithdrawEntity.setStatus(MemberCoinWithdrawEntity.STATUS_YES);
memberCoinWithdrawDao.updateById(memberCoinWithdrawEntity);
- //转出账户,总额减少,冻结减少
- BigDecimal amount = memberCoinWithdrawEntity.getAmount().setScale(4,BigDecimal.ROUND_DOWN);
- Long memberIdOut = memberCoinWithdrawEntity.getMemberId();
- DappWalletCoinEntity dappWalletCoinEntityOut = dappWalletCoinDao.selectByMemberId(memberIdOut);
- dappWalletCoinDao.delTotalAndDelFrozenById(dappWalletCoinEntityOut.getId(),amount);
- String isInside = memberCoinWithdrawEntity.getIsInside();
- String content = "";
- Integer type = 0;
- if(MemberCoinWithdrawEntity.ISINSIDE_NO.equals(isInside)){
- content = "提现";
- type = 2;
- }else{
- content = "转账";
- type = 4;
- }
- //转出账户生成一条账户资金变化记录
- DappAccountMoneyChangeEntity dappAccountMoneyChangeEntityOut = new DappAccountMoneyChangeEntity(memberIdOut,
- dappWalletCoinEntityOut.getTotalAmount().setScale(4,BigDecimal.ROUND_DOWN),
- amount.negate(),
- dappWalletCoinEntityOut.getTotalAmount().setScale(4,BigDecimal.ROUND_DOWN).subtract(amount),
- content,
- type);
- dappAccountMoneyChangeDao.insert(dappAccountMoneyChangeEntityOut);
+ DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(memberCoinWithdrawEntity.getFlowId());
+ dappFundFlowEntity.setStatus(DappFundFlowEntity.WITHDRAW_STATUS_AGREE);
+ dappFundFlowDao.updateById(dappFundFlowEntity);
- //转入账户,总额增加,余额增加
- //转账
-// if(MemberCoinWithdrawEntity.ISINSIDE_YES.equals(isInside)){
-// String addressIn = memberCoinWithdrawEntity.getAddress();
-// DappMemberEntity dappMemberEntityIn = dappMemberDao.selectMemberInfoByInviteId(addressIn);
-// if(ObjectUtil.isEmpty(dappMemberEntityIn)){
-// throw new FebsException("系统异常,联系开发人员");
-// }
-// DappWalletCoinEntity dappWalletCoinEntityIn = dappWalletCoinDao.selectByMemberId(dappMemberEntityIn.getId());
-// Integer countIn = dappWalletCoinDao.addTotalAndaddAvailableById(dappWalletCoinEntityIn.getId(), memberCoinWithdrawEntity.getAmount());
-// if(1 != countIn){
-// throw new FebsException("系统异常,联系开发人员");
-// }
-// //生成流水记录
-// DappAccountMoneyChangeEntity dappAccountMoneyChangeEntityIn = new DappAccountMoneyChangeEntity(dappMemberEntityIn.getId(),
-// dappWalletCoinEntityIn.getTotalAmount().setScale(4,BigDecimal.ROUND_DOWN),
-// amount,
-// dappWalletCoinEntityIn.getTotalAmount().setScale(4,BigDecimal.ROUND_DOWN).add(amount),
-// "转账",
-// 4);
-// dappAccountMoneyChangeDao.insert(dappAccountMoneyChangeEntityIn);
-// }
+ chainProducer.sendFeeDistributeMsg(dappFundFlowEntity.getId());
return new FebsResponse().success();
}
@@ -105,14 +63,25 @@
if(ObjectUtil.isEmpty(memberCoinWithdrawEntity)){
throw new FebsException("刷新页面重试");
}
+
+ DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(memberCoinWithdrawEntity.getFlowId());
+ if (dappFundFlowEntity == null) {
+ throw new FebsException("审核失败,联系管理员");
+ }
memberCoinWithdrawEntity.setStatus(MemberCoinWithdrawEntity.STATUS_NO);
memberCoinWithdrawDao.updateById(memberCoinWithdrawEntity);
- DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberCoinWithdrawEntity.getMemberId());
- Integer count = dappWalletCoinDao.addFrozenAndDelAvailableById(dappWalletCoinEntity.getId(),memberCoinWithdrawEntity.getAmount());
- if(1 != count){
- throw new FebsException("系统异常,联系开发人员");
- }
+ dappFundFlowEntity.setStatus(DappFundFlowEntity.WITHDRAW_STATUS_DISAGREE);
+ dappFundFlowDao.updateById(dappFundFlowEntity);
+
+ dappWalletService.updateWalletCoinWithLock(memberCoinWithdrawEntity.getAmount(), memberCoinWithdrawEntity.getMemberId(), 1);
+ dappWalletService.updateWalletMineWithLock(memberCoinWithdrawEntity.getFeeAmount(), memberCoinWithdrawEntity.getMemberId(), 1);
+
+ DappFundFlowEntity feeFlow = new DappFundFlowEntity(memberCoinWithdrawEntity.getMemberId(), memberCoinWithdrawEntity.getFeeAmount(), 7, 2, null, null);
+ dappFundFlowDao.insert(feeFlow);
+
+ DappFundFlowEntity fundFlow = new DappFundFlowEntity(memberCoinWithdrawEntity.getMemberId(), memberCoinWithdrawEntity.getAmount(), 5, 1, memberCoinWithdrawEntity.getFeeAmount(), null);
+ dappFundFlowDao.insert(fundFlow);
return new FebsResponse().success();
}
}
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 667bd27..0eb36c9 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
@@ -364,6 +364,11 @@
DataDictionaryCustom memberFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.MEMBER_FEE.getType(), DataDictionaryEnum.MEMBER_FEE.getCode());
memberFeeDic.setValue(memberFee);
dataDictionaryCustomMapper.updateById(memberFeeDic);
+
+ String symbolPrice = adminSystemFeeVo.getSymbolPrice();
+ DataDictionaryCustom symbolPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SYMBOL_PRICE.getType(), DataDictionaryEnum.SYMBOL_PRICE.getCode());
+ symbolPriceDic.setValue(symbolPrice);
+ dataDictionaryCustomMapper.updateById(symbolPriceDic);
}
public TeamListVo buildTeamMatrix(DappAchieveMemberTreeEntity node) {
diff --git a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
index 3d6bb3b..dc692cb 100644
--- a/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java
@@ -8,6 +8,7 @@
import cc.mrbird.febs.dapp.chain.ChainService;
import cc.mrbird.febs.dapp.dto.SystemDto;
import cc.mrbird.febs.dapp.entity.*;
+import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
import cc.mrbird.febs.dapp.mapper.*;
import cc.mrbird.febs.dapp.service.DappSystemService;
import cc.mrbird.febs.dapp.service.DappWalletService;
@@ -18,6 +19,7 @@
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -44,6 +46,7 @@
private final DappAchieveTreeDao dappAchieveTreeDao;
private final DappAchieveMemberTreeDao dappAchieveMemberTreeDao;
private final DappWalletService dappWalletService;
+ private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
@Override
@@ -194,8 +197,6 @@
amount = TreeConstants.FULL_PROFIT_AMOUNT;
}
- dappWalletService.releaseFrozenAmountWithLock(memberId);
-
member.setOutCnt(member.getOutCnt() + 1);
dappMemberDao.updateById(member);
@@ -246,4 +247,39 @@
dappAchieveMemberTreeDao.emptyTable();
dappMemberDao.updateMemberActive();
}
+
+ @Override
+ public void feeDistribute(String data) {
+ if (StrUtil.isBlank(data)) {
+ return;
+ }
+
+ Long flowId = Long.parseLong(data);
+ DappFundFlowEntity fundFlow = dappFundFlowDao.selectById(flowId);
+ if (fundFlow == null) {
+ return;
+ }
+
+ DataDictionaryCustom memberFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.MEMBER_FEE.getType(), DataDictionaryEnum.MEMBER_FEE.getCode());
+ if (memberFeeDic == null) {
+ log.info("未设置手续费返利比例");
+ return;
+ }
+ List<DappMemberEntity> memberList = dappMemberDao.selectMemberListNeedProfit();
+ if (CollUtil.isEmpty(memberList)) {
+ return;
+ }
+
+ BigDecimal feeReturnRatio = new BigDecimal(memberFeeDic.getValue());
+ int size = memberList.size();
+ BigDecimal totalProfit = fundFlow.getFee().multiply(feeReturnRatio.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_DOWN));
+ BigDecimal perProfit = totalProfit.divide(BigDecimal.valueOf(size), 2, RoundingMode.HALF_DOWN);
+
+ memberList.forEach(item -> {
+ dappWalletService.updateWalletMineWithLock(perProfit, item.getId(), 1);
+
+ DappFundFlowEntity profitFlow = new DappFundFlowEntity(item.getId(), perProfit, 12, 2, null, null);
+ dappFundFlowDao.insert(profitFlow);
+ });
+ }
}
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 cb9e924..1b4574b 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
@@ -12,6 +12,7 @@
import cc.mrbird.febs.dapp.chain.ContractChainService;
import cc.mrbird.febs.dapp.dto.*;
import cc.mrbird.febs.dapp.entity.*;
+import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
import cc.mrbird.febs.dapp.mapper.*;
import cc.mrbird.febs.dapp.service.DappWalletService;
import cc.mrbird.febs.dapp.utils.BoxUtil;
@@ -54,6 +55,7 @@
private final RedisUtils redisUtils;
private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
private final DappNftActivationDao dappNftActivationDao;
+ private final MemberCoinWithdrawDao memberCoinWithdrawDao;
private final ChainProducer chainProducer;
private final DappSystemDao dappSystemDao;
@@ -176,13 +178,15 @@
@Override
public BigDecimal calPrice(PriceDto priceDto) {
- String priceStr = redisUtils.getString(AppContants.REDIS_KEY_TFC_NEW_PRICE);
+// String priceStr = redisUtils.getString(AppContants.REDIS_KEY_TFC_NEW_PRICE);
+ DataDictionaryCustom symbolPrice = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SYMBOL_PRICE.getType(), DataDictionaryEnum.SYMBOL_PRICE.getCode());
+ DataDictionaryCustom serviceFeeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.WITHDRAW_SERVICE_FEE.getType(), DataDictionaryEnum.WITHDRAW_SERVICE_FEE.getCode());
BigDecimal amount = priceDto.getAmount();
if (priceDto.getAmount() == null) {
amount = BigDecimal.ZERO;
}
- return amount.multiply(new BigDecimal("0.1")).divide(new BigDecimal(priceStr), 2, RoundingMode.HALF_UP);
+ return amount.multiply(new BigDecimal(serviceFeeDic.getValue()).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_DOWN)).divide(new BigDecimal(symbolPrice.getValue()), 2, RoundingMode.HALF_UP);
}
@Override
@@ -197,17 +201,28 @@
DappWalletMineEntity walletMine = dappWalletMineDao.selectByMemberId(member.getId());
if (walletMine.getAvailableAmount().compareTo(withdrawDto.getFee()) < 0) {
- throw new FebsException("TFC Not Enough");
+ throw new FebsException("DMD Not Enough");
}
updateWalletCoinWithLock(withdrawDto.getAmount(), member.getId(), 2);
updateWalletMineWithLock(withdrawDto.getFee(), member.getId(), 2);
+
DappFundFlowEntity feeFlow = new DappFundFlowEntity(member.getId(), withdrawDto.getFee().negate(), 7, 2, null, null);
dappFundFlowDao.insert(feeFlow);
DappFundFlowEntity fundFlow = new DappFundFlowEntity(member.getId(), withdrawDto.getAmount().negate(), 5, 1, withdrawDto.getFee(), null);
dappFundFlowDao.insert(fundFlow);
+
+ MemberCoinWithdrawEntity memberCoinWithdraw = new MemberCoinWithdrawEntity();
+ memberCoinWithdraw.setMemberId(member.getId());
+ memberCoinWithdraw.setAddress(member.getAddress());
+ memberCoinWithdraw.setAmount(withdrawDto.getAmount());
+ memberCoinWithdraw.setFeeAmount(withdrawDto.getFee());
+ memberCoinWithdraw.setStatus(MemberCoinWithdrawEntity.STATUS_DOING);
+ memberCoinWithdraw.setSymbol("USDT");
+ memberCoinWithdraw.setFlowId(fundFlow.getId());
+ memberCoinWithdrawDao.insert(memberCoinWithdraw);
// String hash = ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer(member.getAddress(), withdrawDto.getAmount());
// fundFlow.setToHash(hash);
@@ -257,7 +272,7 @@
walletMine.setAvailableAmount(walletMine.getAvailableAmount().add(amount));
} else {
if (amount.compareTo(walletMine.getAvailableAmount()) > 0) {
- throw new FebsException("TFC Not Enough");
+ throw new FebsException("DMD Not Enough");
}
walletMine.setTotalAmount(walletMine.getTotalAmount().subtract(amount));
walletMine.setAvailableAmount(walletMine.getAvailableAmount().subtract(amount));
diff --git a/src/main/java/cc/mrbird/febs/dapp/vo/AdminSystemFeeVo.java b/src/main/java/cc/mrbird/febs/dapp/vo/AdminSystemFeeVo.java
index 0d71027..5e3b0f1 100644
--- a/src/main/java/cc/mrbird/febs/dapp/vo/AdminSystemFeeVo.java
+++ b/src/main/java/cc/mrbird/febs/dapp/vo/AdminSystemFeeVo.java
@@ -12,4 +12,6 @@
private String memberFee;
private String serviceFee;
+
+ private String symbolPrice;
}
diff --git a/src/main/java/cc/mrbird/febs/job/ProfitDailyJob.java b/src/main/java/cc/mrbird/febs/job/ProfitDailyJob.java
new file mode 100644
index 0000000..c220243
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/job/ProfitDailyJob.java
@@ -0,0 +1,95 @@
+package cc.mrbird.febs.job;
+
+
+import cc.mrbird.febs.dapp.entity.DappFundFlowEntity;
+import cc.mrbird.febs.dapp.entity.DappMemberEntity;
+import cc.mrbird.febs.dapp.entity.DataDictionaryCustom;
+import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
+import cc.mrbird.febs.dapp.mapper.DappFundFlowDao;
+import cc.mrbird.febs.dapp.mapper.DappMemberDao;
+import cc.mrbird.febs.dapp.mapper.DataDictionaryCustomMapper;
+import cc.mrbird.febs.dapp.service.DappWalletService;
+import cc.mrbird.febs.tree.TreeConstants;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.List;
+
+@Slf4j
+@Component
+@ConditionalOnProperty(prefix = "system", name = "quartz-job", havingValue = "true")
+public class ProfitDailyJob {
+
+ @Autowired
+ private DappMemberDao dappMemberDao;
+ @Autowired
+ private DappFundFlowDao dappFundFlowDao;
+ @Autowired
+ private DataDictionaryCustomMapper dataDictionaryCustomMapper;
+ @Autowired
+ private DappWalletService dappWalletService;
+
+ @Scheduled(cron = "0 0 0 * * ?")
+ public void profitDailyJob() {
+ log.info("每日产矿任务执行");
+ DataDictionaryCustom symbolPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SYMBOL_PRICE.getType(), DataDictionaryEnum.SYMBOL_PRICE.getCode());
+ if (symbolPriceDic == null) {
+ log.info("未设置币种价格");
+ return;
+ }
+
+ DataDictionaryCustom rebateDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.REBATE_PERCENT.getType(), DataDictionaryEnum.REBATE_PERCENT.getCode());
+ if (rebateDic == null) {
+ log.info("未设置每日产矿比例");
+ return;
+ }
+
+ BigDecimal symbolPrice = new BigDecimal(symbolPriceDic.getValue());
+ BigDecimal rebateRatio = new BigDecimal(rebateDic.getValue());
+
+ QueryWrapper<DappMemberEntity> query = new QueryWrapper<>();
+ query.eq("active_status", 1);
+ List<DappMemberEntity> members = dappMemberDao.selectList(query);
+ if (CollUtil.isEmpty(members)) {
+ return;
+ }
+
+ members.forEach(item -> {
+ QueryWrapper<DappFundFlowEntity> fundFlowQuery = new QueryWrapper<>();
+ fundFlowQuery.eq("member_id", item.getId());
+ fundFlowQuery.eq("type", 11);
+ List<DappFundFlowEntity> flows = dappFundFlowDao.selectList(fundFlowQuery);
+
+ BigDecimal sum = BigDecimal.ZERO;
+ if (CollUtil.isNotEmpty(flows)) {
+ double symbolSum = flows.stream().mapToDouble(flow -> flow.getAmount().doubleValue()).sum();
+ sum = symbolPrice.multiply(new BigDecimal(symbolSum));
+ }
+
+ if (CollUtil.isEmpty(flows) || TreeConstants.PUT_IN_AMOUNT.compareTo(sum) > 0) {
+ BigDecimal profitU = TreeConstants.PUT_IN_AMOUNT.multiply(rebateRatio.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_DOWN));
+
+ BigDecimal remain = TreeConstants.PUT_IN_AMOUNT.subtract(sum);
+ if (remain.compareTo(profitU) < 0) {
+ profitU = remain;
+ }
+
+ BigDecimal profitSymbol = profitU.divide(symbolPrice, 2, RoundingMode.HALF_DOWN);
+
+ dappWalletService.updateWalletMineWithLock(profitSymbol, item.getId(), 1);
+ DappFundFlowEntity fundFlow = new DappFundFlowEntity(item.getId(), profitSymbol, 11, 2, null, null);
+ dappFundFlowDao.insert(fundFlow);
+ }
+ });
+
+
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java b/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
index 1085672..cb11d30 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/RabbitConfiguration.java
@@ -82,4 +82,23 @@
return BindingBuilder.bind(tfcNewPriceQueue()).to(tfcNewPriceExchange()).with(QueueEnum.TFC_NEW_PRICE.getRoute());
}
// === tfc最新价 end ===
+
+
+
+ // === 手续费分发 start ===
+ @Bean
+ public DirectExchange feeDistributeExchange() {
+ return new DirectExchange(QueueEnum.DISTRIB_PROFIT.getExchange());
+ }
+
+ @Bean
+ public Queue feeDistributeQueue() {
+ return new Queue(QueueEnum.DISTRIB_PROFIT.getQueue());
+ }
+
+ @Bean
+ public Binding feeDistributeBind() {
+ return BindingBuilder.bind(feeDistributeQueue()).to(feeDistributeExchange()).with(QueueEnum.DISTRIB_PROFIT.getRoute());
+ }
+ // === 手续费分发 end ===
}
diff --git a/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java b/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
index 36b35d8..95bd8f7 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/consumer/ChainConsumer.java
@@ -34,6 +34,14 @@
*/
@RabbitListener(queues = QueueConstants.TFC_NEW_PRICE)
public void tfcNewPrice(String data) {
- dappSystemService.tfcNewPrice(data);
+// dappSystemService.tfcNewPrice(data);
+ }
+
+ /**
+ * @param data
+ */
+ @RabbitListener(queues = QueueConstants.DISTRIB_PROFIT)
+ public void feeDistribute(String data) {
+ dappSystemService.feeDistribute(data);
}
}
diff --git a/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java b/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
index fcae1bf..c6483d3 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/producer/ChainProducer.java
@@ -49,4 +49,15 @@
CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
rabbitTemplate.convertAndSend(QueueEnum.WITHDRAW_FEE.getExchange(), QueueEnum.WITHDRAW_FEE.getRoute(), data, correlationData);
}
+
+ /**
+ * 发送手续费分发消息
+ *
+ * @param id
+ */
+ public void sendFeeDistributeMsg(Long id) {
+ log.info("发送手续费分发消息:{}", id);
+ CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
+ rabbitTemplate.convertAndSend(QueueEnum.DISTRIB_PROFIT.getExchange(), QueueEnum.DISTRIB_PROFIT.getRoute(), id, correlationData);
+ }
}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index d4b6b9a..4f91410 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -59,6 +59,7 @@
system:
online-transfer: false
- chain-listener: true
+ chain-listener: false
reset-job: false
+ quartz-job: true
debug: true
\ No newline at end of file
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 2051472..c58680a 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -56,4 +56,5 @@
online-transfer: true
chain-listener: true
reset-job: true
+ quartz-job: true
debug: false
\ No newline at end of file
diff --git a/src/main/resources/mapper/dapp/DappMemberDao.xml b/src/main/resources/mapper/dapp/DappMemberDao.xml
index d9c4300..d5185c8 100644
--- a/src/main/resources/mapper/dapp/DappMemberDao.xml
+++ b/src/main/resources/mapper/dapp/DappMemberDao.xml
@@ -135,4 +135,15 @@
order by id desc
limit 1
</select>
+
+ <select id="selectMemberListNeedProfit" resultType="cc.mrbird.febs.dapp.entity.DappMemberEntity">
+ select
+ *
+ from dapp_member a
+ inner join (
+ select referer_id, count(1) from dapp_member a
+ where active_status = 1
+ group by referer_id having count(1) > 3
+ ) b on a.invite_id=b.referer_id
+ </select>
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/dapp/system-fee-set.html b/src/main/resources/templates/febs/views/dapp/system-fee-set.html
index faa89c1..f9cbece 100644
--- a/src/main/resources/templates/febs/views/dapp/system-fee-set.html
+++ b/src/main/resources/templates/febs/views/dapp/system-fee-set.html
@@ -33,6 +33,13 @@
<!-- 【填写整数】每日订单金额的百分之几,增加到积分池:直接输入百分比,例如25%,直接输入25-->
<!-- </div>-->
</div>
+ <div class="layui-form-item">
+ <label class="layui-form-label ">DMD价格:</label>
+ <div class="layui-input-block">
+ <input type="text" name="symbolPrice" data-th-id="${systemFee.symbolPrice}"
+ autocomplete="off" class="layui-input" >
+ </div>
+ </div>
</div>
<div class="layui-card-footer">
@@ -74,7 +81,8 @@
form.val("system-fee-set-form", {
"rebatePercent": systemFee.rebatePercent,
"memberFee": systemFee.memberFee,
- "serviceFee": systemFee.serviceFee
+ "serviceFee": systemFee.serviceFee,
+ "symbolPrice": systemFee.symbolPrice
});
}
diff --git a/src/test/java/cc/mrbird/febs/ChainTest.java b/src/test/java/cc/mrbird/febs/ChainTest.java
index 37af5f0..6830fd3 100644
--- a/src/test/java/cc/mrbird/febs/ChainTest.java
+++ b/src/test/java/cc/mrbird/febs/ChainTest.java
@@ -12,6 +12,7 @@
//import cc.mrbird.febs.job.SystemTradeJob;
import cc.mrbird.febs.dapp.service.impl.BscCoinContractEvent;
import cc.mrbird.febs.dapp.service.impl.BscUsdtContractEvent;
+import cc.mrbird.febs.job.ProfitDailyJob;
import cc.mrbird.febs.rabbit.producer.ChainProducer;
import com.alibaba.fastjson.JSONObject;
import org.junit.jupiter.api.Test;
@@ -51,4 +52,12 @@
public void wssChainListener(){
ChainService.wssContractEventListener(new BigInteger("22819014"), bscUsdtContractEvent, ChainEnum.BSC_USDT.name());
}
+
+ @Autowired
+ private ProfitDailyJob profitDailyJob;
+
+ @Test
+ public void profitTest() {
+ profitDailyJob.profitDailyJob();
+ }
}
--
Gitblit v1.9.1