## 三阶段奖金生成;

This commit is contained in:
cabbage 2025-09-25 11:31:07 +08:00
parent 5fac72f129
commit 413db854cb
4 changed files with 101 additions and 10 deletions

View File

@ -366,9 +366,9 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// TODO 处理升三阶段点位
if (CollectionUtil.isNotEmpty(stageList)) {
List<Long> stageMemberList = stageList.stream().map(CuMemberRetailDetail::getPkMember).collect(Collectors.toList());
// 查询血缘会员明细数据
// 查询血缘会员明细数据
iCuMemberRetailDetailService.listMemberRetailDetail(rangeDetailTableName, memberRangeExtMap, EBonusStage.THREE, stageMemberList);
// 阶段收益
// 阶段收益
this.calculateStageIncomeTwoThree(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period,
memberRangeExtMap, settleStartDate, rangeTableName, rangeDetailTableName, EBonusStage.THREE, stageList);
}
@ -1135,7 +1135,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
targetMember.getThreeDetailMap().put(threeRetailDetail.getChildNode(), threeRetailDetail);
returnRetailDetailList.add(threeRetailDetail);
} else if (EBonusStage.THREE.getValue() == bonusStageData.getStage()) {
// TODO 三阶段需要赠送点位
// TODO 三阶段填充满判断是否需要赠送点位
}
}

View File

@ -339,12 +339,94 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
break;
}
} else {
// TODO 三阶段发放特殊处理
// TODO 三阶段填充满判断是否需要赠送点位
// 三阶段发放特殊处理
switch (point) {
case BonusConstants.POINT_11:
case BonusConstants.POINT_12:
// 一阶段填满就给奖金
if (targetRetailDetail.getThirdBonus1() < 1) {
if (null != ReflectUtil.getFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_11)
&& null != ReflectUtil.getFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_12)
) {
// 第一层满需要发放奖金
BonusStageData bonusStageData = BonusStageData.builder()
.bonusIncome(BonusConstants.THREE_BONUS_1)
.targetPkMember(targetRetailDetail.getPkMember())
.targetChildNode(targetRetailDetail.getChildNode())
.stage(eBonusStage.getValue())
.stageNum(2)
.build();
bonusStageDataList.add(bonusStageData);
// 第一层发放过1次
targetRetailDetail.setThirdBonus1(1);
}
}
break;
case BonusConstants.POINT_21:
case BonusConstants.POINT_22:
case BonusConstants.POINT_23:
case BonusConstants.POINT_24:
// 二阶段填满就给奖金
if (targetRetailDetail.getThirdBonus2() < 1) {
if (null != ReflectUtil.getFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_21)
&& null != ReflectUtil.getFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_22)
&& null != ReflectUtil.getFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_23)
&& null != ReflectUtil.getFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_24)
) {
// 第二层满需要发放奖金
BonusStageData bonusStageData = BonusStageData.builder()
.bonusIncome(BonusConstants.THREE_BONUS_2)
.targetPkMember(targetRetailDetail.getPkMember())
.targetChildNode(targetRetailDetail.getChildNode())
.stage(eBonusStage.getValue())
.stageNum(4)
.build();
bonusStageDataList.add(bonusStageData);
// 第二层发放过1次
targetRetailDetail.setThirdBonus2(1);
}
}
break;
case BonusConstants.POINT_31:
case BonusConstants.POINT_32:
case BonusConstants.POINT_33:
case BonusConstants.POINT_34:
case BonusConstants.POINT_35:
case BonusConstants.POINT_36:
case BonusConstants.POINT_37:
case BonusConstants.POINT_38:
// 三阶段填每个点位都给奖金8个全满给的多
if (targetRetailDetail.getThirdBonus3() < 8) {
int tmpInt = 0;
for (String suffix : BonusConstants.THREE_FIELD_LIST) {
if (null != ReflectUtil.getFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + suffix)) {
tmpInt += 1;
}
}
if (tmpInt - targetRetailDetail.getThirdBonus3() == 1) {
// 默认第三层前7个点位奖金
BigDecimal bonus = BonusConstants.THREE_BONUS_3;
if (tmpInt == 8) {
// 第三层第8个点位
bonus = BonusConstants.THREE_BONUS_38;
// 三层全满
targetRetailDetail.setStageStatus(EBonusStageStatus.YES.getValue());
targetRetailDetail.setStageDate(settleDate);
// TODO 三阶段填充满判断是否需要赠送点位
}
BonusStageData bonusStageData = BonusStageData.builder()
.bonusIncome(bonus)
.targetPkMember(targetRetailDetail.getPkMember())
.targetChildNode(targetRetailDetail.getChildNode())
.stage(eBonusStage.getValue())
.stageNum(tmpInt)
.build();
bonusStageDataList.add(bonusStageData);
targetRetailDetail.setThirdBonus3(tmpInt);
}
}
break;
}
}

View File

@ -52,8 +52,11 @@ public class BonusConstants {
public static final String POINT_37 = "37";
public static final String POINT_38 = "38";
// 全部字段
public static final List<String> FIELD_LIST = Arrays.asList(POINT_11, POINT_12, POINT_21, POINT_22, POINT_23, POINT_24,
POINT_31, POINT_32, POINT_33, POINT_34, POINT_35, POINT_36, POINT_37, POINT_38);
// 第三层字段
public static final List<String> THREE_FIELD_LIST = Arrays.asList(POINT_31, POINT_32, POINT_33, POINT_34, POINT_35, POINT_36, POINT_37, POINT_38);
// 会员ID字段
public static final String POINT_MEMBER_FIELD_NAME = "pointMember";

View File

@ -385,7 +385,10 @@
#{item.creationTime, jdbcType=TIMESTAMP} creation_time,
#{item.pointFirst, jdbcType=NUMERIC} point_first, #{item.pointMemberFirst, jdbcType=NUMERIC} point_member_first,
#{item.pointSecond, jdbcType=NUMERIC} point_second, #{item.pointMemberSecond, jdbcType=NUMERIC} point_member_second,
#{item.pointThird, jdbcType=NUMERIC} point_third, #{item.pointMemberThird, jdbcType=NUMERIC} point_member_third
#{item.pointThird, jdbcType=NUMERIC} point_third, #{item.pointMemberThird, jdbcType=NUMERIC} point_member_third,
#{item.thirdBonus1, jdbcType=NUMERIC} third_bonus_1,
#{item.thirdBonus2, jdbcType=NUMERIC} third_bonus_2,
#{item.thirdBonus3, jdbcType=NUMERIC} third_bonus_2
from dual
</foreach>
) b
@ -411,7 +414,8 @@
creation_time,
point_first, point_member_first,
point_second, point_member_second,
point_third, point_member_third)
point_third, point_member_third,
third_bonus_1, third_bonus_2, third_bonus_3)
values (b.pk_member, b.child_node, b.pk_parent,
b.stage, b.stage_status, b.stage_date,
b.point_11, b.point_12,
@ -432,7 +436,8 @@
b.creation_time,
b.point_first, b.point_member_first,
b.point_second, b.point_member_second,
b.point_third, b.point_member_third)
b.point_third, b.point_member_third,
b.third_bonus_1, b.third_bonus_2, b.third_bonus_3)
when matched then
update set
a.stage = b.stage, a.stage_status = b.stage_status, a.stage_date = b.stage_date,
@ -454,7 +459,8 @@
a.creation_time = b.creation_time,
a.point_first = b.point_first, a.point_member_first = b.point_member_first,
a.point_second = b.point_second, a.point_member_second = b.point_member_second,
a.point_third = b.point_third, a.point_member_third = b.point_member_third
a.point_third = b.point_third, a.point_member_third = b.point_member_third,
a.third_bonus_1 = b.third_bonus_1, a.third_bonus_2 = b.third_bonus_2, a.third_bonus_3 = b.third_bonus_3
</update>
<!-- 当前网体更新极差秒接表 -->