| | |
| | | private final MallMemberCouponMapper mallMemberCouponMapper; |
| | | private final RunVipMapper runVipMapper; |
| | | private final MallMemberWalletMapper mallMemberWalletMapper; |
| | | private final RunNodeSetMapper runNodeSetMapper; |
| | | private final MallChargeMapper mallChargeMapper; |
| | | |
| | | private final AsyncService asyncService; |
| | | |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void updateNodeScore() { |
| | | /** |
| | | * 获取全部的节点 |
| | | */ |
| | | List<MallMember> mallMembers = mallMemberMapper.selectList( |
| | | new LambdaQueryWrapper<MallMember>() |
| | | .eq(MallMember::getDirector, YesOrNoEnum.YES.getValue()) |
| | | ); |
| | | if(CollUtil.isEmpty(mallMembers)){ |
| | | return; |
| | | } |
| | | //获取节点设置 |
| | | List<RunNodeSet> runNodeSets = runNodeSetMapper.selectList(null); |
| | | BigDecimal balanceToCoin = new BigDecimal( |
| | | dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | RunVipDataDictionaryEnum.RUN_VIP_BALANCE_TO_COIN.getType(), |
| | | RunVipDataDictionaryEnum.RUN_VIP_BALANCE_TO_COIN.getCode()).getValue() |
| | | ).setScale(2, BigDecimal.ROUND_DOWN); |
| | | for (MallMember item : mallMembers) { |
| | | //获取总业绩 |
| | | BigDecimal achieve = getDirectAchieve(item.getInviteId()); |
| | | BigDecimal nodePercent = getNodePercent(runNodeSets, achieve); |
| | | asyncService.releaseNodeCoin(achieve,nodePercent,balanceToCoin,item.getId()); |
| | | } |
| | | } |
| | | |
| | | private BigDecimal getDirectAchieve(String inviteId) { |
| | | |
| | | try { |
| | | // 获取直推成员和团队成员的ID集合 |
| | | Set<Long> memberIds = getTeamMemberIds(inviteId); |
| | | |
| | | if (CollUtil.isEmpty(memberIds)) { |
| | | return BigDecimal.ZERO; |
| | | } |
| | | |
| | | // 获取团队业绩(不包含本人业绩) |
| | | List<MallCharge> mallCharges = mallChargeMapper.selectList( |
| | | new LambdaQueryWrapper<MallCharge>() |
| | | .in(MallCharge::getMemberId, memberIds) |
| | | .eq(MallCharge::getState, YesOrNoEnum.YES.getValue()) |
| | | ); |
| | | |
| | | if (CollUtil.isEmpty(mallCharges)) { |
| | | return BigDecimal.ZERO; |
| | | } |
| | | |
| | | return mallCharges.stream() |
| | | .map(MallCharge::getAmount) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | } catch (Exception e) { |
| | | // 异常处理 |
| | | log.error("Error occurred while calculating direct achieve for member: {}", inviteId, e); |
| | | return BigDecimal.ZERO; |
| | | } |
| | | } |
| | | |
| | | private Set<Long> getTeamMemberIds(String inviteId) { |
| | | Set<Long> memberIds = new HashSet<>(); |
| | | // 获取直推成员 |
| | | List<MallMember> directMembers = mallMemberMapper.selectList( |
| | | new LambdaQueryWrapper<MallMember>() |
| | | .eq(MallMember::getReferrerId, inviteId) |
| | | ); |
| | | memberIds.addAll(directMembers.stream().map(MallMember::getId).collect(Collectors.toSet())); |
| | | |
| | | // 获取团队成员 |
| | | List<MallMember> teamMembers = mallMemberMapper.selectList( |
| | | new LambdaQueryWrapper<MallMember>() |
| | | .in(MallMember::getReferrerId, directMembers.stream().map(MallMember::getInviteId).collect(Collectors.toSet())) |
| | | ); |
| | | memberIds.addAll(teamMembers.stream().map(MallMember::getId).collect(Collectors.toSet())); |
| | | |
| | | return memberIds; |
| | | } |
| | | |
| | | |
| | | private BigDecimal getNodePercent(List<RunNodeSet> runNodeSets, BigDecimal directAchieve) { |
| | | BigDecimal percent = BigDecimal.ZERO; |
| | | //获取directAchieve在runNodeSets中哪一个位置 |
| | | for(RunNodeSet item : runNodeSets){ |
| | | BigDecimal minAchieve = item.getMinAchieve(); |
| | | BigDecimal maxAchieve = item.getMaxAchieve(); |
| | | BigDecimal nodePercent = new BigDecimal(item.getNodePercent()); |
| | | if(directAchieve.compareTo(minAchieve) >= 0 && directAchieve.compareTo(maxAchieve) < 0){ |
| | | percent = nodePercent; |
| | | break; |
| | | } |
| | | } |
| | | return percent; |
| | | } |
| | | } |