## 乐学复购200级差收益修改;三单循环改为使用订单业绩;

This commit is contained in:
cabbage 2025-04-11 14:01:46 +08:00
parent 82ceb5b135
commit 8edfc05ece
14 changed files with 191 additions and 182 deletions

View File

@ -71,11 +71,6 @@ public class LoginMember implements Serializable {
*/
private CuMemberShare cuMemberShare;
/**
* 生态科技仓小程序游客未绑定会员
*/
private CuMemberWechat cuMemberWechat;
/**
* 结算国家此字段实体不存值只做部分业务传递参数使用
*/

View File

@ -7,9 +7,7 @@ import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 会员奖金-4-n碰次重算奖金表 Mapper 接口
* </p>
*
* @author hzs
* @since 2024-07-23

View File

@ -69,6 +69,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
// 推荐奖明细
List<CuMemberBonusPush> cuMemberBonusPushList = new ArrayList<>();
Set<Integer> pkCountrySet = firPurchaseOrderList.stream().distinct().map(SaOrderExt::getPkCountry).collect(Collectors.toSet());
// 根据国家拿出对应的等级
Map<Integer, List<GradeDTO>> gradeDtoMap = gradeServiceApi.queryCountryGradeConfigByCondition(pkCountrySet).getData();
// 等级对应的业绩
for (SaOrderExt saOrderExt : firPurchaseOrderList) {
@ -81,7 +82,9 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
cuMemberBonusPushList.add(cuMemberBonusPush);
}
}
// 乐学易考特殊注册多一个不扣20%
// TODO new 乐学直推级差收益需要按新逻辑修改级差等级4个封顶上限修改
// V2订单6000最多发3000V1拿400V4最多拿3000前面等级没拿后面等级就多拿一份
List<SaOrderExt> specialOrderList = new ArrayList<>();
firPurchaseOrderList.forEach(saOrderExt -> {
if (EOrderType.SPECIAL_REGISTER_ORDER.getValue() == saOrderExt.getOrderType() ||
@ -90,10 +93,6 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
}
});
if (specialOrderList.size() > 0) {
// 优客 推荐 6000/36000/128000 1800 vip 600 svip拿 600
// vip 推荐 36000 10800 svip 7200
// svip推荐 128000 38000
// TODO new 乐学直推级差收益需要按新逻辑修改级差等级4个封顶上限修改
Set<Long> memberSet = new HashSet<>();
specialOrderList.forEach(saOrderExt -> memberSet.add(saOrderExt.getPkMember()));
cuMemberSettleExtList = cuMemberTreeService.batchQuerySpecialCuMemberSettleParent(settleTableName, memberSet);
@ -182,8 +181,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
// BigDecimal realIncome = ReflectUtils.invokeGetter(cuMemberBonusPush, BonusFieldConstants.REAL_INCOME);
// cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), realIncome));
// TODO new 首购实发小计实发收益总计
// 比原来多累计到首购实发小计
// TODO new 首购实发小计实发收益总计比原来多累计到首购实发小计
setFirstPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusPush);
}
cuMemberBonusPush.setRemark(String.format(BonusMsgConstants.RECOMMEND_SPECIAL_DIRECT, saOrderExt.getOrderCode(),
@ -239,21 +237,26 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
if (targetMemberSettleExt == null) {
return null;
}
// 死点没有奖金
if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
// 死点 停算收益 没有奖金
if (ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory()
|| EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus()) {
return null;
}
// 当前国家是否有该奖项
if (validatePkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.DIRECT_INCOME.getValue())) {
return null;
}
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
// 直推奖金明细
int pkBonusItem = getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.DIRECT_INCOME.getValue());
CuMemberBonusPush cuMemberBonusPush = getCuMemberBonusPush(saOrderExt, targetMemberSettleExt, cuMemberBonus, pkBonusItem);
// 扣项
if (Objects.equals(EOrderType.UPGRADE_ORDER.getValue(), saOrderExt.getOrderType())) {
if (Objects.equals(EOrderType.UPGRADE_ORDER.getValue(), saOrderExt.getOrderType())
|| Objects.equals(EOrderType.SPECIAL_UPGRADE_ORDER.getValue(), saOrderExt.getOrderType())) {
String value = systemConfigMap.get(targetMemberSettleExt.getPkSettleCountry() + EnumsKeyConstants.BONUS_UPGRADE_TYPE);
// 只计算固定值不进入三单
// 只计算固定值不进入三单系统参数 -> 直推配置不纳入循环下处理
if (Objects.equals(EUpgradeIncomeType.FIXED_VALUE.getValue(), value)) {
// 分比例跟固定值
BonusDifferenceDTO bonusDifferenceDTO = bonusConfigDTO.getBonusDifferenceDtoMap().get(targetMemberSettleExt.getPkSettleCountry());
@ -273,10 +276,14 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
return cuMemberBonusPush;
}
}
// 直推循环配置第几单 给多少 比例
Map<String, BonusDirectLoopDTO> bonusDirectLoopDtoMap = bonusConfigDTO.getBonusDirectLoopDtoMap();
// TODO new 直推奖励配置目前应该不需要之前配置的是区代市代
Map<String, BonusDirectDTO> bonusDirectDtoMap = bonusConfigDTO.getBonusDirectDtoMap();
// 根据会员等级获取等级对应的参数
// 判断轮次是否满足循环最后一个最后一个需要重置增加轮次获取循环方式
// 直推方式1=三单循环 2=四单循环
String recommendType = systemConfigMap.get(targetMemberSettleExt.getPkSettleCountry() + EnumsKeyConstants.BONUS_RECOMMEND_TYPE);
// 固定值 验证是否推荐的是固定值
String memberCountryKey = getMemberCountryKey(awardsMap, sourceSettleExt, new HashMap<>());
@ -309,16 +316,17 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
// 直接计算奖金 业绩 * 计算值判断是否有扣项
// 获取等级对应的业绩
BigDecimal orderAchieve = saOrderExt.getOrderAchieve();
// 获得升级方式
String value = systemConfigMap.get(targetMemberSettleExt.getPkSettleCountry() + ESystemConfig.UPGRADE_WAY.getKey());
if (Objects.equals(Integer.toString(EUpgradeWay.COVER.getValue()), value) && CollectionUtil.isNotEmpty(gradeList)) {
for (GradeDTO gradeDTO : gradeList) {
if (validateGradeByAchieve(saOrderExt.getOrderAmount(), saOrderExt.getOrderAchieve(), gradeDTO)) {
orderAchieve = gradeDTO.getStartValue();
break;
}
}
}
// TODO new 乐学处理直接使用订单业绩不跟等级业绩走
// // 获得升级方式
// String value = systemConfigMap.get(targetMemberSettleExt.getPkSettleCountry() + ESystemConfig.UPGRADE_WAY.getKey());
// if (Objects.equals(Integer.toString(EUpgradeWay.COVER.getValue()), value) && CollectionUtil.isNotEmpty(gradeList)) {
// for (GradeDTO gradeDTO : gradeList) {
// if (validateGradeByAchieve(saOrderExt.getOrderAmount(), saOrderExt.getOrderAchieve(), gradeDTO)) {
// orderAchieve = gradeDTO.getStartValue();
// break;
// }
// }
// }
cuMemberBonusPush.setCalAchieve(orderAchieve);
cuMemberBonusPush.setPretaxIncome(ComputeUtil.computeBonusMultiply(orderAchieve, cuMemberBonusPush.getCalValue()));
}
@ -355,6 +363,9 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
return Boolean.FALSE;
}
/**
* 设置奖金扣项以及直推备注
*/
void setBonusPushIncome(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO, SaOrderExt saOrderExt, CuMemberBonus cuMemberBonus, CuMemberBonusPush cuMemberBonusPush) {
// 奖金扣项
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusPush, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());

View File

@ -282,6 +282,33 @@ public abstract class BonusSettleHandle {
});
}
/**
* @param saOrderExt 订单编号
* @param cuMemberBonusPush 直推奖
* @param cuMemberSettleExtMap 存储会员网体的map
* @Description: 获得 直推收益的备注
* @return: String
* @Author: sui q
* @Date: 2022/11/17 11:22
*/
protected void recommendRemark(SaOrderExt saOrderExt, CuMemberBonusPush cuMemberBonusPush, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap) {
CuMemberSettleExt sourceCuMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
CuMemberSettleExt targetCuMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkReference());
String remark;
if (cuMemberBonusPush.getSecond() == 0) {
remark = String.format(BonusMsgConstants.RECOMMEND_DIRECT, saOrderExt.getOrderCode(),
sourceCuMemberSettleExt.getMemberCode() + sourceCuMemberSettleExt.getMemberName(),
targetCuMemberSettleExt.getMemberCode() + targetCuMemberSettleExt.getMemberName(),
cuMemberBonusPush.getRealIncome());
} else {
remark = String.format(BonusMsgConstants.RECOMMEND, cuMemberBonusPush.getRound() + 1, cuMemberBonusPush.getSecond(), saOrderExt.getOrderCode(),
sourceCuMemberSettleExt.getMemberCode() + sourceCuMemberSettleExt.getMemberName(),
targetCuMemberSettleExt.getMemberCode() + targetCuMemberSettleExt.getMemberName(),
cuMemberBonusPush.getCalAchieve(), cuMemberBonusPush.getCalValue());
}
cuMemberBonusPush.setRemark(remark);
}
/**
* @param cuMemberSettleExtMap 会员结算
* @param cuMemberSettleExtList 查询出来的结算数据
@ -332,33 +359,6 @@ public abstract class BonusSettleHandle {
});
}
/**
* @param saOrderExt 订单编号
* @param cuMemberBonusPush 直推奖
* @param cuMemberSettleExtMap 存储会员网体的map
* @Description: 获得 直推收益的备注
* @return: String
* @Author: sui q
* @Date: 2022/11/17 11:22
*/
protected void recommendRemark(SaOrderExt saOrderExt, CuMemberBonusPush cuMemberBonusPush, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap) {
CuMemberSettleExt sourceCuMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
CuMemberSettleExt targetCuMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkReference());
String remark;
if (cuMemberBonusPush.getSecond() == 0) {
remark = String.format(BonusMsgConstants.RECOMMEND_DIRECT, saOrderExt.getOrderCode(),
sourceCuMemberSettleExt.getMemberCode() + sourceCuMemberSettleExt.getMemberName(),
targetCuMemberSettleExt.getMemberCode() + targetCuMemberSettleExt.getMemberName(),
cuMemberBonusPush.getRealIncome());
} else {
remark = String.format(BonusMsgConstants.RECOMMEND, cuMemberBonusPush.getRound() + 1, cuMemberBonusPush.getSecond(), saOrderExt.getOrderCode(),
sourceCuMemberSettleExt.getMemberCode() + sourceCuMemberSettleExt.getMemberName(),
targetCuMemberSettleExt.getMemberCode() + targetCuMemberSettleExt.getMemberName(),
cuMemberBonusPush.getCalAchieve(), cuMemberBonusPush.getCalValue());
}
cuMemberBonusPush.setRemark(remark);
}
/**
* @param saOrderExt 订单编号
* @param cuMemberBonusPush 直推奖
@ -1056,8 +1056,8 @@ public abstract class BonusSettleHandle {
protected void setCuMemberAchieve(SaOrderExt saOrderExt, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO) {
CuMemberSettleExt cuMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
if (EOrderType.REGISTER_ORDER.getValue() == saOrderExt.getOrderType() ||
Objects.equals(EOrderType.SPECIAL_REGISTER_ORDER.getValue(), saOrderExt.getOrderType())) {
if (EOrderType.REGISTER_ORDER.getValue() == saOrderExt.getOrderType()
|| Objects.equals(EOrderType.SPECIAL_REGISTER_ORDER.getValue(), saOrderExt.getOrderType())) {
cuMemberSettleExt.setRegisterAmount(ComputeUtil.computeAdd(cuMemberSettleExt.getRegisterAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
cuMemberSettleExt.setRegisterPv(ComputeUtil.computeAdd(cuMemberSettleExt.getRegisterPv(), saOrderExt.getOrderAchieve()));
cuMemberSettleExt.setRegisterNewAmount(ComputeUtil.computeAdd(cuMemberSettleExt.getRegisterNewAmount(), convertLocalCurrency(saOrderExt, bonusConfigDTO)));
@ -1070,6 +1070,11 @@ public abstract class BonusSettleHandle {
}
}
/**
* 处理汇率
*
* @return
*/
protected BigDecimal convertLocalCurrency(SaOrder saOrderExt, BonusConfigDTO bonusConfigDTO) {
Map<String, BdCurrencyDTO> currencyDtoMap = bonusConfigDTO.getCurrencyDtoMap();
String key = saOrderExt.getPkCountry().toString() + saOrderExt.getPkRate();

View File

@ -757,20 +757,23 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
// 法宝券和商品数量一致
if (gradeValue < targetMemberSettleExt.getGradeValue() && EGrade.MAKER.getValue() == targetMemberSettleExt.getGradeValue() && V2Flag && V3Flag) {
// 订单会员等级小于推荐人等级 并且 推荐人是 V2 并且 V2 V3 都没有算过
this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList);
if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
V2Flag = Boolean.FALSE;
}
} else if (gradeValue < targetMemberSettleExt.getGradeValue() && EGrade.VIP.getValue() == targetMemberSettleExt.getGradeValue() && V3Flag) {
// 订单会员等级小于推荐人等级 并且 推荐人是 V3 并且 V3没有算过
this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList);
if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
V3Flag = Boolean.FALSE;
}
} else if (gradeValue < targetMemberSettleExt.getGradeValue() && EGrade.S_VIP.getValue() == targetMemberSettleExt.getGradeValue()) {
// 订单会员等级小于推荐人等级 并且 推荐人是 V4
this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList);
if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
break;
}
}
pkParent = targetMemberSettleExt.getPkParent();
sourceMemberSettleExt = targetMemberSettleExt;
}
@ -801,25 +804,29 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
// 法宝券和商品数量一致
if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.YOU_KE.getValue() == targetMemberSettleExt.getGradeValue() && V1Flag && V2Flag && V3Flag) {
// 订单会员等级小于推荐人等级 并且 推荐人是 V1 并且 V1 V2 V3 都没有算过
this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList);
if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
V1Flag = Boolean.FALSE;
}
} else if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.MAKER.getValue() == targetMemberSettleExt.getGradeValue() && V2Flag && V3Flag) {
// 订单会员等级小于推荐人等级 并且 推荐人是 V2 并且 V2 V3 都没有算过
this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList);
if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
V2Flag = Boolean.FALSE;
}
} else if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.VIP.getValue() == targetMemberSettleExt.getGradeValue() && V3Flag) {
// 订单会员等级小于推荐人等级 并且 推荐人是 V3 并且 V3没有算过
this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList);
if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
V3Flag = Boolean.FALSE;
}
} else if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.S_VIP.getValue() == targetMemberSettleExt.getGradeValue()) {
// 订单会员等级小于推荐人等级 并且 推荐人是 V4
this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList);
if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
break;
}
}
pkParent = targetMemberSettleExt.getPkParent();
sourceMemberSettleExt = targetMemberSettleExt;
}
@ -828,14 +835,16 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
/**
* 封装法宝券抵扣相关
*/
private void handlePick(Map<String, RangeDTO> rangeDtoMap, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap,
private boolean handlePick(Map<String, RangeDTO> rangeDtoMap, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap,
SaOrderExt saOrderExt, SaOrderItemsExt saOrderItemsExt, CuMemberSettleExt sourceMemberSettleExt, CuMemberSettleExt targetMemberSettleExt,
List<CuMemberBonusRange> cuMemberBonusRangeList, List<AcPickExt> acPickExtList) {
AcPickExt acPickExt = calculateRangeBonus(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, sourceMemberSettleExt,
targetMemberSettleExt, cuMemberBonusRangeList);
if (null != acPickExt) {
acPickExtList.add(acPickExt);
return true;
}
return false;
}
/**

View File

@ -415,6 +415,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
// bonusSettlePurchaseHandle.assortSaOrder(cuMemberAchieveHashMap, firPurchaseOrderList, bonusConfigDTO, Boolean.TRUE);
// bonusSettlePurchaseHandle.assortSaOrder(cuMemberAchieveHashMap, repurchaseOrderList, bonusConfigDTO, Boolean.FALSE);
// cuMemberTreeService.updateCuMemberSettle(cuMemberAchieveHashMap, currentSettleTableName);
//*********************************计算奖衔 更新奖衔*********************************/
// 开始计算奖衔 计算奖衔 更新奖衔根据最新业绩查询变动且业绩满足下一等级根据等级判断是否满足考核安置考核或血缘考核
// 拉取变动过业绩的人 period >0 的为变动过业绩的人
@ -425,6 +426,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
// cuMemberAwardsService.calculateCuMemberAwards(settleDate, awardsMap, currentSettleTableName);
// 计算完奖衔回退业绩最终根据新增进行回写
// cuMemberTreeService.updateCuMemberBackSettle(cuMemberAchieveHashMap, currentSettleTableName);
//********************************重新考核*********************************/
// TODO new 乐学没有分红复购考核这个位置需要去掉
cuMemberAssessService.retryCalculationAssess(DateUtils.parseStringToDate(settleDate), Boolean.TRUE);
@ -436,8 +438,8 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
Map<Long, CuMemberSettleExt> cuMemberSettleExtMap = new HashMap<>();
BonusRecordDetailVO recordDetailVO = new BonusRecordDetailVO();
// 乐学易考奖金计算回写代金券数量
// 计算奖金主入口
// 乐学易考奖金计算回写代金券数量
LeXueRangeParam leXueRangeParam = calculateBonusBySaOrderList(settleDate, period, currentSettleTableName,
firPurchaseOrderList, repurchaseOrderList, mallOrderList,
awardsMap, bonusConfigDTO, cuMemberBonusMap,
@ -455,13 +457,17 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
// bonusSettleRangeHandle.calculateRetailBonusBySaOrder(settleDate, cuMemberBonusMap, bonusConfigDTO, recordDetailVO,
// period, yesterdayPeriod, retailOrderList, isSameMonth);
// 验证是否月奖验证是否是结算月底那一天月底那一天计算云代判断是否为月底
//*********************************计算云代奖金、 复购券均分收益************************/
if (settleDate.endsWith("10")) {
// 计算云代奖金
calculateCloudAgentOrder(settleDate, bonusConfigDTO, period, recordDetailVO, cuMemberBonusMap);
Map<Long, CuAwardsControl> cuAwardsControlMap = getCuAwardsControlMap();
calculateShareBonus(settleDate, bonusConfigDTO, period, recordDetailVO, cuMemberBonusMap, cuAwardsControlMap);
}
// TODO new 云代复购券均分分红暂时不处理
// if (settleDate.endsWith("10")) {
// // 计算云代奖金复购券均分
// calculateCloudAgentOrder(settleDate, bonusConfigDTO, period, recordDetailVO, cuMemberBonusMap);
// // 分红
// Map<Long, CuAwardsControl> cuAwardsControlMap = getCuAwardsControlMap();
// calculateShareBonus(settleDate, bonusConfigDTO, period, recordDetailVO, cuMemberBonusMap, cuAwardsControlMap);
// }
// // 计算店铺奖金
// if(settleDate.endsWith("10")){
// calculateStoreOrder(settleDate, bonusConfigDTO, period, recordDetailVO, cuMemberBonusMap);
@ -488,6 +494,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
if (retMemberAchieveExtList.size() > 0) {
cuMemberSwingNetLogService.mergeCuMemberSwingNetLogByAchieve(retMemberAchieveExtList, currentSettleTableName);
}
// 迁移网体数据到月表
cuMemberTreeService.insertCuMemberTreeBySettleDate(settleDate, currentSettleTableName, period);
Date currentDate = DateUtils.afterDate(1, ChronoUnit.DAYS, DateUtils.parseStringToDate(settleDate));
@ -752,6 +759,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
Map<Long, CuMemberBonus> weekMemberBonusMap = getWeekMemberBonusMap(settleDate, period);
Map<String, String> systemConfigMap = systemConfigServiceApi.getBonusSystemConfig().getData();
Map<String, RangeDTO> rangeDtoMap = rangeServiceApi.queryRangeDto().getData();
// 查询K值控制
List<CuMemberRiskControl> cuMemberRiskControlList = cuMemberRiskControlService.queryCuMemberRiskControl(DateUtils.parseStringToDate(settleDate));
Map<Long, CuMemberRiskControl> riskControlMap = new HashMap<>();
@ -763,6 +771,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
Map<Long, CuBonusExpandExt> cuBonusExpandExtMap = new HashMap<>();
List<CuBonusExpandExt> cuBonusExpandExtList = bonusExpandService.queryBonusExpand(bonusExpandParam);
cuBonusExpandExtList.forEach(cuBonusExpandExt -> cuBonusExpandExtMap.put(cuBonusExpandExt.getPkMember(), cuBonusExpandExt));
// 先计算复购在计算首购
// 计算复购
if (repurchaseOrderList.size() > 0) {
@ -934,6 +943,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
//***************************计算推荐奖(直推级差、直推三单循环)******************************/
List<CuMemberBonusPush> cuMemberBonusPushList = bonusSettleFirstPurchaseHandle.calculateRecommendBonus(cuMemberSettleExtMap, settleTableName, bonusConfigDTO, systemConfigMap, firPurchaseOrderList, period, cuMemberBonusMap, awardsMap);
bonusRecordDetailVO.setCuMemberBonusPushList(cuMemberBonusPushList);
//****************************计算量奖*****************************/
List<CuMemberBonusExpand> cuMemberBonusExpandList = bonusSettleFirstPurchaseHandle.calculateExpandBonus(cuMemberSettleExtMap, settleDate, settleTableName, bonusConfigDTO, systemConfigMap, firPurchaseOrderList, period, weekMemberBonusMap, cuMemberBonusMap, riskControlMap, cuBonusExpandExtMap);
if (cuMemberBonusExpandList.size() > 0) {
@ -1040,7 +1050,8 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
private LeXueRangeParam calculatePurchaseOrder(Map<Long, CuMemberRiskControl> riskControlMap, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, String settleDate, Map<String, RangeDTO> rangeDtoMap,
Map<String, BdAwards> awardsMap, BonusConfigDTO bonusConfigDTO, Map<String, String> systemConfigMap, List<SaOrderExt> purchaseOrderList, Integer period, Map<Long, CuMemberBonus> weekMemberBonusMap,
Map<Long, CuMemberBonus> cuMemberBonusMap, BonusRecordDetailVO bonusRecordDetailVO, Map<Long, CuAwardsControl> cuAwardsControlMap, Map<Long, CuBonusExpandExt> cuBonusExpandExtMap) {
//****************************复购直推*****************************/ 查找10代血缘验证复购考核考核通过的给与奖金 紧缩
//****************************复购直推*****************************
// 查找10代血缘验证复购考核考核通过的给与奖金 紧缩
// List<CuMemberBonusPush> cuMemberBonusPushList = bonusSettlePurchaseHandle.calculateRepurchasePushBonus(cuMemberSettleExtMap, settleTableName, settleDate, bonusConfigDTO, purchaseOrderList, period, cuMemberBonusMap);
// if (cuMemberBonusPushList.size() > 0) {
// if (bonusRecordDetailVO.getCuMemberBonusPushList() == null) {
@ -1058,11 +1069,12 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
bonusRecordDetailVO.getCuMemberBonusExpandList().addAll(cuMemberBonusExpandList);
}
}
//****************************乐学极差(复购)*****************************/
LeXueRangeParam leXueRangeParam = new LeXueRangeParam();
//****************************复购极差*****************************/
List<CuMemberBonusRange> cuMemberBonusRangeList = bonusSettlePurchaseHandle.calculateRepurchaseRangeBonus(cuMemberSettleExtMap, settleTableName, settleDate, rangeDtoMap, awardsMap,
bonusConfigDTO, purchaseOrderList, period, cuMemberBonusMap, cuAwardsControlMap, leXueRangeParam);
bonusRecordDetailVO.setCuMemberBonusRangeList(cuMemberBonusRangeList);
Map<Long, MemberBonusDetailCalVO> memberBonusDetailCalVoMap = new HashMap<>(ComputeUtil.mapInitCapacity(purchaseOrderList.size()));
cuMemberBonusExpandList.forEach(cuMemberBonusExpand -> {
MemberBonusDetailCalVO memberBonusDetailCalVO = calculateOrderRatio(memberBonusDetailCalVoMap, cuMemberBonusExpand);
@ -1072,6 +1084,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
MemberBonusDetailCalVO memberBonusDetailCalVO = calculateOrderRatio(memberBonusDetailCalVoMap, cuMemberBonusRange);
memberBonusDetailCalVO.setRepRangeIncome(ComputeUtil.computeAdd(memberBonusDetailCalVO.getRepRangeIncome(), cuMemberBonusRange.getRealIncome()));
});
Map<Long, SaOrderExt> saOrderExtMap = new HashMap<>(ComputeUtil.mapInitCapacity(purchaseOrderList.size()));
purchaseOrderList.forEach(saOrderExt ->
saOrderExtMap.put(saOrderExt.getPkId(), saOrderExt));

View File

@ -3,8 +3,7 @@ package com.hzs.bonus.bonus.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
import com.hzs.bonus.bonus.mapper.CuBonusExpandMapper;
@ -12,7 +11,6 @@ import com.hzs.bonus.bonus.param.BonusExpandParam;
import com.hzs.bonus.bonus.service.IBonusSettleService;
import com.hzs.bonus.bonus.service.ICuBonusExpandService;
import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.core.constant.SystemFieldConstants;
import com.hzs.common.core.utils.ComputeUtil;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.domain.member.achieve.CuMemberSettlePeriod;
@ -42,7 +40,6 @@ public class CuBonusExpandServiceImpl extends ServiceImpl<CuBonusExpandMapper, C
@Autowired
private ICuMemberSettlePeriodService memberSettlePeriodService;
@Autowired
private IBonusSettleService bonusSettleService;
@ -168,13 +165,13 @@ public class CuBonusExpandServiceImpl extends ServiceImpl<CuBonusExpandMapper, C
saveBonusExpand.setPkParent(cuBonusExpand.getPkId());
save(saveBonusExpand);
// 2 更新主表
UpdateWrapper<CuBonusExpand> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("ADD_TOUCH", bonusExpandParam.getAddTouch());
updateWrapper.set("EXPAND_RATIO", bonusExpandParam.getExpandRatio());
updateWrapper.set("EXPAND_NUMBER", bonusExpandParam.getExpandNumber());
updateWrapper.set(SystemFieldConstants.PK_MODIFIED, bonusExpandParam.getPkModified());
updateWrapper.set(SystemFieldConstants.MODIFIED_TIME, DateUtils.currentDateTime());
updateWrapper.eq(SystemFieldConstants.PK_ID, bonusExpandParam.getPkId());
LambdaUpdateWrapper<CuBonusExpand> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(CuBonusExpand::getAddTouch, bonusExpandParam.getAddTouch());
updateWrapper.set(CuBonusExpand::getExpandRatio, bonusExpandParam.getExpandRatio());
updateWrapper.set(CuBonusExpand::getExpandNumber, bonusExpandParam.getExpandNumber());
updateWrapper.set(CuBonusExpand::getPkModified, bonusExpandParam.getPkModified());
updateWrapper.set(CuBonusExpand::getModifiedTime, DateUtils.currentDateTime());
updateWrapper.eq(CuBonusExpand::getPkId, bonusExpandParam.getPkId());
update(updateWrapper);
}
}
@ -202,4 +199,5 @@ public class CuBonusExpandServiceImpl extends ServiceImpl<CuBonusExpandMapper, C
queryWrapper.isNull(CuBonusExpand::getPkParent);
return baseMapper.selectList(queryWrapper);
}
}

View File

@ -644,7 +644,7 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
cuMemberTreeService.createCuMemberTree(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.beforeDate(1, ChronoUnit.DAYS)));
log.info("初始化表完成");
// 奖金结算
List<SaOrderExt> saOrderExtList = saOrderServiceApi.listSaOrderByDay(startDate, settleEndDate, null).getData();
List<SaOrderExt> saOrderExtList = saOrderServiceApi.listSaOrderByDay(startDate, settleEndDate, "").getData();
bonusSettleService.calculateCuMemberBonus(settleDate, saOrderExtList);
return Boolean.TRUE;
}

View File

@ -1,6 +1,5 @@
package com.hzs.bonus.bonus.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
@ -22,6 +21,7 @@ import java.math.BigDecimal;
@AllArgsConstructor
@NoArgsConstructor
public class MemberBonusDetailCalVO implements Serializable {
private static final long serialVersionUID = 1L;
/**

View File

@ -34,11 +34,13 @@
using (
select * from(
<foreach collection="cuBonusExpandList" item="item" index="index" separator=" union ">
select #{item.pkId} pk_id,#{item.dayAchieve,jdbcType=NUMERIC} day_achieve,#{item.dayBonus,jdbcType=NUMERIC} day_bonus,
select #{item.pkId} pk_id,#{item.dayAchieve,jdbcType=NUMERIC} day_achieve,#{item.dayBonus,jdbcType=NUMERIC}
day_bonus,
#{item.yesDayRatio,jdbcType=NUMERIC} yes_day_ratio,#{item.curDayRatio,jdbcType=NUMERIC} cur_day_ratio,
#{item.monthAchieve,jdbcType=NUMERIC} month_achieve,#{item.monthBonus,jdbcType=NUMERIC} month_bonus,
#{item.monthRatio,jdbcType=NUMERIC} month_ratio,#{item.dayRepAchieve,jdbcType=NUMERIC} day_rep_achieve,
#{item.dayRepBonus,jdbcType=NUMERIC} day_rep_bonus,#{item.curDayRepRatio,jdbcType=NUMERIC} cur_day_rep_ratio from dual
#{item.dayRepBonus,jdbcType=NUMERIC} day_rep_bonus,#{item.curDayRepRatio,jdbcType=NUMERIC} cur_day_rep_ratio
from dual
</foreach>)
) b
on (ce.pk_id=b.pk_id)
@ -69,7 +71,7 @@
) cu
on cu.pk_id=so.pk_member
where so.order_status = 1 and so.del_flag=0 and so.order_achieve>0 and so.pk_country=1
and so.order_type in(3,9,11,12,14,21,22,23,26,31)
and so.order_type in(3,23,26)
and so.pay_time >= #{bonusExpandParam.startDate,jdbcType=DATE}
and so.pay_time &lt; #{bonusExpandParam.endDate,jdbcType=DATE})) a
inner join(
@ -80,7 +82,8 @@
connect by pk_place_parent =prior pk_id
) cu
on cu.pk_id = cb.pk_member
where period between #{bonusExpandParam.startPeriod} and #{bonusExpandParam.endPeriod} and cb.del_flag=0 and cb.pk_country=1
where period between #{bonusExpandParam.startPeriod} and #{bonusExpandParam.endPeriod} and cb.del_flag=0 and
cb.pk_country=1
) b
on a.pk_member=b.pk_member
join cu_member cm
@ -109,14 +112,16 @@
and so.pay_time >= #{bonusExpandParam.startDate,jdbcType=DATE}
and so.pay_time &lt; #{bonusExpandParam.endDate,jdbcType=DATE})) a
inner join(
select #{item} pk_member,nvl(sum(pur_real_subtotal+maker_real_subtotal),0) pur_real_subtotal from ${tableName} cb
select #{item} pk_member,nvl(sum(pur_real_subtotal+maker_real_subtotal),0) pur_real_subtotal from
${tableName} cb
inner join(
select * from cu_member
start with pk_id=#{item}
connect by pk_place_parent =prior pk_id
) cu
on cu.pk_id = cb.pk_member
where period between #{bonusExpandParam.startPeriod} and #{bonusExpandParam.endPeriod} and cb.del_flag=0 and cb.pk_country=1
where period between #{bonusExpandParam.startPeriod} and #{bonusExpandParam.endPeriod} and cb.del_flag=0 and
cb.pk_country=1
) b
on a.pk_member=b.pk_member
join cu_member cm
@ -127,7 +132,8 @@
</select>
<select id="queryZeroMemberByVertex" resultMap="CuBonusExpandExt">
select cm.pk_id pk_member,bt.pk_id pk_vertex,nvl(bt.sort,99) sort,cm.pk_settle_country pk_country from cu_member cm
select cm.pk_id pk_member, bt.pk_id pk_vertex, nvl(bt.sort, 99) sort, cm.pk_settle_country pk_country
from cu_member cm
inner join cu_member par
on par.pk_id = cm.pk_place_parent
left join bd_vertex bt
@ -167,8 +173,10 @@
</select>
<select id="queryBonusExpandDis" resultMap="CuBonusExpandExt">
select settle_date from cu_bonus_expand
where del_flag=0 and (yes_day_ratio > 65 or CUR_DAY_RATIO > 65 or MONTH_RATIO > 65)
select settle_date
from cu_bonus_expand
where del_flag = 0
and (yes_day_ratio > 65 or CUR_DAY_RATIO > 65 or MONTH_RATIO > 65)
and settle_date > sysdate - 7
group by settle_date
</select>

View File

@ -2,30 +2,6 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hzs.bonus.bonus.mapper.CuMemberRepeatBonusMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.hzs.common.domain.member.bonus.CuMemberRepeatBonus">
<result column="DEL_FLAG" property="delFlag" />
<result column="PK_COUNTRY" property="pkCountry" />
<result column="PK_CREATOR" property="pkCreator" />
<result column="CREATION_TIME" property="creationTime" />
<result column="PK_MODIFIED" property="pkModified" />
<result column="MODIFIED_TIME" property="modifiedTime" />
<result column="PK_MEMBER" property="pkMember" />
<result column="PERIOD" property="period" />
<result column="PK_RATE" property="pkRate" />
<result column="DIRECT_INCOME" property="directIncome" />
<result column="EXPAND_INCOME" property="expandIncome" />
<result column="COACH_INCOME" property="coachIncome" />
<result column="SHARE_INCOME" property="shareIncome" />
<result column="SERVICE_INCOME" property="serviceIncome" />
<result column="BACK_POINTS" property="backPoints" />
<result column="SERVICE_SPEND" property="serviceSpend" />
<result column="PUR_REAL_SUBTOTAL" property="purRealSubtotal" />
<result column="MAKER_DIRECT_INCOME" property="makerDirectIncome" />
<result column="MAKER_SHARE_INCOME" property="makerShareIncome" />
<result column="MAKER_REAL_SUBTOTAL" property="makerRealSubtotal" />
<result column="REAL_INCOME_TOTAL" property="realIncomeTotal" />
</resultMap>
<insert id="insertCuMemberRepeatBonus">
insert ALL
<foreach item="item" index="index" collection="cuMemberRepeatBonusList" separator=" ">

View File

@ -10,7 +10,7 @@ package com.hzs.common.core.constant;
public class EnumsKeyConstants {
/**
* 直推方式
* 直推方式 1=三单循环 2=四单循环
*/
public static final String BONUS_RECOMMEND_TYPE = "RECOMMEND_1";

View File

@ -27,10 +27,12 @@ public enum EAccountStatus {
* 禁止登录
*/
SHUT_DOWN(2, "禁止登录", 0, EnumsPrefixConstants.ACCOUNT_STATUS + "2"),
/**
* 停止收益
*/
STOP_PROFIT(3, "停止收益", 0, EnumsPrefixConstants.ACCOUNT_STATUS + "3"),
/**
* 停算收益
*/

View File

@ -73,12 +73,6 @@ public class MemberTokenService {
pkId = cuMember.getPkId();
memberCode = cuMember.getMemberCode();
pkCountry = cuMember.getPkSettleCountry();
} else if (null != loginMember.getCuMemberWechat()) {
// 生态科技仓小程序游客
CuMemberWechat cuMemberWechat = loginMember.getCuMemberWechat();
pkId = cuMemberWechat.getPkId();
memberCode = cuMemberWechat.getWechatType() + "_" + cuMemberWechat.getOpenId();
pkCountry = cuMemberWechat.getPkCountry();
} else {
// 分享用户处理临时海粉
CuMemberShare cuMemberShare = loginMember.getCuMemberShare();