| | |
| | | package cc.mrbird.febs.dapp.service.impl; |
| | | |
| | | import cc.mrbird.febs.common.contants.AppContants; |
| | | import cc.mrbird.febs.common.exception.FebsException; |
| | | import cc.mrbird.febs.common.tree.MatrixTree; |
| | | import cc.mrbird.febs.common.tree.MemberNode; |
| | | 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.mapper.*; |
| | | import cc.mrbird.febs.dapp.service.DappSystemService; |
| | | import cc.mrbird.febs.dapp.service.DappWalletService; |
| | | import cc.mrbird.febs.dapp.service.IMatrixTreeNodeService; |
| | | import cc.mrbird.febs.dapp.vo.AKLineLimitVo; |
| | | 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.DateTime; |
| | |
| | | import java.math.BigInteger; |
| | | import java.math.RoundingMode; |
| | | import java.util.*; |
| | | import java.util.concurrent.locks.Lock; |
| | | import java.util.concurrent.locks.ReentrantLock; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | private final DappWalletMineDao dappWalletMineDao; |
| | | private final DappAKlineMapper dappAKlineMapper; |
| | | |
| | | private final MallOrderInfoMapper mallOrderInfoMapper; |
| | | private final MallAchieveRecordMapper mallAchieveRecordMapper; |
| | | private final DappAccountMoneyChangeDao dappAccountMoneyChangeDao; |
| | | |
| | | |
| | | |
| | | @Override |
| | |
| | | } |
| | | |
| | | @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); |
| | | |
| | | // 创建该节点的矩阵 |
| | | DappAchieveMemberTreeEntity achieveMemberTree = new DappAchieveMemberTreeEntity(); |
| | | achieveMemberTree.setTreeNode(memberId); |
| | | achieveMemberTree.setTopNode(memberId); |
| | | achieveMemberTree.setDeep(1); |
| | | achieveMemberTree.setHasMoney(1); |
| | | if (parentNode != null) { |
| | | achieveMemberTree.setParentNode(parentNode.getMemberId()); |
| | | } |
| | | dappAchieveMemberTreeDao.insert(achieveMemberTree); |
| | | |
| | | // 激活用户状态 |
| | | member.setActiveStatus(1); |
| | | dappMemberDao.updateById(member); |
| | | |
| | | putIntoProfit(memberId, 2); |
| | | if (parentNode == null) { |
| | | return; |
| | | } |
| | | |
| | | // 修改父节点在数据库中的左/右节点数据 |
| | | 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, 1); |
| | | // 如果达到标准,则重置该矩阵树 |
| | | if (matrixTree.size() == 7) { |
| | | dappAchieveMemberTreeDao.resetMatrixTree(memberId); |
| | | dappAchieveMemberTreeDao.reentryMoney(memberId); |
| | | |
| | | putIntoProfit(memberId, 1); |
| | | DappAchieveMemberTreeEntity bottomNode = dappAchieveMemberTreeDao.selectNodeByDeep(memberId, 3); |
| | | if (bottomNode != null) { |
| | | finishMatrixTree(bottomNode.getTopNode()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void putIntoProfit(Long memberId, int isReIn) { |
| | | DappMemberEntity member = dappMemberDao.selectById(memberId); |
| | | DappMemberEntity parent = dappMemberDao.selectMemberInfoByInviteId(member.getRefererId()); |
| | |
| | | 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); |
| | | DappFundFlowEntity fundFlow = new DappFundFlowEntity(); |
| | | dappFundFlowDao.insert(fundFlow); |
| | | } |
| | | |
| | |
| | | |
| | | dappWalletService.updateWalletCoinWithLock(amount, member.getId(), 1); |
| | | |
| | | DappFundFlowEntity matrixProfitFlow = new DappFundFlowEntity(memberId, amount, 2, 2, null, null); |
| | | DappFundFlowEntity matrixProfitFlow = new DappFundFlowEntity(); |
| | | dappFundFlowDao.insert(matrixProfitFlow); |
| | | } |
| | | |
| | | DappFundFlowEntity rePutInFlow = new DappFundFlowEntity(memberId, TreeConstants.PUT_IN_AMOUNT.negate(), 1, 2, null, null); |
| | | DappFundFlowEntity rePutInFlow = new DappFundFlowEntity(); |
| | | dappFundFlowDao.insert(rePutInFlow); |
| | | } |
| | | } |
| | |
| | | |
| | | list.forEach(item -> { |
| | | dappWalletService.updateWalletCoinWithLock(preAmount, item.getMidNode(), 1); |
| | | DappFundFlowEntity flow = new DappFundFlowEntity(item.getMidNode(), preAmount, 8, 2, null, null); |
| | | DappFundFlowEntity flow = new DappFundFlowEntity(); |
| | | dappFundFlowDao.insert(flow); |
| | | }); |
| | | } |
| | |
| | | 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); |
| | | }); |
| | | // 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); |
| | | // }); |
| | | } |
| | | |
| | | @Override |
| | | public void levelProfit(Long id) { |
| | | DappSystemProfit dappSystemProfit = dappSystemProfitDao.selectById(id); |
| | | if(ObjectUtil.isEmpty(dappSystemProfit)){ |
| | | return; |
| | | } |
| | | Integer levelProfitState = dappSystemProfit.getLevelProfit(); |
| | | |
| | | if(DappSystemProfit.ENUM_YES == levelProfitState){ |
| | | return; |
| | | } |
| | | Long memberId = dappSystemProfit.getMemberId(); |
| | | //获取用户的上级用户信息 |
| | | DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId); |
| | | if(ObjectUtil.isEmpty(dappMemberEntity)){ |
| | | return; |
| | | } |
| | | String refererIds = dappMemberEntity.getRefererIds(); |
| | | if(StrUtil.isEmpty(refererIds)){ |
| | | return; |
| | | } |
| | | DataDictionaryCustom levelProfitSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.LEVEL_PROFIT.getType(), DataDictionaryEnum.LEVEL_PROFIT.getCode()); |
| | | BigDecimal levelProfit = new BigDecimal(StrUtil.isEmpty(levelProfitSet.getValue()) ? "0.3" : levelProfitSet.getValue()); |
| | | //投入金额减去技术方收益 |
| | | DataDictionaryCustom systemProfitSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SYSTEM_PROFIT.getType(), DataDictionaryEnum.SYSTEM_PROFIT.getCode()); |
| | | BigDecimal systemProfit = new BigDecimal(StrUtil.isEmpty(systemProfitSet.getValue()) ? "0.05" : systemProfitSet.getValue()); |
| | | BigDecimal amount = dappSystemProfit.getAmount().subtract(systemProfit); |
| | | //层级奖励总奖金 |
| | | BigDecimal levelProfitTotal = amount.multiply(levelProfit); |
| | | //实发层级奖励 -- 如果还有剩余给技术方 |
| | | BigDecimal systemProfitTotal = BigDecimal.ZERO; |
| | | //返回十层 |
| | | List<String> refererIdList = StrUtil.split(refererIds, ','); |
| | | //i:计数层数,同时i也为对应层数应推广的人数,当达到对应的直推人数时,才能获取对应层级奖励 |
| | | if(CollUtil.isEmpty(refererIdList)){ |
| | | return; |
| | | } |
| | | //层级奖励最大循环次数 |
| | | int maxLevel = 10; |
| | | if(maxLevel > refererIdList.size()){ |
| | | maxLevel = refererIdList.size(); |
| | | } |
| | | for(int i = 0;i < maxLevel; i++){ |
| | | if(systemProfitTotal.compareTo(levelProfitTotal) < 0){ |
| | | String inviteId = refererIdList.get(i); |
| | | //获取每层用户的直推人数,判断能否获得这个层级的层级奖励 |
| | | DappMemberEntity refererMember = dappMemberDao.selectMemberInfoByInviteId(inviteId); |
| | | //获取直推用户数量 |
| | | QueryWrapper<DappMemberEntity> objectQueryWrapper = new QueryWrapper<>(); |
| | | objectQueryWrapper.eq("referer_id",refererMember.getInviteId()); |
| | | Integer selectCount = dappMemberDao.selectCount(objectQueryWrapper); |
| | | if(i >= selectCount){ |
| | | continue; |
| | | } |
| | | //获取对应层级奖励 |
| | | BigDecimal profit = LevelProfitEnum.YI.getProfit(i+1); |
| | | String accountType = refererMember.getAccountType(); |
| | | //根据会员的等级类型,获取对应的百分比收益 |
| | | DataDictionaryCustom memberLevelSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode("MEMBER_LEVEL", accountType); |
| | | BigDecimal memberLevel = new BigDecimal(memberLevelSet.getValue()); |
| | | |
| | | // BigDecimal memberLevelProfit = levelProfitTotal.multiply(profit).multiply(memberLevel); |
| | | |
| | | BigDecimal memberLevelProfit = profit.multiply(memberLevel); |
| | | |
| | | DappFundFlowEntity fundFlow = new DappFundFlowEntity(refererMember.getId(), memberLevelProfit, 4, 1, BigDecimal.ZERO,null,dappSystemProfit.getId()); |
| | | dappFundFlowDao.insert(fundFlow); |
| | | //发送转币消息 |
| | | chainProducer.sendBnbTransferMsg(fundFlow.getId()); |
| | | systemProfitTotal = systemProfitTotal.add(memberLevelProfit); |
| | | } |
| | | } |
| | | //如果还有剩余给技术方 |
| | | if(levelProfitTotal.compareTo(systemProfitTotal) > 0){ |
| | | BigDecimal avaProfit = levelProfitTotal.subtract(systemProfitTotal); |
| | | DappFundFlowEntity fundFlow = new DappFundFlowEntity(2L, avaProfit, 5, 1, BigDecimal.ZERO,null,dappSystemProfit.getId()); |
| | | dappFundFlowDao.insert(fundFlow); |
| | | //发送转币消息 |
| | | chainProducer.sendBnbTransferMsg(fundFlow.getId()); |
| | | } |
| | | |
| | | dappSystemProfitDao.updateLevelProfitById(DappSystemProfit.ENUM_YES,dappSystemProfit.getId()); |
| | | // DappSystemProfit dappSystemProfit = dappSystemProfitDao.selectById(id); |
| | | // if(ObjectUtil.isEmpty(dappSystemProfit)){ |
| | | // return; |
| | | // } |
| | | // Integer levelProfitState = dappSystemProfit.getLevelProfit(); |
| | | // |
| | | // if(DappSystemProfit.ENUM_YES == levelProfitState){ |
| | | // return; |
| | | // } |
| | | // Long memberId = dappSystemProfit.getMemberId(); |
| | | // //获取用户的上级用户信息 |
| | | // DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId); |
| | | // if(ObjectUtil.isEmpty(dappMemberEntity)){ |
| | | // return; |
| | | // } |
| | | // String refererIds = dappMemberEntity.getRefererIds(); |
| | | // if(StrUtil.isEmpty(refererIds)){ |
| | | // return; |
| | | // } |
| | | // DataDictionaryCustom levelProfitSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.LEVEL_PROFIT.getType(), DataDictionaryEnum.LEVEL_PROFIT.getCode()); |
| | | // BigDecimal levelProfit = new BigDecimal(StrUtil.isEmpty(levelProfitSet.getValue()) ? "0.3" : levelProfitSet.getValue()); |
| | | // //投入金额减去技术方收益 |
| | | // DataDictionaryCustom systemProfitSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.SYSTEM_PROFIT.getType(), DataDictionaryEnum.SYSTEM_PROFIT.getCode()); |
| | | // BigDecimal systemProfit = new BigDecimal(StrUtil.isEmpty(systemProfitSet.getValue()) ? "0.05" : systemProfitSet.getValue()); |
| | | // BigDecimal amount = dappSystemProfit.getAmount().subtract(systemProfit); |
| | | // //层级奖励总奖金 |
| | | // BigDecimal levelProfitTotal = amount.multiply(levelProfit); |
| | | // //实发层级奖励 -- 如果还有剩余给技术方 |
| | | // BigDecimal systemProfitTotal = BigDecimal.ZERO; |
| | | // //返回十层 |
| | | // List<String> refererIdList = StrUtil.split(refererIds, ','); |
| | | // //i:计数层数,同时i也为对应层数应推广的人数,当达到对应的直推人数时,才能获取对应层级奖励 |
| | | // if(CollUtil.isEmpty(refererIdList)){ |
| | | // return; |
| | | // } |
| | | // //层级奖励最大循环次数 |
| | | // int maxLevel = 10; |
| | | // if(maxLevel > refererIdList.size()){ |
| | | // maxLevel = refererIdList.size(); |
| | | // } |
| | | // for(int i = 0;i < maxLevel; i++){ |
| | | // if(systemProfitTotal.compareTo(levelProfitTotal) < 0){ |
| | | // String inviteId = refererIdList.get(i); |
| | | // //获取每层用户的直推人数,判断能否获得这个层级的层级奖励 |
| | | // DappMemberEntity refererMember = dappMemberDao.selectMemberInfoByInviteId(inviteId); |
| | | // //获取直推用户数量 |
| | | // QueryWrapper<DappMemberEntity> objectQueryWrapper = new QueryWrapper<>(); |
| | | // objectQueryWrapper.eq("referer_id",refererMember.getInviteId()); |
| | | // Integer selectCount = dappMemberDao.selectCount(objectQueryWrapper); |
| | | // if(i >= selectCount){ |
| | | // continue; |
| | | // } |
| | | // //获取对应层级奖励 |
| | | // BigDecimal profit = LevelProfitEnum.YI.getProfit(i+1); |
| | | // String accountType = refererMember.getAccountType(); |
| | | // //根据会员的等级类型,获取对应的百分比收益 |
| | | // DataDictionaryCustom memberLevelSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode("MEMBER_LEVEL", accountType); |
| | | // BigDecimal memberLevel = new BigDecimal(memberLevelSet.getValue()); |
| | | // |
| | | //// BigDecimal memberLevelProfit = levelProfitTotal.multiply(profit).multiply(memberLevel); |
| | | // |
| | | // BigDecimal memberLevelProfit = profit.multiply(memberLevel); |
| | | // |
| | | // DappFundFlowEntity fundFlow = new DappFundFlowEntity(refererMember.getId(), memberLevelProfit, 4, 1, BigDecimal.ZERO,null,dappSystemProfit.getId()); |
| | | // dappFundFlowDao.insert(fundFlow); |
| | | // //发送转币消息 |
| | | // chainProducer.sendBnbTransferMsg(fundFlow.getId()); |
| | | // systemProfitTotal = systemProfitTotal.add(memberLevelProfit); |
| | | // } |
| | | // } |
| | | // //如果还有剩余给技术方 |
| | | // if(levelProfitTotal.compareTo(systemProfitTotal) > 0){ |
| | | // BigDecimal avaProfit = levelProfitTotal.subtract(systemProfitTotal); |
| | | // DappFundFlowEntity fundFlow = new DappFundFlowEntity(2L, avaProfit, 5, 1, BigDecimal.ZERO,null,dappSystemProfit.getId()); |
| | | // dappFundFlowDao.insert(fundFlow); |
| | | // //发送转币消息 |
| | | // chainProducer.sendBnbTransferMsg(fundFlow.getId()); |
| | | // } |
| | | // |
| | | // dappSystemProfitDao.updateLevelProfitById(DappSystemProfit.ENUM_YES,dappSystemProfit.getId()); |
| | | } |
| | | |
| | | @Override |
| | | public void memberOut(Long id) { |
| | | //验证是否已经加入动能队列 |
| | | DappSystemProfit systemProfit = dappSystemProfitDao.selectById(id); |
| | | if(ObjectUtil.isEmpty(systemProfit)){ |
| | | return; |
| | | } |
| | | //获取当前是第几轮队列 |
| | | String redisKey = "QUEUE_COUNT"; |
| | | String memberOutCount = redisUtils.getString(redisKey); |
| | | DataDictionaryCustom queueCountSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.QUEUE_COUNT.getType(), DataDictionaryEnum.QUEUE_COUNT.getCode()); |
| | | String queueCount = queueCountSet.getValue(); |
| | | if(StrUtil.isBlank(memberOutCount) || !queueCount.equals(memberOutCount)){ |
| | | redisUtils.set(redisKey,queueCount,0L); |
| | | memberOutCount = queueCount; |
| | | } |
| | | //出局条件的人数 |
| | | /** |
| | | * 初始大小 5+4*0 |
| | | * 1 1,2,3,4,5 1出局 5+4*0 |
| | | * 2 2,3,4,5,1(复投),7,8,9,10 2出局 5+4*1 |
| | | * 3 3,4,5,1(复投),7,8,9,10,2(复投),12,13,14,15 3出局 5+4*2 |
| | | * 4 4,5,1(复投),7,8,9,10,2(复投),12,13,14,15,3(复投),17,18,19,20 4出局 5+4*3 |
| | | */ |
| | | Integer memberCount = Integer.parseInt(memberOutCount) * 4 + 5; |
| | | //判断当前是否符合出局条件 |
| | | QueryWrapper<DappSystemProfit> objectQueryWrapper = new QueryWrapper<>(); |
| | | objectQueryWrapper.eq("state",DappSystemProfit.STATE_IN); |
| | | //实际投资人数 |
| | | Integer selectCount = dappSystemProfitDao.selectCount(objectQueryWrapper); |
| | | //实际投资人数小于出局条件人数 |
| | | if(selectCount < memberCount){ |
| | | return; |
| | | } |
| | | //符合则出局 实际投资人数等于出局条件人数 |
| | | DappSystemProfit dappSystemProfit = dappSystemProfitDao.selectSystemProfitByState(DappSystemProfit.STATE_IN); |
| | | if(ObjectUtil.isEmpty(dappSystemProfit)){ |
| | | return; |
| | | } |
| | | //符合则出局,轮数+1 |
| | | Integer realCount = (Integer.parseInt(queueCount) + 1); |
| | | queueCountSet.setValue(realCount.toString()); |
| | | dataDictionaryCustomMapper.updateById(queueCountSet); |
| | | redisUtils.set(redisKey,realCount,0L); |
| | | |
| | | DappSystemProfit dappSystemProfitNow = dappSystemProfitDao.selectByIdForUpdate(dappSystemProfit.getId(),DappSystemProfit.STATE_IN); |
| | | dappSystemProfitDao.updateStateById(DappSystemProfit.STATE_OUT,dappSystemProfitNow.getId()); |
| | | |
| | | // 直接拿走0.95ge |
| | | |
| | | DataDictionaryCustom investAmountProfitSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.INVEST_AMOUNT_PROFIT.getType(), DataDictionaryEnum.INVEST_AMOUNT_PROFIT.getCode()); |
| | | BigDecimal investAmountProfit = new BigDecimal(investAmountProfitSet.getValue()); |
| | | DappFundFlowEntity fundFlowOut = new DappFundFlowEntity(dappSystemProfitNow.getMemberId(), investAmountProfit, 7, 1, BigDecimal.ZERO, null,dappSystemProfitNow.getId()); |
| | | dappFundFlowDao.insert(fundFlowOut); |
| | | //发送转币消息 |
| | | chainProducer.sendBnbTransferMsg(fundFlowOut.getId()); |
| | | //复投 成功{type: 1, txHash: result.transactionHash, id: res.data, flag: 'success', buyType: 2} |
| | | DataDictionaryCustom investAmountSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.INVEST_AMOUNT.getType(), DataDictionaryEnum.INVEST_AMOUNT.getCode()); |
| | | BigDecimal investAmount = new BigDecimal(investAmountSet.getValue()); |
| | | //todo 直接运行转账 |
| | | String txHash = "复投"; |
| | | DappFundFlowEntity fundFlow = new DappFundFlowEntity(dappSystemProfitNow.getMemberId(), investAmount, 6, 1, BigDecimal.ZERO, txHash); |
| | | dappFundFlowDao.insert(fundFlow); |
| | | |
| | | TransferDto transferDto = new TransferDto(); |
| | | transferDto.setType(1); |
| | | transferDto.setTxHash(txHash); |
| | | transferDto.setBuyType(2); |
| | | transferDto.setId(fundFlow.getId()); |
| | | transferDto.setFlag("success"); |
| | | transferDto.setAmount(investAmount); |
| | | transferDto.setMemberId(dappSystemProfitNow.getMemberId()); |
| | | dappWalletService.transferAgain(transferDto); |
| | | // DappSystemProfit systemProfit = dappSystemProfitDao.selectById(id); |
| | | // if(ObjectUtil.isEmpty(systemProfit)){ |
| | | // return; |
| | | // } |
| | | // //获取当前是第几轮队列 |
| | | // String redisKey = "QUEUE_COUNT"; |
| | | // String memberOutCount = redisUtils.getString(redisKey); |
| | | // DataDictionaryCustom queueCountSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.QUEUE_COUNT.getType(), DataDictionaryEnum.QUEUE_COUNT.getCode()); |
| | | // String queueCount = queueCountSet.getValue(); |
| | | // if(StrUtil.isBlank(memberOutCount) || !queueCount.equals(memberOutCount)){ |
| | | // redisUtils.set(redisKey,queueCount,0L); |
| | | // memberOutCount = queueCount; |
| | | // } |
| | | // //出局条件的人数 |
| | | // /** |
| | | // * 初始大小 5+4*0 |
| | | // * 1 1,2,3,4,5 1出局 5+4*0 |
| | | // * 2 2,3,4,5,1(复投),7,8,9,10 2出局 5+4*1 |
| | | // * 3 3,4,5,1(复投),7,8,9,10,2(复投),12,13,14,15 3出局 5+4*2 |
| | | // * 4 4,5,1(复投),7,8,9,10,2(复投),12,13,14,15,3(复投),17,18,19,20 4出局 5+4*3 |
| | | // */ |
| | | // Integer memberCount = Integer.parseInt(memberOutCount) * 4 + 5; |
| | | // //判断当前是否符合出局条件 |
| | | // QueryWrapper<DappSystemProfit> objectQueryWrapper = new QueryWrapper<>(); |
| | | // objectQueryWrapper.eq("state",DappSystemProfit.STATE_IN); |
| | | // //实际投资人数 |
| | | // Integer selectCount = dappSystemProfitDao.selectCount(objectQueryWrapper); |
| | | // //实际投资人数小于出局条件人数 |
| | | // if(selectCount < memberCount){ |
| | | // return; |
| | | // } |
| | | // //符合则出局 实际投资人数等于出局条件人数 |
| | | // DappSystemProfit dappSystemProfit = dappSystemProfitDao.selectSystemProfitByState(DappSystemProfit.STATE_IN); |
| | | // if(ObjectUtil.isEmpty(dappSystemProfit)){ |
| | | // return; |
| | | // } |
| | | // //符合则出局,轮数+1 |
| | | // Integer realCount = (Integer.parseInt(queueCount) + 1); |
| | | // queueCountSet.setValue(realCount.toString()); |
| | | // dataDictionaryCustomMapper.updateById(queueCountSet); |
| | | // redisUtils.set(redisKey,realCount,0L); |
| | | // |
| | | // DappSystemProfit dappSystemProfitNow = dappSystemProfitDao.selectByIdForUpdate(dappSystemProfit.getId(),DappSystemProfit.STATE_IN); |
| | | // dappSystemProfitDao.updateStateById(DappSystemProfit.STATE_OUT,dappSystemProfitNow.getId()); |
| | | // |
| | | // // 直接拿走0.95ge |
| | | // |
| | | // DataDictionaryCustom investAmountProfitSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.INVEST_AMOUNT_PROFIT.getType(), DataDictionaryEnum.INVEST_AMOUNT_PROFIT.getCode()); |
| | | // BigDecimal investAmountProfit = new BigDecimal(investAmountProfitSet.getValue()); |
| | | // DappFundFlowEntity fundFlowOut = new DappFundFlowEntity(dappSystemProfitNow.getMemberId(), investAmountProfit, 7, 1, BigDecimal.ZERO, null,dappSystemProfitNow.getId()); |
| | | // dappFundFlowDao.insert(fundFlowOut); |
| | | // //发送转币消息 |
| | | // chainProducer.sendBnbTransferMsg(fundFlowOut.getId()); |
| | | // //复投 成功{type: 1, txHash: result.transactionHash, id: res.data, flag: 'success', buyType: 2} |
| | | // DataDictionaryCustom investAmountSet = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.INVEST_AMOUNT.getType(), DataDictionaryEnum.INVEST_AMOUNT.getCode()); |
| | | // BigDecimal investAmount = new BigDecimal(investAmountSet.getValue()); |
| | | // //todo 直接运行转账 |
| | | // String txHash = "复投"; |
| | | // DappFundFlowEntity fundFlow = new DappFundFlowEntity(dappSystemProfitNow.getMemberId(), investAmount, 6, 1, BigDecimal.ZERO, txHash); |
| | | // dappFundFlowDao.insert(fundFlow); |
| | | // |
| | | // TransferDto transferDto = new TransferDto(); |
| | | // transferDto.setType(1); |
| | | // transferDto.setTxHash(txHash); |
| | | // transferDto.setBuyType(2); |
| | | // transferDto.setId(fundFlow.getId()); |
| | | // transferDto.setFlag("success"); |
| | | // transferDto.setAmount(investAmount); |
| | | // transferDto.setMemberId(dappSystemProfitNow.getMemberId()); |
| | | // dappWalletService.transferAgain(transferDto); |
| | | } |
| | | |
| | | @Override |
| | |
| | | @Override |
| | | public void agentUp(Long id) { |
| | | //根据邀请码获取用户信息 |
| | | DappMemberEntity dappMemberEntity = dappMemberDao.selectById(id); |
| | | if(ObjectUtil.isEmpty(dappMemberEntity)){ |
| | | return; |
| | | } |
| | | //所有上级(不包含直属上级) |
| | | String refererIds = dappMemberEntity.getRefererIds(); |
| | | List<String> refererIdList = StrUtil.split(refererIds, ','); |
| | | if(CollUtil.isNotEmpty(refererIdList)){ |
| | | for(String inviteIdStr : refererIdList){ |
| | | DappMemberEntity dappMemberEntityUp = dappMemberDao.selectMemberInfoByInviteId(inviteIdStr); |
| | | if(ObjectUtil.isEmpty(dappMemberEntityUp)){ |
| | | continue; |
| | | } |
| | | String accountType = dappMemberEntityUp.getAccountType(); |
| | | if(DataDictionaryEnum.BIG_BOSS.getCode().equals(accountType)){ |
| | | continue; |
| | | } |
| | | //当前为BOSS,且直推中有两个BOSS以上,则升级BIG_BOSS |
| | | if(DataDictionaryEnum.BOSS.getCode().equals(accountType)){ |
| | | Integer bossCount = dappMemberDao.selectCountByAccountTypeAndRefererId(DataDictionaryEnum.BOSS.getCode(),dappMemberEntityUp.getInviteId()); |
| | | if(2 <= bossCount){ |
| | | dappMemberDao.updateMemberAccountType(DataDictionaryEnum.BIG_BOSS.getCode(),dappMemberEntityUp.getId()); |
| | | } |
| | | continue; |
| | | } |
| | | //当前为AGENT,且直推中有两个以上,则升级BOSS |
| | | if(DataDictionaryEnum.AGENT.getCode().equals(accountType)){ |
| | | Integer bossCount = dappMemberDao.selectCountByAccountTypeAndRefererId(null,dappMemberEntityUp.getInviteId()); |
| | | if(2 <= bossCount){ |
| | | dappMemberDao.updateMemberAccountType(DataDictionaryEnum.BOSS.getCode(),dappMemberEntityUp.getId()); |
| | | } |
| | | continue; |
| | | } |
| | | } |
| | | } |
| | | //直属上级 |
| | | String accountType = dappMemberEntity.getAccountType(); |
| | | if(DataDictionaryEnum.BIG_BOSS.getCode().equals(accountType)){ |
| | | return; |
| | | } |
| | | //当前为BOSS,且直推中有两个BOSS以上,则升级BIG_BOSS |
| | | if(DataDictionaryEnum.BOSS.getCode().equals(accountType)){ |
| | | Integer bossCount = dappMemberDao.selectCountByAccountTypeAndRefererId(DataDictionaryEnum.BOSS.getCode(),dappMemberEntity.getInviteId()); |
| | | if(2 <= bossCount){ |
| | | dappMemberDao.updateMemberAccountType(DataDictionaryEnum.BIG_BOSS.getCode(),dappMemberEntity.getId()); |
| | | } |
| | | return; |
| | | } |
| | | //当前为AGENT,且直推中有两个以上,则升级BOSS |
| | | if(DataDictionaryEnum.AGENT.getCode().equals(accountType)){ |
| | | Integer bossCount = dappMemberDao.selectCountByAccountTypeAndRefererId(null,dappMemberEntity.getInviteId()); |
| | | if(2 <= bossCount){ |
| | | dappMemberDao.updateMemberAccountType(DataDictionaryEnum.BOSS.getCode(),dappMemberEntity.getId()); |
| | | } |
| | | return; |
| | | } |
| | | // DappMemberEntity dappMemberEntity = dappMemberDao.selectById(id); |
| | | // if(ObjectUtil.isEmpty(dappMemberEntity)){ |
| | | // return; |
| | | // } |
| | | // //所有上级(不包含直属上级) |
| | | // String refererIds = dappMemberEntity.getRefererIds(); |
| | | // List<String> refererIdList = StrUtil.split(refererIds, ','); |
| | | // if(CollUtil.isNotEmpty(refererIdList)){ |
| | | // for(String inviteIdStr : refererIdList){ |
| | | // DappMemberEntity dappMemberEntityUp = dappMemberDao.selectMemberInfoByInviteId(inviteIdStr); |
| | | // if(ObjectUtil.isEmpty(dappMemberEntityUp)){ |
| | | // continue; |
| | | // } |
| | | // String accountType = dappMemberEntityUp.getAccountType(); |
| | | // if(DataDictionaryEnum.BIG_BOSS.getCode().equals(accountType)){ |
| | | // continue; |
| | | // } |
| | | // //当前为BOSS,且直推中有两个BOSS以上,则升级BIG_BOSS |
| | | // if(DataDictionaryEnum.BOSS.getCode().equals(accountType)){ |
| | | // Integer bossCount = dappMemberDao.selectCountByAccountTypeAndRefererId(DataDictionaryEnum.BOSS.getCode(),dappMemberEntityUp.getInviteId()); |
| | | // if(2 <= bossCount){ |
| | | // dappMemberDao.updateMemberAccountType(DataDictionaryEnum.BIG_BOSS.getCode(),dappMemberEntityUp.getId()); |
| | | // } |
| | | // continue; |
| | | // } |
| | | // //当前为AGENT,且直推中有两个以上,则升级BOSS |
| | | // if(DataDictionaryEnum.AGENT.getCode().equals(accountType)){ |
| | | // Integer bossCount = dappMemberDao.selectCountByAccountTypeAndRefererId(null,dappMemberEntityUp.getInviteId()); |
| | | // if(2 <= bossCount){ |
| | | // dappMemberDao.updateMemberAccountType(DataDictionaryEnum.BOSS.getCode(),dappMemberEntityUp.getId()); |
| | | // } |
| | | // continue; |
| | | // } |
| | | // } |
| | | // } |
| | | // //直属上级 |
| | | // String accountType = dappMemberEntity.getAccountType(); |
| | | // if(DataDictionaryEnum.BIG_BOSS.getCode().equals(accountType)){ |
| | | // return; |
| | | // } |
| | | // //当前为BOSS,且直推中有两个BOSS以上,则升级BIG_BOSS |
| | | // if(DataDictionaryEnum.BOSS.getCode().equals(accountType)){ |
| | | // Integer bossCount = dappMemberDao.selectCountByAccountTypeAndRefererId(DataDictionaryEnum.BOSS.getCode(),dappMemberEntity.getInviteId()); |
| | | // if(2 <= bossCount){ |
| | | // dappMemberDao.updateMemberAccountType(DataDictionaryEnum.BIG_BOSS.getCode(),dappMemberEntity.getId()); |
| | | // } |
| | | // return; |
| | | // } |
| | | // //当前为AGENT,且直推中有两个以上,则升级BOSS |
| | | // if(DataDictionaryEnum.AGENT.getCode().equals(accountType)){ |
| | | // Integer bossCount = dappMemberDao.selectCountByAccountTypeAndRefererId(null,dappMemberEntity.getInviteId()); |
| | | // if(2 <= bossCount){ |
| | | // dappMemberDao.updateMemberAccountType(DataDictionaryEnum.BOSS.getCode(),dappMemberEntity.getId()); |
| | | // } |
| | | // return; |
| | | // } |
| | | } |
| | | |
| | | @Override |
| | |
| | | |
| | | @Override |
| | | public void AntACoinInMsg(Long id) { |
| | | // /** |
| | | // * 获取对应的流水记录 |
| | | // */ |
| | | // DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectInfoById(id); |
| | | // if(ObjectUtil.isEmpty(dappFundFlowEntity)){ |
| | | // return; |
| | | // } |
| | | // Long memberId = dappFundFlowEntity.getMemberId(); |
| | | // DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId); |
| | | // if(ObjectUtil.isEmpty(dappMemberEntity)){ |
| | | // return; |
| | | // } |
| | | // /** |
| | | // * 会员充值金额 |
| | | // */ |
| | | // BigDecimal amount = dappFundFlowEntity.getAmount(); |
| | | // /** |
| | | // * A币的当前价格 |
| | | // */ |
| | | // DataDictionaryCustom coinAPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.COIN_A_PRICE.getType(), |
| | | // PoolEnum.COIN_A_PRICE.getCode() |
| | | // ); |
| | | // BigDecimal coinAPrice = new BigDecimal(StrUtil.isEmpty(coinAPriceDic.getValue()) ? "0" : coinAPriceDic.getValue()).setScale(12,BigDecimal.ROUND_DOWN); |
| | | // /** |
| | | // * 会员充值USDT买入A币记录的ID |
| | | // */ |
| | | // Long chergeRecordId = dappFundFlowEntity.getSystemProfitId(); |
| | | // DappChargeUsdtEntity dappChargeUsdtEntity = dappChargeUsdtMapper.selectById(chergeRecordId); |
| | | // if(2 != dappChargeUsdtEntity.getStatus()){ |
| | | // return; |
| | | // } |
| | | // if(StrUtil.isEmpty(dappChargeUsdtEntity.getMemberHash())){ |
| | | // return; |
| | | // } |
| | | // /** |
| | | // * 金本位的三倍额度,增加业绩,增加对应的NFT的值 |
| | | // */ |
| | | // DappUsdtPerkEntity dappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(memberId); |
| | | // if(ObjectUtil.isEmpty(dappUsdtPerkEntity)){ |
| | | // dappUsdtPerkEntity = new DappUsdtPerkEntity(); |
| | | // dappUsdtPerkEntity.setAmount(amount.multiply(new BigDecimal(3))); |
| | | // dappUsdtPerkEntity.setNftDevote(amount); |
| | | // dappUsdtPerkEntity.setMemberId(memberId); |
| | | // dappUsdtPerkEntityMapper.insert(dappUsdtPerkEntity); |
| | | // } |
| | | // //金本位的三倍额度 |
| | | // BigDecimal amountPerk = dappUsdtPerkEntity.getAmount(); |
| | | // amountPerk = amountPerk.add(amount.multiply(new BigDecimal(3))); |
| | | // dappUsdtPerkEntity.setAmount(amountPerk); |
| | | // //生成一条金本位的三倍额度的资金流水记录 |
| | | // DappFundFlowEntity amountPerkFundFlow = new DappFundFlowEntity( |
| | | // memberId, |
| | | // amount.multiply(new BigDecimal(3)), |
| | | // FundFlowEnum.MEMBER_AMOUNT_PERK_TOTAL.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(amountPerkFundFlow); |
| | | // |
| | | // //增加业绩 |
| | | // BigDecimal achieveAmount = dappUsdtPerkEntity.getAchieveAmount(); |
| | | // achieveAmount = achieveAmount.add(amount); |
| | | // dappUsdtPerkEntity.setAchieveAmount(achieveAmount); |
| | | // //增加对应的NFT的值 |
| | | // BigDecimal nftDevote = dappUsdtPerkEntity.getNftDevote(); |
| | | // nftDevote = nftDevote.add(amount); |
| | | // dappUsdtPerkEntity.setNftDevote(nftDevote); |
| | | // dappUsdtPerkEntityMapper.updateById(dappUsdtPerkEntity); |
| | | // /** |
| | | // * 90%进入A币底池 10%进入B币LP薄饼底池 |
| | | // */ |
| | | // DataDictionaryCustom usdtAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.USDT_A_PERCENT.getType(), |
| | | // PoolEnum.USDT_A_PERCENT.getCode() |
| | | // ); |
| | | // BigDecimal usdtAPercent = new BigDecimal(StrUtil.isEmpty(usdtAPercentDic.getValue()) ? "0.7" : usdtAPercentDic.getValue()); |
| | | // BigDecimal usdtAAmount = amount.multiply(usdtAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // |
| | | // //生成一条进行中的70%进入A币底池的资金流水记录 |
| | | // DappFundFlowEntity fundFlowToA = new DappFundFlowEntity( |
| | | // 1L, |
| | | // usdtAAmount, |
| | | // FundFlowEnum.USDT_IN_A_POOL.getCode(), |
| | | // 1, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(fundFlowToA); |
| | | // //90%进入A币底池 |
| | | // chainProducer.sendAntACoinInAPoolMsg(fundFlowToA.getId()); |
| | | // |
| | | // BigDecimal usdtWAmount = amount.multiply(new BigDecimal(0.2)).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // //生成一条进行中的20%进入A币底池的资金流水记录 |
| | | // DappFundFlowEntity fundFlowToW = new DappFundFlowEntity( |
| | | // 1L, |
| | | // usdtWAmount, |
| | | // FundFlowEnum.USDT_IN_W_POOL.getCode(), |
| | | // 1, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(fundFlowToW); |
| | | // |
| | | // DataDictionaryCustom usdtBPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.USDT_B_PERCENT.getType(), |
| | | // PoolEnum.USDT_B_PERCENT.getCode() |
| | | // ); |
| | | // BigDecimal usdtBPercent = new BigDecimal(StrUtil.isEmpty(usdtBPercentDic.getValue()) ? "0.1" : usdtBPercentDic.getValue()); |
| | | // BigDecimal usdtBAmount = amount.multiply(usdtBPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // //生成一条进行中的10%进入B币底池的资金流水记录 |
| | | // DappFundFlowEntity fundFlowToB = new DappFundFlowEntity( |
| | | // 1L, |
| | | // usdtBAmount, |
| | | // FundFlowEnum.USDT_IN_B_POOL.getCode(), |
| | | // 1, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(fundFlowToB); |
| | | // //10%进入B币LP薄饼底池 |
| | | // chainProducer.sendAntACoinInBPoolMsg(fundFlowToB.getId()); |
| | | // /** |
| | | // * 1.90%底池的USDT做成100%溢价,铸造出70%金本位价值的A币。 |
| | | // */ |
| | | // DataDictionaryCustom produceAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.PRODUCE_A_PERCENT.getType(), |
| | | // PoolEnum.PRODUCE_A_PERCENT.getCode() |
| | | // ); |
| | | // BigDecimal produceAPercent = new BigDecimal(StrUtil.isEmpty(produceAPercentDic.getValue()) ? "0.7" : produceAPercentDic.getValue()); |
| | | // //购买数量 |
| | | // BigDecimal totalCnt = amount.divide(coinAPrice, 4, BigDecimal.ROUND_DOWN); |
| | | // /** |
| | | // * 铸造出70%金本位价值的A币。实际产生数量 |
| | | // */ |
| | | // BigDecimal realCnt = totalCnt.multiply(produceAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // dappChargeUsdtEntity.setTotalCnt(totalCnt); |
| | | // dappChargeUsdtEntity.setRealCnt(realCnt); |
| | | // dappChargeUsdtMapper.updateById(dappChargeUsdtEntity); |
| | | // /** |
| | | // * 重新计算A币的价格 |
| | | // */ |
| | | // DataDictionaryCustom coinACntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.COIN_A_CNT.getType(), |
| | | // PoolEnum.COIN_A_CNT.getCode() |
| | | // ); |
| | | // //A币币本位底池-A币的数量 |
| | | // BigDecimal coinACntDicCnt = new BigDecimal(coinACntDic.getValue()); |
| | | // coinACntDicCnt = coinACntDicCnt.add(realCnt); |
| | | // coinACntDic.setValue(coinACntDicCnt.toString()); |
| | | // dataDictionaryCustomMapper.updateById(coinACntDic); |
| | | // |
| | | // DataDictionaryCustom coinAUsdtPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.COIN_A_USDT_PRICE.getType(), |
| | | // PoolEnum.COIN_A_USDT_PRICE.getCode() |
| | | // ); |
| | | // //A币金本位底池-usdt数量 |
| | | // BigDecimal coinAUsdtPriceDicCnt = new BigDecimal(coinAUsdtPriceDic.getValue()); |
| | | // coinAUsdtPriceDicCnt = coinAUsdtPriceDicCnt.add(amount); |
| | | // coinAUsdtPriceDic.setValue(coinAUsdtPriceDicCnt.toString()); |
| | | // dataDictionaryCustomMapper.updateById(coinAUsdtPriceDic); |
| | | // |
| | | // BigDecimal divide = coinAUsdtPriceDicCnt.divide(coinACntDicCnt, 12, BigDecimal.ROUND_DOWN); |
| | | // coinAPriceDic.setValue(divide.toString()); |
| | | // dataDictionaryCustomMapper.updateById(coinAPriceDic); |
| | | // |
| | | // chainProducer.sendAntKLineMsg(0); |
| | | // /** |
| | | // * A币的分配 walletMine |
| | | // * 【70%换算100%分配】 |
| | | // * 50%客户秒到 |
| | | // * 20%全网加权分红(按20%释放递减) |
| | | // * 10%直推 |
| | | // * 5%节点 |
| | | // * 5%基金会 |
| | | // * 10%级差奖 |
| | | // */ |
| | | // /** |
| | | // * 50%客户秒到 |
| | | // */ |
| | | // DataDictionaryCustom memberGetAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.MEMBER_GET_A_PERCENT.getType(), |
| | | // PoolEnum.MEMBER_GET_A_PERCENT.getCode() |
| | | // ); |
| | | // BigDecimal memberGetAPercent = new BigDecimal(StrUtil.isEmpty(memberGetAPercentDic.getValue()) ? "0.5" : memberGetAPercentDic.getValue()); |
| | | // BigDecimal memberGetACnt = realCnt.multiply(memberGetAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // |
| | | // BigDecimal fundFlowToMemberFlag = this.getAndUpdateMemberPerk(dappFundFlowEntity.getMemberId(), memberGetACnt); |
| | | // if(fundFlowToMemberFlag.compareTo(BigDecimal.ZERO) > 0){ |
| | | // //生成一条50%客户秒到的资金流水记录 |
| | | // DappFundFlowEntity fundFlowToMember = new DappFundFlowEntity( |
| | | // dappFundFlowEntity.getMemberId(), |
| | | // fundFlowToMemberFlag, |
| | | // FundFlowEnum.MEMBER_GET_A_CNT.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(fundFlowToMember); |
| | | // //用户的A币账户增加memberGetACnt数量 |
| | | // dappWalletService.updateWalletMineWithLock(fundFlowToMemberFlag,dappFundFlowEntity.getMemberId(),1); |
| | | // } |
| | | // /** |
| | | // * 20%全网加权分红(按20%释放递减)进入加权分红底池 |
| | | // */ |
| | | // DataDictionaryCustom poolAllMemberAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.POOL_ALL_MEMBER_A_PERCENT.getType(), |
| | | // PoolEnum.POOL_ALL_MEMBER_A_PERCENT.getCode() |
| | | // ); |
| | | // BigDecimal poolAllMemberAPercent = new BigDecimal(StrUtil.isEmpty(poolAllMemberAPercentDic.getValue()) ? "0.2" : poolAllMemberAPercentDic.getValue()); |
| | | // BigDecimal poolAllMemberAPercentCnt = realCnt.multiply(poolAllMemberAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // |
| | | // DataDictionaryCustom poolAllMemberACntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.POOL_ALL_MEMBER_A_CNT.getType(), |
| | | // PoolEnum.POOL_ALL_MEMBER_A_CNT.getCode() |
| | | // ); |
| | | // BigDecimal poolAllMemberACnt = new BigDecimal(StrUtil.isEmpty(poolAllMemberACntDic.getValue()) ? "0" : poolAllMemberACntDic.getValue()); |
| | | // poolAllMemberACnt = poolAllMemberACnt.add(poolAllMemberAPercentCnt); |
| | | // poolAllMemberACntDic.setValue(poolAllMemberACnt.toString()); |
| | | // dataDictionaryCustomMapper.updateById(poolAllMemberACntDic); |
| | | // //生成一条20%全网加权分红(按20%释放递减)进入加权分红底池的资金流水记录 |
| | | // DappFundFlowEntity poolAllMemberAFundFlow = new DappFundFlowEntity( |
| | | // 1L, |
| | | // poolAllMemberAPercentCnt, |
| | | // FundFlowEnum.POOL_ALL_MEMBER_A_CNT.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(poolAllMemberAFundFlow); |
| | | // |
| | | //// BigDecimal poolAllMemberAPercentCntAva = nodePoolPerk(poolAllMemberAPercentCnt, MemberLevelEnum.MEMBER.getType(), FundFlowEnum.POOL_MEMBER_A_CNT.getCode()); |
| | | // /** |
| | | // * 20%全网加权平分,按照个人投资占比全网的比例去平分 |
| | | // */ |
| | | // chainProducer.sendAllMemberPerkAvaMsg(poolAllMemberAFundFlow.getId()); |
| | | //// BigDecimal poolAllMemberAPercentCntAva = allMemberPerk(poolAllMemberAPercentCnt, FundFlowEnum.POOL_MEMBER_A_CNT.getCode()); |
| | | //// DappFundFlowEntity poolAllMemberAFundFlowAva = new DappFundFlowEntity( |
| | | //// 1L, |
| | | //// poolAllMemberAPercentCnt.subtract(poolAllMemberAPercentCntAva), |
| | | //// FundFlowEnum.POOL_MEMBER_A_CNT.getCode(), |
| | | //// 2, |
| | | //// BigDecimal.ZERO, |
| | | //// null, |
| | | //// chergeRecordId); |
| | | //// dappFundFlowDao.insert(poolAllMemberAFundFlowAva); |
| | | //// dappWalletService.updateWalletMineWithLock(poolAllMemberAPercentCnt.subtract(poolAllMemberAPercentCntAva), |
| | | //// 1L,1); |
| | | // |
| | | // /** |
| | | // * 10%直推 |
| | | // */ |
| | | // DataDictionaryCustom directAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.DIRECT_A_PERCENT.getType(), |
| | | // PoolEnum.DIRECT_A_PERCENT.getCode() |
| | | // ); |
| | | // BigDecimal directAPercent = new BigDecimal(StrUtil.isEmpty(directAPercentDic.getValue()) ? "0.1" : directAPercentDic.getValue()); |
| | | // BigDecimal directAPercentCnt = realCnt.multiply(directAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // |
| | | // String refererId = dappMemberEntity.getRefererId(); |
| | | // DappMemberEntity directMemberEntity = dappMemberDao.selectMemberInfoByInviteId(refererId); |
| | | // if(ObjectUtil.isNotEmpty(directMemberEntity)){ |
| | | // /** |
| | | // *推荐用户入单可享有贡献值.例.推荐100获得100贡献值 |
| | | // */ |
| | | // DappUsdtPerkEntity directDappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(directMemberEntity.getId()); |
| | | // if(ObjectUtil.isEmpty(directDappUsdtPerkEntity)){ |
| | | // directDappUsdtPerkEntity = new DappUsdtPerkEntity(); |
| | | // directDappUsdtPerkEntity.setNftDevote(amount); |
| | | // directDappUsdtPerkEntity.setMemberId(directMemberEntity.getId()); |
| | | // dappUsdtPerkEntityMapper.insert(directDappUsdtPerkEntity); |
| | | // } |
| | | // |
| | | // BigDecimal directNftDevote = directDappUsdtPerkEntity.getNftDevote(); |
| | | // directNftDevote = directNftDevote.add(amount); |
| | | // directDappUsdtPerkEntity.setNftDevote(directNftDevote); |
| | | // dappUsdtPerkEntityMapper.updateById(directDappUsdtPerkEntity); |
| | | // |
| | | // BigDecimal directAPercentFundFlowToMemberFlag = this.getAndUpdateMemberPerk(directMemberEntity.getId(), directAPercentCnt); |
| | | // if(directAPercentFundFlowToMemberFlag.compareTo(BigDecimal.ZERO) > 0){ |
| | | // //生成一条10%直推的资金流水记录 |
| | | // DappFundFlowEntity directAPercentFundFlowToMember = new DappFundFlowEntity( |
| | | // directMemberEntity.getId(), |
| | | // directAPercentFundFlowToMemberFlag, |
| | | // FundFlowEnum.DIRECT_A_PERCENT.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(directAPercentFundFlowToMember); |
| | | // //用户的A币账户增加directAPercentCnt数量 |
| | | // dappWalletService.updateWalletMineWithLock(directAPercentFundFlowToMemberFlag,directMemberEntity.getId(),1); |
| | | // } |
| | | // if(directAPercentCnt.compareTo(directAPercentFundFlowToMemberFlag) > 0){ |
| | | // DappFundFlowEntity directAPercentFundFlowToMemberAva = new DappFundFlowEntity( |
| | | // 1L, |
| | | // directAPercentCnt.subtract(directAPercentFundFlowToMemberFlag), |
| | | // FundFlowEnum.DIRECT_A_PERCENT.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(directAPercentFundFlowToMemberAva); |
| | | // dappWalletService.updateWalletMineWithLock(directAPercentCnt.subtract(directAPercentFundFlowToMemberFlag), |
| | | // AppContants.YL_MEMBER_ID,1); |
| | | // } |
| | | // } |
| | | // /** |
| | | // * 5%节点 |
| | | // */ |
| | | // DataDictionaryCustom nodeAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.NODE_A_PERCENT.getType(), |
| | | // PoolEnum.NODE_A_PERCENT.getCode() |
| | | // ); |
| | | // BigDecimal nodeAPercent = new BigDecimal(StrUtil.isEmpty(nodeAPercentDic.getValue()) ? "0.05" : nodeAPercentDic.getValue()); |
| | | // BigDecimal nodeAPercentCnt = realCnt.multiply(nodeAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // //生成一条5%节点的资金流水记录 |
| | | // DappFundFlowEntity nodeAPercentFundFlow = new DappFundFlowEntity( |
| | | // 1L, |
| | | // nodeAPercentCnt, |
| | | // FundFlowEnum.NODE_A_PERCENT.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(nodeAPercentFundFlow); |
| | | //// chainProducer.sendAntACoinInNodeMsg(nodeAPercentFundFlow.getId()); |
| | | // DataDictionaryCustom nodeAPercentPoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.NODE_A_PERCENT_POOL.getType(), |
| | | // PoolEnum.NODE_A_PERCENT_POOL.getCode() |
| | | // ); |
| | | // BigDecimal nodeAPercentPoolDicCnt = new BigDecimal(StrUtil.isEmpty(nodeAPercentPoolDic.getValue()) ? "0" : nodeAPercentPoolDic.getValue()); |
| | | // nodeAPercentPoolDicCnt = nodeAPercentPoolDicCnt.add(nodeAPercentCnt); |
| | | // nodeAPercentPoolDic.setValue(nodeAPercentPoolDicCnt.toString()); |
| | | // dataDictionaryCustomMapper.updateById(nodeAPercentPoolDic); |
| | | // |
| | | // BigDecimal nodeAPercentCntAva = superNodePoolPerk(nodeAPercentCnt, NodeCodeEnum.SUPER_NODE.getCode(), FundFlowEnum.NODE_A_PERCENT_TO_MEMBER.getCode()); |
| | | // |
| | | // if(nodeAPercentCnt.compareTo(nodeAPercentCntAva) > 0){ |
| | | // DappFundFlowEntity nodeAPercentFundFlowAva = new DappFundFlowEntity( |
| | | // 1L, |
| | | // nodeAPercentCnt.subtract(nodeAPercentCntAva), |
| | | // FundFlowEnum.NODE_A_PERCENT_TO_MEMBER.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(nodeAPercentFundFlowAva); |
| | | // dappWalletService.updateWalletMineWithLock(nodeAPercentCnt.subtract(nodeAPercentCntAva), |
| | | // AppContants.YL_MEMBER_ID,1); |
| | | // } |
| | | // /** |
| | | // * 5%基金会 |
| | | // */ |
| | | // DataDictionaryCustom foundationAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.FOUNDATION_A_PERCENT.getType(), |
| | | // PoolEnum.FOUNDATION_A_PERCENT.getCode() |
| | | // ); |
| | | // BigDecimal foundationAPercent = new BigDecimal(StrUtil.isEmpty(foundationAPercentDic.getValue()) ? "0.05" : foundationAPercentDic.getValue()); |
| | | // BigDecimal foundationAPercentCnt = realCnt.multiply(foundationAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // |
| | | // //生成一条5%基金会的资金流水记录 |
| | | // DappFundFlowEntity foundationAPercentFundFlow = new DappFundFlowEntity( |
| | | // 295L, |
| | | // foundationAPercentCnt, |
| | | // FundFlowEnum.FOUNDATION_A_PERCENT.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(foundationAPercentFundFlow); |
| | | // //用户的A币账户增加memberGetACnt数量 |
| | | // dappWalletService.updateWalletMineWithLock(foundationAPercentCnt,295L,1); |
| | | // /** |
| | | // * 10%级差奖 |
| | | // */ |
| | | // DataDictionaryCustom levelAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.LEVEL_A_PERCENT.getType(), |
| | | // PoolEnum.LEVEL_A_PERCENT.getCode() |
| | | // ); |
| | | // BigDecimal levelAPercent = new BigDecimal(StrUtil.isEmpty(levelAPercentDic.getValue()) ? "0.1" : levelAPercentDic.getValue()); |
| | | // BigDecimal levelAPercentCnt = realCnt.multiply(levelAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // |
| | | // //生成一条10%级差奖进入10%级差奖底池的资金流水记录 |
| | | // DappFundFlowEntity levelAPercentCntFundFlow = new DappFundFlowEntity( |
| | | // 1L, |
| | | // levelAPercentCnt, |
| | | // FundFlowEnum.LEVEL_A_PERCENT_CNT.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(levelAPercentCntFundFlow); |
| | | // chainProducer.sendAntACoinInLevelMsg(levelAPercentCntFundFlow.getId()); |
| | | // |
| | | // /** |
| | | // * 更新用户为有效用户 |
| | | // */ |
| | | // dappMemberDao.updateMemberActiveStatus(1,memberId); |
| | | |
| | | } |
| | | |
| | | private BigDecimal allMemberPerk(BigDecimal poolAllMemberAPercentCnt, int code) { |
| | | |
| | | BigDecimal realPerkAmount = BigDecimal.ZERO; |
| | | /** |
| | | * 获取对应的流水记录 |
| | | * 查询总业绩 |
| | | */ |
| | | DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectInfoById(id); |
| | | if(ObjectUtil.isEmpty(dappFundFlowEntity)){ |
| | | return; |
| | | List<DappChargeUsdtEntity> dappChargeUsdtEntities = dappChargeUsdtMapper.selectList(null); |
| | | if(CollUtil.isEmpty(dappChargeUsdtEntities)){ |
| | | return realPerkAmount; |
| | | } |
| | | Long memberId = dappFundFlowEntity.getMemberId(); |
| | | DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId); |
| | | if(ObjectUtil.isEmpty(dappMemberEntity)){ |
| | | return; |
| | | //总入金 |
| | | BigDecimal amountAll = dappChargeUsdtEntities.stream().map(DappChargeUsdtEntity::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | if(BigDecimal.ZERO.compareTo(amountAll) >= 0){ |
| | | return realPerkAmount; |
| | | } |
| | | /** |
| | | * 会员充值金额 |
| | | * 每个人入金的总额 |
| | | */ |
| | | BigDecimal amount = dappFundFlowEntity.getAmount(); |
| | | Map<Long, BigDecimal> amountMap = dappChargeUsdtEntities.stream().collect( |
| | | Collectors.groupingBy(DappChargeUsdtEntity::getMemberId, |
| | | Collectors.reducing(BigDecimal.ZERO, DappChargeUsdtEntity::getAmount, BigDecimal::add))); |
| | | /** |
| | | * A币的当前价格 |
| | | * 入金1U分的代币个数 |
| | | */ |
| | | DataDictionaryCustom coinAPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.COIN_A_PRICE.getType(), |
| | | PoolEnum.COIN_A_PRICE.getCode() |
| | | ); |
| | | BigDecimal coinAPrice = new BigDecimal(StrUtil.isEmpty(coinAPriceDic.getValue()) ? "0" : coinAPriceDic.getValue()).setScale(8,BigDecimal.ROUND_DOWN); |
| | | /** |
| | | * 会员充值USDT买入A币记录的ID |
| | | */ |
| | | Long chergeRecordId = dappFundFlowEntity.getSystemProfitId(); |
| | | DappChargeUsdtEntity dappChargeUsdtEntity = dappChargeUsdtMapper.selectById(chergeRecordId); |
| | | if(2 != dappChargeUsdtEntity.getStatus()){ |
| | | return; |
| | | } |
| | | if(StrUtil.isEmpty(dappChargeUsdtEntity.getMemberHash())){ |
| | | return; |
| | | } |
| | | /** |
| | | * 金本位的三倍额度,增加业绩,增加对应的NFT的值 |
| | | */ |
| | | DappUsdtPerkEntity dappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(memberId); |
| | | if(ObjectUtil.isEmpty(dappUsdtPerkEntity)){ |
| | | dappUsdtPerkEntity = new DappUsdtPerkEntity(); |
| | | dappUsdtPerkEntity.setAmount(amount.multiply(new BigDecimal(3))); |
| | | dappUsdtPerkEntity.setNftDevote(amount); |
| | | dappUsdtPerkEntity.setMemberId(memberId); |
| | | dappUsdtPerkEntityMapper.insert(dappUsdtPerkEntity); |
| | | } |
| | | //金本位的三倍额度 |
| | | BigDecimal amountPerk = dappUsdtPerkEntity.getAmount(); |
| | | amountPerk = amountPerk.add(amount.multiply(new BigDecimal(3))); |
| | | dappUsdtPerkEntity.setAmount(amountPerk); |
| | | //生成一条金本位的三倍额度的资金流水记录 |
| | | DappFundFlowEntity amountPerkFundFlow = new DappFundFlowEntity( |
| | | memberId, |
| | | amount.multiply(new BigDecimal(3)), |
| | | FundFlowEnum.MEMBER_AMOUNT_PERK_TOTAL.getCode(), |
| | | 1, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | chergeRecordId); |
| | | dappFundFlowDao.insert(amountPerkFundFlow); |
| | | BigDecimal usdtOfCnt = poolAllMemberAPercentCnt.divide(amountAll, 8, BigDecimal.ROUND_DOWN); |
| | | |
| | | //增加业绩 |
| | | BigDecimal achieveAmount = dappUsdtPerkEntity.getAchieveAmount(); |
| | | achieveAmount = achieveAmount.add(amount); |
| | | dappUsdtPerkEntity.setAchieveAmount(achieveAmount); |
| | | //增加对应的NFT的值 |
| | | BigDecimal nftDevote = dappUsdtPerkEntity.getNftDevote(); |
| | | nftDevote = nftDevote.add(amount); |
| | | dappUsdtPerkEntity.setNftDevote(nftDevote); |
| | | dappUsdtPerkEntityMapper.updateById(dappUsdtPerkEntity); |
| | | /** |
| | | * 90%进入A币底池 10%进入B币LP薄饼底池 |
| | | */ |
| | | DataDictionaryCustom usdtAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.USDT_A_PERCENT.getType(), |
| | | PoolEnum.USDT_A_PERCENT.getCode() |
| | | ); |
| | | BigDecimal usdtAPercent = new BigDecimal(StrUtil.isEmpty(usdtAPercentDic.getValue()) ? "0.9" : usdtAPercentDic.getValue()); |
| | | BigDecimal usdtAAmount = amount.multiply(usdtAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | |
| | | //生成一条进行中的90%进入A币底池的资金流水记录 |
| | | DappFundFlowEntity fundFlowToA = new DappFundFlowEntity( |
| | | 1L, |
| | | usdtAAmount, |
| | | FundFlowEnum.USDT_IN_A_POOL.getCode(), |
| | | 1, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | chergeRecordId); |
| | | dappFundFlowDao.insert(fundFlowToA); |
| | | //90%进入A币底池 |
| | | chainProducer.sendAntACoinInAPoolMsg(fundFlowToA.getId()); |
| | | |
| | | DataDictionaryCustom usdtBPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.USDT_B_PERCENT.getType(), |
| | | PoolEnum.USDT_B_PERCENT.getCode() |
| | | ); |
| | | BigDecimal usdtBPercent = new BigDecimal(StrUtil.isEmpty(usdtBPercentDic.getValue()) ? "0.1" : usdtBPercentDic.getValue()); |
| | | BigDecimal usdtBAmount = amount.multiply(usdtBPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | //生成一条进行中的10%进入B币底池的资金流水记录 |
| | | DappFundFlowEntity fundFlowToB = new DappFundFlowEntity( |
| | | 1L, |
| | | usdtBAmount, |
| | | FundFlowEnum.USDT_IN_B_POOL.getCode(), |
| | | 1, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | chergeRecordId); |
| | | dappFundFlowDao.insert(fundFlowToB); |
| | | //10%进入B币LP薄饼底池 |
| | | chainProducer.sendAntACoinInBPoolMsg(fundFlowToB.getId()); |
| | | /** |
| | | * 1.90%底池的USDT做成100%溢价,铸造出70%金本位价值的A币。 |
| | | */ |
| | | DataDictionaryCustom produceAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.PRODUCE_A_PERCENT.getType(), |
| | | PoolEnum.PRODUCE_A_PERCENT.getCode() |
| | | ); |
| | | BigDecimal produceAPercent = new BigDecimal(StrUtil.isEmpty(produceAPercentDic.getValue()) ? "0.7" : produceAPercentDic.getValue()); |
| | | //购买数量 |
| | | BigDecimal totalCnt = amount.divide(coinAPrice, 4, BigDecimal.ROUND_DOWN); |
| | | /** |
| | | * 铸造出70%金本位价值的A币。实际产生数量 |
| | | */ |
| | | BigDecimal realCnt = totalCnt.multiply(produceAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | dappChargeUsdtEntity.setTotalCnt(totalCnt); |
| | | dappChargeUsdtEntity.setRealCnt(realCnt); |
| | | dappChargeUsdtMapper.updateById(dappChargeUsdtEntity); |
| | | /** |
| | | * 重新计算A币的价格 |
| | | */ |
| | | DataDictionaryCustom coinACntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.COIN_A_CNT.getType(), |
| | | PoolEnum.COIN_A_CNT.getCode() |
| | | ); |
| | | //A币币本位底池-A币的数量 |
| | | BigDecimal coinACntDicCnt = new BigDecimal(coinACntDic.getValue()); |
| | | coinACntDicCnt = coinACntDicCnt.add(realCnt); |
| | | coinACntDic.setValue(coinACntDicCnt.toString()); |
| | | dataDictionaryCustomMapper.updateById(coinACntDic); |
| | | |
| | | DataDictionaryCustom coinAUsdtPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.COIN_A_USDT_PRICE.getType(), |
| | | PoolEnum.COIN_A_USDT_PRICE.getCode() |
| | | ); |
| | | //A币金本位底池-usdt数量 |
| | | BigDecimal coinAUsdtPriceDicCnt = new BigDecimal(coinAUsdtPriceDic.getValue()); |
| | | coinAUsdtPriceDicCnt = coinAUsdtPriceDicCnt.add(amount); |
| | | coinAUsdtPriceDic.setValue(coinAUsdtPriceDicCnt.toString()); |
| | | dataDictionaryCustomMapper.updateById(coinAUsdtPriceDic); |
| | | |
| | | BigDecimal divide = coinAUsdtPriceDicCnt.divide(coinACntDicCnt, 8, BigDecimal.ROUND_DOWN); |
| | | coinAPriceDic.setValue(divide.toString()); |
| | | dataDictionaryCustomMapper.updateById(coinAPriceDic); |
| | | |
| | | chainProducer.sendAntKLineMsg(0); |
| | | /** |
| | | * A币的分配 walletMine |
| | | * 【70%换算100%分配】 |
| | | * 50%客户秒到 |
| | | * 20%全网加权分红(按20%释放递减) |
| | | * 10%直推 |
| | | * 5%节点 |
| | | * 5%基金会 |
| | | * 10%级差奖 |
| | | */ |
| | | /** |
| | | * 50%客户秒到 |
| | | */ |
| | | DataDictionaryCustom memberGetAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.MEMBER_GET_A_PERCENT.getType(), |
| | | PoolEnum.MEMBER_GET_A_PERCENT.getCode() |
| | | ); |
| | | BigDecimal memberGetAPercent = new BigDecimal(StrUtil.isEmpty(memberGetAPercentDic.getValue()) ? "0.5" : memberGetAPercentDic.getValue()); |
| | | BigDecimal memberGetACnt = realCnt.multiply(memberGetAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | |
| | | BigDecimal fundFlowToMemberFlag = this.getAndUpdateMemberPerk(dappFundFlowEntity.getMemberId(), memberGetACnt); |
| | | if(fundFlowToMemberFlag.compareTo(BigDecimal.ZERO) > 0){ |
| | | //生成一条50%客户秒到的资金流水记录 |
| | | DappFundFlowEntity fundFlowToMember = new DappFundFlowEntity( |
| | | dappFundFlowEntity.getMemberId(), |
| | | fundFlowToMemberFlag, |
| | | FundFlowEnum.MEMBER_GET_A_CNT.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | chergeRecordId); |
| | | dappFundFlowDao.insert(fundFlowToMember); |
| | | //用户的A币账户增加memberGetACnt数量 |
| | | dappWalletService.updateWalletMineWithLock(fundFlowToMemberFlag,dappFundFlowEntity.getMemberId(),1); |
| | | } |
| | | /** |
| | | * 20%全网加权分红(按20%释放递减)进入加权分红底池 |
| | | */ |
| | | DataDictionaryCustom poolAllMemberAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.POOL_ALL_MEMBER_A_PERCENT.getType(), |
| | | PoolEnum.POOL_ALL_MEMBER_A_PERCENT.getCode() |
| | | ); |
| | | BigDecimal poolAllMemberAPercent = new BigDecimal(StrUtil.isEmpty(poolAllMemberAPercentDic.getValue()) ? "0.2" : poolAllMemberAPercentDic.getValue()); |
| | | BigDecimal poolAllMemberAPercentCnt = realCnt.multiply(poolAllMemberAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | |
| | | DataDictionaryCustom poolAllMemberACntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.POOL_ALL_MEMBER_A_CNT.getType(), |
| | | PoolEnum.POOL_ALL_MEMBER_A_CNT.getCode() |
| | | ); |
| | | BigDecimal poolAllMemberACnt = new BigDecimal(StrUtil.isEmpty(poolAllMemberACntDic.getValue()) ? "0" : poolAllMemberACntDic.getValue()); |
| | | poolAllMemberACnt = poolAllMemberACnt.add(poolAllMemberAPercentCnt); |
| | | poolAllMemberACntDic.setValue(poolAllMemberACnt.toString()); |
| | | dataDictionaryCustomMapper.updateById(poolAllMemberACntDic); |
| | | //生成一条20%全网加权分红(按20%释放递减)进入加权分红底池的资金流水记录 |
| | | DappFundFlowEntity poolAllMemberAFundFlow = new DappFundFlowEntity( |
| | | 1L, |
| | | poolAllMemberAPercentCnt, |
| | | FundFlowEnum.POOL_ALL_MEMBER_A_CNT.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | chergeRecordId); |
| | | dappFundFlowDao.insert(poolAllMemberAFundFlow); |
| | | |
| | | BigDecimal poolAllMemberAPercentCntAva = nodePoolPerk(poolAllMemberAPercentCnt, MemberLevelEnum.MEMBER.getType(), FundFlowEnum.POOL_MEMBER_A_CNT.getCode()); |
| | | DappFundFlowEntity poolAllMemberAFundFlowAva = new DappFundFlowEntity( |
| | | 1L, |
| | | poolAllMemberAPercentCnt.subtract(poolAllMemberAPercentCntAva), |
| | | FundFlowEnum.POOL_MEMBER_A_CNT.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | chergeRecordId); |
| | | dappFundFlowDao.insert(poolAllMemberAFundFlowAva); |
| | | dappWalletService.updateWalletMineWithLock(poolAllMemberAPercentCnt.subtract(poolAllMemberAPercentCntAva), |
| | | 1L,1); |
| | | |
| | | /** |
| | | * 10%直推 |
| | | */ |
| | | DataDictionaryCustom directAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.DIRECT_A_PERCENT.getType(), |
| | | PoolEnum.DIRECT_A_PERCENT.getCode() |
| | | ); |
| | | BigDecimal directAPercent = new BigDecimal(StrUtil.isEmpty(directAPercentDic.getValue()) ? "0.1" : directAPercentDic.getValue()); |
| | | BigDecimal directAPercentCnt = realCnt.multiply(directAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | |
| | | String refererId = dappMemberEntity.getRefererId(); |
| | | DappMemberEntity directMemberEntity = dappMemberDao.selectMemberInfoByInviteId(refererId); |
| | | if(ObjectUtil.isNotEmpty(directMemberEntity)){ |
| | | /** |
| | | *推荐用户入单可享有贡献值.例.推荐100获得100贡献值 |
| | | */ |
| | | DappUsdtPerkEntity directDappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(directMemberEntity.getId()); |
| | | if(ObjectUtil.isEmpty(directDappUsdtPerkEntity)){ |
| | | directDappUsdtPerkEntity = new DappUsdtPerkEntity(); |
| | | directDappUsdtPerkEntity.setNftDevote(amount); |
| | | directDappUsdtPerkEntity.setMemberId(directMemberEntity.getId()); |
| | | dappUsdtPerkEntityMapper.insert(directDappUsdtPerkEntity); |
| | | for (Map.Entry<Long, BigDecimal> entry : amountMap.entrySet()) { |
| | | Long memberId = entry.getKey(); |
| | | //当前会员的入金总和 |
| | | BigDecimal amount = entry.getValue(); |
| | | if(BigDecimal.ZERO.compareTo(amount) >= 0){ |
| | | continue; |
| | | } |
| | | |
| | | BigDecimal directNftDevote = directDappUsdtPerkEntity.getNftDevote(); |
| | | directNftDevote = directNftDevote.add(amount); |
| | | directDappUsdtPerkEntity.setNftDevote(directNftDevote); |
| | | dappUsdtPerkEntityMapper.updateById(directDappUsdtPerkEntity); |
| | | |
| | | BigDecimal directAPercentFundFlowToMemberFlag = this.getAndUpdateMemberPerk(directMemberEntity.getId(), directAPercentCnt); |
| | | if(directAPercentFundFlowToMemberFlag.compareTo(BigDecimal.ZERO) > 0){ |
| | | //生成一条10%直推的资金流水记录 |
| | | DappFundFlowEntity directAPercentFundFlowToMember = new DappFundFlowEntity( |
| | | directMemberEntity.getId(), |
| | | directAPercentFundFlowToMemberFlag, |
| | | FundFlowEnum.DIRECT_A_PERCENT.getCode(), |
| | | //应该平分到的数量 |
| | | BigDecimal memberCnt = amount.multiply(usdtOfCnt).setScale(8,BigDecimal.ROUND_DOWN); |
| | | BigDecimal fundFlowToMemberFlag = this.getAndUpdateMemberPerk(memberId, memberCnt); |
| | | if(fundFlowToMemberFlag.compareTo(BigDecimal.ZERO) > 0){ |
| | | //生成一条50%客户秒到的资金流水记录 |
| | | DappFundFlowEntity fundFlowToMember = new DappFundFlowEntity( |
| | | memberId, |
| | | fundFlowToMemberFlag, |
| | | code, |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | chergeRecordId); |
| | | dappFundFlowDao.insert(directAPercentFundFlowToMember); |
| | | //用户的A币账户增加directAPercentCnt数量 |
| | | dappWalletService.updateWalletMineWithLock(directAPercentFundFlowToMemberFlag,directMemberEntity.getId(),1); |
| | | } |
| | | if(directAPercentCnt.compareTo(directAPercentFundFlowToMemberFlag) > 0){ |
| | | DappFundFlowEntity directAPercentFundFlowToMemberAva = new DappFundFlowEntity( |
| | | 1L, |
| | | directAPercentCnt.subtract(directAPercentFundFlowToMemberFlag), |
| | | FundFlowEnum.DIRECT_A_PERCENT.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | chergeRecordId); |
| | | dappFundFlowDao.insert(directAPercentFundFlowToMemberAva); |
| | | dappWalletService.updateWalletMineWithLock(directAPercentCnt.subtract(directAPercentFundFlowToMemberFlag), |
| | | 1L,1); |
| | | BigDecimal.ZERO); |
| | | dappFundFlowDao.insert(fundFlowToMember); |
| | | //用户的A币账户增加memberGetACnt数量 |
| | | dappWalletService.updateWalletMineWithLock(fundFlowToMemberFlag,memberId,1); |
| | | |
| | | realPerkAmount = realPerkAmount.add(fundFlowToMemberFlag); |
| | | } |
| | | } |
| | | /** |
| | | * 5%节点 |
| | | */ |
| | | DataDictionaryCustom nodeAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.NODE_A_PERCENT.getType(), |
| | | PoolEnum.NODE_A_PERCENT.getCode() |
| | | ); |
| | | BigDecimal nodeAPercent = new BigDecimal(StrUtil.isEmpty(nodeAPercentDic.getValue()) ? "0.05" : nodeAPercentDic.getValue()); |
| | | BigDecimal nodeAPercentCnt = realCnt.multiply(nodeAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | //生成一条5%节点的资金流水记录 |
| | | DappFundFlowEntity nodeAPercentFundFlow = new DappFundFlowEntity( |
| | | 1L, |
| | | nodeAPercentCnt, |
| | | FundFlowEnum.NODE_A_PERCENT.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | chergeRecordId); |
| | | dappFundFlowDao.insert(nodeAPercentFundFlow); |
| | | // chainProducer.sendAntACoinInNodeMsg(nodeAPercentFundFlow.getId()); |
| | | DataDictionaryCustom nodeAPercentPoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.NODE_A_PERCENT_POOL.getType(), |
| | | PoolEnum.NODE_A_PERCENT_POOL.getCode() |
| | | ); |
| | | BigDecimal nodeAPercentPoolDicCnt = new BigDecimal(StrUtil.isEmpty(nodeAPercentPoolDic.getValue()) ? "0" : nodeAPercentPoolDic.getValue()); |
| | | nodeAPercentPoolDicCnt = nodeAPercentPoolDicCnt.add(nodeAPercentCnt); |
| | | nodeAPercentPoolDic.setValue(nodeAPercentPoolDicCnt.toString()); |
| | | dataDictionaryCustomMapper.updateById(nodeAPercentPoolDic); |
| | | |
| | | BigDecimal nodeAPercentCntAva = superNodePoolPerk(nodeAPercentCnt, NodeCodeEnum.SUPER_NODE.getCode(), FundFlowEnum.NODE_A_PERCENT_TO_MEMBER.getCode()); |
| | | |
| | | if(nodeAPercentCnt.compareTo(nodeAPercentCntAva) > 0){ |
| | | DappFundFlowEntity nodeAPercentFundFlowAva = new DappFundFlowEntity( |
| | | 1L, |
| | | nodeAPercentCnt.subtract(nodeAPercentCntAva), |
| | | FundFlowEnum.NODE_A_PERCENT_TO_MEMBER.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | chergeRecordId); |
| | | dappFundFlowDao.insert(nodeAPercentFundFlowAva); |
| | | dappWalletService.updateWalletMineWithLock(nodeAPercentCnt.subtract(nodeAPercentCntAva), |
| | | 1L,1); |
| | | } |
| | | /** |
| | | * 5%基金会 |
| | | */ |
| | | DataDictionaryCustom foundationAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.FOUNDATION_A_PERCENT.getType(), |
| | | PoolEnum.FOUNDATION_A_PERCENT.getCode() |
| | | ); |
| | | BigDecimal foundationAPercent = new BigDecimal(StrUtil.isEmpty(foundationAPercentDic.getValue()) ? "0.05" : foundationAPercentDic.getValue()); |
| | | BigDecimal foundationAPercentCnt = realCnt.multiply(foundationAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | |
| | | //生成一条5%基金会的资金流水记录 |
| | | DappFundFlowEntity foundationAPercentFundFlow = new DappFundFlowEntity( |
| | | 1L, |
| | | foundationAPercentCnt, |
| | | FundFlowEnum.FOUNDATION_A_PERCENT.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | chergeRecordId); |
| | | dappFundFlowDao.insert(foundationAPercentFundFlow); |
| | | //用户的A币账户增加memberGetACnt数量 |
| | | dappWalletService.updateWalletMineWithLock(foundationAPercentCnt,1L,1); |
| | | /** |
| | | * 10%级差奖 |
| | | */ |
| | | DataDictionaryCustom levelAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.LEVEL_A_PERCENT.getType(), |
| | | PoolEnum.LEVEL_A_PERCENT.getCode() |
| | | ); |
| | | BigDecimal levelAPercent = new BigDecimal(StrUtil.isEmpty(levelAPercentDic.getValue()) ? "0.1" : levelAPercentDic.getValue()); |
| | | BigDecimal levelAPercentCnt = realCnt.multiply(levelAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | |
| | | //生成一条10%级差奖进入10%级差奖底池的资金流水记录 |
| | | DappFundFlowEntity levelAPercentCntFundFlow = new DappFundFlowEntity( |
| | | 1L, |
| | | levelAPercentCnt, |
| | | FundFlowEnum.LEVEL_A_PERCENT_CNT.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | chergeRecordId); |
| | | dappFundFlowDao.insert(levelAPercentCntFundFlow); |
| | | chainProducer.sendAntACoinInLevelMsg(levelAPercentCntFundFlow.getId()); |
| | | |
| | | /** |
| | | * 更新用户为有效用户 |
| | | */ |
| | | dappMemberDao.updateMemberActiveStatus(1,memberId); |
| | | |
| | | return realPerkAmount; |
| | | } |
| | | |
| | | @Override |
| | |
| | | BigDecimal amount = dappFundFlowEntity.getAmount(); |
| | | //目标地址 |
| | | String address = AppContants.ADDRESS_A_POOL_PEOJECT; |
| | | if(5 == dappFundFlowEntity.getType()){ |
| | | address = AppContants.ADDRESS_A_POOL_PEOJECT; |
| | | }else if(34 == dappFundFlowEntity.getType() ){ |
| | | address = ChainEnum.BSC_USDT_W_POOL.getAddress(); |
| | | }else{ |
| | | return; |
| | | } |
| | | /** |
| | | * 发起USDT转账 |
| | | */ |
| | |
| | | dappFundFlowDao.updateById(dappFundFlowEntity); |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | String address = AppContants.ADDRESS_A_POOL_PEOJECT; |
| | | /** |
| | | * 发起USDT转账 |
| | | */ |
| | | String hash = ChainService.getInstance(ChainEnum.BSC_USDT_A_POOL.name()).transfer(address, new BigDecimal("0.01")); |
| | | } |
| | | // public static void main(String[] args) { |
| | | // String address = "0x7a9bfE048d110EF90a467803653f9B8666f9096C"; |
| | | // /** |
| | | // * 发起USDT转账 |
| | | // */ |
| | | // String hash = ChainService.getInstance(ChainEnum.BSC_USDT_W_POOL_CONTRACT.name()).transferUSDT(address, new BigDecimal("0.99")); |
| | | // System.out.println(hash); |
| | | // } |
| | | |
| | | @Override |
| | | public void AntACoinBPollInMsg(Long id) { |
| | |
| | | |
| | | @Override |
| | | public void antACoinInNodeMsg(Long id) { |
| | | /** |
| | | * 全网节点99名.享受全网5%分红 |
| | | */ |
| | | log.info("{}",id); |
| | | //获取对应的流水记录 |
| | | DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectInfoById(id); |
| | | if(ObjectUtil.isEmpty(dappFundFlowEntity)){ |
| | | return; |
| | | } |
| | | //金额 |
| | | BigDecimal amount = dappFundFlowEntity.getAmount(); |
| | | /** |
| | | * 获取全网的超级节点个数 |
| | | */ |
| | | List<DappMemberNodeEntity> dappMemberNodeEntities = dappMemberNodeMapper.selectNodeByNodeCode(NodeCodeEnum.SUPER_NODE.getCode()); |
| | | if(CollUtil.isNotEmpty(dappMemberNodeEntities)){ |
| | | BigDecimal divide = amount.divide(new BigDecimal(dappMemberNodeEntities.size()), 4, BigDecimal.ROUND_DOWN); |
| | | for(DappMemberNodeEntity dappMemberNodeEntity : dappMemberNodeEntities){ |
| | | Long memberId = dappMemberNodeEntity.getMemberId(); |
| | | |
| | | DappFundFlowEntity nodeAPercentFundFlow = new DappFundFlowEntity( |
| | | memberId, |
| | | divide, |
| | | FundFlowEnum.NODE_A_PERCENT_TO_MEMBER.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | dappFundFlowEntity.getSystemProfitId()); |
| | | dappFundFlowDao.insert(nodeAPercentFundFlow); |
| | | //用户的A币账户增加divide数量 |
| | | dappWalletService.updateWalletMineWithLock(divide,memberId,1); |
| | | } |
| | | dappFundFlowEntity.setFromHash("已分成"+dappMemberNodeEntities.size()+"人"); |
| | | }else{ |
| | | dappFundFlowEntity.setFromHash("已分成0人"); |
| | | dappWalletService.updateWalletMineWithLock(amount,1L,1); |
| | | } |
| | | dappFundFlowEntity.setStatus(2); |
| | | dappFundFlowDao.updateById(dappFundFlowEntity); |
| | | // /** |
| | | // * 全网节点99名.享受全网5%分红 |
| | | // */ |
| | | // log.info("{}",id); |
| | | // //获取对应的流水记录 |
| | | // DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectInfoById(id); |
| | | // if(ObjectUtil.isEmpty(dappFundFlowEntity)){ |
| | | // return; |
| | | // } |
| | | // //金额 |
| | | // BigDecimal amount = dappFundFlowEntity.getAmount(); |
| | | // /** |
| | | // * 获取全网的超级节点个数 |
| | | // */ |
| | | // List<DappMemberNodeEntity> dappMemberNodeEntities = dappMemberNodeMapper.selectNodeByNodeCode(NodeCodeEnum.SUPER_NODE.getCode()); |
| | | // if(CollUtil.isNotEmpty(dappMemberNodeEntities)){ |
| | | // BigDecimal divide = amount.divide(new BigDecimal(dappMemberNodeEntities.size()), 4, BigDecimal.ROUND_DOWN); |
| | | // for(DappMemberNodeEntity dappMemberNodeEntity : dappMemberNodeEntities){ |
| | | // Long memberId = dappMemberNodeEntity.getMemberId(); |
| | | // |
| | | // DappFundFlowEntity nodeAPercentFundFlow = new DappFundFlowEntity( |
| | | // memberId, |
| | | // divide, |
| | | // FundFlowEnum.NODE_A_PERCENT_TO_MEMBER.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // dappFundFlowEntity.getSystemProfitId()); |
| | | // dappFundFlowDao.insert(nodeAPercentFundFlow); |
| | | // //用户的A币账户增加divide数量 |
| | | // dappWalletService.updateWalletMineWithLock(divide,memberId,1); |
| | | // } |
| | | // dappFundFlowEntity.setFromHash("已分成"+dappMemberNodeEntities.size()+"人"); |
| | | // }else{ |
| | | // dappFundFlowEntity.setFromHash("已分成0人"); |
| | | // dappWalletService.updateWalletMineWithLock(amount,1L,1); |
| | | // } |
| | | // dappFundFlowEntity.setStatus(2); |
| | | // dappFundFlowDao.updateById(dappFundFlowEntity); |
| | | } |
| | | |
| | | @Override |
| | |
| | | * |
| | | * DAO5直推DAO5平级拿一代,视为平级奖,享受原有DAO5一个点,额外再加一个点分红。享受双份收益,合计2%加权分红 |
| | | */ |
| | | log.info("{}",id); |
| | | //获取对应的流水记录 |
| | | DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectInfoById(id); |
| | | if(ObjectUtil.isEmpty(dappFundFlowEntity)){ |
| | | return; |
| | | } |
| | | /** |
| | | * 极差总金额 |
| | | */ |
| | | BigDecimal amountTC = dappFundFlowEntity.getAmount(); |
| | | |
| | | Long systemProfitId = dappFundFlowEntity.getSystemProfitId(); |
| | | DappChargeUsdtEntity dappChargeUsdtEntity = dappChargeUsdtMapper.selectById(systemProfitId); |
| | | Long memberId = dappChargeUsdtEntity.getMemberId(); |
| | | DappMemberEntity mallMember = dappMemberDao.selectById(memberId); |
| | | |
| | | /** |
| | | * 团队下不同代理级别获取不用的比例新增业绩补贴 |
| | | */ |
| | | if(StrUtil.isNotEmpty(mallMember.getRefererIds())){ |
| | | |
| | | String referrerIds = mallMember.getRefererIds(); |
| | | List<String> referrerIdList = StrUtil.splitTrim(referrerIds, ","); |
| | | if(CollUtil.isNotEmpty(referrerIdList)){ |
| | | List<DappMemberEntity> mallMemberTeamPerk = dappMemberDao.selectByInviteIds(referrerIdList); |
| | | |
| | | if(CollUtil.isNotEmpty(mallMemberTeamPerk)){ |
| | | //初始级别 |
| | | String levelNormal = MemberLevelEnum.NODE_1.getType(); |
| | | //初始团队新增业绩补贴 |
| | | BigDecimal teamIncomePerkNormal = BigDecimal.ZERO; |
| | | //补贴总数 |
| | | BigDecimal teamIncomePerkTotal = BigDecimal.ZERO; |
| | | |
| | | for(DappMemberEntity teamPerkMember : mallMemberTeamPerk){ |
| | | String level = teamPerkMember.getAccountType(); |
| | | //比较两个级别的大小,level大于levelNormal返回1 |
| | | int compareMin = MemberLevelEnum.NODE_1.compareLevel(level, levelNormal); |
| | | int compareMax = MemberLevelEnum.NODE_1.compareLevel(MemberLevelEnum.NODE_5.getType(), level); |
| | | if(compareMin >= 1 && compareMax >= 1){ |
| | | Long teamPerkMemberId = teamPerkMember.getId(); |
| | | DataDictionaryCustom teamPerkMemberDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | "NODE_PERK", level); |
| | | |
| | | NodePerk nodePerk = JSONObject.parseObject(teamPerkMemberDic.getValue(), NodePerk.class); |
| | | BigDecimal teamIncomePerk = nodePerk.getTeamIncomePerk(); |
| | | //极差 |
| | | teamIncomePerk = teamIncomePerk.subtract(teamIncomePerkNormal); |
| | | |
| | | BigDecimal teamIncomePerkAmount = amountTC.multiply(teamIncomePerk).setScale(4, BigDecimal.ROUND_DOWN); |
| | | |
| | | BigDecimal nodeAPercentFundFlowFlag = this.getAndUpdateMemberPerk(teamPerkMemberId, teamIncomePerkAmount); |
| | | if(nodeAPercentFundFlowFlag.compareTo(BigDecimal.ZERO) > 0){ |
| | | DappFundFlowEntity nodeAPercentFundFlow = new DappFundFlowEntity( |
| | | teamPerkMemberId, |
| | | nodeAPercentFundFlowFlag, |
| | | FundFlowEnum.LEVEL_A_PERCENT_CNT_MEMBER.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | dappFundFlowEntity.getSystemProfitId()); |
| | | dappFundFlowDao.insert(nodeAPercentFundFlow); |
| | | //用户的A币账户增加divide数量 |
| | | dappWalletService.updateWalletMineWithLock(nodeAPercentFundFlowFlag,teamPerkMemberId,1); |
| | | //累加补贴总数 |
| | | teamIncomePerkTotal = teamIncomePerkTotal.add(nodeAPercentFundFlowFlag); |
| | | } |
| | | |
| | | //初始级别变成当前遍历的会员的级别 |
| | | levelNormal = level; |
| | | //初始新增业绩补贴比例变成当前会员级别的补贴比例 |
| | | teamIncomePerkNormal = nodePerk.getTeamIncomePerk(); |
| | | } |
| | | } |
| | | //更新总数据 |
| | | dappFundFlowEntity.setFromHash("已分成"+teamIncomePerkTotal.setScale(4,BigDecimal.ROUND_DOWN)); |
| | | dappFundFlowEntity.setStatus(2); |
| | | dappFundFlowDao.updateById(dappFundFlowEntity); |
| | | BigDecimal subtract = amountTC.subtract(teamIncomePerkTotal); |
| | | //用户的A币账户增加divide数量 |
| | | if(amountTC.compareTo(teamIncomePerkTotal) > 0){ |
| | | DappFundFlowEntity nodeAPercentFundFlowAva = new DappFundFlowEntity( |
| | | 1L, |
| | | subtract, |
| | | FundFlowEnum.LEVEL_A_PERCENT_CNT_MEMBER.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | systemProfitId); |
| | | dappFundFlowDao.insert(nodeAPercentFundFlowAva); |
| | | dappWalletService.updateWalletMineWithLock(subtract, |
| | | 1L,1); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | /** |
| | | * 极差的dao3、dao4、dao5级别全网分红入自己的底池,每天按20%平分 |
| | | */ |
| | | //获取新增数量 |
| | | DataDictionaryCustom nodeThreeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.NODE_3.getType(), |
| | | PoolEnum.NODE_3.getCode()); |
| | | NodePerk nodePerk = JSONObject.parseObject(nodeThreeDic.getValue(), NodePerk.class); |
| | | BigDecimal averagePerk = nodePerk.getAveragePerk(); |
| | | BigDecimal averagePerkCnt = amountTC.multiply(averagePerk).setScale(4, BigDecimal.ROUND_DOWN); |
| | | |
| | | BigDecimal averagePerkCntAva = nodePoolPerk(averagePerkCnt, MemberLevelEnum.NODE_3.getType(), FundFlowEnum.DAO_3_NODE_PERK.getCode()); |
| | | |
| | | //用户的A币账户增加divide数量 |
| | | if(averagePerkCnt.compareTo(averagePerkCntAva) > 0){ |
| | | DappFundFlowEntity nodeAPercentFundFlowAva = new DappFundFlowEntity( |
| | | 1L, |
| | | averagePerkCnt.subtract(averagePerkCntAva), |
| | | FundFlowEnum.DAO_3_NODE_PERK.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | systemProfitId); |
| | | dappFundFlowDao.insert(nodeAPercentFundFlowAva); |
| | | dappWalletService.updateWalletMineWithLock(averagePerkCnt.subtract(averagePerkCntAva), |
| | | 1L,1); |
| | | } |
| | | //生成流水记录 |
| | | DappFundFlowEntity nodeThreeFundFlow = new DappFundFlowEntity( |
| | | 1L, |
| | | averagePerkCnt, |
| | | FundFlowEnum.DAO_3_CNT_MEMBER.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | dappChargeUsdtEntity.getId()); |
| | | dappFundFlowDao.insert(nodeThreeFundFlow); |
| | | //更新底池 |
| | | DataDictionaryCustom nodeThreePoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.NODE_3_POOL.getType(), |
| | | PoolEnum.NODE_3_POOL.getCode()); |
| | | BigDecimal nodeThreePool = new BigDecimal(nodeThreePoolDic.getValue()); |
| | | nodeThreePool = nodeThreePool.add(averagePerkCnt).setScale(4,BigDecimal.ROUND_DOWN); |
| | | nodeThreePoolDic.setValue(nodeThreePool.toString()); |
| | | dataDictionaryCustomMapper.updateById(nodeThreePoolDic); |
| | | |
| | | DataDictionaryCustom nodeFourDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.NODE_4.getType(), |
| | | PoolEnum.NODE_4.getCode()); |
| | | NodePerk nodeFourDicPerk = JSONObject.parseObject(nodeFourDic.getValue(), NodePerk.class); |
| | | BigDecimal averagePerkFour = nodeFourDicPerk.getAveragePerk(); |
| | | BigDecimal averagePerkFourCnt = amountTC.multiply(averagePerkFour).setScale(4, BigDecimal.ROUND_DOWN); |
| | | |
| | | BigDecimal averagePerkFourCntAva = nodePoolPerk(averagePerkFourCnt, MemberLevelEnum.NODE_4.getType(), FundFlowEnum.DAO_4_NODE_PERK.getCode()); |
| | | //用户的A币账户增加divide数量 |
| | | if(averagePerkFourCnt.compareTo(averagePerkFourCntAva) > 0){ |
| | | DappFundFlowEntity nodeAPercentFundFlowAva = new DappFundFlowEntity( |
| | | 1L, |
| | | averagePerkFourCnt.subtract(averagePerkFourCntAva), |
| | | FundFlowEnum.DAO_4_NODE_PERK.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | systemProfitId); |
| | | dappFundFlowDao.insert(nodeAPercentFundFlowAva); |
| | | dappWalletService.updateWalletMineWithLock(averagePerkFourCnt.subtract(averagePerkFourCntAva), |
| | | 1L,1); |
| | | } |
| | | DappFundFlowEntity nodeFourFundFlow = new DappFundFlowEntity( |
| | | 1L, |
| | | averagePerkFourCnt, |
| | | FundFlowEnum.DAO_4_CNT_MEMBER.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | dappChargeUsdtEntity.getId()); |
| | | dappFundFlowDao.insert(nodeFourFundFlow); |
| | | DataDictionaryCustom nodeFourPoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.NODE_4_POOL.getType(), |
| | | PoolEnum.NODE_4_POOL.getCode()); |
| | | BigDecimal nodeFourPool = new BigDecimal(nodeFourPoolDic.getValue()); |
| | | nodeFourPool = nodeFourPool.add(averagePerkFourCnt).setScale(4,BigDecimal.ROUND_DOWN); |
| | | nodeFourPoolDic.setValue(nodeFourPool.toString()); |
| | | dataDictionaryCustomMapper.updateById(nodeFourPoolDic); |
| | | |
| | | DataDictionaryCustom nodeFiveDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.NODE_5.getType(), |
| | | PoolEnum.NODE_5.getCode()); |
| | | NodePerk nodeFiveDicPerk = JSONObject.parseObject(nodeFiveDic.getValue(), NodePerk.class); |
| | | BigDecimal averagePerkFive = nodeFiveDicPerk.getAveragePerk(); |
| | | BigDecimal averagePerkFiveCnt = amountTC.multiply(averagePerkFive).setScale(4, BigDecimal.ROUND_DOWN); |
| | | |
| | | BigDecimal averagePerkFiveCntAva = nodePoolPerk(averagePerkFiveCnt, MemberLevelEnum.NODE_5.getType(), FundFlowEnum.DAO_5_NODE_PERK.getCode()); |
| | | //用户的A币账户增加divide数量 |
| | | if(averagePerkFiveCnt.compareTo(averagePerkFiveCntAva) > 0){ |
| | | DappFundFlowEntity nodeAPercentFundFlowAva = new DappFundFlowEntity( |
| | | 1L, |
| | | averagePerkFiveCnt.subtract(averagePerkFiveCntAva), |
| | | FundFlowEnum.DAO_5_NODE_PERK.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | systemProfitId); |
| | | dappFundFlowDao.insert(nodeAPercentFundFlowAva); |
| | | dappWalletService.updateWalletMineWithLock(averagePerkFiveCnt.subtract(averagePerkFiveCntAva), |
| | | 1L,1); |
| | | } |
| | | DappFundFlowEntity nodeFiveFundFlow = new DappFundFlowEntity( |
| | | 1L, |
| | | averagePerkFiveCnt, |
| | | FundFlowEnum.DAO_5_CNT_MEMBER.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | dappChargeUsdtEntity.getId()); |
| | | dappFundFlowDao.insert(nodeFiveFundFlow); |
| | | DataDictionaryCustom nodeFivePoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.NODE_5_POOL.getType(), |
| | | PoolEnum.NODE_5_POOL.getCode()); |
| | | BigDecimal nodeFivePool = new BigDecimal(nodeFivePoolDic.getValue()); |
| | | nodeFivePool = nodeFivePool.add(averagePerkFiveCnt).setScale(4,BigDecimal.ROUND_DOWN); |
| | | nodeFivePoolDic.setValue(nodeFivePool.toString()); |
| | | dataDictionaryCustomMapper.updateById(nodeFivePoolDic); |
| | | |
| | | /** |
| | | * DAO5直推DAO5平级拿一代,视为平级奖,享受原有DAO5一个点,额外再加一个点分红。享受双份收益,合计2%加权分红 |
| | | */ |
| | | DataDictionaryCustom nodeFiveEqualsDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.NODE_5_EQUALS.getType(), |
| | | PoolEnum.NODE_5_EQUALS.getCode()); |
| | | BigDecimal nodeFiveEquals = new BigDecimal(nodeFiveEqualsDic.getValue()); |
| | | BigDecimal nodeFiveEqualsCnt = amountTC.multiply(nodeFiveEquals).setScale(4, BigDecimal.ROUND_DOWN); |
| | | |
| | | BigDecimal nodeFiveEqualsCntAva = nodePoolEqualsPerk(nodeFiveEqualsCnt, MemberLevelEnum.NODE_5.getType(), FundFlowEnum.DAO_5_NODE_EQUALS_PERK.getCode()); |
| | | //用户的A币账户增加divide数量 |
| | | if(nodeFiveEqualsCnt.compareTo(nodeFiveEqualsCntAva) > 0){ |
| | | DappFundFlowEntity nodeAPercentFundFlowAva = new DappFundFlowEntity( |
| | | 1L, |
| | | nodeFiveEqualsCnt.subtract(nodeFiveEqualsCntAva), |
| | | FundFlowEnum.DAO_5_NODE_EQUALS_PERK.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | systemProfitId); |
| | | dappFundFlowDao.insert(nodeAPercentFundFlowAva); |
| | | dappWalletService.updateWalletMineWithLock(nodeFiveEqualsCnt.subtract(nodeFiveEqualsCntAva), |
| | | 1L,1); |
| | | } |
| | | DappFundFlowEntity nodeFiveEqualsFundFlow = new DappFundFlowEntity( |
| | | 1L, |
| | | nodeFiveEqualsCnt, |
| | | FundFlowEnum.DAO_5_CNT_EQUALS_MEMBER.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | dappChargeUsdtEntity.getId()); |
| | | dappFundFlowDao.insert(nodeFiveEqualsFundFlow); |
| | | DataDictionaryCustom nodeFiveEqualsPoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.NODE_5_EQUALS_POOL.getType(), |
| | | PoolEnum.NODE_5_EQUALS_POOL.getCode()); |
| | | BigDecimal nodeFiveEqualsPool = new BigDecimal(nodeFiveEqualsPoolDic.getValue()); |
| | | nodeFiveEqualsPool = nodeFiveEqualsPool.add(nodeFiveEqualsCnt).setScale(4,BigDecimal.ROUND_DOWN); |
| | | nodeFiveEqualsPoolDic.setValue(nodeFiveEqualsPool.toString()); |
| | | dataDictionaryCustomMapper.updateById(nodeFiveEqualsPoolDic); |
| | | // log.info("{}",id); |
| | | // //获取对应的流水记录 |
| | | // DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectInfoById(id); |
| | | // if(ObjectUtil.isEmpty(dappFundFlowEntity)){ |
| | | // return; |
| | | // } |
| | | // /** |
| | | // * 极差总金额 |
| | | // */ |
| | | // BigDecimal amountTC = dappFundFlowEntity.getAmount(); |
| | | // |
| | | // Long systemProfitId = dappFundFlowEntity.getSystemProfitId(); |
| | | // DappChargeUsdtEntity dappChargeUsdtEntity = dappChargeUsdtMapper.selectById(systemProfitId); |
| | | // Long memberId = dappChargeUsdtEntity.getMemberId(); |
| | | // DappMemberEntity mallMember = dappMemberDao.selectById(memberId); |
| | | // |
| | | // /** |
| | | // * 团队下不同代理级别获取不用的比例新增业绩补贴 |
| | | // */ |
| | | // if(StrUtil.isNotEmpty(mallMember.getRefererIds())){ |
| | | // |
| | | // String referrerIds = mallMember.getRefererIds(); |
| | | // List<String> referrerIdList = StrUtil.splitTrim(referrerIds, ","); |
| | | // if(CollUtil.isNotEmpty(referrerIdList)){ |
| | | // List<DappMemberEntity> mallMemberTeamPerk = dappMemberDao.selectByInviteIds(referrerIdList); |
| | | // |
| | | // if(CollUtil.isNotEmpty(mallMemberTeamPerk)){ |
| | | // //初始级别 |
| | | // String levelNormal = MemberLevelEnum.NODE_1.getType(); |
| | | // //初始团队新增业绩补贴 |
| | | // BigDecimal teamIncomePerkNormal = BigDecimal.ZERO; |
| | | // //补贴总数 |
| | | // BigDecimal teamIncomePerkTotal = BigDecimal.ZERO; |
| | | // |
| | | // for(DappMemberEntity teamPerkMember : mallMemberTeamPerk){ |
| | | // String level = teamPerkMember.getAccountType(); |
| | | // //比较两个级别的大小,level大于levelNormal返回1 |
| | | // int compareMin = MemberLevelEnum.NODE_1.compareLevel(level, levelNormal); |
| | | // int compareMax = MemberLevelEnum.NODE_1.compareLevel(MemberLevelEnum.NODE_5.getType(), level); |
| | | // if(compareMin >= 1 && compareMax >= 1){ |
| | | // Long teamPerkMemberId = teamPerkMember.getId(); |
| | | // DataDictionaryCustom teamPerkMemberDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // "NODE_PERK", level); |
| | | // |
| | | // NodePerk nodePerk = JSONObject.parseObject(teamPerkMemberDic.getValue(), NodePerk.class); |
| | | // BigDecimal teamIncomePerk = nodePerk.getTeamIncomePerk(); |
| | | // //极差 |
| | | // teamIncomePerk = teamIncomePerk.subtract(teamIncomePerkNormal); |
| | | // |
| | | // BigDecimal teamIncomePerkAmount = amountTC.multiply(teamIncomePerk).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // |
| | | // BigDecimal nodeAPercentFundFlowFlag = this.getAndUpdateMemberPerk(teamPerkMemberId, teamIncomePerkAmount); |
| | | // if(nodeAPercentFundFlowFlag.compareTo(BigDecimal.ZERO) > 0){ |
| | | // DappFundFlowEntity nodeAPercentFundFlow = new DappFundFlowEntity( |
| | | // teamPerkMemberId, |
| | | // nodeAPercentFundFlowFlag, |
| | | // FundFlowEnum.LEVEL_A_PERCENT_CNT_MEMBER.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // dappFundFlowEntity.getSystemProfitId()); |
| | | // dappFundFlowDao.insert(nodeAPercentFundFlow); |
| | | // //用户的A币账户增加divide数量 |
| | | // dappWalletService.updateWalletMineWithLock(nodeAPercentFundFlowFlag,teamPerkMemberId,1); |
| | | // //累加补贴总数 |
| | | // teamIncomePerkTotal = teamIncomePerkTotal.add(nodeAPercentFundFlowFlag); |
| | | // } |
| | | // |
| | | // //初始级别变成当前遍历的会员的级别 |
| | | // levelNormal = level; |
| | | // //初始新增业绩补贴比例变成当前会员级别的补贴比例 |
| | | // teamIncomePerkNormal = nodePerk.getTeamIncomePerk(); |
| | | // } |
| | | // } |
| | | // //更新总数据 |
| | | // dappFundFlowEntity.setFromHash("已分成"+teamIncomePerkTotal.setScale(4,BigDecimal.ROUND_DOWN)); |
| | | // dappFundFlowEntity.setStatus(2); |
| | | // dappFundFlowDao.updateById(dappFundFlowEntity); |
| | | // BigDecimal subtract = amountTC.subtract(teamIncomePerkTotal); |
| | | // //用户的A币账户增加divide数量 |
| | | //// if(amountTC.compareTo(teamIncomePerkTotal) > 0){ |
| | | //// DappFundFlowEntity nodeAPercentFundFlowAva = new DappFundFlowEntity( |
| | | //// 1L, |
| | | //// subtract, |
| | | //// FundFlowEnum.LEVEL_A_PERCENT_CNT_MEMBER.getCode(), |
| | | //// 2, |
| | | //// BigDecimal.ZERO, |
| | | //// null, |
| | | //// systemProfitId); |
| | | //// dappFundFlowDao.insert(nodeAPercentFundFlowAva); |
| | | //// dappWalletService.updateWalletMineWithLock(subtract, |
| | | //// 1L,1); |
| | | //// } |
| | | // } |
| | | // } |
| | | // } |
| | | // /** |
| | | // * 极差的dao3、dao4、dao5级别全网分红入自己的底池,每天按20%平分 |
| | | // */ |
| | | // //获取新增数量 |
| | | // DataDictionaryCustom nodeThreeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.NODE_3.getType(), |
| | | // PoolEnum.NODE_3.getCode()); |
| | | // NodePerk nodePerk = JSONObject.parseObject(nodeThreeDic.getValue(), NodePerk.class); |
| | | // BigDecimal averagePerk = nodePerk.getAveragePerk(); |
| | | // BigDecimal averagePerkCnt = amountTC.multiply(averagePerk).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // |
| | | // BigDecimal averagePerkCntAva = nodePoolPerk(averagePerkCnt, MemberLevelEnum.NODE_3.getType(), FundFlowEnum.DAO_3_NODE_PERK.getCode()); |
| | | // |
| | | // //用户的A币账户增加divide数量 |
| | | // if(averagePerkCnt.compareTo(averagePerkCntAva) > 0){ |
| | | // DappFundFlowEntity nodeAPercentFundFlowAva = new DappFundFlowEntity( |
| | | // 1L, |
| | | // averagePerkCnt.subtract(averagePerkCntAva), |
| | | // FundFlowEnum.DAO_3_NODE_PERK.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // systemProfitId); |
| | | // dappFundFlowDao.insert(nodeAPercentFundFlowAva); |
| | | // dappWalletService.updateWalletMineWithLock(averagePerkCnt.subtract(averagePerkCntAva), |
| | | // AppContants.YL_MEMBER_ID,1); |
| | | // } |
| | | // //生成流水记录 |
| | | // DappFundFlowEntity nodeThreeFundFlow = new DappFundFlowEntity( |
| | | // 1L, |
| | | // averagePerkCnt, |
| | | // FundFlowEnum.DAO_3_CNT_MEMBER.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // dappChargeUsdtEntity.getId()); |
| | | // dappFundFlowDao.insert(nodeThreeFundFlow); |
| | | // //更新底池 |
| | | // DataDictionaryCustom nodeThreePoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.NODE_3_POOL.getType(), |
| | | // PoolEnum.NODE_3_POOL.getCode()); |
| | | // BigDecimal nodeThreePool = new BigDecimal(nodeThreePoolDic.getValue()); |
| | | // nodeThreePool = nodeThreePool.add(averagePerkCnt).setScale(4,BigDecimal.ROUND_DOWN); |
| | | // nodeThreePoolDic.setValue(nodeThreePool.toString()); |
| | | // dataDictionaryCustomMapper.updateById(nodeThreePoolDic); |
| | | // |
| | | // DataDictionaryCustom nodeFourDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.NODE_4.getType(), |
| | | // PoolEnum.NODE_4.getCode()); |
| | | // NodePerk nodeFourDicPerk = JSONObject.parseObject(nodeFourDic.getValue(), NodePerk.class); |
| | | // BigDecimal averagePerkFour = nodeFourDicPerk.getAveragePerk(); |
| | | // BigDecimal averagePerkFourCnt = amountTC.multiply(averagePerkFour).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // |
| | | // BigDecimal averagePerkFourCntAva = nodePoolPerk(averagePerkFourCnt, MemberLevelEnum.NODE_4.getType(), FundFlowEnum.DAO_4_NODE_PERK.getCode()); |
| | | // //用户的A币账户增加divide数量 |
| | | // if(averagePerkFourCnt.compareTo(averagePerkFourCntAva) > 0){ |
| | | // DappFundFlowEntity nodeAPercentFundFlowAva = new DappFundFlowEntity( |
| | | // 1L, |
| | | // averagePerkFourCnt.subtract(averagePerkFourCntAva), |
| | | // FundFlowEnum.DAO_4_NODE_PERK.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // systemProfitId); |
| | | // dappFundFlowDao.insert(nodeAPercentFundFlowAva); |
| | | // dappWalletService.updateWalletMineWithLock(averagePerkFourCnt.subtract(averagePerkFourCntAva), |
| | | // AppContants.YL_MEMBER_ID,1); |
| | | // } |
| | | // DappFundFlowEntity nodeFourFundFlow = new DappFundFlowEntity( |
| | | // 1L, |
| | | // averagePerkFourCnt, |
| | | // FundFlowEnum.DAO_4_CNT_MEMBER.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // dappChargeUsdtEntity.getId()); |
| | | // dappFundFlowDao.insert(nodeFourFundFlow); |
| | | // DataDictionaryCustom nodeFourPoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.NODE_4_POOL.getType(), |
| | | // PoolEnum.NODE_4_POOL.getCode()); |
| | | // BigDecimal nodeFourPool = new BigDecimal(nodeFourPoolDic.getValue()); |
| | | // nodeFourPool = nodeFourPool.add(averagePerkFourCnt).setScale(4,BigDecimal.ROUND_DOWN); |
| | | // nodeFourPoolDic.setValue(nodeFourPool.toString()); |
| | | // dataDictionaryCustomMapper.updateById(nodeFourPoolDic); |
| | | // |
| | | // DataDictionaryCustom nodeFiveDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.NODE_5.getType(), |
| | | // PoolEnum.NODE_5.getCode()); |
| | | // NodePerk nodeFiveDicPerk = JSONObject.parseObject(nodeFiveDic.getValue(), NodePerk.class); |
| | | // BigDecimal averagePerkFive = nodeFiveDicPerk.getAveragePerk(); |
| | | // BigDecimal averagePerkFiveCnt = amountTC.multiply(averagePerkFive).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // |
| | | // BigDecimal averagePerkFiveCntAva = nodePoolPerk(averagePerkFiveCnt, MemberLevelEnum.NODE_5.getType(), FundFlowEnum.DAO_5_NODE_PERK.getCode()); |
| | | // //用户的A币账户增加divide数量 |
| | | // if(averagePerkFiveCnt.compareTo(averagePerkFiveCntAva) > 0){ |
| | | // DappFundFlowEntity nodeAPercentFundFlowAva = new DappFundFlowEntity( |
| | | // 1L, |
| | | // averagePerkFiveCnt.subtract(averagePerkFiveCntAva), |
| | | // FundFlowEnum.DAO_5_NODE_PERK.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // systemProfitId); |
| | | // dappFundFlowDao.insert(nodeAPercentFundFlowAva); |
| | | // dappWalletService.updateWalletMineWithLock(averagePerkFiveCnt.subtract(averagePerkFiveCntAva), |
| | | // AppContants.YL_MEMBER_ID,1); |
| | | // } |
| | | // DappFundFlowEntity nodeFiveFundFlow = new DappFundFlowEntity( |
| | | // 1L, |
| | | // averagePerkFiveCnt, |
| | | // FundFlowEnum.DAO_5_CNT_MEMBER.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // dappChargeUsdtEntity.getId()); |
| | | // dappFundFlowDao.insert(nodeFiveFundFlow); |
| | | // DataDictionaryCustom nodeFivePoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.NODE_5_POOL.getType(), |
| | | // PoolEnum.NODE_5_POOL.getCode()); |
| | | // BigDecimal nodeFivePool = new BigDecimal(nodeFivePoolDic.getValue()); |
| | | // nodeFivePool = nodeFivePool.add(averagePerkFiveCnt).setScale(4,BigDecimal.ROUND_DOWN); |
| | | // nodeFivePoolDic.setValue(nodeFivePool.toString()); |
| | | // dataDictionaryCustomMapper.updateById(nodeFivePoolDic); |
| | | // |
| | | // /** |
| | | // * DAO5直推DAO5平级拿一代,视为平级奖,享受原有DAO5一个点,额外再加一个点分红。享受双份收益,合计2%加权分红 |
| | | // */ |
| | | // DataDictionaryCustom nodeFiveEqualsDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.NODE_5_EQUALS.getType(), |
| | | // PoolEnum.NODE_5_EQUALS.getCode()); |
| | | // BigDecimal nodeFiveEquals = new BigDecimal(nodeFiveEqualsDic.getValue()); |
| | | // BigDecimal nodeFiveEqualsCnt = amountTC.multiply(nodeFiveEquals).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // |
| | | // BigDecimal nodeFiveEqualsCntAva = nodePoolEqualsPerk(nodeFiveEqualsCnt, MemberLevelEnum.NODE_5.getType(), FundFlowEnum.DAO_5_NODE_EQUALS_PERK.getCode()); |
| | | // //用户的A币账户增加divide数量 |
| | | // if(nodeFiveEqualsCnt.compareTo(nodeFiveEqualsCntAva) > 0){ |
| | | // DappFundFlowEntity nodeAPercentFundFlowAva = new DappFundFlowEntity( |
| | | // 1L, |
| | | // nodeFiveEqualsCnt.subtract(nodeFiveEqualsCntAva), |
| | | // FundFlowEnum.DAO_5_NODE_EQUALS_PERK.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // systemProfitId); |
| | | // dappFundFlowDao.insert(nodeAPercentFundFlowAva); |
| | | // dappWalletService.updateWalletMineWithLock(nodeFiveEqualsCnt.subtract(nodeFiveEqualsCntAva), |
| | | // AppContants.YL_MEMBER_ID,1); |
| | | // } |
| | | // DappFundFlowEntity nodeFiveEqualsFundFlow = new DappFundFlowEntity( |
| | | // 1L, |
| | | // nodeFiveEqualsCnt, |
| | | // FundFlowEnum.DAO_5_CNT_EQUALS_MEMBER.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // dappChargeUsdtEntity.getId()); |
| | | // dappFundFlowDao.insert(nodeFiveEqualsFundFlow); |
| | | // DataDictionaryCustom nodeFiveEqualsPoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.NODE_5_EQUALS_POOL.getType(), |
| | | // PoolEnum.NODE_5_EQUALS_POOL.getCode()); |
| | | // BigDecimal nodeFiveEqualsPool = new BigDecimal(nodeFiveEqualsPoolDic.getValue()); |
| | | // nodeFiveEqualsPool = nodeFiveEqualsPool.add(nodeFiveEqualsCnt).setScale(4,BigDecimal.ROUND_DOWN); |
| | | // nodeFiveEqualsPoolDic.setValue(nodeFiveEqualsPool.toString()); |
| | | // dataDictionaryCustomMapper.updateById(nodeFiveEqualsPoolDic); |
| | | } |
| | | |
| | | @Override |
| | |
| | | //获取type级别的会员 |
| | | List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectMemberByAccountTypeAnd(type); |
| | | //每日补贴总数 |
| | | BigDecimal nodePerk = nodeFivePoolDicCnt.multiply(AppContants.NODE_PERK_PERCENT); |
| | | // BigDecimal nodePerk = nodeFivePoolDicCnt.multiply(AppContants.NODE_PERK_PERCENT); |
| | | BigDecimal nodePerk = nodeFivePoolDicCnt; |
| | | if(CollUtil.isNotEmpty(dappMemberEntities)){ |
| | | //每人的补贴 |
| | | BigDecimal averagePerk = nodePerk.divide(new BigDecimal(dappMemberEntities.size()), 4, BigDecimal.ROUND_DOWN); |
| | |
| | | public BigDecimal superNodePoolPerk(BigDecimal nodeFivePoolDicCnt, String code, int code1) { |
| | | BigDecimal realPerkAmount = BigDecimal.ZERO; |
| | | //获取type级别的会员 |
| | | List<DappMemberNodeEntity> dappMemberNodeEntities = dappMemberNodeMapper.selectNodeByNodeCode(NodeCodeEnum.SUPER_NODE.getCode()); |
| | | // List<DappMemberNodeEntity> dappMemberNodeEntities = dappMemberNodeMapper.selectNodeByNodeCode(NodeCodeEnum.SUPER_NODE.getCode()); |
| | | List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectByNodetype(); |
| | | //每日补贴总数 |
| | | // BigDecimal nodePerk = nodeFivePoolDicCnt.multiply(AppContants.NODE_PERK_PERCENT); |
| | | BigDecimal nodePerk = nodeFivePoolDicCnt; |
| | | if(CollUtil.isNotEmpty(dappMemberNodeEntities)){ |
| | | if(CollUtil.isNotEmpty(dappMemberEntities)){ |
| | | //每人的补贴 |
| | | BigDecimal averagePerk = nodePerk.divide(new BigDecimal(dappMemberNodeEntities.size()), 4, BigDecimal.ROUND_DOWN); |
| | | BigDecimal averagePerk = nodePerk.divide(new BigDecimal(dappMemberEntities.size()), 4, BigDecimal.ROUND_DOWN); |
| | | |
| | | for(DappMemberNodeEntity dappMemberNodeEntity : dappMemberNodeEntities){ |
| | | for(DappMemberEntity dappMemberEntitie : dappMemberEntities){ |
| | | |
| | | DappFundFlowEntity fundFlowToMember = new DappFundFlowEntity( |
| | | dappMemberNodeEntity.getMemberId(), |
| | | dappMemberEntitie.getId(), |
| | | averagePerk, |
| | | code1, |
| | | 2, |
| | | BigDecimal.ZERO); |
| | | dappFundFlowDao.insert(fundFlowToMember); |
| | | //用户的A币账户增加memberGetACnt数量 |
| | | dappWalletService.updateWalletMineWithLock(averagePerk,dappMemberNodeEntity.getMemberId(),1); |
| | | dappWalletService.updateWalletMineWithLock(averagePerk,dappMemberEntitie.getId(),1); |
| | | |
| | | realPerkAmount = realPerkAmount.add(averagePerk); |
| | | } |
| | |
| | | * 发起USDT转账 |
| | | */ |
| | | log.info("amount:{},address:{}",amount,address); |
| | | String hash = ChainService.getInstance(ChainEnum.BSC_USDT_W_POOL.name()).transfer(address, amount); |
| | | |
| | | String hash = ChainService.getInstance(ChainEnum.BSC_USDT_W_POOL_CONTRACT.name()).transferUSDT(address, amount); |
| | | if(StrUtil.isEmpty(hash)){ |
| | | // hash = ChainService.getInstance(ChainEnum.BSC_USDT_W_POOL.name()).transfer(address, amount); |
| | | return; |
| | | } |
| | | // if(StrUtil.isEmpty(hash)){ |
| | | // return; |
| | | // } |
| | | log.info("{},{}",id,hash); |
| | | dappFundFlowEntity.setFromHash(hash); |
| | | dappFundFlowEntity.setStatus(2); |
| | | dappFundFlowDao.updateById(dappFundFlowEntity); |
| | | } |
| | | |
| | | /** |
| | | * 紧急提现方法 |
| | | */ |
| | | public static void main(String[] args) { |
| | | BigDecimal amount = new BigDecimal("0.01"); |
| | | String address = "0xB3cF9669F398f444DfCAebbAd2A49bF32ba41fE3"; |
| | | |
| | | String hash = ChainService.getInstance(ChainEnum.BSC_USDT_W_POOL_CONTRACT.name()).transferUSDT(address, amount); |
| | | |
| | | System.out.println(hash); |
| | | |
| | | |
| | | // int i = ChainService.getInstance(ChainEnum.BSC_TFC.name()).allowanceCnt("0x80098f854950f9327C4F4E747d285Fd2d41fbf3e"); |
| | | } |
| | | |
| | | @Override |
| | | public void aCoinFire() { |
| | | /** |
| | | * A币技术做到资产钱包燃烧,闪兑钱包也要燃烧0.1%每小时 |
| | | */ |
| | | BigDecimal totalCnt = BigDecimal.ZERO; |
| | | //闪兑钱包 |
| | | List<DappWalletCoinEntity> walletCoinEntities = dappWalletCoinDao.selectAmountThanZero(); |
| | | if(CollUtil.isNotEmpty(walletCoinEntities)){ |
| | | for(DappWalletCoinEntity dappWalletCoinEntity : walletCoinEntities){ |
| | | BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount(); |
| | | BigDecimal fireCnt = availableAmount.multiply(new BigDecimal("0.001")).setScale(4,BigDecimal.ROUND_DOWN); |
| | | dappWalletService.updateWalletCoinWithLock(fireCnt,dappWalletCoinEntity.getMemberId(),2); |
| | | totalCnt = totalCnt.add(fireCnt); |
| | | } |
| | | } |
| | | //资产钱包 |
| | | List<DappWalletMineEntity> walletMineEntities = dappWalletMineDao.selectAmountThanZero(); |
| | | if(CollUtil.isNotEmpty(walletMineEntities)){ |
| | | for(DappWalletMineEntity dappWalletMineEntity : walletMineEntities){ |
| | | BigDecimal availableAmount = dappWalletMineEntity.getAvailableAmount(); |
| | | BigDecimal fireCnt = availableAmount.multiply(new BigDecimal("0.001")).setScale(4,BigDecimal.ROUND_DOWN); |
| | | dappWalletService.updateWalletMineWithLock(fireCnt,dappWalletMineEntity.getMemberId(),2); |
| | | totalCnt = totalCnt.add(fireCnt); |
| | | } |
| | | } |
| | | if(BigDecimal.ZERO.compareTo(totalCnt) >= 0){ |
| | | return; |
| | | } |
| | | |
| | | totalCnt = totalCnt.setScale(4,BigDecimal.ROUND_DOWN); |
| | | /** |
| | | * 插入每小时燃烧的资金流水 |
| | | */ |
| | | DappFundFlowEntity dappFundFlowEntity = new DappFundFlowEntity(1L, totalCnt, FundFlowEnum.A_COIN_FIRE.getCode(), 2, BigDecimal.ZERO); |
| | | dappFundFlowDao.insert(dappFundFlowEntity); |
| | | /** |
| | | * 更新A币的价格 |
| | | */ |
| | | DataDictionaryCustom coinACntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.COIN_A_CNT.getType(), |
| | | PoolEnum.COIN_A_CNT.getCode()); |
| | | BigDecimal coinACnt = new BigDecimal(coinACntDic.getValue()); |
| | | coinACnt = coinACnt.subtract(totalCnt); |
| | | coinACntDic.setValue(coinACnt.toString()); |
| | | dataDictionaryCustomMapper.updateById(coinACntDic); |
| | | |
| | | DataDictionaryCustom coinAUsdtDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.COIN_A_USDT_PRICE.getType(), |
| | | PoolEnum.COIN_A_USDT_PRICE.getCode()); |
| | | BigDecimal coinAUsdt = new BigDecimal(coinAUsdtDic.getValue()); |
| | | |
| | | DataDictionaryCustom coinAPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.COIN_A_PRICE.getType(), |
| | | PoolEnum.COIN_A_PRICE.getCode()); |
| | | BigDecimal coinAPrice = coinAUsdt.divide(coinACnt,8,BigDecimal.ROUND_DOWN); |
| | | coinAPriceDic.setValue(coinAPrice.toString()); |
| | | dataDictionaryCustomMapper.updateById(coinAPriceDic); |
| | | |
| | | chainProducer.sendAntKLineMsg(0); |
| | | // /** |
| | | // * A币技术做到资产钱包燃烧,闪兑钱包也要燃烧0.1%每小时 |
| | | // */ |
| | | // BigDecimal totalCnt = BigDecimal.ZERO; |
| | | // //闪兑钱包 |
| | | // List<DappWalletCoinEntity> walletCoinEntities = dappWalletCoinDao.selectAmountThanZero(); |
| | | // if(CollUtil.isNotEmpty(walletCoinEntities)){ |
| | | // for(DappWalletCoinEntity dappWalletCoinEntity : walletCoinEntities){ |
| | | // BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount(); |
| | | // BigDecimal fireCnt = availableAmount.multiply(new BigDecimal("0.001")).setScale(4,BigDecimal.ROUND_DOWN); |
| | | // dappWalletService.updateWalletCoinWithLock(fireCnt,dappWalletCoinEntity.getMemberId(),2); |
| | | // totalCnt = totalCnt.add(fireCnt); |
| | | // } |
| | | // } |
| | | // //资产钱包 |
| | | // List<DappWalletMineEntity> walletMineEntities = dappWalletMineDao.selectAmountThanZero(); |
| | | // if(CollUtil.isNotEmpty(walletMineEntities)){ |
| | | // for(DappWalletMineEntity dappWalletMineEntity : walletMineEntities){ |
| | | // BigDecimal availableAmount = dappWalletMineEntity.getAvailableAmount(); |
| | | // BigDecimal fireCnt = availableAmount.multiply(new BigDecimal("0.001")).setScale(4,BigDecimal.ROUND_DOWN); |
| | | // dappWalletService.updateWalletMineWithLock(fireCnt,dappWalletMineEntity.getMemberId(),2); |
| | | // totalCnt = totalCnt.add(fireCnt); |
| | | // } |
| | | // } |
| | | // if(BigDecimal.ZERO.compareTo(totalCnt) >= 0){ |
| | | // return; |
| | | // } |
| | | // |
| | | // totalCnt = totalCnt.setScale(4,BigDecimal.ROUND_DOWN); |
| | | // /** |
| | | // * 插入每小时燃烧的资金流水 |
| | | // */ |
| | | // DappFundFlowEntity dappFundFlowEntity = new DappFundFlowEntity(1L, totalCnt, FundFlowEnum.A_COIN_FIRE.getCode(), 2, BigDecimal.ZERO); |
| | | // dappFundFlowDao.insert(dappFundFlowEntity); |
| | | // /** |
| | | // * 更新A币的价格 |
| | | // */ |
| | | // DataDictionaryCustom coinACntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.COIN_A_CNT.getType(), |
| | | // PoolEnum.COIN_A_CNT.getCode()); |
| | | // BigDecimal coinACnt = new BigDecimal(coinACntDic.getValue()); |
| | | // coinACnt = coinACnt.subtract(totalCnt.multiply(new BigDecimal(0.8))); |
| | | // coinACntDic.setValue(coinACnt.toString()); |
| | | // dataDictionaryCustomMapper.updateById(coinACntDic); |
| | | // |
| | | // DataDictionaryCustom coinAUsdtDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.COIN_A_USDT_PRICE.getType(), |
| | | // PoolEnum.COIN_A_USDT_PRICE.getCode()); |
| | | // BigDecimal coinAUsdt = new BigDecimal(coinAUsdtDic.getValue()); |
| | | // |
| | | // DataDictionaryCustom coinAPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.COIN_A_PRICE.getType(), |
| | | // PoolEnum.COIN_A_PRICE.getCode()); |
| | | // |
| | | // BigDecimal coinAPrice = coinAUsdt.divide(coinACnt,12,BigDecimal.ROUND_DOWN); |
| | | // coinAPriceDic.setValue(coinAPrice.toString()); |
| | | // dataDictionaryCustomMapper.updateById(coinAPriceDic); |
| | | // /** |
| | | // * 增加K线数据 |
| | | // */ |
| | | // DappAKlineEntity dappAKlineEntity = new DappAKlineEntity(); |
| | | // dappAKlineEntity.setType(0); |
| | | // /** |
| | | // * 获取最新一条小时或者分钟的数据 |
| | | // */ |
| | | // DappAKlineEntity oldOne = dappAKlineMapper.selectOneByType(); |
| | | // if(ObjectUtil.isNotEmpty(oldOne)){ |
| | | // dappAKlineEntity.setOpenPrice(oldOne.getClosePrice()); |
| | | // dappAKlineEntity.setLowestPrice(oldOne.getClosePrice()); |
| | | // }else{ |
| | | // dappAKlineEntity.setOpenPrice(coinAPrice); |
| | | // dappAKlineEntity.setLowestPrice(coinAPrice); |
| | | // } |
| | | // dappAKlineEntity.setHighestPrice(coinAPrice); |
| | | // dappAKlineEntity.setClosePrice(coinAPrice); |
| | | // dappAKlineMapper.insert(dappAKlineEntity); |
| | | // |
| | | // |
| | | // List<cn.hutool.json.JSONObject> objects = new ArrayList<>(); |
| | | // List<AKLineLimitVo> akLineLimitVos = dappAKlineMapper.selectListByTypeAndLimit(0, AppContants.K_LINE_LIMIT); |
| | | // if(CollUtil.isNotEmpty(akLineLimitVos)) { |
| | | // Collections.reverse(akLineLimitVos); |
| | | // for (AKLineLimitVo akLineLimitVo : akLineLimitVos) { |
| | | // cn.hutool.json.JSONObject parseObj = JSONUtil.parseObj(akLineLimitVo); |
| | | // objects.add(parseObj); |
| | | // } |
| | | // redisUtils.del(AppContants.K_LINE_NOW); |
| | | // redisUtils.set(AppContants.K_LINE_NOW, objects.toString()); |
| | | // } |
| | | } |
| | | |
| | | @Override |
| | | public void antMemberLevelMsg(Long memberId) { |
| | | DappMemberEntity member = dappMemberDao.selectById(memberId); |
| | | if(StrUtil.isBlank(member.getRefererIds())) { |
| | | return; |
| | | } |
| | | |
| | | List<String> ids = StrUtil.split(member.getRefererIds(), ','); |
| | | List<DappMemberEntity> parentMembers = dappMemberDao.selectByInviteIds(ids); |
| | | for (DappMemberEntity parent : parentMembers) { |
| | | //DAO5不能再升级了 |
| | | if(parent.getAccountType().equals(MemberLevelEnum.NODE_5.getType())){ |
| | | continue; |
| | | } |
| | | /** |
| | | * 升级到董事就无法升级了 |
| | | */ |
| | | String nextLevelName = MemberLevelEnum.MEMBER.getNextLevel(parent.getAccountType()); |
| | | int levelCode = MemberLevelEnum.MEMBER.getLevelCode(nextLevelName); |
| | | |
| | | DataDictionaryCustom newLevelDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode("NODE_PERK", nextLevelName); |
| | | if(ObjectUtil.isEmpty(newLevelDic)){ |
| | | continue; |
| | | } |
| | | NodePerk nodeFiveDicPerk = JSONObject.parseObject(newLevelDic.getValue(), NodePerk.class); |
| | | |
| | | //需要判断小区业绩 |
| | | if( MemberLevelEnum.NODE_1.getType().equals(nextLevelName)){ |
| | | if (!directMemberCnt(parent, nodeFiveDicPerk)) { |
| | | continue; |
| | | } |
| | | if (!teamIncome(parent, nodeFiveDicPerk)) { |
| | | continue; |
| | | } |
| | | }else{ |
| | | if (!agentCntFinish(parent, nodeFiveDicPerk)) { |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | parent.setAccountType(nextLevelName); |
| | | dappMemberDao.updateById(parent); |
| | | } |
| | | // DappMemberEntity member = dappMemberDao.selectById(memberId); |
| | | // if(StrUtil.isBlank(member.getRefererIds())) { |
| | | // return; |
| | | // } |
| | | // |
| | | // List<String> ids = StrUtil.split(member.getRefererIds(), ','); |
| | | // List<DappMemberEntity> parentMembers = dappMemberDao.selectByInviteIds(ids); |
| | | // for (DappMemberEntity parent : parentMembers) { |
| | | // //DAO5不能再升级了 |
| | | // if(parent.getAccountType().equals(MemberLevelEnum.NODE_5.getType())){ |
| | | // continue; |
| | | // } |
| | | // /** |
| | | // * 升级到董事就无法升级了 |
| | | // */ |
| | | // String nextLevelName = MemberLevelEnum.MEMBER.getNextLevel(parent.getAccountType()); |
| | | // int levelCode = MemberLevelEnum.MEMBER.getLevelCode(nextLevelName); |
| | | // |
| | | // DataDictionaryCustom newLevelDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode("NODE_PERK", nextLevelName); |
| | | // if(ObjectUtil.isEmpty(newLevelDic)){ |
| | | // continue; |
| | | // } |
| | | // NodePerk nodeFiveDicPerk = JSONObject.parseObject(newLevelDic.getValue(), NodePerk.class); |
| | | // |
| | | // //需要判断小区业绩 |
| | | // if( MemberLevelEnum.NODE_1.getType().equals(nextLevelName)){ |
| | | // if (!directMemberCnt(parent, nodeFiveDicPerk)) { |
| | | // continue; |
| | | // } |
| | | // if (!teamIncome(parent, nodeFiveDicPerk)) { |
| | | // continue; |
| | | // } |
| | | // }else{ |
| | | // if (!agentCntFinish(parent, nodeFiveDicPerk)) { |
| | | // continue; |
| | | // } |
| | | // } |
| | | // |
| | | // parent.setAccountType(nextLevelName); |
| | | // dappMemberDao.updateById(parent); |
| | | // } |
| | | } |
| | | |
| | | @Override |
| | |
| | | */ |
| | | DappAKlineEntity minRecord = dappAKlineMapper.selectOneHourByType(); |
| | | if(ObjectUtil.isEmpty(minRecord)){ |
| | | minRecord = dappAKlineMapper.selectOneByType(); |
| | | minRecord = dappAKlineMapper.selectOneByTypeAsc(); |
| | | } |
| | | DappAKlineEntity maxRecord = dappAKlineMapper.selectOneByType(); |
| | | List<DappAKlineEntity> dappAKlineEntities = dappAKlineMapper.selectListByIds(minRecord.getId(),maxRecord.getId()); |
| | |
| | | dappAKlineEntity.setHighestPrice(coinAPrice); |
| | | dappAKlineEntity.setLowestPrice(coinAPrice); |
| | | } |
| | | DappAKlineEntity oldOne = dappAKlineMapper.selectOneByType(); |
| | | if(ObjectUtil.isNotEmpty(oldOne)){ |
| | | dappAKlineEntity.setClosePrice(oldOne.getClosePrice()); |
| | | }else{ |
| | | dappAKlineEntity.setClosePrice(coinAPrice); |
| | | } |
| | | dappAKlineEntity.setClosePrice(coinAPrice); |
| | | dappAKlineMapper.insert(dappAKlineEntity); |
| | | |
| | | chainProducer.sendAntKLineMsg(1); |
| | | // chainProducer.sendAntKLineMsg(1); |
| | | } |
| | | |
| | | @Override |
| | |
| | | dappAKlineEntity.setClosePrice(coinAPrice); |
| | | dappAKlineMapper.insert(dappAKlineEntity); |
| | | |
| | | chainProducer.sendAntKLineMsg(2); |
| | | // chainProducer.sendAntKLineMsg(2); |
| | | //周 |
| | | String week = DateUtil.dayOfWeekEnum(DateUtil.date()).toChinese(); |
| | | if("星期日".equals(week)){ |
| | |
| | | dappAKlineEntityDay.setClosePrice(coinAPrice); |
| | | dappAKlineMapper.insert(dappAKlineEntityDay); |
| | | |
| | | chainProducer.sendAntKLineMsg(3); |
| | | // chainProducer.sendAntKLineMsg(3); |
| | | } |
| | | //月 |
| | | int month = DateUtil.dayOfMonth(DateUtil.date()); |
| | |
| | | dappAKlineEntityWeek.setClosePrice(coinAPrice); |
| | | dappAKlineMapper.insert(dappAKlineEntityWeek); |
| | | |
| | | chainProducer.sendAntKLineMsg(4); |
| | | // chainProducer.sendAntKLineMsg(4); |
| | | } |
| | | } |
| | | |
| | |
| | | redisKey = AppContants.K_LINE_MONTH; |
| | | }else if(0 == type){ |
| | | createKDate(); |
| | | return; |
| | | redisKey = AppContants.K_LINE_NOW; |
| | | }else{ |
| | | return; |
| | | } |
| | |
| | | address = AppContants.ADDRESS_A_POOL_PEOJECT; |
| | | }else if(6 == dappFundFlowEntity.getType()){ |
| | | address = AppContants.ADDRESS_B_POOL_PEOJECT; |
| | | }else if(34 == dappFundFlowEntity.getType()){ |
| | | address = ChainEnum.BSC_USDT_W_POOL.getAddress(); |
| | | }else{ |
| | | return; |
| | | } |
| | |
| | | dappFundFlowDao.updateById(dappFundFlow); |
| | | |
| | | } |
| | | |
| | | // public static void main(String[] args) { |
| | | // for(int i = 0; i < 100; i++){ |
| | | // ChainService.getInstance(ChainEnum.BSC_USDT_A_POOL.name()).transfer(AppContants.ADDRESS_A_POOL_PEOJECT, new BigDecimal(70)); |
| | | // try { |
| | | // Thread.sleep(20000); |
| | | // } catch (InterruptedException e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | // |
| | | // ChainService.getInstance(ChainEnum.BSC_USDT_A_POOL.name()).transfer(AppContants.ADDRESS_B_POOL_PEOJECT, new BigDecimal(20)); |
| | | // |
| | | // try { |
| | | // Thread.sleep(20000); |
| | | // } catch (InterruptedException e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | // |
| | | // ChainService.getInstance(ChainEnum.BSC_USDT_A_POOL.name()).transfer(ChainEnum.BSC_USDT_W_POOL.getAddress(), new BigDecimal(10)); |
| | | // try { |
| | | // Thread.sleep(20000); |
| | | // } catch (InterruptedException e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | @Override |
| | | public void allMemberPerkAvaMsg(Long id) { |
| | | // DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(id); |
| | | // if(ObjectUtil.isEmpty(dappFundFlowEntity)){ |
| | | // return; |
| | | // } |
| | | // |
| | | // BigDecimal poolAllMemberAPercentCnt = dappFundFlowEntity.getAmount(); |
| | | // BigDecimal poolAllMemberAPercentCntAva = allMemberPerk(poolAllMemberAPercentCnt, FundFlowEnum.POOL_MEMBER_A_CNT.getCode()); |
| | | // DappFundFlowEntity poolAllMemberAFundFlowAva = new DappFundFlowEntity( |
| | | // 1L, |
| | | // poolAllMemberAPercentCnt.subtract(poolAllMemberAPercentCntAva), |
| | | // FundFlowEnum.POOL_MEMBER_A_CNT.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // dappFundFlowEntity.getSystemProfitId()); |
| | | // dappFundFlowDao.insert(poolAllMemberAFundFlowAva); |
| | | // dappWalletService.updateWalletMineWithLock(poolAllMemberAPercentCnt.subtract(poolAllMemberAPercentCntAva), |
| | | // AppContants.YL_MEMBER_ID,1); |
| | | |
| | | } |
| | | @Override |
| | | public void contractAnDaoMsg(Long flowId) { |
| | | DappFundFlowEntity flow = dappFundFlowDao.selectById(flowId); |
| | | if(ObjectUtil.isEmpty(flow)){ |
| | | return; |
| | | } |
| | | Long memberId = flow.getMemberId(); |
| | | if(DappFundFlowEntity.WITHDRAW_STATUS_AGREE == flow.getStatus()){ |
| | | return; |
| | | } |
| | | DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId); |
| | | if(ObjectUtil.isEmpty(dappMemberEntity)){ |
| | | return; |
| | | } |
| | | /** |
| | | * 生成会员入金买A币的记录 |
| | | */ |
| | | DappChargeUsdtEntity dappChargeUsdtEntity = new DappChargeUsdtEntity( |
| | | memberId, |
| | | dappMemberEntity.getAddress(), |
| | | null, |
| | | 2, |
| | | flow.getAmount(), |
| | | BigDecimal.ZERO, |
| | | BigDecimal.ZERO); |
| | | dappChargeUsdtMapper.insert(dappChargeUsdtEntity); |
| | | /** |
| | | * 减少用户的AUSD数量 |
| | | */ |
| | | DappUsdtPerkEntity dappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(memberId); |
| | | BigDecimal ausdAmount = dappUsdtPerkEntity.getAusdAmount(); |
| | | ausdAmount = ausdAmount.subtract(flow.getFee()).setScale(4,BigDecimal.ROUND_DOWN); |
| | | dappUsdtPerkEntity.setAusdAmount(ausdAmount); |
| | | dappUsdtPerkEntityMapper.updateById(dappUsdtPerkEntity); |
| | | /** |
| | | * 流水关联用户购买记录 |
| | | */ |
| | | flow.setSystemProfitId(dappChargeUsdtEntity.getId()); |
| | | /** |
| | | * 链上转账的hash值 |
| | | */ |
| | | // flow.setFromHash(null); |
| | | flow.setStatus(DappFundFlowEntity.WITHDRAW_STATUS_AGREE); |
| | | dappFundFlowDao.updateById(flow); |
| | | |
| | | // /** |
| | | // * 发送消息处理返利逻辑 |
| | | // */ |
| | | // chainProducer.sendAntACoinInContractMsg(flow.getId()); |
| | | // /** |
| | | // * 发送消息处理代理升级 |
| | | // */ |
| | | // chainProducer.sendAntMemberLevelMsg(memberId); |
| | | } |
| | | |
| | | @Override |
| | | public void contractAnDaoInMsg(Long flowId) { |
| | | /** |
| | | * 获取对应的流水记录 |
| | | */ |
| | | DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectInfoById(flowId); |
| | | if(ObjectUtil.isEmpty(dappFundFlowEntity)){ |
| | | return; |
| | | } |
| | | if(DappFundFlowEntity.WITHDRAW_STATUS_AGREE != dappFundFlowEntity.getStatus()){ |
| | | return; |
| | | } |
| | | Long memberId = dappFundFlowEntity.getMemberId(); |
| | | DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId); |
| | | if(ObjectUtil.isEmpty(dappMemberEntity)){ |
| | | return; |
| | | } |
| | | /** |
| | | * 会员充值金额 |
| | | */ |
| | | BigDecimal amount = dappFundFlowEntity.getAmount(); |
| | | /** |
| | | * A币的当前价格 |
| | | */ |
| | | DataDictionaryCustom coinAPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.COIN_A_PRICE.getType(), |
| | | PoolEnum.COIN_A_PRICE.getCode() |
| | | ); |
| | | BigDecimal coinAPrice = new BigDecimal(StrUtil.isEmpty(coinAPriceDic.getValue()) ? "0" : coinAPriceDic.getValue()).setScale(12,BigDecimal.ROUND_DOWN); |
| | | /** |
| | | * 会员充值USDT买入A币记录的ID |
| | | */ |
| | | Long chergeRecordId = dappFundFlowEntity.getSystemProfitId() == null ? 0L : dappFundFlowEntity.getSystemProfitId(); |
| | | DappChargeUsdtEntity dappChargeUsdtEntity = dappChargeUsdtMapper.selectById(chergeRecordId); |
| | | if(ObjectUtil.isEmpty(dappChargeUsdtEntity)){ |
| | | return; |
| | | } |
| | | if(2 != dappChargeUsdtEntity.getStatus()){ |
| | | return; |
| | | } |
| | | // if(StrUtil.isEmpty(dappChargeUsdtEntity.getMemberHash())){ |
| | | // return; |
| | | // } |
| | | /** |
| | | * 金本位的三倍额度,增加业绩,增加对应的NFT的值 |
| | | */ |
| | | DappUsdtPerkEntity dappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(memberId); |
| | | if(ObjectUtil.isEmpty(dappUsdtPerkEntity)){ |
| | | dappUsdtPerkEntity = new DappUsdtPerkEntity(); |
| | | dappUsdtPerkEntity.setAmount(amount.multiply(new BigDecimal(3))); |
| | | dappUsdtPerkEntity.setNftDevote(amount); |
| | | dappUsdtPerkEntity.setMemberId(memberId); |
| | | dappUsdtPerkEntityMapper.insert(dappUsdtPerkEntity); |
| | | } |
| | | //金本位的三倍额度 |
| | | BigDecimal amountPerk = dappUsdtPerkEntity.getAmount(); |
| | | amountPerk = amountPerk.add(amount.multiply(new BigDecimal(3))); |
| | | dappUsdtPerkEntity.setAmount(amountPerk); |
| | | //生成一条金本位的三倍额度的资金流水记录 |
| | | // DappFundFlowEntity amountPerkFundFlow = new DappFundFlowEntity( |
| | | // memberId, |
| | | // amount.multiply(new BigDecimal(3)), |
| | | // FundFlowEnum.MEMBER_AMOUNT_PERK_TOTAL.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(amountPerkFundFlow); |
| | | |
| | | //增加业绩 |
| | | BigDecimal achieveAmount = dappUsdtPerkEntity.getAchieveAmount(); |
| | | achieveAmount = achieveAmount.add(amount); |
| | | dappUsdtPerkEntity.setAchieveAmount(achieveAmount); |
| | | //增加对应的NFT的值 |
| | | BigDecimal nftDevote = dappUsdtPerkEntity.getNftDevote(); |
| | | nftDevote = nftDevote.add(amount); |
| | | dappUsdtPerkEntity.setNftDevote(nftDevote); |
| | | dappUsdtPerkEntityMapper.updateById(dappUsdtPerkEntity); |
| | | /** |
| | | * 1.90%底池的USDT做成100%溢价,铸造出70%金本位价值的A币。 |
| | | */ |
| | | DataDictionaryCustom produceAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.PRODUCE_A_PERCENT.getType(), |
| | | PoolEnum.PRODUCE_A_PERCENT.getCode() |
| | | ); |
| | | BigDecimal produceAPercent = new BigDecimal(StrUtil.isEmpty(produceAPercentDic.getValue()) ? "0.7" : produceAPercentDic.getValue()); |
| | | //购买数量 |
| | | BigDecimal totalCnt = amount.divide(coinAPrice, 4, BigDecimal.ROUND_DOWN); |
| | | /** |
| | | * 铸造出70%金本位价值的A币。实际产生数量 |
| | | */ |
| | | BigDecimal realCnt = totalCnt.multiply(produceAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | dappChargeUsdtEntity.setTotalCnt(totalCnt); |
| | | dappChargeUsdtEntity.setRealCnt(realCnt); |
| | | dappChargeUsdtMapper.updateById(dappChargeUsdtEntity); |
| | | /** |
| | | * 重新计算A币的价格 |
| | | */ |
| | | DataDictionaryCustom coinACntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.COIN_A_CNT.getType(), |
| | | PoolEnum.COIN_A_CNT.getCode() |
| | | ); |
| | | //A币币本位底池-A币的数量 |
| | | BigDecimal coinACntDicCnt = new BigDecimal(coinACntDic.getValue()); |
| | | coinACntDicCnt = coinACntDicCnt.add(realCnt); |
| | | coinACntDic.setValue(coinACntDicCnt.toString()); |
| | | dataDictionaryCustomMapper.updateById(coinACntDic); |
| | | |
| | | DataDictionaryCustom coinAUsdtPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | PoolEnum.COIN_A_USDT_PRICE.getType(), |
| | | PoolEnum.COIN_A_USDT_PRICE.getCode() |
| | | ); |
| | | //A币金本位底池-usdt数量 |
| | | BigDecimal coinAUsdtPriceDicCnt = new BigDecimal(coinAUsdtPriceDic.getValue()); |
| | | coinAUsdtPriceDicCnt = coinAUsdtPriceDicCnt.add(amount.multiply(new BigDecimal(0.8))); |
| | | coinAUsdtPriceDic.setValue(coinAUsdtPriceDicCnt.toString()); |
| | | dataDictionaryCustomMapper.updateById(coinAUsdtPriceDic); |
| | | |
| | | BigDecimal divide = coinAUsdtPriceDicCnt.divide(coinACntDicCnt, 12, BigDecimal.ROUND_DOWN); |
| | | coinAPriceDic.setValue(divide.toString()); |
| | | dataDictionaryCustomMapper.updateById(coinAPriceDic); |
| | | |
| | | // chainProducer.sendAntKLineMsg(0); |
| | | /** |
| | | * A币的分配 walletMine |
| | | * 【70%换算100%分配】 |
| | | * 50%客户秒到 |
| | | * 20%全网加权分红(按20%释放递减) |
| | | * 10%直推 |
| | | * 5%节点 |
| | | * 5%基金会 |
| | | * 10%级差奖 |
| | | */ |
| | | /** |
| | | * 50%客户秒到 |
| | | */ |
| | | // DataDictionaryCustom memberGetAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.MEMBER_GET_A_PERCENT.getType(), |
| | | // PoolEnum.MEMBER_GET_A_PERCENT.getCode() |
| | | // ); |
| | | // BigDecimal memberGetAPercent = new BigDecimal(StrUtil.isEmpty(memberGetAPercentDic.getValue()) ? "0.5" : memberGetAPercentDic.getValue()); |
| | | // BigDecimal memberGetACnt = realCnt.multiply(memberGetAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // |
| | | // BigDecimal fundFlowToMemberFlag = this.getAndUpdateMemberPerk(dappFundFlowEntity.getMemberId(), memberGetACnt); |
| | | // if(fundFlowToMemberFlag.compareTo(BigDecimal.ZERO) > 0){ |
| | | // //生成一条50%客户秒到的资金流水记录 |
| | | // DappFundFlowEntity fundFlowToMember = new DappFundFlowEntity( |
| | | // dappFundFlowEntity.getMemberId(), |
| | | // fundFlowToMemberFlag, |
| | | // FundFlowEnum.MEMBER_GET_A_CNT.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(fundFlowToMember); |
| | | // //用户的A币账户增加memberGetACnt数量 |
| | | // dappWalletService.updateWalletMineWithLock(fundFlowToMemberFlag,dappFundFlowEntity.getMemberId(),1); |
| | | // } |
| | | // /** |
| | | // * 20%全网加权分红(按20%释放递减)进入加权分红底池 |
| | | // */ |
| | | // DataDictionaryCustom poolAllMemberAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.POOL_ALL_MEMBER_A_PERCENT.getType(), |
| | | // PoolEnum.POOL_ALL_MEMBER_A_PERCENT.getCode() |
| | | // ); |
| | | // BigDecimal poolAllMemberAPercent = new BigDecimal(StrUtil.isEmpty(poolAllMemberAPercentDic.getValue()) ? "0.2" : poolAllMemberAPercentDic.getValue()); |
| | | // BigDecimal poolAllMemberAPercentCnt = realCnt.multiply(poolAllMemberAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // |
| | | // DataDictionaryCustom poolAllMemberACntDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.POOL_ALL_MEMBER_A_CNT.getType(), |
| | | // PoolEnum.POOL_ALL_MEMBER_A_CNT.getCode() |
| | | // ); |
| | | // BigDecimal poolAllMemberACnt = new BigDecimal(StrUtil.isEmpty(poolAllMemberACntDic.getValue()) ? "0" : poolAllMemberACntDic.getValue()); |
| | | // poolAllMemberACnt = poolAllMemberACnt.add(poolAllMemberAPercentCnt); |
| | | // poolAllMemberACntDic.setValue(poolAllMemberACnt.toString()); |
| | | // dataDictionaryCustomMapper.updateById(poolAllMemberACntDic); |
| | | // //生成一条20%全网加权分红(按20%释放递减)进入加权分红底池的资金流水记录 |
| | | // DappFundFlowEntity poolAllMemberAFundFlow = new DappFundFlowEntity( |
| | | // 1L, |
| | | // poolAllMemberAPercentCnt, |
| | | // FundFlowEnum.POOL_ALL_MEMBER_A_CNT.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(poolAllMemberAFundFlow); |
| | | // |
| | | // /** |
| | | // * 20%全网加权平分,按照个人投资占比全网的比例去平分 |
| | | // */ |
| | | // chainProducer.sendAllMemberPerkAvaMsg(poolAllMemberAFundFlow.getId()); |
| | | // /** |
| | | // * 10%直推 |
| | | // */ |
| | | // DataDictionaryCustom directAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.DIRECT_A_PERCENT.getType(), |
| | | // PoolEnum.DIRECT_A_PERCENT.getCode() |
| | | // ); |
| | | // BigDecimal directAPercent = new BigDecimal(StrUtil.isEmpty(directAPercentDic.getValue()) ? "0.1" : directAPercentDic.getValue()); |
| | | // BigDecimal directAPercentCnt = realCnt.multiply(directAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // |
| | | // String refererId = dappMemberEntity.getRefererId(); |
| | | // DappMemberEntity directMemberEntity = dappMemberDao.selectMemberInfoByInviteId(refererId); |
| | | // if(ObjectUtil.isNotEmpty(directMemberEntity)){ |
| | | // /** |
| | | // *推荐用户入单可享有贡献值.例.推荐100获得100贡献值 |
| | | // */ |
| | | // DappUsdtPerkEntity directDappUsdtPerkEntity = dappUsdtPerkEntityMapper.selectByMemberId(directMemberEntity.getId()); |
| | | // if(ObjectUtil.isEmpty(directDappUsdtPerkEntity)){ |
| | | // directDappUsdtPerkEntity = new DappUsdtPerkEntity(); |
| | | // directDappUsdtPerkEntity.setNftDevote(amount); |
| | | // directDappUsdtPerkEntity.setMemberId(directMemberEntity.getId()); |
| | | // dappUsdtPerkEntityMapper.insert(directDappUsdtPerkEntity); |
| | | // } |
| | | // |
| | | // BigDecimal directNftDevote = directDappUsdtPerkEntity.getNftDevote(); |
| | | // directNftDevote = directNftDevote.add(amount); |
| | | // directDappUsdtPerkEntity.setNftDevote(directNftDevote); |
| | | // dappUsdtPerkEntityMapper.updateById(directDappUsdtPerkEntity); |
| | | // |
| | | // BigDecimal directAPercentFundFlowToMemberFlag = this.getAndUpdateMemberPerk(directMemberEntity.getId(), directAPercentCnt); |
| | | // if(directAPercentFundFlowToMemberFlag.compareTo(BigDecimal.ZERO) > 0){ |
| | | // //生成一条10%直推的资金流水记录 |
| | | // DappFundFlowEntity directAPercentFundFlowToMember = new DappFundFlowEntity( |
| | | // directMemberEntity.getId(), |
| | | // directAPercentFundFlowToMemberFlag, |
| | | // FundFlowEnum.DIRECT_A_PERCENT.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(directAPercentFundFlowToMember); |
| | | // //用户的A币账户增加directAPercentCnt数量 |
| | | // dappWalletService.updateWalletMineWithLock(directAPercentFundFlowToMemberFlag,directMemberEntity.getId(),1); |
| | | // } |
| | | // if(directAPercentCnt.compareTo(directAPercentFundFlowToMemberFlag) > 0){ |
| | | // DappFundFlowEntity directAPercentFundFlowToMemberAva = new DappFundFlowEntity( |
| | | // 1L, |
| | | // directAPercentCnt.subtract(directAPercentFundFlowToMemberFlag), |
| | | // FundFlowEnum.DIRECT_A_PERCENT.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(directAPercentFundFlowToMemberAva); |
| | | // dappWalletService.updateWalletMineWithLock(directAPercentCnt.subtract(directAPercentFundFlowToMemberFlag), |
| | | // AppContants.YL_MEMBER_ID,1); |
| | | // } |
| | | // } |
| | | // /** |
| | | // * 5%节点 |
| | | // */ |
| | | // DataDictionaryCustom nodeAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.NODE_A_PERCENT.getType(), |
| | | // PoolEnum.NODE_A_PERCENT.getCode() |
| | | // ); |
| | | // BigDecimal nodeAPercent = new BigDecimal(StrUtil.isEmpty(nodeAPercentDic.getValue()) ? "0.05" : nodeAPercentDic.getValue()); |
| | | // BigDecimal nodeAPercentCnt = realCnt.multiply(nodeAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // //生成一条5%节点的资金流水记录 |
| | | // DappFundFlowEntity nodeAPercentFundFlow = new DappFundFlowEntity( |
| | | // 1L, |
| | | // nodeAPercentCnt, |
| | | // FundFlowEnum.NODE_A_PERCENT.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(nodeAPercentFundFlow); |
| | | //// chainProducer.sendAntACoinInNodeMsg(nodeAPercentFundFlow.getId()); |
| | | // DataDictionaryCustom nodeAPercentPoolDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.NODE_A_PERCENT_POOL.getType(), |
| | | // PoolEnum.NODE_A_PERCENT_POOL.getCode() |
| | | // ); |
| | | // BigDecimal nodeAPercentPoolDicCnt = new BigDecimal(StrUtil.isEmpty(nodeAPercentPoolDic.getValue()) ? "0" : nodeAPercentPoolDic.getValue()); |
| | | // nodeAPercentPoolDicCnt = nodeAPercentPoolDicCnt.add(nodeAPercentCnt); |
| | | // nodeAPercentPoolDic.setValue(nodeAPercentPoolDicCnt.toString()); |
| | | // dataDictionaryCustomMapper.updateById(nodeAPercentPoolDic); |
| | | // |
| | | // BigDecimal nodeAPercentCntAva = superNodePoolPerk(nodeAPercentCnt, NodeCodeEnum.SUPER_NODE.getCode(), FundFlowEnum.NODE_A_PERCENT_TO_MEMBER.getCode()); |
| | | // |
| | | // if(nodeAPercentCnt.compareTo(nodeAPercentCntAva) > 0){ |
| | | // DappFundFlowEntity nodeAPercentFundFlowAva = new DappFundFlowEntity( |
| | | // 1L, |
| | | // nodeAPercentCnt.subtract(nodeAPercentCntAva), |
| | | // FundFlowEnum.NODE_A_PERCENT_TO_MEMBER.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(nodeAPercentFundFlowAva); |
| | | // dappWalletService.updateWalletMineWithLock(nodeAPercentCnt.subtract(nodeAPercentCntAva), |
| | | // AppContants.YL_MEMBER_ID,1); |
| | | // } |
| | | // /** |
| | | // * 5%基金会 |
| | | // */ |
| | | // DataDictionaryCustom foundationAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.FOUNDATION_A_PERCENT.getType(), |
| | | // PoolEnum.FOUNDATION_A_PERCENT.getCode() |
| | | // ); |
| | | // BigDecimal foundationAPercent = new BigDecimal(StrUtil.isEmpty(foundationAPercentDic.getValue()) ? "0.05" : foundationAPercentDic.getValue()); |
| | | // BigDecimal foundationAPercentCnt = realCnt.multiply(foundationAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // |
| | | // //生成一条5%基金会的资金流水记录 |
| | | // DappFundFlowEntity foundationAPercentFundFlow = new DappFundFlowEntity( |
| | | // 295L, |
| | | // foundationAPercentCnt, |
| | | // FundFlowEnum.FOUNDATION_A_PERCENT.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(foundationAPercentFundFlow); |
| | | // //用户的A币账户增加memberGetACnt数量 |
| | | // dappWalletService.updateWalletMineWithLock(foundationAPercentCnt,295L,1); |
| | | // /** |
| | | // * 10%级差奖 |
| | | // */ |
| | | // DataDictionaryCustom levelAPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | // PoolEnum.LEVEL_A_PERCENT.getType(), |
| | | // PoolEnum.LEVEL_A_PERCENT.getCode() |
| | | // ); |
| | | // BigDecimal levelAPercent = new BigDecimal(StrUtil.isEmpty(levelAPercentDic.getValue()) ? "0.1" : levelAPercentDic.getValue()); |
| | | // BigDecimal levelAPercentCnt = realCnt.multiply(levelAPercent).setScale(4, BigDecimal.ROUND_DOWN); |
| | | // |
| | | // //生成一条10%级差奖进入10%级差奖底池的资金流水记录 |
| | | // DappFundFlowEntity levelAPercentCntFundFlow = new DappFundFlowEntity( |
| | | // 1L, |
| | | // levelAPercentCnt, |
| | | // FundFlowEnum.LEVEL_A_PERCENT_CNT.getCode(), |
| | | // 2, |
| | | // BigDecimal.ZERO, |
| | | // null, |
| | | // chergeRecordId); |
| | | // dappFundFlowDao.insert(levelAPercentCntFundFlow); |
| | | // chainProducer.sendAntACoinInLevelMsg(levelAPercentCntFundFlow.getId()); |
| | | // |
| | | // /** |
| | | // * 更新用户为有效用户 |
| | | // */ |
| | | // dappMemberDao.updateMemberActiveStatus(1,memberId); |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void speedPayOrderMsg(Long orderId) { |
| | | MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId); |
| | | if(ObjectUtil.isEmpty(mallOrderInfo)){ |
| | | return; |
| | | } |
| | | if(MallOrderInfo.STATUS_PAY != mallOrderInfo.getStatus()){ |
| | | return; |
| | | } |
| | | Long memberId = mallOrderInfo.getMemberId(); |
| | | /** |
| | | * 赠送消费金额1.5倍增值积分 |
| | | */ |
| | | BigDecimal amount = mallOrderInfo.getAmount(); |
| | | DataDictionaryCustom donateScorePercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.DONATE_SCORE_PERCENT.getType(), |
| | | DataDictionaryEnum.DONATE_SCORE_PERCENT.getCode() |
| | | ); |
| | | BigDecimal donateScorePercent = new BigDecimal(donateScorePercentDic.getValue()); |
| | | BigDecimal donateScore = amount.multiply(donateScorePercent); |
| | | dappWalletMineDao.updateBalance(donateScore,donateScore,memberId); |
| | | DappFundFlowEntity donateScoreFlow = new DappFundFlowEntity( |
| | | memberId, |
| | | donateScore, |
| | | FundFlowEnum.DONATE_SCORE.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | orderId); |
| | | dappFundFlowDao.insert(donateScoreFlow); |
| | | /** |
| | | * 新增一条业绩 |
| | | */ |
| | | MallAchieveRecord mallAchieveRecord = new MallAchieveRecord( |
| | | memberId,amount,amount,DateUtil.date(),orderId,1,mallOrderInfo.getPayTime() |
| | | ); |
| | | mallAchieveRecordMapper.insert(mallAchieveRecord); |
| | | |
| | | DappFundFlowEntity achieveFlow = new DappFundFlowEntity( |
| | | memberId, |
| | | amount, |
| | | FundFlowEnum.ACHIEVE_ADD.getCode(), |
| | | 2, |
| | | BigDecimal.ZERO, |
| | | null, |
| | | orderId); |
| | | dappFundFlowDao.insert(achieveFlow); |
| | | /** |
| | | * 商城销售额1%-10%,可设定进入资产管理池 |
| | | * USDT_ORDER_PERCENT |
| | | */ |
| | | DataDictionaryCustom orderPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.USDT_ORDER_PERCENT.getType(), |
| | | DataDictionaryEnum.USDT_ORDER_PERCENT.getCode() |
| | | ); |
| | | if(ObjectUtil.isNotEmpty(orderPercentDic)){ |
| | | BigDecimal orderPercent = new BigDecimal(StrUtil.isEmpty(orderPercentDic.getValue()) ? "0.1" : orderPercentDic.getValue()); |
| | | BigDecimal addPoor = amount.multiply(orderPercent); |
| | | |
| | | DataDictionaryCustom packageScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.PACKAGE_SCORE_PRICE.getType(), |
| | | DataDictionaryEnum.PACKAGE_SCORE_PRICE.getCode() |
| | | ); |
| | | DataDictionaryCustom packageTotalScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getType(), |
| | | DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getCode() |
| | | ); |
| | | BigDecimal packageTotalScore = new BigDecimal(ObjectUtil.isEmpty(packageTotalScoreDic) ? "21000" : packageTotalScoreDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); |
| | | //更新USDT底池 |
| | | DataDictionaryCustom packagePoorDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.PACKAGE_POOR.getType(), |
| | | DataDictionaryEnum.PACKAGE_POOR.getCode() |
| | | ); |
| | | BigDecimal packagePoor = new BigDecimal(ObjectUtil.isEmpty(packagePoorDic) ? "0" : packagePoorDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); |
| | | BigDecimal avaPackagePoor = packagePoor.add(addPoor); |
| | | packagePoorDic.setValue(avaPackagePoor.toString()); |
| | | dataDictionaryCustomMapper.updateById(packagePoorDic); |
| | | //计算当前价格 |
| | | BigDecimal divide = avaPackagePoor.divide(packageTotalScore, 8, BigDecimal.ROUND_DOWN); |
| | | packageScorePriceDic.setValue(divide.toString()); |
| | | dataDictionaryCustomMapper.updateById(packageScorePriceDic); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | private final IMatrixTreeNodeService matrixTreeNodeService; |
| | | |
| | | @Override |
| | | public void speedAutoLevelUpMsg(Long memberId) {log.info("###代理自动升级###"); |
| | | DappMemberEntity member = dappMemberDao.selectById(memberId); |
| | | if (MemberLevelEnum.V7.getType().equals(member.getAccountType())) { |
| | | return; |
| | | } |
| | | |
| | | MemberNode parentNode = matrixTreeNodeService.addTreeNode(memberId); |
| | | if (parentNode == null) { |
| | | log.info("父级节点未找到:{}", memberId); |
| | | return; |
| | | } |
| | | |
| | | MatrixTree matrixTree = MatrixTree.getInstance(); |
| | | List<MemberNode> allNodes = matrixTree.getAllAncestors(parentNode); // 获取某一个MemberNode的所有上级节点 |
| | | allNodes.add(parentNode); |
| | | if(CollUtil.isEmpty(allNodes)){ |
| | | return; |
| | | } |
| | | /** |
| | | * 更新所有上级的小区业绩 |
| | | */ |
| | | for(MemberNode memberNode : allNodes){ |
| | | BigDecimal smallAchieve = BigDecimal.ZERO; |
| | | List<MemberNode> allNodesChildList = memberNode.getCHILD(); |
| | | if(CollUtil.isNotEmpty(allNodesChildList)){ |
| | | List<Long> left = allNodesChildList.stream().filter(allNodesChild -> allNodesChild.getType() == 1).map(MemberNode::getMemberId).collect(Collectors.toList()); |
| | | List<Long> right = allNodesChildList.stream().filter(allNodesChild -> allNodesChild.getType() == 2).map(MemberNode::getMemberId).collect(Collectors.toList()); |
| | | |
| | | BigDecimal leftAmount = mallAchieveRecordMapper.selectSumAchieveByMemberIdList(left); |
| | | |
| | | BigDecimal rightAmount = mallAchieveRecordMapper.selectSumAchieveByMemberIdList(right); |
| | | if(leftAmount.compareTo(rightAmount) > 0){ |
| | | smallAchieve = rightAmount; |
| | | }else{ |
| | | smallAchieve = leftAmount; |
| | | } |
| | | //更新用户的区域业绩 |
| | | DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberNode.getMemberId()); |
| | | dappMemberEntity.setUsdtBalance(smallAchieve); |
| | | dappMemberEntity.setLeftAchieve(leftAmount); |
| | | dappMemberEntity.setRightAchieve(rightAmount); |
| | | dappMemberDao.updateById(dappMemberEntity); |
| | | log.info("用户:{},leftAchieve :{}, rightAchieve:{}, smallAchieve:{}", |
| | | dappMemberEntity.getAddress(), leftAmount, rightAmount, smallAchieve); |
| | | |
| | | /** |
| | | * 判断是否符合升级条件 |
| | | */ |
| | | String nextLevel = MemberLevelEnum.MEMBER.getNextLevel(dappMemberEntity.getAccountType()); |
| | | DataDictionaryCustom memberLevelDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.V1.getType() |
| | | , nextLevel); |
| | | if(ObjectUtil.isNotEmpty(memberLevelDic)){ |
| | | String value = memberLevelDic.getValue(); |
| | | cn.hutool.json.JSONObject parseObj = JSONUtil.parseObj(value); |
| | | BigDecimal smallAchieveDic = new BigDecimal(parseObj.get("smallAchieve").toString()); |
| | | if(smallAchieve.compareTo(smallAchieveDic) >= 0){ |
| | | //升级 |
| | | dappMemberEntity.setAccountType(nextLevel); |
| | | dappMemberDao.updateById(dappMemberEntity); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void memberPerk() { |
| | | List<DappMemberEntity> dappMemberEntityList = dappMemberDao.selectMemberByActiveStatus(); |
| | | if(CollUtil.isEmpty(dappMemberEntityList)){ |
| | | return; |
| | | } |
| | | DataDictionaryCustom staticReleaseDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.STATIC_RELEASE.getType(), |
| | | DataDictionaryEnum.STATIC_RELEASE.getCode() |
| | | ); |
| | | if(ObjectUtil.isEmpty(staticReleaseDic)){ |
| | | return; |
| | | } |
| | | BigDecimal staticRelease = new BigDecimal(staticReleaseDic.getValue() == null ? "0" : staticReleaseDic.getValue()); |
| | | if(BigDecimal.ZERO.compareTo(staticRelease) >= 0){ |
| | | return; |
| | | } |
| | | for(DappMemberEntity dappMemberEntity : dappMemberEntityList){ |
| | | if(1 != dappMemberEntity.getActiveStatus()){ |
| | | continue; |
| | | } |
| | | Long perkMemberId = dappMemberEntity.getId(); |
| | | //获取当前用户所有进行中的业绩释放 |
| | | List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(perkMemberId); |
| | | |
| | | if(CollUtil.isEmpty(mallAchieveRecords)){ |
| | | continue; |
| | | } |
| | | /** |
| | | * 按照订单、比例生成对应的静态释放 |
| | | */ |
| | | for(MallAchieveRecord mallAchieveRecord : mallAchieveRecords){ |
| | | //释放总额 |
| | | BigDecimal costAmount = mallAchieveRecord.getCostAmount(); |
| | | //每日释放金额 |
| | | BigDecimal eachDayPerk = costAmount.multiply(staticRelease).setScale(2,BigDecimal.ROUND_DOWN); |
| | | DappMemberEntity mallAchieveMemberEntity = dappMemberDao.selectById(mallAchieveRecord.getMemberId()); |
| | | sendPerk(mallAchieveMemberEntity,eachDayPerk,mallAchieveRecord.getOrderId(),FundFlowEnum.STATIC_RELEASE.getCode()); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | @Override |
| | | public void speedAutoLevelUpTeamMsg(Long memberId) { |
| | | DappMemberEntity member = dappMemberDao.selectById(memberId); |
| | | if(StrUtil.isBlank(member.getRefererIds())) { |
| | | return; |
| | | } |
| | | |
| | | List<String> ids = StrUtil.split(member.getRefererIds(), ','); |
| | | List<DappMemberEntity> parentMembers = dappMemberDao.selectByInviteIds(ids); |
| | | for (DappMemberEntity parent : parentMembers) { |
| | | //V7不能再升级了 |
| | | if (MemberLevelEnum.V7.getType().equals(member.getAccountType())) { |
| | | continue; |
| | | } |
| | | |
| | | String nextLevelName = MemberLevelEnum.MEMBER.getNextLevel(parent.getAccountType()); |
| | | |
| | | DataDictionaryCustom newLevelDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode("TEAM_LEVEL", nextLevelName); |
| | | if(ObjectUtil.isEmpty(newLevelDic)){ |
| | | continue; |
| | | } |
| | | TeamLevelPerk teamLevelPerk = JSONObject.parseObject(newLevelDic.getValue(), TeamLevelPerk.class); |
| | | |
| | | //需要判断小区业绩 |
| | | if( MemberLevelEnum.V1.getType().equals(nextLevelName)){ |
| | | if (!teamAchieveOther(parent, teamLevelPerk)) { |
| | | continue; |
| | | } |
| | | }else{ |
| | | if (!agentCntFinish(parent, teamLevelPerk)) { |
| | | continue; |
| | | } |
| | | if (!teamAchieveOther(parent, teamLevelPerk)) { |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | parent.setAccountType(nextLevelName); |
| | | dappMemberDao.updateById(parent); |
| | | } |
| | | } |
| | | /** |
| | | * 判断下级代理数量是否达标 |
| | | * |
| | | * @return |
| | | */ |
| | | private boolean agentCntFinish(DappMemberEntity member,TeamLevelPerk teamLevelPerk) { |
| | | if (teamLevelPerk.getLastAgentCnt() == null || teamLevelPerk.getLastAgentCnt() == 0) { |
| | | return true; |
| | | } |
| | | |
| | | // 直推用户 |
| | | List<DappMemberEntity> directMember = dappMemberDao.selectMemberInfoByRefererId(member.getInviteId()); |
| | | if (CollUtil.isEmpty(directMember)) { |
| | | return false; |
| | | } |
| | | |
| | | // 用户团队达到指定代理数量,且都不在同一条线 |
| | | int i = 0; |
| | | for (DappMemberEntity child : directMember) { |
| | | List<DappMemberEntity> mallMembers = dappMemberDao.selectChildAgentList(child.getInviteId(), member.getAccountType()); |
| | | if (CollUtil.isNotEmpty(mallMembers)) { |
| | | i++; |
| | | } |
| | | } |
| | | |
| | | if (i >= teamLevelPerk.getLastAgentCnt()) { |
| | | return true; |
| | | } |
| | | |
| | | log.info("用户:{}代理数量未达标, 当前等级:{}, 当前数量:{}, 目标数量:{}", member.getAddress(), member.getAccountType(), i, teamLevelPerk.getLastAgentCnt()); |
| | | return false; |
| | | } |
| | | /** |
| | | * 团队业绩是否达标 |
| | | */ |
| | | private boolean teamAchieveOther(DappMemberEntity member, TeamLevelPerk teamLevelPerk ) { |
| | | BigDecimal teamIncome = teamLevelPerk.getSmallAchieve(); |
| | | //总业绩 |
| | | BigDecimal teamIncomeMax = BigDecimal.ZERO; |
| | | //所有直推团队,就是这个会员的所有区域的业绩。 |
| | | |
| | | // 直推用户 |
| | | List<DappMemberEntity> childs = dappMemberDao.selectMemberInfoByRefererId(member.getInviteId()); |
| | | List<String> childsInviteIds = childs.stream().map(DappMemberEntity::getInviteId).collect(Collectors.toList()); |
| | | for(String inviteId : childsInviteIds){ |
| | | BigDecimal totalIncomeMember = dappMemberDao.selectAchieveRecordByInviteId(inviteId); |
| | | teamIncomeMax = teamIncomeMax.add(totalIncomeMember); |
| | | } |
| | | |
| | | if (teamIncomeMax.compareTo(teamIncome) >= 0) { |
| | | return true; |
| | | } |
| | | log.info("用户:{}团队业绩未达标, 当前等级:{}, 当前业绩:{}, 目标业绩:{}", member.getAddress(), member.getAccountType(), teamIncomeMax, teamIncome); |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * 团队业绩是否达标 |
| | | * 除去直属的最大的一个业绩团队,剩余的所有业绩之和 |
| | | */ |
| | | private boolean teamAchieve(DappMemberEntity member, TeamLevelPerk teamLevelPerk ) { |
| | | BigDecimal teamIncome = teamLevelPerk.getSmallAchieve(); |
| | | //业绩集合 |
| | | List<BigDecimal> list = new ArrayList<>(); |
| | | //总业绩 |
| | | BigDecimal teamIncomeMax = BigDecimal.ZERO; |
| | | //所有直推团队,就是这个会员的所有区域的业绩。 |
| | | |
| | | // 直推用户 |
| | | List<DappMemberEntity> childs = dappMemberDao.selectMemberInfoByRefererId(member.getInviteId()); |
| | | List<String> childsInviteIds = childs.stream().map(DappMemberEntity::getInviteId).collect(Collectors.toList()); |
| | | for(String inviteId : childsInviteIds){ |
| | | BigDecimal totalIncomeMember = dappMemberDao.selectAchieveRecordByInviteId(inviteId); |
| | | teamIncomeMax = teamIncomeMax.add(totalIncomeMember); |
| | | list.add(totalIncomeMember); |
| | | } |
| | | //去掉一个最大区的业绩 |
| | | BigDecimal bigMax = list.stream().max(BigDecimal::compareTo).get(); |
| | | teamIncomeMax = teamIncomeMax.subtract(bigMax); |
| | | |
| | | if (teamIncomeMax.compareTo(teamIncome) >= 0) { |
| | | return true; |
| | | } |
| | | log.info("用户:{}团队业绩未达标, 当前等级:{}, 当前业绩:{}, 目标业绩:{}", member.getAddress(), member.getAccountType(), teamIncomeMax, teamIncome); |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | @Override |
| | | public BigDecimal getRealNum(Long memberId, BigDecimal amount) { |
| | | BigDecimal returnAmount = BigDecimal.ZERO; |
| | | DappWalletMineEntity dappWalletMineEntity = dappWalletMineDao.selectByMemberId(memberId); |
| | | BigDecimal totalScore = dappWalletMineEntity.getTotalAmount(); |
| | | if(totalScore.compareTo(amount) >= 0){ |
| | | returnAmount = amount; |
| | | }else{ |
| | | returnAmount = totalScore; |
| | | } |
| | | return returnAmount; |
| | | } |
| | | |
| | | @Override |
| | | public void directMemberPerk() { |
| | | List<DappMemberEntity> dappMemberEntityList = dappMemberDao.selectMemberByActiveStatus(); |
| | | if(CollUtil.isEmpty(dappMemberEntityList)){ |
| | | return; |
| | | } |
| | | /** |
| | | * 直推消费分享:享受直接分享人每日消费金额释放的100%加速; |
| | | */ |
| | | for(DappMemberEntity dappMemberEntity : dappMemberEntityList){ |
| | | String inviteId = dappMemberEntity.getInviteId(); |
| | | //该用户全部的直推用户 |
| | | List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectChildMemberDirectOrNot(inviteId, 1, 1); |
| | | if(CollUtil.isEmpty(dappMemberEntities)){ |
| | | continue; |
| | | } |
| | | for(DappMemberEntity directMember : dappMemberEntities){ |
| | | if(1 != directMember.getActiveStatus()){ |
| | | continue; |
| | | } |
| | | DappMemberEntity parentMember = dappMemberDao.selectMemberInfoByInviteId(directMember.getRefererId()); |
| | | if(ObjectUtil.isEmpty(parentMember)){ |
| | | continue; |
| | | } |
| | | Long directMemberId = directMember.getId(); |
| | | |
| | | DataDictionaryCustom directReleaseDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.DIRECT_RELEASE.getType(), |
| | | DataDictionaryEnum.DIRECT_RELEASE.getCode() |
| | | ); |
| | | if(ObjectUtil.isEmpty(directReleaseDic)){ |
| | | continue; |
| | | } |
| | | BigDecimal directRelease = new BigDecimal(directReleaseDic.getValue() == null ? "0" : directReleaseDic.getValue()); |
| | | if(BigDecimal.ZERO.compareTo(directRelease) >= 0){ |
| | | continue; |
| | | } |
| | | /** |
| | | * 获取用户前一天的所有返利记录 |
| | | */ |
| | | List<DappFundFlowEntity> dappFundFlowEntities = dappFundFlowDao.selectListByMemberIdAndTypeAndDate(directMemberId, |
| | | FundFlowEnum.STATIC_RELEASE.getCode(),DateUtil.offsetHour(DateUtil.date(),-12)); |
| | | if(CollUtil.isEmpty(dappFundFlowEntities)){ |
| | | continue; |
| | | } |
| | | for(DappFundFlowEntity dappFundFlowEntity : dappFundFlowEntities){ |
| | | BigDecimal staticReleaseAmount = dappFundFlowEntity.getAmount(); |
| | | BigDecimal directReleaseAmount = staticReleaseAmount.multiply(directRelease).setScale(2, BigDecimal.ROUND_DOWN); |
| | | sendPerk(parentMember,directReleaseAmount,dappFundFlowEntity.getSystemProfitId(),FundFlowEnum.DIRECT_AMOUNT.getCode()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void speedDirectPerkMsg(Long memberId) { |
| | | DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId); |
| | | if(1 != dappMemberEntity.getActiveStatus()){ |
| | | return; |
| | | } |
| | | |
| | | DataDictionaryCustom directReleaseDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.DIRECT_RELEASE.getType(), |
| | | DataDictionaryEnum.DIRECT_RELEASE.getCode() |
| | | ); |
| | | if(ObjectUtil.isEmpty(directReleaseDic)){ |
| | | return; |
| | | } |
| | | BigDecimal directRelease = new BigDecimal(directReleaseDic.getValue() == null ? "0" : directReleaseDic.getValue()); |
| | | if(BigDecimal.ZERO.compareTo(directRelease) >= 0){ |
| | | return; |
| | | } |
| | | DappMemberEntity parentMember = dappMemberDao.selectMemberInfoByInviteId(dappMemberEntity.getRefererId()); |
| | | /** |
| | | * 获取用户前一天的所有返利记录 |
| | | */ |
| | | List<DappFundFlowEntity> dappFundFlowEntities = dappFundFlowDao.selectListByMemberIdAndTypeAndDate(memberId, |
| | | FundFlowEnum.STATIC_RELEASE.getCode(),DateUtil.offsetHour(DateUtil.date(),-12)); |
| | | for(DappFundFlowEntity dappFundFlowEntity : dappFundFlowEntities){ |
| | | BigDecimal staticReleaseAmount = dappFundFlowEntity.getAmount(); |
| | | BigDecimal directReleaseAmount = staticReleaseAmount.multiply(directRelease).setScale(2, BigDecimal.ROUND_DOWN); |
| | | sendPerk(parentMember,directReleaseAmount,dappFundFlowEntity.getSystemProfitId(),FundFlowEnum.DIRECT_AMOUNT.getCode()); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void teamStaticPerk() { |
| | | //平级 |
| | | DataDictionaryCustom teamPerkEqualsDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.TEAM_PERK_LEVEL_EQUALS.getType(), |
| | | DataDictionaryEnum.TEAM_PERK_LEVEL_EQUALS.getCode()); |
| | | BigDecimal teamPerkEquals = new BigDecimal(ObjectUtil.isEmpty(teamPerkEqualsDic) ? "0.1" : teamPerkEqualsDic.getValue()); |
| | | DataDictionaryCustom staticReleaseDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.STATIC_RELEASE.getType(), |
| | | DataDictionaryEnum.STATIC_RELEASE.getCode()); |
| | | BigDecimal staticRelease = new BigDecimal(ObjectUtil.isEmpty(staticReleaseDic) ? "0.006" : staticReleaseDic.getValue()); |
| | | |
| | | List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V1.getType()); |
| | | shareStaticPerk(dappMemberEntities,FundFlowEnum.SHARE_PERK_V1.getCode()); |
| | | teamStaticPerkMemberLevel(dappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V1.getCode()); |
| | | isAllPerkMemberLevel(dappMemberEntities,MemberLevelEnum.V1.getType(),FundFlowEnum.ALL_PERK_V1.getCode()); |
| | | |
| | | List<DappMemberEntity> v2DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V2.getType()); |
| | | shareStaticPerk(v2DappMemberEntities,FundFlowEnum.SHARE_PERK_V2.getCode()); |
| | | teamStaticPerkMemberLevel(v2DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V2.getCode()); |
| | | isAllPerkMemberLevel(v2DappMemberEntities,MemberLevelEnum.V2.getType(),FundFlowEnum.ALL_PERK_V2.getCode()); |
| | | |
| | | List<DappMemberEntity> v3DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V3.getType()); |
| | | shareStaticPerk(v3DappMemberEntities,FundFlowEnum.SHARE_PERK_V3.getCode()); |
| | | teamStaticPerkMemberLevel(v3DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V3.getCode()); |
| | | isAllPerkMemberLevel(v3DappMemberEntities,MemberLevelEnum.V3.getType(),FundFlowEnum.ALL_PERK_V3.getCode()); |
| | | |
| | | List<DappMemberEntity> v4DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V4.getType()); |
| | | shareStaticPerk(v4DappMemberEntities,FundFlowEnum.SHARE_PERK_V4.getCode()); |
| | | teamStaticPerkMemberLevel(v4DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V4.getCode()); |
| | | isAllPerkMemberLevel(v4DappMemberEntities,MemberLevelEnum.V4.getType(),FundFlowEnum.ALL_PERK_V4.getCode()); |
| | | |
| | | List<DappMemberEntity> v5DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V5.getType()); |
| | | shareStaticPerk(v5DappMemberEntities,FundFlowEnum.SHARE_PERK_V5.getCode()); |
| | | teamStaticPerkMemberLevel(v5DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V5.getCode()); |
| | | isAllPerkMemberLevel(v5DappMemberEntities,MemberLevelEnum.V5.getType(),FundFlowEnum.ALL_PERK_V5.getCode()); |
| | | |
| | | List<DappMemberEntity> v6DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V6.getType()); |
| | | shareStaticPerk(v6DappMemberEntities,FundFlowEnum.SHARE_PERK_V6.getCode()); |
| | | teamStaticPerkMemberLevel(v6DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V6.getCode()); |
| | | isAllPerkMemberLevel(v6DappMemberEntities,MemberLevelEnum.V6.getType(),FundFlowEnum.ALL_PERK_V6.getCode()); |
| | | |
| | | List<DappMemberEntity> v7DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V7.getType()); |
| | | shareStaticPerk(v7DappMemberEntities,FundFlowEnum.SHARE_PERK_V7.getCode()); |
| | | teamStaticPerkMemberLevel(v7DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V7.getCode()); |
| | | isAllPerkMemberLevel(v7DappMemberEntities,MemberLevelEnum.V7.getType(),FundFlowEnum.ALL_PERK_V7.getCode()); |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void updateAchieve() { |
| | | /** |
| | | * 每个人预期获得的总流水 |
| | | */ |
| | | List<DappFundFlowEntity> dappFundFlowEntities = dappFundFlowDao.selectListByTypeAndDate(FundFlowEnum.ADD_AMOUNT.getCode(), DateUtil.date()); |
| | | if(CollUtil.isEmpty(dappFundFlowEntities)){ |
| | | return; |
| | | } |
| | | for(DappFundFlowEntity dappFundFlowEntity : dappFundFlowEntities){ |
| | | Long memberId = dappFundFlowEntity.getMemberId(); |
| | | //当日预期总收益 |
| | | BigDecimal amount = dappFundFlowEntity.getAmount(); |
| | | if(BigDecimal.ZERO.compareTo(amount) >= 0){ |
| | | continue; |
| | | } |
| | | //当日预期总收益 |
| | | BigDecimal amountMagic = amount; |
| | | List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(memberId); |
| | | if(CollUtil.isEmpty(mallAchieveRecords)){ |
| | | return; |
| | | } |
| | | //实际获取总收益 |
| | | BigDecimal localTotalAchieve = BigDecimal.ZERO; |
| | | BigDecimal totalAchieve = mallAchieveRecords.stream().map(MallAchieveRecord::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | |
| | | //用户每日获取的最大值 |
| | | DataDictionaryCustom maxReleaseDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.MAX_RELEASE.getType(), |
| | | DataDictionaryEnum.MAX_RELEASE.getCode() |
| | | ); |
| | | BigDecimal maxRelease = new BigDecimal(ObjectUtil.isEmpty(maxReleaseDic) ? "1" : maxReleaseDic.getValue()); |
| | | //用户每日获取的最大值 |
| | | BigDecimal maxReleaseMember = totalAchieve.multiply(maxRelease).setScale(2, BigDecimal.ROUND_DOWN); |
| | | if(amount.compareTo(maxReleaseMember) > 0){ |
| | | amount = maxReleaseMember; |
| | | } |
| | | //当日获取总收益大于总业绩 |
| | | if(amount.compareTo(totalAchieve) >= 0){ |
| | | for(MallAchieveRecord memberAchieve : mallAchieveRecords){ |
| | | memberAchieve.setIsNormal(2); |
| | | memberAchieve.setAmount(BigDecimal.ZERO); |
| | | mallAchieveRecordMapper.updateById(memberAchieve); |
| | | } |
| | | localTotalAchieve = totalAchieve; |
| | | amount = amount.subtract(totalAchieve); |
| | | }else{ |
| | | /** |
| | | * |
| | | * amount 100 a1 100 a2 30 a3 10 |
| | | * localTotalAchieve 100 100 |
| | | * amount 0 0 |
| | | * |
| | | */ |
| | | for(MallAchieveRecord memberAchieve : mallAchieveRecords){ |
| | | BigDecimal achieveAmount = memberAchieve.getAmount(); |
| | | if(BigDecimal.ZERO.compareTo(amount) >= 0){ |
| | | break; |
| | | }else if(amount.compareTo(achieveAmount) < 0){ |
| | | memberAchieve.setAmount(achieveAmount.subtract(amount).setScale(2,BigDecimal.ROUND_DOWN)); |
| | | mallAchieveRecordMapper.updateById(memberAchieve); |
| | | localTotalAchieve = localTotalAchieve.add(amount); |
| | | amount = BigDecimal.ZERO; |
| | | continue; |
| | | }else{ |
| | | memberAchieve.setIsNormal(2); |
| | | memberAchieve.setAmount(BigDecimal.ZERO); |
| | | mallAchieveRecordMapper.updateById(memberAchieve); |
| | | localTotalAchieve = localTotalAchieve.add(achieveAmount); |
| | | amount = amount.subtract(achieveAmount); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 用户减少赠送积分 |
| | | */ |
| | | DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId); |
| | | DappWalletMineEntity dappWalletMineEntity = dappWalletMineDao.selectByMemberId(memberId); |
| | | BigDecimal totalScore = dappWalletMineEntity.getTotalAmount(); |
| | | BigDecimal availableScore = dappWalletMineEntity.getAvailableAmount(); |
| | | |
| | | if(localTotalAchieve.compareTo(totalScore) >= 0){ |
| | | localTotalAchieve = totalScore; |
| | | //当实际获取大于用户的赠送积分,将用户更新为未激活 |
| | | dappMemberEntity.setActiveStatus(2); |
| | | dappMemberDao.updateById(dappMemberEntity); |
| | | } |
| | | |
| | | DappAccountMoneyChangeEntity reduceScoreAMC = new DappAccountMoneyChangeEntity( |
| | | memberId, |
| | | totalScore, |
| | | amountMagic.negate(), |
| | | localTotalAchieve.negate(), |
| | | AccountFlowEnum.SCORE.getCode(), |
| | | null); |
| | | dappAccountMoneyChangeDao.insert(reduceScoreAMC); |
| | | |
| | | //插入积分流水 |
| | | DappFundFlowEntity scoreFlow = new DappFundFlowEntity( |
| | | memberId, |
| | | localTotalAchieve.negate(), |
| | | FundFlowEnum.REDUCE_SCORE_REAL.getCode(), |
| | | DappFundFlowEntity.WITHDRAW_STATUS_AGREE, |
| | | BigDecimal.ZERO); |
| | | dappFundFlowDao.insert(scoreFlow); |
| | | |
| | | BigDecimal totalScoreRelease = totalScore.subtract(localTotalAchieve); |
| | | BigDecimal availableScoreRelease = availableScore.subtract(localTotalAchieve); |
| | | //更新积分账户 |
| | | dappWalletMineEntity.setTotalAmount(totalScoreRelease); |
| | | dappWalletMineEntity.setAvailableAmount(availableScoreRelease); |
| | | dappWalletMineDao.updateById(dappWalletMineEntity); |
| | | |
| | | |
| | | //用户增加余额 |
| | | DappWalletCoinEntity dappWalletCoinEntity = dappWalletCoinDao.selectByMemberId(memberId); |
| | | BigDecimal totalAmount = dappWalletCoinEntity.getTotalAmount(); |
| | | BigDecimal availableAmount = dappWalletCoinEntity.getAvailableAmount(); |
| | | |
| | | DappAccountMoneyChangeEntity addAmountAMC = new DappAccountMoneyChangeEntity( |
| | | memberId, |
| | | totalAmount, |
| | | amountMagic, |
| | | localTotalAchieve, |
| | | AccountFlowEnum.AMOUNT.getCode(), |
| | | null); |
| | | dappAccountMoneyChangeDao.insert(addAmountAMC); |
| | | //插入余额流水 |
| | | DappFundFlowEntity amountFlow = new DappFundFlowEntity( |
| | | memberId, |
| | | localTotalAchieve, |
| | | FundFlowEnum.ADD_AMOUNT_REAL.getCode(), |
| | | DappFundFlowEntity.WITHDRAW_STATUS_AGREE, |
| | | BigDecimal.ZERO); |
| | | dappFundFlowDao.insert(amountFlow); |
| | | |
| | | BigDecimal totalAmountRelease = totalAmount.add(localTotalAchieve); |
| | | BigDecimal availableAmountRelease = availableAmount.add(localTotalAchieve); |
| | | //更新余额账户 |
| | | dappWalletCoinEntity.setTotalAmount(totalAmountRelease); |
| | | dappWalletCoinEntity.setAvailableAmount(availableAmountRelease); |
| | | dappWalletCoinDao.updateById(dappWalletCoinEntity); |
| | | |
| | | DappAccountMoneyChangeEntity record = new DappAccountMoneyChangeEntity( |
| | | memberId, |
| | | totalAmount, |
| | | amountMagic, |
| | | localTotalAchieve, |
| | | AccountFlowEnum.AMOUNT_RECORD.getCode(), |
| | | null); |
| | | dappAccountMoneyChangeDao.insert(record); |
| | | |
| | | //实时更新用户等级 |
| | | chainProducer.sendAutoLevelUpTeamMsg(memberId); |
| | | } |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void speedSalePackageMsg(Long flowId) { |
| | | DappFundFlowEntity dappFundFlowEntity = dappFundFlowDao.selectById(flowId); |
| | | if(DappFundFlowEntity.WITHDRAW_STATUS_ING != dappFundFlowEntity.getStatus()){ |
| | | return; |
| | | } |
| | | BigDecimal cnt = dappFundFlowEntity.getAmount(); |
| | | Long memberId = dappFundFlowEntity.getMemberId(); |
| | | DappMemberEntity dappMemberEntity = dappMemberDao.selectById(memberId); |
| | | if(BigDecimal.ZERO.compareTo(cnt) >= 0){ |
| | | return; |
| | | } |
| | | DataDictionaryCustom packageScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.PACKAGE_SCORE_PRICE.getType(), |
| | | DataDictionaryEnum.PACKAGE_SCORE_PRICE.getCode() |
| | | ); |
| | | BigDecimal packageScorePrice = new BigDecimal(ObjectUtil.isEmpty(packageScorePriceDic) ? "0" : packageScorePriceDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); |
| | | //卖出资产乘以价格获取到预期获取的总额 |
| | | BigDecimal totalAmount = cnt.multiply(packageScorePrice).setScale(2, BigDecimal.ROUND_DOWN); |
| | | //资产包卖出划入底池比例 |
| | | DataDictionaryCustom packageToPoorPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.PACKAGE_SALE_TO_POOR_PERCENT.getType(), |
| | | DataDictionaryEnum.PACKAGE_SALE_TO_POOR_PERCENT.getCode() |
| | | ); |
| | | BigDecimal packageToPoorPercent = new BigDecimal(ObjectUtil.isEmpty(packageToPoorPercentDic) ? "0.1" : packageToPoorPercentDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); |
| | | //划入底池的金额 |
| | | BigDecimal poorAmount = totalAmount.multiply(packageToPoorPercent).setScale(2, BigDecimal.ROUND_DOWN); |
| | | //实际获取的金额 |
| | | BigDecimal realAmount = totalAmount.subtract(poorAmount); |
| | | //生成一条资金流水 |
| | | DappFundFlowEntity scoreFlow = new DappFundFlowEntity( |
| | | memberId, |
| | | realAmount, |
| | | FundFlowEnum.SALE_PACKAGE_AMOUNT.getCode(), |
| | | DappFundFlowEntity.WITHDRAW_STATUS_ING, |
| | | BigDecimal.ZERO); |
| | | dappFundFlowDao.insert(scoreFlow); |
| | | dappWalletCoinDao.addTotalAndaddAvailableByMemberId(memberId,realAmount); |
| | | DappFundFlowEntity feeFlow = new DappFundFlowEntity( |
| | | memberId, |
| | | poorAmount, |
| | | FundFlowEnum.SALE_PACKAGE_AMOUNT_FEE.getCode(), |
| | | DappFundFlowEntity.WITHDRAW_STATUS_ING, |
| | | BigDecimal.ZERO); |
| | | dappFundFlowDao.insert(feeFlow); |
| | | |
| | | //卖出积分直接销毁。 |
| | | DataDictionaryCustom packageTotalScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getType(), |
| | | DataDictionaryEnum.PACKAGE_TOTAL_SCORE.getCode() |
| | | ); |
| | | BigDecimal packageTotalScore = new BigDecimal(ObjectUtil.isEmpty(packageTotalScoreDic) ? "21000" : packageTotalScoreDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); |
| | | BigDecimal avaPackageTotalScore = packageTotalScore.subtract(cnt); |
| | | packageTotalScoreDic.setValue(avaPackageTotalScore.toString()); |
| | | dataDictionaryCustomMapper.updateById(packageTotalScoreDic); |
| | | //更新USDT底池 |
| | | DataDictionaryCustom packagePoorDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.PACKAGE_POOR.getType(), |
| | | DataDictionaryEnum.PACKAGE_POOR.getCode() |
| | | ); |
| | | BigDecimal packagePoor = new BigDecimal(ObjectUtil.isEmpty(packagePoorDic) ? "0" : packagePoorDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); |
| | | BigDecimal avaPackagePoor = packagePoor.add(poorAmount); |
| | | packagePoorDic.setValue(avaPackagePoor.toString()); |
| | | dataDictionaryCustomMapper.updateById(packagePoorDic); |
| | | //计算当前价格 |
| | | BigDecimal divide = avaPackagePoor.divide(avaPackageTotalScore, 2, BigDecimal.ROUND_DOWN); |
| | | packageScorePriceDic.setValue(divide.toString()); |
| | | dataDictionaryCustomMapper.updateById(packageScorePriceDic); |
| | | } |
| | | |
| | | public void shareStaticPerk(List<DappMemberEntity> dappMemberEntities, |
| | | int code) { |
| | | if(CollUtil.isEmpty(dappMemberEntities)){ |
| | | return; |
| | | } |
| | | for(DappMemberEntity dappMemberEntity : dappMemberEntities){ |
| | | /** |
| | | * 每个人的第一次入单之后的业绩不一样 |
| | | */ |
| | | Date createTime = dappMemberEntity.getCreateTime(); |
| | | //下第一单之后的共享区全部业绩 |
| | | BigDecimal totalAchieve = mallAchieveRecordMapper.selectAchieveTotalByCreateTime(createTime); |
| | | //个人总业绩 |
| | | BigDecimal totalMemberAchieve = mallAchieveRecordMapper.selectAchieveTotalByMemberIdAndCreateTime(dappMemberEntity.getId(), createTime); |
| | | if(BigDecimal.ZERO.compareTo(totalAchieve) >= 0 || BigDecimal.ZERO.compareTo(totalMemberAchieve) >= 0){ |
| | | continue; |
| | | } |
| | | String accountType = dappMemberEntity.getAccountType(); |
| | | DataDictionaryCustom accountTypeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | "TEAM_LEVEL", accountType |
| | | ); |
| | | if(ObjectUtil.isEmpty(accountTypeDic)){ |
| | | continue; |
| | | } |
| | | TeamLevelPerk teamLevelPerk = JSONObject.parseObject(accountTypeDic.getValue(), TeamLevelPerk.class); |
| | | BigDecimal shareMinPercent = teamLevelPerk.getShareMinPercent(); |
| | | BigDecimal sharePerk = totalAchieve.multiply(shareMinPercent).setScale(2,BigDecimal.ROUND_DOWN); |
| | | |
| | | BigDecimal shareMaxPercent = teamLevelPerk.getShareMaxPercent(); |
| | | BigDecimal maxSharePerk = totalMemberAchieve.multiply(shareMaxPercent).setScale(2,BigDecimal.ROUND_DOWN); |
| | | if(BigDecimal.ZERO.compareTo(sharePerk) >= 0 || BigDecimal.ZERO.compareTo(maxSharePerk) >= 0){ |
| | | continue; |
| | | } |
| | | //共享区加速万分之2,上限1.2%(按本金计) |
| | | if(sharePerk.compareTo(maxSharePerk) >= 0){ |
| | | sharePerk = maxSharePerk; |
| | | } |
| | | sendPerk(dappMemberEntity, sharePerk, dappMemberEntity.getId(), code); |
| | | } |
| | | } |
| | | |
| | | public void isAllPerkMemberLevel(List<DappMemberEntity> dappMemberEntities, |
| | | String level, |
| | | int code){ |
| | | if(CollUtil.isEmpty(dappMemberEntities)){ |
| | | return; |
| | | } |
| | | DataDictionaryCustom teamPerkMemberDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | "TEAM_LEVEL", level); |
| | | TeamLevelPerk adminAgentInfo = JSONObject.parseObject(teamPerkMemberDic.getValue(), TeamLevelPerk.class); |
| | | BigDecimal orderSalePercent = adminAgentInfo.getOrderSalePercent(); |
| | | if(BigDecimal.ZERO.compareTo(orderSalePercent) >= 0){ |
| | | return; |
| | | } |
| | | allPerkMemberLevel(dappMemberEntities,level,code); |
| | | |
| | | } |
| | | |
| | | public void allPerkMemberLevel(List<DappMemberEntity> dappMemberEntities, |
| | | String level, |
| | | int code) { |
| | | /** |
| | | * 全网24小时内的全部分红 |
| | | */ |
| | | Date createTime = DateUtil.offsetHour(DateUtil.date(),-24); |
| | | //下第一单之后的共享区全部业绩 |
| | | BigDecimal totalAchieve = mallAchieveRecordMapper.selectAchieveTotalByCreateTime(createTime); |
| | | if(BigDecimal.ZERO.compareTo(totalAchieve) >= 0){ |
| | | return; |
| | | } |
| | | DataDictionaryCustom teamPerkMemberDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | "TEAM_LEVEL", level); |
| | | TeamLevelPerk adminAgentInfo = JSONObject.parseObject(teamPerkMemberDic.getValue(), TeamLevelPerk.class); |
| | | BigDecimal orderSalePercent = adminAgentInfo.getOrderSalePercent(); |
| | | //每人平分数量 |
| | | BigDecimal divide = totalAchieve.multiply(orderSalePercent).divide(new BigDecimal(dappMemberEntities.size()), 2, BigDecimal.ROUND_DOWN); |
| | | |
| | | for(DappMemberEntity dappMemberEntity : dappMemberEntities){ |
| | | sendPerk(dappMemberEntity, divide, dappMemberEntity.getId(), code); |
| | | } |
| | | } |
| | | |
| | | public void teamStaticPerkMemberLevel(List<DappMemberEntity> dappMemberEntities, |
| | | BigDecimal teamPerkEquals, |
| | | BigDecimal staticRelease, |
| | | int code) { |
| | | if(CollUtil.isEmpty(dappMemberEntities)){ |
| | | return; |
| | | } |
| | | for(DappMemberEntity teamPerkMember : dappMemberEntities){ |
| | | String level = teamPerkMember.getAccountType(); |
| | | //比较两个级别的大小,level大于levelNormal返回1 |
| | | int compareMin = MemberLevelEnum.V1.compareLevel(level, MemberLevelEnum.V1.getType()); |
| | | int compareMax = MemberLevelEnum.V1.compareLevel(MemberLevelEnum.V7.getType(), level); |
| | | if(compareMin >= 1 && compareMax >= 1){ |
| | | DataDictionaryCustom teamPerkMemberDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | "TEAM_LEVEL", level); |
| | | TeamLevelPerk adminAgentInfo = JSONObject.parseObject(teamPerkMemberDic.getValue(), TeamLevelPerk.class); |
| | | BigDecimal cashPercent = adminAgentInfo.getTeamPercent(); |
| | | // 直推用户 |
| | | List<DappMemberEntity> childs = dappMemberDao.selectMemberInfoByRefererId(teamPerkMember.getInviteId()); |
| | | List<DappMemberEntity> collect = childs.stream() |
| | | .filter(dappMemberEntity -> dappMemberEntity.getAccountType() == MemberLevelEnum.V1.getType()) |
| | | .collect(Collectors.toList()); |
| | | //极差 |
| | | if(CollUtil.isNotEmpty(collect)){ |
| | | //平级 |
| | | cashPercent = teamPerkEquals; |
| | | } |
| | | //所有直推团队,就是这个会员的所有区域的业绩。 |
| | | List<String> childsInviteIds = childs.stream().map(DappMemberEntity::getInviteId).collect(Collectors.toList()); |
| | | //总业绩 |
| | | BigDecimal teamIncomeMax = BigDecimal.ZERO; |
| | | for(String inviteId : childsInviteIds){ |
| | | BigDecimal totalIncomeMember = dappMemberDao.selectAllAchieveByInviteId(inviteId); |
| | | teamIncomeMax = teamIncomeMax.add(totalIncomeMember); |
| | | } |
| | | if(BigDecimal.ZERO.compareTo(teamIncomeMax) >= 0){ |
| | | continue; |
| | | } |
| | | //V1加速团队静态收益的15%=每日静态的20000*6‰*15%=18元的额外释放加速 |
| | | BigDecimal cashAmount = teamIncomeMax.multiply(cashPercent).multiply(staticRelease).setScale(2, BigDecimal.ROUND_DOWN); |
| | | |
| | | BigDecimal bigDecimal = sendPerk(teamPerkMember, cashAmount, teamPerkMember.getId(), code); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | private BigDecimal sendPerk(DappMemberEntity parentMember,BigDecimal directReleaseAmount,Long orderId |
| | | ,Integer fundFlowEnumType){ |
| | | |
| | | BigDecimal realScoreReduce = directReleaseAmount; |
| | | if(BigDecimal.ZERO.compareTo(directReleaseAmount) >= 0){ |
| | | return realScoreReduce; |
| | | } |
| | | //生成一条静态补贴的流水 |
| | | DappFundFlowEntity realUsdtAmountFlow = new DappFundFlowEntity( |
| | | parentMember.getId(), |
| | | realScoreReduce, |
| | | fundFlowEnumType, |
| | | DappFundFlowEntity.WITHDRAW_STATUS_AGREE, |
| | | BigDecimal.ZERO, |
| | | orderId); |
| | | dappFundFlowDao.insert(realUsdtAmountFlow); |
| | | //插入积分流水 |
| | | DappFundFlowEntity scoreFlow = new DappFundFlowEntity( |
| | | parentMember.getId(), |
| | | realScoreReduce.negate(), |
| | | FundFlowEnum.REDUCE_SCORE.getCode(), |
| | | DappFundFlowEntity.WITHDRAW_STATUS_AGREE, |
| | | BigDecimal.ZERO, |
| | | orderId); |
| | | dappFundFlowDao.insert(scoreFlow); |
| | | //插入余额流水 |
| | | DappFundFlowEntity amountFlow = new DappFundFlowEntity( |
| | | parentMember.getId(), |
| | | realScoreReduce, |
| | | FundFlowEnum.ADD_AMOUNT.getCode(), |
| | | DappFundFlowEntity.WITHDRAW_STATUS_AGREE, |
| | | BigDecimal.ZERO, |
| | | orderId); |
| | | dappFundFlowDao.insert(amountFlow); |
| | | return realScoreReduce; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 测试转账 |
| | | * @param args |
| | | */ |
| | | // public static void main(String[] args) { |
| | | // String transfer = ChainService.getInstance(ChainEnum.BSC_USDT_A_POOL.name()).transfer("0x74fC0e035f315F7BD8b7686e22581AB1afC45e97", new BigDecimal(1)); |
| | | // System.out.println(transfer); |
| | | // |
| | | // } |
| | | |
| | | /** |
| | | * 生成当前分钟的k线数据,type为0 |
| | |
| | | DappAKlineEntity oldOne = dappAKlineMapper.selectOneByType(); |
| | | if(ObjectUtil.isNotEmpty(oldOne)){ |
| | | dappAKlineEntity.setOpenPrice(oldOne.getClosePrice()); |
| | | dappAKlineEntity.setLowestPrice(oldOne.getClosePrice()); |
| | | }else{ |
| | | dappAKlineEntity.setOpenPrice(coinAPrice); |
| | | dappAKlineEntity.setLowestPrice(coinAPrice); |
| | | } |
| | | dappAKlineEntity.setLowestPrice(coinAPrice); |
| | | dappAKlineEntity.setHighestPrice(coinAPrice); |
| | | dappAKlineEntity.setClosePrice(coinAPrice); |
| | | dappAKlineMapper.insert(dappAKlineEntity); |