## 顾客不计算奖金不会获得奖金;
This commit is contained in:
parent
f1d53b391b
commit
566762ebad
|
|
@ -1,220 +1,12 @@
|
||||||
package com.hzs.bonus.bonus.service.impl;
|
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 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
|
@Component
|
||||||
public class BonusSettleAgentHandle extends BonusSettleHandle {
|
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -96,9 +96,11 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
||||||
if (targetMemberSettleExt == null) {
|
if (targetMemberSettleExt == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
// 死点 或 停算收益 没有奖金
|
// 死点 或 停算收益 或 顾客 没有奖金
|
||||||
if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
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;
|
return null;
|
||||||
}
|
}
|
||||||
// 当前国家是否有该奖项
|
// 当前国家是否有该奖项
|
||||||
|
|
@ -347,9 +349,11 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
||||||
for (int i = 1; i <= startTouch; i++) {
|
for (int i = 1; i <= startTouch; i++) {
|
||||||
for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) {
|
for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) {
|
||||||
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
|
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
|
||||||
if (targetMemberSettleExt == null
|
if (null == targetMemberSettleExt
|
||||||
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
||||||
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
|
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|
||||||
|
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
|
||||||
|
// 会员不满足计算奖金条件,跳过
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// 验证是否有当前奖金项
|
// 验证是否有当前奖金项
|
||||||
|
|
@ -376,7 +380,9 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
||||||
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
|
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
|
||||||
if (targetMemberSettleExt == null
|
if (targetMemberSettleExt == null
|
||||||
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
||||||
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
|
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|
||||||
|
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
|
||||||
|
// 会员不满足计算奖金条件,跳过
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// 验证是否有当前奖金项
|
// 验证是否有当前奖金项
|
||||||
|
|
@ -432,10 +438,12 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
||||||
for (CuMemberSettleExt cuMemberSettleExt : cuMemberSettleExtList) {
|
for (CuMemberSettleExt cuMemberSettleExt : cuMemberSettleExtList) {
|
||||||
// 数据已经准备好了,肯定有值,map中是实际的值,先计算新增,然后根据新增结算计算碰次,list是为了存储碰次的顺序
|
// 数据已经准备好了,肯定有值,map中是实际的值,先计算新增,然后根据新增结算计算碰次,list是为了存储碰次的顺序
|
||||||
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkPlaceParent());
|
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkPlaceParent());
|
||||||
if (targetMemberSettleExt == null
|
if (null == targetMemberSettleExt
|
||||||
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
||||||
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|
|| 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;
|
continue;
|
||||||
}
|
}
|
||||||
// 验证是否计算奖金
|
// 验证是否计算奖金
|
||||||
|
|
@ -597,8 +605,9 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
||||||
}
|
}
|
||||||
pkMember = targetMemberSettleExt.getPkParent();
|
pkMember = targetMemberSettleExt.getPkParent();
|
||||||
if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
if (firstBool) {
|
if (firstBool) {
|
||||||
|
|
@ -805,7 +814,8 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
|
||||||
if (targetMemberSettleExt == null
|
if (targetMemberSettleExt == null
|
||||||
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
||||||
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|
||||||
|| ERegistrationAuthority.SERVICE.getValue() != targetMemberSettleExt.getRegisterAuthority()) {
|
|| ERegistrationAuthority.SERVICE.getValue() != targetMemberSettleExt.getRegisterAuthority()
|
||||||
|
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
|
||||||
// 非正常会员、停算收益、不是服务中心,都不进行处理
|
// 非正常会员、停算收益、不是服务中心,都不进行处理
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,391 +1,12 @@
|
||||||
package com.hzs.bonus.bonus.service.impl;
|
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 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
|
@Component
|
||||||
public class BonusSettleHiFunHandle extends BonusSettleHandle {
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -118,7 +118,9 @@ public class BonusSettleNewExpandHandle extends BonusSettleHandle {
|
||||||
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
|
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
|
||||||
if (null == targetMemberSettleExt
|
if (null == targetMemberSettleExt
|
||||||
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
||||||
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
|
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|
||||||
|
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
|
||||||
|
// 会员不满足计算奖金条件,跳过
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// 验证是否有当前奖金项
|
// 验证是否有当前奖金项
|
||||||
|
|
@ -146,7 +148,9 @@ public class BonusSettleNewExpandHandle extends BonusSettleHandle {
|
||||||
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
|
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
|
||||||
if (targetMemberSettleExt == null
|
if (targetMemberSettleExt == null
|
||||||
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
||||||
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
|
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|
||||||
|
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
|
||||||
|
// 会员不满足计算奖金条件,跳过
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// 验证是否有当前奖金项
|
// 验证是否有当前奖金项
|
||||||
|
|
@ -183,7 +187,9 @@ public class BonusSettleNewExpandHandle extends BonusSettleHandle {
|
||||||
if (targetMemberSettleExt == null
|
if (targetMemberSettleExt == null
|
||||||
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
||||||
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|
|| 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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,9 +41,6 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
||||||
@Autowired
|
@Autowired
|
||||||
private BonusSettleFirstPurchaseHandle bonusSettleFirstPurchaseHandle;
|
private BonusSettleFirstPurchaseHandle bonusSettleFirstPurchaseHandle;
|
||||||
|
|
||||||
@DubboReference
|
|
||||||
IAcPickServiceApi iAcPickServiceApi;
|
|
||||||
|
|
||||||
List<CuMemberBonusPush> calculateRepurchasePushBonusOne(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO,
|
List<CuMemberBonusPush> calculateRepurchasePushBonusOne(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO,
|
||||||
Map<Long, CuMemberAssess> cuMemberAssessMap, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap,
|
Map<Long, CuMemberAssess> cuMemberAssessMap, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap,
|
||||||
SaOrderExt saOrderExt) {
|
SaOrderExt saOrderExt) {
|
||||||
|
|
@ -60,9 +57,11 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
||||||
if (targetMemberSettleExt == null) {
|
if (targetMemberSettleExt == null) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// 死点没有奖金
|
// 死点 停算 顾客 没有奖金
|
||||||
if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() ||
|
if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
||||||
EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
|
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|
||||||
|
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
|
||||||
|
// 会员不满足计算奖金条件,跳过
|
||||||
pkParent = targetMemberSettleExt.getPkParent();
|
pkParent = targetMemberSettleExt.getPkParent();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -244,9 +243,11 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
||||||
for (int i = 1; i <= startTouch; i++) {
|
for (int i = 1; i <= startTouch; i++) {
|
||||||
for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) {
|
for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) {
|
||||||
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
|
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
|
||||||
if (targetMemberSettleExt == null
|
if (null == targetMemberSettleExt
|
||||||
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
||||||
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
|
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|
||||||
|
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
|
||||||
|
// 会员不满足计算奖金条件,跳过
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// 验证是否有当前奖金项
|
// 验证是否有当前奖金项
|
||||||
|
|
@ -272,9 +273,11 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
||||||
for (int i = 1; i <= endTouch; i++) {
|
for (int i = 1; i <= endTouch; i++) {
|
||||||
for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) {
|
for (CuMemberSettleExt sourceMemberSettleExt : cuMemberSettleExtList) {
|
||||||
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
|
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(sourceMemberSettleExt.getPkPlaceParent());
|
||||||
if (targetMemberSettleExt == null
|
if (null == targetMemberSettleExt
|
||||||
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
||||||
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
|
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|
||||||
|
|| EGrade.HAI_FAN.getValue() == targetMemberSettleExt.getGradeValue()) {
|
||||||
|
// 会员不满足计算奖金条件,跳过
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// 验证是否有当前奖金项
|
// 验证是否有当前奖金项
|
||||||
|
|
@ -306,10 +309,12 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
|
||||||
for (CuMemberSettleExt cuMemberSettleExt : cuMemberSettleExtList) {
|
for (CuMemberSettleExt cuMemberSettleExt : cuMemberSettleExtList) {
|
||||||
// 数据已经准备好了,肯定有值,map中是实际的值,先计算新增,然后根据新增结算计算碰次,list是为了存储碰次的顺序
|
// 数据已经准备好了,肯定有值,map中是实际的值,先计算新增,然后根据新增结算计算碰次,list是为了存储碰次的顺序
|
||||||
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkPlaceParent());
|
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkPlaceParent());
|
||||||
if (targetMemberSettleExt == null
|
if (null == targetMemberSettleExt
|
||||||
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
|| ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|
||||||
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()
|
|| 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;
|
continue;
|
||||||
}
|
}
|
||||||
// 验证是否计算奖金
|
// 验证是否计算奖金
|
||||||
|
|
|
||||||
|
|
@ -673,8 +673,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @description: 执行甩网业绩
|
* 执行甩网业绩
|
||||||
* @param: null null
|
|
||||||
**/
|
**/
|
||||||
private List<CuMemberAchieveExt> execNetAchieve(Integer period, String settleDate, String currentSettleTableName) {
|
private List<CuMemberAchieveExt> execNetAchieve(Integer period, String settleDate, String currentSettleTableName) {
|
||||||
List<CuMemberSwingNetExt> memberSwingNetExtList = iMemberServiceApi.queryCuMemberSwingNetExt().getData();
|
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,
|
private void calculateRepurchaseCoupons(Date settleDate, List<SaOrderExt> firPurchaseOrderList, Integer period, BonusConfigDTO bonusConfigDTO, Map<Long, CuMemberBonus> cuMemberBonusMap,
|
||||||
BonusRecordDetailVO bonusRecordDetailVO, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap) {
|
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) {
|
private static void addCuMemberBonusDetail(BonusRecordDetailVO bonusRecordDetailVO, List<CuMemberBonusDetail> cuMemberBonusDetailList) {
|
||||||
if (cuMemberBonusDetailList.size() > 0) {
|
if (cuMemberBonusDetailList.size() > 0) {
|
||||||
if (bonusRecordDetailVO.getCuMemberBonusDetailList() != null) {
|
if (bonusRecordDetailVO.getCuMemberBonusDetailList() != null) {
|
||||||
|
|
@ -1333,8 +1269,6 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 计算订单奖金累计值
|
* 计算订单奖金累计值
|
||||||
*
|
|
||||||
* @return: void
|
|
||||||
*/
|
*/
|
||||||
private MemberBonusDetailCalVO calculateOrderRatio(Map<Long, MemberBonusDetailCalVO> memberBonusDetailVoMap, Object cuMemberBonus) {
|
private MemberBonusDetailCalVO calculateOrderRatio(Map<Long, MemberBonusDetailCalVO> memberBonusDetailVoMap, Object cuMemberBonus) {
|
||||||
Long pkOrder = ReflectUtils.invokeGetter(cuMemberBonus, "pkOrder");
|
Long pkOrder = ReflectUtils.invokeGetter(cuMemberBonus, "pkOrder");
|
||||||
|
|
|
||||||
|
|
@ -882,7 +882,8 @@
|
||||||
left join (
|
left join (
|
||||||
select cmbd.pk_member, cmbd.after_grant_income
|
select cmbd.pk_member, cmbd.after_grant_income
|
||||||
from CU_MEMBER_BONUS_DELAY cmbd
|
from CU_MEMBER_BONUS_DELAY cmbd
|
||||||
where exists (select 1
|
where exists
|
||||||
|
(select 1
|
||||||
from (select cmbd.pk_member, max(cmbd.period) period
|
from (select cmbd.pk_member, max(cmbd.period) period
|
||||||
from cu_member_bonus_delay cmbd
|
from cu_member_bonus_delay cmbd
|
||||||
where cmbd.del_flag = 0
|
where cmbd.del_flag = 0
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue