## Q8以上奖衔升级处理;拓展奖V3 V4判断烧伤改为延缓发放;

This commit is contained in:
cabbage 2025-04-15 17:04:56 +08:00
parent 34a71d0321
commit 1202f1cc86
26 changed files with 605 additions and 405 deletions

View File

@ -29,4 +29,5 @@ public class BonusExpandDTO implements Serializable {
* 国家 * 国家
*/ */
private Integer pkCountry; private Integer pkCountry;
} }

View File

@ -794,4 +794,13 @@ public interface CuMemberTreeMapper extends BaseMapper<CuMemberTree> {
*/ */
Integer updateCuMemberSettleGradeByPeriod(@Param("updateTableName") String updateTableName, @Param("period") Integer period); Integer updateCuMemberSettleGradeByPeriod(@Param("updateTableName") String updateTableName, @Param("period") Integer period);
/**
* 查询左右区足够可以升级的会员
*
* @param settleTableName
* @param awardsValue
* @return
*/
List<CuMemberSettleExt> listUpgradeAwards(@Param("settleTableName") String settleTableName, @Param("awardsValue") Integer awardsValue);
} }

View File

@ -668,4 +668,13 @@ public interface ICuMemberTreeService extends IService<CuMemberTree> {
*/ */
void updateCuMemberSettleGradeByPeriod(List<Integer> periodList); void updateCuMemberSettleGradeByPeriod(List<Integer> periodList);
/**
* 查询左右区足够可以升级的会员
*
* @param settleTableName
* @param awardsValue
* @return
*/
List<CuMemberSettleExt> listUpgradeAwards(String settleTableName, Integer awardsValue);
} }

View File

@ -821,4 +821,9 @@ public class CuMemberTreeServiceImpl extends ServiceImpl<CuMemberTreeMapper, CuM
}); });
} }
@Override
public List<CuMemberSettleExt> listUpgradeAwards(String settleTableName, Integer awardsValue) {
return baseMapper.listUpgradeAwards(settleTableName, awardsValue);
}
} }

View File

@ -34,10 +34,8 @@ public interface ICuMemberService extends IService<CuMember> {
/** /**
* 更新会员奖衔根据临时表 * 更新会员奖衔根据临时表
*
* @param enoughAwardsMember 修改奖衔的会员
*/ */
void updateCuMemberByPeriod(List<CuMemberSettleExt> enoughAwardsMember, Integer period); void updateCuMemberByPeriod(Integer period);
/** /**
* 更新会员奖衔根据临时表 * 更新会员奖衔根据临时表

View File

@ -38,7 +38,7 @@ public class CuMemberServiceImpl extends ServiceImpl<CuMemberMapper, CuMember> i
} }
@Override @Override
public void updateCuMemberByPeriod(List<CuMemberSettleExt> enoughAwardsMember, Integer period) { public void updateCuMemberByPeriod(Integer period) {
baseMapper.updateCuMemberByPeriod(period); baseMapper.updateCuMemberByPeriod(period);
} }

View File

@ -16,12 +16,12 @@ import java.util.List;
*/ */
public interface CuBonusExpandMapper extends BaseMapper<CuBonusExpand> { public interface CuBonusExpandMapper extends BaseMapper<CuBonusExpand> {
/* /**
* @description: 查询4-n配置 * 查询4-n配置
* @author: sui q *
* @date: 2024/7/23 10:09 * @param bonusExpandParam
* @param: null null * @return
**/ */
List<CuBonusExpandExt> queryBonusExpand(BonusExpandParam bonusExpandParam); List<CuBonusExpandExt> queryBonusExpand(BonusExpandParam bonusExpandParam);
/* /*

View File

@ -39,11 +39,11 @@ import java.util.stream.Collectors;
public class BonusSettleAgentHandle extends BonusSettleHandle { public class BonusSettleAgentHandle extends BonusSettleHandle {
@DubboReference @DubboReference
IActivityServiceApi activityServiceApi; IActivityServiceApi iActivityServiceApi;
// 代理直推 推荐给多少钱 代理复购 区域 所有订单的1% // 代理直推 推荐给多少钱 代理复购 区域 所有订单的1%
@Autowired @Autowired
private ICuMemberAgentService cuMemberAgentService; private ICuMemberAgentService iCuMemberAgentService;
/** /**
* 计算嗨粉奖金 * 计算嗨粉奖金
@ -63,9 +63,9 @@ public class BonusSettleAgentHandle extends BonusSettleHandle {
Date currentMonthFirstDate = DateUtils.currentMonthFirstDate(settleDate); Date currentMonthFirstDate = DateUtils.currentMonthFirstDate(settleDate);
// 结算月下月第一天 // 结算月下月第一天
Date nextMonthFirstDate = DateUtils.afterDate(1, ChronoUnit.DAYS, settleDate); Date nextMonthFirstDate = DateUtils.afterDate(1, ChronoUnit.DAYS, settleDate);
List<SaOrder> currentMonthOrderList = saOrderServiceApi.querySaOrderByDayForCloud(currentMonthFirstDate, nextMonthFirstDate).getData(); List<SaOrder> currentMonthOrderList = iSaOrderServiceApi.querySaOrderByDayForCloud(currentMonthFirstDate, nextMonthFirstDate).getData();
// 查询月末会员状态 // 查询月末会员状态
Integer lastPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDateStr).getPkId(); Integer lastPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDateStr).getPkId();
String currentSettleTableName = TableNameConstants.CU_MEMBER_SETTLE + lastPeriod; String currentSettleTableName = TableNameConstants.CU_MEMBER_SETTLE + lastPeriod;
Set<Long> pkMemberSet = new HashSet<>(); Set<Long> pkMemberSet = new HashSet<>();
// 获取配置 // 获取配置
@ -75,7 +75,7 @@ public class BonusSettleAgentHandle extends BonusSettleHandle {
} }
// 计算奖金 云代首购 首购订单1% 云代复购 复购订单1% // 计算奖金 云代首购 首购订单1% 云代复购 复购订单1%
// 查询会员查询出所有代理的会员 // 查询会员查询出所有代理的会员
Map<String, List<CuMemberAgent>> cuMemberAgentMap = cuMemberAgentService.queryCuMemberAgent(); Map<String, List<CuMemberAgent>> cuMemberAgentMap = iCuMemberAgentService.queryCuMemberAgent();
List<SaOrder> saOrderList = new ArrayList<>(); List<SaOrder> saOrderList = new ArrayList<>();
for (SaOrder saOrder : currentMonthOrderList) { for (SaOrder saOrder : currentMonthOrderList) {
if (saOrder.getPkCountry() == null || saOrder.getRecProvince() == null || saOrder.getRecCity() == null) { if (saOrder.getPkCountry() == null || saOrder.getRecProvince() == null || saOrder.getRecCity() == null) {
@ -92,7 +92,7 @@ public class BonusSettleAgentHandle extends BonusSettleHandle {
cuMemberAgentList.forEach(cuMemberAgent -> cuMemberAgentList.forEach(cuMemberAgent ->
pkMemberSet.add(cuMemberAgent.getPkMember())); pkMemberSet.add(cuMemberAgent.getPkMember()));
} }
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleByMemberPk(currentSettleTableName, pkMemberSet); List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleByMemberPk(currentSettleTableName, pkMemberSet);
Map<Long, CuMemberSettleExt> cuMemberSettleExtMap = new HashMap<>(); Map<Long, CuMemberSettleExt> cuMemberSettleExtMap = new HashMap<>();
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
Map<String, BdCurrencyDTO> currencyDtoMap = bonusConfigDTO.getCurrencyDtoMap(); Map<String, BdCurrencyDTO> currencyDtoMap = bonusConfigDTO.getCurrencyDtoMap();
@ -182,15 +182,15 @@ public class BonusSettleAgentHandle extends BonusSettleHandle {
} }
// 复购券均分收益规则 // 复购券均分收益规则
List<AcRepurSharRuleConfigExt> repurSharRuleConfigExtList = activityServiceApi.queryRepurSharRuleConfig(currentMonthFirstDate, nextMonthFirstDate).getData(); List<AcRepurSharRuleConfigExt> repurSharRuleConfigExtList = iActivityServiceApi.queryRepurSharRuleConfig(currentMonthFirstDate, nextMonthFirstDate).getData();
if (CollectionUtil.isNotEmpty(repurSharRuleConfigExtList)) { if (CollectionUtil.isNotEmpty(repurSharRuleConfigExtList)) {
for (AcRepurSharRuleConfigExt acRepurSharRuleConfigExt : repurSharRuleConfigExtList) { for (AcRepurSharRuleConfigExt acRepurSharRuleConfigExt : repurSharRuleConfigExtList) {
List<Integer> orderTypeList = acRepurSharRuleConfigExt.getRepurSharOrderTypeList().stream().distinct().map(AcRepurSharOrderType::getOrderType).collect(Collectors.toList()); List<Integer> orderTypeList = acRepurSharRuleConfigExt.getRepurSharOrderTypeList().stream().distinct().map(AcRepurSharOrderType::getOrderType).collect(Collectors.toList());
List<SaOrder> orderList = saOrderServiceApi.querySaOrderByTimeForCouponShare(settleDate, nextMonthFirstDate, orderTypeList, List<SaOrder> orderList = iSaOrderServiceApi.querySaOrderByTimeForCouponShare(settleDate, nextMonthFirstDate, orderTypeList,
acRepurSharRuleConfigExt.getOrderAmount(), acRepurSharRuleConfigExt.getOrderAchieve(), acRepurSharRuleConfigExt.getPkCountry()).getData(); acRepurSharRuleConfigExt.getOrderAmount(), acRepurSharRuleConfigExt.getOrderAchieve(), acRepurSharRuleConfigExt.getPkCountry()).getData();
if (CollectionUtil.isNotEmpty(orderList)) { if (CollectionUtil.isNotEmpty(orderList)) {
Set<Long> memberSet = orderList.stream().distinct().map(SaOrder::getPkMember).collect(Collectors.toSet()); Set<Long> memberSet = orderList.stream().distinct().map(SaOrder::getPkMember).collect(Collectors.toSet());
cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleByMemberPk(currentSettleTableName, memberSet); cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleByMemberPk(currentSettleTableName, memberSet);
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
for (SaOrder saOrder : orderList) { for (SaOrder saOrder : orderList) {
BigDecimal exchangeRate = BigDecimal.ONE; BigDecimal exchangeRate = BigDecimal.ONE;

View File

@ -64,7 +64,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
// 查询 各个国家 3单循环 4单循环的配置值 // 查询 各个国家 3单循环 4单循环的配置值
// 获得会员的轮按照订单时间进行 // 获得会员的轮按照订单时间进行
// 根据订单获取轮次要回写 // 根据订单获取轮次要回写
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleBySaOrder(settleTableName, firPurchaseOrderList); List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleBySaOrder(settleTableName, firPurchaseOrderList);
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
// 推荐奖明细 // 推荐奖明细
List<CuMemberBonusPush> cuMemberBonusPushList = new ArrayList<>(); List<CuMemberBonusPush> cuMemberBonusPushList = new ArrayList<>();
@ -95,7 +95,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
if (specialOrderList.size() > 0) { if (specialOrderList.size() > 0) {
Set<Long> memberSet = new HashSet<>(); Set<Long> memberSet = new HashSet<>();
specialOrderList.forEach(saOrderExt -> memberSet.add(saOrderExt.getPkMember())); specialOrderList.forEach(saOrderExt -> memberSet.add(saOrderExt.getPkMember()));
cuMemberSettleExtList = cuMemberTreeService.batchQuerySpecialCuMemberSettleParent(settleTableName, memberSet); cuMemberSettleExtList = iCuMemberTreeService.batchQuerySpecialCuMemberSettleParent(settleTableName, memberSet);
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
// 计算奖金 // 计算奖金
for (SaOrderExt saOrderExt : specialOrderList) { for (SaOrderExt saOrderExt : specialOrderList) {
@ -403,7 +403,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
} }
/** /**
* 计算拓展收益 * 计算首购拓展收益
* *
* @param settleTableName 结算表 * @param settleTableName 结算表
* @param period 期间 * @param period 期间
@ -418,13 +418,17 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
// 根据开始期间结束期间查询 // 根据开始期间结束期间查询
List<CuMemberBonusExpand> cuMemberBonusExpandList = new ArrayList<>(); List<CuMemberBonusExpand> cuMemberBonusExpandList = new ArrayList<>();
// 获取所有订单的上级根据订单往上一步步计算 // 获取所有订单的上级根据订单往上一步步计算
Map<Long, List<CuMemberSettleExt>> memberSettleMap = cuMemberTreeService.batchQueryCuMemberSettlePlaceParent(settleTableName, firPurchaseOrderList); // key订单IDvalue订单向上找安置人列表
Map<Long, List<CuMemberSettleExt>> memberSettleMap = iCuMemberTreeService.batchQueryCuMemberSettlePlaceParent(settleTableName, firPurchaseOrderList);
// 获取复购考核结果 // 获取复购考核结果
List<CuMemberSettleExt> queryMemberList = new ArrayList<>(); List<CuMemberSettleExt> queryMemberList = new ArrayList<>();
memberSettleMap.forEach((key, value) -> queryMemberList.addAll(value)); memberSettleMap.forEach((key, value) -> queryMemberList.addAll(value));
Map<Long, CuMemberAssess> cuMemberAssessMap = getLongCuMemberAssessMap(settleDate, queryMemberList); Map<Long, CuMemberAssess> cuMemberAssessMap = getLongCuMemberAssessMap(settleDate, queryMemberList);
for (SaOrderExt saOrderExt : firPurchaseOrderList) { for (SaOrderExt saOrderExt : firPurchaseOrderList) {
if (!validateSecondOrderExistBonus(saOrderExt, EBonusItems.EXPANSION_INCOME.getValue())) { if (!validateSecondOrderExistBonus(saOrderExt, EBonusItems.EXPANSION_INCOME.getValue())) {
// 校验二次发货需不需要计算量碰
continue; continue;
} }
// 所有需要计算的父节点只计算新增 // 所有需要计算的父节点只计算新增
@ -441,7 +445,9 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
break; break;
} }
} }
List<CuMemberBonusExpand> expandList = calculateExpandBonusOne(riskControlMap, cuMemberAssessMap, settleTableName, cuMemberSettleExtMap, bonusConfigDTO, systemConfigMap, period, weekMemberBonusMap, cuMemberBonusMap, cuMemberSettleExtList, saOrderExt, true, addTouch, expandRatio, expandNumber); // 计算量奖拓展收益
List<CuMemberBonusExpand> expandList = calculateExpandBonusOne(riskControlMap, cuMemberAssessMap, settleTableName, cuMemberSettleExtMap, bonusConfigDTO,
systemConfigMap, period, weekMemberBonusMap, cuMemberBonusMap, cuMemberSettleExtList, saOrderExt, true, addTouch, expandRatio, expandNumber);
if (expandList.size() > 0) { if (expandList.size() > 0) {
cuMemberBonusExpandList.addAll(expandList); cuMemberBonusExpandList.addAll(expandList);
} }
@ -451,31 +457,140 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
} }
/** /**
* @Description: 计算量奖 * 计算首购量奖拓展收益
* @return: List<CuMemberBonusExpand> *
* @Author: sui q * @return
* @Date: 2023/2/4 14:18
*/ */
List<CuMemberBonusExpand> calculateExpandBonusOne(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberAssess> cuMemberAssessMap, String settleTableName, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO, Map<String, String> systemConfigMap, List<CuMemberBonusExpand> calculateExpandBonusOne(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberAssess> cuMemberAssessMap, String settleTableName,
Integer period, Map<Long, CuMemberBonus> weekMemberBonusMap, Map<Long, CuMemberBonus> cuMemberBonusMap, List<CuMemberSettleExt> cuMemberSettleExtList, SaOrderExt saOrderExt, boolean flag, BigDecimal addTouch, BigDecimal expandRatio, Integer expandNumber) { Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO, Map<String, String> systemConfigMap,
Integer period, Map<Long, CuMemberBonus> weekMemberBonusMap, Map<Long, CuMemberBonus> cuMemberBonusMap,
List<CuMemberSettleExt> cuMemberSettleExtList, SaOrderExt saOrderExt, boolean flag,
BigDecimal addTouch, BigDecimal expandRatio, Integer expandNumber) {
List<CuMemberBonusExpand> cuMemberBonusExpandList = new ArrayList<>(); List<CuMemberBonusExpand> cuMemberBonusExpandList = new ArrayList<>();
if (CollectionUtil.isEmpty(cuMemberSettleExtList)) { if (CollectionUtil.isEmpty(cuMemberSettleExtList)) {
return cuMemberBonusExpandList; return cuMemberBonusExpandList;
} }
Map<Integer, BonusExpandDTO> bdBonusExpandMap = bonusConfigDTO.getBonusExpandMap(); Map<Integer, BonusExpandDTO> bdBonusExpandMap = bonusConfigDTO.getBonusExpandMap();
// 先计算新增根据新增计算碰次 // 先计算新增根据新增计算碰次
// 先进行初始化所有的安置人存储需要修改的值,cuMemberSettleExtMap最终修改的 // 先进行初始化所有的安置人存储需要修改的值,cuMemberSettleExtMap最终修改的
if (flag) { if (flag) {
// 日结传入的true秒结传入的false
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
} }
// 先准备值准备好值后开始计算计算碰次 // 先准备值准备好值后开始计算计算碰次
int touchNum = calculateTouchNum(riskControlMap, cuMemberAssessMap, cuMemberSettleExtMap, saOrderExt, cuMemberSettleExtList, bonusConfigDTO);
// 有碰次计算拓展奖
if (touchNum > 0) {
// 判断是否>3 是否需要启动4-N4-N的参数按照伞上各安置人结算国家进行获取
// 先计算前3碰
int startTouch = touchNum;
// 后面碰次
int endTouch = 0;
// 获取拓展配置一般情况拓展次数 = 3拓展比例 = 26%
BonusExpandDTO bdBonusExpand = bdBonusExpandMap.get(saOrderExt.getPkCountry());
int realExpandNumber = expandNumber > 0 ? expandNumber : bdBonusExpand.getExpandNumber();
if (touchNum > realExpandNumber) {
startTouch = realExpandNumber;
endTouch = touchNum - startTouch;
}
// 正常的拓展奖计算
// 计算拓展奖
for (int i = 1; i <= startTouch; i++) {
for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) {
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
if (targetMemberSettleExt == null
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
continue;
}
// 验证是否有当前奖金项
if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.EXPANSION_INCOME.getValue())) {
continue;
}
// 判断左右区是否有值找到有值的就是有碰次碰完左区或右区肯定有变为0的
if (ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance())) {
// 根据会员等级获取对应的配置
BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt);
BigDecimal countryExpandRatio = bdGrade.getExpandRatio();
// 计算量碰
calculateExpandBonusByAchieve(riskControlMap, period, weekMemberBonusMap, cuMemberBonusMap, bonusConfigDTO, systemConfigMap, cuMemberBonusExpandList,
saOrderExt, touchNum, i, sourceMemberSettleExt, targetMemberSettleExt, bdGrade, countryExpandRatio, BigDecimal.ZERO, cuMemberAssessMap);
break;
}
}
}
// 4-N计算
if (endTouch > 0) {
// 获得每一碰的比例, 找到剩下的碰次的国家
for (int i = 1; i <= endTouch; i++) {
for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) {
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
if (targetMemberSettleExt == null
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
continue;
}
// 验证是否有当前奖金项
if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.EXPANSION_INCOME.getValue())) {
continue;
}
// 判断左右区是否有值找到有值的就是有碰次碰完左区或右区肯定有变为0的
if (ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance())) {
// 根据会员等级获取对应的拓展配置
BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt);
// 获取实际拓展比例拓展配置计算出来的单个碰次 等级配置上限哪个小取哪个
BigDecimal countryExpandRatio = getCountryExpand(bonusConfigDTO, targetMemberSettleExt, endTouch, bdGrade, addTouch, expandRatio);
// 计算量碰
calculateExpandBonusByAchieve(riskControlMap, period, weekMemberBonusMap, cuMemberBonusMap, bonusConfigDTO, systemConfigMap, cuMemberBonusExpandList,
saOrderExt, touchNum, i + startTouch, sourceMemberSettleExt, targetMemberSettleExt, bdGrade, countryExpandRatio, addTouch, cuMemberAssessMap);
break;
}
}
}
// 将增加的碰次放入烧伤
if (ComputeUtil.compareValue(addTouch)) {
CuMemberSettleExt sourceMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(2L);
// 根据会员等级获取对应的拓展配置
BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt);
// 获取实际拓展比例拓展配置计算出来的单个碰次 等级配置上限哪个小取哪个
BigDecimal countryExpandRatio = getCountryExpand(bonusConfigDTO, targetMemberSettleExt, endTouch, bdGrade, addTouch, expandRatio);
countryExpandRatio = ComputeUtil.computeMultiply(countryExpandRatio, addTouch);
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
Integer pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.EXPANSION_INCOME.getValue());
CuMemberBonusExpand cuMemberBonusExpand = getCuMemberBonusExpand(saOrderExt, touchNum, touchNum, targetMemberSettleExt, countryExpandRatio, cuMemberBonus, saOrderExt.getOrderAchieve(), pkBonusItems, addTouch);
expandRemark(saOrderExt, cuMemberBonusExpand, sourceMemberSettleExt, targetMemberSettleExt);
cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
BigDecimal maxIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), bdGrade.getExpandRatio());
BigDecimal actualIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), countryExpandRatio);
packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), maxIncome, actualIncome);
setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
if (ComputeUtil.compareValue(addTouch)) {
cuMemberBonusExpand.setRemark(cuMemberBonusExpand.getRemark() + "增加碰次:" + addTouch + "");
}
cuMemberBonusExpandList.add(cuMemberBonusExpand);
}
}
}
return cuMemberBonusExpandList;
}
private int calculateTouchNum(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberAssess> cuMemberAssessMap, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap,
SaOrderExt saOrderExt, List<CuMemberSettleExt> cuMemberSettleExtList, BonusConfigDTO bonusConfigDTO) {
int touchNum = 0; int touchNum = 0;
for (CuMemberSettleExt cuMemberSettleExt : cuMemberSettleExtList) { for (CuMemberSettleExt cuMemberSettleExt : cuMemberSettleExtList) {
// 数据已经准备好了肯定有值map中是实际的值先计算新增然后根据新增结算计算碰次list是为了存储碰次的顺序 // 数据已经准备好了肯定有值map中是实际的值先计算新增然后根据新增结算计算碰次list是为了存储碰次的顺序
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkPlaceParent()); CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkPlaceParent());
if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || if (targetMemberSettleExt == null
EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() || || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) { || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|| EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) {
continue; continue;
} }
// 验证是否计算奖金 // 验证是否计算奖金
@ -532,94 +647,14 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
} }
// 判断左右区是否有值左右区有值有碰次 // 判断左右区是否有值左右区有值有碰次
if (ComputeUtil.compareValue(targetMemberSettleExt.getRABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRBBalance())) { if (ComputeUtil.compareValue(targetMemberSettleExt.getRABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRBBalance())) {
// 取左区右区最小的那个业绩
// 左右右区都减掉最小的业绩就是左区右区的结余
BigDecimal minAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getRABalance(), targetMemberSettleExt.getRBBalance()); BigDecimal minAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getRABalance(), targetMemberSettleExt.getRBBalance());
targetMemberSettleExt.setRABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRABalance(), minAchieve)); targetMemberSettleExt.setRABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRABalance(), minAchieve));
targetMemberSettleExt.setRBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRBBalance(), minAchieve)); targetMemberSettleExt.setRBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRBBalance(), minAchieve));
} }
} }
// 有碰次计算拓展奖 return touchNum;
if (touchNum > 0) {
// 判断是否>3 是否需要启动4-N4-N的参数按照伞上各安置人结算国家进行获取
// 先计算前3碰
int startTouch = touchNum;
// 后面碰次
int endTouch = 0;
BonusExpandDTO bdBonusExpand = bdBonusExpandMap.get(saOrderExt.getPkCountry());
int realExpandNumber = expandNumber > 0 ? expandNumber : bdBonusExpand.getExpandNumber();
if (touchNum > realExpandNumber) {
startTouch = realExpandNumber;
endTouch = touchNum - startTouch;
}
// 正常的拓展奖计算
// 计算拓展奖
for (int i = 1; i <= startTouch; i++) {
for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) {
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() ||
EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
continue;
}
if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.EXPANSION_INCOME.getValue())) {
continue;
}
// 判断左右区是否有值找到有值的就是有碰次碰完左区或右区肯定有变为0的
if (ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance())) {
// 根据会员等级获取对应的配置
BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt);
BigDecimal countryExpandRatio = bdGrade.getExpandRatio();
calculateExpandBonusByAchieve(riskControlMap, period, weekMemberBonusMap, cuMemberBonusMap, bonusConfigDTO, systemConfigMap, cuMemberBonusExpandList, saOrderExt, touchNum, i, sourceMemberSettleExt, targetMemberSettleExt, bdGrade, countryExpandRatio, BigDecimal.ZERO, cuMemberAssessMap);
break;
}
}
}
// 4-N计算
if (endTouch > 0) {
// 获得每一碰的比例, 找到剩下的碰次的国家
for (int i = 1; i <= endTouch; i++) {
for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) {
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() ||
EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
continue;
}
if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.EXPANSION_INCOME.getValue())) {
continue;
}
// 判断左右区是否有值找到有值的就是有碰次碰完左区或右区肯定有变为0的
if (ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance())) {
// 根据会员等级获取对应的配置
BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt);
// 获取国家4-n的配置
BigDecimal countryExpandRatio = getCountryExpand(bonusConfigDTO, targetMemberSettleExt, endTouch, bdGrade, addTouch, expandRatio);
calculateExpandBonusByAchieve(riskControlMap, period, weekMemberBonusMap, cuMemberBonusMap, bonusConfigDTO, systemConfigMap, cuMemberBonusExpandList, saOrderExt, touchNum, i + startTouch, sourceMemberSettleExt, targetMemberSettleExt, bdGrade, countryExpandRatio, addTouch, cuMemberAssessMap);
break;
}
}
}
// 将增加的碰次放入烧伤
if (ComputeUtil.compareValue(addTouch)) {
CuMemberSettleExt sourceMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(2L);
BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt);
BigDecimal countryExpandRatio = getCountryExpand(bonusConfigDTO, targetMemberSettleExt, endTouch, bdGrade, addTouch, expandRatio);
countryExpandRatio = ComputeUtil.computeMultiply(countryExpandRatio, addTouch);
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
Integer pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.EXPANSION_INCOME.getValue());
CuMemberBonusExpand cuMemberBonusExpand = getCuMemberBonusExpand(saOrderExt, touchNum, touchNum, targetMemberSettleExt, countryExpandRatio, cuMemberBonus, saOrderExt.getOrderAchieve(), pkBonusItems, addTouch);
expandRemark(saOrderExt, cuMemberBonusExpand, sourceMemberSettleExt, targetMemberSettleExt);
cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
BigDecimal maxIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), bdGrade.getExpandRatio());
BigDecimal actualIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), countryExpandRatio);
packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), maxIncome, actualIncome);
setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
if (ComputeUtil.compareValue(addTouch)) {
cuMemberBonusExpand.setRemark(cuMemberBonusExpand.getRemark() + "增加碰次:" + addTouch + "");
}
cuMemberBonusExpandList.add(cuMemberBonusExpand);
}
}
}
return cuMemberBonusExpandList;
} }
/** /**
@ -633,7 +668,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
List<CuMemberBonusCoach> cuMemberBonusCoachList = new ArrayList<>(); List<CuMemberBonusCoach> cuMemberBonusCoachList = new ArrayList<>();
if (cuMemberBonusExpandList.size() > 0) { if (cuMemberBonusExpandList.size() > 0) {
Set<Long> expandMemberSet = getMemberExpandBonus(cuMemberBonusMap, cuMemberBonusExpandList); Set<Long> expandMemberSet = getMemberExpandBonus(cuMemberBonusMap, cuMemberBonusExpandList);
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryCuMemberSettleParent(settleTableName, expandMemberSet); List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.batchQueryCuMemberSettleParent(settleTableName, expandMemberSet);
// 初始化父类网体的值 // 初始化父类网体的值
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
List<CuMemberSettleExt> queryMemberList = getQueryMemberSettleExtList(cuMemberSettleExtMap, cuMemberSettleExtList); List<CuMemberSettleExt> queryMemberList = getQueryMemberSettleExtList(cuMemberSettleExtMap, cuMemberSettleExtList);
@ -805,15 +840,13 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
} }
/** /**
* 计算报单服务费
*
* @param settleTableName 结算表 * @param settleTableName 结算表
* @param period 期间 * @param period 期间
* @param bonusConfigDTO 参数 * @param bonusConfigDTO 参数
* @param firPurchaseOrderList 订单列表 * @param firPurchaseOrderList 订单列表
* @param cuMemberBonusMap 所有计算出来的奖金汇总 * @param cuMemberBonusMap 所有计算出来的奖金汇总
* @Description: 计算报单服务费
* @return: List<CuMemberBonusCoach>
* @Author: sui q
* @Date: 2022/11/17 14:14
*/ */
List<CuMemberBonusDetail> calculateServiceBonus(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleDate, String settleTableName, BonusConfigDTO bonusConfigDTO, List<CuMemberBonusDetail> calculateServiceBonus(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleDate, String settleTableName, BonusConfigDTO bonusConfigDTO,
List<SaOrderExt> firPurchaseOrderList, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap) { List<SaOrderExt> firPurchaseOrderList, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap) {
@ -830,8 +863,8 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
// 计算报单服务费 // 计算报单服务费
for (SaOrderExt saOrderExt : firPurchaseOrderList) { for (SaOrderExt saOrderExt : firPurchaseOrderList) {
// 只有注册订单有报单服务费 // 只有注册订单有报单服务费
if (EOrderType.REGISTER_ORDER.getValue() == saOrderExt.getOrderType() || if (EOrderType.REGISTER_ORDER.getValue() == saOrderExt.getOrderType()
Objects.equals(EOrderType.SPECIAL_REGISTER_ORDER.getValue(), saOrderExt.getOrderType())) { || Objects.equals(EOrderType.SPECIAL_REGISTER_ORDER.getValue(), saOrderExt.getOrderType())) {
CuMemberBonusDetail cuMemberBonusDetail = calculateServiceBonusOne(settleDate, cuMemberAssessMap, cuMemberSettleExtMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt); CuMemberBonusDetail cuMemberBonusDetail = calculateServiceBonusOne(settleDate, cuMemberAssessMap, cuMemberSettleExtMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt);
if (cuMemberBonusDetail != null) { if (cuMemberBonusDetail != null) {
cuMemberBonusDetailList.add(cuMemberBonusDetail); cuMemberBonusDetailList.add(cuMemberBonusDetail);
@ -854,15 +887,18 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
return null; return null;
} }
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkCenterCode()); CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkCenterCode());
if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || if (targetMemberSettleExt == null
EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() || || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
ERegistrationAuthority.SERVICE.getValue() != targetMemberSettleExt.getRegisterAuthority()) { || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|| ERegistrationAuthority.SERVICE.getValue() != targetMemberSettleExt.getRegisterAuthority()) {
// 非正常会员停算收益不是服务中心都不进行处理
return null; return null;
} }
// 验证是否有奖金 // 验证是否有奖金
if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.SERVICE_SUBSIDIES.getValue())) { if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.SERVICE_SUBSIDIES.getValue())) {
return null; return null;
} }
// 获取会员奖金数据
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt); CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
BdBonusService bdBonusService = bonusConfigDTO.getBonusServiceMap().get(targetMemberSettleExt.getPkSettleCountry().toString() + EServiceType.SUBSIDY.getValue()); BdBonusService bdBonusService = bonusConfigDTO.getBonusServiceMap().get(targetMemberSettleExt.getPkSettleCountry().toString() + EServiceType.SUBSIDY.getValue());
// if (bdBonusService.getAssessmentType() != null && EAssessmentType.REPURCHASE_ASSESS.getValue() == bdBonusService.getAssessmentType()) { // if (bdBonusService.getAssessmentType() != null && EAssessmentType.REPURCHASE_ASSESS.getValue() == bdBonusService.getAssessmentType()) {
@ -914,20 +950,20 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
String currentFirstDate = DateUtils.currentMonthFirstDateStr(settleDate); String currentFirstDate = DateUtils.currentMonthFirstDateStr(settleDate);
String beforeMonthLastDate = DateUtils.beforeDateStr(1, ChronoUnit.DAYS, DateUtils.YYYY_MM_DD, currentFirstDate); String beforeMonthLastDate = DateUtils.beforeDateStr(1, ChronoUnit.DAYS, DateUtils.YYYY_MM_DD, currentFirstDate);
// 查询上月最后一天 // 查询上月最后一天
Integer beforeMonthLastPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeMonthLastDate).getPkId(); Integer beforeMonthLastPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeMonthLastDate).getPkId();
String settleTableName = TableNameConstants.CU_MEMBER_SETTLE + beforeMonthLastPeriod; String settleTableName = TableNameConstants.CU_MEMBER_SETTLE + beforeMonthLastPeriod;
String rangeTableName = TableNameConstants.CU_MEMBER_RANGE + beforeMonthLastPeriod; String rangeTableName = TableNameConstants.CU_MEMBER_RANGE + beforeMonthLastPeriod;
// 查询上月第一天 // 查询上月第一天
String beforeMonthFirstDate = DateUtils.beforeMonthFirstDateStr(settleDate); String beforeMonthFirstDate = DateUtils.beforeMonthFirstDateStr(settleDate);
Integer beforeMonthFirstPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeMonthFirstDate).getPkId(); Integer beforeMonthFirstPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeMonthFirstDate).getPkId();
// 查询上月最后一天会员等级达到奖衔的会员 // 查询上月最后一天会员等级达到奖衔的会员
Integer assessPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentFirstDate).getPkId(); Integer assessPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentFirstDate).getPkId();
String assessTableName = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.getYear(settleDateStr); String assessTableName = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.getYear(settleDateStr);
// 获取结算日期的第一天的日期 // 获取结算日期的第一天的日期
// 查询复购考核结果 // 查询复购考核结果
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.queryMemberSettleByAwards(settleTableName, rangeTableName, beforeMonthFirstPeriod, beforeMonthLastPeriod); List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.queryMemberSettleByAwards(settleTableName, rangeTableName, beforeMonthFirstPeriod, beforeMonthLastPeriod);
if (CollectionUtil.isNotEmpty(cuMemberSettleExtList)) { if (CollectionUtil.isNotEmpty(cuMemberSettleExtList)) {
Map<Long, CuMemberAssess> cuMemberAssessMap = cuMemberAssessService.queryCuMemberAssessByMember(assessTableName, assessPeriod, EAssessmentType.REPURCHASE_ASSESS.getValue(), cuMemberSettleExtList); Map<Long, CuMemberAssess> cuMemberAssessMap = iCuMemberAssessService.queryCuMemberAssessByMember(assessTableName, assessPeriod, EAssessmentType.REPURCHASE_ASSESS.getValue(), cuMemberSettleExtList);
for (CuMemberSettleExt targetMemberSettleExt : cuMemberSettleExtList) { for (CuMemberSettleExt targetMemberSettleExt : cuMemberSettleExtList) {
SaOrder saOrder = SaOrder.builder().pkId(0L).orderAchieve(BigDecimal.ZERO).build(); SaOrder saOrder = SaOrder.builder().pkId(0L).orderAchieve(BigDecimal.ZERO).build();
saOrder.setPkCountry(targetMemberSettleExt.getPkSettleCountry()); saOrder.setPkCountry(targetMemberSettleExt.getPkSettleCountry());
@ -971,7 +1007,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
repurchaseOrderList.forEach(saOrderExt -> expandMemberSet.add(saOrderExt.getPkMember())); repurchaseOrderList.forEach(saOrderExt -> expandMemberSet.add(saOrderExt.getPkMember()));
mallOrderList.forEach(saOrderExt -> expandMemberSet.add(saOrderExt.getPkMember())); mallOrderList.forEach(saOrderExt -> expandMemberSet.add(saOrderExt.getPkMember()));
if (expandMemberSet.size() > 0) { if (expandMemberSet.size() > 0) {
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryCuMemberSettleParent(settleTableName, expandMemberSet); List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.batchQueryCuMemberSettleParent(settleTableName, expandMemberSet);
// 初始化父类网体的值 // 初始化父类网体的值
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
for (SaOrderExt saOrderExt : firPurchaseOrderList) { for (SaOrderExt saOrderExt : firPurchaseOrderList) {
@ -1018,6 +1054,8 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
} }
/** /**
* 计算首购量碰
*
* @param period 期间 * @param period 期间
* @param cuMemberBonusMap 奖金汇总 * @param cuMemberBonusMap 奖金汇总
* @param cuMemberBonusExpandList 拓展奖奖金明细 * @param cuMemberBonusExpandList 拓展奖奖金明细
@ -1028,15 +1066,14 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
* @param targetMemberSettleExt 获得奖金的人 * @param targetMemberSettleExt 获得奖金的人
* @param bdGrade 等级对应的参数 * @param bdGrade 等级对应的参数
* @param countryExpandRatio 4-n时计算国家对应的参数 * @param countryExpandRatio 4-n时计算国家对应的参数
* @Description: 计算量碰
* @return: void
* @Author: sui q
* @Date: 2022/11/16 15:51
*/ */
private void calculateExpandBonusByAchieve(Map<Long, CuMemberRiskControl> riskControlMap, Integer period, Map<Long, CuMemberBonus> weekMemberBonusMap, Map<Long, CuMemberBonus> cuMemberBonusMap, private void calculateExpandBonusByAchieve(Map<Long, CuMemberRiskControl> riskControlMap, Integer period, Map<Long, CuMemberBonus> weekMemberBonusMap, Map<Long, CuMemberBonus> cuMemberBonusMap,
BonusConfigDTO bonusConfigDTO, Map<String, String> systemConfigMap, List<CuMemberBonusExpand> cuMemberBonusExpandList, SaOrderExt saOrderExt, int touchNum, int i, BonusConfigDTO bonusConfigDTO, Map<String, String> systemConfigMap, List<CuMemberBonusExpand> cuMemberBonusExpandList,
CuMemberSettleExt sourceMemberSettleExt, CuMemberSettleExt targetMemberSettleExt, BdGrade bdGrade, BigDecimal countryExpandRatio, BigDecimal addTouch, Map<Long, CuMemberAssess> cuMemberAssessMap) { SaOrderExt saOrderExt, int touchNum, int i, CuMemberSettleExt sourceMemberSettleExt, CuMemberSettleExt targetMemberSettleExt,
BdGrade bdGrade, BigDecimal countryExpandRatio, BigDecimal addTouch, Map<Long, CuMemberAssess> cuMemberAssessMap) {
// 获取拓展收益奖项ID
Integer pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.EXPANSION_INCOME.getValue()); Integer pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.EXPANSION_INCOME.getValue());
// 验证封顶方式 1= 2=若是周的话需要获取 周奖金 // 验证封顶方式 1= 2=若是周的话需要获取 周奖金
// BigDecimal weekExpandIncome = BigDecimal.ZERO; // BigDecimal weekExpandIncome = BigDecimal.ZERO;
// if (systemConfigMap.containsKey(targetMemberSettleExt.getPkSettleCountry().toString() + ESystemConfig.EXPAND_CAP_METHOD.getKey())) { // if (systemConfigMap.containsKey(targetMemberSettleExt.getPkSettleCountry().toString() + ESystemConfig.EXPAND_CAP_METHOD.getKey())) {
@ -1046,29 +1083,38 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
// weekExpandIncome = weekMemberBonusMap.get(targetMemberSettleExt.getPkMember()).getExpandIncome(); // weekExpandIncome = weekMemberBonusMap.get(targetMemberSettleExt.getPkMember()).getExpandIncome();
// } // }
// } // }
// 等级对应拓展比例
BigDecimal gradeExpandRatio = bdGrade.getExpandRatio(); BigDecimal gradeExpandRatio = bdGrade.getExpandRatio();
// 验证受益人等级
CuMember cuMember = cuMemberService.getMember(targetMemberSettleExt.getMemberCode()); // TODO new 中国会员指定日期之前计算比例
if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY) && // // 验证受益人等级
cuMember != null && DateUtils.compareDate(DateUtils.parseStringToDate("2024-09-11"), cuMember.getPayTime()) > 0) { // CuMember cuMember = cuMemberService.getMember(targetMemberSettleExt.getMemberCode());
if (targetMemberSettleExt.getGradeValue() == EGrade.VIP.getValue()) { // if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)
if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(11)) && (i <= 3 || touchNum <= 10)) { // && cuMember != null
countryExpandRatio = BigDecimal.valueOf(13); // && DateUtils.compareDate(DateUtils.parseStringToDate("2024-09-11"), cuMember.getPayTime()) > 0) {
} // if (targetMemberSettleExt.getGradeValue() == EGrade.VIP.getValue()) {
} else if (targetMemberSettleExt.getGradeValue() == EGrade.MAKER.getValue()) { // if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(11)) && (i <= 3 || touchNum <= 10)) {
if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(10)) && (i <= 3 || touchNum <= 10)) { // countryExpandRatio = BigDecimal.valueOf(13);
countryExpandRatio = BigDecimal.valueOf(11); // }
} // } else if (targetMemberSettleExt.getGradeValue() == EGrade.MAKER.getValue()) {
} // if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(10)) && (i <= 3 || touchNum <= 10)) {
} // countryExpandRatio = BigDecimal.valueOf(11);
// }
// }
// }
// 获取等级封顶值 // 获取等级封顶值
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt); CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
// 左右区获取最小的
BigDecimal calAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getABalance(), targetMemberSettleExt.getBBalance()); BigDecimal calAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getABalance(), targetMemberSettleExt.getBBalance());
CuMemberBonusExpand cuMemberBonusExpand = getCuMemberBonusExpand(saOrderExt, touchNum, i, targetMemberSettleExt, countryExpandRatio, cuMemberBonus, calAchieve, pkBonusItems, addTouch); CuMemberBonusExpand cuMemberBonusExpand = getCuMemberBonusExpand(saOrderExt, touchNum, i, targetMemberSettleExt, countryExpandRatio, cuMemberBonus, calAchieve, pkBonusItems, addTouch);
// 扣减ab区结余 // 扣减ab区结余
targetMemberSettleExt.setABalance(ComputeUtil.computeSubtract(targetMemberSettleExt.getABalance(), calAchieve)); targetMemberSettleExt.setABalance(ComputeUtil.computeSubtract(targetMemberSettleExt.getABalance(), calAchieve));
targetMemberSettleExt.setBBalance(ComputeUtil.computeSubtract(targetMemberSettleExt.getBBalance(), calAchieve)); targetMemberSettleExt.setBBalance(ComputeUtil.computeSubtract(targetMemberSettleExt.getBBalance(), calAchieve));
// 计算收益 先计算出会员最大的收益
// 计算收益 先计算出会员最大的收益按等级拓展比例进行计算出最大值
BigDecimal maxIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), gradeExpandRatio); BigDecimal maxIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), gradeExpandRatio);
BigDecimal actualIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), countryExpandRatio); BigDecimal actualIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), countryExpandRatio);
// K值设置 // K值设置
@ -1076,13 +1122,17 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
actualIncome = ComputeUtil.computeBonusMultiply(actualIncome, riskControlMap.get(cuMemberBonus.getPkMember()).getExpandRatio()); actualIncome = ComputeUtil.computeBonusMultiply(actualIncome, riskControlMap.get(cuMemberBonus.getPkMember()).getExpandRatio());
cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.RISK_CONTROL.getValue()); cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.RISK_CONTROL.getValue());
} }
// 获取等级对应的封顶值
// 获取等级对应的封顶值因为先计算复购再计算首购封顶需要把复购拓展也加上
BigDecimal expandIncome = ComputeUtil.computeAdd(ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), actualIncome), cuMemberBonus.getRepurExpandIncome()); BigDecimal expandIncome = ComputeUtil.computeAdd(ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), actualIncome), cuMemberBonus.getRepurExpandIncome());
// 判断收益 是否超过封顶值超过的话变为封顶值 // 判断收益 是否超过封顶值超过的话变为封顶值
// 判断是否烧伤判断原奖金是否>=封顶值,奖金到了就是烧伤 // 判断是否烧伤判断原奖金是否>=封顶值,奖金到了就是烧伤
// 验证会员状态 封停状态跟冻结都正常计算奖金封停的账号发放的时候奖金发放为0冻结的账号正常发放不能登录 // 验证会员状态 封停状态跟冻结都正常计算奖金封停的账号发放的时候奖金发放为0冻结的账号正常发放不能登录
packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), maxIncome, actualIncome); packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), maxIncome, actualIncome);
if (ComputeUtil.compareValue(ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome()), bdGrade.getExpandCapping())) { if (ComputeUtil.compareValue(ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome()), bdGrade.getExpandCapping())) {
// 拓展收益 累加 复购收益 >= 封顶值
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()) { if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()) {
cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
} }
@ -1092,11 +1142,18 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
// 存在一半烧伤一半正常的值拆2条 // 存在一半烧伤一半正常的值拆2条
// 拓展明细表 进行修改 // 拓展明细表 进行修改
packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), realIncome, realIncome); packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), realIncome, realIncome);
CuMemberBonusExpand fireCuMemberBonusExpand = BeanUtil.copyProperties(cuMemberBonusExpand, CuMemberBonusExpand.class); CuMemberBonusExpand fireCuMemberBonusExpand = BeanUtil.copyProperties(cuMemberBonusExpand, CuMemberBonusExpand.class);
BigDecimal fireIncome = ComputeUtil.computeSubtract(maxIncome, realIncome); BigDecimal fireIncome = ComputeUtil.computeSubtract(maxIncome, realIncome);
if (EBonusIncomeStatus.NORMAL.getValue() == fireCuMemberBonusExpand.getIncomeStatus()) { if (EBonusIncomeStatus.NORMAL.getValue() == fireCuMemberBonusExpand.getIncomeStatus()) {
// TODO new V3 V4 没有烧伤改为延缓发放
if (EGrade.VIP.getValue() == bdGrade.getGradeValue()
|| EGrade.S_VIP.getValue() == bdGrade.getGradeValue()) {
fireCuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.DELAY_GRANT.getValue());
} else {
fireCuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); fireCuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
} }
}
packageCuMemberBonusExpand(fireCuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), fireIncome, fireIncome); packageCuMemberBonusExpand(fireCuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), fireIncome, fireIncome);
// 收益占比 // 收益占比
setBonusDetailDeduct(bonusConfigDTO, fireCuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate()); setBonusDetailDeduct(bonusConfigDTO, fireCuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
@ -1105,15 +1162,19 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
// 拓展收益取封顶最大值 // 拓展收益取封顶最大值
expandIncome = bdGrade.getExpandCapping(); expandIncome = bdGrade.getExpandCapping();
} }
// 收益占比 // 收益占比
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate()); BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
expandRemark(saOrderExt, cuMemberBonusExpand, sourceMemberSettleExt, targetMemberSettleExt); expandRemark(saOrderExt, cuMemberBonusExpand, sourceMemberSettleExt, targetMemberSettleExt);
if (riskControlMap.containsKey(cuMemberBonus.getPkMember())) { if (riskControlMap.containsKey(cuMemberBonus.getPkMember())) {
cuMemberBonusExpand.setRemark(cuMemberBonusExpand.getRemark() + "K值比例:" + riskControlMap.get(cuMemberBonus.getPkMember()).getExpandRatio() + ""); cuMemberBonusExpand.setRemark(cuMemberBonusExpand.getRemark() + "K值比例:" + riskControlMap.get(cuMemberBonus.getPkMember()).getExpandRatio() + "");
} }
if (ComputeUtil.compareValue(addTouch)) { if (ComputeUtil.compareValue(addTouch)) {
cuMemberBonusExpand.setRemark(cuMemberBonusExpand.getRemark() + "增加碰次:" + addTouch + ""); cuMemberBonusExpand.setRemark(cuMemberBonusExpand.getRemark() + "增加碰次:" + addTouch + "");
} }
// 正常状态的辅导奖需要判断复购考核复购考核不通过的状态变为烧伤
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus() if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()
&& EYesNo.NO.getIntValue() == targetMemberSettleExt.getPurchaseStatus()) { && EYesNo.NO.getIntValue() == targetMemberSettleExt.getPurchaseStatus()) {
// 需要复购考核的 // 需要复购考核的
@ -1122,6 +1183,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
} }
} }
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus() || if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus() ||
EBonusIncomeStatus.RISK_CONTROL.getValue() == cuMemberBonusExpand.getIncomeStatus()) { EBonusIncomeStatus.RISK_CONTROL.getValue() == cuMemberBonusExpand.getIncomeStatus()) {
// 判断会员状态会员状态为封停的话状态修改为停收 // 判断会员状态会员状态为封停的话状态修改为停收

View File

@ -52,24 +52,22 @@ import java.util.*;
public abstract class BonusSettleHandle { public abstract class BonusSettleHandle {
@Autowired @Autowired
protected ICuMemberTreeService cuMemberTreeService; protected ICuMemberTreeService iCuMemberTreeService;
@Autowired @Autowired
protected ICuMemberSettlePeriodService cuMemberSettlePeriodService; protected ICuMemberSettlePeriodService iCuMemberSettlePeriodService;
@Autowired @Autowired
protected ICuMemberAssessService cuMemberAssessService; protected ICuMemberAssessService iCuMemberAssessService;
@DubboReference @DubboReference
ISaOrderServiceApi saOrderServiceApi; ISaOrderServiceApi iSaOrderServiceApi;
@DubboReference @DubboReference
ICurrencyServiceApi currencyServiceApi; ICurrencyServiceApi iCurrencyServiceApi;
/** /**
* 获取等级对应的拓展奖配置
*
* @param bonusConfigDTO 奖金参数汇总 * @param bonusConfigDTO 奖金参数汇总
* @param memberSettleExt 会员 * @param memberSettleExt 会员
* @Description: 获取等级对应的拓展奖配置
* @return: BdGrade
* @Author: sui q
* @Date: 2022/11/16 11:24
*/ */
protected BdGrade getGradeExpand(BonusConfigDTO bonusConfigDTO, CuMemberSettleExt memberSettleExt) { protected BdGrade getGradeExpand(BonusConfigDTO bonusConfigDTO, CuMemberSettleExt memberSettleExt) {
return bonusConfigDTO.getGradeMap().get(memberSettleExt.getPkSettleCountry().toString() + "_" + memberSettleExt.getPkGrade()); return bonusConfigDTO.getGradeMap().get(memberSettleExt.getPkSettleCountry().toString() + "_" + memberSettleExt.getPkGrade());
@ -98,27 +96,29 @@ public abstract class BonusSettleHandle {
} }
/** /**
* 获取扩展比例拓展配置比例 >= 等级拓展比例取等级拓展比例
* -- 获得国家对应的4-n参数比例
*
* @param bonusConfigDTO 奖金配置汇总 * @param bonusConfigDTO 奖金配置汇总
* @param memberSettleExt 会员 * @param memberSettleExt 会员
* @param endTouch 4-n的次数 * @param endTouch 4-n的次数
* @param bdGrade 等级 * @param bdGrade 等级
* @Description: 获得国家对应的4-n参数比例 * @param addTouch 配置追加的碰次
* @return: BigDecimal
* @Author: sui q
* @Date: 2022/11/16 11:27
*/ */
protected BigDecimal getCountryExpand(BonusConfigDTO bonusConfigDTO, CuMemberSettleExt memberSettleExt, Integer endTouch, BdGrade bdGrade, protected BigDecimal getCountryExpand(BonusConfigDTO bonusConfigDTO, CuMemberSettleExt memberSettleExt, Integer endTouch, BdGrade bdGrade,
BigDecimal addTouch, BigDecimal editExpandRatio) { BigDecimal addTouch, BigDecimal editExpandRatio) {
BonusExpandDTO bonusExpand = bonusConfigDTO.getBonusExpandMap().get(memberSettleExt.getPkSettleCountry()); BonusExpandDTO bonusExpand = bonusConfigDTO.getBonusExpandMap().get(memberSettleExt.getPkSettleCountry());
// 总碰次 = 实际计算出来的碰次 + 配置追加的碰次
BigDecimal totalTouch = ComputeUtil.computeAdd(BigDecimal.valueOf(endTouch), addTouch); BigDecimal totalTouch = ComputeUtil.computeAdd(BigDecimal.valueOf(endTouch), addTouch);
// 配置的4-N总比例一般26%
BigDecimal expandRatio = bonusExpand.getExpandRatio(); BigDecimal expandRatio = bonusExpand.getExpandRatio();
if (memberSettleExt.getPkVertex() != null && memberSettleExt.getPkVertex().equals(377L)) { if (ComputeUtil.compareValue(editExpandRatio)) {
expandRatio = BigDecimal.valueOf(13);
} else if (ComputeUtil.compareValue(editExpandRatio)) {
expandRatio = editExpandRatio; expandRatio = editExpandRatio;
} }
// 4-N拓展比例 % 总碰次得出一碰的比例
BigDecimal countryExpandRatio = ComputeUtil.computeDivide(expandRatio, totalTouch); BigDecimal countryExpandRatio = ComputeUtil.computeDivide(expandRatio, totalTouch);
if (ComputeUtil.compareValue(countryExpandRatio, bdGrade.getExpandRatio())) { if (ComputeUtil.compareValue(countryExpandRatio, bdGrade.getExpandRatio())) {
// 一碰的比例大于等级的拓展比例使用等于的拓展比例
return bdGrade.getExpandRatio(); return bdGrade.getExpandRatio();
} }
return countryExpandRatio; return countryExpandRatio;
@ -137,12 +137,9 @@ public abstract class BonusSettleHandle {
protected BigDecimal getCountryRepurchaseExpand(BonusConfigDTO bonusConfigDTO, CuMemberSettleExt memberSettleExt, Integer endTouch, BdGrade bdGrade, BigDecimal addTouch, BigDecimal editExpandRatio) { protected BigDecimal getCountryRepurchaseExpand(BonusConfigDTO bonusConfigDTO, CuMemberSettleExt memberSettleExt, Integer endTouch, BdGrade bdGrade, BigDecimal addTouch, BigDecimal editExpandRatio) {
BonusExpandDTO bonusExpand = bonusConfigDTO.getBonusExpandMap().get(memberSettleExt.getPkSettleCountry()); BonusExpandDTO bonusExpand = bonusConfigDTO.getBonusExpandMap().get(memberSettleExt.getPkSettleCountry());
BigDecimal expandRatio = bonusExpand.getExpandRatio(); BigDecimal expandRatio = bonusExpand.getExpandRatio();
if (memberSettleExt.getPkVertex() != null && memberSettleExt.getPkVertex().equals(377L)) { if (ComputeUtil.compareValue(editExpandRatio)) {
expandRatio = BigDecimal.valueOf(13);
} else if (ComputeUtil.compareValue(editExpandRatio)) {
expandRatio = editExpandRatio; expandRatio = editExpandRatio;
} }
// 验证是否是爱美视团队
BigDecimal countryExpandRatio = ComputeUtil.computeDivide(expandRatio, BigDecimal.valueOf(endTouch)); BigDecimal countryExpandRatio = ComputeUtil.computeDivide(expandRatio, BigDecimal.valueOf(endTouch));
if (ComputeUtil.compareValue(countryExpandRatio, bdGrade.getRepurchaseRatio())) { if (ComputeUtil.compareValue(countryExpandRatio, bdGrade.getRepurchaseRatio())) {
return bdGrade.getRepurchaseRatio(); return bdGrade.getRepurchaseRatio();
@ -720,9 +717,9 @@ public abstract class BonusSettleHandle {
} }
Date settleDate = DateUtils.parseStringToDate(settleDateStr); Date settleDate = DateUtils.parseStringToDate(settleDateStr);
// 获取结算日期的第一天的日期 // 获取结算日期的第一天的日期
Integer assessPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.currentMonthFirstDateStr(settleDate)).getPkId(); Integer assessPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.currentMonthFirstDateStr(settleDate)).getPkId();
String assessTableName = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.getYear(settleDateStr); String assessTableName = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.getYear(settleDateStr);
return cuMemberAssessService.queryCuMemberAssessByMember(assessTableName, assessPeriod, EAssessmentType.REPURCHASE_ASSESS.getValue(), cuMemberSettleExtList); return iCuMemberAssessService.queryCuMemberAssessByMember(assessTableName, assessPeriod, EAssessmentType.REPURCHASE_ASSESS.getValue(), cuMemberSettleExtList);
} }
/** /**
@ -738,7 +735,7 @@ public abstract class BonusSettleHandle {
CuMemberSettleExt cuMemberSettleExt) { CuMemberSettleExt cuMemberSettleExt) {
Integer pkRate = saOrder.getPkRate(); Integer pkRate = saOrder.getPkRate();
if (pkRate == null || !Objects.equals(cuMemberSettleExt.getPkSettleCountry(), saOrder.getPkCountry())) { if (pkRate == null || !Objects.equals(cuMemberSettleExt.getPkSettleCountry(), saOrder.getPkCountry())) {
CurrencyDTO currencyDTO = currencyServiceApi.getCurrency(cuMemberSettleExt.getPkSettleCountry()).getData(); CurrencyDTO currencyDTO = iCurrencyServiceApi.getCurrency(cuMemberSettleExt.getPkSettleCountry()).getData();
pkRate = currencyDTO.getPkId(); pkRate = currencyDTO.getPkId();
} }
return getCuMemberBonus(period, cuMemberBonusMap, cuMemberSettleExt.getPkMember(), cuMemberSettleExt.getIncomeStatus(), return getCuMemberBonus(period, cuMemberBonusMap, cuMemberSettleExt.getPkMember(), cuMemberSettleExt.getIncomeStatus(),
@ -866,7 +863,7 @@ public abstract class BonusSettleHandle {
protected List<CuMemberSettleExt> getMemberParentBySaOrder(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, List<SaOrderExt> saOrderList) { protected List<CuMemberSettleExt> getMemberParentBySaOrder(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, List<SaOrderExt> saOrderList) {
Set<Long> memberSet = new HashSet<>(); Set<Long> memberSet = new HashSet<>();
saOrderList.forEach(saOrderExt -> memberSet.add(saOrderExt.getPkMember())); saOrderList.forEach(saOrderExt -> memberSet.add(saOrderExt.getPkMember()));
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryCuMemberSettleParent(settleTableName, memberSet); List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.batchQueryCuMemberSettleParent(settleTableName, memberSet);
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
return cuMemberSettleExtList; return cuMemberSettleExtList;
} }
@ -1156,15 +1153,18 @@ public abstract class BonusSettleHandle {
return Boolean.TRUE; return Boolean.TRUE;
} }
/* /**
* @description: 根据会员主键列表获得会员只 * 根据会员主键列表获得会员
* @author: sui q *
* @date: 17:29 * @param cuMemberSettleExtMap
* @param: null null * @param settleDate
**/ * @param settleTableName
* @param memberSet
* @return
*/
protected Map<Long, CuMemberAssess> packageMemberSettleByPkMemberSet(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleDate, String settleTableName, Set<Long> memberSet) { protected Map<Long, CuMemberAssess> packageMemberSettleByPkMemberSet(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleDate, String settleTableName, Set<Long> memberSet) {
if (memberSet.size() > 0) { if (memberSet.size() > 0) {
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleByMemberPk(settleTableName, memberSet); List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleByMemberPk(settleTableName, memberSet);
// 初始化父类网体的值 // 初始化父类网体的值
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
return getLongCuMemberAssessMap(settleDate, cuMemberSettleExtList); return getLongCuMemberAssessMap(settleDate, cuMemberSettleExtList);

View File

@ -120,7 +120,7 @@ public class BonusSettleHiFunHandle extends BonusSettleHandle {
} }
}); });
if (haiFunMemberSet.size() > 0) { if (haiFunMemberSet.size() > 0) {
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleParentByMemberPk(settleTableName, haiFunMemberSet); List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleParentByMemberPk(settleTableName, haiFunMemberSet);
// 初始化父类网体的值 // 初始化父类网体的值
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
} }

View File

@ -32,7 +32,7 @@ public class BonusSettleMallHandle extends BonusSettleHandle {
} }
}); });
if (queryMallSaOrderList.size() > 0) { if (queryMallSaOrderList.size() > 0) {
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleBySaOrder(settleTableName, queryMallSaOrderList); List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleBySaOrder(settleTableName, queryMallSaOrderList);
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
} }
mallSaOrderList.forEach(saOrderExt -> { mallSaOrderList.forEach(saOrderExt -> {

View File

@ -134,22 +134,22 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
} }
/** /**
* 计算复购拓展收益
*
* @param settleTableName 结算表 * @param settleTableName 结算表
* @param period 期间 * @param period 期间
* @param bonusConfigDTO 参数 * @param bonusConfigDTO 参数
* @param purchaseOrderList 首单 * @param purchaseOrderList 首单
* @param cuMemberBonusMap 所有计算出来的奖金汇总 * @param cuMemberBonusMap 所有计算出来的奖金汇总
* @Description: 计算复购拓展收益
* @return: void
* @Author: sui q
* @Date: 2022/11/10 14:17
*/ */
List<CuMemberBonusExpand> calculateRepurchaseExpandBonus(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, String settleDateStr, BonusConfigDTO bonusConfigDTO, Map<String, String> systemConfigMap, List<CuMemberBonusExpand> calculateRepurchaseExpandBonus(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, String settleDateStr,
BonusConfigDTO bonusConfigDTO, Map<String, String> systemConfigMap,
List<SaOrderExt> purchaseOrderList, Integer period, Map<Long, CuMemberBonus> weekMemberBonusMap, Map<Long, CuMemberBonus> cuMemberBonusMap, Map<Long, CuBonusExpandExt> cuBonusExpandExtMap) { List<SaOrderExt> purchaseOrderList, Integer period, Map<Long, CuMemberBonus> weekMemberBonusMap, Map<Long, CuMemberBonus> cuMemberBonusMap, Map<Long, CuBonusExpandExt> cuBonusExpandExtMap) {
List<CuMemberBonusExpand> cuMemberBonusExpandList = new ArrayList<>(); List<CuMemberBonusExpand> cuMemberBonusExpandList = new ArrayList<>();
// 获取所有订单的上级根据订单往上一步步计算 // 获取所有订单的上级根据订单往上一步步计算
// key订单IDvalue订单向上找安置人列表 // key订单IDvalue订单向上找安置人列表
Map<Long, List<CuMemberSettleExt>> memberSettleMap = cuMemberTreeService.batchQueryCuMemberSettlePlaceParent(settleTableName, purchaseOrderList); Map<Long, List<CuMemberSettleExt>> memberSettleMap = iCuMemberTreeService.batchQueryCuMemberSettlePlaceParent(settleTableName, purchaseOrderList);
List<CuMemberSettleExt> memberSettleExtList = new ArrayList<>(); List<CuMemberSettleExt> memberSettleExtList = new ArrayList<>();
for (List<CuMemberSettleExt> cuMemberSettleExt : memberSettleMap.values()) { for (List<CuMemberSettleExt> cuMemberSettleExt : memberSettleMap.values()) {
memberSettleExtList.addAll(cuMemberSettleExt); memberSettleExtList.addAll(cuMemberSettleExt);
@ -157,8 +157,10 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
getMemberSettle(cuMemberSettleExtMap, memberSettleExtList); getMemberSettle(cuMemberSettleExtMap, memberSettleExtList);
// key会员IDvalue会员考核信息 // key会员IDvalue会员考核信息
Map<Long, CuMemberAssess> cuMemberAssessMap = getCuMemberAssessMap(cuMemberSettleExtMap, settleDateStr, memberSettleExtList); Map<Long, CuMemberAssess> cuMemberAssessMap = getCuMemberAssessMap(cuMemberSettleExtMap, settleDateStr, memberSettleExtList);
for (SaOrderExt saOrderExt : purchaseOrderList) { for (SaOrderExt saOrderExt : purchaseOrderList) {
if (!validateSecondOrderExistBonus(saOrderExt, EBonusItems.CONSUMPTION_EXPANSION_INCOME.getValue())) { if (!validateSecondOrderExistBonus(saOrderExt, EBonusItems.CONSUMPTION_EXPANSION_INCOME.getValue())) {
// 校验二次发货需不需要计算量碰
continue; continue;
} }
// 所有需要计算的父节点只计算新增 // 所有需要计算的父节点只计算新增
@ -175,10 +177,11 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
break; break;
} }
} }
List<CuMemberBonusExpand> newMemberBonusExpandList = calculateRepurchaseExpandBonusOne(riskControlMap, settleTableName, cuMemberSettleExtMap, bonusConfigDTO, systemConfigMap, period, // 计算量奖拓展收益
List<CuMemberBonusExpand> expandList = calculateRepurchaseExpandBonusOne(riskControlMap, settleTableName, cuMemberSettleExtMap, bonusConfigDTO, systemConfigMap, period,
weekMemberBonusMap, cuMemberBonusMap, cuMemberAssessMap, saOrderExt, cuMemberSettleExtList, addTouch, expandRatio, expandNumber); weekMemberBonusMap, cuMemberBonusMap, cuMemberAssessMap, saOrderExt, cuMemberSettleExtList, addTouch, expandRatio, expandNumber);
if (newMemberBonusExpandList.size() > 0) { if (expandList.size() > 0) {
cuMemberBonusExpandList.addAll(newMemberBonusExpandList); cuMemberBonusExpandList.addAll(expandList);
} }
} }
// 根据订单往上穿业绩只计算新增 // 根据订单往上穿业绩只计算新增
@ -216,12 +219,18 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
return calculateRepurchasePushBonusOne(cuMemberSettleExtMap, bonusConfigDTO, cuMemberAssessMap, period, cuMemberBonusMap, saOrderExt); return calculateRepurchasePushBonusOne(cuMemberSettleExtMap, bonusConfigDTO, cuMemberAssessMap, period, cuMemberBonusMap, saOrderExt);
} }
/**
private List<CuMemberBonusExpand> calculateRepurchaseExpandBonusOne(Map<Long, CuMemberRiskControl> riskControlMap, String settleName, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO, Map<String, String> systemConfigMap, Integer period, * 计算复购量奖拓展收益
Map<Long, CuMemberBonus> weekMemberBonusMap, Map<Long, CuMemberBonus> cuMemberBonusMap, Map<Long, CuMemberAssess> cuMemberAssessMap, *
SaOrderExt saOrderExt, List<CuMemberSettleExt> cuMemberSettleExtList, BigDecimal addTouch, BigDecimal expandRatio, Integer expandNumber) { * @return
Map<Integer, BonusExpandDTO> bdBonusExpandMap = bonusConfigDTO.getBonusExpandMap(); */
private List<CuMemberBonusExpand> calculateRepurchaseExpandBonusOne(Map<Long, CuMemberRiskControl> riskControlMap, String settleName, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO,
Map<String, String> systemConfigMap, Integer period, Map<Long, CuMemberBonus> weekMemberBonusMap, Map<Long, CuMemberBonus> cuMemberBonusMap,
Map<Long, CuMemberAssess> cuMemberAssessMap, SaOrderExt saOrderExt, List<CuMemberSettleExt> cuMemberSettleExtList,
BigDecimal addTouch, BigDecimal expandRatio, Integer expandNumber) {
List<CuMemberBonusExpand> cuMemberBonusExpandList = new ArrayList<>(); List<CuMemberBonusExpand> cuMemberBonusExpandList = new ArrayList<>();
Map<Integer, BonusExpandDTO> bdBonusExpandMap = bonusConfigDTO.getBonusExpandMap();
CuMemberSettleExt settleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember()); CuMemberSettleExt settleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
if (settleExt == null) { if (settleExt == null) {
return cuMemberBonusExpandList; return cuMemberBonusExpandList;
@ -233,8 +242,10 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
// 先计算新增根据新增计算碰次 // 先计算新增根据新增计算碰次
// 先进行初始化所有的安置人存储需要修改的值,cuMemberSettleExtMap最终修改的 // 先进行初始化所有的安置人存储需要修改的值,cuMemberSettleExtMap最终修改的
// getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); // getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
// 先准备值准备好值后开始计算计算碰次 // 先准备值准备好值后开始计算计算碰次
int touchNum = calculateTouchNum(riskControlMap, settleName, cuMemberAssessMap, cuMemberSettleExtMap, saOrderExt, cuMemberSettleExtList, bonusConfigDTO); int touchNum = calculateTouchNum(riskControlMap, cuMemberAssessMap, cuMemberSettleExtMap, saOrderExt, cuMemberSettleExtList, bonusConfigDTO);
// 有碰次计算拓展奖 // 有碰次计算拓展奖
if (touchNum > 0) { if (touchNum > 0) {
// 判断是否>3 是否需要启动4-N4-N的参数按照伞上各安置人结算国家进行获取 // 判断是否>3 是否需要启动4-N4-N的参数按照伞上各安置人结算国家进行获取
@ -248,27 +259,30 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
startTouch = realExpandNumber; startTouch = realExpandNumber;
endTouch = touchNum - startTouch; endTouch = touchNum - startTouch;
} }
// 正常的拓展奖计算 // 正常的拓展奖计算
// 计算拓展奖 // 计算拓展奖
for (int i = 1; i <= startTouch; i++) { for (int i = 1; i <= startTouch; i++) {
for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) { for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) {
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent()); CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || if (targetMemberSettleExt == null
EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
continue; continue;
} }
// 验证是否有当前奖金项
if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CONSUMPTION_EXPANSION_INCOME.getValue())) { if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CONSUMPTION_EXPANSION_INCOME.getValue())) {
continue; continue;
} }
// 判断左右区是否有值找到有值的就是有碰次碰完左区或右区肯定有变为0的 // 判断左右区是否有值找到有值的就是有碰次碰完左区或右区肯定有变为0的
// 判断左右区是否有值找到有值的就是有碰次碰完左区或右区肯定有变为0的 if ((ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance()))
if ((targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY) && ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance()))
|| (ComputeUtil.compareValue(targetMemberSettleExt.getRepABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRepBBalance()))) { || (ComputeUtil.compareValue(targetMemberSettleExt.getRepABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRepBBalance()))) {
// 根据会员等级获取对应的配置 // 根据会员等级获取对应的配置
BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt); BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt);
BigDecimal countryExpandRatio = bdGrade.getRepurchaseRatio(); BigDecimal countryExpandRatio = bdGrade.getRepurchaseRatio();
Integer pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CONSUMPTION_EXPANSION_INCOME.getValue()); // 计算量碰
calculateRepurchaseExpandBonusByAchieve(period, weekMemberBonusMap, cuMemberBonusMap, bonusConfigDTO, systemConfigMap, cuMemberBonusExpandList, saOrderExt, touchNum, i, sourceMemberSettleExt, targetMemberSettleExt, bdGrade, countryExpandRatio, pkBonusItems, cuMemberAssessMap); calculateRepurchaseExpandBonusByAchieve(period, weekMemberBonusMap, cuMemberBonusMap, bonusConfigDTO, systemConfigMap, cuMemberBonusExpandList,
saOrderExt, touchNum, i, sourceMemberSettleExt, targetMemberSettleExt, bdGrade, countryExpandRatio, cuMemberAssessMap);
break; break;
} }
} }
@ -279,22 +293,25 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
for (int i = 1; i <= endTouch; i++) { for (int i = 1; i <= endTouch; i++) {
for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) { for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) {
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent()); CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || if (targetMemberSettleExt == null
EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) { || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
continue; continue;
} }
// 验证是否有当前奖金项
if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CONSUMPTION_EXPANSION_INCOME.getValue())) { if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CONSUMPTION_EXPANSION_INCOME.getValue())) {
continue; continue;
} }
// 判断左右区是否有值找到有值的就是有碰次碰完左区或右区肯定有变为0的 // 判断左右区是否有值找到有值的就是有碰次碰完左区或右区肯定有变为0的
if ((targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY) && ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance())) if ((ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance()))
|| (ComputeUtil.compareValue(targetMemberSettleExt.getRepABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRepBBalance()))) { || (ComputeUtil.compareValue(targetMemberSettleExt.getRepABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRepBBalance()))) {
// 根据会员等级获取对应的配置 // 根据会员等级获取对应的配置
BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt); BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt);
// 获取国家4-n的配置 // 获取国家4-n的配置
BigDecimal countryExpandRatio = getCountryRepurchaseExpand(bonusConfigDTO, targetMemberSettleExt, endTouch, bdGrade, addTouch, expandRatio); BigDecimal countryExpandRatio = getCountryRepurchaseExpand(bonusConfigDTO, targetMemberSettleExt, endTouch, bdGrade, addTouch, expandRatio);
Integer pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CONSUMPTION_EXPANSION_INCOME.getValue()); // 计算量碰
calculateRepurchaseExpandBonusByAchieve(period, weekMemberBonusMap, cuMemberBonusMap, bonusConfigDTO, systemConfigMap, cuMemberBonusExpandList, saOrderExt, touchNum, i + startTouch, sourceMemberSettleExt, targetMemberSettleExt, bdGrade, countryExpandRatio, pkBonusItems, cuMemberAssessMap); calculateRepurchaseExpandBonusByAchieve(period, weekMemberBonusMap, cuMemberBonusMap, bonusConfigDTO, systemConfigMap, cuMemberBonusExpandList,
saOrderExt, touchNum, i + startTouch, sourceMemberSettleExt, targetMemberSettleExt, bdGrade, countryExpandRatio, cuMemberAssessMap);
break; break;
} }
} }
@ -304,15 +321,16 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
return cuMemberBonusExpandList; return cuMemberBonusExpandList;
} }
private int calculateTouchNum(Map<Long, CuMemberRiskControl> riskControlMap, String settleName, Map<Long, CuMemberAssess> cuMemberAssessMap, private int calculateTouchNum(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberAssess> cuMemberAssessMap, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap,
Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, SaOrderExt saOrderExt, List<CuMemberSettleExt> cuMemberSettleExtList, BonusConfigDTO bonusConfigDTO) { SaOrderExt saOrderExt, List<CuMemberSettleExt> cuMemberSettleExtList, BonusConfigDTO bonusConfigDTO) {
int touchNum = 0; int touchNum = 0;
for (CuMemberSettleExt cuMemberSettleExt : cuMemberSettleExtList) { for (CuMemberSettleExt cuMemberSettleExt : cuMemberSettleExtList) {
// 数据已经准备好了肯定有值map中是实际的值先计算新增然后根据新增结算计算碰次list是为了存储碰次的顺序 // 数据已经准备好了肯定有值map中是实际的值先计算新增然后根据新增结算计算碰次list是为了存储碰次的顺序
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkPlaceParent()); CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkPlaceParent());
if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || if (targetMemberSettleExt == null
EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() || || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) { || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|| EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) {
continue; continue;
} }
// 验证是否计算奖金 // 验证是否计算奖金
@ -320,7 +338,7 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
if (bdGrade.getRepurchaseCalculate() != null && EYesNo.NO.getIntValue() == bdGrade.getRepurchaseCalculate()) { if (bdGrade.getRepurchaseCalculate() != null && EYesNo.NO.getIntValue() == bdGrade.getRepurchaseCalculate()) {
continue; continue;
} }
if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) { // if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) {
if (EPlaceDept.LEFT_DEPT.getValue() == cuMemberSettleExt.getPlaceDept()) { if (EPlaceDept.LEFT_DEPT.getValue() == cuMemberSettleExt.getPlaceDept()) {
// 左区 // 左区
// K值设置 // K值设置
@ -335,7 +353,6 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
targetMemberSettleExt.setABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getABalance(), saOrderExt.getUploadAchieve())); targetMemberSettleExt.setABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getABalance(), saOrderExt.getUploadAchieve()));
} }
targetMemberSettleExt.setRABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRABalance(), saOrderExt.getUploadAchieve())); targetMemberSettleExt.setRABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRABalance(), saOrderExt.getUploadAchieve()));
// }
} else { } else {
// 右区 // 右区
if (riskControlMap.containsKey(targetMemberSettleExt.getPkMember())) { if (riskControlMap.containsKey(targetMemberSettleExt.getPkMember())) {
@ -362,32 +379,32 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
targetMemberSettleExt.setRABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRABalance(), minAchieve)); targetMemberSettleExt.setRABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRABalance(), minAchieve));
targetMemberSettleExt.setRBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRBBalance(), minAchieve)); targetMemberSettleExt.setRBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRBBalance(), minAchieve));
} }
} else { // } else {
// 嗨粉海粉没有量奖 // // 嗨粉海粉没有量奖
if (EPlaceDept.LEFT_DEPT.getValue() == cuMemberSettleExt.getPlaceDept()) { // if (EPlaceDept.LEFT_DEPT.getValue() == cuMemberSettleExt.getPlaceDept()) {
// 左区 // // 左区
targetMemberSettleExt.setRepANewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getRepANewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO))); // targetMemberSettleExt.setRepANewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getRepANewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
targetMemberSettleExt.setRepANewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getRepANewPv(), saOrderExt.getUploadAchieve())); // targetMemberSettleExt.setRepANewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getRepANewPv(), saOrderExt.getUploadAchieve()));
targetMemberSettleExt.setRepABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRepABalance(), saOrderExt.getUploadAchieve())); // targetMemberSettleExt.setRepABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRepABalance(), saOrderExt.getUploadAchieve()));
targetMemberSettleExt.setRRepABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRRepABalance(), saOrderExt.getUploadAchieve())); // targetMemberSettleExt.setRRepABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRRepABalance(), saOrderExt.getUploadAchieve()));
} else { // } else {
// 右区 // // 右区
targetMemberSettleExt.setRepBNewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getRepBNewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO))); // targetMemberSettleExt.setRepBNewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getRepBNewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
targetMemberSettleExt.setRepBNewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getRepBNewPv(), saOrderExt.getUploadAchieve())); // targetMemberSettleExt.setRepBNewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getRepBNewPv(), saOrderExt.getUploadAchieve()));
targetMemberSettleExt.setRepBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRepBBalance(), saOrderExt.getUploadAchieve())); // targetMemberSettleExt.setRepBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRepBBalance(), saOrderExt.getUploadAchieve()));
targetMemberSettleExt.setRRepBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRRepBBalance(), saOrderExt.getUploadAchieve())); // targetMemberSettleExt.setRRepBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRRepBBalance(), saOrderExt.getUploadAchieve()));
} // }
// 判断左右区是否有值左右区有值有碰次 // // 判断左右区是否有值左右区有值有碰次
if (ComputeUtil.compareValue(targetMemberSettleExt.getRepABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRepBBalance())) { // if (ComputeUtil.compareValue(targetMemberSettleExt.getRepABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRepBBalance())) {
touchNum++; // touchNum++;
} // }
// 判断左右区是否有值左右区有值有碰次 // // 判断左右区是否有值左右区有值有碰次
if (ComputeUtil.compareValue(targetMemberSettleExt.getRRepABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRRepBBalance())) { // if (ComputeUtil.compareValue(targetMemberSettleExt.getRRepABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRRepBBalance())) {
BigDecimal minAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getRRepABalance(), targetMemberSettleExt.getRRepBBalance()); // BigDecimal minAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getRRepABalance(), targetMemberSettleExt.getRRepBBalance());
targetMemberSettleExt.setRRepABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRRepABalance(), minAchieve)); // targetMemberSettleExt.setRRepABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRRepABalance(), minAchieve));
targetMemberSettleExt.setRRepBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRRepBBalance(), minAchieve)); // targetMemberSettleExt.setRRepBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRRepBBalance(), minAchieve));
} // }
} // }
} }
return touchNum; return touchNum;
} }
@ -647,7 +664,7 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
if (specialOrderList.size() > 0) { if (specialOrderList.size() > 0) {
// 查找订单血缘上会员 // 查找订单血缘上会员
Set<Long> expandMemberSet = specialOrderList.stream().distinct().map(SaOrderExt::getPkMember).collect(Collectors.toSet()); Set<Long> expandMemberSet = specialOrderList.stream().distinct().map(SaOrderExt::getPkMember).collect(Collectors.toSet());
List<CuMemberSettleExt> specialMemberSettleExtList = cuMemberTreeService.batchQueryCuMemberSettleParentForSpecial(settleTableName, expandMemberSet); List<CuMemberSettleExt> specialMemberSettleExtList = iCuMemberTreeService.batchQueryCuMemberSettleParentForSpecial(settleTableName, expandMemberSet);
// 重算的时候首先先把数量还回来在重新计算查询订单扣除的记录 // 重算的时候首先先把数量还回来在重新计算查询订单扣除的记录
List<AcPickMemberLog> acPickMemberLogList = acPickServiceApi.queryPickMemberLog(specialOrderList).getData(); List<AcPickMemberLog> acPickMemberLogList = acPickServiceApi.queryPickMemberLog(specialOrderList).getData();
@ -938,6 +955,8 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
} }
/** /**
* 计算复购量碰
*
* @param period 期间 * @param period 期间
* @param cuMemberBonusMap 奖金汇总 * @param cuMemberBonusMap 奖金汇总
* @param cuMemberBonusExpandList 拓展奖奖金明细 * @param cuMemberBonusExpandList 拓展奖奖金明细
@ -948,50 +967,55 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
* @param targetMemberSettleExt 获得奖金的人 * @param targetMemberSettleExt 获得奖金的人
* @param bdGrade 等级对应的参数 * @param bdGrade 等级对应的参数
* @param countryExpandRatio 4-n时计算国家对应的参数 * @param countryExpandRatio 4-n时计算国家对应的参数
* @Description: 计算量碰
* @return: void
* @Author: sui q
* @Date: 2022/11/16 15:51
*/ */
private void calculateRepurchaseExpandBonusByAchieve(Integer period, Map<Long, CuMemberBonus> weekMemberBonusMap, Map<Long, CuMemberBonus> cuMemberBonusMap, private void calculateRepurchaseExpandBonusByAchieve(Integer period, Map<Long, CuMemberBonus> weekMemberBonusMap, Map<Long, CuMemberBonus> cuMemberBonusMap,
BonusConfigDTO bonusConfigDTO, Map<String, String> systemConfigMap, List<CuMemberBonusExpand> cuMemberBonusExpandList, SaOrderExt saOrderExt, int touchNum, int i, BonusConfigDTO bonusConfigDTO, Map<String, String> systemConfigMap, List<CuMemberBonusExpand> cuMemberBonusExpandList,
CuMemberSettleExt sourceMemberSettleExt, CuMemberSettleExt targetMemberSettleExt, BdGrade bdGrade, BigDecimal countryExpandRatio, Integer pkBonusItems, SaOrderExt saOrderExt, int touchNum, int i, CuMemberSettleExt sourceMemberSettleExt, CuMemberSettleExt targetMemberSettleExt,
Map<Long, CuMemberAssess> cuMemberAssessMap) { BdGrade bdGrade, BigDecimal countryExpandRatio, Map<Long, CuMemberAssess> cuMemberAssessMap) {
// 验证封顶方式 1= 2=若是周的话需要获取 周奖金 // 获取拓展收益奖项ID
Integer pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CONSUMPTION_EXPANSION_INCOME.getValue());
// 验证封顶方式 1= 2=若是周的话需要获取 周奖金首购已经去掉周封顶逻辑此处周封顶默认0后续代码可以不需要修改
BigDecimal weekRepExpandIncome = BigDecimal.ZERO; BigDecimal weekRepExpandIncome = BigDecimal.ZERO;
if (systemConfigMap.containsKey(targetMemberSettleExt.getPkSettleCountry() + ESystemConfig.EXPAND_CAP_METHOD.getKey())) { // if (systemConfigMap.containsKey(targetMemberSettleExt.getPkSettleCountry() + ESystemConfig.EXPAND_CAP_METHOD.getKey())) {
String expandCapMethod = systemConfigMap.get(targetMemberSettleExt.getPkSettleCountry() + ESystemConfig.EXPAND_CAP_METHOD.getKey()); // String expandCapMethod = systemConfigMap.get(targetMemberSettleExt.getPkSettleCountry() + ESystemConfig.EXPAND_CAP_METHOD.getKey());
if (Objects.equals(expandCapMethod, EExpandCapMethod.WEEK_SETTLE.toString()) && // if (Objects.equals(expandCapMethod, EExpandCapMethod.WEEK_SETTLE.toString()) &&
weekMemberBonusMap.containsKey(targetMemberSettleExt.getPkMember())) { // weekMemberBonusMap.containsKey(targetMemberSettleExt.getPkMember())) {
weekRepExpandIncome = weekMemberBonusMap.get(targetMemberSettleExt.getPkMember()).getRepurExpandIncome(); // weekRepExpandIncome = weekMemberBonusMap.get(targetMemberSettleExt.getPkMember()).getRepurExpandIncome();
} // }
} // }
// 国内使用首购比例首购封顶 // 国内使用首购比例首购封顶
BigDecimal gradeExpandRatio = bdGrade.getRepurchaseRatio(); BigDecimal gradeExpandRatio = bdGrade.getRepurchaseRatio();
if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) {
gradeExpandRatio = bdGrade.getExpandRatio(); // // TODO new 中国会员指定日期之前计算比例
// 验证受益人等级 // if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) {
CuMember cuMember = cuMemberService.getMember(targetMemberSettleExt.getMemberCode()); // gradeExpandRatio = bdGrade.getExpandRatio();
if (cuMember != null && DateUtils.compareDate(DateUtils.parseStringToDate("2024-09-11"), cuMember.getPayTime()) > 0) { // // 验证受益人等级
if (targetMemberSettleExt.getGradeValue() == EGrade.VIP.getValue()) { // CuMember cuMember = cuMemberService.getMember(targetMemberSettleExt.getMemberCode());
if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(11)) && (i <= 3 || touchNum <= 10)) { // if (cuMember != null && DateUtils.compareDate(DateUtils.parseStringToDate("2024-09-11"), cuMember.getPayTime()) > 0) {
countryExpandRatio = BigDecimal.valueOf(13); // if (targetMemberSettleExt.getGradeValue() == EGrade.VIP.getValue()) {
} // if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(11)) && (i <= 3 || touchNum <= 10)) {
} else if (targetMemberSettleExt.getGradeValue() == EGrade.MAKER.getValue()) { // countryExpandRatio = BigDecimal.valueOf(13);
if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(10)) && (i <= 3 || touchNum <= 10)) { // }
countryExpandRatio = BigDecimal.valueOf(11); // } else if (targetMemberSettleExt.getGradeValue() == EGrade.MAKER.getValue()) {
} // if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(10)) && (i <= 3 || touchNum <= 10)) {
} // countryExpandRatio = BigDecimal.valueOf(11);
} // }
} // }
// }
// }
// 获取等级封顶值 // 获取等级封顶值
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt); CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
// 左右区获取最小的
BigDecimal calAchieve; BigDecimal calAchieve;
if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) { if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) {
calAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getABalance(), targetMemberSettleExt.getBBalance()); calAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getABalance(), targetMemberSettleExt.getBBalance());
} else { } else {
calAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getRepABalance(), targetMemberSettleExt.getRepBBalance()); calAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getRepABalance(), targetMemberSettleExt.getRepBBalance());
} }
CuMemberBonusExpand cuMemberBonusExpand = getCuMemberBonusExpand(saOrderExt, touchNum, i, targetMemberSettleExt, countryExpandRatio, cuMemberBonus, calAchieve, pkBonusItems, BigDecimal.ZERO); CuMemberBonusExpand cuMemberBonusExpand = getCuMemberBonusExpand(saOrderExt, touchNum, i, targetMemberSettleExt, countryExpandRatio, cuMemberBonus, calAchieve, pkBonusItems, BigDecimal.ZERO);
if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) { if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) {
targetMemberSettleExt.setABalance(ComputeUtil.computeSubtract(targetMemberSettleExt.getABalance(), calAchieve)); targetMemberSettleExt.setABalance(ComputeUtil.computeSubtract(targetMemberSettleExt.getABalance(), calAchieve));
@ -1001,33 +1025,52 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
targetMemberSettleExt.setRepABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRepABalance(), calAchieve)); targetMemberSettleExt.setRepABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRepABalance(), calAchieve));
targetMemberSettleExt.setRepBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRepBBalance(), calAchieve)); targetMemberSettleExt.setRepBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRepBBalance(), calAchieve));
} }
// 计算收益 先计算出会员最大的收益 // 计算收益 先计算出会员最大的收益
BigDecimal maxIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), gradeExpandRatio); BigDecimal maxIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), gradeExpandRatio);
BigDecimal actualIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), countryExpandRatio); BigDecimal actualIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), countryExpandRatio);
// 获取等级对应的封顶值 // 获取等级对应的封顶值
BigDecimal expandIncome = ComputeUtil.computeAdd(ComputeUtil.computeAdd(cuMemberBonus.getRepurExpandIncome(), actualIncome), weekRepExpandIncome); BigDecimal expandIncome = ComputeUtil.computeAdd(ComputeUtil.computeAdd(cuMemberBonus.getRepurExpandIncome(), actualIncome), weekRepExpandIncome);
if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) { if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) {
// 获取等级对应的封顶值 // 获取等级对应的封顶值中国重新赋值封顶值
expandIncome = ComputeUtil.computeAdd(ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), expandIncome), weekRepExpandIncome); expandIncome = ComputeUtil.computeAdd(ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), expandIncome), weekRepExpandIncome);
// 判断收益 是否超过封顶值超过的话变为封顶值 // 判断收益 是否超过封顶值超过的话变为封顶值
// 判断是否烧伤判断原奖金是否>=封顶值,奖金到了就是烧伤 // 判断是否烧伤判断原奖金是否>=封顶值,奖金到了就是烧伤
// 验证会员状态 封停状态跟冻结都正常计算奖金封停的账号发放的时候奖金发放为0冻结的账号正常发放不能登录 // 验证会员状态 封停状态跟冻结都正常计算奖金封停的账号发放的时候奖金发放为0冻结的账号正常发放不能登录
packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), maxIncome, actualIncome); packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), maxIncome, actualIncome);
if (ComputeUtil.compareValue(ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome()), bdGrade.getExpandCapping())) { if (ComputeUtil.compareValue(ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome()), bdGrade.getExpandCapping())) {
// 拓展收益 累加 复购收益 >= 封顶值
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()) { if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()) {
// 状态为烧伤
// TODO new V3 V4 没有烧伤改为延缓发放
if (EGrade.VIP.getValue() == bdGrade.getGradeValue()
|| EGrade.S_VIP.getValue() == bdGrade.getGradeValue()) {
cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.DELAY_GRANT.getValue());
} else {
cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
} }
}
expandIncome = ComputeUtil.computeSubtract(bdGrade.getExpandCapping(), ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome())); expandIncome = ComputeUtil.computeSubtract(bdGrade.getExpandCapping(), ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome()));
} else if (ComputeUtil.compareGreaterThan(expandIncome, bdGrade.getExpandCapping())) { } else if (ComputeUtil.compareGreaterThan(expandIncome, bdGrade.getExpandCapping())) {
BigDecimal realIncome = ComputeUtil.computeSubtract(ComputeUtil.computeSubtract(bdGrade.getExpandCapping(), weekRepExpandIncome), ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome())); BigDecimal realIncome = ComputeUtil.computeSubtract(ComputeUtil.computeSubtract(bdGrade.getExpandCapping(), weekRepExpandIncome), ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome()));
// 存在一半烧伤一半正常的值拆2条 // 存在一半烧伤一半正常的值拆2条
// 拓展明细表 进行修改 // 拓展明细表 进行修改
packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), realIncome, realIncome); packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), realIncome, realIncome);
CuMemberBonusExpand fireCuMemberBonusExpand = BeanUtil.copyProperties(cuMemberBonusExpand, CuMemberBonusExpand.class); CuMemberBonusExpand fireCuMemberBonusExpand = BeanUtil.copyProperties(cuMemberBonusExpand, CuMemberBonusExpand.class);
BigDecimal fireIncome = ComputeUtil.computeSubtract(maxIncome, realIncome); BigDecimal fireIncome = ComputeUtil.computeSubtract(maxIncome, realIncome);
if (EBonusIncomeStatus.NORMAL.getValue() == fireCuMemberBonusExpand.getIncomeStatus()) { if (EBonusIncomeStatus.NORMAL.getValue() == fireCuMemberBonusExpand.getIncomeStatus()) {
// TODO new V3 V4 没有烧伤改为延缓发放
if (EGrade.VIP.getValue() == bdGrade.getGradeValue()
|| EGrade.S_VIP.getValue() == bdGrade.getGradeValue()) {
fireCuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.DELAY_GRANT.getValue());
} else {
fireCuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); fireCuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
} }
}
packageCuMemberBonusExpand(fireCuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), fireIncome, fireIncome); packageCuMemberBonusExpand(fireCuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), fireIncome, fireIncome);
// 收益占比 // 收益占比
setBonusDetailDeduct(bonusConfigDTO, fireCuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate()); setBonusDetailDeduct(bonusConfigDTO, fireCuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
@ -1036,35 +1079,41 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
// 拓展收益取封顶最大值 // 拓展收益取封顶最大值
expandIncome = ComputeUtil.computeSubtract(bdGrade.getExpandCapping(), weekRepExpandIncome); expandIncome = ComputeUtil.computeSubtract(bdGrade.getExpandCapping(), weekRepExpandIncome);
} }
} else {
// 判断收益 是否超过封顶值超过的话变为封顶值
// 判断是否烧伤判断原奖金是否>=封顶值,奖金到了就是烧伤
packageCuMemberBonusRepurchaseExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getRepurchaseCapping(), maxIncome, actualIncome);
if (ComputeUtil.compareValue(ComputeUtil.computeAdd(cuMemberBonus.getRepurExpandIncome(), weekRepExpandIncome), bdGrade.getRepurchaseCapping())) {
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()) {
cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
} }
expandIncome = ComputeUtil.computeSubtract(bdGrade.getRepurchaseCapping(), weekRepExpandIncome); // 暂时不需要处理非中国的逻辑
} else if (ComputeUtil.compareGreaterThan(expandIncome, bdGrade.getRepurchaseCapping())) { // else {
BigDecimal realIncome = ComputeUtil.computeSubtract(ComputeUtil.computeSubtract(bdGrade.getRepurchaseCapping(), weekRepExpandIncome), cuMemberBonus.getRepurExpandIncome()); // // 判断收益 是否超过封顶值超过的话变为封顶值
//存在一半烧伤一半正常的值拆2条 // // 判断是否烧伤判断原奖金是否>=封顶值,奖金到了就是烧伤
// 拓展明细表 进行修改 // packageCuMemberBonusRepurchaseExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getRepurchaseCapping(), maxIncome, actualIncome);
packageCuMemberBonusRepurchaseExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getRepurchaseCapping(), realIncome, realIncome); // if (ComputeUtil.compareValue(ComputeUtil.computeAdd(cuMemberBonus.getRepurExpandIncome(), weekRepExpandIncome), bdGrade.getRepurchaseCapping())) {
CuMemberBonusExpand fireCuMemberBonusExpand = BeanUtil.copyProperties(cuMemberBonusExpand, CuMemberBonusExpand.class); // if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()) {
BigDecimal fireIncome = ComputeUtil.computeSubtract(maxIncome, realIncome); // cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
if (EBonusIncomeStatus.NORMAL.getValue() == fireCuMemberBonusExpand.getIncomeStatus()) { // }
fireCuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); // expandIncome = ComputeUtil.computeSubtract(bdGrade.getRepurchaseCapping(), weekRepExpandIncome);
} // } else if (ComputeUtil.compareGreaterThan(expandIncome, bdGrade.getRepurchaseCapping())) {
packageCuMemberBonusRepurchaseExpand(fireCuMemberBonusExpand, cuMemberBonus, bdGrade.getRepurchaseCapping(), fireIncome, fireIncome); // BigDecimal realIncome = ComputeUtil.computeSubtract(ComputeUtil.computeSubtract(bdGrade.getRepurchaseCapping(), weekRepExpandIncome), cuMemberBonus.getRepurExpandIncome());
// //存在一半烧伤一半正常的值拆2条
// // 拓展明细表 进行修改
// packageCuMemberBonusRepurchaseExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getRepurchaseCapping(), realIncome, realIncome);
// CuMemberBonusExpand fireCuMemberBonusExpand = BeanUtil.copyProperties(cuMemberBonusExpand, CuMemberBonusExpand.class);
// BigDecimal fireIncome = ComputeUtil.computeSubtract(maxIncome, realIncome);
// if (EBonusIncomeStatus.NORMAL.getValue() == fireCuMemberBonusExpand.getIncomeStatus()) {
// fireCuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
// }
// packageCuMemberBonusRepurchaseExpand(fireCuMemberBonusExpand, cuMemberBonus, bdGrade.getRepurchaseCapping(), fireIncome, fireIncome);
// // 收益占比
// setBonusDetailDeduct(bonusConfigDTO, fireCuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
// repurchaseExpandRemark(saOrderExt, fireCuMemberBonusExpand, sourceMemberSettleExt, targetMemberSettleExt);
// cuMemberBonusExpandList.add(fireCuMemberBonusExpand);
// // 拓展收益取封顶最大值
// expandIncome = ComputeUtil.computeSubtract(bdGrade.getRepurchaseCapping(), weekRepExpandIncome);
// }
// }
// 收益占比 // 收益占比
setBonusDetailDeduct(bonusConfigDTO, fireCuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
repurchaseExpandRemark(saOrderExt, fireCuMemberBonusExpand, sourceMemberSettleExt, targetMemberSettleExt);
cuMemberBonusExpandList.add(fireCuMemberBonusExpand);
// 拓展收益取封顶最大值
expandIncome = ComputeUtil.computeSubtract(bdGrade.getRepurchaseCapping(), weekRepExpandIncome);
}
}
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate()); BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
repurchaseExpandRemark(saOrderExt, cuMemberBonusExpand, sourceMemberSettleExt, targetMemberSettleExt);
// 正常状态的辅导奖需要判断复购考核复购考核不通过的状态变为烧伤 // 正常状态的辅导奖需要判断复购考核复购考核不通过的状态变为烧伤
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus() if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()
&& EYesNo.NO.getIntValue() == targetMemberSettleExt.getPurchaseStatus()) { && EYesNo.NO.getIntValue() == targetMemberSettleExt.getPurchaseStatus()) {
@ -1074,16 +1123,18 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue()); cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
} }
} }
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()) { if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()) {
if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) {
cuMemberBonus.setRepurExpandIncome(ComputeUtil.computeSubtract(expandIncome, cuMemberBonus.getExpandIncome())); cuMemberBonus.setRepurExpandIncome(ComputeUtil.computeSubtract(expandIncome, cuMemberBonus.getExpandIncome()));
setPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusExpand); setPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusExpand);
} else { // if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) {
cuMemberBonus.setRepurExpandIncome(ComputeUtil.computeSubtract(expandIncome, weekRepExpandIncome)); // cuMemberBonus.setRepurExpandIncome(ComputeUtil.computeSubtract(expandIncome, cuMemberBonus.getExpandIncome()));
setPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusExpand); // setPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusExpand);
// } else {
// cuMemberBonus.setRepurExpandIncome(ComputeUtil.computeSubtract(expandIncome, weekRepExpandIncome));
// setPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusExpand);
// }
} }
}
repurchaseExpandRemark(saOrderExt, cuMemberBonusExpand, sourceMemberSettleExt, targetMemberSettleExt);
cuMemberBonusExpandList.add(cuMemberBonusExpand); cuMemberBonusExpandList.add(cuMemberBonusExpand);
} }

View File

@ -809,8 +809,8 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
// 先计算复购在计算首购 // 先计算复购在计算首购
// 计算复购 // 计算复购
if (repurchaseOrderList.size() > 0) { if (repurchaseOrderList.size() > 0) {
leXueRangeParam = calculatePurchaseOrder(riskControlMap, cuMemberSettleExtMap, currentSettleTableName, settleDate, rangeDtoMap, awardsMap, bonusConfigDTO, leXueRangeParam = calculatePurchaseOrder(riskControlMap, cuMemberSettleExtMap, currentSettleTableName, settleDate, systemConfigMap, bonusConfigDTO,
systemConfigMap, repurchaseOrderList, period, weekMemberBonusMap, cuMemberBonusMap, recordDetailVO, cuAwardsControlMap, cuBonusExpandExtMap); repurchaseOrderList, period, weekMemberBonusMap, cuMemberBonusMap, recordDetailVO, awardsMap, cuAwardsControlMap, cuBonusExpandExtMap, rangeDtoMap);
} }
// 计算首购 // 计算首购
if (firPurchaseOrderList.size() > 0) { if (firPurchaseOrderList.size() > 0) {
@ -971,15 +971,15 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
* @param bonusConfigDTO 各个国家奖金参数 * @param bonusConfigDTO 各个国家奖金参数
* @param firPurchaseOrderList 首购订单 * @param firPurchaseOrderList 首购订单
*/ */
private void calculateFirPurchaseOrder(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, String settleDate, Map<String, String> systemConfigMap, private void calculateFirPurchaseOrder(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, String settleDate,
BonusConfigDTO bonusConfigDTO, List<SaOrderExt> firPurchaseOrderList, Integer period, Map<Long, CuMemberBonus> weekMemberBonusMap, Map<String, String> systemConfigMap, BonusConfigDTO bonusConfigDTO, List<SaOrderExt> firPurchaseOrderList, Integer period, Map<Long, CuMemberBonus> weekMemberBonusMap,
Map<Long, CuMemberBonus> cuMemberBonusMap, BonusRecordDetailVO bonusRecordDetailVO, Map<String, BdAwards> awardsMap, Map<Long, CuMemberBonus> cuMemberBonusMap, BonusRecordDetailVO bonusRecordDetailVO, Map<String, BdAwards> awardsMap,
Map<Long, CuAwardsControl> cuAwardsControlMap, Map<Long, CuBonusExpandExt> cuBonusExpandExtMap) { Map<Long, CuAwardsControl> cuAwardsControlMap, Map<Long, CuBonusExpandExt> cuBonusExpandExtMap) {
// 获得国家是三单循环还是四单循环 // 获得国家是三单循环还是四单循环
// 获得升级方式是纳入三单循环还是固定值 // 获得升级方式是纳入三单循环还是固定值
// 获取有订单国家的系统参数获得三单循环还是四单循环 key 国家+系统参数key // 获取有订单国家的系统参数获得三单循环还是四单循环 key 国家+系统参数key
// 需要更新的会员结算表 cuMemberSettleExtMap // 需要更新的会员结算表 cuMemberSettleExtMap
//***************************计算推荐奖(直推级差、直推三单循环)******************************/ //***************************计算推荐奖(直推级差、直推三单循环)******************************/
List<CuMemberBonusPush> cuMemberBonusPushList = bonusSettleFirstPurchaseHandle.calculateRecommendBonus(cuMemberSettleExtMap, settleTableName, bonusConfigDTO, systemConfigMap, firPurchaseOrderList, period, cuMemberBonusMap, awardsMap); List<CuMemberBonusPush> cuMemberBonusPushList = bonusSettleFirstPurchaseHandle.calculateRecommendBonus(cuMemberSettleExtMap, settleTableName, bonusConfigDTO, systemConfigMap, firPurchaseOrderList, period, cuMemberBonusMap, awardsMap);
bonusRecordDetailVO.setCuMemberBonusPushList(cuMemberBonusPushList); bonusRecordDetailVO.setCuMemberBonusPushList(cuMemberBonusPushList);
@ -992,7 +992,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
bonusRecordDetailVO.getCuMemberBonusExpandList().addAll(cuMemberBonusExpandList); bonusRecordDetailVO.getCuMemberBonusExpandList().addAll(cuMemberBonusExpandList);
} }
} }
//*********************************计算领导奖************************/ //*********************************计算领导奖(辅导收益)************************/
// 判断是否有量奖有量奖有辅导奖 // 判断是否有量奖有量奖有辅导奖
// List<CuMemberBonusCoach> cuMemberBonusCoachList = bonusSettleFirstPurchaseHandle.calculateCoachBonus(cuMemberSettleExtMap, settleTableName, settleDate, bonusConfigDTO, firPurchaseOrderList, // List<CuMemberBonusCoach> cuMemberBonusCoachList = bonusSettleFirstPurchaseHandle.calculateCoachBonus(cuMemberSettleExtMap, settleTableName, settleDate, bonusConfigDTO, firPurchaseOrderList,
// cuMemberBonusExpandList, period, cuMemberBonusMap, cuAwardsControlMap, riskControlMap); // cuMemberBonusExpandList, period, cuMemberBonusMap, cuAwardsControlMap, riskControlMap);
@ -1079,16 +1079,18 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
} }
/** /**
* 计算购订单的奖金 * 计算购订单的奖金
* *
* @param settleTableName 结算日表 * @param settleTableName 结算日表
* @param settleDate 结算日期 * @param settleDate 结算日期
* @param bonusConfigDTO 各个国家奖金参数 * @param bonusConfigDTO 各个国家奖金参数
* @param purchaseOrderList 首购订单 * @param purchaseOrderList 复购订单
* @param rangeDtoMap 乐学奖金使用的汇率map
*/ */
private LeXueRangeParam calculatePurchaseOrder(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, String settleDate, Map<String, RangeDTO> rangeDtoMap, private LeXueRangeParam calculatePurchaseOrder(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, String settleDate,
Map<String, BdAwards> awardsMap, BonusConfigDTO bonusConfigDTO, Map<String, String> systemConfigMap, List<SaOrderExt> purchaseOrderList, Integer period, Map<Long, CuMemberBonus> weekMemberBonusMap, Map<String, String> systemConfigMap, BonusConfigDTO bonusConfigDTO, List<SaOrderExt> purchaseOrderList, Integer period, Map<Long, CuMemberBonus> weekMemberBonusMap,
Map<Long, CuMemberBonus> cuMemberBonusMap, BonusRecordDetailVO bonusRecordDetailVO, Map<Long, CuAwardsControl> cuAwardsControlMap, Map<Long, CuBonusExpandExt> cuBonusExpandExtMap) { Map<Long, CuMemberBonus> cuMemberBonusMap, BonusRecordDetailVO bonusRecordDetailVO, Map<String, BdAwards> awardsMap,
Map<Long, CuAwardsControl> cuAwardsControlMap, Map<Long, CuBonusExpandExt> cuBonusExpandExtMap, Map<String, RangeDTO> rangeDtoMap) {
//****************************复购直推***************************** //****************************复购直推*****************************
// 查找10代血缘验证复购考核考核通过的给与奖金 紧缩 // 查找10代血缘验证复购考核考核通过的给与奖金 紧缩
// List<CuMemberBonusPush> cuMemberBonusPushList = bonusSettlePurchaseHandle.calculateRepurchasePushBonus(cuMemberSettleExtMap, settleTableName, settleDate, bonusConfigDTO, purchaseOrderList, period, cuMemberBonusMap); // List<CuMemberBonusPush> cuMemberBonusPushList = bonusSettlePurchaseHandle.calculateRepurchasePushBonus(cuMemberSettleExtMap, settleTableName, settleDate, bonusConfigDTO, purchaseOrderList, period, cuMemberBonusMap);
@ -1099,7 +1101,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
// bonusRecordDetailVO.getCuMemberBonusPushList().addAll(cuMemberBonusPushList); // bonusRecordDetailVO.getCuMemberBonusPushList().addAll(cuMemberBonusPushList);
// } // }
// } // }
//****************************复购量奖*****************************/ //****************************计算量奖(拓展收益)*****************************/
List<CuMemberBonusExpand> cuMemberBonusExpandList = bonusSettlePurchaseHandle.calculateRepurchaseExpandBonus(riskControlMap, cuMemberSettleExtMap, settleTableName, settleDate, bonusConfigDTO, systemConfigMap, purchaseOrderList, period, weekMemberBonusMap, cuMemberBonusMap, cuBonusExpandExtMap); List<CuMemberBonusExpand> cuMemberBonusExpandList = bonusSettlePurchaseHandle.calculateRepurchaseExpandBonus(riskControlMap, cuMemberSettleExtMap, settleTableName, settleDate, bonusConfigDTO, systemConfigMap, purchaseOrderList, period, weekMemberBonusMap, cuMemberBonusMap, cuBonusExpandExtMap);
if (cuMemberBonusExpandList.size() > 0) { if (cuMemberBonusExpandList.size() > 0) {
if (bonusRecordDetailVO.getCuMemberBonusExpandList() == null) { if (bonusRecordDetailVO.getCuMemberBonusExpandList() == null) {

View File

@ -36,12 +36,12 @@ import java.util.*;
public class CuBonusExpandServiceImpl extends ServiceImpl<CuBonusExpandMapper, CuBonusExpand> implements ICuBonusExpandService { public class CuBonusExpandServiceImpl extends ServiceImpl<CuBonusExpandMapper, CuBonusExpand> implements ICuBonusExpandService {
@DubboReference @DubboReference
ISaOrderServiceApi saOrderServiceApi; ISaOrderServiceApi iSaOrderServiceApi;
@Autowired @Autowired
private ICuMemberSettlePeriodService memberSettlePeriodService; private ICuMemberSettlePeriodService iCuMemberSettlePeriodService;
@Autowired @Autowired
private IBonusSettleService bonusSettleService; private IBonusSettleService iBonusSettleService;
@Override @Override
public List<CuBonusExpandExt> queryBonusExpand(BonusExpandParam bonusExpandParam) { public List<CuBonusExpandExt> queryBonusExpand(BonusExpandParam bonusExpandParam) {
@ -146,8 +146,8 @@ public class CuBonusExpandServiceImpl extends ServiceImpl<CuBonusExpandMapper, C
private void packageBonusExpandParam(BonusExpandParam bonusExpandParam, Date settleDate, Date endDate) { private void packageBonusExpandParam(BonusExpandParam bonusExpandParam, Date settleDate, Date endDate) {
bonusExpandParam.setStartDate(settleDate); bonusExpandParam.setStartDate(settleDate);
bonusExpandParam.setEndDate(DateUtils.afterDate(1, ChronoUnit.DAYS, endDate)); bonusExpandParam.setEndDate(DateUtils.afterDate(1, ChronoUnit.DAYS, endDate));
CuMemberSettlePeriod startPeriod = memberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, bonusExpandParam.getStartDate())); CuMemberSettlePeriod startPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, bonusExpandParam.getStartDate()));
CuMemberSettlePeriod endPeriod = memberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, endDate)); CuMemberSettlePeriod endPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, endDate));
bonusExpandParam.setStartPeriod(startPeriod.getPkId()); bonusExpandParam.setStartPeriod(startPeriod.getPkId());
bonusExpandParam.setEndPeriod(endPeriod.getPkId()); bonusExpandParam.setEndPeriod(endPeriod.getPkId());
} }
@ -182,10 +182,10 @@ public class CuBonusExpandServiceImpl extends ServiceImpl<CuBonusExpandMapper, C
String settleDate = DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, bonusExpandParam.getSettleDate()); String settleDate = DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, bonusExpandParam.getSettleDate());
Date endDate = DateUtils.afterDate(1, ChronoUnit.DAYS, bonusExpandParam.getSettleDate()); Date endDate = DateUtils.afterDate(1, ChronoUnit.DAYS, bonusExpandParam.getSettleDate());
// 查询订单 // 查询订单
List<SaOrderExt> saOrderExtList = saOrderServiceApi.queryRepeatSaOrderByDay(bonusExpandParam.getSettleDate(), endDate).getData(); List<SaOrderExt> saOrderExtList = iSaOrderServiceApi.queryRepeatSaOrderByDay(bonusExpandParam.getSettleDate(), endDate).getData();
baseMapper.truncateTable(); baseMapper.truncateTable();
// 重算奖金 // 重算奖金
bonusSettleService.repeatCuMemberBonusByExpand(settleDate, saOrderExtList); iBonusSettleService.repeatCuMemberBonusByExpand(settleDate, saOrderExtList);
// 更新波比业绩 // 更新波比业绩
updateCuBonusExpandRatio(bonusExpandParam, "cu_member_repeat_bonus"); updateCuBonusExpandRatio(bonusExpandParam, "cu_member_repeat_bonus");
} }

View File

@ -1,5 +1,6 @@
package com.hzs.bonus.detail.service.impl; package com.hzs.bonus.detail.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@ -16,6 +17,8 @@ import com.hzs.common.domain.member.ext.CuMemberSettleExt;
import com.hzs.common.domain.system.config.BdAwards; import com.hzs.common.domain.system.config.BdAwards;
import com.hzs.bonus.base.service.ICuMemberService; import com.hzs.bonus.base.service.ICuMemberService;
import com.hzs.bonus.detail.mapper.CuMemberAwardsMapper; import com.hzs.bonus.detail.mapper.CuMemberAwardsMapper;
import com.hzs.system.config.IAwardsServiceApi;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -23,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* 会员信息-奖衔升级记录 服务实现类 * 会员信息-奖衔升级记录 服务实现类
@ -40,9 +44,19 @@ public class CuMemberAwardsServiceImpl extends ServiceImpl<CuMemberAwardsMapper,
@Autowired @Autowired
private ICuMemberSettlePeriodService iCuMemberSettlePeriodService; private ICuMemberSettlePeriodService iCuMemberSettlePeriodService;
@DubboReference
IAwardsServiceApi iAwardsServiceApi;
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public void calculateCuMemberAwards(String settleDateStr, Map<String, BdAwards> countryAwardsMap, String settleTableName) { public void calculateCuMemberAwards(String settleDateStr, Map<String, BdAwards> countryAwardsMap, String settleTableName) {
// 获取奖衔列表保留Q8以上的
List<BdAwards> bdAwardsList = iAwardsServiceApi.queryAwards(CountryConstants.CHINA_COUNTRY).getData();
bdAwardsList = bdAwardsList.stream()
.filter(tmp -> tmp.getAwardsValue() >= EAwards.CHAIRMAN.getValue())
.sorted(Comparator.comparing(BdAwards::getAwardsValue))
.collect(Collectors.toList());
// 查询结算日当天奖衔发生过变动的会员本期 // 查询结算日当天奖衔发生过变动的会员本期
Date settleDate = DateUtils.parseStringToDate(settleDateStr); Date settleDate = DateUtils.parseStringToDate(settleDateStr);
Integer period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDateStr).getPkId(); Integer period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDateStr).getPkId();
@ -63,6 +77,10 @@ public class CuMemberAwardsServiceImpl extends ServiceImpl<CuMemberAwardsMapper,
break; break;
} }
} }
// TODO new 新制度中奖衔Q8Q9Q10只需要校验左右区各有前一等级即可不需要校验本身的业绩是否达标
for (BdAwards bdAwards : bdAwardsList) {
this.calculateAwardsSpec(bdAwards, settleTableName, settleDate, period);
}
} }
@Override @Override
@ -157,13 +175,13 @@ public class CuMemberAwardsServiceImpl extends ServiceImpl<CuMemberAwardsMapper,
if (cuMemberAwardsList.size() > 0) { if (cuMemberAwardsList.size() > 0) {
// 将变动值插入临时表中 // 将变动值插入临时表中
// 更新会员表 // 更新会员表
iCuMemberService.updateCuMemberByPeriod(enoughAwardsMemberList, period); iCuMemberService.updateCuMemberByPeriod(period);
// 更新结算网体表 -- 结算日期到当前日期的所有日结算表 // 更新结算网体表 -- 结算日期到当前日期的所有日结算表
updateMemberAwardPeriod(settleDate); updateMemberAwardPeriod(settleDate);
return Boolean.TRUE; return Boolean.TRUE;
} else { } else {
// 更新会员表 // 更新会员表
iCuMemberService.updateCuMemberByPeriod(null, period); iCuMemberService.updateCuMemberByPeriod(period);
// 更新结算网体表 -- 结算日期到当前日期的所有日结算表 // 更新结算网体表 -- 结算日期到当前日期的所有日结算表
updateMemberAwardPeriod(settleDate); updateMemberAwardPeriod(settleDate);
return Boolean.FALSE; return Boolean.FALSE;
@ -181,6 +199,40 @@ public class CuMemberAwardsServiceImpl extends ServiceImpl<CuMemberAwardsMapper,
iCuMemberTreeService.updateCuMemberSettleByPeriod(periodList); iCuMemberTreeService.updateCuMemberSettleByPeriod(periodList);
} }
/**
* 处理特殊升级内容
*/
private void calculateAwardsSpec(BdAwards bdAwards, String settleTableName, Date settleDate, Integer period) {
// 升级的时候需要拿比当前低一级的值进行处理
List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.listUpgradeAwards(settleTableName, bdAwards.getAwardsValue() - 5);
if (CollectionUtil.isNotEmpty(cuMemberSettleExtList)) {
// 存在可以升级的
List<CuMemberAwards> cuMemberAwardsList = new ArrayList<>(cuMemberSettleExtList.size());
// 封装升级记录
for (CuMemberSettleExt cuMemberSettleExt : cuMemberSettleExtList) {
CuMemberAwards tmpCuMemberAwards = CuMemberAwards.builder()
.pkMember(cuMemberSettleExt.getPkMember())
.period(period)
.upType(EUpgradeType.AUTO_UPGRADE.getValue())
// 原等级
.oldLevel(cuMemberSettleExt.getPkAwards())
.newLevel(bdAwards.getPkId())
// 默认免考
.purchaseStatus(EYesNo.YES.getIntValue())
.build();
tmpCuMemberAwards.setPkCreator(MagicNumberConstants.PK_ADMIN);
tmpCuMemberAwards.setPkCountry(CountryConstants.CHINA_COUNTRY);
cuMemberAwardsList.add(tmpCuMemberAwards);
}
// 插入记录
baseMapper.saveBatchCuMemberAwards(cuMemberAwardsList);
// 更新会员表
iCuMemberService.updateCuMemberByPeriod(period);
// 更新结算网体表 -- 结算日期到当前日期的所有日结算表
updateMemberAwardPeriod(settleDate);
}
}
@Override @Override
public void deleteCuMemberAwards(Long pkOrder, Long pkApprove, Date currentDateTime) { public void deleteCuMemberAwards(Long pkOrder, Long pkApprove, Date currentDateTime) {
LambdaUpdateWrapper<CuMemberAwards> updateWrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<CuMemberAwards> updateWrapper = new LambdaUpdateWrapper<>();

View File

@ -35,9 +35,9 @@ import java.util.List;
public class CuMemberRiskControlServiceImpl extends ServiceImpl<CuMemberRiskControlMapper, CuMemberRiskControl> implements ICuMemberRiskControlService { public class CuMemberRiskControlServiceImpl extends ServiceImpl<CuMemberRiskControlMapper, CuMemberRiskControl> implements ICuMemberRiskControlService {
@DubboReference @DubboReference
IApprovalServiceApi approvalServiceApi; IApprovalServiceApi iApprovalServiceApi;
@DubboReference @DubboReference
ICuMemberServiceLogServiceApi memberServiceLogServiceApi; ICuMemberServiceLogServiceApi iCuMemberServiceLogServiceApi;
@Override @Override
public List<CuMemberRiskControl> queryCuMemberRiskControl(Date settleDate) { public List<CuMemberRiskControl> queryCuMemberRiskControl(Date settleDate) {
@ -92,7 +92,7 @@ public class CuMemberRiskControlServiceImpl extends ServiceImpl<CuMemberRiskCont
.signType(ESignType.getEnumByValue(memberRiskControlPetition.getSignType())).userIdList(memberRiskControlPetition.getUserIdList()) .signType(ESignType.getEnumByValue(memberRiskControlPetition.getSignType())).userIdList(memberRiskControlPetition.getUserIdList())
.sendIdList(memberRiskControlPetition.getSendIdList()).remark(memberRiskControlPetition.getRemark()).fileList(memberRiskControlPetition.getFileList()) .sendIdList(memberRiskControlPetition.getSendIdList()).remark(memberRiskControlPetition.getRemark()).fileList(memberRiskControlPetition.getFileList())
.build(); .build();
R<String> submit = approvalServiceApi.submit(approvalSubmitDTO, memberRiskControlPetition.getLoginUser()); R<String> submit = iApprovalServiceApi.submit(approvalSubmitDTO, memberRiskControlPetition.getLoginUser());
if (!submit.isSuccess()) { if (!submit.isSuccess()) {
throw new RuntimeException("K值风控 提交审批失败!"); throw new RuntimeException("K值风控 提交审批失败!");
} }
@ -122,7 +122,7 @@ public class CuMemberRiskControlServiceImpl extends ServiceImpl<CuMemberRiskCont
cuMemberServiceLog.setPkCountry(SecurityUtils.getPkCountry()); cuMemberServiceLog.setPkCountry(SecurityUtils.getPkCountry());
cuMemberServiceLog.setPkCreator(SecurityUtils.getUserId()); cuMemberServiceLog.setPkCreator(SecurityUtils.getUserId());
cuMemberServiceLog.setCreationTime(DateUtils.currentDateTime()); cuMemberServiceLog.setCreationTime(DateUtils.currentDateTime());
memberServiceLogServiceApi.insert(cuMemberServiceLog); iCuMemberServiceLogServiceApi.insert(cuMemberServiceLog);
return cuMemberServiceLog; return cuMemberServiceLog;
} }

View File

@ -2270,4 +2270,22 @@
a.pk_grade = b.pk_grade a.pk_grade = b.pk_grade
</update> </update>
<!-- 查询左右区足够可以升级的会员 -->
<select id="listUpgradeAwards" resultMap="CuMemberSettleExt">
select t.pk_member, ct.pk_awards
from (select ct.pk_place_parent pk_member
from ${settleTableName} ct
inner join bd_awards ba
on ba.pk_id = ct.pk_awards
and ba.del_flag = 0
where ct.category = 0
and ct.income_status = 0
and ba.awards_value >= #{awardsValue}
group by ct.pk_place_parent
having count(ct.pk_place_parent) = 2) t
left join ${settleTableName} ct
on ct.pk_member = t.pk_member
order by t.pk_member
</select>
</mapper> </mapper>

View File

@ -144,7 +144,8 @@
</select> </select>
<select id="queryBonusExpand" resultMap="CuBonusExpandExt"> <select id="queryBonusExpand" resultMap="CuBonusExpandExt">
select ce.*,cm.member_code,cm.member_name,bv.vertex_name from cu_bonus_expand ce select ce.*,cm.member_code,cm.member_name,bv.vertex_name
from cu_bonus_expand ce
inner join cu_member cm inner join cu_member cm
on ce.pk_member = cm.pk_id on ce.pk_member = cm.pk_id
left join bd_vertex bv left join bd_vertex bv

View File

@ -163,15 +163,16 @@
cu.member_code source_member_code,cu.member_name source_member_name,so.pk_rate,bc.out_exchange_rate,so.order_amount, cu.member_code source_member_code,cu.member_name source_member_name,so.pk_rate,bc.out_exchange_rate,so.order_amount,
so.order_achieve,b.pk_country,b.pk_bonus_items,b.pretax_income,b.income_tax,b.real_income,b.income_status, so.order_achieve,b.pk_country,b.pk_bonus_items,b.pretax_income,b.income_tax,b.real_income,b.income_status,
tar.member_code,tar.member_name,bg.pk_transaction pk_settle_grade,ba.pk_transaction pk_awards,bv.vertex_name,ct.team_name, tar.member_code,tar.member_name,bg.pk_transaction pk_settle_grade,ba.pk_transaction pk_awards,bv.vertex_name,ct.team_name,
b.remark,b.income_ratio,b.income_dial_ratio,b.order_dial_ratio,(b.round+1) round,b.second,bct.short_name settle_country from ( b.remark,b.income_ratio,b.income_dial_ratio,b.order_dial_ratio,(b.round+1) round,b.second,bct.short_name settle_country
from (
select pk_id,pk_member,order_code,order_type,pk_rate,pk_country,order_amount,order_achieve from sa_order select pk_id,pk_member,order_code,order_type,pk_rate,pk_country,order_amount,order_achieve from sa_order
union union
select pk_id,pk_member,order_code,order_type,pk_rate,pk_country,order_amount,order_achieve from sa_t_order select pk_id,pk_member,order_code,order_type,pk_rate,pk_country,order_amount,order_achieve from sa_t_order
) so ) so
inner join ( inner join (
select cb.pk_member,cp.pk_order,cb.period,cb.pk_country,cp.pk_bonus_items,cp.income_status,cp.CAL_ACHIEVE,cp.pretax_income,cp.income_tax,cp.real_income, select cb.pk_member,cp.pk_order,cb.period,cb.pk_country,cp.pk_bonus_items,cp.income_status,cp.CAL_ACHIEVE,cp.pretax_income,cp.income_tax,cp.real_income,
cp.remark,cp.income_ratio,cp.income_dial_ratio,cp.order_dial_ratio,cp.round,cp.second from cp.remark,cp.income_ratio,cp.income_dial_ratio,cp.order_dial_ratio,cp.round,cp.second
cu_member_bonus cb from cu_member_bonus cb
inner join cu_member_bonus_push cp inner join cu_member_bonus_push cp
on cb.pk_id = cp.pk_bonus on cb.pk_id = cp.pk_bonus
where 1=1 where 1=1

View File

@ -34,6 +34,12 @@ public enum EBonusIncomeStatus {
* K值 * K值
*/ */
RISK_CONTROL(3, "K值", 0, EnumsPrefixConstants.BONUS_INCOME_STATUS + "3"), RISK_CONTROL(3, "K值", 0, EnumsPrefixConstants.BONUS_INCOME_STATUS + "3"),
/**
* 延缓发放
*/
DELAY_GRANT(4, "延缓发放", 0, EnumsPrefixConstants.BONUS_INCOME_STATUS + "4"),
; ;
/** /**

View File

@ -84,12 +84,10 @@ public class ComputeUtil {
} }
/** /**
* 值1大于等于值2返回值2否则返回值1
*
* @param value1 值1 * @param value1 值1
* @param value2 值2 * @param value2 值2
* @Description: 统一的除法计算方法, 向下取整
* @return: BigDecimal
* @Author: sui q
* @Date: 2022/9/20 21:09
*/ */
public static BigDecimal obtainMinAchieve(BigDecimal value1, BigDecimal value2) { public static BigDecimal obtainMinAchieve(BigDecimal value1, BigDecimal value2) {
if (compareValue(value1, value2)) { if (compareValue(value1, value2)) {
@ -120,12 +118,10 @@ public class ComputeUtil {
} }
/** /**
* 比较大小前面的值大于等于后面的值
*
* @param value1 值1 * @param value1 值1
* @param value2 值2 * @param value2 值2
* @Description: 比较大小前面的值大于等于后面的值
* @return: Boolean
* @Author: sui q
* @Date: 2022/9/20 21:23
*/ */
public static Boolean compareValue(BigDecimal value1, BigDecimal value2) { public static Boolean compareValue(BigDecimal value1, BigDecimal value2) {
if (value1.compareTo(value2) >= 0) { if (value1.compareTo(value2) >= 0) {
@ -206,9 +202,6 @@ public class ComputeUtil {
* *
* @param value1 * @param value1
* @param value2 比例 * @param value2 比例
* @return: BigDecimal
* @Author: sui q
* @Date: 2022/11/14 17:02
*/ */
public static BigDecimal computeBonusMultiply(BigDecimal value1, BigDecimal value2) { public static BigDecimal computeBonusMultiply(BigDecimal value1, BigDecimal value2) {
return value1.multiply(value2).multiply(BigDecimal.valueOf(0.01)); return value1.multiply(value2).multiply(BigDecimal.valueOf(0.01));

View File

@ -14,9 +14,7 @@ import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
/** /**
* <p>
* 服务补贴 * 服务补贴
* </p>
* *
* @author hzs * @author hzs
* @since 2022-11-01 * @since 2022-11-01
@ -61,5 +59,4 @@ public class BdBonusService extends BaseEntity {
private String assessmentTypeVal; private String assessmentTypeVal;
} }

View File

@ -4,7 +4,9 @@ import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date; import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
@ -13,9 +15,7 @@ import lombok.*;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
/** /**
* <p> * 4-n增加碰次设置
*
* </p> 4-n增加碰次设置
* *
* @author hzs * @author hzs
* @since 2024-07-19 * @since 2024-07-19

View File

@ -11,9 +11,7 @@ import lombok.*;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
/** /**
* <p>
* 会员奖金-拓展收益明细表 * 会员奖金-拓展收益明细表
* </p>
* *
* @author hzs * @author hzs
* @since 2022-11-15 * @since 2022-11-15

View File

@ -12,10 +12,7 @@ import lombok.experimental.Accessors;
import java.math.BigDecimal; import java.math.BigDecimal;
/** /**
* <p>
* 奖金4N配置 * 奖金4N配置
* </p>
* *
* @author hzs * @author hzs
* @since 2022-10-31 * @since 2022-10-31