## 优化查询血缘上子节点数据;
This commit is contained in:
parent
1d1cc62aee
commit
c9be19d22e
|
|
@ -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,12 +19,12 @@ public interface ICuMemberRetailDetailService extends IService<CuMemberRetailDet
|
|||
* 根据结算会员获取对应的点位数据
|
||||
*/
|
||||
void listMemberRetailDetail(String retailDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
|
||||
EBonusStage eBonusStage, EBonusStageStatus eBonusStageStatus, List<Long> stageMemberList);
|
||||
EBonusStage eBonusStage, EBonusStageStatus eBonusStageStatus, Collection<Long> stageMemberList);
|
||||
|
||||
/**
|
||||
* 指定会员获取对应的点位数据
|
||||
*/
|
||||
void listMemberRetailDetailByQuery(String retailDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
|
||||
List<CuMemberRetailDetail> listMemberRetailDetailByQuery(String retailDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
|
||||
List<Long> queryMemberList, EBonusStage eBonusStage);
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ public class CuMemberRetailDetailServiceImpl extends ServiceImpl<CuMemberRetailD
|
|||
|
||||
@Override
|
||||
public void listMemberRetailDetail(String retailDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
|
||||
EBonusStage eBonusStage, EBonusStageStatus eBonusStageStatus, List<Long> stageMemberList) {
|
||||
EBonusStage eBonusStage, EBonusStageStatus eBonusStageStatus, Collection<Long> stageMemberList) {
|
||||
List<List<?>> pkMemberList;
|
||||
if (CollectionUtil.isNotEmpty(stageMemberList)) {
|
||||
pkMemberList = cuMemberBonusSettle.handleCutList(stageMemberList, MagicNumberConstants.BATCH_QUERY_NUM);
|
||||
|
|
@ -45,11 +45,12 @@ public class CuMemberRetailDetailServiceImpl extends ServiceImpl<CuMemberRetailD
|
|||
}
|
||||
|
||||
@Override
|
||||
public void listMemberRetailDetailByQuery(String retailDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
|
||||
public List<CuMemberRetailDetail> listMemberRetailDetailByQuery(String retailDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
|
||||
List<Long> queryMemberList, EBonusStage eBonusStage) {
|
||||
// 查询明细数据(指定阶段,未完成的)
|
||||
List<CuMemberRetailDetail> 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<CuMemberRetailD
|
|||
// 明细数据放到对应的会员数据中
|
||||
for (CuMemberRetailDetail cuMemberRetailDetail : tmpDetailList) {
|
||||
CuMemberRetailRangeExt cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailDetail.getPkMember());
|
||||
if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) {
|
||||
// 阶段一点位列表(使用有序map,为了后续业务处理方便)
|
||||
if (null == cuMemberRetailRangeExt.getOneDetailMap()) {
|
||||
// 使用有序map,为了后续业务处理方便
|
||||
cuMemberRetailRangeExt.setOneDetailMap(new LinkedHashMap<>());
|
||||
}
|
||||
if (null == cuMemberRetailRangeExt.getTwoDetailMap()) {
|
||||
cuMemberRetailRangeExt.setTwoDetailMap(new LinkedHashMap<>());
|
||||
}
|
||||
if (null == cuMemberRetailRangeExt.getThreeDetailMap()) {
|
||||
cuMemberRetailRangeExt.setThreeDetailMap(new LinkedHashMap<>());
|
||||
}
|
||||
// 使用有序map,为了后续业务处理方便
|
||||
if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) {
|
||||
// 阶段一点位列表
|
||||
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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -339,8 +339,17 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
|||
memberRangeExtMap.put(cuMemberRetailRangeExt.getPkMember(), cuMemberRetailRangeExt);
|
||||
}
|
||||
}
|
||||
|
||||
// 只有五折专区需要处理阶段收益
|
||||
Set<Long> 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<Long> 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<Long> stageMemberList = stageList.stream().map(CuMemberRetailDetail::getPkMember).collect(Collectors.toList());
|
||||
Set<Long> stageMemberList = stageList.stream().map(CuMemberRetailDetail::getPkMember).collect(Collectors.toSet());
|
||||
// 查询升阶段点位血缘上所有会员ID
|
||||
List<Long> findMemberList = this.findParent(memberRangeExtMap, stageMemberList);
|
||||
// 查询血缘会员明细数据(二阶段)
|
||||
|
|
@ -415,7 +424,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
|||
|
||||
// 处理升三阶段点位
|
||||
if (CollectionUtil.isNotEmpty(stageList)) {
|
||||
List<Long> stageMemberList = stageList.stream().map(CuMemberRetailDetail::getPkMember).collect(Collectors.toList());
|
||||
Set<Long> stageMemberList = stageList.stream().map(CuMemberRetailDetail::getPkMember).collect(Collectors.toSet());
|
||||
// 查询升阶段点位血缘上所有会员ID
|
||||
List<Long> findMemberList = this.findParent(memberRangeExtMap, stageMemberList);
|
||||
// 查询血缘会员明细数据(三阶段)
|
||||
|
|
@ -441,6 +450,31 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理查询阶段会员(订单会员往上推荐查3级),降低初始查询数据过多问题
|
||||
*/
|
||||
private Set<Long> handleStageMember(List<SaOrderExt> orderList, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap) {
|
||||
Set<Long> 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<Integer, CuMemberRetailDetail> 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<Integer, CuMemberRetailDetail> parentDetailList = null;
|
||||
if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) {
|
||||
if (null == targetMember.getOneDetailMap()) {
|
||||
// 目标会员当前阶段为空,则需要查询一下当前阶段未完成点位数据
|
||||
List<CuMemberRetailDetail> 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<CuMemberRetailDetail> 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<CuMemberRetailDetail> 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<Long> findParent(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, List<Long> pkMemberList) {
|
||||
private List<Long> findParent(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, Set<Long> pkMemberList) {
|
||||
List<Long> resultList = new ArrayList<>();
|
||||
if (CollectionUtil.isNotEmpty(pkMemberList)) {
|
||||
for (Long pkMember : pkMemberList) {
|
||||
CuMemberRetailRangeExt sourceMember = memberRangeExtMap.get(pkMember);
|
||||
resultList.add(sourceMember.getPkMember());
|
||||
|
||||
int i = 1;
|
||||
Long pkParent = sourceMember.getPkParent();
|
||||
while (true) {
|
||||
if (i > 3) {
|
||||
break;
|
||||
}
|
||||
CuMemberRetailRangeExt targetMember = memberRangeExtMap.get(pkParent);
|
||||
if (null == targetMember) {
|
||||
break;
|
||||
}
|
||||
resultList.add(targetMember.getPkMember());
|
||||
pkParent = targetMember.getPkParent();
|
||||
|
||||
resultList.add(targetMember.getPkMember());
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return resultList;
|
||||
|
|
|
|||
Loading…
Reference in New Issue