## 乐学复购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 CuMemberShare cuMemberShare;
/**
* 生态科技仓小程序游客未绑定会员
*/
private CuMemberWechat cuMemberWechat;
/** /**
* 结算国家此字段实体不存值只做部分业务传递参数使用 * 结算国家此字段实体不存值只做部分业务传递参数使用
*/ */

View File

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

View File

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

View File

@ -757,19 +757,22 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
// 法宝券和商品数量一致 // 法宝券和商品数量一致
if (gradeValue < targetMemberSettleExt.getGradeValue() && EGrade.MAKER.getValue() == targetMemberSettleExt.getGradeValue() && V2Flag && V3Flag) { if (gradeValue < targetMemberSettleExt.getGradeValue() && EGrade.MAKER.getValue() == targetMemberSettleExt.getGradeValue() && V2Flag && V3Flag) {
// 订单会员等级小于推荐人等级 并且 推荐人是 V2 并且 V2 V3 都没有算过 // 订单会员等级小于推荐人等级 并且 推荐人是 V2 并且 V2 V3 都没有算过
this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList); sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
V2Flag = Boolean.FALSE; V2Flag = Boolean.FALSE;
}
} else if (gradeValue < targetMemberSettleExt.getGradeValue() && EGrade.VIP.getValue() == targetMemberSettleExt.getGradeValue() && V3Flag) { } else if (gradeValue < targetMemberSettleExt.getGradeValue() && EGrade.VIP.getValue() == targetMemberSettleExt.getGradeValue() && V3Flag) {
// 订单会员等级小于推荐人等级 并且 推荐人是 V3 并且 V3没有算过 // 订单会员等级小于推荐人等级 并且 推荐人是 V3 并且 V3没有算过
this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList); sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
V3Flag = Boolean.FALSE; V3Flag = Boolean.FALSE;
}
} else if (gradeValue < targetMemberSettleExt.getGradeValue() && EGrade.S_VIP.getValue() == targetMemberSettleExt.getGradeValue()) { } else if (gradeValue < targetMemberSettleExt.getGradeValue() && EGrade.S_VIP.getValue() == targetMemberSettleExt.getGradeValue()) {
// 订单会员等级小于推荐人等级 并且 推荐人是 V4 // 订单会员等级小于推荐人等级 并且 推荐人是 V4
this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList); sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
break; break;
}
} }
pkParent = targetMemberSettleExt.getPkParent(); pkParent = targetMemberSettleExt.getPkParent();
sourceMemberSettleExt = targetMemberSettleExt; sourceMemberSettleExt = targetMemberSettleExt;
@ -801,24 +804,28 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle {
// 法宝券和商品数量一致 // 法宝券和商品数量一致
if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.YOU_KE.getValue() == targetMemberSettleExt.getGradeValue() && V1Flag && V2Flag && V3Flag) { if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.YOU_KE.getValue() == targetMemberSettleExt.getGradeValue() && V1Flag && V2Flag && V3Flag) {
// 订单会员等级小于推荐人等级 并且 推荐人是 V1 并且 V1 V2 V3 都没有算过 // 订单会员等级小于推荐人等级 并且 推荐人是 V1 并且 V1 V2 V3 都没有算过
this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList); sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
V1Flag = Boolean.FALSE; V1Flag = Boolean.FALSE;
}
} else if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.MAKER.getValue() == targetMemberSettleExt.getGradeValue() && V2Flag && V3Flag) { } else if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.MAKER.getValue() == targetMemberSettleExt.getGradeValue() && V2Flag && V3Flag) {
// 订单会员等级小于推荐人等级 并且 推荐人是 V2 并且 V2 V3 都没有算过 // 订单会员等级小于推荐人等级 并且 推荐人是 V2 并且 V2 V3 都没有算过
this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList); sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
V2Flag = Boolean.FALSE; V2Flag = Boolean.FALSE;
}
} else if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.VIP.getValue() == targetMemberSettleExt.getGradeValue() && V3Flag) { } else if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.VIP.getValue() == targetMemberSettleExt.getGradeValue() && V3Flag) {
// 订单会员等级小于推荐人等级 并且 推荐人是 V3 并且 V3没有算过 // 订单会员等级小于推荐人等级 并且 推荐人是 V3 并且 V3没有算过
this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList); sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
V3Flag = Boolean.FALSE; V3Flag = Boolean.FALSE;
}
} else if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.S_VIP.getValue() == targetMemberSettleExt.getGradeValue()) { } else if (gradeValue <= targetMemberSettleExt.getGradeValue() && EGrade.S_VIP.getValue() == targetMemberSettleExt.getGradeValue()) {
// 订单会员等级小于推荐人等级 并且 推荐人是 V4 // 订单会员等级小于推荐人等级 并且 推荐人是 V4
this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, if (this.handlePick(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt,
sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList); sourceMemberSettleExt, targetMemberSettleExt, cuMemberBonusRangeList, acPickExtList)) {
break; break;
}
} }
pkParent = targetMemberSettleExt.getPkParent(); pkParent = targetMemberSettleExt.getPkParent();
sourceMemberSettleExt = targetMemberSettleExt; 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, SaOrderExt saOrderExt, SaOrderItemsExt saOrderItemsExt, CuMemberSettleExt sourceMemberSettleExt, CuMemberSettleExt targetMemberSettleExt,
List<CuMemberBonusRange> cuMemberBonusRangeList, List<AcPickExt> acPickExtList) { List<CuMemberBonusRange> cuMemberBonusRangeList, List<AcPickExt> acPickExtList) {
AcPickExt acPickExt = calculateRangeBonus(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, sourceMemberSettleExt, AcPickExt acPickExt = calculateRangeBonus(rangeDtoMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, saOrderItemsExt, sourceMemberSettleExt,
targetMemberSettleExt, cuMemberBonusRangeList); targetMemberSettleExt, cuMemberBonusRangeList);
if (null != acPickExt) { if (null != acPickExt) {
acPickExtList.add(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, firPurchaseOrderList, bonusConfigDTO, Boolean.TRUE);
// bonusSettlePurchaseHandle.assortSaOrder(cuMemberAchieveHashMap, repurchaseOrderList, bonusConfigDTO, Boolean.FALSE); // bonusSettlePurchaseHandle.assortSaOrder(cuMemberAchieveHashMap, repurchaseOrderList, bonusConfigDTO, Boolean.FALSE);
// cuMemberTreeService.updateCuMemberSettle(cuMemberAchieveHashMap, currentSettleTableName); // cuMemberTreeService.updateCuMemberSettle(cuMemberAchieveHashMap, currentSettleTableName);
//*********************************计算奖衔 更新奖衔*********************************/ //*********************************计算奖衔 更新奖衔*********************************/
// 开始计算奖衔 计算奖衔 更新奖衔根据最新业绩查询变动且业绩满足下一等级根据等级判断是否满足考核安置考核或血缘考核 // 开始计算奖衔 计算奖衔 更新奖衔根据最新业绩查询变动且业绩满足下一等级根据等级判断是否满足考核安置考核或血缘考核
// 拉取变动过业绩的人 period >0 的为变动过业绩的人 // 拉取变动过业绩的人 period >0 的为变动过业绩的人
@ -425,6 +426,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
// cuMemberAwardsService.calculateCuMemberAwards(settleDate, awardsMap, currentSettleTableName); // cuMemberAwardsService.calculateCuMemberAwards(settleDate, awardsMap, currentSettleTableName);
// 计算完奖衔回退业绩最终根据新增进行回写 // 计算完奖衔回退业绩最终根据新增进行回写
// cuMemberTreeService.updateCuMemberBackSettle(cuMemberAchieveHashMap, currentSettleTableName); // cuMemberTreeService.updateCuMemberBackSettle(cuMemberAchieveHashMap, currentSettleTableName);
//********************************重新考核*********************************/ //********************************重新考核*********************************/
// TODO new 乐学没有分红复购考核这个位置需要去掉 // TODO new 乐学没有分红复购考核这个位置需要去掉
cuMemberAssessService.retryCalculationAssess(DateUtils.parseStringToDate(settleDate), Boolean.TRUE); cuMemberAssessService.retryCalculationAssess(DateUtils.parseStringToDate(settleDate), Boolean.TRUE);
@ -436,8 +438,8 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
Map<Long, CuMemberSettleExt> cuMemberSettleExtMap = new HashMap<>(); Map<Long, CuMemberSettleExt> cuMemberSettleExtMap = new HashMap<>();
BonusRecordDetailVO recordDetailVO = new BonusRecordDetailVO(); BonusRecordDetailVO recordDetailVO = new BonusRecordDetailVO();
// 乐学易考奖金计算回写代金券数量
// 计算奖金主入口 // 计算奖金主入口
// 乐学易考奖金计算回写代金券数量
LeXueRangeParam leXueRangeParam = calculateBonusBySaOrderList(settleDate, period, currentSettleTableName, LeXueRangeParam leXueRangeParam = calculateBonusBySaOrderList(settleDate, period, currentSettleTableName,
firPurchaseOrderList, repurchaseOrderList, mallOrderList, firPurchaseOrderList, repurchaseOrderList, mallOrderList,
awardsMap, bonusConfigDTO, cuMemberBonusMap, awardsMap, bonusConfigDTO, cuMemberBonusMap,
@ -455,13 +457,17 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
// bonusSettleRangeHandle.calculateRetailBonusBySaOrder(settleDate, cuMemberBonusMap, bonusConfigDTO, recordDetailVO, // bonusSettleRangeHandle.calculateRetailBonusBySaOrder(settleDate, cuMemberBonusMap, bonusConfigDTO, recordDetailVO,
// period, yesterdayPeriod, retailOrderList, isSameMonth); // period, yesterdayPeriod, retailOrderList, isSameMonth);
// 验证是否月奖验证是否是结算月底那一天月底那一天计算云代判断是否为月底 // 验证是否月奖验证是否是结算月底那一天月底那一天计算云代判断是否为月底
//*********************************计算云代奖金、 复购券均分收益************************/ //*********************************计算云代奖金、 复购券均分收益************************/
if (settleDate.endsWith("10")) { // TODO new 云代复购券均分分红暂时不处理
// 计算云代奖金 // if (settleDate.endsWith("10")) {
calculateCloudAgentOrder(settleDate, bonusConfigDTO, period, recordDetailVO, cuMemberBonusMap); // // 计算云代奖金复购券均分
Map<Long, CuAwardsControl> cuAwardsControlMap = getCuAwardsControlMap(); // calculateCloudAgentOrder(settleDate, bonusConfigDTO, period, recordDetailVO, cuMemberBonusMap);
calculateShareBonus(settleDate, bonusConfigDTO, period, recordDetailVO, cuMemberBonusMap, cuAwardsControlMap); // // 分红
} // Map<Long, CuAwardsControl> cuAwardsControlMap = getCuAwardsControlMap();
// calculateShareBonus(settleDate, bonusConfigDTO, period, recordDetailVO, cuMemberBonusMap, cuAwardsControlMap);
// }
// // 计算店铺奖金 // // 计算店铺奖金
// if(settleDate.endsWith("10")){ // if(settleDate.endsWith("10")){
// calculateStoreOrder(settleDate, bonusConfigDTO, period, recordDetailVO, cuMemberBonusMap); // calculateStoreOrder(settleDate, bonusConfigDTO, period, recordDetailVO, cuMemberBonusMap);
@ -488,6 +494,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
if (retMemberAchieveExtList.size() > 0) { if (retMemberAchieveExtList.size() > 0) {
cuMemberSwingNetLogService.mergeCuMemberSwingNetLogByAchieve(retMemberAchieveExtList, currentSettleTableName); cuMemberSwingNetLogService.mergeCuMemberSwingNetLogByAchieve(retMemberAchieveExtList, currentSettleTableName);
} }
// 迁移网体数据到月表 // 迁移网体数据到月表
cuMemberTreeService.insertCuMemberTreeBySettleDate(settleDate, currentSettleTableName, period); cuMemberTreeService.insertCuMemberTreeBySettleDate(settleDate, currentSettleTableName, period);
Date currentDate = DateUtils.afterDate(1, ChronoUnit.DAYS, DateUtils.parseStringToDate(settleDate)); 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<Long, CuMemberBonus> weekMemberBonusMap = getWeekMemberBonusMap(settleDate, period);
Map<String, String> systemConfigMap = systemConfigServiceApi.getBonusSystemConfig().getData(); Map<String, String> systemConfigMap = systemConfigServiceApi.getBonusSystemConfig().getData();
Map<String, RangeDTO> rangeDtoMap = rangeServiceApi.queryRangeDto().getData(); Map<String, RangeDTO> rangeDtoMap = rangeServiceApi.queryRangeDto().getData();
// 查询K值控制 // 查询K值控制
List<CuMemberRiskControl> cuMemberRiskControlList = cuMemberRiskControlService.queryCuMemberRiskControl(DateUtils.parseStringToDate(settleDate)); List<CuMemberRiskControl> cuMemberRiskControlList = cuMemberRiskControlService.queryCuMemberRiskControl(DateUtils.parseStringToDate(settleDate));
Map<Long, CuMemberRiskControl> riskControlMap = new HashMap<>(); Map<Long, CuMemberRiskControl> riskControlMap = new HashMap<>();
@ -763,6 +771,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
Map<Long, CuBonusExpandExt> cuBonusExpandExtMap = new HashMap<>(); Map<Long, CuBonusExpandExt> cuBonusExpandExtMap = new HashMap<>();
List<CuBonusExpandExt> cuBonusExpandExtList = bonusExpandService.queryBonusExpand(bonusExpandParam); List<CuBonusExpandExt> cuBonusExpandExtList = bonusExpandService.queryBonusExpand(bonusExpandParam);
cuBonusExpandExtList.forEach(cuBonusExpandExt -> cuBonusExpandExtMap.put(cuBonusExpandExt.getPkMember(), cuBonusExpandExt)); cuBonusExpandExtList.forEach(cuBonusExpandExt -> cuBonusExpandExtMap.put(cuBonusExpandExt.getPkMember(), cuBonusExpandExt));
// 先计算复购在计算首购 // 先计算复购在计算首购
// 计算复购 // 计算复购
if (repurchaseOrderList.size() > 0) { 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); List<CuMemberBonusPush> cuMemberBonusPushList = bonusSettleFirstPurchaseHandle.calculateRecommendBonus(cuMemberSettleExtMap, settleTableName, bonusConfigDTO, systemConfigMap, firPurchaseOrderList, period, cuMemberBonusMap, awardsMap);
bonusRecordDetailVO.setCuMemberBonusPushList(cuMemberBonusPushList); bonusRecordDetailVO.setCuMemberBonusPushList(cuMemberBonusPushList);
//****************************计算量奖*****************************/ //****************************计算量奖*****************************/
List<CuMemberBonusExpand> cuMemberBonusExpandList = bonusSettleFirstPurchaseHandle.calculateExpandBonus(cuMemberSettleExtMap, settleDate, settleTableName, bonusConfigDTO, systemConfigMap, firPurchaseOrderList, period, weekMemberBonusMap, cuMemberBonusMap, riskControlMap, cuBonusExpandExtMap); List<CuMemberBonusExpand> cuMemberBonusExpandList = bonusSettleFirstPurchaseHandle.calculateExpandBonus(cuMemberSettleExtMap, settleDate, settleTableName, bonusConfigDTO, systemConfigMap, firPurchaseOrderList, period, weekMemberBonusMap, cuMemberBonusMap, riskControlMap, cuBonusExpandExtMap);
if (cuMemberBonusExpandList.size() > 0) { 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, 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<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) { 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); // List<CuMemberBonusPush> cuMemberBonusPushList = bonusSettlePurchaseHandle.calculateRepurchasePushBonus(cuMemberSettleExtMap, settleTableName, settleDate, bonusConfigDTO, purchaseOrderList, period, cuMemberBonusMap);
// if (cuMemberBonusPushList.size() > 0) { // if (cuMemberBonusPushList.size() > 0) {
// if (bonusRecordDetailVO.getCuMemberBonusPushList() == null) { // if (bonusRecordDetailVO.getCuMemberBonusPushList() == null) {
@ -1058,11 +1069,12 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
bonusRecordDetailVO.getCuMemberBonusExpandList().addAll(cuMemberBonusExpandList); bonusRecordDetailVO.getCuMemberBonusExpandList().addAll(cuMemberBonusExpandList);
} }
} }
//****************************乐学极差(复购)*****************************/
LeXueRangeParam leXueRangeParam = new LeXueRangeParam(); LeXueRangeParam leXueRangeParam = new LeXueRangeParam();
//****************************复购极差*****************************/
List<CuMemberBonusRange> cuMemberBonusRangeList = bonusSettlePurchaseHandle.calculateRepurchaseRangeBonus(cuMemberSettleExtMap, settleTableName, settleDate, rangeDtoMap, awardsMap, List<CuMemberBonusRange> cuMemberBonusRangeList = bonusSettlePurchaseHandle.calculateRepurchaseRangeBonus(cuMemberSettleExtMap, settleTableName, settleDate, rangeDtoMap, awardsMap,
bonusConfigDTO, purchaseOrderList, period, cuMemberBonusMap, cuAwardsControlMap, leXueRangeParam); bonusConfigDTO, purchaseOrderList, period, cuMemberBonusMap, cuAwardsControlMap, leXueRangeParam);
bonusRecordDetailVO.setCuMemberBonusRangeList(cuMemberBonusRangeList); bonusRecordDetailVO.setCuMemberBonusRangeList(cuMemberBonusRangeList);
Map<Long, MemberBonusDetailCalVO> memberBonusDetailCalVoMap = new HashMap<>(ComputeUtil.mapInitCapacity(purchaseOrderList.size())); Map<Long, MemberBonusDetailCalVO> memberBonusDetailCalVoMap = new HashMap<>(ComputeUtil.mapInitCapacity(purchaseOrderList.size()));
cuMemberBonusExpandList.forEach(cuMemberBonusExpand -> { cuMemberBonusExpandList.forEach(cuMemberBonusExpand -> {
MemberBonusDetailCalVO memberBonusDetailCalVO = calculateOrderRatio(memberBonusDetailCalVoMap, cuMemberBonusExpand); MemberBonusDetailCalVO memberBonusDetailCalVO = calculateOrderRatio(memberBonusDetailCalVoMap, cuMemberBonusExpand);
@ -1072,6 +1084,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
MemberBonusDetailCalVO memberBonusDetailCalVO = calculateOrderRatio(memberBonusDetailCalVoMap, cuMemberBonusRange); MemberBonusDetailCalVO memberBonusDetailCalVO = calculateOrderRatio(memberBonusDetailCalVoMap, cuMemberBonusRange);
memberBonusDetailCalVO.setRepRangeIncome(ComputeUtil.computeAdd(memberBonusDetailCalVO.getRepRangeIncome(), cuMemberBonusRange.getRealIncome())); memberBonusDetailCalVO.setRepRangeIncome(ComputeUtil.computeAdd(memberBonusDetailCalVO.getRepRangeIncome(), cuMemberBonusRange.getRealIncome()));
}); });
Map<Long, SaOrderExt> saOrderExtMap = new HashMap<>(ComputeUtil.mapInitCapacity(purchaseOrderList.size())); Map<Long, SaOrderExt> saOrderExtMap = new HashMap<>(ComputeUtil.mapInitCapacity(purchaseOrderList.size()));
purchaseOrderList.forEach(saOrderExt -> purchaseOrderList.forEach(saOrderExt ->
saOrderExtMap.put(saOrderExt.getPkId(), 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.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService; import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
import com.hzs.bonus.bonus.mapper.CuBonusExpandMapper; 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.IBonusSettleService;
import com.hzs.bonus.bonus.service.ICuBonusExpandService; import com.hzs.bonus.bonus.service.ICuBonusExpandService;
import com.hzs.common.core.constant.MagicNumberConstants; 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.ComputeUtil;
import com.hzs.common.core.utils.DateUtils; import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.domain.member.achieve.CuMemberSettlePeriod; import com.hzs.common.domain.member.achieve.CuMemberSettlePeriod;
@ -42,7 +40,6 @@ public class CuBonusExpandServiceImpl extends ServiceImpl<CuBonusExpandMapper, C
@Autowired @Autowired
private ICuMemberSettlePeriodService memberSettlePeriodService; private ICuMemberSettlePeriodService memberSettlePeriodService;
@Autowired @Autowired
private IBonusSettleService bonusSettleService; private IBonusSettleService bonusSettleService;
@ -168,13 +165,13 @@ public class CuBonusExpandServiceImpl extends ServiceImpl<CuBonusExpandMapper, C
saveBonusExpand.setPkParent(cuBonusExpand.getPkId()); saveBonusExpand.setPkParent(cuBonusExpand.getPkId());
save(saveBonusExpand); save(saveBonusExpand);
// 2 更新主表 // 2 更新主表
UpdateWrapper<CuBonusExpand> updateWrapper = new UpdateWrapper<>(); LambdaUpdateWrapper<CuBonusExpand> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set("ADD_TOUCH", bonusExpandParam.getAddTouch()); updateWrapper.set(CuBonusExpand::getAddTouch, bonusExpandParam.getAddTouch());
updateWrapper.set("EXPAND_RATIO", bonusExpandParam.getExpandRatio()); updateWrapper.set(CuBonusExpand::getExpandRatio, bonusExpandParam.getExpandRatio());
updateWrapper.set("EXPAND_NUMBER", bonusExpandParam.getExpandNumber()); updateWrapper.set(CuBonusExpand::getExpandNumber, bonusExpandParam.getExpandNumber());
updateWrapper.set(SystemFieldConstants.PK_MODIFIED, bonusExpandParam.getPkModified()); updateWrapper.set(CuBonusExpand::getPkModified, bonusExpandParam.getPkModified());
updateWrapper.set(SystemFieldConstants.MODIFIED_TIME, DateUtils.currentDateTime()); updateWrapper.set(CuBonusExpand::getModifiedTime, DateUtils.currentDateTime());
updateWrapper.eq(SystemFieldConstants.PK_ID, bonusExpandParam.getPkId()); updateWrapper.eq(CuBonusExpand::getPkId, bonusExpandParam.getPkId());
update(updateWrapper); update(updateWrapper);
} }
} }
@ -202,4 +199,5 @@ public class CuBonusExpandServiceImpl extends ServiceImpl<CuBonusExpandMapper, C
queryWrapper.isNull(CuBonusExpand::getPkParent); queryWrapper.isNull(CuBonusExpand::getPkParent);
return baseMapper.selectList(queryWrapper); 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))); cuMemberTreeService.createCuMemberTree(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.beforeDate(1, ChronoUnit.DAYS)));
log.info("初始化表完成"); log.info("初始化表完成");
// 奖金结算 // 奖金结算
List<SaOrderExt> saOrderExtList = saOrderServiceApi.listSaOrderByDay(startDate, settleEndDate, null).getData(); List<SaOrderExt> saOrderExtList = saOrderServiceApi.listSaOrderByDay(startDate, settleEndDate, "").getData();
bonusSettleService.calculateCuMemberBonus(settleDate, saOrderExtList); bonusSettleService.calculateCuMemberBonus(settleDate, saOrderExtList);
return Boolean.TRUE; return Boolean.TRUE;
} }

View File

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

View File

@ -4,29 +4,29 @@
<!-- 通用查询映射结果 --> <!-- 通用查询映射结果 -->
<resultMap id="CuBonusExpandExt" type="com.hzs.common.domain.member.ext.CuBonusExpandExt"> <resultMap id="CuBonusExpandExt" type="com.hzs.common.domain.member.ext.CuBonusExpandExt">
<id column="PK_ID" property="pkId" /> <id column="PK_ID" property="pkId"/>
<result column="DEL_FLAG" property="delFlag" /> <result column="DEL_FLAG" property="delFlag"/>
<result column="PK_COUNTRY" property="pkCountry" /> <result column="PK_COUNTRY" property="pkCountry"/>
<result column="PK_CREATOR" property="pkCreator" /> <result column="PK_CREATOR" property="pkCreator"/>
<result column="CREATION_TIME" property="creationTime" /> <result column="CREATION_TIME" property="creationTime"/>
<result column="PK_MODIFIED" property="pkModified" /> <result column="PK_MODIFIED" property="pkModified"/>
<result column="MODIFIED_TIME" property="modifiedTime" /> <result column="MODIFIED_TIME" property="modifiedTime"/>
<result column="SETTLE_DATE" property="settleDate" /> <result column="SETTLE_DATE" property="settleDate"/>
<result column="PK_MEMBER" property="pkMember" /> <result column="PK_MEMBER" property="pkMember"/>
<result column="PK_VERTEX" property="pkVertex" /> <result column="PK_VERTEX" property="pkVertex"/>
<result column="DAY_ACHIEVE" property="dayAchieve" /> <result column="DAY_ACHIEVE" property="dayAchieve"/>
<result column="DAY_BONUS" property="dayBonus" /> <result column="DAY_BONUS" property="dayBonus"/>
<result column="YES_DAY_RATIO" property="yesDayRatio" /> <result column="YES_DAY_RATIO" property="yesDayRatio"/>
<result column="CUR_DAY_RATIO" property="curDayRatio" /> <result column="CUR_DAY_RATIO" property="curDayRatio"/>
<result column="MONTH_ACHIEVE" property="monthAchieve" /> <result column="MONTH_ACHIEVE" property="monthAchieve"/>
<result column="MONTH_BONUS" property="monthBonus" /> <result column="MONTH_BONUS" property="monthBonus"/>
<result column="MONTH_RATIO" property="monthRatio" /> <result column="MONTH_RATIO" property="monthRatio"/>
<result column="ADD_TOUCH" property="addTouch" /> <result column="ADD_TOUCH" property="addTouch"/>
<result column="SORT" property="sort" /> <result column="SORT" property="sort"/>
<result column="MEMBER_CODE" property="memberCode" /> <result column="MEMBER_CODE" property="memberCode"/>
<result column="MEMBER_NAME" property="memberName" /> <result column="MEMBER_NAME" property="memberName"/>
<result column="VERTEX_NAME" property="vertexName" /> <result column="VERTEX_NAME" property="vertexName"/>
<result column="EXPAND_RATIO" property="expandRatio" /> <result column="EXPAND_RATIO" property="expandRatio"/>
</resultMap> </resultMap>
<update id="mergeBonusExpandByList"> <update id="mergeBonusExpandByList">
@ -34,11 +34,13 @@
using ( using (
select * from( select * from(
<foreach collection="cuBonusExpandList" item="item" index="index" separator=" union "> <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.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.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.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>) </foreach>)
) b ) b
on (ce.pk_id=b.pk_id) on (ce.pk_id=b.pk_id)
@ -69,7 +71,7 @@
) cu ) cu
on cu.pk_id=so.pk_member 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 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 >= #{bonusExpandParam.startDate,jdbcType=DATE}
and so.pay_time &lt; #{bonusExpandParam.endDate,jdbcType=DATE})) a and so.pay_time &lt; #{bonusExpandParam.endDate,jdbcType=DATE})) a
inner join( inner join(
@ -80,7 +82,8 @@
connect by pk_place_parent =prior pk_id connect by pk_place_parent =prior pk_id
) cu ) cu
on cu.pk_id = cb.pk_member 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 ) b
on a.pk_member=b.pk_member on a.pk_member=b.pk_member
join cu_member cm join cu_member cm
@ -109,14 +112,16 @@
and so.pay_time >= #{bonusExpandParam.startDate,jdbcType=DATE} and so.pay_time >= #{bonusExpandParam.startDate,jdbcType=DATE}
and so.pay_time &lt; #{bonusExpandParam.endDate,jdbcType=DATE})) a and so.pay_time &lt; #{bonusExpandParam.endDate,jdbcType=DATE})) a
inner join( 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( inner join(
select * from cu_member select * from cu_member
start with pk_id=#{item} start with pk_id=#{item}
connect by pk_place_parent =prior pk_id connect by pk_place_parent =prior pk_id
) cu ) cu
on cu.pk_id = cb.pk_member 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 ) b
on a.pk_member=b.pk_member on a.pk_member=b.pk_member
join cu_member cm join cu_member cm
@ -127,22 +132,23 @@
</select> </select>
<select id="queryZeroMemberByVertex" resultMap="CuBonusExpandExt"> <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
inner join cu_member par from cu_member cm
on par.pk_id=cm.pk_place_parent inner join cu_member par
left join bd_vertex bt on par.pk_id = cm.pk_place_parent
on cm.pk_id = bt.pk_member and bt.del_flag=0 left join bd_vertex bt
where par.member_code='GJ30720200' on cm.pk_id = bt.pk_member and bt.del_flag = 0
and cm.del_flag=0 where par.member_code = 'GJ30720200'
order by sort,pk_member and cm.del_flag = 0
order by sort, pk_member
</select> </select>
<select id="queryBonusExpand" resultMap="CuBonusExpandExt"> <select id="queryBonusExpand" resultMap="CuBonusExpandExt">
select ce.*,cm.member_code,cm.member_name,bv.vertex_name from cu_bonus_expand ce select ce.*,cm.member_code,cm.member_name,bv.vertex_name from cu_bonus_expand ce
inner join cu_member cm inner join cu_member cm
on ce.pk_member = cm.pk_id on ce.pk_member = cm.pk_id
left join bd_vertex bv left join bd_vertex bv
on ce.pk_vertex=bv.pk_id and bv.del_flag=0 on ce.pk_vertex=bv.pk_id and bv.del_flag=0
where ce.del_flag=0 and cm.del_flag=0 where ce.del_flag=0 and cm.del_flag=0
<if test="pkCountry != null"> <if test="pkCountry != null">
and ce.pk_country = #{pkCountry} and ce.pk_country = #{pkCountry}
@ -151,8 +157,8 @@
and ce.settle_date=#{settleDate,jdbcType=DATE} and ce.settle_date=#{settleDate,jdbcType=DATE}
</if> </if>
<choose> <choose>
<when test="pkParent != null"> and ce.pk_parent=#{pkParent}</when> <when test="pkParent != null">and ce.pk_parent=#{pkParent}</when>
<otherwise> and ce.pk_parent is null</otherwise> <otherwise>and ce.pk_parent is null</otherwise>
</choose> </choose>
<if test="memberCode != null and memberCode != ''"> <if test="memberCode != null and memberCode != ''">
and cm.member_code like '%' || #{memberCode} || '%' and cm.member_code like '%' || #{memberCode} || '%'
@ -167,9 +173,11 @@
</select> </select>
<select id="queryBonusExpandDis" resultMap="CuBonusExpandExt"> <select id="queryBonusExpandDis" resultMap="CuBonusExpandExt">
select settle_date from cu_bonus_expand select settle_date
where del_flag=0 and (yes_day_ratio > 65 or CUR_DAY_RATIO > 65 or MONTH_RATIO > 65) from cu_bonus_expand
and settle_date>sysdate-7 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 group by settle_date
</select> </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"> <!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"> <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 id="insertCuMemberRepeatBonus">
insert ALL insert ALL
<foreach item="item" index="index" collection="cuMemberRepeatBonusList" separator=" "> <foreach item="item" index="index" collection="cuMemberRepeatBonusList" separator=" ">

View File

@ -10,7 +10,7 @@ package com.hzs.common.core.constant;
public class EnumsKeyConstants { public class EnumsKeyConstants {
/** /**
* 直推方式 * 直推方式 1=三单循环 2=四单循环
*/ */
public static final String BONUS_RECOMMEND_TYPE = "RECOMMEND_1"; 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"), SHUT_DOWN(2, "禁止登录", 0, EnumsPrefixConstants.ACCOUNT_STATUS + "2"),
/** /**
* 停止收益 * 停止收益
*/ */
STOP_PROFIT(3, "停止收益", 0, EnumsPrefixConstants.ACCOUNT_STATUS + "3"), STOP_PROFIT(3, "停止收益", 0, EnumsPrefixConstants.ACCOUNT_STATUS + "3"),
/** /**
* 停算收益 * 停算收益
*/ */

View File

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