From 5fd13393f000ff3b643823b4ba4374b2e31e2d3a Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Wed, 30 Nov 2022 11:43:42 +0800
Subject: [PATCH] 20221124
---
src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java | 110 +++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 94 insertions(+), 16 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 bb18c7b..39d23d7 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
@@ -3,22 +3,30 @@
import cc.mrbird.febs.common.contants.AppContants;
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cc.mrbird.febs.common.utils.RedisUtils;
+import cc.mrbird.febs.common.utils.SpringContextUtil;
+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.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;
import cc.mrbird.febs.rabbit.producer.ChainProducer;
import cc.mrbird.febs.tree.MatrixTree;
import cc.mrbird.febs.tree.MemberNode;
+import cc.mrbird.febs.tree.TreeConstants;
+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;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.util.*;
/**
@@ -38,6 +46,7 @@
private final DappAchieveTreeDao dappAchieveTreeDao;
private final DappAchieveMemberTreeDao dappAchieveMemberTreeDao;
private final DappWalletService dappWalletService;
+ private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
@Override
@@ -73,7 +82,13 @@
// 在内存树(大树)中插入当前节点,并返回父节点
MemberNode node = new MemberNode(member.getId(), member.getAddress(), member.getInviteId(), member.getRefererId());
+
MatrixTree tree = MatrixTree.getInstance();
+ MemberNode exist = tree.getNode(member.getId());
+ if (exist != null) {
+ return;
+ }
+
MemberNode parentNode = tree.addNode(node);
// 创建该节点的矩阵
@@ -154,8 +169,8 @@
DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId());
if (parent != null) {
- BigDecimal directProfit = new BigDecimal("100").multiply(new BigDecimal("0.15"));
- dappWalletService.updateWalletCoinWithLock(directProfit, parent.getId());
+ BigDecimal directProfit = TreeConstants.PUT_IN_AMOUNT.multiply(new BigDecimal("0.1"));
+ dappWalletService.updateWalletCoinWithLock(directProfit, parent.getId(), 1);
DappFundFlowEntity fundFlow = new DappFundFlowEntity(parent.getId(), directProfit, 3, 2, null, null);
dappFundFlowDao.insert(fundFlow);
@@ -163,29 +178,42 @@
// 如果是复投的,则需奖励
if (isReIn == 1) {
- member.setOutCnt(member.getOutCnt() + 1);
- dappMemberDao.updateById(member);
+ List<DappMemberEntity> directCnt = dappMemberDao.selectChildMemberDirectOrNot(member.getInviteId(), 1, 1);
- dappWalletService.updateWalletCoinWithLock(new BigDecimal(190), member.getId());
+ /**
+ * 复投后,推一个拿一轮,推两个拿两轮,推三个后终身有效。
+ * 200u单。
+ * 无直推则收益200U
+ * 一人加一轮400u,二人二轮
+ * 三人永久。
+ */
+ if (directCnt.size() < 3 && member.getOutCnt() != 0 && member.getOutCnt() - 1 == directCnt.size()) {
+ return;
+ } else {
+ BigDecimal amount = null;
+ if (directCnt.size() < 1) {
+ amount = TreeConstants.PUT_IN_AMOUNT;
+ } else {
+ amount = TreeConstants.FULL_PROFIT_AMOUNT;
+ }
- DappFundFlowEntity matrixProfitFlow = new DappFundFlowEntity(memberId, new BigDecimal("190"), 2, 2, null, null);
- dappFundFlowDao.insert(matrixProfitFlow);
+ member.setOutCnt(member.getOutCnt() + 1);
+ dappMemberDao.updateById(member);
- DappFundFlowEntity rePutInFlow = new DappFundFlowEntity(memberId, new BigDecimal("100").negate(), 1, 2, null, null);
+ dappWalletService.updateWalletCoinWithLock(amount, member.getId(), 1);
+
+ DappFundFlowEntity matrixProfitFlow = new DappFundFlowEntity(memberId, amount, 2, 2, null, null);
+ dappFundFlowDao.insert(matrixProfitFlow);
+ }
+
+ DappFundFlowEntity rePutInFlow = new DappFundFlowEntity(memberId, TreeConstants.PUT_IN_AMOUNT.negate(), 1, 2, null, null);
dappFundFlowDao.insert(rePutInFlow);
-
- DappFundFlowEntity safePoolFlow = new DappFundFlowEntity(memberId, new BigDecimal("10").negate(), 4, 2, null, null);
- dappFundFlowDao.insert(safePoolFlow);
-
- DappMineDataEntity mineData = dappSystemDao.selectMineDataForOne();
- mineData.setSafePool(mineData.getSafePool().add(BigDecimal.TEN));
- dappSystemDao.updateMineData(mineData);
}
}
@Override
public void tfcNewPrice(String data) {
- redisUtils.set(AppContants.REDIS_KEY_TFC_NEW_PRICE, new BigDecimal(data));
+// redisUtils.set(AppContants.REDIS_KEY_TFC_NEW_PRICE, new BigDecimal(data));
}
@Override
@@ -199,9 +227,59 @@
if (days < 7) {
return;
}
+ DappMineDataEntity mineDataEntity = dappSystemDao.selectMineDataForOne();
+
+ List<DappAchieveTreeEntity> list = dappAchieveTreeDao.selectLastCountTreeNode(500);
+ if (CollUtil.isNotEmpty(list)) {
+ BigDecimal preAmount = mineDataEntity.getSafePool().divide(new BigDecimal(list.size()), 2, RoundingMode.HALF_UP);
+
+ list.forEach(item -> {
+ dappWalletService.updateWalletCoinWithLock(preAmount, item.getMidNode(), 1);
+ DappFundFlowEntity flow = new DappFundFlowEntity(item.getMidNode(), preAmount, 8, 2, null, null);
+ dappFundFlowDao.insert(flow);
+ });
+ }
+
+ mineDataEntity.setSafePool(BigDecimal.ZERO);
+ dappSystemDao.updateMineData(mineDataEntity);
dappAchieveTreeDao.updateNodeValidState();
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), 8, 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);
+ });
+ }
}
--
Gitblit v1.9.1