From aa8ea668737a3761ba91167eab8e7a28f1e4afae Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Sat, 10 Sep 2022 20:16:07 +0800 Subject: [PATCH] fix --- src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java | 71 ++++++++++++++++++++++++++++++++--- 1 files changed, 65 insertions(+), 6 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..d5c7446 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,6 +3,9 @@ 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.mapper.*; @@ -11,6 +14,7 @@ import cc.mrbird.febs.rabbit.producer.ChainProducer; import cc.mrbird.febs.tree.MatrixTree; import cc.mrbird.febs.tree.MemberNode; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import lombok.RequiredArgsConstructor; @@ -19,6 +23,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; /** @@ -73,7 +78,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); // 创建该节点的矩阵 @@ -155,7 +166,7 @@ if (parent != null) { BigDecimal directProfit = new BigDecimal("100").multiply(new BigDecimal("0.15")); - dappWalletService.updateWalletCoinWithLock(directProfit, parent.getId()); + dappWalletService.updateWalletCoinWithLock(directProfit, parent.getId(), 1); DappFundFlowEntity fundFlow = new DappFundFlowEntity(parent.getId(), directProfit, 3, 2, null, null); dappFundFlowDao.insert(fundFlow); @@ -163,13 +174,46 @@ // 如果是复投的,则需奖励 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()); + /** + * 复投后,推一个拿一轮,推两个拿两轮,推三个后终身有效。 + * 按规则每轮未能提取的奖金分配: + * 50%直接进入TFC底池 + * 20%给到推荐人 + * 30%留下待提。 + */ + if (directCnt.size() < 3 && member.getOutCnt() != 0 && member.getOutCnt() - 1 == directCnt.size()) { + BigDecimal amount = new BigDecimal("190"); - DappFundFlowEntity matrixProfitFlow = new DappFundFlowEntity(memberId, new BigDecimal("190"), 2, 2, null, null); - dappFundFlowDao.insert(matrixProfitFlow); + BigDecimal sourcePool = amount.multiply(new BigDecimal("0.5")); + BigDecimal directAmount = amount.multiply(new BigDecimal("0.2")); + + BigDecimal remain = amount.subtract(sourcePool).subtract(directAmount); + + new Thread(() -> { + ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer("0xb06cc3dAF362a1670F12eBD0242022b538Ca72ef", sourcePool); + }).start(); + + if (parent != null) { + dappWalletService.updateWalletCoinWithLock(directAmount, parent.getId(), 1); + + DappFundFlowEntity direct = new DappFundFlowEntity(parent.getId(), directAmount, 3, 2, null, null); + dappFundFlowDao.insert(direct); + } + + dappWalletService.addFrozenAmountWithLock(remain, memberId); + } else { + dappWalletService.releaseFrozenAmountWithLock(memberId); + + member.setOutCnt(member.getOutCnt() + 1); + dappMemberDao.updateById(member); + + dappWalletService.updateWalletCoinWithLock(new BigDecimal(190), member.getId(), 1); + + DappFundFlowEntity matrixProfitFlow = new DappFundFlowEntity(memberId, new BigDecimal("190"), 2, 2, null, null); + dappFundFlowDao.insert(matrixProfitFlow); + } DappFundFlowEntity rePutInFlow = new DappFundFlowEntity(memberId, new BigDecimal("100").negate(), 1, 2, null, null); dappFundFlowDao.insert(rePutInFlow); @@ -199,6 +243,21 @@ 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(); -- Gitblit v1.9.1