From 2e690bad9f008ba49779599fda1b47cf058a3d2d Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Sun, 04 Sep 2022 18:19:03 +0800 Subject: [PATCH] fix --- src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java | 126 +++++++++++++++++++++++++++++------------ 1 files changed, 88 insertions(+), 38 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 1d60942..bc83493 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,45 +3,27 @@ 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.chain.ContractChainService; import cc.mrbird.febs.dapp.dto.SystemDto; import cc.mrbird.febs.dapp.entity.*; -import cc.mrbird.febs.dapp.enumerate.CardPeriod; import cc.mrbird.febs.dapp.mapper.*; import cc.mrbird.febs.dapp.service.DappSystemService; import cc.mrbird.febs.dapp.service.DappWalletService; -import cc.mrbird.febs.dapp.utils.OnlineTransferUtil; -import cc.mrbird.febs.dapp.vo.RedisTransferPoolVo; -import cc.mrbird.febs.dapp.vo.SlipSettingVo; -import cc.mrbird.febs.job.SystemTradeJob; 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.DateTime; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.RandomUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; -import org.jsoup.select.Elements; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.io.IOException; import java.math.BigDecimal; -import java.math.BigInteger; import java.math.RoundingMode; -import java.net.MalformedURLException; -import java.net.URL; import java.util.*; /** @@ -54,16 +36,9 @@ public class DappSystemServiceImpl implements DappSystemService { private final DappSystemDao dappSystemDao; - private final DappReturnRatioDao dappReturnRatioDao; private final RedisUtils redisUtils; private final DappFundFlowDao dappFundFlowDao; private final DappMemberDao dappMemberDao; - private final DataDictionaryCustomMapper dataDictionaryCustomMapper; - private final DappOnlineTransferDao dappOnlineTransferDao; - private final ChainProducer chainProducer; - private final DappSymbolDailyPriceMapper dappSymbolDailyPriceMapper; - private final DappMemberBoxRecordMapper dappMemberBoxRecordMapper; - private final DappWalletCoinDao dappWalletCoinDao; private final DappAchieveTreeDao dappAchieveTreeDao; private final DappAchieveMemberTreeDao dappAchieveMemberTreeDao; @@ -79,25 +54,37 @@ return system; } - // 最低容量(百分比) - private final BigDecimal volProp = new BigDecimal("2"); - // 每日增/减百分比 - private final BigDecimal changeProp = new BigDecimal("1"); - @Override @Transactional(rollbackFor = Exception.class) public synchronized void achieveTree(Long memberId) { DappMemberEntity member = dappMemberDao.selectById(memberId); + int batchNo = 0; + DappAchieveTreeEntity newestTreeNode = dappAchieveTreeDao.selectNewestTreeNode(); + if (newestTreeNode != null) { + if (newestTreeNode.getValidState() == 2) { + batchNo = newestTreeNode.getBatchNo() + 1; + } else { + batchNo = newestTreeNode.getBatchNo(); + } + } + // 在大树中,插入当前节点 DappAchieveTreeEntity achieveTree = new DappAchieveTreeEntity(); achieveTree.setMidNode(memberId); achieveTree.setValidState(1); + achieveTree.setBatchNo(batchNo); dappAchieveTreeDao.insert(achieveTree); // 在内存树(大树)中插入当前节点,并返回父节点 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); // 创建该节点的矩阵 @@ -177,12 +164,9 @@ DappMemberEntity member = dappMemberDao.selectById(memberId); DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId()); - member.setOutCnt(member.getOutCnt() + 1); - dappMemberDao.updateById(member); - 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); @@ -190,10 +174,44 @@ // 如果是复投的,则需奖励 if (isReIn == 1) { - dappWalletService.updateWalletCoinWithLock(new BigDecimal(190), member.getId()); + List<DappMemberEntity> directCnt = dappMemberDao.selectChildMemberDirectOrNot(member.getInviteId(), 1, 1); - DappFundFlowEntity matrixProfitFlow = new DappFundFlowEntity(memberId, new BigDecimal("190"), 2, 2, null, null); - dappFundFlowDao.insert(matrixProfitFlow); + /** + * 复投后,推一个拿一轮,推两个拿两轮,推三个后终身有效。 + * 按规则每轮未能提取的奖金分配: + * 50%直接进入TFC底池 + * 20%给到推荐人 + * 30%留下待提。 + */ + if (directCnt.size() < 3 && member.getOutCnt() != 0 && member.getOutCnt() - 1 == directCnt.size()) { + BigDecimal amount = new BigDecimal("190"); + + BigDecimal sourcePool = amount.multiply(new BigDecimal("0.5")); + BigDecimal directAmount = amount.multiply(new BigDecimal("0.2")); + + BigDecimal remain = amount.subtract(sourcePool).subtract(directAmount); + +// ChainService.getInstance(ChainEnum.BSC_USDT.name()).transfer("", sourcePool); + + 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); @@ -211,4 +229,36 @@ public void tfcNewPrice(String data) { redisUtils.set(AppContants.REDIS_KEY_TFC_NEW_PRICE, new BigDecimal(data)); } + + @Override + public void resetMatrix() { + DappAchieveTreeEntity node = dappAchieveTreeDao.selectNewestTreeNode(); + if (node.getValidState() == 2) { + return; + } + + long days = DateUtil.between(node.getCreateTime(), new Date(), DateUnit.DAY); + 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(); + } } -- Gitblit v1.9.1