forked from angelo/java-retail-app
## 调整等级判断处理,注水单独处理;
This commit is contained in:
parent
b84e3439ee
commit
555bfecd30
|
@ -1,7 +1,6 @@
|
||||||
package com.hzs.bonus.settle;
|
package com.hzs.bonus.settle;
|
||||||
|
|
||||||
import com.hzs.common.core.domain.R;
|
import com.hzs.common.core.domain.R;
|
||||||
import com.hzs.common.domain.member.bonus.CuMemberRetail;
|
|
||||||
import com.hzs.common.domain.sale.order.SaOrder;
|
import com.hzs.common.domain.sale.order.SaOrder;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
@ -44,9 +43,4 @@ public interface IMemberSettleBonusApi {
|
||||||
|
|
||||||
void calculateCuMemberRetailRangeBonusBySaOrder();
|
void calculateCuMemberRetailRangeBonusBySaOrder();
|
||||||
|
|
||||||
/*
|
|
||||||
* 根据会员查询会员的 大小区盒数、业绩
|
|
||||||
**/
|
|
||||||
R<CuMemberRetail> queryValidateBoxOrAchieve(Long pkMember);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -232,17 +232,6 @@ public class CuMemberSettleController extends BaseController {
|
||||||
return AjaxResult.success();
|
return AjaxResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 秒接结算业绩,仅用于测试
|
|
||||||
* w
|
|
||||||
*
|
|
||||||
* @return AjaxResult
|
|
||||||
*/
|
|
||||||
@GetMapping("/validate/{pkMember}")
|
|
||||||
public TableDataInfo validateBigBox(@PathVariable("pkMember") Long pkMember) {
|
|
||||||
return getDataTable(Collections.singletonList(bonusSettleService.queryValidateBoxOrAchieve(pkMember)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 秒接结算业绩,仅用于测试
|
* 秒接结算业绩,仅用于测试
|
||||||
*
|
*
|
||||||
|
|
|
@ -9,7 +9,6 @@ import com.hzs.bonus.bonus.service.ICuMemberRetailLogService;
|
||||||
import com.hzs.bonus.settle.IMemberSettleBonusApi;
|
import com.hzs.bonus.settle.IMemberSettleBonusApi;
|
||||||
import com.hzs.common.core.domain.R;
|
import com.hzs.common.core.domain.R;
|
||||||
import com.hzs.common.core.utils.DateUtils;
|
import com.hzs.common.core.utils.DateUtils;
|
||||||
import com.hzs.common.domain.member.bonus.CuMemberRetail;
|
|
||||||
import com.hzs.common.domain.member.bonus.CuMemberRetailLog;
|
import com.hzs.common.domain.member.bonus.CuMemberRetailLog;
|
||||||
import com.hzs.common.domain.sale.order.SaOrder;
|
import com.hzs.common.domain.sale.order.SaOrder;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
@ -118,8 +117,4 @@ public class MemberSettleBonusProvider implements IMemberSettleBonusApi {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public R<CuMemberRetail> queryValidateBoxOrAchieve(Long pkMember) {
|
|
||||||
return R.ok(iBonusSettleService.queryValidateBoxOrAchieve(pkMember));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package com.hzs.bonus.bonus.service;
|
package com.hzs.bonus.bonus.service;
|
||||||
|
|
||||||
import com.hzs.common.domain.member.bonus.CuMemberRetail;
|
|
||||||
import com.hzs.common.domain.sale.ext.SaOrderExt;
|
import com.hzs.common.domain.sale.ext.SaOrderExt;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -28,9 +27,4 @@ public interface IBonusSettleService {
|
||||||
**/
|
**/
|
||||||
void repeatCuMemberBonusByExpand(String settleDate, List<SaOrderExt> saOrderExtList);
|
void repeatCuMemberBonusByExpand(String settleDate, List<SaOrderExt> saOrderExtList);
|
||||||
|
|
||||||
/*
|
|
||||||
* 根据会员查询会员的 大小区盒数、业绩
|
|
||||||
**/
|
|
||||||
CuMemberRetail queryValidateBoxOrAchieve(Long pkMember);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -576,62 +576,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询会员验证大小区,区域算法2种条件,1 实际满足V5 1种是满足 30w 小区10w
|
|
||||||
*/
|
|
||||||
CuMemberRetail queryValidateBoxOrAchieve(int currentPeriod, int beforePeriod, Long pkMember) {
|
|
||||||
CuMemberRetail cuMemberRetail = new CuMemberRetail();
|
|
||||||
String rangeTableName = TableNameConstants.CU_MEMBER_RETAIL_RANGE + beforePeriod;
|
|
||||||
String secondRangeTableName = TableNameConstants.CU_MEMBER_RETAIL_S + currentPeriod;
|
|
||||||
List<CuMemberRetailRangeExt> memberRetailRangeExtList = iCuMemberRetailRangeService.queryCuMemberSecondRange(rangeTableName, secondRangeTableName, pkMember);
|
|
||||||
List<CuMemberRetailRangeExt> cuMemberRangeExtList = new ArrayList<>();
|
|
||||||
CuMemberRetailRangeExt targetMemberRangeExt = null;
|
|
||||||
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : memberRetailRangeExtList) {
|
|
||||||
if (cuMemberRetailRangeExt.getPkParent().equals(pkMember)) {
|
|
||||||
cuMemberRangeExtList.add(cuMemberRetailRangeExt);
|
|
||||||
} else {
|
|
||||||
targetMemberRangeExt = cuMemberRetailRangeExt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (targetMemberRangeExt == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
// 计算大区盒数、小区盒数
|
|
||||||
int bigBoxNum = targetMemberRangeExt.getConsumeBoxNum();
|
|
||||||
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRangeExtList) {
|
|
||||||
int areaBoxNum = cuMemberRetailRangeExt.getTeamBoxNum() + cuMemberRetailRangeExt.getConsumeBoxNum()
|
|
||||||
- cuMemberRetailRangeExt.getBigBoxNum() - cuMemberRetailRangeExt.getSmallBoxNum();
|
|
||||||
if (areaBoxNum > bigBoxNum) {
|
|
||||||
bigBoxNum = areaBoxNum;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 实际盒数去掉注水
|
|
||||||
int realBoxNum = targetMemberRangeExt.getTeamBoxNum() + targetMemberRangeExt.getConsumeBoxNum() -
|
|
||||||
targetMemberRangeExt.getBigBoxNum() - targetMemberRangeExt.getSmallBoxNum();
|
|
||||||
int smallBoxNum = realBoxNum - bigBoxNum;
|
|
||||||
cuMemberRetail.setRealBoxNum(realBoxNum);
|
|
||||||
cuMemberRetail.setBigBoxNum(bigBoxNum);
|
|
||||||
cuMemberRetail.setSmallBoxNum(smallBoxNum);
|
|
||||||
// 计算大小区业绩
|
|
||||||
BigDecimal consumeBigPv = targetMemberRangeExt.getMonthConsumePv();
|
|
||||||
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRangeExtList) {
|
|
||||||
BigDecimal consumePv = ComputeUtil.computeAdd(cuMemberRetailRangeExt.getMonthConsumePv(), cuMemberRetailRangeExt.getTeamMonthPv());
|
|
||||||
if (ComputeUtil.compareGreaterThan(consumePv, consumeBigPv)) {
|
|
||||||
consumeBigPv = consumePv;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
BigDecimal smallAreaPv = ComputeUtil.computeAdd(targetMemberRangeExt.getMonthConsumePv(), ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamMonthPv(), consumeBigPv));
|
|
||||||
cuMemberRetail.setTeamMonthPv(ComputeUtil.computeAdd(targetMemberRangeExt.getMonthConsumePv(), targetMemberRangeExt.getTeamMonthPv()));
|
|
||||||
cuMemberRetail.setBigAreaPv(consumeBigPv);
|
|
||||||
cuMemberRetail.setSmallAreaPv(smallAreaPv);
|
|
||||||
cuMemberRetail.setValidateFlag(Boolean.FALSE);
|
|
||||||
if ((cuMemberRetail.getRealBoxNum() >= 2400 && cuMemberRetail.getSmallBoxNum() >= 500) ||
|
|
||||||
(ComputeUtil.compareValue(cuMemberRetail.getTeamMonthPv(), BigDecimal.valueOf(46875)) && ComputeUtil.compareValue(cuMemberRetail.getSmallAreaPv(), BigDecimal.valueOf(15625)))) {
|
|
||||||
cuMemberRetail.setValidateFlag(Boolean.TRUE);
|
|
||||||
}
|
|
||||||
return cuMemberRetail;
|
|
||||||
}
|
|
||||||
|
|
||||||
void calculateRangeEvBonus(Map<Long, CuMemberBonus> cuMemberBonusMap, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberRangeExt> memberRangeExtMap, List<CuMemberBonusPush> cuMemberBonusPushList, List<BdWaresBonusExt> bdWaresBonusExtList, SaOrderExt saOrderExt) {
|
void calculateRangeEvBonus(Map<Long, CuMemberBonus> cuMemberBonusMap, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberRangeExt> memberRangeExtMap, List<CuMemberBonusPush> cuMemberBonusPushList, List<BdWaresBonusExt> bdWaresBonusExtList, SaOrderExt saOrderExt) {
|
||||||
CuMemberRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
|
CuMemberRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
|
||||||
if (ComputeUtil.compareValue(saOrderExt.getOrderAssAchieve(), BigDecimal.valueOf(15.625))) {
|
if (ComputeUtil.compareValue(saOrderExt.getOrderAssAchieve(), BigDecimal.valueOf(15.625))) {
|
||||||
|
@ -926,23 +870,26 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
||||||
// 注水大区如果大则使用注水盒数为大区
|
// 注水大区如果大则使用注水盒数为大区
|
||||||
bigBoxNum = targetMemberRangeExt.getBigBoxNum();
|
bigBoxNum = targetMemberRangeExt.getBigBoxNum();
|
||||||
}
|
}
|
||||||
|
if (targetMemberRangeExt.getSmallBoxNum() > bigBoxNum) {
|
||||||
|
// 注水小区如果大则使用注水盒数为大区
|
||||||
|
bigBoxNum = targetMemberRangeExt.getSmallBoxNum();
|
||||||
|
}
|
||||||
// 秒结补全直推数据,此处秒结和日结可以使用同一逻辑
|
// 秒结补全直推数据,此处秒结和日结可以使用同一逻辑
|
||||||
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRangeExtList) {
|
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRangeExtList) {
|
||||||
if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
|
if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
|
||||||
cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember());
|
cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember());
|
||||||
}
|
}
|
||||||
// 最新确认逻辑,计算大小区时,需要去掉注水
|
|
||||||
// 伞下团队累计盒数 + 自己消费盒数
|
// 伞下团队累计盒数 + 自己消费盒数
|
||||||
int areaBoxNum = cuMemberRetailRangeExt.getTeamBoxNum() + cuMemberRetailRangeExt.getConsumeBoxNum()
|
int areaBoxNum = cuMemberRetailRangeExt.getTeamBoxNum() + cuMemberRetailRangeExt.getConsumeBoxNum();
|
||||||
- cuMemberRetailRangeExt.getBigBoxNum() - cuMemberRetailRangeExt.getSmallBoxNum();
|
|
||||||
if (areaBoxNum > bigBoxNum) {
|
if (areaBoxNum > bigBoxNum) {
|
||||||
// 实际订单累计盒数 大于 累计消费盒数,实际订单累计盒数为大区
|
// 实际订单累计盒数 大于 累计消费盒数,实际订单累计盒数为大区
|
||||||
bigBoxNum = areaBoxNum;
|
bigBoxNum = areaBoxNum;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 小区盒数
|
// 小区盒数(团队累计盒数 + 自消费累计盒数 + 两个注水虚拟盒数 - 大市场盒数)
|
||||||
int smallBoxNum = targetMemberRangeExt.getTeamBoxNum() + targetMemberRangeExt.getConsumeBoxNum() - bigBoxNum;
|
int smallBoxNum = targetMemberRangeExt.getTeamBoxNum() + targetMemberRangeExt.getConsumeBoxNum()
|
||||||
|
+ targetMemberRangeExt.getBigBoxNum() + targetMemberRangeExt.getSmallBoxNum() - bigBoxNum;
|
||||||
if (smallBoxNum >= bdGrade.getBoxSmallTotal()) {
|
if (smallBoxNum >= bdGrade.getBoxSmallTotal()) {
|
||||||
// 小区盒数 大于等于 升级小区盒数
|
// 小区盒数 大于等于 升级小区盒数
|
||||||
CuMemberGrade cuMemberGrade = getCuMemberGrade(period, targetMemberRangeExt, bdGrade);
|
CuMemberGrade cuMemberGrade = getCuMemberGrade(period, targetMemberRangeExt, bdGrade);
|
||||||
|
@ -1114,23 +1061,26 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
|
||||||
// 注水大区如果大则使用注水盒数为大区
|
// 注水大区如果大则使用注水盒数为大区
|
||||||
bigBoxNum = targetMemberRangeExt.getBigBoxNum();
|
bigBoxNum = targetMemberRangeExt.getBigBoxNum();
|
||||||
}
|
}
|
||||||
|
if (targetMemberRangeExt.getSmallBoxNum() > bigBoxNum) {
|
||||||
|
// 注水小区如果大则使用注水盒数为大区
|
||||||
|
bigBoxNum = targetMemberRangeExt.getSmallBoxNum();
|
||||||
|
}
|
||||||
// 秒结补全直推数据,此处秒结和日结可以使用同一逻辑
|
// 秒结补全直推数据,此处秒结和日结可以使用同一逻辑
|
||||||
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRangeExtList) {
|
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRangeExtList) {
|
||||||
if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
|
if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
|
||||||
cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember());
|
cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember());
|
||||||
}
|
}
|
||||||
// 最新确认逻辑,计算大小区时,需要去掉注水
|
|
||||||
// 伞下团队累计盒数 + 自己消费盒数
|
// 伞下团队累计盒数 + 自己消费盒数
|
||||||
int areaBoxNum = cuMemberRetailRangeExt.getTeamBoxNum() + cuMemberRetailRangeExt.getConsumeBoxNum()
|
int areaBoxNum = cuMemberRetailRangeExt.getTeamBoxNum() + cuMemberRetailRangeExt.getConsumeBoxNum();
|
||||||
- cuMemberRetailRangeExt.getBigBoxNum() - cuMemberRetailRangeExt.getSmallBoxNum();
|
|
||||||
if (areaBoxNum > bigBoxNum) {
|
if (areaBoxNum > bigBoxNum) {
|
||||||
// 实际订单累计盒数 大于 累计消费盒数,实际订单累计盒数为大区
|
// 实际订单累计盒数 大于 累计消费盒数,实际订单累计盒数为大区
|
||||||
bigBoxNum = areaBoxNum;
|
bigBoxNum = areaBoxNum;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 小区盒数
|
// 小区盒数(团队累计盒数 + 自消费累计盒数 + 两个注水虚拟盒数 - 大市场盒数)
|
||||||
int smallBoxNum = targetMemberRangeExt.getTeamBoxNum() + targetMemberRangeExt.getConsumeBoxNum() - bigBoxNum;
|
int smallBoxNum = targetMemberRangeExt.getTeamBoxNum() + targetMemberRangeExt.getConsumeBoxNum()
|
||||||
|
+ targetMemberRangeExt.getBigBoxNum() + targetMemberRangeExt.getSmallBoxNum() - bigBoxNum;
|
||||||
if (smallBoxNum >= bdGrade.getBoxSmallTotal()) {
|
if (smallBoxNum >= bdGrade.getBoxSmallTotal()) {
|
||||||
// 小区盒数 大于等于 升级小区盒数
|
// 小区盒数 大于等于 升级小区盒数
|
||||||
CuMemberGrade cuMemberGrade = getCuMemberGrade(period, targetMemberRangeExt, bdGrade);
|
CuMemberGrade cuMemberGrade = getCuMemberGrade(period, targetMemberRangeExt, bdGrade);
|
||||||
|
|
|
@ -294,15 +294,6 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public CuMemberRetail queryValidateBoxOrAchieve(Long pkMember) {
|
|
||||||
String settleDate = DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, DateUtils.currentDate());
|
|
||||||
String beforeDay = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.beforeDate(1, ChronoUnit.DAYS));
|
|
||||||
int currentPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDate).getPkId();
|
|
||||||
int beforePeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeDay).getPkId();
|
|
||||||
return bonusSettleRangeHandle.queryValidateBoxOrAchieve(currentPeriod, beforePeriod, pkMember);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Map<Long, CuMemberBonus> getWeekMemberBonusMap(String settleDate, Integer period) {
|
private Map<Long, CuMemberBonus> getWeekMemberBonusMap(String settleDate, Integer period) {
|
||||||
// 根据结算日期获取周期的期间,用于海外
|
// 根据结算日期获取周期的期间,用于海外
|
||||||
String recentlyMonday = DateUtils.getRecentlyTuesday(settleDate);
|
String recentlyMonday = DateUtils.getRecentlyTuesday(settleDate);
|
||||||
|
|
Loading…
Reference in New Issue