## 一二三阶段填充点位数据;一二阶段奖金计算;
This commit is contained in:
parent
08f6b98e29
commit
bacbb61168
|
@ -16,7 +16,8 @@ public interface ICuMemberRetailDetailService extends IService<CuMemberRetailDet
|
|||
/**
|
||||
* 根据结算会员获取对应的点位数据
|
||||
*/
|
||||
void listMemberRetailDetail(String retailDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, EBonusStage eBonusStage);
|
||||
void listMemberRetailDetail(String retailDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
|
||||
EBonusStage eBonusStage, List<Long> stageMemberList);
|
||||
|
||||
/**
|
||||
* 指定会员获取对应的点位数据
|
||||
|
|
|
@ -23,8 +23,14 @@ public class CuMemberRetailDetailServiceImpl extends ServiceImpl<CuMemberRetailD
|
|||
private CuMemberBonusSettle cuMemberBonusSettle;
|
||||
|
||||
@Override
|
||||
public void listMemberRetailDetail(String retailDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, EBonusStage eBonusStage) {
|
||||
List<List<?>> pkMemberList = cuMemberBonusSettle.handleCutList(memberRangeExtMap.keySet(), MagicNumberConstants.BATCH_QUERY_NUM);
|
||||
public void listMemberRetailDetail(String retailDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
|
||||
EBonusStage eBonusStage, List<Long> stageMemberList) {
|
||||
List<List<?>> pkMemberList;
|
||||
if (CollectionUtil.isNotEmpty(stageMemberList)) {
|
||||
pkMemberList = cuMemberBonusSettle.handleCutList(stageMemberList, MagicNumberConstants.BATCH_QUERY_NUM);
|
||||
} else {
|
||||
pkMemberList = cuMemberBonusSettle.handleCutList(memberRangeExtMap.keySet(), MagicNumberConstants.BATCH_QUERY_NUM);
|
||||
}
|
||||
pkMemberList.forEach(tmpIdList -> {
|
||||
// 查询明细数据(指定阶段,未完成的)
|
||||
List<CuMemberRetailDetail> tmpList = baseMapper.listMemberRetailDetail(retailDetailTableName, tmpIdList, eBonusStage.getValue());
|
||||
|
@ -41,9 +47,16 @@ public class CuMemberRetailDetailServiceImpl extends ServiceImpl<CuMemberRetailD
|
|||
if (null == cuMemberRetailRangeExt.getThreeDetailMap()) {
|
||||
cuMemberRetailRangeExt.setThreeDetailMap(new LinkedHashMap<>());
|
||||
}
|
||||
// 使用有序map,为了后续业务处理方便
|
||||
if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) {
|
||||
// 阶段一点位列表(使用有序map,为了后续业务处理方便)
|
||||
// 阶段一点位列表
|
||||
cuMemberRetailRangeExt.getOneDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail);
|
||||
} else if (EBonusStage.TWO.getValue() == eBonusStage.getValue()) {
|
||||
// 阶段二点位列表
|
||||
cuMemberRetailRangeExt.getTwoDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail);
|
||||
} else if (EBonusStage.THREE.getValue() == eBonusStage.getValue()) {
|
||||
// 阶段三点位列表
|
||||
cuMemberRetailRangeExt.getThreeDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -59,12 +72,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()) {
|
||||
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()) {
|
||||
// 阶段二点位列表
|
||||
cuMemberRetailRangeExt.getTwoDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail);
|
||||
} else if (EBonusStage.THREE.getValue() == eBonusStage.getValue()) {
|
||||
// 阶段三点位列表
|
||||
cuMemberRetailRangeExt.getThreeDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -106,6 +106,24 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl<CuMemberRetailRa
|
|||
}
|
||||
}
|
||||
}
|
||||
if (null != value.getTwoDetailMap() && value.getTwoDetailMap().size() > 0) {
|
||||
Collection<CuMemberRetailDetail> tmpDetailColl = value.getTwoDetailMap().values();
|
||||
for (CuMemberRetailDetail cuMemberRetailDetail : tmpDetailColl) {
|
||||
// 只有需要更新的才进行入库操作
|
||||
if (null != cuMemberRetailDetail.getUpdateBool()) {
|
||||
retailDetailColl.add(cuMemberRetailDetail);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (null != value.getThreeDetailMap() && value.getThreeDetailMap().size() > 0) {
|
||||
Collection<CuMemberRetailDetail> tmpDetailColl = value.getThreeDetailMap().values();
|
||||
for (CuMemberRetailDetail cuMemberRetailDetail : tmpDetailColl) {
|
||||
// 只有需要更新的才进行入库操作
|
||||
if (null != cuMemberRetailDetail.getUpdateBool()) {
|
||||
retailDetailColl.add(cuMemberRetailDetail);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
List<List<?>> list = cuMemberBonusSettle.handleCutList(retailDetailColl);
|
||||
list.forEach(tmpList -> {
|
||||
|
|
|
@ -9,7 +9,7 @@ import lombok.NoArgsConstructor;
|
|||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 阶段奖金数据
|
||||
* 阶段数据
|
||||
*/
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
|
@ -38,4 +38,13 @@ public class BonusStageData {
|
|||
*/
|
||||
private Integer stageNum;
|
||||
|
||||
/**
|
||||
* 二阶段点位
|
||||
*/
|
||||
private CuMemberRetailDetail twoRetailDetail;
|
||||
/**
|
||||
* 三阶段点位
|
||||
*/
|
||||
private CuMemberRetailDetail threeRetailDetail;
|
||||
|
||||
}
|
||||
|
|
|
@ -83,10 +83,18 @@ public abstract class BonusSettleHandle {
|
|||
*/
|
||||
protected void stageIncomeRemark(SaOrderExt saOrderExt, CuMemberBonusStage cuMemberBonusStage,
|
||||
CuMemberRetailRangeExt sourceMember, CuMemberRetailRangeExt targetMember) {
|
||||
String remark = String.format(BonusMsgConstants.STAGE_INCOME, saOrderExt.getOrderCode(),
|
||||
String remark;
|
||||
if (null != saOrderExt) {
|
||||
remark = String.format(BonusMsgConstants.STAGE_INCOME, saOrderExt.getOrderCode(),
|
||||
sourceMember.getMemberCode() + sourceMember.getMemberName(),
|
||||
targetMember.getMemberCode() + targetMember.getMemberName(),
|
||||
cuMemberBonusStage.getChildNode(), cuMemberBonusStage.getStage());
|
||||
} else {
|
||||
remark = String.format(BonusMsgConstants.STAGE_INCOME_OTHER,
|
||||
sourceMember.getMemberCode() + sourceMember.getMemberName(),
|
||||
targetMember.getMemberCode() + targetMember.getMemberName(),
|
||||
cuMemberBonusStage.getChildNode(), cuMemberBonusStage.getStage());
|
||||
}
|
||||
cuMemberBonusStage.setRemark(remark);
|
||||
}
|
||||
|
||||
|
@ -248,7 +256,9 @@ public abstract class BonusSettleHandle {
|
|||
ReflectUtils.invokeSetter(cuMemberDetail, BonusFieldConstants.INCOME_TAX, incomeTax);
|
||||
ReflectUtils.invokeSetter(cuMemberDetail, BonusFieldConstants.REAL_INCOME, realIncome);
|
||||
// 收益占比
|
||||
if (null != orderAmount && null != exchangeRate) {
|
||||
ReflectUtils.invokeSetter(cuMemberDetail, BonusFieldConstants.INCOME_RATIO, ComputeUtil.computeDivide(realIncome, ComputeUtil.computeDivide(orderAmount, exchangeRate)));
|
||||
}
|
||||
return bdBonusDeduct;
|
||||
}
|
||||
|
||||
|
|
|
@ -275,7 +275,8 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
|||
Date settleEndDate = DateUtils.afterDate(1, ChronoUnit.DAYS, settleStartDate);
|
||||
|
||||
// 新零售订单(注册、复购)
|
||||
List<SaOrderExt> orderList = iBonusOrderService.listRetailSaOrder(settleStartDate, settleEndDate, null, Arrays.asList(EOrderType.RETAIL_REGISTER.getValue(), EOrderType.RETAIL_UPGRADE.getValue(), EOrderType.RETAIL_REPURCHASE.getValue()));
|
||||
List<SaOrderExt> orderList = iBonusOrderService.listRetailSaOrder(settleStartDate, settleEndDate, null,
|
||||
Arrays.asList(EOrderType.RETAIL_REGISTER.getValue(), EOrderType.RETAIL_UPGRADE.getValue(), EOrderType.RETAIL_REPURCHASE.getValue()));
|
||||
|
||||
// 更新当月会员, 将昨天业绩更到到今天,更新当月会员考核结果,有消费的考核通过
|
||||
// 结算期间表
|
||||
|
@ -294,6 +295,9 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
|||
// 初始化结算明细数据(昨天数据更新到今天数据)
|
||||
iCuMemberRetailRangeService.mergeMemberRetailRangeDetailByYesterday(rangeDetailTableName, yesterdayRangeDetailTableName);
|
||||
|
||||
// 升阶段点位列表
|
||||
List<CuMemberRetailDetail> stageList = new ArrayList<>();
|
||||
|
||||
if (orderList.size() > 0) {
|
||||
// 按照血缘,查询该会员所有伞上会员
|
||||
List<CuMemberRetailRangeExt> memberRetailRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeParent(rangeTableName, orderList);
|
||||
|
@ -306,7 +310,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
|||
}
|
||||
}
|
||||
// 查询血缘会员明细数据(一阶段)
|
||||
iCuMemberRetailDetailService.listMemberRetailDetail(rangeDetailTableName, memberRangeExtMap, EBonusStage.ONE);
|
||||
iCuMemberRetailDetailService.listMemberRetailDetail(rangeDetailTableName, memberRangeExtMap, EBonusStage.ONE, null);
|
||||
|
||||
// 奖衔
|
||||
Map<Integer, BdAwards> retailAwardsMap = new HashMap<>();
|
||||
|
@ -331,11 +335,9 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
|||
// 直推收益 -- 来源订单金额,直推拿金额的10%
|
||||
this.calculateDirectIncome(cuMemberBonusPushList, memberRangeExtMap, saOrderExt,
|
||||
bonusConfigDTO, period, cuMemberBonusMap);
|
||||
|
||||
// TODO 阶段收益 -- 来源订单金额
|
||||
this.calculateStageIncome(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period,
|
||||
memberRangeExtMap, saOrderExt, settleStartDate, rangeTableName, rangeDetailTableName, EBonusStage.ONE);
|
||||
|
||||
// 一阶段收益 -- 来源订单金额
|
||||
stageList.addAll(this.calculateStageIncome(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period,
|
||||
memberRangeExtMap, saOrderExt, settleStartDate, rangeTableName, rangeDetailTableName));
|
||||
|
||||
// TODO 领导级差收益 -- 来源PV
|
||||
// TODO 领导平差收益 -- 来源PV
|
||||
|
@ -344,13 +346,32 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
|||
// 见点收益 -- 来源订单业绩,血缘上20代,每代拿业绩的10%
|
||||
this.calculateRepurDirectIncome(cuMemberBonusPushList, memberRangeExtMap, saOrderExt,
|
||||
bonusConfigDTO, period, cuMemberBonusMap);
|
||||
// TODO 阶段收益 -- 来源订单业绩
|
||||
|
||||
// 一阶段收益 -- 来源订单累计业绩
|
||||
stageList.addAll(this.calculateStageIncome(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period,
|
||||
memberRangeExtMap, saOrderExt, settleStartDate, rangeTableName, rangeDetailTableName));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// TODO 统一处理第二阶段还是 fillRetailDetail 方法进行处理
|
||||
// TODO 处理升二阶段点位
|
||||
if (CollectionUtil.isNotEmpty(stageList)) {
|
||||
List<Long> stageMemberList = stageList.stream().map(CuMemberRetailDetail::getPkMember).collect(Collectors.toList());
|
||||
// 查询血缘会员明细数据(二阶段)
|
||||
iCuMemberRetailDetailService.listMemberRetailDetail(rangeDetailTableName, memberRangeExtMap, EBonusStage.TWO, stageMemberList);
|
||||
// 二阶段收益
|
||||
stageList = this.calculateStageIncomeTwoThree(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period,
|
||||
memberRangeExtMap, settleStartDate, rangeTableName, rangeDetailTableName, EBonusStage.TWO, stageList);
|
||||
}
|
||||
|
||||
// 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);
|
||||
}
|
||||
|
||||
if (cuMemberBonusPushList.size() > 0) {
|
||||
bonusRecordDetailVO.setCuMemberBonusPushList(cuMemberBonusPushList);
|
||||
|
@ -930,26 +951,44 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
|||
}
|
||||
|
||||
/**
|
||||
* 计算阶段收益 -- 精品专区
|
||||
* 计算一阶段收益 -- 精品专区、商城专区
|
||||
*/
|
||||
private void calculateStageIncome(List<CuMemberBonusStage> cuMemberBonusStageList, Map<Long, CuMemberBonus> cuMemberBonusMap,
|
||||
private List<CuMemberRetailDetail> calculateStageIncome(List<CuMemberBonusStage> cuMemberBonusStageList, Map<Long, CuMemberBonus> cuMemberBonusMap,
|
||||
BonusConfigDTO bonusConfigDTO, Integer period,
|
||||
Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, SaOrderExt saOrderExt,
|
||||
Date settleDate, String rangeTableName, String rangeDetailTableName, EBonusStage eBonusStage) {
|
||||
// 订单金额除50取整,为新増点位数量
|
||||
int newPointInt = saOrderExt.getOrderAmount().divide(RetailConstants.POINT_VAL, 0, RoundingMode.DOWN).intValue();
|
||||
if (newPointInt == 0) {
|
||||
// 当前精品专区订单不足生成点位
|
||||
return;
|
||||
}
|
||||
|
||||
Date settleDate, String rangeTableName, String rangeDetailTableName) {
|
||||
List<CuMemberRetailDetail> returnRetailDetailList = new ArrayList<>();
|
||||
// 订单会员
|
||||
CuMemberRetailRangeExt sourceMember = memberRangeExtMap.get(saOrderExt.getPkMember());
|
||||
if (null == sourceMember) {
|
||||
log.error("阶段收益处理失败,订单会员不存在. orderCode: {}, pkMember: {}", saOrderExt.getOrderCode(), saOrderExt.getPkMember());
|
||||
return returnRetailDetailList;
|
||||
}
|
||||
|
||||
int newPointInt;
|
||||
if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType()
|
||||
|| EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()) {
|
||||
// 精品专区按订单金额计算
|
||||
// 订单金额除50取整,为新増点位数量
|
||||
newPointInt = saOrderExt.getOrderAmount().divide(RetailConstants.POINT_VAL, 0, RoundingMode.DOWN).intValue();
|
||||
} else {
|
||||
// 商城专区按累计业绩处理
|
||||
BigDecimal repPvBalance = sourceMember.getRepPvBalance().add(saOrderExt.getOrderAchieve());
|
||||
newPointInt = repPvBalance.divide(RetailConstants.POINT_VAL, 0, RoundingMode.DOWN).intValue();
|
||||
sourceMember.setRepPvBalance(repPvBalance.subtract(RetailConstants.POINT_VAL.multiply(new BigDecimal(newPointInt))));
|
||||
}
|
||||
if (newPointInt == 0) {
|
||||
// 当前订单不足生成点位
|
||||
return returnRetailDetailList;
|
||||
}
|
||||
|
||||
// 会员一阶段子点位列表
|
||||
LinkedHashMap<Integer, CuMemberRetailDetail> detailList = sourceMember.getOneDetailMap();
|
||||
if (null == detailList) {
|
||||
detailList = new LinkedHashMap<>();
|
||||
sourceMember.setOneDetailMap(detailList);
|
||||
sourceMember.setTwoDetailMap(new LinkedHashMap<>());
|
||||
sourceMember.setThreeDetailMap(new LinkedHashMap<>());
|
||||
}
|
||||
// 当前会员子点位总数
|
||||
int pointCount = sourceMember.getPointCount();
|
||||
|
@ -968,6 +1007,46 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
|||
.build();
|
||||
detailList.put(newRetailDetail.getChildNode(), newRetailDetail);
|
||||
|
||||
this.handleStageIncome(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period,
|
||||
memberRangeExtMap, saOrderExt, settleDate, rangeTableName, rangeDetailTableName, EBonusStage.ONE,
|
||||
sourceMember, newRetailDetail, returnRetailDetailList);
|
||||
}
|
||||
return returnRetailDetailList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算二、三阶段收益
|
||||
*/
|
||||
private List<CuMemberRetailDetail> calculateStageIncomeTwoThree(List<CuMemberBonusStage> cuMemberBonusStageList, Map<Long, CuMemberBonus> cuMemberBonusMap,
|
||||
BonusConfigDTO bonusConfigDTO, Integer period,
|
||||
Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
|
||||
Date settleDate, String rangeTableName, String rangeDetailTableName, EBonusStage eBonusStage,
|
||||
List<CuMemberRetailDetail> stageList) {
|
||||
List<CuMemberRetailDetail> returnRetailDetailList = new ArrayList<>();
|
||||
for (CuMemberRetailDetail memberRetailDetail : stageList) {
|
||||
// 订单会员
|
||||
CuMemberRetailRangeExt sourceMember = memberRangeExtMap.get(memberRetailDetail.getPkMember());
|
||||
if (null == sourceMember) {
|
||||
log.error("阶段收益处理失败,{}会员不存在. pkMember: {}", eBonusStage.getLabel(), memberRetailDetail.getPkMember());
|
||||
return returnRetailDetailList;
|
||||
}
|
||||
|
||||
this.handleStageIncome(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period,
|
||||
memberRangeExtMap, null, settleDate, rangeTableName, rangeDetailTableName, eBonusStage,
|
||||
sourceMember, memberRetailDetail, returnRetailDetailList);
|
||||
}
|
||||
return returnRetailDetailList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理阶段收益(一、二、三阶段)
|
||||
*/
|
||||
private void handleStageIncome(List<CuMemberBonusStage> cuMemberBonusStageList, Map<Long, CuMemberBonus> cuMemberBonusMap,
|
||||
BonusConfigDTO bonusConfigDTO, Integer period,
|
||||
Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, SaOrderExt saOrderExt,
|
||||
Date settleDate, String rangeTableName, String rangeDetailTableName, EBonusStage eBonusStage,
|
||||
CuMemberRetailRangeExt sourceMember, CuMemberRetailDetail newRetailDetail,
|
||||
List<CuMemberRetailDetail> returnRetailDetailList) {
|
||||
// 阶段奖金处理列表
|
||||
List<BonusStageData> bonusStageDataList = new ArrayList<>();
|
||||
// 推荐人
|
||||
|
@ -981,7 +1060,14 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
|||
pkParent = targetMember.getPkParent();
|
||||
|
||||
// 推荐人一阶段子点位列表
|
||||
LinkedHashMap<Integer, CuMemberRetailDetail> parentDetailList = targetMember.getOneDetailMap();
|
||||
LinkedHashMap<Integer, CuMemberRetailDetail> parentDetailList = null;
|
||||
if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) {
|
||||
parentDetailList = targetMember.getOneDetailMap();
|
||||
} else if (EBonusStage.TWO.getValue() == eBonusStage.getValue()) {
|
||||
parentDetailList = targetMember.getTwoDetailMap();
|
||||
} else if (EBonusStage.THREE.getValue() == eBonusStage.getValue()) {
|
||||
parentDetailList = targetMember.getThreeDetailMap();
|
||||
}
|
||||
if (CollectionUtil.isEmpty(parentDetailList)) {
|
||||
// 推荐人没有未完成点位,继续往上找
|
||||
continue;
|
||||
|
@ -1018,8 +1104,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
|||
CuMemberRetailRangeExt targetMember = memberRangeExtMap.get(bonusStageData.getTargetPkMember());
|
||||
// 会员奖金数据
|
||||
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMember.getPkMember(), targetMember.getIncomeStatus(),
|
||||
targetMember.getPkSettleCountry(), targetMember.getPkRate() == null ? saOrderExt.getPkRate() : targetMember.getPkRate());
|
||||
|
||||
targetMember.getPkSettleCountry(), targetMember.getPkRate() == null ? (saOrderExt != null ? saOrderExt.getPkRate() : 0) : targetMember.getPkRate());
|
||||
// 阶段奖金
|
||||
int pkBonusItem = getPkBonusItems(bonusConfigDTO, targetMember.getPkSettleCountry(), EBonusItems.STAGE_INCOME.getValue());
|
||||
// 阶段收益明细
|
||||
|
@ -1029,15 +1114,29 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
|||
cuMemberBonusStage.setStage(bonusStageData.getStage());
|
||||
cuMemberBonusStage.setStageNum(bonusStageData.getStageNum());
|
||||
stageIncomeRemark(saOrderExt, cuMemberBonusStage, sourceMember, targetMember);
|
||||
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusStage, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
|
||||
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusStage, saOrderExt != null ? saOrderExt.getOrderAmount() : null, saOrderExt != null ? saOrderExt.getInExchangeRate() : null);
|
||||
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusStage.getIncomeStatus()) {
|
||||
cuMemberBonus.setStoreIncome(ComputeUtil.computeAdd(cuMemberBonus.getStoreIncome(), cuMemberBonusStage.getPretaxIncome()));
|
||||
setRetailTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusStage);
|
||||
}
|
||||
cuMemberBonusStageList.add(cuMemberBonusStage);
|
||||
}
|
||||
}
|
||||
|
||||
// 升阶段数据
|
||||
if (EBonusStage.ONE.getValue() == bonusStageData.getStage()) {
|
||||
// 一阶段需要处理升阶段
|
||||
CuMemberRetailDetail twoRetailDetail = bonusStageData.getTwoRetailDetail();
|
||||
targetMember.getTwoDetailMap().put(twoRetailDetail.getChildNode(), twoRetailDetail);
|
||||
returnRetailDetailList.add(twoRetailDetail);
|
||||
} else if (EBonusStage.TWO.getValue() == bonusStageData.getStage()) {
|
||||
// 二阶段需要处理升阶段
|
||||
CuMemberRetailDetail threeRetailDetail = bonusStageData.getThreeRetailDetail();
|
||||
targetMember.getThreeDetailMap().put(threeRetailDetail.getChildNode(), threeRetailDetail);
|
||||
returnRetailDetailList.add(threeRetailDetail);
|
||||
} else if (EBonusStage.THREE.getValue() == bonusStageData.getStage()) {
|
||||
// TODO 三阶段需要赠送点位
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -284,27 +284,55 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
|
|||
if (isFinish) {
|
||||
targetRetailDetail.setStageStatus(EBonusStageStatus.YES.getValue());
|
||||
targetRetailDetail.setStageDate(settleDate);
|
||||
// TODO 统一处理第二阶段还是 fillRetailDetail 方法进行处理
|
||||
if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) {
|
||||
// 一阶段,全满发放阶段奖
|
||||
// 返回奖金收益处理数据
|
||||
bonusStageDataList.add(BonusStageData.builder()
|
||||
BonusStageData bonusStageData = BonusStageData.builder()
|
||||
.bonusIncome(BonusConstants.ONE_BONUS)
|
||||
.targetPkMember(targetRetailDetail.getPkMember())
|
||||
.targetChildNode(targetRetailDetail.getChildNode())
|
||||
.stage(eBonusStage.getValue())
|
||||
.stageNum(14)
|
||||
.build();
|
||||
// 生成二阶段点位
|
||||
bonusStageData.setTwoRetailDetail(CuMemberRetailDetail.builder()
|
||||
.pkMember(targetRetailDetail.getPkMember())
|
||||
.childNode(targetRetailDetail.getChildNode())
|
||||
.pkParent(targetRetailDetail.getPkParent())
|
||||
.stage(EBonusStage.TWO.getValue())
|
||||
.stageStatus(EBonusStageStatus.NO.getValue())
|
||||
.pointType(targetRetailDetail.getPointType())
|
||||
.pointGift(targetRetailDetail.getPointGift())
|
||||
.creationTime(settleDate)
|
||||
.updateBool(0)
|
||||
.build());
|
||||
bonusStageDataList.add(bonusStageData);
|
||||
} else if (EBonusStage.TWO.getValue() == eBonusStage.getValue()) {
|
||||
// 二阶段,全满发放阶段奖
|
||||
// 返回奖金收益处理数据
|
||||
bonusStageDataList.add(BonusStageData.builder()
|
||||
BonusStageData bonusStageData = BonusStageData.builder()
|
||||
.bonusIncome(BonusConstants.TWO_BONUS)
|
||||
.targetPkMember(targetRetailDetail.getPkMember())
|
||||
.targetChildNode(targetRetailDetail.getChildNode())
|
||||
.stage(eBonusStage.getValue())
|
||||
.stageNum(14)
|
||||
.build();
|
||||
bonusStageData.setThreeRetailDetail(CuMemberRetailDetail.builder()
|
||||
.pkMember(targetRetailDetail.getPkMember())
|
||||
.childNode(targetRetailDetail.getChildNode())
|
||||
.pkParent(targetRetailDetail.getPkParent())
|
||||
.stage(EBonusStage.THREE.getValue())
|
||||
.stageStatus(EBonusStageStatus.NO.getValue())
|
||||
.pointType(targetRetailDetail.getPointType())
|
||||
.pointGift(targetRetailDetail.getPointGift())
|
||||
.creationTime(settleDate)
|
||||
.updateBool(0)
|
||||
.build());
|
||||
bonusStageDataList.add(bonusStageData);
|
||||
} else if (EBonusStage.THREE.getValue() == eBonusStage.getValue()) {
|
||||
// TODO 三阶段发放特殊处理
|
||||
// TODO 三阶段填充满,判断是否需要赠送点位
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -347,7 +375,7 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
|
|||
// 新点位的上第二层
|
||||
CuMemberRetailRangeExt firstMemberRetail = memberRangeExtMap.get(newParentRetailDetail.getPointMemberFirst());
|
||||
if (null != firstMemberRetail) {
|
||||
CuMemberRetailDetail memberDetail = firstMemberRetail.getOneDetailMap().get(newParentRetailDetail.getPointFirst());
|
||||
CuMemberRetailDetail memberDetail = this.getRetailDetailMap(firstMemberRetail, eBonusStage).get(newParentRetailDetail.getPointFirst());
|
||||
if (null != memberDetail) {
|
||||
newRetailDetail.setPointMemberSecond(newParentRetailDetail.getPointMemberFirst());
|
||||
newRetailDetail.setPointSecond(newParentRetailDetail.getPointFirst());
|
||||
|
@ -359,7 +387,7 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
|
|||
// 新点位的上第三层
|
||||
CuMemberRetailRangeExt secondMemberRetail = memberRangeExtMap.get(newParentRetailDetail.getPointMemberSecond());
|
||||
if (null != secondMemberRetail) {
|
||||
CuMemberRetailDetail memberDetail = secondMemberRetail.getOneDetailMap().get(newParentRetailDetail.getPointSecond());
|
||||
CuMemberRetailDetail memberDetail = this.getRetailDetailMap(firstMemberRetail, eBonusStage).get(newParentRetailDetail.getPointSecond());
|
||||
if (null != memberDetail) {
|
||||
newRetailDetail.setPointMemberThird(newParentRetailDetail.getPointMemberSecond());
|
||||
newRetailDetail.setPointThird(newParentRetailDetail.getPointSecond());
|
||||
|
@ -418,7 +446,7 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
|
|||
// 新点位的上第三层
|
||||
CuMemberRetailRangeExt thirdMemberRetail = memberRangeExtMap.get(newParentRetailDetail.getPointMemberFirst());
|
||||
if (null != thirdMemberRetail) {
|
||||
CuMemberRetailDetail memberDetail = thirdMemberRetail.getOneDetailMap().get(newParentRetailDetail.getPointFirst());
|
||||
CuMemberRetailDetail memberDetail = this.getRetailDetailMap(thirdMemberRetail, eBonusStage).get(newParentRetailDetail.getPointFirst());
|
||||
if (null != memberDetail) {
|
||||
newRetailDetail.setPointMemberThird(newParentRetailDetail.getPointMemberFirst());
|
||||
newRetailDetail.setPointThird(newParentRetailDetail.getPointFirst());
|
||||
|
@ -430,7 +458,7 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
|
|||
// 新点位的上第一层
|
||||
CuMemberRetailRangeExt firstMemberRetail = memberRangeExtMap.get(downFirstMember);
|
||||
if (null != firstMemberRetail) {
|
||||
CuMemberRetailDetail memberDetail = firstMemberRetail.getOneDetailMap().get(downFirstPoint);
|
||||
CuMemberRetailDetail memberDetail = this.getRetailDetailMap(firstMemberRetail, eBonusStage).get(downFirstPoint);
|
||||
if (null != memberDetail) {
|
||||
newRetailDetail.setPointMemberFirst(memberDetail.getPkMember());
|
||||
newRetailDetail.setPointFirst(memberDetail.getChildNode());
|
||||
|
@ -511,7 +539,7 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
|
|||
// 新点位的上第二层
|
||||
CuMemberRetailRangeExt secondMemberRetail = memberRangeExtMap.get(downSecondMember);
|
||||
if (null != secondMemberRetail) {
|
||||
CuMemberRetailDetail memberDetail = secondMemberRetail.getOneDetailMap().get(downSecondPoint);
|
||||
CuMemberRetailDetail memberDetail = this.getRetailDetailMap(secondMemberRetail, eBonusStage).get(downSecondPoint);
|
||||
if (null != memberDetail) {
|
||||
newRetailDetail.setPointMemberSecond(newParentRetailDetail.getPkMember());
|
||||
newRetailDetail.setPointSecond(newParentRetailDetail.getChildNode());
|
||||
|
@ -523,7 +551,7 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
|
|||
// 新点位的上第一层
|
||||
CuMemberRetailRangeExt firstMemberRetail = memberRangeExtMap.get(downFirstMember);
|
||||
if (null != firstMemberRetail) {
|
||||
CuMemberRetailDetail memberDetail = firstMemberRetail.getOneDetailMap().get(downFirstPoint);
|
||||
CuMemberRetailDetail memberDetail = this.getRetailDetailMap(firstMemberRetail, eBonusStage).get(downFirstPoint);
|
||||
if (null != memberDetail) {
|
||||
newRetailDetail.setPointMemberFirst(newParentRetailDetail.getPkMember());
|
||||
newRetailDetail.setPointFirst(newParentRetailDetail.getChildNode());
|
||||
|
@ -708,4 +736,16 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStag
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private LinkedHashMap<Integer, CuMemberRetailDetail> getRetailDetailMap(CuMemberRetailRangeExt memberRetail, EBonusStage eBonusStage) {
|
||||
if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) {
|
||||
return memberRetail.getOneDetailMap();
|
||||
} else if (EBonusStage.TWO.getValue() == eBonusStage.getValue()) {
|
||||
return memberRetail.getTwoDetailMap();
|
||||
} else if (EBonusStage.THREE.getValue() == eBonusStage.getValue()) {
|
||||
return memberRetail.getThreeDetailMap();
|
||||
}
|
||||
return new LinkedHashMap<>();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -51,6 +51,7 @@
|
|||
<result column="rep_team_new_amount" property="repTeamNewAmount"/>
|
||||
<result column="rep_team_new_pv" property="repTeamNewPv"/>
|
||||
<result column="point_count" property="pointCount"/>
|
||||
<result column="rep_pv_balance" property="repPvBalance"/>
|
||||
|
||||
<result column="AWARDS_VALUE" property="awardsValue"/>
|
||||
<result column="AWARDS_NAME" property="awardsName"/>
|
||||
|
@ -92,7 +93,9 @@
|
|||
rep_consume_new_amount = 0,
|
||||
rep_consume_new_pv = 0,
|
||||
rep_team_new_amount = 0,
|
||||
rep_team_new_pv = 0
|
||||
rep_team_new_pv = 0,
|
||||
point_count = 0,
|
||||
rep_pv_balance = 0
|
||||
</update>
|
||||
|
||||
<update id="mergeMemberRetailRangeByYesterday">
|
||||
|
@ -103,7 +106,8 @@
|
|||
consume_amount, month_consume_amount,
|
||||
team_consume_pv, team_month_pv,
|
||||
team_consume_amount, team_month_amount,
|
||||
recommend_num, team_num, big_team_pv, small_team_pv
|
||||
recommend_num, team_num, big_team_pv, small_team_pv,
|
||||
point_count, rep_pv_balance
|
||||
from ${yesterdayRangeTableName}
|
||||
) b
|
||||
on (a.pk_member = b.pk_member)
|
||||
|
@ -115,7 +119,8 @@
|
|||
a.team_consume_pv = b.team_consume_pv,
|
||||
a.team_consume_amount = b.team_consume_amount,
|
||||
a.recommend_num = b.recommend_num, a.team_num = b.team_num,
|
||||
a.big_team_pv = b.big_team_pv, a.small_team_pv = b.small_team_pv
|
||||
a.big_team_pv = b.big_team_pv, a.small_team_pv = b.small_team_pv,
|
||||
a.point_count = b.point_count, a.rep_pv_balance = b.rep_pv_balance
|
||||
<if test="isSameMonth == 0">
|
||||
,a.month_consume_pv = b.month_consume_pv
|
||||
,a.month_consume_amount = b.month_consume_amount
|
||||
|
@ -322,7 +327,8 @@
|
|||
#{item.regConsumeNewAmount} reg_consume_new_amount, #{item.regConsumeNewPv} reg_consume_new_pv,
|
||||
#{item.regTeamNewAmount} reg_team_new_amount, #{item.regTeamNewPv} reg_team_new_pv,
|
||||
#{item.repConsumeNewAmount} rep_consume_new_amount, #{item.repConsumeNewPv} rep_consume_new_pv,
|
||||
#{item.repTeamNewAmount} rep_team_new_amount, #{item.repTeamNewPv} rep_team_new_pv
|
||||
#{item.repTeamNewAmount} rep_team_new_amount, #{item.repTeamNewPv} rep_team_new_pv,
|
||||
#{item.pointCount} point_count, #{item.repPvBalance} rep_pv_balance
|
||||
from dual
|
||||
</foreach>
|
||||
) b
|
||||
|
@ -337,7 +343,8 @@
|
|||
a.reg_consume_new_amount = b.reg_consume_new_amount, a.reg_consume_new_pv = b.reg_consume_new_pv,
|
||||
a.reg_team_new_amount = b.reg_team_new_amount, a.reg_team_new_pv = b.reg_team_new_pv,
|
||||
a.rep_consume_new_amount = b.rep_consume_new_amount, a.rep_consume_new_pv = b.rep_consume_new_pv,
|
||||
a.rep_team_new_amount = b.rep_team_new_amount, a.rep_team_new_pv = b.rep_team_new_pv
|
||||
a.rep_team_new_amount = b.rep_team_new_amount, a.rep_team_new_pv = b.rep_team_new_pv,
|
||||
a.point_count = b.point_count, a.rep_pv_balance = b.rep_pv_balance
|
||||
</update>
|
||||
|
||||
<!-- 更新会员日结数据 -->
|
||||
|
@ -647,6 +654,7 @@
|
|||
rep_team_new_amount,
|
||||
rep_team_new_pv,
|
||||
point_count,
|
||||
rep_pv_balance,
|
||||
bw.awards_value,
|
||||
bw.awards_name
|
||||
from (
|
||||
|
@ -701,6 +709,8 @@
|
|||
rep_consume_new_pv,
|
||||
rep_team_new_amount,
|
||||
rep_team_new_pv,
|
||||
point_count,
|
||||
rep_pv_balance,
|
||||
bw.awards_value,
|
||||
bw.awards_name
|
||||
from ${tableName} a
|
||||
|
|
|
@ -298,43 +298,43 @@
|
|||
stage NUMBER(1) default 1 not null,
|
||||
stage_status NUMBER(1) default 1 not null,
|
||||
stage_date DATE,
|
||||
point_11 NUMBER(8),
|
||||
point_member_11 NUMBER(20),
|
||||
point_12 NUMBER(8),
|
||||
point_11 NUMBER(8),
|
||||
point_member_12 NUMBER(20),
|
||||
point_21 NUMBER(8),
|
||||
point_12 NUMBER(8),
|
||||
point_member_21 NUMBER(20),
|
||||
point_22 NUMBER(8),
|
||||
point_21 NUMBER(8),
|
||||
point_member_22 NUMBER(20),
|
||||
point_23 NUMBER(8),
|
||||
point_22 NUMBER(8),
|
||||
point_member_23 NUMBER(20),
|
||||
point_24 NUMBER(8),
|
||||
point_23 NUMBER(8),
|
||||
point_member_24 NUMBER(20),
|
||||
point_31 NUMBER(8),
|
||||
point_24 NUMBER(8),
|
||||
point_member_31 NUMBER(20),
|
||||
point_32 NUMBER(8),
|
||||
point_31 NUMBER(8),
|
||||
point_member_32 NUMBER(20),
|
||||
point_33 NUMBER(8),
|
||||
point_32 NUMBER(8),
|
||||
point_member_33 NUMBER(20),
|
||||
point_34 NUMBER(8),
|
||||
point_33 NUMBER(8),
|
||||
point_member_34 NUMBER(20),
|
||||
point_35 NUMBER(8),
|
||||
point_34 NUMBER(8),
|
||||
point_member_35 NUMBER(20),
|
||||
point_36 NUMBER(8),
|
||||
point_35 NUMBER(8),
|
||||
point_member_36 NUMBER(20),
|
||||
point_37 NUMBER(8),
|
||||
point_36 NUMBER(8),
|
||||
point_member_37 NUMBER(20),
|
||||
point_38 NUMBER(8),
|
||||
point_37 NUMBER(8),
|
||||
point_member_38 NUMBER(20),
|
||||
point_38 NUMBER(8),
|
||||
point_type NUMBER(1) default 0 not null,
|
||||
point_gift NUMBER(1) default 0 not null,
|
||||
creation_time DATE,
|
||||
point_first NUMBER(8),
|
||||
point_member_first NUMBER(20),
|
||||
point_second NUMBER(8),
|
||||
point_first NUMBER(8),
|
||||
point_member_second NUMBER(20),
|
||||
point_third NUMBER(8),
|
||||
point_member_third NUMBER(20)
|
||||
point_second NUMBER(8),
|
||||
point_member_third NUMBER(20),
|
||||
point_third NUMBER(8)
|
||||
)
|
||||
</update>
|
||||
|
||||
|
@ -572,7 +572,8 @@
|
|||
rep_consume_new_pv number(17,6) default 0 not null,
|
||||
rep_team_new_amount number(17,6) default 0 not null,
|
||||
rep_team_new_pv number(17,6) default 0 not null,
|
||||
point_count number(8) default 0 not null
|
||||
point_count number(8) default 0 not null,
|
||||
rep_pv_balance number(17,6) default 0 not null
|
||||
)
|
||||
</update>
|
||||
|
||||
|
|
|
@ -80,7 +80,7 @@
|
|||
where so.del_flag = 0
|
||||
and so.order_status = 1
|
||||
<if test="orderCode != null and orderCode != ''">
|
||||
and so.order_code=#{orderCode}
|
||||
and so.order_code = #{orderCode}
|
||||
</if>
|
||||
<if test="orderTypeList != null and orderTypeList.size > 0">
|
||||
and so.order_type in
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.hzs.report.order.service.impl;
|
|||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.hzs.common.core.constant.MagicNumberConstants;
|
||||
import com.hzs.common.core.enums.EOrderType;
|
||||
import com.hzs.common.core.utils.DateUtils;
|
||||
import com.hzs.common.domain.report.CuMemberPerformanceSummary;
|
||||
|
@ -78,6 +79,7 @@ public class CuMemberPerformanceSummaryServiceImpl extends ServiceImpl<CuMemberP
|
|||
}
|
||||
}
|
||||
summary.setDividendPv(summary.getTotalPv().multiply(new BigDecimal("0.015")));
|
||||
summary.setPkCreator(MagicNumberConstants.PK_ADMIN);
|
||||
baseMapper.insert(summary);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,6 +19,10 @@ public class BonusMsgConstants {
|
|||
* 阶段 收益说明
|
||||
*/
|
||||
public static String STAGE_INCOME = "订单编号%s,%s为%s贡献了阶段收益,%s子点位%s阶段。";
|
||||
/**
|
||||
* 二、三阶段 收益说明
|
||||
*/
|
||||
public static String STAGE_INCOME_OTHER = "%s为%s贡献了阶段收益,%s子点位%s阶段。";
|
||||
|
||||
/**
|
||||
* 直推级差收益说明
|
||||
|
|
|
@ -195,4 +195,10 @@ public class CuMemberRetailRange extends BaseEntity {
|
|||
@TableField("point_count")
|
||||
private Integer pointCount;
|
||||
|
||||
/**
|
||||
* 复购业绩余额
|
||||
*/
|
||||
@TableField("REP_PV_BALANCE")
|
||||
private BigDecimal repPvBalance;
|
||||
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.hzs.common.domain.report;
|
|||
import java.math.BigDecimal;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.KeySequence;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.util.Date;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
|
@ -30,7 +31,7 @@ public class CuMemberPerformanceSummary extends BaseEntity {
|
|||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableField("PK_ID")
|
||||
@TableId("PK_ID")
|
||||
private Long pkId;
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue