From 293533a11236c2027241827ddff246db3e37f4c8 Mon Sep 17 00:00:00 2001 From: wzy <wzy19931122ai@163.com> Date: Fri, 26 Aug 2022 00:06:55 +0800 Subject: [PATCH] finish ahieveTree consumer --- src/main/java/cc/mrbird/febs/dapp/service/impl/DappSystemServiceImpl.java | 97 +++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 95 insertions(+), 2 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 10938b4..033e34e 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.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.utils.OnlineTransferUtil; @@ -15,6 +16,8 @@ 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; @@ -61,6 +64,9 @@ private final DappMemberBoxRecordMapper dappMemberBoxRecordMapper; private final DappWalletCoinDao dappWalletCoinDao; + private final DappAchieveTreeDao dappAchieveTreeDao; + private final DappAchieveMemberTreeDao dappAchieveMemberTreeDao; + @Override public Map<String, Object> findTotalInComeAndList() { @@ -74,6 +80,8 @@ result.put("coinCnt", coinCnt); result.put("sourceTFC", ChainService.getInstance(ChainEnum.BSC_TFC.name()).balanceOf(ChainEnum.BSC_TFC_SOURCE.getAddress())); result.put("sourceUSDT", ChainService.getInstance(ChainEnum.BSC_USDT.name()).balanceOf(ChainEnum.BSC_USDT_SOURCE.getAddress())); + result.put("cardCnt", 1000); + result.put("nftPrice", AppContants.NFT_ACTIVE_PRICE); return result; } @@ -114,6 +122,15 @@ } system.setBuyRemain(balance); system.setBuyTotal(balance); + + + Object maxDailyBuy = redisUtils.get(AppContants.REDIS_KEY_IDO_USDT_MAX_BUY_DAILY + member.getAddress()); + if (maxDailyBuy == null) { + DateTime tomorrow = DateUtil.beginOfDay(DateUtil.tomorrow()); + long time = DateUtil.between(new Date(), tomorrow, DateUnit.SECOND, true); + + redisUtils.set(AppContants.REDIS_KEY_IDO_USDT_MAX_BUY_DAILY + member.getAddress(), new BigDecimal("1000"), time); + } return system; } @@ -643,7 +660,7 @@ return; } - DataDictionaryCustom boxRecommendCnt = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.DIC_TYPE_SYSTEM_SETTING, AppContants.DIC_VALUE_BOX_RECOMMEND_CNT); + BigInteger totalSupply = ChainService.getInstance(ChainEnum.BSC_NFT_SDC.name()).totalSupplyNFT(); int box = 0; // 需要第一次购买,才在推荐中加1 Object parentRecommend = redisUtils.hget(AppContants.IDO_MEMBER_RECOMMEND_CNT, parent.getAddress()); @@ -653,7 +670,7 @@ int i = (int) parentRecommend; // 如果超过10个,则新增一个盲盒,并重置推荐人数 - if (++i == new Integer(boxRecommendCnt.getValue())) { + if (++i == CardPeriod.ONE.recommendCnt(totalSupply.intValue())) { box = 1; redisUtils.hset(AppContants.IDO_MEMBER_RECOMMEND_CNT, parent.getAddress(), 0); } else { @@ -713,4 +730,80 @@ return true; } + + @Override + @Transactional(rollbackFor = Exception.class) + public synchronized void achieveTree(Long memberId) { + DappMemberEntity member = dappMemberDao.selectById(memberId); + + // 在大树中,插入当前节点 + DappAchieveTreeEntity achieveTree = new DappAchieveTreeEntity(); + achieveTree.setMidNode(memberId); + achieveTree.setValidState(1); + dappAchieveTreeDao.insert(achieveTree); + + // 在内存树(大树)中插入当前节点,并返回父节点 + MemberNode node = new MemberNode(member.getId(), member.getAddress(), member.getInviteId(), member.getRefererId()); + MatrixTree tree = MatrixTree.getInstance(); + MemberNode parentNode = tree.addNode(node); + + // 创建该节点的矩阵 + DappAchieveMemberTreeEntity achieveMemberTree = new DappAchieveMemberTreeEntity(); + achieveMemberTree.setTreeNode(memberId); + achieveMemberTree.setTopNode(memberId); + achieveMemberTree.setDeep(1); + achieveMemberTree.setHasMoney(1); + achieveMemberTree.setParentNode(parentNode.getMemberId()); + dappAchieveMemberTreeDao.insert(achieveMemberTree); + + // 修改父节点在数据库中的左/右节点数据 + DappAchieveTreeEntity treeMidNode = dappAchieveTreeDao.selectByMidNode(parentNode.getMemberId()); + boolean isLeft = false; + if (parentNode.getLeft() != null && memberId.equals(parentNode.getLeft().getMemberId())) { + treeMidNode.setLeftNode(memberId); + isLeft = true; + } else { + treeMidNode.setRightNode(memberId); + } + dappAchieveTreeDao.updateById(treeMidNode); + + // 更新矩阵中的数据 + List<DappAchieveMemberTreeEntity> matrixNodes = dappAchieveMemberTreeDao.selectNotBottomNodeInMatrix(parentNode.getMemberId()); + for (DappAchieveMemberTreeEntity matrixNode : matrixNodes) { + if (isLeft) { + matrixNode.setLeftNode(memberId); + } else { + matrixNode.setRightNode(memberId); + } + + dappAchieveMemberTreeDao.updateById(matrixNode); + + DappAchieveMemberTreeEntity newMatrixNode = new DappAchieveMemberTreeEntity(); + newMatrixNode.setTreeNode(memberId); + newMatrixNode.setTopNode(matrixNode.getTopNode()); + newMatrixNode.setParentNode(parentNode.getMemberId()); + newMatrixNode.setHasMoney(1); + newMatrixNode.setDeep(matrixNode.getDeep() + 1); + dappAchieveMemberTreeDao.insert(newMatrixNode); + + if (matrixNode.getDeep() == 2) { + finishMatrixTree(matrixNode.getTopNode()); + } + } + } + + // 完成矩阵树,并重置矩阵且重入 + public void finishMatrixTree(Long memberId) { + List<DappAchieveMemberTreeEntity> matrixTree = dappAchieveMemberTreeDao.selectMatrixTreeByTopNode(memberId); + // 如果达到标准,则重置该矩阵树 + if (matrixTree.size() == 7) { + dappAchieveMemberTreeDao.resetMatrixTree(memberId); + dappAchieveMemberTreeDao.reentryMoney(memberId); + + DappAchieveMemberTreeEntity bottomNode = dappAchieveMemberTreeDao.selectNodeByDeep(memberId, 3); + if (bottomNode != null) { + finishMatrixTree(bottomNode.getTopNode()); + } + } + } } -- Gitblit v1.9.1