From 03f330eaed9ae6666e6fbe72b12d0ce279bf56e6 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Wed, 30 Nov 2022 10:10:34 +0800
Subject: [PATCH] 20221124
---
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java | 71 +++++++++++++++++++++++++++++++++++
1 files changed, 70 insertions(+), 1 deletions(-)
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 2509a14..4b8702d 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
@@ -7,6 +7,7 @@
import cc.mrbird.febs.dapp.chain.ChainEnum;
import cc.mrbird.febs.dapp.chain.ChainService;
import cc.mrbird.febs.dapp.dto.SystemDto;
+import cc.mrbird.febs.dapp.dto.TransferDto;
import cc.mrbird.febs.dapp.entity.*;
import cc.mrbird.febs.dapp.enumerate.DataDictionaryEnum;
import cc.mrbird.febs.dapp.enumerate.LevelProfitEnum;
@@ -330,7 +331,12 @@
}
//获取对应层级奖励
BigDecimal profit = LevelProfitEnum.YI.getProfit(i);
- BigDecimal memberLevelProfit = levelProfitTotal.multiply(profit);
+ String accountType = refererMember.getAccountType();
+ //根据会员的等级类型,获取对应的百分比收益
+ DataDictionaryCustom memberLevelSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode("MEMBER_LEVEL", accountType);
+ BigDecimal memberLevel = new BigDecimal(memberLevelSet.getValue());
+
+ BigDecimal memberLevelProfit = levelProfitTotal.multiply(profit).multiply(memberLevel);
DappFundFlowEntity fundFlow = new DappFundFlowEntity(refererMember.getId(), memberLevelProfit, 4, 2, BigDecimal.ZERO,null,dappSystemProfit.getId());
dappFundFlowDao.insert(fundFlow);
@@ -347,9 +353,72 @@
@Override
public void memberOut(Long id) {
+ //验证是否已经加入动能队列
+ DappSystemProfit systemProfit = dappSystemProfitDao.selectById(id);
+ if(ObjectUtil.isEmpty(systemProfit)){
+ return;
+ }
//获取当前是第几轮队列
+ String redisKey = "QUEUE_COUNT";
+ String memberOutCount = redisUtils.getString(redisKey);
+ DataDictionaryCustom queueCountSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.QUEUE_COUNT.getType(), DataDictionaryEnum.QUEUE_COUNT.getCode());
+ String queueCount = queueCountSet.getValue();
+ if(StrUtil.isBlank(memberOutCount)){
+ redisUtils.set(redisKey,queueCount,0L);
+ memberOutCount = queueCount;
+ }
+ //出局条件的人数
+ /**
+ * 初始大小 5+4*0
+ * 1 1,2,3,4,5 1出局 5+4*0
+ * 2 2,3,4,5,1(复投),7,8,9,10 2出局 5+4*1
+ * 3 3,4,5,1(复投),7,8,9,10,2(复投),12,13,14,15 3出局 5+4*2
+ * 4 4,5,1(复投),7,8,9,10,2(复投),12,13,14,15,3(复投),17,18,19,20 4出局 5+4*3
+ */
+ Integer memberCount = Integer.parseInt(memberOutCount) * 4 + 5;
//判断当前是否符合出局条件
+ QueryWrapper<DappSystemProfit> objectQueryWrapper = new QueryWrapper<>();
+ objectQueryWrapper.eq("state",DappSystemProfit.STATE_IN);
+ //实际投资人数
+ Integer selectCount = dappSystemProfitDao.selectCount(objectQueryWrapper);
+ //实际投资人数小于出局条件人数
+ if(selectCount < memberCount){
+ return;
+ }
+ //符合则出局 实际投资人数等于出局条件人数
+ DappSystemProfit dappSystemProfit = dappSystemProfitDao.selectSystemProfitByState(DappSystemProfit.STATE_IN);
+ if(ObjectUtil.isEmpty(dappSystemProfit)){
+ return;
+ }
//符合则出局,轮数+1
+ Integer realCount = (Integer.parseInt(queueCount) + 1);
+ queueCountSet.setValue(realCount.toString());
+ dataDictionaryCustomMapper.updateById(queueCountSet);
+ redisUtils.set(redisKey,realCount,0L);
+
+ DappSystemProfit dappSystemProfitNow = dappSystemProfitDao.selectByIdForUpdate(dappSystemProfit.getId(),DappSystemProfit.STATE_IN);
+ dappSystemProfitNow.setState(DappSystemProfit.STATE_OUT);
+ dappSystemProfitDao.updateById(dappSystemProfitNow);
+
+ //todo 直接拿走0.95ge
+ DappFundFlowEntity fundFlowOut = new DappFundFlowEntity(dappSystemProfitNow.getMemberId(), new BigDecimal(0.95), 7, 2, BigDecimal.ZERO, null,dappSystemProfitNow.getId());
+ dappFundFlowDao.insert(fundFlowOut);
+ //复投 成功{type: 1, txHash: result.transactionHash, id: res.data, flag: 'success', buyType: 2}
+ DataDictionaryCustom investAmountSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.INVEST_AMOUNT.getType(), DataDictionaryEnum.INVEST_AMOUNT.getCode());
+ BigDecimal investAmount = new BigDecimal(investAmountSet.getValue());
+ //todo 直接运行转账
+ String txHash = "复投";
+ DappFundFlowEntity fundFlow = new DappFundFlowEntity(dappSystemProfitNow.getMemberId(), investAmount, 6, 2, BigDecimal.ZERO, txHash);
+ dappFundFlowDao.insert(fundFlow);
+
+ TransferDto transferDto = new TransferDto();
+ transferDto.setType(1);
+ transferDto.setTxHash(txHash);
+ transferDto.setBuyType(2);
+ transferDto.setId(fundFlow.getId());
+ transferDto.setFlag("success");
+ transferDto.setMemberId(dappSystemProfitNow.getMemberId());
+ dappWalletService.transferAgain(transferDto);
}
public static void main(String[] args) {
--
Gitblit v1.9.1