## Q8以上奖衔升级处理;拓展奖V3 V4判断烧伤改为延缓发放;
This commit is contained in:
parent
1b73571a91
commit
37fc6bc778
|
@ -29,4 +29,5 @@ public class BonusExpandDTO implements Serializable {
|
|||
* 国家
|
||||
*/
|
||||
private Integer pkCountry;
|
||||
|
||||
}
|
||||
|
|
|
@ -794,4 +794,13 @@ public interface CuMemberTreeMapper extends BaseMapper<CuMemberTree> {
|
|||
*/
|
||||
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);
|
||||
|
||||
}
|
||||
|
|
|
@ -668,4 +668,13 @@ public interface ICuMemberTreeService extends IService<CuMemberTree> {
|
|||
*/
|
||||
void updateCuMemberSettleGradeByPeriod(List<Integer> periodList);
|
||||
|
||||
/**
|
||||
* 查询左右区足够可以升级的会员
|
||||
*
|
||||
* @param settleTableName
|
||||
* @param awardsValue
|
||||
* @return
|
||||
*/
|
||||
List<CuMemberSettleExt> listUpgradeAwards(String settleTableName, Integer awardsValue);
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -34,10 +34,8 @@ public interface ICuMemberService extends IService<CuMember> {
|
|||
|
||||
/**
|
||||
* 更新会员奖衔根据临时表
|
||||
*
|
||||
* @param enoughAwardsMember 修改奖衔的会员
|
||||
*/
|
||||
void updateCuMemberByPeriod(List<CuMemberSettleExt> enoughAwardsMember, Integer period);
|
||||
void updateCuMemberByPeriod(Integer period);
|
||||
|
||||
/**
|
||||
* 更新会员奖衔根据临时表
|
||||
|
|
|
@ -38,7 +38,7 @@ public class CuMemberServiceImpl extends ServiceImpl<CuMemberMapper, CuMember> i
|
|||
}
|
||||
|
||||
@Override
|
||||
public void updateCuMemberByPeriod(List<CuMemberSettleExt> enoughAwardsMember, Integer period) {
|
||||
public void updateCuMemberByPeriod(Integer period) {
|
||||
baseMapper.updateCuMemberByPeriod(period);
|
||||
}
|
||||
|
||||
|
|
|
@ -16,12 +16,12 @@ import java.util.List;
|
|||
*/
|
||||
public interface CuBonusExpandMapper extends BaseMapper<CuBonusExpand> {
|
||||
|
||||
/*
|
||||
* @description: 查询4-n配置
|
||||
* @author: sui q
|
||||
* @date: 2024/7/23 10:09
|
||||
* @param: null null
|
||||
**/
|
||||
/**
|
||||
* 查询4-n配置
|
||||
*
|
||||
* @param bonusExpandParam
|
||||
* @return
|
||||
*/
|
||||
List<CuBonusExpandExt> queryBonusExpand(BonusExpandParam bonusExpandParam);
|
||||
|
||||
/*
|
||||
|
|
|
@ -39,11 +39,11 @@ import java.util.stream.Collectors;
|
|||
public class BonusSettleAgentHandle extends BonusSettleHandle {
|
||||
|
||||
@DubboReference
|
||||
IActivityServiceApi activityServiceApi;
|
||||
IActivityServiceApi iActivityServiceApi;
|
||||
|
||||
// 代理直推 推荐给多少钱 代理复购 区域 所有订单的1%
|
||||
@Autowired
|
||||
private ICuMemberAgentService cuMemberAgentService;
|
||||
private ICuMemberAgentService iCuMemberAgentService;
|
||||
|
||||
/**
|
||||
* 计算嗨粉奖金
|
||||
|
@ -63,9 +63,9 @@ public class BonusSettleAgentHandle extends BonusSettleHandle {
|
|||
Date currentMonthFirstDate = DateUtils.currentMonthFirstDate(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;
|
||||
Set<Long> pkMemberSet = new HashSet<>();
|
||||
// 获取配置
|
||||
|
@ -75,7 +75,7 @@ public class BonusSettleAgentHandle extends BonusSettleHandle {
|
|||
}
|
||||
// 计算奖金 云代首购 首购订单1% 云代复购 复购订单1%
|
||||
// 查询会员,查询出所有代理的会员
|
||||
Map<String, List<CuMemberAgent>> cuMemberAgentMap = cuMemberAgentService.queryCuMemberAgent();
|
||||
Map<String, List<CuMemberAgent>> cuMemberAgentMap = iCuMemberAgentService.queryCuMemberAgent();
|
||||
List<SaOrder> saOrderList = new ArrayList<>();
|
||||
for (SaOrder saOrder : currentMonthOrderList) {
|
||||
if (saOrder.getPkCountry() == null || saOrder.getRecProvince() == null || saOrder.getRecCity() == null) {
|
||||
|
@ -92,7 +92,7 @@ public class BonusSettleAgentHandle extends BonusSettleHandle {
|
|||
cuMemberAgentList.forEach(cuMemberAgent ->
|
||||
pkMemberSet.add(cuMemberAgent.getPkMember()));
|
||||
}
|
||||
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleByMemberPk(currentSettleTableName, pkMemberSet);
|
||||
List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleByMemberPk(currentSettleTableName, pkMemberSet);
|
||||
Map<Long, CuMemberSettleExt> cuMemberSettleExtMap = new HashMap<>();
|
||||
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
|
||||
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)) {
|
||||
for (AcRepurSharRuleConfigExt acRepurSharRuleConfigExt : repurSharRuleConfigExtList) {
|
||||
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();
|
||||
if (CollectionUtil.isNotEmpty(orderList)) {
|
||||
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);
|
||||
for (SaOrder saOrder : orderList) {
|
||||
BigDecimal exchangeRate = BigDecimal.ONE;
|
||||
|
|
|
@ -64,7 +64,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
|||
// 查询 各个国家 3单循环 4单循环的配置值
|
||||
// 获得会员的轮、次,按照订单时间进行
|
||||
// 根据订单获取轮次,要回写
|
||||
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleBySaOrder(settleTableName, firPurchaseOrderList);
|
||||
List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleBySaOrder(settleTableName, firPurchaseOrderList);
|
||||
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
|
||||
// 推荐奖明细
|
||||
List<CuMemberBonusPush> cuMemberBonusPushList = new ArrayList<>();
|
||||
|
@ -95,7 +95,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
|||
if (specialOrderList.size() > 0) {
|
||||
Set<Long> memberSet = new HashSet<>();
|
||||
specialOrderList.forEach(saOrderExt -> memberSet.add(saOrderExt.getPkMember()));
|
||||
cuMemberSettleExtList = cuMemberTreeService.batchQuerySpecialCuMemberSettleParent(settleTableName, memberSet);
|
||||
cuMemberSettleExtList = iCuMemberTreeService.batchQuerySpecialCuMemberSettleParent(settleTableName, memberSet);
|
||||
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
|
||||
// 计算奖金
|
||||
for (SaOrderExt saOrderExt : specialOrderList) {
|
||||
|
@ -403,7 +403,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
|||
}
|
||||
|
||||
/**
|
||||
* 计算拓展收益
|
||||
* 计算首购拓展收益
|
||||
*
|
||||
* @param settleTableName 结算表
|
||||
* @param period 期间
|
||||
|
@ -418,13 +418,17 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
|||
// 根据开始期间、结束期间查询
|
||||
List<CuMemberBonusExpand> cuMemberBonusExpandList = new ArrayList<>();
|
||||
// 获取所有订单的上级,根据订单往上一步步计算
|
||||
Map<Long, List<CuMemberSettleExt>> memberSettleMap = cuMemberTreeService.batchQueryCuMemberSettlePlaceParent(settleTableName, firPurchaseOrderList);
|
||||
// key:订单ID,value:订单向上找安置人列表
|
||||
Map<Long, List<CuMemberSettleExt>> memberSettleMap = iCuMemberTreeService.batchQueryCuMemberSettlePlaceParent(settleTableName, firPurchaseOrderList);
|
||||
|
||||
// 获取复购考核结果
|
||||
List<CuMemberSettleExt> queryMemberList = new ArrayList<>();
|
||||
memberSettleMap.forEach((key, value) -> queryMemberList.addAll(value));
|
||||
Map<Long, CuMemberAssess> cuMemberAssessMap = getLongCuMemberAssessMap(settleDate, queryMemberList);
|
||||
|
||||
for (SaOrderExt saOrderExt : firPurchaseOrderList) {
|
||||
if (!validateSecondOrderExistBonus(saOrderExt, EBonusItems.EXPANSION_INCOME.getValue())) {
|
||||
// 校验二次发货需不需要计算量碰
|
||||
continue;
|
||||
}
|
||||
// 所有需要计算的父节点,只计算新增
|
||||
|
@ -441,7 +445,9 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
|||
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) {
|
||||
cuMemberBonusExpandList.addAll(expandList);
|
||||
}
|
||||
|
@ -451,31 +457,140 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
|||
}
|
||||
|
||||
/**
|
||||
* @Description: 计算量奖
|
||||
* @return: List<CuMemberBonusExpand>
|
||||
* @Author: sui q
|
||||
* @Date: 2023/2/4 14:18
|
||||
* 计算首购量奖(拓展收益)
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
List<CuMemberBonusExpand> calculateExpandBonusOne(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberAssess> cuMemberAssessMap, String settleTableName, 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> calculateExpandBonusOne(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberAssess> cuMemberAssessMap, String settleTableName,
|
||||
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<>();
|
||||
if (CollectionUtil.isEmpty(cuMemberSettleExtList)) {
|
||||
return cuMemberBonusExpandList;
|
||||
}
|
||||
|
||||
Map<Integer, BonusExpandDTO> bdBonusExpandMap = bonusConfigDTO.getBonusExpandMap();
|
||||
// 先计算新增,根据新增计算碰次
|
||||
// 先进行初始化所有的安置人,存储需要修改的值,cuMemberSettleExtMap最终修改的
|
||||
if (flag) {
|
||||
// 日结传入的true,秒结传入的false
|
||||
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
|
||||
}
|
||||
|
||||
// 先准备值,准备好值后,开始计算,计算碰次
|
||||
int touchNum = calculateTouchNum(riskControlMap, cuMemberAssessMap, cuMemberSettleExtMap, saOrderExt, cuMemberSettleExtList, bonusConfigDTO);
|
||||
|
||||
// 有碰次,计算拓展奖
|
||||
if (touchNum > 0) {
|
||||
// 判断是否>3 是否需要启动4-N,4-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;
|
||||
for (CuMemberSettleExt cuMemberSettleExt : cuMemberSettleExtList) {
|
||||
// 数据已经准备好了,肯定有值,map中是实际的值,先计算新增,然后根据新增结算计算碰次,list是为了存储碰次的顺序
|
||||
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkPlaceParent());
|
||||
if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() ||
|
||||
EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() ||
|
||||
EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) {
|
||||
if (targetMemberSettleExt == null
|
||||
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
||||
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|
||||
|| EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) {
|
||||
continue;
|
||||
}
|
||||
// 验证是否计算奖金
|
||||
|
@ -532,94 +647,14 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
|||
}
|
||||
// 判断左右区是否有值,左右区有值有碰次
|
||||
if (ComputeUtil.compareValue(targetMemberSettleExt.getRABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRBBalance())) {
|
||||
// 取左区、右区,最小的那个业绩
|
||||
// 左右、右区,都减掉最小的业绩,就是左区、右区的结余
|
||||
BigDecimal minAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getRABalance(), targetMemberSettleExt.getRBBalance());
|
||||
targetMemberSettleExt.setRABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRABalance(), minAchieve));
|
||||
targetMemberSettleExt.setRBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRBBalance(), minAchieve));
|
||||
}
|
||||
}
|
||||
// 有碰次,计算拓展奖
|
||||
if (touchNum > 0) {
|
||||
// 判断是否>3 是否需要启动4-N,4-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;
|
||||
return touchNum;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -633,7 +668,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
|||
List<CuMemberBonusCoach> cuMemberBonusCoachList = new ArrayList<>();
|
||||
if (cuMemberBonusExpandList.size() > 0) {
|
||||
Set<Long> expandMemberSet = getMemberExpandBonus(cuMemberBonusMap, cuMemberBonusExpandList);
|
||||
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryCuMemberSettleParent(settleTableName, expandMemberSet);
|
||||
List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.batchQueryCuMemberSettleParent(settleTableName, expandMemberSet);
|
||||
// 初始化父类网体的值
|
||||
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
|
||||
List<CuMemberSettleExt> queryMemberList = getQueryMemberSettleExtList(cuMemberSettleExtMap, cuMemberSettleExtList);
|
||||
|
@ -805,15 +840,13 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
|||
}
|
||||
|
||||
/**
|
||||
* 计算报单服务费
|
||||
*
|
||||
* @param settleTableName 结算表
|
||||
* @param period 期间
|
||||
* @param bonusConfigDTO 参数
|
||||
* @param firPurchaseOrderList 订单列表
|
||||
* @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<SaOrderExt> firPurchaseOrderList, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap) {
|
||||
|
@ -830,8 +863,8 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
|||
// 计算报单服务费
|
||||
for (SaOrderExt saOrderExt : firPurchaseOrderList) {
|
||||
// 只有注册订单有报单服务费
|
||||
if (EOrderType.REGISTER_ORDER.getValue() == saOrderExt.getOrderType() ||
|
||||
Objects.equals(EOrderType.SPECIAL_REGISTER_ORDER.getValue(), saOrderExt.getOrderType())) {
|
||||
if (EOrderType.REGISTER_ORDER.getValue() == saOrderExt.getOrderType()
|
||||
|| Objects.equals(EOrderType.SPECIAL_REGISTER_ORDER.getValue(), saOrderExt.getOrderType())) {
|
||||
CuMemberBonusDetail cuMemberBonusDetail = calculateServiceBonusOne(settleDate, cuMemberAssessMap, cuMemberSettleExtMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt);
|
||||
if (cuMemberBonusDetail != null) {
|
||||
cuMemberBonusDetailList.add(cuMemberBonusDetail);
|
||||
|
@ -854,15 +887,18 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
|||
return null;
|
||||
}
|
||||
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkCenterCode());
|
||||
if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() ||
|
||||
EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() ||
|
||||
ERegistrationAuthority.SERVICE.getValue() != targetMemberSettleExt.getRegisterAuthority()) {
|
||||
if (targetMemberSettleExt == null
|
||||
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
||||
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|
||||
|| ERegistrationAuthority.SERVICE.getValue() != targetMemberSettleExt.getRegisterAuthority()) {
|
||||
// 非正常会员、停算收益、不是服务中心,都不进行处理
|
||||
return null;
|
||||
}
|
||||
// 验证是否有奖金
|
||||
if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.SERVICE_SUBSIDIES.getValue())) {
|
||||
return null;
|
||||
}
|
||||
// 获取会员奖金数据
|
||||
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
|
||||
BdBonusService bdBonusService = bonusConfigDTO.getBonusServiceMap().get(targetMemberSettleExt.getPkSettleCountry().toString() + EServiceType.SUBSIDY.getValue());
|
||||
// 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 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 rangeTableName = TableNameConstants.CU_MEMBER_RANGE + beforeMonthLastPeriod;
|
||||
// 查询上月第一天
|
||||
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);
|
||||
// 获取结算日期的第一天的日期
|
||||
// 查询复购考核结果
|
||||
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.queryMemberSettleByAwards(settleTableName, rangeTableName, beforeMonthFirstPeriod, beforeMonthLastPeriod);
|
||||
List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.queryMemberSettleByAwards(settleTableName, rangeTableName, beforeMonthFirstPeriod, beforeMonthLastPeriod);
|
||||
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) {
|
||||
SaOrder saOrder = SaOrder.builder().pkId(0L).orderAchieve(BigDecimal.ZERO).build();
|
||||
saOrder.setPkCountry(targetMemberSettleExt.getPkSettleCountry());
|
||||
|
@ -971,7 +1007,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
|||
repurchaseOrderList.forEach(saOrderExt -> expandMemberSet.add(saOrderExt.getPkMember()));
|
||||
mallOrderList.forEach(saOrderExt -> expandMemberSet.add(saOrderExt.getPkMember()));
|
||||
if (expandMemberSet.size() > 0) {
|
||||
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryCuMemberSettleParent(settleTableName, expandMemberSet);
|
||||
List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.batchQueryCuMemberSettleParent(settleTableName, expandMemberSet);
|
||||
// 初始化父类网体的值
|
||||
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
|
||||
for (SaOrderExt saOrderExt : firPurchaseOrderList) {
|
||||
|
@ -1018,6 +1054,8 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
|||
}
|
||||
|
||||
/**
|
||||
* 计算首购量碰
|
||||
*
|
||||
* @param period 期间
|
||||
* @param cuMemberBonusMap 奖金汇总
|
||||
* @param cuMemberBonusExpandList 拓展奖奖金明细
|
||||
|
@ -1028,15 +1066,14 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
|||
* @param targetMemberSettleExt 获得奖金的人
|
||||
* @param bdGrade 等级对应的参数
|
||||
* @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,
|
||||
BonusConfigDTO bonusConfigDTO, Map<String, String> systemConfigMap, List<CuMemberBonusExpand> cuMemberBonusExpandList, SaOrderExt saOrderExt, int touchNum, int i,
|
||||
CuMemberSettleExt sourceMemberSettleExt, CuMemberSettleExt targetMemberSettleExt, BdGrade bdGrade, BigDecimal countryExpandRatio, BigDecimal addTouch, Map<Long, CuMemberAssess> cuMemberAssessMap) {
|
||||
BonusConfigDTO bonusConfigDTO, Map<String, String> systemConfigMap, List<CuMemberBonusExpand> cuMemberBonusExpandList,
|
||||
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());
|
||||
|
||||
// 验证封顶方式 1=日 2=周,若是周的话需要获取 周奖金
|
||||
// BigDecimal weekExpandIncome = BigDecimal.ZERO;
|
||||
// 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();
|
||||
// }
|
||||
// }
|
||||
|
||||
// 等级对应拓展比例
|
||||
BigDecimal gradeExpandRatio = bdGrade.getExpandRatio();
|
||||
// 验证受益人等级
|
||||
CuMember cuMember = cuMemberService.getMember(targetMemberSettleExt.getMemberCode());
|
||||
if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY) &&
|
||||
cuMember != null && DateUtils.compareDate(DateUtils.parseStringToDate("2024-09-11"), cuMember.getPayTime()) > 0) {
|
||||
if (targetMemberSettleExt.getGradeValue() == EGrade.VIP.getValue()) {
|
||||
if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(11)) && (i <= 3 || touchNum <= 10)) {
|
||||
countryExpandRatio = BigDecimal.valueOf(13);
|
||||
}
|
||||
} else if (targetMemberSettleExt.getGradeValue() == EGrade.MAKER.getValue()) {
|
||||
if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(10)) && (i <= 3 || touchNum <= 10)) {
|
||||
countryExpandRatio = BigDecimal.valueOf(11);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO new 中国会员,指定日期之前计算比例
|
||||
// // 验证受益人等级
|
||||
// CuMember cuMember = cuMemberService.getMember(targetMemberSettleExt.getMemberCode());
|
||||
// if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)
|
||||
// && cuMember != null
|
||||
// && DateUtils.compareDate(DateUtils.parseStringToDate("2024-09-11"), cuMember.getPayTime()) > 0) {
|
||||
// if (targetMemberSettleExt.getGradeValue() == EGrade.VIP.getValue()) {
|
||||
// if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(11)) && (i <= 3 || touchNum <= 10)) {
|
||||
// countryExpandRatio = BigDecimal.valueOf(13);
|
||||
// }
|
||||
// } 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);
|
||||
// 左右区获取最小的
|
||||
BigDecimal calAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getABalance(), targetMemberSettleExt.getBBalance());
|
||||
|
||||
CuMemberBonusExpand cuMemberBonusExpand = getCuMemberBonusExpand(saOrderExt, touchNum, i, targetMemberSettleExt, countryExpandRatio, cuMemberBonus, calAchieve, pkBonusItems, addTouch);
|
||||
// 扣减a、b区结余
|
||||
targetMemberSettleExt.setABalance(ComputeUtil.computeSubtract(targetMemberSettleExt.getABalance(), calAchieve));
|
||||
targetMemberSettleExt.setBBalance(ComputeUtil.computeSubtract(targetMemberSettleExt.getBBalance(), calAchieve));
|
||||
// 计算收益 先计算出会员最大的收益
|
||||
|
||||
// 计算收益 先计算出会员最大的收益(按等级拓展比例进行计算出最大值)
|
||||
BigDecimal maxIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), gradeExpandRatio);
|
||||
BigDecimal actualIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), countryExpandRatio);
|
||||
// K值设置
|
||||
|
@ -1076,26 +1122,37 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
|||
actualIncome = ComputeUtil.computeBonusMultiply(actualIncome, riskControlMap.get(cuMemberBonus.getPkMember()).getExpandRatio());
|
||||
cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.RISK_CONTROL.getValue());
|
||||
}
|
||||
// 获取等级对应的封顶值
|
||||
|
||||
// 获取等级对应的封顶值(因为先计算复购,再计算首购,封顶需要把复购拓展也加上)
|
||||
BigDecimal expandIncome = ComputeUtil.computeAdd(ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), actualIncome), cuMemberBonus.getRepurExpandIncome());
|
||||
|
||||
// 判断收益 是否超过封顶值,超过的话变为封顶值
|
||||
// 判断是否烧伤,判断原奖金是否>=封顶值,奖金到了就是烧伤
|
||||
// 验证会员状态 封停状态跟冻结都正常计算奖金,封停的账号发放的时候奖金发放为0,冻结的账号正常发放,不能登录
|
||||
packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), maxIncome, actualIncome);
|
||||
|
||||
if (ComputeUtil.compareValue(ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome()), bdGrade.getExpandCapping())) {
|
||||
// 拓展收益 累加 复购收益 >= 封顶值
|
||||
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()) {
|
||||
cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
|
||||
}
|
||||
expandIncome = ComputeUtil.computeSubtract(bdGrade.getExpandCapping(), ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome()));
|
||||
} else if (ComputeUtil.compareGreaterThan(expandIncome, bdGrade.getExpandCapping())) {
|
||||
BigDecimal realIncome = ComputeUtil.computeSubtract(bdGrade.getExpandCapping(), ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome()));
|
||||
//存在一半烧伤一半正常的值,拆2条
|
||||
// 存在一半烧伤一半正常的值,拆2条
|
||||
// 拓展明细表 进行修改
|
||||
packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), 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());
|
||||
// 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());
|
||||
}
|
||||
}
|
||||
packageCuMemberBonusExpand(fireCuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), fireIncome, fireIncome);
|
||||
// 收益占比
|
||||
|
@ -1105,15 +1162,19 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
|||
// 拓展收益取封顶最大值
|
||||
expandIncome = bdGrade.getExpandCapping();
|
||||
}
|
||||
|
||||
// 收益占比
|
||||
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
|
||||
expandRemark(saOrderExt, cuMemberBonusExpand, sourceMemberSettleExt, targetMemberSettleExt);
|
||||
|
||||
if (riskControlMap.containsKey(cuMemberBonus.getPkMember())) {
|
||||
cuMemberBonusExpand.setRemark(cuMemberBonusExpand.getRemark() + "K值比例:" + riskControlMap.get(cuMemberBonus.getPkMember()).getExpandRatio() + "。");
|
||||
}
|
||||
if (ComputeUtil.compareValue(addTouch)) {
|
||||
cuMemberBonusExpand.setRemark(cuMemberBonusExpand.getRemark() + "增加碰次:" + addTouch + "。");
|
||||
}
|
||||
|
||||
// 正常状态的辅导奖需要判断复购考核,复购考核不通过的状态变为烧伤
|
||||
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()
|
||||
&& EYesNo.NO.getIntValue() == targetMemberSettleExt.getPurchaseStatus()) {
|
||||
// 需要复购考核的
|
||||
|
@ -1122,6 +1183,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
|||
cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus() ||
|
||||
EBonusIncomeStatus.RISK_CONTROL.getValue() == cuMemberBonusExpand.getIncomeStatus()) {
|
||||
// 判断会员状态,会员状态为封停的话状态修改为停收
|
||||
|
|
|
@ -52,24 +52,22 @@ import java.util.*;
|
|||
public abstract class BonusSettleHandle {
|
||||
|
||||
@Autowired
|
||||
protected ICuMemberTreeService cuMemberTreeService;
|
||||
protected ICuMemberTreeService iCuMemberTreeService;
|
||||
@Autowired
|
||||
protected ICuMemberSettlePeriodService cuMemberSettlePeriodService;
|
||||
protected ICuMemberSettlePeriodService iCuMemberSettlePeriodService;
|
||||
@Autowired
|
||||
protected ICuMemberAssessService cuMemberAssessService;
|
||||
protected ICuMemberAssessService iCuMemberAssessService;
|
||||
|
||||
@DubboReference
|
||||
ISaOrderServiceApi saOrderServiceApi;
|
||||
ISaOrderServiceApi iSaOrderServiceApi;
|
||||
@DubboReference
|
||||
ICurrencyServiceApi currencyServiceApi;
|
||||
ICurrencyServiceApi iCurrencyServiceApi;
|
||||
|
||||
/**
|
||||
* 获取等级对应的拓展奖配置
|
||||
*
|
||||
* @param bonusConfigDTO 奖金参数汇总
|
||||
* @param memberSettleExt 会员
|
||||
* @Description: 获取等级对应的拓展奖配置
|
||||
* @return: BdGrade
|
||||
* @Author: sui q
|
||||
* @Date: 2022/11/16 11:24
|
||||
*/
|
||||
protected BdGrade getGradeExpand(BonusConfigDTO bonusConfigDTO, CuMemberSettleExt memberSettleExt) {
|
||||
return bonusConfigDTO.getGradeMap().get(memberSettleExt.getPkSettleCountry().toString() + "_" + memberSettleExt.getPkGrade());
|
||||
|
@ -98,27 +96,29 @@ public abstract class BonusSettleHandle {
|
|||
}
|
||||
|
||||
/**
|
||||
* 获取扩展比例(拓展配置比例 >= 等级拓展比例,取等级拓展比例)
|
||||
* -- 获得国家对应的4-n参数比例
|
||||
*
|
||||
* @param bonusConfigDTO 奖金配置汇总
|
||||
* @param memberSettleExt 会员
|
||||
* @param endTouch 4-n的次数
|
||||
* @param bdGrade 等级
|
||||
* @Description: 获得国家对应的4-n参数比例
|
||||
* @return: BigDecimal
|
||||
* @Author: sui q
|
||||
* @Date: 2022/11/16 11:27
|
||||
* @param addTouch 配置追加的碰次
|
||||
*/
|
||||
protected BigDecimal getCountryExpand(BonusConfigDTO bonusConfigDTO, CuMemberSettleExt memberSettleExt, Integer endTouch, BdGrade bdGrade,
|
||||
BigDecimal addTouch, BigDecimal editExpandRatio) {
|
||||
BonusExpandDTO bonusExpand = bonusConfigDTO.getBonusExpandMap().get(memberSettleExt.getPkSettleCountry());
|
||||
// 总碰次 = 实际计算出来的碰次 + 配置追加的碰次
|
||||
BigDecimal totalTouch = ComputeUtil.computeAdd(BigDecimal.valueOf(endTouch), addTouch);
|
||||
// 配置的4-N总比例(一般26%)
|
||||
BigDecimal expandRatio = bonusExpand.getExpandRatio();
|
||||
if (memberSettleExt.getPkVertex() != null && memberSettleExt.getPkVertex().equals(377L)) {
|
||||
expandRatio = BigDecimal.valueOf(13);
|
||||
} else if (ComputeUtil.compareValue(editExpandRatio)) {
|
||||
if (ComputeUtil.compareValue(editExpandRatio)) {
|
||||
expandRatio = editExpandRatio;
|
||||
}
|
||||
// 4-N拓展比例 % 总碰次,得出一碰的比例
|
||||
BigDecimal countryExpandRatio = ComputeUtil.computeDivide(expandRatio, totalTouch);
|
||||
if (ComputeUtil.compareValue(countryExpandRatio, bdGrade.getExpandRatio())) {
|
||||
// 一碰的比例大于等级的拓展比例,使用等于的拓展比例
|
||||
return bdGrade.getExpandRatio();
|
||||
}
|
||||
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) {
|
||||
BonusExpandDTO bonusExpand = bonusConfigDTO.getBonusExpandMap().get(memberSettleExt.getPkSettleCountry());
|
||||
BigDecimal expandRatio = bonusExpand.getExpandRatio();
|
||||
if (memberSettleExt.getPkVertex() != null && memberSettleExt.getPkVertex().equals(377L)) {
|
||||
expandRatio = BigDecimal.valueOf(13);
|
||||
} else if (ComputeUtil.compareValue(editExpandRatio)) {
|
||||
if (ComputeUtil.compareValue(editExpandRatio)) {
|
||||
expandRatio = editExpandRatio;
|
||||
}
|
||||
// 验证是否是爱美视团队
|
||||
BigDecimal countryExpandRatio = ComputeUtil.computeDivide(expandRatio, BigDecimal.valueOf(endTouch));
|
||||
if (ComputeUtil.compareValue(countryExpandRatio, bdGrade.getRepurchaseRatio())) {
|
||||
return bdGrade.getRepurchaseRatio();
|
||||
|
@ -720,9 +717,9 @@ public abstract class BonusSettleHandle {
|
|||
}
|
||||
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);
|
||||
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) {
|
||||
Integer pkRate = saOrder.getPkRate();
|
||||
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();
|
||||
}
|
||||
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) {
|
||||
Set<Long> memberSet = new HashSet<>();
|
||||
saOrderList.forEach(saOrderExt -> memberSet.add(saOrderExt.getPkMember()));
|
||||
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryCuMemberSettleParent(settleTableName, memberSet);
|
||||
List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.batchQueryCuMemberSettleParent(settleTableName, memberSet);
|
||||
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
|
||||
return cuMemberSettleExtList;
|
||||
}
|
||||
|
@ -1156,15 +1153,18 @@ public abstract class BonusSettleHandle {
|
|||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* @description: 根据会员主键列表获得会员只
|
||||
* @author: sui q
|
||||
* @date: 17:29
|
||||
* @param: null null
|
||||
**/
|
||||
/**
|
||||
* 根据会员主键列表获得会员
|
||||
*
|
||||
* @param cuMemberSettleExtMap
|
||||
* @param settleDate
|
||||
* @param settleTableName
|
||||
* @param memberSet
|
||||
* @return
|
||||
*/
|
||||
protected Map<Long, CuMemberAssess> packageMemberSettleByPkMemberSet(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleDate, String settleTableName, Set<Long> memberSet) {
|
||||
if (memberSet.size() > 0) {
|
||||
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleByMemberPk(settleTableName, memberSet);
|
||||
List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleByMemberPk(settleTableName, memberSet);
|
||||
// 初始化父类网体的值
|
||||
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
|
||||
return getLongCuMemberAssessMap(settleDate, cuMemberSettleExtList);
|
||||
|
|
|
@ -120,7 +120,7 @@ public class BonusSettleHiFunHandle extends BonusSettleHandle {
|
|||
}
|
||||
});
|
||||
if (haiFunMemberSet.size() > 0) {
|
||||
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleParentByMemberPk(settleTableName, haiFunMemberSet);
|
||||
List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleParentByMemberPk(settleTableName, haiFunMemberSet);
|
||||
// 初始化父类网体的值
|
||||
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ public class BonusSettleMallHandle extends BonusSettleHandle {
|
|||
}
|
||||
});
|
||||
if (queryMallSaOrderList.size() > 0) {
|
||||
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleBySaOrder(settleTableName, queryMallSaOrderList);
|
||||
List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleBySaOrder(settleTableName, queryMallSaOrderList);
|
||||
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
|
||||
}
|
||||
mallSaOrderList.forEach(saOrderExt -> {
|
||||
|
|
|
@ -134,22 +134,22 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
|||
}
|
||||
|
||||
/**
|
||||
* 计算复购拓展收益
|
||||
*
|
||||
* @param settleTableName 结算表
|
||||
* @param period 期间
|
||||
* @param bonusConfigDTO 参数
|
||||
* @param purchaseOrderList 首单
|
||||
* @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<CuMemberBonusExpand> cuMemberBonusExpandList = new ArrayList<>();
|
||||
// 获取所有订单的上级,根据订单往上一步步计算
|
||||
// key:订单ID,value:订单向上找安置人列表
|
||||
Map<Long, List<CuMemberSettleExt>> memberSettleMap = cuMemberTreeService.batchQueryCuMemberSettlePlaceParent(settleTableName, purchaseOrderList);
|
||||
Map<Long, List<CuMemberSettleExt>> memberSettleMap = iCuMemberTreeService.batchQueryCuMemberSettlePlaceParent(settleTableName, purchaseOrderList);
|
||||
|
||||
List<CuMemberSettleExt> memberSettleExtList = new ArrayList<>();
|
||||
for (List<CuMemberSettleExt> cuMemberSettleExt : memberSettleMap.values()) {
|
||||
memberSettleExtList.addAll(cuMemberSettleExt);
|
||||
|
@ -157,8 +157,10 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
|||
getMemberSettle(cuMemberSettleExtMap, memberSettleExtList);
|
||||
// key:会员ID,value:会员考核信息
|
||||
Map<Long, CuMemberAssess> cuMemberAssessMap = getCuMemberAssessMap(cuMemberSettleExtMap, settleDateStr, memberSettleExtList);
|
||||
|
||||
for (SaOrderExt saOrderExt : purchaseOrderList) {
|
||||
if (!validateSecondOrderExistBonus(saOrderExt, EBonusItems.CONSUMPTION_EXPANSION_INCOME.getValue())) {
|
||||
// 校验二次发货需不需要计算量碰
|
||||
continue;
|
||||
}
|
||||
// 所有需要计算的父节点,只计算新增
|
||||
|
@ -175,10 +177,11 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
|||
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);
|
||||
if (newMemberBonusExpandList.size() > 0) {
|
||||
cuMemberBonusExpandList.addAll(newMemberBonusExpandList);
|
||||
if (expandList.size() > 0) {
|
||||
cuMemberBonusExpandList.addAll(expandList);
|
||||
}
|
||||
}
|
||||
// 根据订单往上穿业绩,只计算新增
|
||||
|
@ -216,12 +219,18 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
|||
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) {
|
||||
Map<Integer, BonusExpandDTO> bdBonusExpandMap = bonusConfigDTO.getBonusExpandMap();
|
||||
/**
|
||||
* 计算复购量奖(拓展收益)
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
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<>();
|
||||
|
||||
Map<Integer, BonusExpandDTO> bdBonusExpandMap = bonusConfigDTO.getBonusExpandMap();
|
||||
CuMemberSettleExt settleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
|
||||
if (settleExt == null) {
|
||||
return cuMemberBonusExpandList;
|
||||
|
@ -233,8 +242,10 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
|||
// 先计算新增,根据新增计算碰次
|
||||
// 先进行初始化所有的安置人,存储需要修改的值,cuMemberSettleExtMap最终修改的
|
||||
// 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) {
|
||||
// 判断是否>3 是否需要启动4-N,4-N的参数按照伞上各安置人结算国家进行获取
|
||||
|
@ -248,27 +259,30 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
|||
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()) {
|
||||
if (targetMemberSettleExt == null
|
||||
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
||||
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
|
||||
continue;
|
||||
}
|
||||
// 验证是否有当前奖金项
|
||||
if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CONSUMPTION_EXPANSION_INCOME.getValue())) {
|
||||
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()))) {
|
||||
// 根据会员等级获取对应的配置
|
||||
BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt);
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -279,22 +293,25 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
|||
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()) {
|
||||
if (targetMemberSettleExt == null
|
||||
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
||||
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
|
||||
continue;
|
||||
}
|
||||
// 验证是否有当前奖金项
|
||||
if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CONSUMPTION_EXPANSION_INCOME.getValue())) {
|
||||
continue;
|
||||
}
|
||||
// 判断左右区是否有值,找到有值的就是有碰次,碰完左区或右区肯定有变为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()))) {
|
||||
// 根据会员等级获取对应的配置
|
||||
BdGrade bdGrade = getGradeExpand(bonusConfigDTO, targetMemberSettleExt);
|
||||
// 获取国家4-n的配置
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -304,15 +321,16 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
|||
return cuMemberBonusExpandList;
|
||||
}
|
||||
|
||||
private int calculateTouchNum(Map<Long, CuMemberRiskControl> riskControlMap, String settleName, Map<Long, CuMemberAssess> cuMemberAssessMap,
|
||||
Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, SaOrderExt saOrderExt, List<CuMemberSettleExt> cuMemberSettleExtList, BonusConfigDTO bonusConfigDTO) {
|
||||
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;
|
||||
for (CuMemberSettleExt cuMemberSettleExt : cuMemberSettleExtList) {
|
||||
// 数据已经准备好了,肯定有值,map中是实际的值,先计算新增,然后根据新增结算计算碰次,list是为了存储碰次的顺序
|
||||
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkPlaceParent());
|
||||
if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() ||
|
||||
EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() ||
|
||||
EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) {
|
||||
if (targetMemberSettleExt == null
|
||||
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
||||
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|
||||
|| EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) {
|
||||
continue;
|
||||
}
|
||||
// 验证是否计算奖金
|
||||
|
@ -320,74 +338,73 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
|||
if (bdGrade.getRepurchaseCalculate() != null && EYesNo.NO.getIntValue() == bdGrade.getRepurchaseCalculate()) {
|
||||
continue;
|
||||
}
|
||||
if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) {
|
||||
if (EPlaceDept.LEFT_DEPT.getValue() == cuMemberSettleExt.getPlaceDept()) {
|
||||
// 左区
|
||||
// K值设置
|
||||
if (riskControlMap.containsKey(targetMemberSettleExt.getPkMember())) {
|
||||
CuMemberRiskControl cuMemberRiskControl = riskControlMap.get(targetMemberSettleExt.getPkMember());
|
||||
targetMemberSettleExt.setANewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getANewAmount(), ComputeUtil.computeBonusMultiply(convertLocalCurrency(saOrderExt, bonusConfigDTO), cuMemberRiskControl.getAchieveRatio())));
|
||||
targetMemberSettleExt.setANewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getANewPv(), ComputeUtil.computeBonusMultiply(saOrderExt.getUploadAchieve(), cuMemberRiskControl.getAchieveRatio())));
|
||||
targetMemberSettleExt.setABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getABalance(), ComputeUtil.computeBonusMultiply(saOrderExt.getUploadAchieve(), cuMemberRiskControl.getAchieveRatio())));
|
||||
} else {
|
||||
targetMemberSettleExt.setANewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getANewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
|
||||
targetMemberSettleExt.setANewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getANewPv(), saOrderExt.getUploadAchieve()));
|
||||
targetMemberSettleExt.setABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getABalance(), saOrderExt.getUploadAchieve()));
|
||||
}
|
||||
targetMemberSettleExt.setRABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRABalance(), saOrderExt.getUploadAchieve()));
|
||||
// }
|
||||
// if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) {
|
||||
if (EPlaceDept.LEFT_DEPT.getValue() == cuMemberSettleExt.getPlaceDept()) {
|
||||
// 左区
|
||||
// K值设置
|
||||
if (riskControlMap.containsKey(targetMemberSettleExt.getPkMember())) {
|
||||
CuMemberRiskControl cuMemberRiskControl = riskControlMap.get(targetMemberSettleExt.getPkMember());
|
||||
targetMemberSettleExt.setANewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getANewAmount(), ComputeUtil.computeBonusMultiply(convertLocalCurrency(saOrderExt, bonusConfigDTO), cuMemberRiskControl.getAchieveRatio())));
|
||||
targetMemberSettleExt.setANewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getANewPv(), ComputeUtil.computeBonusMultiply(saOrderExt.getUploadAchieve(), cuMemberRiskControl.getAchieveRatio())));
|
||||
targetMemberSettleExt.setABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getABalance(), ComputeUtil.computeBonusMultiply(saOrderExt.getUploadAchieve(), cuMemberRiskControl.getAchieveRatio())));
|
||||
} else {
|
||||
// 右区
|
||||
if (riskControlMap.containsKey(targetMemberSettleExt.getPkMember())) {
|
||||
CuMemberRiskControl cuMemberRiskControl = riskControlMap.get(targetMemberSettleExt.getPkMember());
|
||||
targetMemberSettleExt.setBNewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewAmount(), ComputeUtil.computeBonusMultiply(convertLocalCurrency(saOrderExt, bonusConfigDTO), cuMemberRiskControl.getAchieveRatio())));
|
||||
targetMemberSettleExt.setBNewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewPv(), ComputeUtil.computeBonusMultiply(saOrderExt.getUploadAchieve(), cuMemberRiskControl.getAchieveRatio())));
|
||||
targetMemberSettleExt.setBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getBBalance(), ComputeUtil.computeBonusMultiply(saOrderExt.getUploadAchieve(), cuMemberRiskControl.getAchieveRatio())));
|
||||
} else {
|
||||
targetMemberSettleExt.setBNewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
|
||||
targetMemberSettleExt.setBNewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewPv(), saOrderExt.getUploadAchieve()));
|
||||
targetMemberSettleExt.setBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getBBalance(), saOrderExt.getUploadAchieve()));
|
||||
}
|
||||
targetMemberSettleExt.setRBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRBBalance(), saOrderExt.getUploadAchieve()));
|
||||
}
|
||||
// 判断左右区是否有值,左右区有值有碰次
|
||||
if (ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance())) {
|
||||
// 国内量奖修改为考核不通过的不占用4-N,不算奖金
|
||||
// 验证是否验证考核
|
||||
touchNum++;
|
||||
}
|
||||
// 判断左右区是否有值,左右区有值有碰次
|
||||
if (ComputeUtil.compareValue(targetMemberSettleExt.getRABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRBBalance())) {
|
||||
BigDecimal minAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getRABalance(), targetMemberSettleExt.getRBBalance());
|
||||
targetMemberSettleExt.setRABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRABalance(), minAchieve));
|
||||
targetMemberSettleExt.setRBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRBBalance(), minAchieve));
|
||||
targetMemberSettleExt.setANewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getANewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
|
||||
targetMemberSettleExt.setANewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getANewPv(), saOrderExt.getUploadAchieve()));
|
||||
targetMemberSettleExt.setABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getABalance(), saOrderExt.getUploadAchieve()));
|
||||
}
|
||||
targetMemberSettleExt.setRABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRABalance(), saOrderExt.getUploadAchieve()));
|
||||
} else {
|
||||
// 嗨粉、海粉没有量奖
|
||||
if (EPlaceDept.LEFT_DEPT.getValue() == cuMemberSettleExt.getPlaceDept()) {
|
||||
// 左区
|
||||
targetMemberSettleExt.setRepANewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getRepANewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
|
||||
targetMemberSettleExt.setRepANewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getRepANewPv(), saOrderExt.getUploadAchieve()));
|
||||
targetMemberSettleExt.setRepABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRepABalance(), saOrderExt.getUploadAchieve()));
|
||||
targetMemberSettleExt.setRRepABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRRepABalance(), saOrderExt.getUploadAchieve()));
|
||||
// 右区
|
||||
if (riskControlMap.containsKey(targetMemberSettleExt.getPkMember())) {
|
||||
CuMemberRiskControl cuMemberRiskControl = riskControlMap.get(targetMemberSettleExt.getPkMember());
|
||||
targetMemberSettleExt.setBNewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewAmount(), ComputeUtil.computeBonusMultiply(convertLocalCurrency(saOrderExt, bonusConfigDTO), cuMemberRiskControl.getAchieveRatio())));
|
||||
targetMemberSettleExt.setBNewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewPv(), ComputeUtil.computeBonusMultiply(saOrderExt.getUploadAchieve(), cuMemberRiskControl.getAchieveRatio())));
|
||||
targetMemberSettleExt.setBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getBBalance(), ComputeUtil.computeBonusMultiply(saOrderExt.getUploadAchieve(), cuMemberRiskControl.getAchieveRatio())));
|
||||
} else {
|
||||
// 右区
|
||||
targetMemberSettleExt.setRepBNewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getRepBNewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
|
||||
targetMemberSettleExt.setRepBNewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getRepBNewPv(), saOrderExt.getUploadAchieve()));
|
||||
targetMemberSettleExt.setRepBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRepBBalance(), saOrderExt.getUploadAchieve()));
|
||||
targetMemberSettleExt.setRRepBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRRepBBalance(), saOrderExt.getUploadAchieve()));
|
||||
}
|
||||
// 判断左右区是否有值,左右区有值有碰次
|
||||
if (ComputeUtil.compareValue(targetMemberSettleExt.getRepABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRepBBalance())) {
|
||||
touchNum++;
|
||||
}
|
||||
// 判断左右区是否有值,左右区有值有碰次
|
||||
if (ComputeUtil.compareValue(targetMemberSettleExt.getRRepABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRRepBBalance())) {
|
||||
BigDecimal minAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getRRepABalance(), targetMemberSettleExt.getRRepBBalance());
|
||||
targetMemberSettleExt.setRRepABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRRepABalance(), minAchieve));
|
||||
targetMemberSettleExt.setRRepBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRRepBBalance(), minAchieve));
|
||||
targetMemberSettleExt.setBNewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
|
||||
targetMemberSettleExt.setBNewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewPv(), saOrderExt.getUploadAchieve()));
|
||||
targetMemberSettleExt.setBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getBBalance(), saOrderExt.getUploadAchieve()));
|
||||
}
|
||||
targetMemberSettleExt.setRBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRBBalance(), saOrderExt.getUploadAchieve()));
|
||||
}
|
||||
// 判断左右区是否有值,左右区有值有碰次
|
||||
if (ComputeUtil.compareValue(targetMemberSettleExt.getABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getBBalance())) {
|
||||
// 国内量奖修改为考核不通过的不占用4-N,不算奖金
|
||||
// 验证是否验证考核
|
||||
touchNum++;
|
||||
}
|
||||
// 判断左右区是否有值,左右区有值有碰次
|
||||
if (ComputeUtil.compareValue(targetMemberSettleExt.getRABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRBBalance())) {
|
||||
BigDecimal minAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getRABalance(), targetMemberSettleExt.getRBBalance());
|
||||
targetMemberSettleExt.setRABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRABalance(), minAchieve));
|
||||
targetMemberSettleExt.setRBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRBBalance(), minAchieve));
|
||||
}
|
||||
// } else {
|
||||
// // 嗨粉、海粉没有量奖
|
||||
// if (EPlaceDept.LEFT_DEPT.getValue() == cuMemberSettleExt.getPlaceDept()) {
|
||||
// // 左区
|
||||
// targetMemberSettleExt.setRepANewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getRepANewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
|
||||
// targetMemberSettleExt.setRepANewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getRepANewPv(), saOrderExt.getUploadAchieve()));
|
||||
// targetMemberSettleExt.setRepABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRepABalance(), saOrderExt.getUploadAchieve()));
|
||||
// targetMemberSettleExt.setRRepABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRRepABalance(), saOrderExt.getUploadAchieve()));
|
||||
// } else {
|
||||
// // 右区
|
||||
// targetMemberSettleExt.setRepBNewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getRepBNewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
|
||||
// targetMemberSettleExt.setRepBNewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getRepBNewPv(), saOrderExt.getUploadAchieve()));
|
||||
// targetMemberSettleExt.setRepBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRepBBalance(), saOrderExt.getUploadAchieve()));
|
||||
// targetMemberSettleExt.setRRepBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getRRepBBalance(), saOrderExt.getUploadAchieve()));
|
||||
// }
|
||||
// // 判断左右区是否有值,左右区有值有碰次
|
||||
// if (ComputeUtil.compareValue(targetMemberSettleExt.getRepABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRepBBalance())) {
|
||||
// touchNum++;
|
||||
// }
|
||||
// // 判断左右区是否有值,左右区有值有碰次
|
||||
// if (ComputeUtil.compareValue(targetMemberSettleExt.getRRepABalance()) && ComputeUtil.compareValue(targetMemberSettleExt.getRRepBBalance())) {
|
||||
// BigDecimal minAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getRRepABalance(), targetMemberSettleExt.getRRepBBalance());
|
||||
// targetMemberSettleExt.setRRepABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRRepABalance(), minAchieve));
|
||||
// targetMemberSettleExt.setRRepBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRRepBBalance(), minAchieve));
|
||||
// }
|
||||
// }
|
||||
}
|
||||
return touchNum;
|
||||
}
|
||||
|
@ -647,7 +664,7 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
|||
if (specialOrderList.size() > 0) {
|
||||
// 查找订单血缘上会员
|
||||
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();
|
||||
|
@ -938,6 +955,8 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
|||
}
|
||||
|
||||
/**
|
||||
* 计算复购量碰
|
||||
*
|
||||
* @param period 期间
|
||||
* @param cuMemberBonusMap 奖金汇总
|
||||
* @param cuMemberBonusExpandList 拓展奖奖金明细
|
||||
|
@ -948,50 +967,55 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
|||
* @param targetMemberSettleExt 获得奖金的人
|
||||
* @param bdGrade 等级对应的参数
|
||||
* @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,
|
||||
BonusConfigDTO bonusConfigDTO, Map<String, String> systemConfigMap, List<CuMemberBonusExpand> cuMemberBonusExpandList, SaOrderExt saOrderExt, int touchNum, int i,
|
||||
CuMemberSettleExt sourceMemberSettleExt, CuMemberSettleExt targetMemberSettleExt, BdGrade bdGrade, BigDecimal countryExpandRatio, Integer pkBonusItems,
|
||||
Map<Long, CuMemberAssess> cuMemberAssessMap) {
|
||||
// 验证封顶方式 1=日 2=周,若是周的话需要获取 周奖金
|
||||
BonusConfigDTO bonusConfigDTO, Map<String, String> systemConfigMap, List<CuMemberBonusExpand> cuMemberBonusExpandList,
|
||||
SaOrderExt saOrderExt, int touchNum, int i, CuMemberSettleExt sourceMemberSettleExt, CuMemberSettleExt targetMemberSettleExt,
|
||||
BdGrade bdGrade, BigDecimal countryExpandRatio, Map<Long, CuMemberAssess> cuMemberAssessMap) {
|
||||
// 获取拓展收益奖项ID
|
||||
Integer pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CONSUMPTION_EXPANSION_INCOME.getValue());
|
||||
|
||||
// 验证封顶方式 1=日 2=周,若是周的话需要获取 周奖金(首购已经去掉周封顶逻辑,此处周封顶默认0,后续代码可以不需要修改)
|
||||
BigDecimal weekRepExpandIncome = BigDecimal.ZERO;
|
||||
if (systemConfigMap.containsKey(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()) &&
|
||||
weekMemberBonusMap.containsKey(targetMemberSettleExt.getPkMember())) {
|
||||
weekRepExpandIncome = weekMemberBonusMap.get(targetMemberSettleExt.getPkMember()).getRepurExpandIncome();
|
||||
}
|
||||
}
|
||||
// if (systemConfigMap.containsKey(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()) &&
|
||||
// weekMemberBonusMap.containsKey(targetMemberSettleExt.getPkMember())) {
|
||||
// weekRepExpandIncome = weekMemberBonusMap.get(targetMemberSettleExt.getPkMember()).getRepurExpandIncome();
|
||||
// }
|
||||
// }
|
||||
|
||||
// 国内使用首购比例首购封顶
|
||||
BigDecimal gradeExpandRatio = bdGrade.getRepurchaseRatio();
|
||||
if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) {
|
||||
gradeExpandRatio = bdGrade.getExpandRatio();
|
||||
// 验证受益人等级
|
||||
CuMember cuMember = cuMemberService.getMember(targetMemberSettleExt.getMemberCode());
|
||||
if (cuMember != null && DateUtils.compareDate(DateUtils.parseStringToDate("2024-09-11"), cuMember.getPayTime()) > 0) {
|
||||
if (targetMemberSettleExt.getGradeValue() == EGrade.VIP.getValue()) {
|
||||
if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(11)) && (i <= 3 || touchNum <= 10)) {
|
||||
countryExpandRatio = BigDecimal.valueOf(13);
|
||||
}
|
||||
} else if (targetMemberSettleExt.getGradeValue() == EGrade.MAKER.getValue()) {
|
||||
if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(10)) && (i <= 3 || touchNum <= 10)) {
|
||||
countryExpandRatio = BigDecimal.valueOf(11);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// // TODO new 中国会员,指定日期之前计算比例
|
||||
// if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) {
|
||||
// gradeExpandRatio = bdGrade.getExpandRatio();
|
||||
// // 验证受益人等级
|
||||
// CuMember cuMember = cuMemberService.getMember(targetMemberSettleExt.getMemberCode());
|
||||
// if (cuMember != null && DateUtils.compareDate(DateUtils.parseStringToDate("2024-09-11"), cuMember.getPayTime()) > 0) {
|
||||
// if (targetMemberSettleExt.getGradeValue() == EGrade.VIP.getValue()) {
|
||||
// if (ComputeUtil.compareValue(countryExpandRatio, BigDecimal.valueOf(11)) && (i <= 3 || touchNum <= 10)) {
|
||||
// countryExpandRatio = BigDecimal.valueOf(13);
|
||||
// }
|
||||
// } 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);
|
||||
// 左右区获取最小的
|
||||
BigDecimal calAchieve;
|
||||
if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) {
|
||||
calAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getABalance(), targetMemberSettleExt.getBBalance());
|
||||
} else {
|
||||
calAchieve = ComputeUtil.obtainMinAchieve(targetMemberSettleExt.getRepABalance(), targetMemberSettleExt.getRepBBalance());
|
||||
}
|
||||
|
||||
CuMemberBonusExpand cuMemberBonusExpand = getCuMemberBonusExpand(saOrderExt, touchNum, i, targetMemberSettleExt, countryExpandRatio, cuMemberBonus, calAchieve, pkBonusItems, BigDecimal.ZERO);
|
||||
if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) {
|
||||
targetMemberSettleExt.setABalance(ComputeUtil.computeSubtract(targetMemberSettleExt.getABalance(), calAchieve));
|
||||
|
@ -1001,32 +1025,51 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
|||
targetMemberSettleExt.setRepABalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRepABalance(), calAchieve));
|
||||
targetMemberSettleExt.setRepBBalance(ComputeUtil.computeSubtractAbs(targetMemberSettleExt.getRepBBalance(), calAchieve));
|
||||
}
|
||||
|
||||
// 计算收益 先计算出会员最大的收益
|
||||
BigDecimal maxIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), gradeExpandRatio);
|
||||
BigDecimal actualIncome = ComputeUtil.computeBonusMultiply(cuMemberBonusExpand.getCalAchieve(), countryExpandRatio);
|
||||
|
||||
// 获取等级对应的封顶值
|
||||
BigDecimal expandIncome = ComputeUtil.computeAdd(ComputeUtil.computeAdd(cuMemberBonus.getRepurExpandIncome(), actualIncome), weekRepExpandIncome);
|
||||
|
||||
if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) {
|
||||
// 获取等级对应的封顶值
|
||||
// 获取等级对应的封顶值(中国重新赋值封顶值)
|
||||
expandIncome = ComputeUtil.computeAdd(ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), expandIncome), weekRepExpandIncome);
|
||||
// 判断收益 是否超过封顶值,超过的话变为封顶值
|
||||
// 判断是否烧伤,判断原奖金是否>=封顶值,奖金到了就是烧伤
|
||||
// 验证会员状态 封停状态跟冻结都正常计算奖金,封停的账号发放的时候奖金发放为0,冻结的账号正常发放,不能登录
|
||||
packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), maxIncome, actualIncome);
|
||||
|
||||
if (ComputeUtil.compareValue(ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome()), bdGrade.getExpandCapping())) {
|
||||
// 拓展收益 累加 复购收益 >= 封顶值
|
||||
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()) {
|
||||
cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
|
||||
// 状态为烧伤
|
||||
// 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());
|
||||
}
|
||||
}
|
||||
expandIncome = ComputeUtil.computeSubtract(bdGrade.getExpandCapping(), ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome()));
|
||||
} else if (ComputeUtil.compareGreaterThan(expandIncome, bdGrade.getExpandCapping())) {
|
||||
BigDecimal realIncome = ComputeUtil.computeSubtract(ComputeUtil.computeSubtract(bdGrade.getExpandCapping(), weekRepExpandIncome), ComputeUtil.computeAdd(cuMemberBonus.getExpandIncome(), cuMemberBonus.getRepurExpandIncome()));
|
||||
//存在一半烧伤一半正常的值,拆2条
|
||||
// 存在一半烧伤一半正常的值,拆2条
|
||||
// 拓展明细表 进行修改
|
||||
packageCuMemberBonusExpand(cuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), 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());
|
||||
// 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());
|
||||
}
|
||||
}
|
||||
packageCuMemberBonusExpand(fireCuMemberBonusExpand, cuMemberBonus, bdGrade.getExpandCapping(), fireIncome, fireIncome);
|
||||
// 收益占比
|
||||
|
@ -1036,35 +1079,41 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
|||
// 拓展收益取封顶最大值
|
||||
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())) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
// 暂时不需要处理非中国的逻辑
|
||||
// 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())) {
|
||||
// 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);
|
||||
// }
|
||||
// }
|
||||
|
||||
// 收益占比
|
||||
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusExpand, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
|
||||
repurchaseExpandRemark(saOrderExt, cuMemberBonusExpand, sourceMemberSettleExt, targetMemberSettleExt);
|
||||
|
||||
// 正常状态的辅导奖需要判断复购考核,复购考核不通过的状态变为烧伤
|
||||
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()
|
||||
&& EYesNo.NO.getIntValue() == targetMemberSettleExt.getPurchaseStatus()) {
|
||||
|
@ -1074,16 +1123,18 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
|||
cuMemberBonusExpand.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusExpand.getIncomeStatus()) {
|
||||
if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) {
|
||||
cuMemberBonus.setRepurExpandIncome(ComputeUtil.computeSubtract(expandIncome, cuMemberBonus.getExpandIncome()));
|
||||
setPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusExpand);
|
||||
} else {
|
||||
cuMemberBonus.setRepurExpandIncome(ComputeUtil.computeSubtract(expandIncome, weekRepExpandIncome));
|
||||
setPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusExpand);
|
||||
}
|
||||
cuMemberBonus.setRepurExpandIncome(ComputeUtil.computeSubtract(expandIncome, cuMemberBonus.getExpandIncome()));
|
||||
setPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusExpand);
|
||||
// if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY)) {
|
||||
// cuMemberBonus.setRepurExpandIncome(ComputeUtil.computeSubtract(expandIncome, cuMemberBonus.getExpandIncome()));
|
||||
// setPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusExpand);
|
||||
// } else {
|
||||
// cuMemberBonus.setRepurExpandIncome(ComputeUtil.computeSubtract(expandIncome, weekRepExpandIncome));
|
||||
// setPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusExpand);
|
||||
// }
|
||||
}
|
||||
repurchaseExpandRemark(saOrderExt, cuMemberBonusExpand, sourceMemberSettleExt, targetMemberSettleExt);
|
||||
cuMemberBonusExpandList.add(cuMemberBonusExpand);
|
||||
}
|
||||
|
||||
|
|
|
@ -809,8 +809,8 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
|
|||
// 先计算复购在计算首购
|
||||
// 计算复购
|
||||
if (repurchaseOrderList.size() > 0) {
|
||||
leXueRangeParam = calculatePurchaseOrder(riskControlMap, cuMemberSettleExtMap, currentSettleTableName, settleDate, rangeDtoMap, awardsMap, bonusConfigDTO,
|
||||
systemConfigMap, repurchaseOrderList, period, weekMemberBonusMap, cuMemberBonusMap, recordDetailVO, cuAwardsControlMap, cuBonusExpandExtMap);
|
||||
leXueRangeParam = calculatePurchaseOrder(riskControlMap, cuMemberSettleExtMap, currentSettleTableName, settleDate, systemConfigMap, bonusConfigDTO,
|
||||
repurchaseOrderList, period, weekMemberBonusMap, cuMemberBonusMap, recordDetailVO, awardsMap, cuAwardsControlMap, cuBonusExpandExtMap, rangeDtoMap);
|
||||
}
|
||||
// 计算首购
|
||||
if (firPurchaseOrderList.size() > 0) {
|
||||
|
@ -971,15 +971,15 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
|
|||
* @param bonusConfigDTO 各个国家奖金参数
|
||||
* @param firPurchaseOrderList 首购订单
|
||||
*/
|
||||
private void calculateFirPurchaseOrder(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, String settleDate, Map<String, String> systemConfigMap,
|
||||
BonusConfigDTO bonusConfigDTO, List<SaOrderExt> firPurchaseOrderList, Integer period, Map<Long, CuMemberBonus> weekMemberBonusMap,
|
||||
private void calculateFirPurchaseOrder(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, String settleDate,
|
||||
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, CuAwardsControl> cuAwardsControlMap, Map<Long, CuBonusExpandExt> cuBonusExpandExtMap) {
|
||||
// 获得国家是三单循环还是四单循环
|
||||
// 获得升级方式是纳入三单循环还是固定值
|
||||
// 获取有订单国家的系统参数,获得三单循环还是四单循环 key 国家+系统参数key
|
||||
// 需要更新的会员结算表 cuMemberSettleExtMap
|
||||
//***************************计算推荐奖(直推级差、直推三单循环)******************************/
|
||||
//***************************计算推荐奖(直推级差、直推三四单循环)******************************/
|
||||
List<CuMemberBonusPush> cuMemberBonusPushList = bonusSettleFirstPurchaseHandle.calculateRecommendBonus(cuMemberSettleExtMap, settleTableName, bonusConfigDTO, systemConfigMap, firPurchaseOrderList, period, cuMemberBonusMap, awardsMap);
|
||||
bonusRecordDetailVO.setCuMemberBonusPushList(cuMemberBonusPushList);
|
||||
|
||||
|
@ -992,7 +992,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
|
|||
bonusRecordDetailVO.getCuMemberBonusExpandList().addAll(cuMemberBonusExpandList);
|
||||
}
|
||||
}
|
||||
//*********************************计算领导奖************************/
|
||||
//*********************************计算领导奖(辅导收益)************************/
|
||||
// 判断是否有量奖,有量奖有辅导奖
|
||||
// List<CuMemberBonusCoach> cuMemberBonusCoachList = bonusSettleFirstPurchaseHandle.calculateCoachBonus(cuMemberSettleExtMap, settleTableName, settleDate, bonusConfigDTO, firPurchaseOrderList,
|
||||
// cuMemberBonusExpandList, period, cuMemberBonusMap, cuAwardsControlMap, riskControlMap);
|
||||
|
@ -1079,16 +1079,18 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
|
|||
}
|
||||
|
||||
/**
|
||||
* 计算首购订单的奖金
|
||||
* 计算复购订单的奖金
|
||||
*
|
||||
* @param settleTableName 结算日表
|
||||
* @param settleDate 结算日期
|
||||
* @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,
|
||||
Map<String, BdAwards> awardsMap, BonusConfigDTO bonusConfigDTO, Map<String, String> systemConfigMap, List<SaOrderExt> purchaseOrderList, Integer period, Map<Long, CuMemberBonus> weekMemberBonusMap,
|
||||
Map<Long, CuMemberBonus> cuMemberBonusMap, BonusRecordDetailVO bonusRecordDetailVO, Map<Long, CuAwardsControl> cuAwardsControlMap, Map<Long, CuBonusExpandExt> cuBonusExpandExtMap) {
|
||||
private LeXueRangeParam calculatePurchaseOrder(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, String settleDate,
|
||||
Map<String, String> systemConfigMap, BonusConfigDTO bonusConfigDTO, List<SaOrderExt> purchaseOrderList, Integer period, Map<Long, CuMemberBonus> weekMemberBonusMap,
|
||||
Map<Long, CuMemberBonus> cuMemberBonusMap, BonusRecordDetailVO bonusRecordDetailVO, Map<String, BdAwards> awardsMap,
|
||||
Map<Long, CuAwardsControl> cuAwardsControlMap, Map<Long, CuBonusExpandExt> cuBonusExpandExtMap, Map<String, RangeDTO> rangeDtoMap) {
|
||||
//****************************复购直推*****************************
|
||||
// 查找10代血缘,验证复购考核,考核通过的给与奖金 紧缩
|
||||
// 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);
|
||||
// }
|
||||
// }
|
||||
//****************************复购量奖*****************************/
|
||||
//****************************计算量奖(拓展收益)*****************************/
|
||||
List<CuMemberBonusExpand> cuMemberBonusExpandList = bonusSettlePurchaseHandle.calculateRepurchaseExpandBonus(riskControlMap, cuMemberSettleExtMap, settleTableName, settleDate, bonusConfigDTO, systemConfigMap, purchaseOrderList, period, weekMemberBonusMap, cuMemberBonusMap, cuBonusExpandExtMap);
|
||||
if (cuMemberBonusExpandList.size() > 0) {
|
||||
if (bonusRecordDetailVO.getCuMemberBonusExpandList() == null) {
|
||||
|
|
|
@ -36,12 +36,12 @@ import java.util.*;
|
|||
public class CuBonusExpandServiceImpl extends ServiceImpl<CuBonusExpandMapper, CuBonusExpand> implements ICuBonusExpandService {
|
||||
|
||||
@DubboReference
|
||||
ISaOrderServiceApi saOrderServiceApi;
|
||||
ISaOrderServiceApi iSaOrderServiceApi;
|
||||
|
||||
@Autowired
|
||||
private ICuMemberSettlePeriodService memberSettlePeriodService;
|
||||
private ICuMemberSettlePeriodService iCuMemberSettlePeriodService;
|
||||
@Autowired
|
||||
private IBonusSettleService bonusSettleService;
|
||||
private IBonusSettleService iBonusSettleService;
|
||||
|
||||
@Override
|
||||
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) {
|
||||
bonusExpandParam.setStartDate(settleDate);
|
||||
bonusExpandParam.setEndDate(DateUtils.afterDate(1, ChronoUnit.DAYS, endDate));
|
||||
CuMemberSettlePeriod startPeriod = memberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, bonusExpandParam.getStartDate()));
|
||||
CuMemberSettlePeriod endPeriod = memberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, endDate));
|
||||
CuMemberSettlePeriod startPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, bonusExpandParam.getStartDate()));
|
||||
CuMemberSettlePeriod endPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, endDate));
|
||||
bonusExpandParam.setStartPeriod(startPeriod.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());
|
||||
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();
|
||||
// 重算奖金
|
||||
bonusSettleService.repeatCuMemberBonusByExpand(settleDate, saOrderExtList);
|
||||
iBonusSettleService.repeatCuMemberBonusByExpand(settleDate, saOrderExtList);
|
||||
// 更新波比、业绩
|
||||
updateCuBonusExpandRatio(bonusExpandParam, "cu_member_repeat_bonus");
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
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.QueryWrapper;
|
||||
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.bonus.base.service.ICuMemberService;
|
||||
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.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
@ -23,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||
import java.math.BigDecimal;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 会员信息-奖衔升级记录 服务实现类
|
||||
|
@ -40,9 +44,19 @@ public class CuMemberAwardsServiceImpl extends ServiceImpl<CuMemberAwardsMapper,
|
|||
@Autowired
|
||||
private ICuMemberSettlePeriodService iCuMemberSettlePeriodService;
|
||||
|
||||
@DubboReference
|
||||
IAwardsServiceApi iAwardsServiceApi;
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
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);
|
||||
Integer period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDateStr).getPkId();
|
||||
|
@ -63,6 +77,10 @@ public class CuMemberAwardsServiceImpl extends ServiceImpl<CuMemberAwardsMapper,
|
|||
break;
|
||||
}
|
||||
}
|
||||
// TODO new 新制度中奖衔Q8、Q9、Q10,只需要校验左右区各有前一等级即可,不需要校验本身的业绩是否达标
|
||||
for (BdAwards bdAwards : bdAwardsList) {
|
||||
this.calculateAwardsSpec(bdAwards, settleTableName, settleDate, period);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -157,13 +175,13 @@ public class CuMemberAwardsServiceImpl extends ServiceImpl<CuMemberAwardsMapper,
|
|||
if (cuMemberAwardsList.size() > 0) {
|
||||
// 将变动值插入临时表中
|
||||
// 更新会员表
|
||||
iCuMemberService.updateCuMemberByPeriod(enoughAwardsMemberList, period);
|
||||
iCuMemberService.updateCuMemberByPeriod(period);
|
||||
// 更新结算网体表 -- 结算日期到当前日期的所有日结算表
|
||||
updateMemberAwardPeriod(settleDate);
|
||||
return Boolean.TRUE;
|
||||
} else {
|
||||
// 更新会员表
|
||||
iCuMemberService.updateCuMemberByPeriod(null, period);
|
||||
iCuMemberService.updateCuMemberByPeriod(period);
|
||||
// 更新结算网体表 -- 结算日期到当前日期的所有日结算表
|
||||
updateMemberAwardPeriod(settleDate);
|
||||
return Boolean.FALSE;
|
||||
|
@ -181,6 +199,40 @@ public class CuMemberAwardsServiceImpl extends ServiceImpl<CuMemberAwardsMapper,
|
|||
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
|
||||
public void deleteCuMemberAwards(Long pkOrder, Long pkApprove, Date currentDateTime) {
|
||||
LambdaUpdateWrapper<CuMemberAwards> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
|
|
|
@ -35,9 +35,9 @@ import java.util.List;
|
|||
public class CuMemberRiskControlServiceImpl extends ServiceImpl<CuMemberRiskControlMapper, CuMemberRiskControl> implements ICuMemberRiskControlService {
|
||||
|
||||
@DubboReference
|
||||
IApprovalServiceApi approvalServiceApi;
|
||||
IApprovalServiceApi iApprovalServiceApi;
|
||||
@DubboReference
|
||||
ICuMemberServiceLogServiceApi memberServiceLogServiceApi;
|
||||
ICuMemberServiceLogServiceApi iCuMemberServiceLogServiceApi;
|
||||
|
||||
@Override
|
||||
public List<CuMemberRiskControl> queryCuMemberRiskControl(Date settleDate) {
|
||||
|
@ -92,7 +92,7 @@ public class CuMemberRiskControlServiceImpl extends ServiceImpl<CuMemberRiskCont
|
|||
.signType(ESignType.getEnumByValue(memberRiskControlPetition.getSignType())).userIdList(memberRiskControlPetition.getUserIdList())
|
||||
.sendIdList(memberRiskControlPetition.getSendIdList()).remark(memberRiskControlPetition.getRemark()).fileList(memberRiskControlPetition.getFileList())
|
||||
.build();
|
||||
R<String> submit = approvalServiceApi.submit(approvalSubmitDTO, memberRiskControlPetition.getLoginUser());
|
||||
R<String> submit = iApprovalServiceApi.submit(approvalSubmitDTO, memberRiskControlPetition.getLoginUser());
|
||||
if (!submit.isSuccess()) {
|
||||
throw new RuntimeException("K值风控 提交审批失败!");
|
||||
}
|
||||
|
@ -122,7 +122,7 @@ public class CuMemberRiskControlServiceImpl extends ServiceImpl<CuMemberRiskCont
|
|||
cuMemberServiceLog.setPkCountry(SecurityUtils.getPkCountry());
|
||||
cuMemberServiceLog.setPkCreator(SecurityUtils.getUserId());
|
||||
cuMemberServiceLog.setCreationTime(DateUtils.currentDateTime());
|
||||
memberServiceLogServiceApi.insert(cuMemberServiceLog);
|
||||
iCuMemberServiceLogServiceApi.insert(cuMemberServiceLog);
|
||||
return cuMemberServiceLog;
|
||||
|
||||
}
|
||||
|
|
|
@ -2270,4 +2270,22 @@
|
|||
a.pk_grade = b.pk_grade
|
||||
</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>
|
||||
|
|
|
@ -144,7 +144,8 @@
|
|||
</select>
|
||||
|
||||
<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
|
||||
on ce.pk_member = cm.pk_id
|
||||
left join bd_vertex bv
|
||||
|
|
|
@ -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,
|
||||
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,
|
||||
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
|
||||
union
|
||||
select pk_id,pk_member,order_code,order_type,pk_rate,pk_country,order_amount,order_achieve from sa_t_order
|
||||
) so
|
||||
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,
|
||||
cp.remark,cp.income_ratio,cp.income_dial_ratio,cp.order_dial_ratio,cp.round,cp.second from
|
||||
cu_member_bonus cb
|
||||
cp.remark,cp.income_ratio,cp.income_dial_ratio,cp.order_dial_ratio,cp.round,cp.second
|
||||
from cu_member_bonus cb
|
||||
inner join cu_member_bonus_push cp
|
||||
on cb.pk_id = cp.pk_bonus
|
||||
where 1=1
|
||||
|
|
|
@ -16,7 +16,7 @@ import lombok.Getter;
|
|||
public enum EBonusIncomeStatus {
|
||||
|
||||
/**
|
||||
*正常
|
||||
* 正常
|
||||
*/
|
||||
NORMAL(0, "正常", 0, EnumsPrefixConstants.BONUS_INCOME_STATUS + "0"),
|
||||
|
||||
|
@ -34,6 +34,12 @@ public enum EBonusIncomeStatus {
|
|||
* K值
|
||||
*/
|
||||
RISK_CONTROL(3, "K值", 0, EnumsPrefixConstants.BONUS_INCOME_STATUS + "3"),
|
||||
|
||||
/**
|
||||
* 延缓发放
|
||||
*/
|
||||
DELAY_GRANT(4, "延缓发放", 0, EnumsPrefixConstants.BONUS_INCOME_STATUS + "4"),
|
||||
|
||||
;
|
||||
|
||||
/**
|
||||
|
|
|
@ -84,12 +84,10 @@ public class ComputeUtil {
|
|||
}
|
||||
|
||||
/**
|
||||
* 值1大于等于值2,返回值2,否则返回值1
|
||||
*
|
||||
* @param value1 值1
|
||||
* @param value2 值2
|
||||
* @Description: 统一的除法计算方法, 向下取整
|
||||
* @return: BigDecimal
|
||||
* @Author: sui q
|
||||
* @Date: 2022/9/20 21:09
|
||||
*/
|
||||
public static BigDecimal obtainMinAchieve(BigDecimal value1, BigDecimal value2) {
|
||||
if (compareValue(value1, value2)) {
|
||||
|
@ -120,12 +118,10 @@ public class ComputeUtil {
|
|||
}
|
||||
|
||||
/**
|
||||
* 比较大小,前面的值大于等于后面的值
|
||||
*
|
||||
* @param value1 值1
|
||||
* @param value2 值2
|
||||
* @Description: 比较大小,前面的值大于等于后面的值
|
||||
* @return: Boolean
|
||||
* @Author: sui q
|
||||
* @Date: 2022/9/20 21:23
|
||||
*/
|
||||
public static Boolean compareValue(BigDecimal value1, BigDecimal value2) {
|
||||
if (value1.compareTo(value2) >= 0) {
|
||||
|
@ -206,9 +202,6 @@ public class ComputeUtil {
|
|||
*
|
||||
* @param value1 值
|
||||
* @param value2 比例
|
||||
* @return: BigDecimal
|
||||
* @Author: sui q
|
||||
* @Date: 2022/11/14 17:02
|
||||
*/
|
||||
public static BigDecimal computeBonusMultiply(BigDecimal value1, BigDecimal value2) {
|
||||
return value1.multiply(value2).multiply(BigDecimal.valueOf(0.01));
|
||||
|
|
|
@ -14,9 +14,7 @@ import lombok.EqualsAndHashCode;
|
|||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务补贴
|
||||
* </p>
|
||||
*
|
||||
* @author hzs
|
||||
* @since 2022-11-01
|
||||
|
@ -61,5 +59,4 @@ public class BdBonusService extends BaseEntity {
|
|||
private String assessmentTypeVal;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -4,7 +4,9 @@ import java.math.BigDecimal;
|
|||
|
||||
import com.baomidou.mybatisplus.annotation.KeySequence;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
@ -13,9 +15,7 @@ import lombok.*;
|
|||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
*
|
||||
* </p> 4-n增加碰次设置
|
||||
* 4-n增加碰次设置
|
||||
*
|
||||
* @author hzs
|
||||
* @since 2024-07-19
|
||||
|
|
|
@ -11,9 +11,7 @@ import lombok.*;
|
|||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 会员奖金-拓展收益明细表
|
||||
* </p>
|
||||
*
|
||||
* @author hzs
|
||||
* @since 2022-11-15
|
||||
|
|
|
@ -12,10 +12,7 @@ import lombok.experimental.Accessors;
|
|||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 奖金4—N配置
|
||||
|
||||
* </p>
|
||||
*
|
||||
* @author hzs
|
||||
* @since 2022-10-31
|
||||
|
|
Loading…
Reference in New Issue