## 顾客不计算奖金不会获得奖金;

This commit is contained in:
cabbage 2025-07-15 18:07:38 +08:00
parent f1d53b391b
commit 566762ebad
7 changed files with 56 additions and 687 deletions

View File

@ -1,220 +1,12 @@
package com.hzs.bonus.bonus.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.hzs.activity.base.IActivityServiceApi;
import com.hzs.common.core.constant.TableNameConstants;
import com.hzs.common.core.constant.msg.BonusMsgConstants;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.utils.ComputeUtil;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.domain.activity.recommend.AcRepurSharOrderType;
import com.hzs.common.domain.activity.recommend.ext.AcRepurSharRuleConfigExt;
import com.hzs.common.domain.bonus.BdBonusDeduct;
import com.hzs.common.domain.member.base.CuMemberAgent;
import com.hzs.common.domain.member.bonus.CuMemberBonus;
import com.hzs.common.domain.member.bonus.CuMemberBonusDetail;
import com.hzs.common.domain.member.ext.CuMemberSettleExt;
import com.hzs.common.domain.sale.order.SaOrder;
import com.hzs.common.domain.system.config.BdBonusCloud;
import com.hzs.bonus.base.service.ICuMemberAgentService;
import com.hzs.system.config.dto.BonusConfigDTO;
import com.hzs.system.sys.dto.BdCurrencyDTO;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Description:
* @Author: sui q
* @Time: 2023/1/4 17:19
* @Classname: BonusSettleAgentHandle
* @PackageName: com.hzs.member.bonus.service.impl
* 计算云代奖金
*/
@Component
public class BonusSettleAgentHandle extends BonusSettleHandle {
@DubboReference
IActivityServiceApi iActivityServiceApi;
// 代理直推 推荐给多少钱 代理复购 区域 所有订单的1%
@Autowired
private ICuMemberAgentService iCuMemberAgentService;
/**
* 计算嗨粉奖金
*
* @param period 期间
* @param bonusConfigDTO 参数
* @param cuMemberBonusMap 所有计算出来的奖金汇总
*/
List<CuMemberBonusDetail> calculateCloudAgentAreaBonus(String settleDateStr, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap) {
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
// 云代区域 月奖
// 查询时间范围内订单
Date settleDate = DateUtils.parseStringToDate(settleDateStr);
// 上个月最后一天
settleDate = DateUtils.beforeMonthLastDate(settleDate);
// 结算月第一天
Date currentMonthFirstDate = DateUtils.currentMonthFirstDate(settleDate);
// 结算月下月第一天
Date nextMonthFirstDate = DateUtils.afterDate(1, ChronoUnit.DAYS, settleDate);
List<SaOrder> currentMonthOrderList = iSaOrderServiceApi.querySaOrderByDayForCloud(currentMonthFirstDate, nextMonthFirstDate).getData();
// 查询月末会员状态
Integer lastPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDateStr).getPkId();
String currentSettleTableName = TableNameConstants.CU_MEMBER_SETTLE + lastPeriod;
Set<Long> pkMemberSet = new HashSet<>();
// 获取配置
Map<String, BdBonusCloud> bdBonusCloudMap = bonusConfigDTO.getBonusCloudMap();
if (bdBonusCloudMap == null) {
return cuMemberBonusDetailList;
}
// 计算奖金 云代首购 首购订单1% 云代复购 复购订单1%
// 查询会员查询出所有代理的会员
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) {
continue;
}
String key = saOrder.getPkCountry().toString() + saOrder.getRecProvince() + saOrder.getRecCity();
if (!cuMemberAgentMap.containsKey(key)) {
continue;
} else {
saOrderList.add(saOrder);
}
pkMemberSet.add(saOrder.getPkMember());
List<CuMemberAgent> cuMemberAgentList = cuMemberAgentMap.get(key);
cuMemberAgentList.forEach(cuMemberAgent ->
pkMemberSet.add(cuMemberAgent.getPkMember()));
}
List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleByMemberPk(currentSettleTableName, pkMemberSet);
Map<Long, CuMemberSettleExt> cuMemberSettleExtMap = new HashMap<>();
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
Map<String, BdCurrencyDTO> currencyDtoMap = bonusConfigDTO.getCurrencyDtoMap();
for (SaOrder saOrder : saOrderList) {
String key = saOrder.getPkCountry().toString() + saOrder.getRecProvince().toString() + saOrder.getRecCity().toString();
List<CuMemberAgent> cuMemberAgentList = cuMemberAgentMap.get(key);
BigDecimal exchangeRate = BigDecimal.ONE;
if (currencyDtoMap.containsKey(saOrder.getPkCountry().toString() + saOrder.getPkRate())) {
exchangeRate = currencyDtoMap.get(saOrder.getPkCountry().toString() + saOrder.getPkRate()).getInExchangeRate();
}
// 云代首购
CuMemberSettleExt sourceMemberSettleExt = cuMemberSettleExtMap.get(saOrder.getPkMember());
if (sourceMemberSettleExt == null) {
continue;
}
if (EOrderType.REGISTER_ORDER.getValue() == saOrder.getOrderType() ||
EOrderType.UPGRADE_ORDER.getValue() == saOrder.getOrderType() ||
Objects.equals(EOrderType.FICTITIOUS_ORDER.getValue(), saOrder.getOrderType()) ||
Objects.equals(EOrderType.SPECIAL_REGISTER_ORDER.getValue(), saOrder.getOrderType()) ||
Objects.equals(EOrderType.SPECIAL_UPGRADE_ORDER.getValue(), saOrder.getOrderType())) {
BdBonusCloud bdBonusCloud = bdBonusCloudMap.get(saOrder.getPkCountry().toString() + ECloudType.CLOUD_TYPE_FIRST_PURCHASE.getValue());
for (CuMemberAgent cuMemberAgent : cuMemberAgentList) {
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberAgent.getPkMember());
if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() ||
EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() ||
EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) {
continue;
}
if (cuMemberAgent.getAgentGrade() == 7 && cuMemberAgent.getAgentCounty() != null && saOrder.getRecCounty() != null &&
!Objects.equals(cuMemberAgent.getAgentCounty(), saOrder.getRecCounty())) {
continue;
} else {
if (cuMemberAgent.getAgentGrade() == 8 && cuMemberAgent.getAgentCounty() != null &&
!Objects.equals(cuMemberAgent.getAgentCounty(), saOrder.getRecCounty())) {
continue;
}
}
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrder, targetMemberSettleExt);
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrder, targetMemberSettleExt, cuMemberBonus);
// 计算比例
cuMemberBonusDetail.setCalValue(bdBonusCloud.getCloudRatio());
cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CLOUD_AGENT_FIRST_PURCHASE.getValue()));
cuMemberBonusDetail.setPretaxIncome(ComputeUtil.computeBonusMultiply(saOrder.getOrderAchieve(), bdBonusCloud.getCloudRatio()));
cloudAgentRemark(saOrder, cuMemberBonusDetail, sourceMemberSettleExt, targetMemberSettleExt, BonusMsgConstants.CLOUD_AGENT_FIRST_REPURCHASE);
cuMemberBonusDetailList.add(cuMemberBonusDetail);
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrder.getOrderAmount(), exchangeRate);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
cuMemberBonus.setCloudPurIncome(ComputeUtil.computeAdd(cuMemberBonus.getCloudPurIncome(), cuMemberBonusDetail.getPretaxIncome()));
setCloudTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
}
}
} else {
// 云代复购
BdBonusCloud bdBonusCloud = bdBonusCloudMap.get(saOrder.getPkCountry().toString() + ECloudType.CLOUD_TYPE_PURCHASE.getValue());
for (CuMemberAgent cuMemberAgent : cuMemberAgentList) {
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberAgent.getPkMember());
if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() ||
EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() ||
EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) {
continue;
}
if (cuMemberAgent.getAgentGrade() == 7 && cuMemberAgent.getAgentCounty() != null && saOrder.getRecCounty() != null &&
!Objects.equals(cuMemberAgent.getAgentCounty(), saOrder.getRecCounty())) {
continue;
} else {
if (cuMemberAgent.getAgentGrade() == 8 && cuMemberAgent.getAgentCounty() != null &&
!Objects.equals(cuMemberAgent.getAgentCounty(), saOrder.getRecCounty())) {
continue;
}
}
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrder, targetMemberSettleExt);
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrder, targetMemberSettleExt, cuMemberBonus);
// 计算比例
cuMemberBonusDetail.setCalValue(bdBonusCloud.getCloudRatio());
cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CLOUD_AGENT_REPURCHASE.getValue()));
cuMemberBonusDetail.setPretaxIncome(ComputeUtil.computeBonusMultiply(saOrder.getOrderAchieve(), bdBonusCloud.getCloudRatio()));
cloudAgentRemark(saOrder, cuMemberBonusDetail, sourceMemberSettleExt, targetMemberSettleExt, BonusMsgConstants.CLOUD_AGENT_REPURCHASE);
cuMemberBonusDetailList.add(cuMemberBonusDetail);
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrder.getOrderAmount(), exchangeRate);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
cuMemberBonus.setCloudRepurIncome(ComputeUtil.computeAdd(cuMemberBonus.getCloudRepurIncome(), cuMemberBonusDetail.getPretaxIncome()));
setCloudTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
}
}
}
}
// 复购券均分收益规则
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 = 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 = iCuMemberTreeService.batchQueryMemberSettleByMemberPk(currentSettleTableName, memberSet);
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
for (SaOrder saOrder : orderList) {
BigDecimal exchangeRate = BigDecimal.ONE;
if (currencyDtoMap.containsKey(saOrder.getPkCountry().toString() + saOrder.getPkRate())) {
exchangeRate = currencyDtoMap.get(saOrder.getPkCountry().toString() + saOrder.getPkRate()).getInExchangeRate();
}
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(saOrder.getPkMember());
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrder, targetMemberSettleExt);
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrder, targetMemberSettleExt, cuMemberBonus);
// 计算比例
cuMemberBonusDetail.setCalValue(acRepurSharRuleConfigExt.getRatioValue());
cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.REPURCHASE_COUPONS_SHARE.getValue()));
cuMemberBonusDetail.setPretaxIncome(ComputeUtil.computeBonusMultiply(saOrder.getOrderAchieve(), acRepurSharRuleConfigExt.getRatioValue()));
shareCouponRemark(cuMemberBonusDetail, DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, settleDate));
cuMemberBonusDetailList.add(cuMemberBonusDetail);
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrder.getOrderAmount(), exchangeRate);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
cuMemberBonus.setRepurCouponShare(cuMemberBonusDetail.getPretaxIncome());
setRepurchaseCouponTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
}
}
}
}
}
return cuMemberBonusDetailList;
}
}

View File

@ -96,9 +96,11 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
if (targetMemberSettleExt == null) {
return null;
}
// 死点 停算收益 没有奖金
// 死点 停算收益 顾客 没有奖金
if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
// 会员不满足计算奖金条件跳过
return null;
}
// 当前国家是否有该奖项
@ -347,9 +349,11 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
for (int i = 1; i <= startTouch; i++) {
for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) {
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
if (targetMemberSettleExt == null
if (null == targetMemberSettleExt
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
// 会员不满足计算奖金条件跳过
continue;
}
// 验证是否有当前奖金项
@ -376,7 +380,9 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
if (targetMemberSettleExt == null
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
// 会员不满足计算奖金条件跳过
continue;
}
// 验证是否有当前奖金项
@ -432,10 +438,12 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
for (CuMemberSettleExt cuMemberSettleExt : cuMemberSettleExtList) {
// 数据已经准备好了肯定有值map中是实际的值先计算新增然后根据新增结算计算碰次list是为了存储碰次的顺序
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkPlaceParent());
if (targetMemberSettleExt == null
if (null == targetMemberSettleExt
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|| EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) {
|| EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
// 会员不满足计算奖金条件跳过
continue;
}
// 验证是否计算奖金
@ -597,8 +605,9 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
}
pkMember = targetMemberSettleExt.getPkParent();
if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
// 会员状态不正常 或者 停算收益 直接跳过
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
// 会员状态不正常 或者 停算收益 顾客等级 直接跳过
continue;
}
if (firstBool) {
@ -805,7 +814,8 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
if (targetMemberSettleExt == null
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|| ERegistrationAuthority.SERVICE.getValue() != targetMemberSettleExt.getRegisterAuthority()) {
|| ERegistrationAuthority.SERVICE.getValue() != targetMemberSettleExt.getRegisterAuthority()
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
// 非正常会员停算收益不是服务中心都不进行处理
return null;
}

View File

@ -1,391 +1,12 @@
package com.hzs.bonus.bonus.service.impl;
import com.hzs.common.core.constant.BonusFieldConstants;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.utils.ComputeUtil;
import com.hzs.common.core.utils.reflect.ReflectUtils;
import com.hzs.common.domain.bonus.BdBonusDeduct;
import com.hzs.common.domain.member.base.CuAwardsControl;
import com.hzs.common.domain.member.bonus.CuMemberBonus;
import com.hzs.common.domain.member.bonus.CuMemberBonusDetail;
import com.hzs.common.domain.member.ext.CuMemberSettleExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.ext.SaOrderItemsExt;
import com.hzs.common.domain.system.config.BdAwards;
import com.hzs.system.config.dto.BonusConfigDTO;
import com.hzs.system.config.dto.BonusHiPinkDTO;
import com.hzs.system.config.dto.RangeDTO;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.*;
/**
* @Description: 计算嗨粉订单
* @Author: sui q
* @Time: 2023/1/4 13:38
* @Classname: BonusSettleHiFunHandle
* @PackageName: com.hzs.member.bonus.service.impl
* 计算嗨粉订单
*/
@Component
public class BonusSettleHiFunHandle extends BonusSettleHandle {
/**
* @param period 期间
* @param bonusConfigDTO 参数
* @param hiFunSaOrderList 复购订单
* @param cuMemberBonusMap 所有计算出来的奖金汇总
* @Description: 计算嗨粉奖金
* @return: void
* @Author: sui q
* @Date: 2022/11/10 14:17
*/
List<CuMemberBonusDetail> calculateHiFunPushBonus(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, Map<String, RangeDTO> rangeDtoMap, Map<String, BdAwards> awardsMap,
BonusConfigDTO bonusConfigDTO, List<SaOrderExt> hiFunSaOrderList, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap, Map<Long, CuAwardsControl> cuAwardsControlMap) {
// 根据订单明细开始计算奖金计算嗨粉推荐奖
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
// cuMemberSettleExtMap 需要含自己
getMemberParentBySaOrder(cuMemberSettleExtMap, settleTableName, hiFunSaOrderList);
// 拆分为2种一种是嗨粉一种是1000pv的奖金不一样
List<SaOrderExt> oldHaiFunOrderList = new ArrayList<>();
// List<SaOrderExt> newHaiFunOrderList = new ArrayList<>();
for (SaOrderExt saOrderExt : hiFunSaOrderList) {
if (EOrderTypeExtend.NORMAL.getValue() == saOrderExt.getOrderTypeExtend()) {
oldHaiFunOrderList.add(saOrderExt);
}
}
// 原来413嗨粉推荐海粉极差收益
oldHaiFunOrderList.forEach(saOrderExt -> {
List<CuMemberBonusDetail> bonusDetailList = calculateHiFunPushBonusOne(cuMemberSettleExtMap, rangeDtoMap, awardsMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, cuAwardsControlMap);
if (bonusDetailList.size() > 0) {
cuMemberBonusDetailList.addAll(bonusDetailList);
}
});
// // 新5680 推荐海粉极差收益
// newHaiFunOrderList.forEach(saOrderExt -> {
// // 海粉极差
// List<CuMemberBonusDetail> bonusDetailList = calculateNewHiFunPushBonusOne(cuMemberSettleExtMap, rangeDtoMap, awardsMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, cuAwardsControlMap);
// if (bonusDetailList.size() > 0) {
// cuMemberBonusDetailList.addAll(bonusDetailList);
// }
// if(saOrderExt.getPkMember().equals(saOrderExt.getPkCreator())){
// return;
// }
// // 给注册人复购券
// // 获得奖金
// CuMemberSettleExt sourceMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
// CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkCreator());
// if (targetMemberSettleExt == null || validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.REPURCHASE_COUPONS.getValue())) {
// return;
// }
// CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
// CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrderExt, targetMemberSettleExt, cuMemberBonus);
// // 计算类型
// cuMemberBonusDetail.setCalType(ECalType.VALUE.getValue());
// // 计算值
// cuMemberBonusDetail.setCalValue(BigDecimal.ZERO);
// cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.REPURCHASE_COUPONS.getValue()));
// cuMemberBonusDetail.setPretaxIncome(BigDecimal.valueOf(15.46875));
// BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
// if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
// cuMemberBonus.setRepurCoupon(ComputeUtil.computeAdd(cuMemberBonus.getRepurCoupon(), cuMemberBonusDetail.getPretaxIncome()));
// setRepurchaseCouponTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
// }
// repurchaseCouponsRemark(saOrderExt, cuMemberBonusDetail, sourceMemberSettleExt, targetMemberSettleExt);
// cuMemberBonusDetailList.add(cuMemberBonusDetail);
// });
return cuMemberBonusDetailList;
}
/**
* @param settleTableName 结算表
* @param period 期间
* @param bonusConfigDTO 参数
* @param haiFunOrderList 订单列表
* @param cuMemberBonusMap 所有计算出来的奖金汇总
* @Description: 计算报单服务费
* @return: List<CuMemberBonusCoach>
* @Author: sui q
* @Date: 2022/11/17 14:14
*/
List<CuMemberBonusDetail> calculateHaiFunBonus(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, BonusConfigDTO bonusConfigDTO,
List<SaOrderExt> haiFunOrderList, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap) {
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
// 先过滤数据验证报单人是否在网体列表中不在需要从数据库中查询
Set<Long> haiFunMemberSet = new HashSet<>();
haiFunOrderList.forEach(saOrderExt -> {
CuMemberSettleExt cuMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
if (cuMemberSettleExt == null || cuMemberSettleExtMap.get(cuMemberSettleExt.getPkParent()) == null) {
haiFunMemberSet.add(saOrderExt.getPkMember());
}
});
if (haiFunMemberSet.size() > 0) {
List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.batchQueryMemberSettleParentByMemberPk(settleTableName, haiFunMemberSet);
// 初始化父类网体的值
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
}
// 计算海粉推荐
for (SaOrderExt saOrderExt : haiFunOrderList) {
List<CuMemberBonusDetail> cuMemberBonusDetails = calculateHaiFunBonusOne(cuMemberSettleExtMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt);
if (cuMemberBonusDetails.size() > 0) {
cuMemberBonusDetailList.addAll(cuMemberBonusDetails);
}
}
// 查询会员
return cuMemberBonusDetailList;
}
/**
* @Description: 计算海粉推荐奖
* @return: CuMemberBonusDetail
* @Author: sui q
* @Date: 2023/2/8 17:22
*/
List<CuMemberBonusDetail> calculateHaiFunBonusOne(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap, SaOrderExt saOrderExt) {
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
CuMemberSettleExt sourceMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
if (sourceMemberSettleExt == null) {
return cuMemberBonusDetailList;
}
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkParent());
if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() ||
EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
return cuMemberBonusDetailList;
}
// 验证是否有奖金
// if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.HAI_DOU_INCOME.getValue())) {
// return cuMemberBonusDetailList;
// }
for (SaOrderItemsExt saOrderItemsExt : saOrderExt.getOrderItemsExtList()) {
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
// 海粉直推奖金明细
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrderExt, targetMemberSettleExt, cuMemberBonus);
// 计算比例
cuMemberBonusDetail.setCalValue(BigDecimal.ZERO);
// cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.HAI_DOU_INCOME.getValue()));
cuMemberBonusDetail.setPretaxIncome(saOrderItemsExt.getShareAchieve());
// 收益占比
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
haiFunRemark(saOrderExt, cuMemberBonusDetail, sourceMemberSettleExt, targetMemberSettleExt);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
cuMemberBonus.setHaiFunIncome(ComputeUtil.computeAdd(cuMemberBonus.getHaiFunIncome(), cuMemberBonusDetail.getPretaxIncome()));
setBonusDeduct(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
BigDecimal realIncome = ReflectUtils.invokeGetter(cuMemberBonusDetail, BonusFieldConstants.REAL_INCOME);
cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), realIncome));
}
cuMemberBonusDetailList.add(cuMemberBonusDetail);
}
return cuMemberBonusDetailList;
}
/**
* @Description: 计算嗨粉奖金嗨粉推荐嗨粉极差
* @return: List<CuMemberBonusDetail>
* @Author: sui q
* @Date: 2023/2/9 10:25
*/
protected List<CuMemberBonusDetail> calculateHiFunPushBonusOne(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, Map<String, RangeDTO> rangeDtoMap, Map<String, BdAwards> awardsMap, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap, SaOrderExt saOrderExt, Map<Long, CuAwardsControl> cuAwardsControlMap) {
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
CuMemberSettleExt sourceMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
if (sourceMemberSettleExt == null) {
return cuMemberBonusDetailList;
}
BigDecimal waresNum = ComputeUtil.computeDivide(saOrderExt.getOrderAmount(), BigDecimal.valueOf(413));
sourceMemberSettleExt.setHiFunAmount(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
sourceMemberSettleExt.setHiFunPv(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunPv(), saOrderExt.getOrderAchieve()));
sourceMemberSettleExt.setHiFunNewAmount(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunNewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
sourceMemberSettleExt.setHiFunNewPv(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunNewPv(), saOrderExt.getOrderAchieve()));
Map<Integer, List<BonusHiPinkDTO>> bonusHiPinkDtoMap = bonusConfigDTO.getBonusHiPinkDtoMap();
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkReference());
// 找到最大的奖金
BigDecimal maxBonusValue = BigDecimal.ZERO;
List<BonusHiPinkDTO> bonusHiPinkDTOList = bonusHiPinkDtoMap.get(saOrderExt.getPkCountry());
for (BonusHiPinkDTO bonusHiPinkDTO : bonusHiPinkDTOList) {
if (ComputeUtil.compareGreaterThan(bonusHiPinkDTO.getBonusValue(), maxBonusValue)) {
maxBonusValue = bonusHiPinkDTO.getBonusValue();
}
}
BigDecimal income = BigDecimal.ZERO;
boolean flag = false;
int i = 0;
while (targetMemberSettleExt != null && targetMemberSettleExt.getPkParent() != 0) {
// 嗨粉直推奖励的配置从第一级开始获取
BonusHiPinkDTO startBonusHiPinkDto = bonusHiPinkDTOList.get(i);
targetMemberSettleExt = getCuMemberTree(cuMemberSettleExtMap, rangeDtoMap, awardsMap, targetMemberSettleExt, startBonusHiPinkDto, cuAwardsControlMap);
if (targetMemberSettleExt == null) {
break;
}
String key = getMemberKey(awardsMap, targetMemberSettleExt);
if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() ||
validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.HI_PINK.getValue())) {
targetMemberSettleExt = cuMemberSettleExtMap.get(targetMemberSettleExt.getPkParent());
continue;
}
for (int x = i; x < bonusHiPinkDTOList.size(); x++) {
BonusHiPinkDTO bonusHiPinkDTO = bonusHiPinkDTOList.get(x);
String hiKey = bonusHiPinkDTO.getRangeType().toString() + bonusHiPinkDTO.getPkLevel();
if (key.equals(hiKey)) {
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
BigDecimal bonusIncome = ComputeUtil.computeSubtract(bonusHiPinkDTO.getBonusValue(), income);
bonusIncome = ComputeUtil.computeMultiply(bonusIncome, waresNum);
if (ComputeUtil.compareValue(BigDecimal.ZERO, bonusIncome)) {
// flag = true;
break;
}
// 直推奖金明细
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrderExt, targetMemberSettleExt, cuMemberBonus);
cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.HI_PINK.getValue()));
// 计算比例
cuMemberBonusDetail.setCalValue(bonusHiPinkDTO.getBonusValue());
cuMemberBonusDetail.setPretaxIncome(bonusIncome);
// 收益占比
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
hiFunRemark(saOrderExt, cuMemberBonusDetail, sourceMemberSettleExt, targetMemberSettleExt);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
cuMemberBonus.setHiFunIncome(ComputeUtil.computeAdd(cuMemberBonus.getHiFunIncome(), cuMemberBonusDetail.getPretaxIncome()));
setBonusDeduct(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), cuMemberBonusDetail.getRealIncome()));
}
income = bonusHiPinkDTO.getBonusValue();
cuMemberBonusDetailList.add(cuMemberBonusDetail);
if (ComputeUtil.compareEqual(maxBonusValue, bonusHiPinkDTO.getBonusValue())) {
flag = true;
}
if (x < bonusHiPinkDTOList.size() - 1) {
i = x + 1;
} else {
flag = true;
}
break;
}
}
targetMemberSettleExt = cuMemberSettleExtMap.get(targetMemberSettleExt.getPkParent());
if (flag) {
break;
}
}
return cuMemberBonusDetailList;
}
/**
* @Description: 计算嗨粉奖金嗨粉推荐嗨粉极差
* @return: List<CuMemberBonusDetail>
* @Author: sui q
* @Date: 2023/2/9 10:25
*/
protected List<CuMemberBonusDetail> calculateNewHiFunPushBonusOne(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, Map<String, RangeDTO> rangeDtoMap, Map<String, BdAwards> awardsMap, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap, SaOrderExt saOrderExt, Map<Long, CuAwardsControl> cuAwardsControlMap) {
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
CuMemberSettleExt sourceMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
if (sourceMemberSettleExt == null) {
return cuMemberBonusDetailList;
}
sourceMemberSettleExt.setHiFunAmount(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
sourceMemberSettleExt.setHiFunPv(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunPv(), saOrderExt.getOrderAchieve()));
sourceMemberSettleExt.setHiFunNewAmount(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunNewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
sourceMemberSettleExt.setHiFunNewPv(ComputeUtil.computeAdd(sourceMemberSettleExt.getHiFunNewPv(), saOrderExt.getOrderAchieve()));
// Map<Integer, List<BonusHiPinkDTO>> bonusHiPinkDtoMap = bonusConfigDTO.getBonusHiPinkDtoMap();
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkReference());
// 找到最大的奖金
// BigDecimal maxBonusValue = BigDecimal.ZERO;
BigDecimal maxBonusValue = BigDecimal.valueOf(1200);
BigDecimal grantBonusValue = BigDecimal.ZERO;
// List<BonusHiPinkDTO> bonusHiPinkDTOList = bonusHiPinkDtoMap.get(saOrderExt.getPkCountry());
// for (BonusHiPinkDTO bonusHiPinkDTO : bonusHiPinkDTOList) {
// if (ComputeUtil.compareGreaterThan(bonusHiPinkDTO.getBonusValue(), maxBonusValue)) {
// maxBonusValue = bonusHiPinkDTO.getBonusValue();
// }
// }
// BigDecimal income = BigDecimal.ZERO;
Integer gradeValue = EGrade.YOU_KE.getValue();
while (targetMemberSettleExt != null && targetMemberSettleExt.getPkParent() != 0) {
// 嗨粉直推奖励的配置从第一级开始获取
targetMemberSettleExt = getCuMemberTree(cuMemberSettleExtMap, targetMemberSettleExt, gradeValue);
if (targetMemberSettleExt == null) {
break;
}
if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() ||
validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.HI_PINK.getValue())) {
targetMemberSettleExt = cuMemberSettleExtMap.get(targetMemberSettleExt.getPkParent());
continue;
}
BigDecimal memberMaxBonusValue = BigDecimal.ZERO;
if (targetMemberSettleExt.getGradeValue() == EGrade.YOU_KE.getValue() || targetMemberSettleExt.getGradeValue() == EGrade.MAKER.getValue()) {
memberMaxBonusValue = BigDecimal.valueOf(800);
} else if (targetMemberSettleExt.getGradeValue() == EGrade.VIP.getValue()) {
memberMaxBonusValue = BigDecimal.valueOf(1000);
} else if (targetMemberSettleExt.getGradeValue() == EGrade.S_VIP.getValue()) {
memberMaxBonusValue = BigDecimal.valueOf(1200);
}
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
BigDecimal bonusIncome = ComputeUtil.computeSubtract(memberMaxBonusValue, grantBonusValue);
if (ComputeUtil.compareValue(BigDecimal.ZERO, bonusIncome)) {
targetMemberSettleExt = cuMemberSettleExtMap.get(targetMemberSettleExt.getPkParent());
continue;
}
// 直推奖金明细
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrderExt, targetMemberSettleExt, cuMemberBonus);
cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.HI_PINK.getValue()));
// 计算比例
cuMemberBonusDetail.setCalValue(BigDecimal.ZERO);
cuMemberBonusDetail.setPretaxIncome(bonusIncome);
// 收益占比
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
hiFunRemark(saOrderExt, cuMemberBonusDetail, sourceMemberSettleExt, targetMemberSettleExt);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
cuMemberBonus.setHiFunIncome(ComputeUtil.computeAdd(cuMemberBonus.getHiFunIncome(), cuMemberBonusDetail.getPretaxIncome()));
setBonusDeduct(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), cuMemberBonusDetail.getRealIncome()));
}
grantBonusValue = ComputeUtil.computeAdd(grantBonusValue, bonusIncome);
cuMemberBonusDetailList.add(cuMemberBonusDetail);
if (ComputeUtil.compareEqual(maxBonusValue, grantBonusValue)) {
break;
} else {
targetMemberSettleExt = cuMemberSettleExtMap.get(targetMemberSettleExt.getPkParent());
}
}
return cuMemberBonusDetailList;
}
/**
* 根据极差获取会员
*/
private CuMemberSettleExt getCuMemberTree(Map<Long, CuMemberSettleExt> cuMemberTreeMap, Map<String, RangeDTO> rangeDtoMap,
Map<String, BdAwards> awardsMap, CuMemberSettleExt parentMemberTree, BonusHiPinkDTO bonusHiPinkDTO, Map<Long, CuAwardsControl> cuAwardsControlMap) {
if (parentMemberTree == null) {
return null;
}
// 获取目标会员的极差配置信息 等级还是奖衔
RangeDTO rangeDto = getRangeDto(rangeDtoMap, awardsMap, parentMemberTree, cuAwardsControlMap);
// 嗨粉直推奖励的配置获取目标奖励的配置
RangeDTO targetRangeDto = rangeDtoMap.get(bonusHiPinkDTO.getPkCountry().toString() + bonusHiPinkDTO.getRangeType() + bonusHiPinkDTO.getPkLevel());
if (rangeDto == null || targetRangeDto == null) {
return null;
}
// 判断目标会员极差奖励目标会员的极差等级不足 直推奖励的配置取上一级一直取到 目标会员的 极差等级>= 直推推荐奖励配置的
if (rangeDto.getRangeValue() < targetRangeDto.getRangeValue()) {
parentMemberTree = cuMemberTreeMap.get(parentMemberTree.getPkParent());
parentMemberTree = getCuMemberTree(cuMemberTreeMap, rangeDtoMap, awardsMap, parentMemberTree, bonusHiPinkDTO, cuAwardsControlMap);
}
return parentMemberTree;
}
/**
* 根据极差获取会员
*/
private CuMemberSettleExt getCuMemberTree(Map<Long, CuMemberSettleExt> cuMemberTreeMap, CuMemberSettleExt parentMemberTree, Integer startGradeValue) {
if (parentMemberTree == null) {
return null;
}
// 判断目标会员极差奖励目标会员的极差等级不足 直推奖励的配置取上一级一直取到 目标会员的 极差等级>= 直推推荐奖励配置的
if (parentMemberTree.getGradeValue() < startGradeValue) {
parentMemberTree = cuMemberTreeMap.get(parentMemberTree.getPkParent());
parentMemberTree = getCuMemberTree(cuMemberTreeMap, parentMemberTree, startGradeValue);
}
return parentMemberTree;
}
}

View File

@ -118,7 +118,9 @@ public class BonusSettleNewExpandHandle extends BonusSettleHandle {
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
if (null == targetMemberSettleExt
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
// 会员不满足计算奖金条件跳过
continue;
}
// 验证是否有当前奖金项
@ -146,7 +148,9 @@ public class BonusSettleNewExpandHandle extends BonusSettleHandle {
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
if (targetMemberSettleExt == null
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
// 会员不满足计算奖金条件跳过
continue;
}
// 验证是否有当前奖金项
@ -183,7 +187,9 @@ public class BonusSettleNewExpandHandle extends BonusSettleHandle {
if (targetMemberSettleExt == null
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|| EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) {
|| EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
// 会员不满足计算奖金条件跳过
continue;
}

View File

@ -41,9 +41,6 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
@Autowired
private BonusSettleFirstPurchaseHandle bonusSettleFirstPurchaseHandle;
@DubboReference
IAcPickServiceApi iAcPickServiceApi;
List<CuMemberBonusPush> calculateRepurchasePushBonusOne(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO,
Map<Long, CuMemberAssess> cuMemberAssessMap, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap,
SaOrderExt saOrderExt) {
@ -60,9 +57,11 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
if (targetMemberSettleExt == null) {
break;
}
// 死点没有奖金
if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() ||
EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
// 死点 停算 顾客 没有奖金
if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
// 会员不满足计算奖金条件跳过
pkParent = targetMemberSettleExt.getPkParent();
continue;
}
@ -244,9 +243,11 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
for (int i = 1; i <= startTouch; i++) {
for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) {
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
if (targetMemberSettleExt == null
if (null == targetMemberSettleExt
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
// 会员不满足计算奖金条件跳过
continue;
}
// 验证是否有当前奖金项
@ -272,9 +273,11 @@ 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
if (null == targetMemberSettleExt
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
// 会员不满足计算奖金条件跳过
continue;
}
// 验证是否有当前奖金项
@ -306,10 +309,12 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
for (CuMemberSettleExt cuMemberSettleExt : cuMemberSettleExtList) {
// 数据已经准备好了肯定有值map中是实际的值先计算新增然后根据新增结算计算碰次list是为了存储碰次的顺序
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkPlaceParent());
if (targetMemberSettleExt == null
if (null == targetMemberSettleExt
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|| EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) {
|| EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
// 会员不满足计算奖金条件跳过
continue;
}
// 验证是否计算奖金

View File

@ -673,8 +673,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
}
/*
* @description: 执行甩网业绩
* @param: null null
* 执行甩网业绩
**/
private List<CuMemberAchieveExt> execNetAchieve(Integer period, String settleDate, String currentSettleTableName) {
List<CuMemberSwingNetExt> memberSwingNetExtList = iMemberServiceApi.queryCuMemberSwingNetExt().getData();
@ -1243,26 +1242,8 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
});
}
/**
* @param settleDate 结算日期
* @param bonusConfigDTO 各个国家奖金参数
* @Desccription: 计算云代的奖金
* @return: Map<Long, CuMemberSettleExt> 需要更新的
*/
private void calculateCloudAgentOrder(String settleDate, BonusConfigDTO bonusConfigDTO, Integer period, BonusRecordDetailVO bonusRecordDetailVO, Map<Long, CuMemberBonus> cuMemberBonusMap) {
List<CuMemberBonusDetail> cuMemberBonusDetailList = bonusSettleAgentHandle.calculateCloudAgentAreaBonus(settleDate, bonusConfigDTO, period, cuMemberBonusMap);
if (cuMemberBonusDetailList.size() > 0) {
if (bonusRecordDetailVO.getCuMemberBonusDetailList() != null) {
bonusRecordDetailVO.getCuMemberBonusDetailList().addAll(cuMemberBonusDetailList);
} else {
bonusRecordDetailVO.setCuMemberBonusDetailList(cuMemberBonusDetailList);
}
}
}
/*
* @description: 计算复购券收益
* @param: null null
* 计算复购券收益
**/
private void calculateRepurchaseCoupons(Date settleDate, List<SaOrderExt> firPurchaseOrderList, Integer period, BonusConfigDTO bonusConfigDTO, Map<Long, CuMemberBonus> cuMemberBonusMap,
BonusRecordDetailVO bonusRecordDetailVO, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap) {
@ -1276,51 +1257,6 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
}
}
/**
* @param settleDateStr 结算日期
* @Desccription: 计算云代的奖金
* @return: Map<Long, CuMemberSettleExt> 需要更新的
*/
private void calculateShareBonus(String settleDateStr, BonusConfigDTO bonusConfigDTO,
Integer period, BonusRecordDetailVO bonusRecordDetailVO, Map<Long, CuMemberBonus> cuMemberBonusMap, Map<Long, CuAwardsControl> cuAwardsControlMap) {
List<CuMemberBonusDetail> cuMemberBonusDetailList = bonusSettleFirstPurchaseHandle.calculateShareBonus(settleDateStr, bonusConfigDTO, period, cuMemberBonusMap, cuAwardsControlMap);
if (CollectionUtil.isNotEmpty(cuMemberBonusDetailList)) {
if (bonusRecordDetailVO.getCuMemberBonusDetailList() != null) {
bonusRecordDetailVO.getCuMemberBonusDetailList().addAll(cuMemberBonusDetailList);
} else {
bonusRecordDetailVO.setCuMemberBonusDetailList(cuMemberBonusDetailList);
}
}
}
/**
* 计算嗨粉订单的奖金
*
* @return: void
*/
private void calculateHiFunOrder(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, Map<String, RangeDTO> rangeDtoMap,
Map<String, BdAwards> awardsMap, BonusConfigDTO bonusConfigDTO, List<SaOrderExt> hiFunOrderList, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap, BonusRecordDetailVO bonusRecordDetailVO, Map<Long, CuAwardsControl> cuAwardsControlMap) {
//*****************************嗨粉推荐奖金*****************************/
List<CuMemberBonusDetail> cuMemberBonusDetailList = bonusSettleHiFunHandle.calculateHiFunPushBonus(cuMemberSettleExtMap, settleTableName, rangeDtoMap, awardsMap,
bonusConfigDTO, hiFunOrderList, period, cuMemberBonusMap, cuAwardsControlMap);
addCuMemberBonusDetail(bonusRecordDetailVO, cuMemberBonusDetailList);
Map<Long, MemberBonusDetailCalVO> memberBonusDetailCalVoMap = new HashMap<>(ComputeUtil.mapInitCapacity(MagicNumberConstants.DELETE_DATA_BATCH_UPDATE_NUM));
cuMemberBonusDetailList.forEach(cuMemberBonusDetail -> {
MemberBonusDetailCalVO memberBonusDetailCalVO = calculateOrderRatio(memberBonusDetailCalVoMap, cuMemberBonusDetail);
memberBonusDetailCalVO.setHiFunIncome(ComputeUtil.computeAdd(memberBonusDetailCalVO.getHiFunIncome(), cuMemberBonusDetail.getRealIncome()));
});
Map<Long, SaOrderExt> saOrderExtMap = new HashMap<>(ComputeUtil.mapInitCapacity(hiFunOrderList.size()));
hiFunOrderList.forEach(saOrderExt ->
saOrderExtMap.put(saOrderExt.getPkId(), saOrderExt));
// 嗨粉收益
cuMemberBonusDetailList.forEach(cuMemberBonusDetail -> {
MemberBonusDetailCalVO memberBonusDetailCalVO = memberBonusDetailCalVoMap.get(cuMemberBonusDetail.getPkOrder());
SaOrderExt saOrderExt = saOrderExtMap.get(memberBonusDetailCalVO.getPkOrder());
cuMemberBonusDetail.setIncomeDialRatio(ComputeUtil.computeDivide(memberBonusDetailCalVO.getHiFunIncome(), memberBonusDetailCalVO.getRealIncome()));
cuMemberBonusDetail.setOrderDialRatio(ComputeUtil.computeDivide(memberBonusDetailCalVO.getRealIncome(), ComputeUtil.computeDivide(saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate())));
});
}
private static void addCuMemberBonusDetail(BonusRecordDetailVO bonusRecordDetailVO, List<CuMemberBonusDetail> cuMemberBonusDetailList) {
if (cuMemberBonusDetailList.size() > 0) {
if (bonusRecordDetailVO.getCuMemberBonusDetailList() != null) {
@ -1333,8 +1269,6 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
/**
* 计算订单奖金累计值
*
* @return: void
*/
private MemberBonusDetailCalVO calculateOrderRatio(Map<Long, MemberBonusDetailCalVO> memberBonusDetailVoMap, Object cuMemberBonus) {
Long pkOrder = ReflectUtils.invokeGetter(cuMemberBonus, "pkOrder");

View File

@ -882,7 +882,8 @@
left join (
select cmbd.pk_member, cmbd.after_grant_income
from CU_MEMBER_BONUS_DELAY cmbd
where exists (select 1
where exists
(select 1
from (select cmbd.pk_member, max(cmbd.period) period
from cu_member_bonus_delay cmbd
where cmbd.del_flag = 0