forked from angelo/java-retail-app
## 注册、升级、复购、重消订单业绩、盒数都算自己小区;
This commit is contained in:
parent
572b0caf54
commit
66973a5675
|
@ -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);
|
||||
|
|
|
@ -18,7 +18,6 @@ import com.hzs.common.domain.sale.ext.BdWaresDetailExt;
|
|||
import com.hzs.common.domain.sale.ext.SaOrderExt;
|
||||
import com.hzs.common.domain.sale.ext.SaOrderWaresLimitExt;
|
||||
import com.hzs.common.domain.sale.order.*;
|
||||
import com.hzs.common.domain.sale.product.BdProduct;
|
||||
import com.hzs.common.domain.sale.wares.BdWaresRange;
|
||||
import com.hzs.common.domain.system.base.BdStorehouse;
|
||||
import com.hzs.common.domain.system.config.BdGrade;
|
||||
|
@ -82,8 +81,6 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
|
|||
private ISaOrderTempService iSaOrderTempService;
|
||||
@Autowired
|
||||
private ISaOrderWaresLimitService iSaOrderWaresLimitService;
|
||||
@Autowired
|
||||
private IBdProductService iBdProductService;
|
||||
|
||||
@Autowired
|
||||
private RedisService redisService;
|
||||
|
@ -820,7 +817,9 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
|
|||
// 指定商品拆分 并且 非赠品
|
||||
if (boxProductList.contains(saOrderItems.getWareCode())
|
||||
&& EYesNo.NO.getIntValue() == saOrderItems.getIsGift()) {
|
||||
orderWaresMap.merge(saOrderItems.getPkWares() + "-" + saOrderItems.getPrice(), saOrderItems.getWaresQuantity(), Integer::sum);
|
||||
// key: 商品ID-商品价格(产品价格*产品数量)
|
||||
String key = saOrderItems.getPkWares() + "-" + (saOrderItems.getPrice().multiply(new BigDecimal(saOrderItems.getQuantity())));
|
||||
orderWaresMap.merge(key, saOrderItems.getWaresQuantity(), Integer::sum);
|
||||
|
||||
waresLimitMap.merge(saOrderItems.getPkWares(), saOrderItems.getWaresQuantity(), Integer::sum);
|
||||
}
|
||||
|
|
|
@ -7,7 +7,16 @@ import java.util.List;
|
|||
/**
|
||||
* 新零售商品常量类
|
||||
*/
|
||||
public class RetailProductConstants {
|
||||
public class RetailConstants {
|
||||
|
||||
/**
|
||||
* 直推级差等级收益(每个等级为40元)
|
||||
*/
|
||||
public static final BigDecimal LEVEL_RANGE_BONUS = new BigDecimal("40");
|
||||
/**
|
||||
* 直推平级收益比例(每代拿商品价格的千分之五)
|
||||
*/
|
||||
public static final BigDecimal LEVEL_RATIO = new BigDecimal("0.005");
|
||||
|
||||
/**
|
||||
* 区域分红,每盒2元
|
|
@ -5,17 +5,13 @@ import lombok.AllArgsConstructor;
|
|||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @Description: 会员收益状态 会员表,会员网体表,奖金汇总表
|
||||
* @Author: sui q
|
||||
* @Time: 2022/11/4 11:03
|
||||
* @Classname: EIncomeStatus
|
||||
* @PackageName: com.hzs.common.core.enums
|
||||
* 会员收益状态 会员表,会员网体表,奖金汇总表
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum EIncomeStatus {
|
||||
/**
|
||||
*正常
|
||||
* 正常
|
||||
*/
|
||||
NORMAL(0, "正常", 0, EnumsPrefixConstants.INCOME_STATUS + "0"),
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.hzs.common.core.utils;
|
||||
|
||||
import com.hzs.common.core.constant.RetailProductConstants;
|
||||
import com.hzs.common.core.constant.RetailConstants;
|
||||
import com.hzs.common.core.enums.ESystemType;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -18,13 +18,13 @@ public class BoxProductUtil {
|
|||
List<String> productList = new ArrayList<>(0);
|
||||
|
||||
if (null == systemType || ESystemType.ALL.getValue() == systemType) {
|
||||
productList.addAll(RetailProductConstants.ALL_BOX_WARES_LIST);
|
||||
productList.addAll(RetailConstants.ALL_BOX_WARES_LIST);
|
||||
return productList;
|
||||
|
||||
}
|
||||
if (ESystemType.DEFAULT.getValue() == systemType) {
|
||||
// 新零售
|
||||
productList = RetailProductConstants.BOX_PRODUCT_LIST;
|
||||
productList = RetailConstants.BOX_PRODUCT_LIST;
|
||||
}
|
||||
return productList;
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ import lombok.*;
|
|||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 会员奖金-奖金收益明细表(复购极差)
|
||||
* 会员奖金-奖金收益明细表(复购极差) -- 新直推级差
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
|
|
Loading…
Reference in New Issue