| | |
| | | Long directMemberId = directMember.getId(); |
| | | chainProducer.sendDirectPerkMsg(directMemberId); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | @Override |
| | |
| | | * 获取用户前一天的所有返利记录 |
| | | */ |
| | | List<DappFundFlowEntity> dappFundFlowEntities = dappFundFlowDao.selectListByMemberIdAndTypeAndDate(memberId, |
| | | FundFlowEnum.STATIC_RELEASE.getCode(),DateUtil.now()); |
| | | 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); |
| | |
| | | |
| | | @Override |
| | | public void teamStaticPerk() { |
| | | List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V1.getType()); |
| | | if(CollUtil.isEmpty(dappMemberEntities)){ |
| | | return; |
| | | } |
| | | |
| | | //平级 |
| | | DataDictionaryCustom teamPerkEqualsDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | DataDictionaryEnum.TEAM_PERK_LEVEL_EQUALS.getType(), |
| | |
| | | DataDictionaryEnum.STATIC_RELEASE.getCode()); |
| | | BigDecimal staticRelease = new BigDecimal(ObjectUtil.isEmpty(staticReleaseDic) ? "0.006" : staticReleaseDic.getValue()); |
| | | |
| | | List<DappMemberEntity> dappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V1.getType()); |
| | | teamStaticPerkMemberLevel(dappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V1.getCode()); |
| | | |
| | | List<DappMemberEntity> v2DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V2.getType()); |
| | | teamStaticPerkMemberLevel(v2DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V2.getCode()); |
| | | |
| | | List<DappMemberEntity> v3DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V3.getType()); |
| | | teamStaticPerkMemberLevel(v3DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V3.getCode()); |
| | | |
| | | List<DappMemberEntity> v4DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V4.getType()); |
| | | teamStaticPerkMemberLevel(v4DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V4.getCode()); |
| | | |
| | | List<DappMemberEntity> v5DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V5.getType()); |
| | | teamStaticPerkMemberLevel(v5DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V5.getCode()); |
| | | |
| | | List<DappMemberEntity> v6DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V6.getType()); |
| | | teamStaticPerkMemberLevel(v6DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V6.getCode()); |
| | | |
| | | List<DappMemberEntity> v7DappMemberEntities = dappMemberDao.selectMemberByAccountType(MemberLevelEnum.V7.getType()); |
| | | teamStaticPerkMemberLevel(v7DappMemberEntities,teamPerkEquals,staticRelease,FundFlowEnum.TEAM_PERK_V7.getCode()); |
| | | |
| | | } |
| | | |
| | | public void shareStaticPerk(List<DappMemberEntity> dappMemberEntities,int code) { |
| | | if(CollUtil.isEmpty(dappMemberEntities)){ |
| | | return; |
| | | } |
| | | for(DappMemberEntity dappMemberEntity : dappMemberEntities){ |
| | | if(StrUtil.isNotEmpty(dappMemberEntity.getRefererIds())){ |
| | | String referrerIds = dappMemberEntity.getRefererIds(); |
| | | List<String> referrerIdList = StrUtil.splitTrim(referrerIds, ","); |
| | | |
| | | if(CollUtil.isNotEmpty(referrerIdList)){ |
| | | List<DappMemberEntity> mallMemberTeamPerk = dappMemberDao.selectByInviteIds(referrerIdList); |
| | | } |
| | | } |
| | | |
| | | if(CollUtil.isNotEmpty(mallMemberTeamPerk)){ |
| | | String levelNormal = MemberLevelEnum.V1.getType(); |
| | | BigDecimal cashPercentNormal = BigDecimal.ZERO; |
| | | |
| | | for(DappMemberEntity teamPerkMember : mallMemberTeamPerk){ |
| | | String level = teamPerkMember.getAccountType(); |
| | | //比较两个级别的大小,level大于levelNormal返回1 |
| | | int compareMin = MemberLevelEnum.V1.compareLevel(level, levelNormal); |
| | | 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(); |
| | | //极差 |
| | | if(MemberLevelEnum.V1.compareLevel(levelNormal, level) == 0){ |
| | | //平级 |
| | | cashPercent = cashPercent.subtract(teamPerkEquals); |
| | | }else{ |
| | | cashPercent = cashPercent.subtract(cashPercentNormal); |
| | | } |
| | | //总业绩 |
| | | BigDecimal teamIncomeMax = BigDecimal.ZERO; |
| | | //所有直推团队,就是这个会员的所有区域的业绩。 |
| | | |
| | | // 直推用户 |
| | | List<DappMemberEntity> childs = dappMemberDao.selectMemberInfoByRefererId(teamPerkMember.getInviteId()); |
| | | List<String> childsInviteIds = childs.stream().map(DappMemberEntity::getInviteId).collect(Collectors.toList()); |
| | | 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, null, FundFlowEnum.TEAM_PERK.getCode()); |
| | | levelNormal = level; |
| | | cashPercentNormal = adminAgentInfo.getTeamPercent(); |
| | | } |
| | | } |
| | | } |
| | | 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, null, code); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | private BigDecimal sendPerk(DappMemberEntity parentMember,BigDecimal directReleaseAmount,Long orderId |
| | | ,Integer fundFlowEnumType){ |
| | | |
| | | BigDecimal realScoreReduce = BigDecimal.ZERO; |
| | | //用户减少赠送积分 |
| | | if(BigDecimal.ZERO.compareTo(directReleaseAmount) >= 0){ |
| | | return realScoreReduce; |
| | | } |
| | | /** |
| | | * 减少业绩 |
| | | */ |
| | | List<MallAchieveRecord> mallAchieveRecords = mallAchieveRecordMapper.selectListByMemberId(parentMember.getId()); |
| | | if(CollUtil.isEmpty(mallAchieveRecords)){ |
| | | return realScoreReduce; |
| | | } |
| | | BigDecimal totalAchieve = mallAchieveRecords.stream().map(MallAchieveRecord::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | if(directReleaseAmount.compareTo(totalAchieve) >= 0){ |
| | | realScoreReduce = totalAchieve; |
| | | for(MallAchieveRecord mallAchieveRecord : mallAchieveRecords){ |
| | | mallAchieveRecord.setAmount(BigDecimal.ZERO); |
| | | mallAchieveRecord.setIsNormal(2); |
| | | mallAchieveRecordMapper.updateById(mallAchieveRecord); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 用户减少赠送积分 |
| | | */ |
| | | DappWalletMineEntity dappWalletMineEntity = dappWalletMineDao.selectByMemberId(parentMember.getId()); |
| | | BigDecimal totalScore = dappWalletMineEntity.getTotalAmount(); |
| | | BigDecimal availableScore = dappWalletMineEntity.getAvailableAmount(); |