diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberRetailDetailService.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberRetailDetailService.java index 5a079e9c..4387be18 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberRetailDetailService.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberRetailDetailService.java @@ -6,6 +6,7 @@ import com.hzs.common.core.enums.EBonusStageStatus; import com.hzs.common.domain.member.achieve.CuMemberRetailDetail; import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -18,13 +19,13 @@ public interface ICuMemberRetailDetailService extends IService memberRangeExtMap, - EBonusStage eBonusStage, EBonusStageStatus eBonusStageStatus, List stageMemberList); + EBonusStage eBonusStage, EBonusStageStatus eBonusStageStatus, Collection stageMemberList); /** * 指定会员获取对应的点位数据 */ - void listMemberRetailDetailByQuery(String retailDetailTableName, Map memberRangeExtMap, - List queryMemberList, EBonusStage eBonusStage); + List listMemberRetailDetailByQuery(String retailDetailTableName, Map memberRangeExtMap, + List queryMemberList, EBonusStage eBonusStage); /** * 会员直推对应的点位数据 diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailDetailServiceImpl.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailDetailServiceImpl.java index 495f3fa5..0a669f97 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailDetailServiceImpl.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailDetailServiceImpl.java @@ -30,7 +30,7 @@ public class CuMemberRetailDetailServiceImpl extends ServiceImpl memberRangeExtMap, - EBonusStage eBonusStage, EBonusStageStatus eBonusStageStatus, List stageMemberList) { + EBonusStage eBonusStage, EBonusStageStatus eBonusStageStatus, Collection stageMemberList) { List> pkMemberList; if (CollectionUtil.isNotEmpty(stageMemberList)) { pkMemberList = cuMemberBonusSettle.handleCutList(stageMemberList, MagicNumberConstants.BATCH_QUERY_NUM); @@ -45,11 +45,12 @@ public class CuMemberRetailDetailServiceImpl extends ServiceImpl memberRangeExtMap, - List queryMemberList, EBonusStage eBonusStage) { + public List listMemberRetailDetailByQuery(String retailDetailTableName, Map memberRangeExtMap, + List queryMemberList, EBonusStage eBonusStage) { // 查询明细数据(指定阶段,未完成的) List tmpDetailList = baseMapper.listMemberRetailDetail(retailDetailTableName, queryMemberList, eBonusStage.getValue(), EBonusStageStatus.NO.getValue()); packageThreeDetailMap(memberRangeExtMap, eBonusStage, tmpDetailList); + return tmpDetailList; } /** @@ -60,24 +61,26 @@ public class CuMemberRetailDetailServiceImpl extends ServiceImpl()); - } - if (null == cuMemberRetailRangeExt.getTwoDetailMap()) { - cuMemberRetailRangeExt.setTwoDetailMap(new LinkedHashMap<>()); - } - if (null == cuMemberRetailRangeExt.getThreeDetailMap()) { - cuMemberRetailRangeExt.setThreeDetailMap(new LinkedHashMap<>()); - } - // 使用有序map,为了后续业务处理方便 if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) { + // 阶段一点位列表(使用有序map,为了后续业务处理方便) + if (null == cuMemberRetailRangeExt.getOneDetailMap()) { + // 使用有序map,为了后续业务处理方便 + cuMemberRetailRangeExt.setOneDetailMap(new LinkedHashMap<>()); + } // 阶段一点位列表 cuMemberRetailRangeExt.getOneDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail); } else if (EBonusStage.TWO.getValue() == eBonusStage.getValue()) { + if (null == cuMemberRetailRangeExt.getTwoDetailMap()) { + // 使用有序map,为了后续业务处理方便 + cuMemberRetailRangeExt.setTwoDetailMap(new LinkedHashMap<>()); + } // 阶段二点位列表 cuMemberRetailRangeExt.getTwoDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail); } else if (EBonusStage.THREE.getValue() == eBonusStage.getValue()) { + if (null == cuMemberRetailRangeExt.getThreeDetailMap()) { + // 使用有序map,为了后续业务处理方便 + cuMemberRetailRangeExt.setThreeDetailMap(new LinkedHashMap<>()); + } // 阶段三点位列表 cuMemberRetailRangeExt.getThreeDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail); } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java index 52aaa1d4..c88f3dd1 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java @@ -339,8 +339,17 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { memberRangeExtMap.put(cuMemberRetailRangeExt.getPkMember(), cuMemberRetailRangeExt); } } + + // 只有五折专区需要处理阶段收益 + Set findMemberDetailSet = orderList.stream().filter(tmpOrder -> + EOrderType.RETAIL_REGISTER.getValue() == tmpOrder.getOrderType() + || EOrderType.RETAIL_UPGRADE.getValue() == tmpOrder.getOrderType() + || EOrderType.RETAIL_REPURCHASE.getValue() == tmpOrder.getOrderType()) + .map(SaOrderExt::getPkMember).collect(Collectors.toSet()); + // 订单产生的阶段正常情况下只上填三层,这个位置只按每个订单推荐顺序取三级,不需要查全部 + List findMemberDetailList = this.findParent(memberRangeExtMap, findMemberDetailSet); // 查询血缘会员明细数据(一阶段) - iCuMemberRetailDetailService.listMemberRetailDetail(rangeDetailTableName, memberRangeExtMap, EBonusStage.ONE, EBonusStageStatus.NO, null); + iCuMemberRetailDetailService.listMemberRetailDetail(rangeDetailTableName, memberRangeExtMap, EBonusStage.ONE, EBonusStageStatus.NO, findMemberDetailList); for (SaOrderExt saOrderExt : orderList) { CuMemberRetailRangeExt sourceMember = memberRangeExtMap.get(saOrderExt.getPkMember()); @@ -403,7 +412,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { // 处理升二阶段点位 if (CollectionUtil.isNotEmpty(stageList)) { - List stageMemberList = stageList.stream().map(CuMemberRetailDetail::getPkMember).collect(Collectors.toList()); + Set stageMemberList = stageList.stream().map(CuMemberRetailDetail::getPkMember).collect(Collectors.toSet()); // 查询升阶段点位血缘上所有会员ID List findMemberList = this.findParent(memberRangeExtMap, stageMemberList); // 查询血缘会员明细数据(二阶段) @@ -415,7 +424,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { // 处理升三阶段点位 if (CollectionUtil.isNotEmpty(stageList)) { - List stageMemberList = stageList.stream().map(CuMemberRetailDetail::getPkMember).collect(Collectors.toList()); + Set stageMemberList = stageList.stream().map(CuMemberRetailDetail::getPkMember).collect(Collectors.toSet()); // 查询升阶段点位血缘上所有会员ID List findMemberList = this.findParent(memberRangeExtMap, stageMemberList); // 查询血缘会员明细数据(三阶段) @@ -441,6 +450,31 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { } } + /** + * 处理查询阶段会员(订单会员往上推荐查3级),降低初始查询数据过多问题 + */ + private Set handleStageMember(List orderList, Map memberRangeExtMap) { + Set findMemberList = new HashSet<>(); + for (SaOrderExt saOrderExt : orderList) { + if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType() + || EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType() + || EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()) { + long pkParent = saOrderExt.getPkReference(); + // 非五折专区需要处理阶段收益逻辑,查找上级推荐人 + for (int i = 0; i < 3; i++) { + CuMemberRetailRangeExt targetMember = memberRangeExtMap.get(pkParent); + if (null == targetMember) { + break; + } + pkParent = targetMember.getPkParent(); + + findMemberList.add(targetMember.getPkMember()); + } + } + } + return findMemberList; + } + /** * 计算奖衔 -- 日结、秒结 */ @@ -886,27 +920,27 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { continue; } - // 推荐人一阶段子点位列表 + // 直推会员一阶段子点位列表 LinkedHashMap parentDetailList = targetMember.getOneDetailMap(); if (CollectionUtil.isEmpty(parentDetailList)) { continue; } - // 推荐人第一层点位处理 + // 直推会员第一层点位处理 giftBool = iCuMemberBonusStageService.firstLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName, memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList); if (giftBool) { // 在第一层找到并填充点位,就开始下一个点位的处理 break; } - // 推荐人第二层点位处理 + // 直推会员第二层点位处理 giftBool = iCuMemberBonusStageService.secondLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName, memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList); if (giftBool) { // 在第二层找到并填充点位,就开始下一个点位的处理 break; } - // 推荐人第三层点位处理 + // 直推会员第三层点位处理 giftBool = iCuMemberBonusStageService.thirdLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName, memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList); if (giftBool) { @@ -945,10 +979,34 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { // 推荐人一阶段子点位列表 LinkedHashMap parentDetailList = null; if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) { + if (null == targetMember.getOneDetailMap()) { + // 目标会员当前阶段为空,则需要查询一下当前阶段未完成点位数据 + List tmpDetailList = iCuMemberRetailDetailService.listMemberRetailDetailByQuery( + rangeDetailTableName, memberRangeExtMap, Collections.singletonList(targetMember.getPkMember()), EBonusStage.ONE); + if (CollectionUtil.isEmpty(tmpDetailList)) { + targetMember.setOneDetailMap(new LinkedHashMap<>()); + } + } parentDetailList = targetMember.getOneDetailMap(); } else if (EBonusStage.TWO.getValue() == eBonusStage.getValue()) { + if (null == targetMember.getTwoDetailMap()) { + // 目标会员当前阶段为空,则需要查询一下当前阶段未完成点位数据 + List tmpDetailList = iCuMemberRetailDetailService.listMemberRetailDetailByQuery( + rangeDetailTableName, memberRangeExtMap, Collections.singletonList(targetMember.getPkMember()), EBonusStage.TWO); + if (CollectionUtil.isEmpty(tmpDetailList)) { + targetMember.setTwoDetailMap(new LinkedHashMap<>()); + } + } parentDetailList = targetMember.getTwoDetailMap(); } else if (EBonusStage.THREE.getValue() == eBonusStage.getValue()) { + if (null == targetMember.getThreeDetailMap()) { + // 目标会员当前阶段为空,则需要查询一下当前阶段未完成点位数据 + List tmpDetailList = iCuMemberRetailDetailService.listMemberRetailDetailByQuery( + rangeDetailTableName, memberRangeExtMap, Collections.singletonList(targetMember.getPkMember()), EBonusStage.THREE); + if (CollectionUtil.isEmpty(tmpDetailList)) { + targetMember.setThreeDetailMap(new LinkedHashMap<>()); + } + } parentDetailList = targetMember.getThreeDetailMap(); } if (CollectionUtil.isEmpty(parentDetailList)) { @@ -1035,22 +1093,30 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { } /** - * 查找血缘上所有会员 + * 查找血缘上会员(3层) */ - private List findParent(Map memberRangeExtMap, List pkMemberList) { + private List findParent(Map memberRangeExtMap, Set pkMemberList) { List resultList = new ArrayList<>(); - for (Long pkMember : pkMemberList) { - CuMemberRetailRangeExt sourceMember = memberRangeExtMap.get(pkMember); - resultList.add(sourceMember.getPkMember()); + if (CollectionUtil.isNotEmpty(pkMemberList)) { + for (Long pkMember : pkMemberList) { + CuMemberRetailRangeExt sourceMember = memberRangeExtMap.get(pkMember); + resultList.add(sourceMember.getPkMember()); - Long pkParent = sourceMember.getPkParent(); - while (true) { - CuMemberRetailRangeExt targetMember = memberRangeExtMap.get(pkParent); - if (null == targetMember) { - break; + int i = 1; + Long pkParent = sourceMember.getPkParent(); + while (true) { + if (i > 3) { + break; + } + CuMemberRetailRangeExt targetMember = memberRangeExtMap.get(pkParent); + if (null == targetMember) { + break; + } + pkParent = targetMember.getPkParent(); + + resultList.add(targetMember.getPkMember()); + i += 1; } - resultList.add(targetMember.getPkMember()); - pkParent = targetMember.getPkParent(); } } return resultList;