|
|
|
@ -8,7 +8,7 @@ import com.hzs.bonus.detail.service.ICuMemberAwardsService;
|
|
|
|
|
import com.hzs.bonus.detail.service.ICuMemberGradeService;
|
|
|
|
|
import com.hzs.bonus.order.service.IBonusOrderService;
|
|
|
|
|
import com.hzs.common.core.constant.MagicNumberConstants;
|
|
|
|
|
import com.hzs.common.core.constant.RetailProductConstants;
|
|
|
|
|
import com.hzs.common.core.constant.RetailConstants;
|
|
|
|
|
import com.hzs.common.core.constant.TableNameConstants;
|
|
|
|
|
import com.hzs.common.core.constant.msg.BonusMsgConstants;
|
|
|
|
|
import com.hzs.common.core.enums.*;
|
|
|
|
@ -133,27 +133,21 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
|
|
|
|
// 订单指定产品盒数
|
|
|
|
|
int boxNum = 0;
|
|
|
|
|
for (SaOrderWaresExt saOrderItems : saOrderExt.getOrderWaresExtList()) {
|
|
|
|
|
for (String waresCode : RetailProductConstants.ALL_BOX_WARES_LIST) {
|
|
|
|
|
if (saOrderItems.getWaresCode().equals(waresCode)) {
|
|
|
|
|
if (RetailConstants.ALL_BOX_WARES_LIST.contains(saOrderItems.getWaresCode())) {
|
|
|
|
|
boxNum += saOrderItems.getWaresQuantity();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
saOrderExt.setBoxNum(boxNum);
|
|
|
|
|
|
|
|
|
|
// 订单业绩
|
|
|
|
|
BigDecimal orderAchieve = saOrderExt.getOrderAchieve();
|
|
|
|
|
if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()
|
|
|
|
|
|| EOrderType.RETAIL_CONSUME.getValue() == saOrderExt.getOrderType()
|
|
|
|
|
) {
|
|
|
|
|
// 复购、重消,盒数、业绩算个人累计数据(盒数、业绩)
|
|
|
|
|
// 注册、升级、复购、重消,盒数、业绩算个人累计数据(盒数、业绩)
|
|
|
|
|
sourceMemberRangeExt.setNewBoxNum(sourceMemberRangeExt.getNewBoxNum() + boxNum);
|
|
|
|
|
sourceMemberRangeExt.setConsumeBoxNum(sourceMemberRangeExt.getConsumeBoxNum() + boxNum);
|
|
|
|
|
sourceMemberRangeExt.setNewConsumePv(ComputeUtil.computeAdd(sourceMemberRangeExt.getNewConsumePv(), orderAchieve));
|
|
|
|
|
sourceMemberRangeExt.setConsumePv(ComputeUtil.computeAdd(sourceMemberRangeExt.getConsumePv(), orderAchieve));
|
|
|
|
|
sourceMemberRangeExt.setMonthConsumePv(ComputeUtil.computeAdd(sourceMemberRangeExt.getMonthConsumePv(), orderAchieve));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 会员等级升级记录
|
|
|
|
|
List<CuMemberGrade> cuMemberGradeList = new ArrayList<>();
|
|
|
|
@ -166,25 +160,30 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
|
|
|
|
|
|
|
|
|
// TODO new 奖金处理
|
|
|
|
|
List<CuMemberBonusRange> cuMemberBonusRangeList = new ArrayList<>();
|
|
|
|
|
// 计算奖金 计算平级收益
|
|
|
|
|
if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType()
|
|
|
|
|
|| EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()
|
|
|
|
|
) {
|
|
|
|
|
// 注册、升级订单,计算奖金: 直推级差收益 + 平级收益
|
|
|
|
|
for (SaOrderWaresExt saOrderItems : saOrderExt.getOrderWaresExtList()) {
|
|
|
|
|
for (String waresCode : RetailProductConstants.ALL_BOX_WARES_LIST) {
|
|
|
|
|
if (saOrderItems.getWaresCode().equals(waresCode)) {
|
|
|
|
|
// 计算级差收益,平级收益
|
|
|
|
|
if (RetailConstants.ALL_BOX_WARES_LIST.contains(saOrderItems.getWaresCode())) {
|
|
|
|
|
// 指定盒数商品
|
|
|
|
|
// 计算直推级差收益 + 平级收益
|
|
|
|
|
cuMemberBonusRangeList.addAll(calculateRetailRangeBonus(memberRangeExtMap, cuMemberBonusMap, gradeMap, bonusConfigDTO, currentPeriod, saOrderItems, saOrderExt));
|
|
|
|
|
if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType() ||
|
|
|
|
|
EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType() ||
|
|
|
|
|
EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()) {
|
|
|
|
|
|
|
|
|
|
if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType()
|
|
|
|
|
|| EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()) {
|
|
|
|
|
// 注册、升级,计算是否激活
|
|
|
|
|
sourceMemberRangeExt.setEnableStatus(EYesNo.YES.getIntValue());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 查询区域配置
|
|
|
|
|
Map<String, CuMemberRetailRangeExt> countyRangeExtMap = new HashMap<>();
|
|
|
|
|
List<CuMemberRetailRangeExt> countyRangeExtList = iCuMemberRetailRangeService.batchQueryMemberRetailSecondRangeByCounty(rangeTableName, secondRangeTableName, saOrderExt.getRecCounty());
|
|
|
|
|
countyRangeExtList.forEach(cuMemberRetailRangeExt ->
|
|
|
|
|
countyRangeExtMap.put(cuMemberRetailRangeExt.getSystemType() + "_" + cuMemberRetailRangeExt.getRegionAddress(), cuMemberRetailRangeExt));
|
|
|
|
|
|
|
|
|
|
// 计算区域奖
|
|
|
|
|
CuMemberBonusDetail cuMemberBonusDetail = calculateRetailAreaBonus(countyRangeExtMap, bonusConfigDTO, currentPeriod, memberRangeExtMap, cuMemberBonusMap, saOrderExt);
|
|
|
|
|
if (cuMemberBonusDetail != null) {
|
|
|
|
@ -277,27 +276,21 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
|
|
|
|
// 先算等级 注册、升级计算等级
|
|
|
|
|
int boxNum = 0;
|
|
|
|
|
for (SaOrderWaresExt saOrderItems : saOrderExt.getOrderWaresExtList()) {
|
|
|
|
|
for (String waresCode : RetailProductConstants.ALL_BOX_WARES_LIST) {
|
|
|
|
|
if (saOrderItems.getWaresCode().equals(waresCode)) {
|
|
|
|
|
if (RetailConstants.ALL_BOX_WARES_LIST.contains(saOrderItems.getWaresCode())) {
|
|
|
|
|
boxNum += saOrderItems.getWaresQuantity();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
saOrderExt.setBoxNum(boxNum);
|
|
|
|
|
|
|
|
|
|
// 订单业绩
|
|
|
|
|
BigDecimal orderAchieve = saOrderExt.getOrderAchieve();
|
|
|
|
|
if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()
|
|
|
|
|
|| EOrderType.RETAIL_CONSUME.getValue() == saOrderExt.getOrderType()
|
|
|
|
|
) {
|
|
|
|
|
// 复购、重消,盒数、业绩算个人累计数据(盒数、业绩)
|
|
|
|
|
sourceMemberRangeExt.setConsumeBoxNum(sourceMemberRangeExt.getConsumeBoxNum() - boxNum);
|
|
|
|
|
sourceMemberRangeExt.setNewBoxNum(sourceMemberRangeExt.getNewBoxNum() - boxNum);
|
|
|
|
|
sourceMemberRangeExt.setConsumePv(ComputeUtil.computeSubtract(sourceMemberRangeExt.getConsumePv(), orderAchieve));
|
|
|
|
|
sourceMemberRangeExt.setMonthConsumePv(ComputeUtil.computeSubtract(sourceMemberRangeExt.getMonthConsumePv(), orderAchieve));
|
|
|
|
|
sourceMemberRangeExt.setNewConsumePv(ComputeUtil.computeSubtract(sourceMemberRangeExt.getNewConsumePv(), orderAchieve));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 会员等级map
|
|
|
|
|
Map<String, CuMemberGrade> cuMemberGradeMap = new HashMap<>();
|
|
|
|
@ -527,28 +520,21 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
|
|
|
|
// 计算自消费奖衔
|
|
|
|
|
CuMemberRetailRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
|
|
|
|
|
// 订单指定产品盒数(计算等级使用)
|
|
|
|
|
int boxNum = saOrderExt.getBoxNum();
|
|
|
|
|
// int boxNum = 0;
|
|
|
|
|
// for (SaOrderWaresExt saOrderItems : saOrderExt.getOrderWaresExtList()) {
|
|
|
|
|
// for (String waresCode : RetailProductConstants.ALL_BOX_WARES_LIST) {
|
|
|
|
|
// if (saOrderItems.getWaresCode() != null && saOrderItems.getWaresCode().equals(waresCode)) {
|
|
|
|
|
// boxNum += saOrderItems.getWaresQuantity();
|
|
|
|
|
// break;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
int boxNum = 0;
|
|
|
|
|
for (SaOrderWaresExt saOrderItems : saOrderExt.getOrderWaresExtList()) {
|
|
|
|
|
if (RetailConstants.ALL_BOX_WARES_LIST.contains(saOrderItems.getWaresCode())) {
|
|
|
|
|
boxNum += saOrderItems.getWaresQuantity();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 个人累计消费pv
|
|
|
|
|
BigDecimal orderAchieve = saOrderExt.getOrderAchieve();
|
|
|
|
|
if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()
|
|
|
|
|
|| EOrderType.RETAIL_CONSUME.getValue() == saOrderExt.getOrderType()
|
|
|
|
|
) {
|
|
|
|
|
// 复购、重消,盒数、业绩算个人累计数据(盒数、业绩)
|
|
|
|
|
sourceMemberRangeExt.setConsumeBoxNum(sourceMemberRangeExt.getConsumeBoxNum() + boxNum);
|
|
|
|
|
sourceMemberRangeExt.setNewBoxNum(sourceMemberRangeExt.getNewBoxNum() + boxNum);
|
|
|
|
|
sourceMemberRangeExt.setConsumePv(ComputeUtil.computeAdd(sourceMemberRangeExt.getConsumePv(), orderAchieve));
|
|
|
|
|
sourceMemberRangeExt.setMonthConsumePv(ComputeUtil.computeAdd(sourceMemberRangeExt.getMonthConsumePv(), orderAchieve));
|
|
|
|
|
sourceMemberRangeExt.setNewConsumePv(ComputeUtil.computeAdd(sourceMemberRangeExt.getNewConsumePv(), orderAchieve));
|
|
|
|
|
}
|
|
|
|
|
// 计算自己等级、奖衔等
|
|
|
|
|
calculateGradeAwards(period, memberRangeExtMap, rangeTableName, saOrderExt, retailTeamGradeMap, retailAwardsMap, null, cuMemberGradeList, cuMemberAwardsList, sourceMemberRangeExt);
|
|
|
|
|
// 计算团队业绩、盒数,计算等级、奖衔
|
|
|
|
@ -1310,35 +1296,83 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 计算极差收益,根据极差收益计算平级收益
|
|
|
|
|
* 计算直推级差收益,根据直推级差收益计算平级收益
|
|
|
|
|
*/
|
|
|
|
|
List<CuMemberBonusRange> calculateRetailRangeBonus(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, Map<Long, CuMemberBonus> cuMemberBonusMap,
|
|
|
|
|
Map<Integer, BdGrade> gradeMap, BonusConfigDTO bonusConfigDTO, Integer period,
|
|
|
|
|
SaOrderWaresExt saOrderItems, SaOrderExt saOrderExt) {
|
|
|
|
|
// 直推级差返回数据
|
|
|
|
|
List<CuMemberBonusRange> memberBonusRangeList = new ArrayList<>();
|
|
|
|
|
// 用等级计算,按照一级级算
|
|
|
|
|
|
|
|
|
|
// 订单下单人自己
|
|
|
|
|
CuMemberRetailRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
|
|
|
|
|
// 推荐人
|
|
|
|
|
long pkParent = sourceMemberRangeExt.getPkParent();
|
|
|
|
|
// 商品价格(没有乘商品数量)
|
|
|
|
|
BigDecimal beginBuyPrice = saOrderItems.getWaresPrice();
|
|
|
|
|
BigDecimal comBuyPrice = saOrderItems.getWaresPrice();
|
|
|
|
|
|
|
|
|
|
// 开始计算等级值
|
|
|
|
|
int beginGradeValue = sourceMemberRangeExt.getGradeValue();
|
|
|
|
|
// 直推级差收益
|
|
|
|
|
BigDecimal calBonusIncome = BigDecimal.ZERO;
|
|
|
|
|
// 计算极差
|
|
|
|
|
|
|
|
|
|
// 临时等级
|
|
|
|
|
int tmpGradeValue = 0;
|
|
|
|
|
// 计算直推级差
|
|
|
|
|
while (true) {
|
|
|
|
|
// 推荐人
|
|
|
|
|
CuMemberRetailRangeExt targetMemberRangeExt = memberRangeExtMap.get(pkParent);
|
|
|
|
|
if (targetMemberRangeExt == null) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 推荐人的推荐人
|
|
|
|
|
pkParent = targetMemberRangeExt.getPkParent();
|
|
|
|
|
if (EAccountStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getAccountStatus() ||
|
|
|
|
|
ECategory.NORMAL.getValue() != targetMemberRangeExt.getCategory() ||
|
|
|
|
|
targetMemberRangeExt.getEnableStatus() == EYesNo.NO.getIntValue() ||
|
|
|
|
|
targetMemberRangeExt.getGradeValue() == EGrade.START_UP.getValue() ||
|
|
|
|
|
EIncomeStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getIncomeStatus()) {
|
|
|
|
|
|
|
|
|
|
// TODO new 新处理奖金
|
|
|
|
|
|
|
|
|
|
if (EAccountStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getAccountStatus()
|
|
|
|
|
|| ECategory.NORMAL.getValue() != targetMemberRangeExt.getCategory()
|
|
|
|
|
|| targetMemberRangeExt.getEnableStatus() == EYesNo.NO.getIntValue()
|
|
|
|
|
|| targetMemberRangeExt.getGradeValue() == EGrade.START_UP.getValue()
|
|
|
|
|
|| EIncomeStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getIncomeStatus()) {
|
|
|
|
|
// 停算收益、非正常会员、未激活、等级为顾客、停止收益,直接跳过
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
// 推荐V1 有额外100
|
|
|
|
|
// 当前会员等级值
|
|
|
|
|
int calGradeValue = targetMemberRangeExt.getGradeValue();
|
|
|
|
|
|
|
|
|
|
// 税前收益
|
|
|
|
|
BigDecimal pretaxIncome;
|
|
|
|
|
if (tmpGradeValue == 0) {
|
|
|
|
|
// 临时等级为0
|
|
|
|
|
tmpGradeValue = calGradeValue;
|
|
|
|
|
|
|
|
|
|
if (EGrade.HAI_FAN.getValue() == calGradeValue) {
|
|
|
|
|
// VIP,拿1份40
|
|
|
|
|
pretaxIncome = RetailConstants.LEVEL_RANGE_BONUS;
|
|
|
|
|
} else if (EGrade.YOU_KE.getValue() == calGradeValue) {
|
|
|
|
|
// SVIP,拿2份40
|
|
|
|
|
pretaxIncome = RetailConstants.LEVEL_RANGE_BONUS.multiply(new BigDecimal("2"));
|
|
|
|
|
} else if (EGrade.MAKER.getValue() == calGradeValue) {
|
|
|
|
|
// 卓越,拿3份40
|
|
|
|
|
pretaxIncome = RetailConstants.LEVEL_RANGE_BONUS.multiply(new BigDecimal("3"));
|
|
|
|
|
} else if (EGrade.VIP.getValue() == calGradeValue) {
|
|
|
|
|
// 首席,拿4份40
|
|
|
|
|
pretaxIncome = RetailConstants.LEVEL_RANGE_BONUS.multiply(new BigDecimal("4"));
|
|
|
|
|
} else if (EGrade.S_VIP.getValue() == calGradeValue) {
|
|
|
|
|
// 合伙人,拿5份40
|
|
|
|
|
pretaxIncome = RetailConstants.LEVEL_RANGE_BONUS.multiply(new BigDecimal("5"));
|
|
|
|
|
}
|
|
|
|
|
} else if (calGradeValue == tmpGradeValue) {
|
|
|
|
|
// 当前会员等级
|
|
|
|
|
|
|
|
|
|
} else if (calGradeValue > tmpGradeValue) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 如果价格是209,代表是第一单激活,只有平级收益,只有V5有平级收益
|
|
|
|
|
if (beginBuyPrice.equals(BigDecimal.valueOf(209))) {
|
|
|
|
|
calGradeValue = EGrade.S_VIP.getValue();
|
|
|
|
@ -1514,7 +1548,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
|
|
|
|
|
|
|
|
|
BigDecimal boxNumBig = new BigDecimal(saOrder.getBoxNum());
|
|
|
|
|
// 处理区域收益(每盒2元)
|
|
|
|
|
BigDecimal benefitIncome = RetailProductConstants.AREA_BOX_BONUS.multiply(boxNumBig);
|
|
|
|
|
BigDecimal benefitIncome = RetailConstants.AREA_BOX_BONUS.multiply(boxNumBig);
|
|
|
|
|
CuMemberBonusDetail cuMemberBonusDetail = packageBenefitIncome(bonusConfigDTO, period, cuMemberBonusMap, null, BigDecimal.ZERO, benefitIncome,
|
|
|
|
|
cuMemberRetailRangeExt, EBonusItems.RETAIL_AREA_INCOME.getValue(), BonusMsgConstants.RETAIL_AREA_INCOME);
|
|
|
|
|
cuMemberBonusDetail.setCalAchieve(boxNumBig);
|
|
|
|
|