## 兼容三阶段部分点位为空以及收益处理订单为空;

This commit is contained in:
cabbage 2025-09-25 09:43:56 +08:00
parent 637aca701d
commit f50645d5ab
3 changed files with 89 additions and 79 deletions

View File

@ -40,7 +40,7 @@ public interface ICuMemberBonusStageService extends IService<CuMemberBonusStage>
/** /**
* 填充指定点位 * 填充指定点位
*/ */
boolean fillRetailDetail(CuMemberRetailDetail targetRetailDetail, String point, void fillRetailDetail(CuMemberRetailDetail targetRetailDetail, String point,
CuMemberRetailDetail sourceRetailDetail, Date settleDate, EBonusStage eBonusStage, CuMemberRetailDetail sourceRetailDetail, Date settleDate, EBonusStage eBonusStage,
List<BonusStageData> bonusStageDataList); List<BonusStageData> bonusStageDataList);

View File

@ -18,6 +18,7 @@ import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt;
import com.hzs.common.domain.member.bonus.CuMemberBonus; import com.hzs.common.domain.member.bonus.CuMemberBonus;
import com.hzs.common.domain.member.bonus.CuMemberBonusStage; import com.hzs.common.domain.member.bonus.CuMemberBonusStage;
import com.hzs.common.domain.sale.ext.SaOrderExt; import com.hzs.common.domain.sale.ext.SaOrderExt;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -29,6 +30,7 @@ import java.util.*;
/** /**
* 会员奖金-阶段收益明细表 服务实现类 * 会员奖金-阶段收益明细表 服务实现类
*/ */
@Slf4j
@Service @Service
public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStageMapper, CuMemberBonusStage> implements ICuMemberBonusStageService { public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStageMapper, CuMemberBonusStage> implements ICuMemberBonusStageService {
@ -71,7 +73,7 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
public CuMemberBonusStage getCuMemberBonusStage(SaOrderExt saOrderExt, CuMemberRetailRangeExt cuMemberRetailRange, CuMemberBonus cuMemberBonus, Integer pkBonusItems) { public CuMemberBonusStage getCuMemberBonusStage(SaOrderExt saOrderExt, CuMemberRetailRangeExt cuMemberRetailRange, CuMemberBonus cuMemberBonus, Integer pkBonusItems) {
CuMemberBonusStage cuMemberBonusStage = CuMemberBonusStage.builder() CuMemberBonusStage cuMemberBonusStage = CuMemberBonusStage.builder()
.pkBonus(cuMemberBonus.getPkId()) .pkBonus(cuMemberBonus.getPkId())
.pkOrder(saOrderExt.getPkId()) .pkOrder(null != saOrderExt ? saOrderExt.getPkId() : 0)
.pkBonusItems(pkBonusItems) .pkBonusItems(pkBonusItems)
.incomeStatus(cuMemberRetailRange.getIncomeStatus()) .incomeStatus(cuMemberRetailRange.getIncomeStatus())
.calType(ECalType.VALUE.getValue()) .calType(ECalType.VALUE.getValue())
@ -117,8 +119,8 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
for (String suffix : BonusConstants.FIELD_LIST) { for (String suffix : BonusConstants.FIELD_LIST) {
Field pointMemberField = BonusConstants.FIELD_MAP.get(BonusConstants.POINT_MEMBER_FIELD_NAME + suffix); Field pointMemberField = BonusConstants.FIELD_MAP.get(BonusConstants.POINT_MEMBER_FIELD_NAME + suffix);
Field pointField = BonusConstants.FIELD_MAP.get(BonusConstants.POINT_FIELD_NAME + suffix); Field pointField = BonusConstants.FIELD_MAP.get(BonusConstants.POINT_FIELD_NAME + suffix);
if (ReflectUtil.getFieldValue(targetRetailDetail, pointMemberField).equals(newParentRetailDetail.getPkMember()) if (newParentRetailDetail.getPkMember().equals(ReflectUtil.getFieldValue(targetRetailDetail, pointMemberField))
&& ReflectUtil.getFieldValue(targetRetailDetail, pointField).equals(newParentRetailDetail.getChildNode())) { && newParentRetailDetail.getChildNode().equals(ReflectUtil.getFieldValue(targetRetailDetail, pointField))) {
// 中间点位在目标点位的位置根据位置获取新点位填充的位置 // 中间点位在目标点位的位置根据位置获取新点位填充的位置
switch (suffix) { switch (suffix) {
case BonusConstants.POINT_11: case BonusConstants.POINT_11:
@ -257,88 +259,95 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
* 填充点位 * 填充点位
*/ */
@Override @Override
public boolean fillRetailDetail(CuMemberRetailDetail targetRetailDetail, String point, public void fillRetailDetail(CuMemberRetailDetail targetRetailDetail, String point,
CuMemberRetailDetail sourceRetailDetail, Date settleDate, EBonusStage eBonusStage, CuMemberRetailDetail sourceRetailDetail, Date settleDate, EBonusStage eBonusStage,
List<BonusStageData> bonusStageDataList) { List<BonusStageData> bonusStageDataList) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + point, sourceRetailDetail.getPkMember()); ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + point, sourceRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + point, sourceRetailDetail.getChildNode()); ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + point, sourceRetailDetail.getChildNode());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.UPDATE_FLAG, 0); ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.UPDATE_FLAG, 0);
switch (point) { if (EBonusStage.ONE.getValue() == eBonusStage.getValue()
case BonusConstants.POINT_31: || EBonusStage.TWO.getValue() == eBonusStage.getValue()) {
case BonusConstants.POINT_32: switch (point) {
case BonusConstants.POINT_33: case BonusConstants.POINT_31:
case BonusConstants.POINT_34: case BonusConstants.POINT_32:
case BonusConstants.POINT_35: case BonusConstants.POINT_33:
case BonusConstants.POINT_36: case BonusConstants.POINT_34:
case BonusConstants.POINT_37: case BonusConstants.POINT_35:
case BonusConstants.POINT_38: case BonusConstants.POINT_36:
// 如果填充的点位是第三层理论上有可能已经全部填满需要判断是否已经完成 case BonusConstants.POINT_37:
boolean isFinish = true; case BonusConstants.POINT_38:
for (String suffix : BonusConstants.FIELD_LIST) { // 如果填充的点位是第三层理论上有可能已经全部填满需要判断是否已经完成
if (null == ReflectUtil.getFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + suffix)) { boolean isFinish = true;
isFinish = false; for (String suffix : BonusConstants.FIELD_LIST) {
break; if (null == ReflectUtil.getFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + suffix)) {
isFinish = false;
break;
}
} }
} if (isFinish) {
if (isFinish) { targetRetailDetail.setStageStatus(EBonusStageStatus.YES.getValue());
targetRetailDetail.setStageStatus(EBonusStageStatus.YES.getValue()); targetRetailDetail.setStageDate(settleDate);
targetRetailDetail.setStageDate(settleDate); if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) {
if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) { // 一阶段全满发放阶段奖
// 一阶段全满发放阶段奖 // 返回奖金收益处理数据
// 返回奖金收益处理数据 BonusStageData bonusStageData = BonusStageData.builder()
BonusStageData bonusStageData = BonusStageData.builder() .bonusIncome(BonusConstants.ONE_BONUS)
.bonusIncome(BonusConstants.ONE_BONUS) .targetPkMember(targetRetailDetail.getPkMember())
.targetPkMember(targetRetailDetail.getPkMember()) .targetChildNode(targetRetailDetail.getChildNode())
.targetChildNode(targetRetailDetail.getChildNode()) .stage(eBonusStage.getValue())
.stage(eBonusStage.getValue()) .stageNum(14)
.stageNum(14) .build();
.build(); // 生成二阶段点位
// 生成二阶段点位 bonusStageData.setTwoRetailDetail(CuMemberRetailDetail.builder()
bonusStageData.setTwoRetailDetail(CuMemberRetailDetail.builder() .pkMember(targetRetailDetail.getPkMember())
.pkMember(targetRetailDetail.getPkMember()) .childNode(targetRetailDetail.getChildNode())
.childNode(targetRetailDetail.getChildNode()) .pkParent(targetRetailDetail.getPkParent())
.pkParent(targetRetailDetail.getPkParent()) .stage(EBonusStage.TWO.getValue())
.stage(EBonusStage.TWO.getValue()) .stageStatus(EBonusStageStatus.NO.getValue())
.stageStatus(EBonusStageStatus.NO.getValue()) .pointType(targetRetailDetail.getPointType())
.pointType(targetRetailDetail.getPointType()) .pointGift(targetRetailDetail.getPointGift())
.pointGift(targetRetailDetail.getPointGift()) .creationTime(settleDate)
.creationTime(settleDate) .updateBool(0)
.updateBool(0) .build());
.build()); bonusStageDataList.add(bonusStageData);
bonusStageDataList.add(bonusStageData); } else {
} else if (EBonusStage.TWO.getValue() == eBonusStage.getValue()) { // 二阶段全满发放阶段奖
// 二阶段全满发放阶段奖 // 返回奖金收益处理数据
// 返回奖金收益处理数据 BonusStageData bonusStageData = BonusStageData.builder()
BonusStageData bonusStageData = BonusStageData.builder() .bonusIncome(BonusConstants.TWO_BONUS)
.bonusIncome(BonusConstants.TWO_BONUS) .targetPkMember(targetRetailDetail.getPkMember())
.targetPkMember(targetRetailDetail.getPkMember()) .targetChildNode(targetRetailDetail.getChildNode())
.targetChildNode(targetRetailDetail.getChildNode()) .stage(eBonusStage.getValue())
.stage(eBonusStage.getValue()) .stageNum(14)
.stageNum(14) .build();
.build(); bonusStageData.setThreeRetailDetail(CuMemberRetailDetail.builder()
bonusStageData.setThreeRetailDetail(CuMemberRetailDetail.builder() .pkMember(targetRetailDetail.getPkMember())
.pkMember(targetRetailDetail.getPkMember()) .childNode(targetRetailDetail.getChildNode())
.childNode(targetRetailDetail.getChildNode()) .pkParent(targetRetailDetail.getPkParent())
.pkParent(targetRetailDetail.getPkParent()) .stage(EBonusStage.THREE.getValue())
.stage(EBonusStage.THREE.getValue()) .stageStatus(EBonusStageStatus.NO.getValue())
.stageStatus(EBonusStageStatus.NO.getValue()) .pointType(targetRetailDetail.getPointType())
.pointType(targetRetailDetail.getPointType()) .pointGift(targetRetailDetail.getPointGift())
.pointGift(targetRetailDetail.getPointGift()) .creationTime(settleDate)
.creationTime(settleDate) .updateBool(0)
.updateBool(0) .build());
.build()); bonusStageDataList.add(bonusStageData);
bonusStageDataList.add(bonusStageData); }
} else if (EBonusStage.THREE.getValue() == eBonusStage.getValue()) { return;
// TODO 三阶段发放特殊处理 }
// TODO 三阶段填充满判断是否需要赠送点位 break;
}
} else {
// TODO 三阶段发放特殊处理
// TODO 三阶段填充满判断是否需要赠送点位
switch (point) {
case BonusConstants.POINT_11:
case BonusConstants.POINT_12:
} break;
return true; }
}
break;
} }
return false;
} }
@Override @Override

View File

@ -11,6 +11,7 @@
#{items} #{items}
</foreach> </foreach>
and cmrd.stage = #{stage} and cmrd.stage = #{stage}
and cmrd.stage_status = 1
order by cmrd.pk_member, cmrd.child_node order by cmrd.pk_member, cmrd.child_node
</select> </select>