## 赠点如果直推下没有可以填充的,则按血缘上逻辑走;

This commit is contained in:
cabbage 2025-09-26 15:19:55 +08:00
parent a41cd10d4d
commit 1fea92b74b
1 changed files with 56 additions and 51 deletions

View File

@ -1106,7 +1106,62 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 阶段奖金处理列表
List<BonusStageData> bonusStageDataList = new ArrayList<>();
if (EBonusStageType.NORMAL.getValue() == newRetailDetail.getPointType()) {
boolean giftBool = false;
if (EBonusStageType.GIFT.getValue() == newRetailDetail.getPointType()) {
// 赠送点位处理赠送点位给自己直推会员轮流布点
iCuMemberRetailDetailService.listChildRetailDetail(rangeTableName, rangeDetailTableName, memberRangeExtMap,
sourceMember, eBonusStage);
// 判断是不是都已经填充过一轮了如果是则需要重新开始从第一个开始填充
LinkedHashMap<Date, CuMemberRetailRangeExt> childRetailMap = sourceMember.getChildRetailMap();
if (childRetailMap.size() > 0) {
// 获取最后一条数据 key
Date lastKey = new ArrayList<>(childRetailMap.keySet()).get(childRetailMap.size() - 1);
// 获取最新的会员注册时间如果没有则设置一个初始化时间
Date giftPayTime = sourceMember.getGiftPayTime();
if (null == giftPayTime || giftPayTime.compareTo(lastKey) == 0) {
giftPayTime = BonusConstants.GIFT_PAY_TIME;
}
for (Date keyDate : childRetailMap.keySet()) {
if (keyDate.compareTo(giftPayTime) > 0) {
// 当前会员注册比之前的要晚则顺序进行填充
giftPayTime = keyDate;
// 需要填充的直推会员
CuMemberRetailRangeExt targetMember = childRetailMap.get(keyDate);
// 推荐人一阶段子点位列表
LinkedHashMap<Integer, CuMemberRetailDetail> parentDetailList = targetMember.getOneDetailMap();
// 推荐人第一层点位处理
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) {
// 在第三层找到并填充点位就开始下一个点位的处理
break;
}
}
}
if (giftBool) {
sourceMember.setGiftPayTime(giftPayTime);
}
}
}
if (EBonusStageType.NORMAL.getValue() == newRetailDetail.getPointType()
|| !giftBool) {
// 普通点位处理
// 推荐人
Long pkParent = sourceMember.getPkParent();
@ -1154,56 +1209,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
break;
}
}
} else {
// 赠送点位处理赠送点位给自己直推会员轮流布点
iCuMemberRetailDetailService.listChildRetailDetail(rangeTableName, rangeDetailTableName, memberRangeExtMap,
sourceMember, eBonusStage);
// 判断是不是都已经填充过一轮了如果是则需要重新开始从第一个开始填充
LinkedHashMap<Date, CuMemberRetailRangeExt> childRetailMap = sourceMember.getChildRetailMap();
if (childRetailMap.size() > 0) {
// 获取最后一条数据 key
Date lastKey = new ArrayList<>(childRetailMap.keySet()).get(childRetailMap.size() - 1);
// 获取最新的会员注册时间如果没有则设置一个初始化时间
Date giftPayTime = sourceMember.getGiftPayTime();
if (null == giftPayTime || giftPayTime.compareTo(lastKey) == 0) {
giftPayTime = BonusConstants.GIFT_PAY_TIME;
}
for (Date keyDate : childRetailMap.keySet()) {
if (keyDate.compareTo(giftPayTime) > 0) {
// 当前会员注册比之前的要晚则顺序进行填充
giftPayTime = keyDate;
// 需要填充的直推会员
CuMemberRetailRangeExt targetMember = childRetailMap.get(keyDate);
// 推荐人一阶段子点位列表
LinkedHashMap<Integer, CuMemberRetailDetail> parentDetailList = targetMember.getOneDetailMap();
// 推荐人第一层点位处理
boolean forBool = iCuMemberBonusStageService.firstLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName,
memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList);
if (forBool) {
// 在第一层找到并填充点位就开始下一个点位的处理
break;
}
// 推荐人第二层点位处理
forBool = iCuMemberBonusStageService.secondLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName,
memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList);
if (forBool) {
// 在第二层找到并填充点位就开始下一个点位的处理
break;
}
// 推荐人第三层点位处理
forBool = iCuMemberBonusStageService.thirdLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName,
memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList);
if (forBool) {
// 在第三层找到并填充点位就开始下一个点位的处理
break;
}
}
}
sourceMember.setGiftPayTime(giftPayTime);
}
}
if (CollectionUtil.isNotEmpty(bonusStageDataList)) {