| | |
| | | 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; |
| | |
| | | private final DataDictionaryCustomMapper dataDictionaryCustomMapper; |
| | | |
| | | private final DbMemberNodeMapper dbMemberNodeMapper; |
| | | private final ChainProducer chainProducer; |
| | | |
| | | |
| | | @Override |
| | |
| | | dbMemberNode.setWorkState(1); |
| | | dbMemberNodeMapper.insert(dbMemberNode); |
| | | |
| | | /** |
| | | * 判断你的上级是否满足复投条件 |
| | | */ |
| | | DappMemberEntity dappMemberEntityDirect = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId()); |
| | | if(ObjectUtil.isNotEmpty(dappMemberEntityDirect)){ |
| | | Long id = dappMemberEntityDirect.getId(); |
| | | chainProducer.sendNodeMsgLong(id); |
| | | } |
| | | |
| | | //如果添加的为右节点,那么进入判断 |
| | | if(DbMemberNode.STATE_TWO == dbMemberNode.getLeftRight()){ |
| | | //更新父节点的右节点 |
| | |
| | | return; |
| | | } |
| | | //有,则上级节点出局复投,轮数加1,复投逻辑 |
| | | memberNodeNext(dbMemberNodeRoot); |
| | | this.memberNodeNext(dbMemberNodeRoot); |
| | | }else{//父节点为左节点,那么没人出局 |
| | | return; |
| | | } |
| | |
| | | * 有,则上级节点出局复投,轮数加1,复投逻辑 |
| | | * @param dbMemberNodeRoot |
| | | */ |
| | | @Override |
| | | public void memberNodeNext(DbMemberNode dbMemberNodeRoot) { |
| | | log.info("进入复投"); |
| | | |
| | |
| | | perkSevenTeen(memberId,add,countFund); |
| | | |
| | | return; |
| | | }else if(10 < countFund){ |
| | | return; |
| | | }else{ |
| | | //复投 |
| | | Integer type = dbMemberNodeRoot.getType(); |
| | | //如果是13星局,则直接复投产生收益 |
| | | if(NodeType.NODE_13.getNodeType() == type){ |
| | | //复投 |
| | | futouSixTeen(memberId,dbMemberNodeRoot.getAmount(),type,countFund+1); |
| | | //产生收益 |
| | | perkSevenTeen(memberId,perkAmount,countFund); |
| | | Integer countFundNext = countFund + 1; |
| | | QueryWrapper<DbMemberNode> nodeQueryWrapper = new QueryWrapper<>(); |
| | | nodeQueryWrapper.eq("member_id",memberId); |
| | | nodeQueryWrapper.eq("type", type); |
| | | nodeQueryWrapper.eq("count_fund", countFundNext); |
| | | DbMemberNode dbMemberNode = dbMemberNodeMapper.selectOne(nodeQueryWrapper); |
| | | if(ObjectUtil.isNotEmpty(dbMemberNode)){ |
| | | return; |
| | | } |
| | | //如果是1到12星团 |
| | | if(type >=NodeType.NODE_1.getNodeType() && type <= NodeType.NODE_12.getNodeType()){ |
| | | //需要复投本轮, |
| | | //如果是第一轮,当下一个星团没有投入时,收益复投下一个新团 |
| | | //如果是第一轮,下一个新团有投入,则产生收益 |
| | | //复投或者收益的金额 |
| | | if(1 == countFund){//第一轮 |
| | | //复投本轮,轮数 +1 |
| | | futouSixTeen(memberId,dbMemberNodeRoot.getAmount(),type,countFund+1); |
| | | //收益复投(当前的下一个星团没有已投入),还是收益提出 |
| | | Integer nextType = type + 1; |
| | | QueryWrapper<DbMemberNode> nodeQueryWrapper = new QueryWrapper<>(); |
| | | nodeQueryWrapper.eq("member_id",memberId); |
| | | nodeQueryWrapper.eq("type", nextType); |
| | | nodeQueryWrapper.eq("work_state", DbMemberNode.STATE_ONE); |
| | | DbMemberNode dbMemberNode = dbMemberNodeMapper.selectOne(nodeQueryWrapper); |
| | | if(ObjectUtil.isEmpty(dbMemberNode)){ |
| | | futouSixTeen(memberId,perkAmount,nextType,1); |
| | | }else{ |
| | | perkSevenTeen(memberId,perkAmount,countFund); |
| | | } |
| | | }else{//2-9轮 |
| | | //复投本轮,轮数 +1 |
| | | futouSixTeen(memberId,dbMemberNodeRoot.getAmount(),type,countFund+1); |
| | | perkSevenTeen(memberId,perkAmount,countFund); |
| | | } |
| | | } |
| | | futouSixTeen(memberId,dbMemberNodeRoot.getAmount(),type,countFundNext); |
| | | //产生收益 |
| | | perkSevenTeen(memberId,perkAmount,countFund); |
| | | return; |
| | | // Integer type = dbMemberNodeRoot.getType(); |
| | | // //如果是13星局,则直接复投产生收益 |
| | | // if(NodeType.NODE_13.getNodeType() == type){ |
| | | // //复投 |
| | | // futouSixTeen(memberId,dbMemberNodeRoot.getAmount(),type,countFund+1); |
| | | // //产生收益 |
| | | // perkSevenTeen(memberId,perkAmount,countFund); |
| | | // return; |
| | | // } |
| | | // //如果是1到12星团 |
| | | // if(type >=NodeType.NODE_1.getNodeType() && type <= NodeType.NODE_12.getNodeType()){ |
| | | // //需要复投本轮, |
| | | // //如果是第一轮,当下一个星团没有投入时,收益复投下一个新团 |
| | | // //如果是第一轮,下一个新团有投入,则产生收益 |
| | | // //复投或者收益的金额 |
| | | // if(1 == countFund){//第一轮 |
| | | // //收益复投(当前的下一个星团没有已投入),还是收益提出 |
| | | // Integer nextType = type + 1; |
| | | // QueryWrapper<DbMemberNode> nodeQueryWrapper = new QueryWrapper<>(); |
| | | // nodeQueryWrapper.eq("member_id",memberId); |
| | | // nodeQueryWrapper.eq("type", nextType); |
| | | // nodeQueryWrapper.eq("work_state", DbMemberNode.STATE_ONE); |
| | | // DbMemberNode dbMemberNode = dbMemberNodeMapper.selectOne(nodeQueryWrapper); |
| | | // if(ObjectUtil.isEmpty(dbMemberNode)){ |
| | | // futouSixTeen(memberId,perkAmount,nextType,1); |
| | | // }else{ |
| | | // perkSevenTeen(memberId,perkAmount,countFund); |
| | | // } |
| | | // //复投本轮,轮数 +1 |
| | | // futouSixTeen(memberId,dbMemberNodeRoot.getAmount(),type,countFund+1); |
| | | // }else{//2-9轮 |
| | | // //复投本轮,轮数 +1 |
| | | // futouSixTeen(memberId,dbMemberNodeRoot.getAmount(),type,countFund+1); |
| | | // perkSevenTeen(memberId,perkAmount,countFund); |
| | | // } |
| | | // } |
| | | } |
| | | } |
| | | /** |
| | |
| | | dbMemberNode.setWorkState(1); |
| | | dbMemberNodeMapper.insert(dbMemberNode); |
| | | |
| | | boolean flag = false;//下一级的再次复投 |
| | | if(ObjectUtil.isNotEmpty(dbMemberNodeOld)){ |
| | | if(dbMemberNode.getLeftRight() == 1){ |
| | | dbMemberNodeOld.setLeftNode(dbMemberNode.getId()); |
| | | }else{ |
| | | dbMemberNodeOld.setRightNode(dbMemberNode.getId()); |
| | | flag = true; |
| | | } |
| | | dbMemberNodeMapper.updateById(dbMemberNodeOld); |
| | | } |
| | | if(flag){ |
| | | if(ObjectUtil.isEmpty(dbMemberNodeOld.getParentNode())){ |
| | | return; |
| | | } |
| | | Long parentNode = dbMemberNodeOld.getParentNode(); |
| | | DbMemberNode dbMemberNodeRoot = dbMemberNodeMapper.selectById(parentNode); |
| | | if(ObjectUtil.isEmpty(dbMemberNodeRoot)){ |
| | | return; |
| | | } |
| | | if(dbMemberNodeRoot.getLeftRight() == 1){ |
| | | return; |
| | | } |
| | | //每个星团,只复投10轮 |
| | | if(10 < dbMemberNodeRoot.getCountFund()){ |
| | | return; |
| | | } |
| | | |
| | | this.memberNodeNext(dbMemberNodeRoot); |
| | | } |
| | | } |
| | | |
| | |
| | | DataDictionaryEnum.PERK_NUM.getType(), |
| | | DataDictionaryEnum.PERK_NUM.getCode() |
| | | ); |
| | | BigDecimal perKNum = new BigDecimal(ObjectUtil.isEmpty(perKNumDic) ? "1000" : perKNumDic.getValue()); |
| | | BigDecimal perKNum = new BigDecimal(ObjectUtil.isEmpty(perKNumDic) ? "200" : perKNumDic.getValue()); |
| | | |
| | | BigDecimal perkAmount = amount.multiply(perkPercent).divide(perKNum, 8, BigDecimal.ROUND_DOWN); |
| | | if(BigDecimal.ZERO.compareTo(perkAmount) >= 0){ |