## 日结添加团队月盒数字段及处理;月奖查询订单不走dubbo服务,改为自查询;

This commit is contained in:
cabbage 2025-06-17 10:46:35 +08:00
parent fc1fdcde70
commit 394b6dad10
20 changed files with 387 additions and 764 deletions

View File

@ -144,5 +144,7 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
/**
* 之前有过注水回退
*/
void mergeCuMemberRetailBackBoxBySpecial(@Param("rangeTableName") String settleTableName, @Param("beforeTableName") String beforeTableName, @Param("period") Integer period);
void mergeCuMemberRetailBackBoxBySpecial(@Param("rangeTableName") String rangeTableName,
@Param("beforeTableName") String beforeTableName,
@Param("period") Integer period);
}

View File

@ -84,7 +84,7 @@ public interface ICuMemberRetailRangeService extends IService<CuMemberRetailRang
/**
* 之前有过注水回退
*/
void mergeCuMemberRetailBackBoxBySpecial(String settleTableName, String beforeTableName, Integer period);
void mergeCuMemberRetailBackBoxBySpecial(String rangeTableName, String beforeTableName, Integer period);
/**
* 根据订单查询出网体中记录的会员数据推荐人安置人

View File

@ -130,8 +130,8 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl<CuMemberRetailRa
}
@Override
public void mergeCuMemberRetailBackBoxBySpecial(String settleTableName, String beforeTableName, Integer period) {
baseMapper.mergeCuMemberRetailBackBoxBySpecial(settleTableName, beforeTableName, period);
public void mergeCuMemberRetailBackBoxBySpecial(String rangeTableName, String beforeTableName, Integer period) {
baseMapper.mergeCuMemberRetailBackBoxBySpecial(rangeTableName, beforeTableName, period);
}
@Override

View File

@ -1,219 +0,0 @@
package com.hzs.bonus.bonus.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.hzs.activity.base.IActivityServiceApi;
import com.hzs.common.core.constant.TableNameConstants;
import com.hzs.common.core.constant.msg.BonusMsgConstants;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.utils.ComputeUtil;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.domain.activity.recommend.AcRepurSharOrderType;
import com.hzs.common.domain.activity.recommend.ext.AcRepurSharRuleConfigExt;
import com.hzs.common.domain.bonus.BdBonusDeduct;
import com.hzs.common.domain.member.base.CuMemberAgent;
import com.hzs.common.domain.member.bonus.CuMemberBonus;
import com.hzs.common.domain.member.bonus.CuMemberBonusDetail;
import com.hzs.common.domain.member.ext.CuMemberSettleExt;
import com.hzs.common.domain.sale.order.SaOrder;
import com.hzs.common.domain.system.config.BdBonusCloud;
import com.hzs.bonus.base.service.ICuMemberAgentService;
import com.hzs.system.config.dto.BonusConfigDTO;
import com.hzs.system.sys.dto.BdCurrencyDTO;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
@Component
public class BonusSettleAgentHandle extends BonusSettleHandle {
@DubboReference
IActivityServiceApi activityServiceApi;
// 代理直推 推荐给多少钱 代理复购 区域 所有订单的1%
private ICuMemberAgentService cuMemberAgentService;
@Autowired
public void setCuMemberAgentService(ICuMemberAgentService cuMemberAgentService) {
this.cuMemberAgentService = cuMemberAgentService;
}
/**
* 计算嗨粉奖金
*
* @param period 期间
* @param bonusConfigDTO 参数
* @param cuMemberBonusMap 所有计算出来的奖金汇总
*/
List<CuMemberBonusDetail> calculateCloudAgentAreaBonus(String settleDateStr, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap) {
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
// 云代区域 月奖
// 查询时间范围内订单
Date settleDate = DateUtils.parseStringToDate(settleDateStr);
// 上个月最后一天
settleDate = DateUtils.beforeMonthLastDate(settleDate);
// 结算月第一天
Date currentMonthFirstDate = DateUtils.currentMonthFirstDate(settleDate);
// 结算月下月第一天
Date nextMonthFirstDate = DateUtils.afterDate(1, ChronoUnit.DAYS, settleDate);
List<Integer> orderType = new ArrayList<>();
orderType.add(EOrderType.REGISTER_ORDER.getValue());
orderType.add(EOrderType.UPGRADE_ORDER.getValue());
orderType.add(EOrderType.REPURCHASE_ORDER.getValue());
List<SaOrder> currentMonthOrderList = saOrderServiceApi.querySaOrderByDayForCloud(currentMonthFirstDate, nextMonthFirstDate, orderType).getData();
// 查询月末会员状态
Integer lastPeriod = getCuMemberSettlePeriodService().getCuMemberSettlePeriodByDate(settleDateStr).getPkId();
String currentSettleTableName = TableNameConstants.CU_MEMBER_SETTLE + lastPeriod;
Set<Long> pkMemberSet = new HashSet<>();
// 获取配置
Map<String, BdBonusCloud> bdBonusCloudMap = bonusConfigDTO.getBonusCloudMap();
if (bdBonusCloudMap == null) {
return cuMemberBonusDetailList;
}
// 计算奖金 云代首购 首购订单1% 云代复购 复购订单1%
// 查询会员查询出所有代理的会员
Map<String, List<CuMemberAgent>> cuMemberAgentMap = cuMemberAgentService.queryCuMemberAgent();
List<SaOrder> saOrderList = new ArrayList<>();
for (SaOrder saOrder : currentMonthOrderList) {
if (saOrder.getPkCountry() == null || saOrder.getRecProvince() == null || saOrder.getRecCity() == null) {
continue;
}
String key = saOrder.getPkCountry().toString() + saOrder.getRecProvince() + saOrder.getRecCity();
if (!cuMemberAgentMap.containsKey(key)) {
continue;
} else {
saOrderList.add(saOrder);
}
pkMemberSet.add(saOrder.getPkMember());
List<CuMemberAgent> cuMemberAgentList = cuMemberAgentMap.get(key);
cuMemberAgentList.forEach(cuMemberAgent ->
pkMemberSet.add(cuMemberAgent.getPkMember()));
}
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleByMemberPk(currentSettleTableName, pkMemberSet);
Map<Long, CuMemberSettleExt> cuMemberSettleExtMap = new HashMap<>();
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
Map<String, BdCurrencyDTO> currencyDtoMap = bonusConfigDTO.getCurrencyDtoMap();
for (SaOrder saOrder : saOrderList) {
String key = saOrder.getPkCountry().toString() + saOrder.getRecProvince().toString() + saOrder.getRecCity().toString();
List<CuMemberAgent> cuMemberAgentList = cuMemberAgentMap.get(key);
BigDecimal exchangeRate = BigDecimal.ONE;
if (currencyDtoMap.containsKey(saOrder.getPkCountry().toString() + saOrder.getPkRate())) {
exchangeRate = currencyDtoMap.get(saOrder.getPkCountry().toString() + saOrder.getPkRate()).getInExchangeRate();
}
// 云代首购
CuMemberSettleExt sourceMemberSettleExt = cuMemberSettleExtMap.get(saOrder.getPkMember());
if (sourceMemberSettleExt == null) {
continue;
}
if (EOrderType.REGISTER_ORDER.getValue() == saOrder.getOrderType() ||
EOrderType.UPGRADE_ORDER.getValue() == saOrder.getOrderType() ||
Objects.equals(EOrderType.FICTITIOUS_ORDER.getValue(), saOrder.getOrderType())) {
BdBonusCloud bdBonusCloud = bdBonusCloudMap.get(saOrder.getPkCountry().toString() + ECloudType.CLOUD_TYPE_FIRST_PURCHASE.getValue());
for (CuMemberAgent cuMemberAgent : cuMemberAgentList) {
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberAgent.getPkMember());
if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() ||
EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() ||
EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) {
continue;
}
if (cuMemberAgent.getAgentGrade() == 7 && cuMemberAgent.getAgentCounty() != null && saOrder.getRecCounty() != null &&
!Objects.equals(cuMemberAgent.getAgentCounty(), saOrder.getRecCounty())) {
continue;
} else {
if (cuMemberAgent.getAgentGrade() == 8 && cuMemberAgent.getAgentCounty() != null &&
!Objects.equals(cuMemberAgent.getAgentCounty(), saOrder.getRecCounty())) {
continue;
}
}
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrder, targetMemberSettleExt);
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrder, targetMemberSettleExt, cuMemberBonus);
// 计算比例
cuMemberBonusDetail.setCalValue(bdBonusCloud.getCloudRatio());
cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CLOUD_AGENT_FIRST_PURCHASE.getValue()));
cuMemberBonusDetail.setPretaxIncome(ComputeUtil.computeBonusMultiply(saOrder.getOrderAchieve(), bdBonusCloud.getCloudRatio()));
cloudAgentRemark(saOrder, cuMemberBonusDetail, sourceMemberSettleExt, targetMemberSettleExt, BonusMsgConstants.CLOUD_AGENT_FIRST_REPURCHASE);
cuMemberBonusDetailList.add(cuMemberBonusDetail);
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrder.getOrderAmount(), exchangeRate);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
cuMemberBonus.setCloudPurIncome(ComputeUtil.computeAdd(cuMemberBonus.getCloudPurIncome(), cuMemberBonusDetail.getPretaxIncome()));
setCloudTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
}
}
} else {
// 云代复购
BdBonusCloud bdBonusCloud = bdBonusCloudMap.get(saOrder.getPkCountry().toString() + ECloudType.CLOUD_TYPE_PURCHASE.getValue());
for (CuMemberAgent cuMemberAgent : cuMemberAgentList) {
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberAgent.getPkMember());
if (targetMemberSettleExt == null || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() ||
EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() ||
EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) {
continue;
}
if (cuMemberAgent.getAgentGrade() == 7 && cuMemberAgent.getAgentCounty() != null && saOrder.getRecCounty() != null &&
!Objects.equals(cuMemberAgent.getAgentCounty(), saOrder.getRecCounty())) {
continue;
} else {
if (cuMemberAgent.getAgentGrade() == 8 && cuMemberAgent.getAgentCounty() != null &&
!Objects.equals(cuMemberAgent.getAgentCounty(), saOrder.getRecCounty())) {
continue;
}
}
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrder, targetMemberSettleExt);
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrder, targetMemberSettleExt, cuMemberBonus);
// 计算比例
cuMemberBonusDetail.setCalValue(bdBonusCloud.getCloudRatio());
cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.CLOUD_AGENT_REPURCHASE.getValue()));
cuMemberBonusDetail.setPretaxIncome(ComputeUtil.computeBonusMultiply(saOrder.getOrderAchieve(), bdBonusCloud.getCloudRatio()));
cloudAgentRemark(saOrder, cuMemberBonusDetail, sourceMemberSettleExt, targetMemberSettleExt, BonusMsgConstants.CLOUD_AGENT_REPURCHASE);
cuMemberBonusDetailList.add(cuMemberBonusDetail);
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrder.getOrderAmount(), exchangeRate);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
cuMemberBonus.setCloudRepurIncome(ComputeUtil.computeAdd(cuMemberBonus.getCloudRepurIncome(), cuMemberBonusDetail.getPretaxIncome()));
setCloudTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
}
}
}
}
// 复购券均分收益规则
List<AcRepurSharRuleConfigExt> repurSharRuleConfigExtList = activityServiceApi.queryRepurSharRuleConfig(currentMonthFirstDate, nextMonthFirstDate).getData();
if (CollectionUtil.isNotEmpty(repurSharRuleConfigExtList)) {
for (AcRepurSharRuleConfigExt acRepurSharRuleConfigExt : repurSharRuleConfigExtList) {
List<Integer> orderTypeList = acRepurSharRuleConfigExt.getRepurSharOrderTypeList().stream().distinct().map(AcRepurSharOrderType::getOrderType).collect(Collectors.toList());
List<SaOrder> orderList = saOrderServiceApi.querySaOrderByTimeForCouponShare(settleDate, nextMonthFirstDate, orderTypeList,
acRepurSharRuleConfigExt.getOrderAmount(), acRepurSharRuleConfigExt.getOrderAchieve(), acRepurSharRuleConfigExt.getPkCountry()).getData();
if (CollectionUtil.isNotEmpty(orderList)) {
Set<Long> memberSet = orderList.stream().distinct().map(SaOrder::getPkMember).collect(Collectors.toSet());
cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleByMemberPk(currentSettleTableName, memberSet);
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
for (SaOrder saOrder : orderList) {
BigDecimal exchangeRate = BigDecimal.ONE;
if (currencyDtoMap.containsKey(saOrder.getPkCountry().toString() + saOrder.getPkRate())) {
exchangeRate = currencyDtoMap.get(saOrder.getPkCountry().toString() + saOrder.getPkRate()).getInExchangeRate();
}
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(saOrder.getPkMember());
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrder, targetMemberSettleExt);
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrder, targetMemberSettleExt, cuMemberBonus);
// 计算比例
cuMemberBonusDetail.setCalValue(acRepurSharRuleConfigExt.getRatioValue());
cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.REPURCHASE_COUPONS_SHARE.getValue()));
cuMemberBonusDetail.setPretaxIncome(ComputeUtil.computeBonusMultiply(saOrder.getOrderAchieve(), acRepurSharRuleConfigExt.getRatioValue()));
shareCouponRemark(cuMemberBonusDetail, DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, settleDate));
cuMemberBonusDetailList.add(cuMemberBonusDetail);
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrder.getOrderAmount(), exchangeRate);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
cuMemberBonus.setRepurCouponShare(cuMemberBonusDetail.getPretaxIncome());
setRepurchaseCouponTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
}
}
}
}
}
return cuMemberBonusDetailList;
}
}

View File

@ -3,8 +3,6 @@ package com.hzs.bonus.bonus.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.hzs.bonus.base.service.ICuMemberService;
import com.hzs.bonus.bonus.service.ICuMemberBonusService;
import com.hzs.bonus.bonus.service.ICuMemberShareDetailService;
import com.hzs.common.core.constant.*;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.utils.ComputeUtil;
@ -21,7 +19,6 @@ import com.hzs.common.domain.member.ext.CuMemberSettleExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.order.SaOrder;
import com.hzs.common.domain.system.config.BdAwards;
import com.hzs.common.domain.system.config.BdBonusItems;
import com.hzs.common.domain.system.config.BdGrade;
import com.hzs.system.config.IGradeServiceApi;
import com.hzs.system.config.dto.*;
@ -42,14 +39,10 @@ import java.util.stream.Collectors;
public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
@DubboReference
IGradeServiceApi gradeServiceApi;
IGradeServiceApi iGradeServiceApi;
@Autowired
private ICuMemberBonusService cuMemberBonusService;
@Autowired
private ICuMemberShareDetailService cuMemberShareDetailService;
@Autowired
private ICuMemberService cuMemberService;
private ICuMemberService iCuMemberService;
/**
* 计算直推奖
@ -69,7 +62,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
// 推荐奖明细
List<CuMemberBonusPush> cuMemberBonusPushList = new ArrayList<>();
Set<Integer> pkCountrySet = firPurchaseOrderList.stream().distinct().map(SaOrderExt::getPkCountry).collect(Collectors.toSet());
Map<Integer, List<GradeDTO>> gradeDtoMap = gradeServiceApi.queryCountryGradeConfigByCondition(pkCountrySet).getData();
Map<Integer, List<GradeDTO>> gradeDtoMap = iGradeServiceApi.queryCountryGradeConfigByCondition(pkCountrySet).getData();
// 等级对应的业绩
for (SaOrderExt saOrderExt : firPurchaseOrderList) {
List<GradeDTO> gradeList = gradeDtoMap.get(saOrderExt.getPkCountry());
@ -272,7 +265,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
* @param bonusConfigDTO 参数
* @param firPurchaseOrderList 首单
* @param cuMemberBonusMap 所有计算出来的奖金汇总
* @Description: 计算拓展收益
* 计算拓展收益
* @return: void
* @Author: sui q
* @Date: 2022/11/10 14:17
@ -498,7 +491,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
* @param firPurchaseOrderList 订单列表
* @param cuMemberBonusExpandList 量奖明细
* @param cuMemberBonusMap 所有计算出来的奖金汇总
* @Description: 计算辅导收益
* 计算辅导收益
* @return: void
* @Author: sui q
* @Date: 2022/11/10 14:17
@ -513,7 +506,8 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
}
/**
* @Description: 计算领导奖
* 计算领导奖
*
* @return: List<CuMemberBonusCoach>
* @Author: sui q
* @Date: 2023/2/8 17:16
@ -546,7 +540,8 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
}
/**
* @Description: 计算领导奖
* 计算领导奖
*
* @return: List<CuMemberBonusCoach>
* @Author: sui q
* @Date: 2023/2/8 17:16
@ -676,7 +671,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
/**
* @param backMemberBonusCoachList 临时记录辅导奖列表
* @param i 第几代
* @Description: 处理拓展表备注
* 处理拓展表备注
* @return: void
* @Author: sui q
* @Date: 2022/11/17 18:02
@ -777,41 +772,9 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
return cuMemberBonusDetail;
}
/**
* @param settleTableName 结算表
* @param period 期间
* @param cuMemberBonusMap 所有计算出来的奖金汇总
* @Description: 计算报单服务费
* 车奖 全球分红 有奖衔的会员复购考核通过的根据对应奖衔可拿代数配置拿下面代数的推荐+拓展+领导+分红奖金合计为基数的相应代数的比率配置值
* 跟领导奖一样的算法不算启动卡
* @return: List<CuMemberBonusCoach>
* @Author: sui q
* @Date: 2022/11/17 14:14
*/
List<CuMemberBonusDetail> calculateGlobalCarBonus(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO, String settleTableName, String settleDateStr,
Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap) {
// 查询存在车奖全球积分的国家
List<Integer> bonusValueList = new ArrayList<>();
// bonusValueList.add(EBonusItems.GLOBAL_DIVIDEND.getValue());
// bonusValueList.add(EBonusItems.CAR_BONUS_POINTS.getValue());
List<BdBonusItems> bdBonusItemsList = bonusItemsServiceApi.queryExistsBonusItems(bonusValueList).getData();
// 查询出存在车奖跟全球积分的国家
Set<Integer> country = new HashSet<>();
if (bdBonusItemsList != null && bdBonusItemsList.size() > 0) {
bdBonusItemsList.forEach(bdBonusItems -> country.add(bdBonusItems.getPkCountry()));
// 查询这几个国家的奖金
List<CuMemberBonus> cuMemberBonusList = cuMemberBonusService.queryExistsPurchaseBonusMember(period, Arrays.asList(country.toArray(new Integer[]{})));
return calculateGlobalCarBonusOne(cuMemberSettleExtMap, settleTableName, settleDateStr, bonusConfigDTO, cuMemberBonusList, period, cuMemberBonusMap);
}
// 查询所有有奖金的人的所有血缘上级根据国家查询只查询有该奖金项的国家
return null;
}
/**
* @Description: 计算全球积分车奖积分
* @return: List<CuMemberBonusCoach>
* @Author: sui q
* @Date: 2023/2/8 17:16
* 计算全球积分车奖积分
*/
List<CuMemberBonusDetail> calculateGlobalCarBonusOne(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, String settleTableName, String settleDateStr,
BonusConfigDTO bonusConfigDTO, List<CuMemberBonus> cuMemberBonusList,
@ -842,10 +805,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
}
/**
* @Description: 计算全球积分车奖积分
* @return: List<CuMemberBonusCoach>
* @Author: sui q
* @Date: 2023/2/8 17:16
* 计算全球积分车奖积分
*/
List<CuMemberBonusDetail> calculateGlobalCarBonusDetail(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap,
BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap, CuMemberBonus sourceMemberBonus,
@ -958,14 +918,12 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
}
/**
* @param settleDateStr 结算日期
* @param period 期间
* @Description: 计算报单服务费
* 计算报单服务费
* 车奖 全球分红 有奖衔的会员复购考核通过的根据对应奖衔可拿代数配置拿下面代数的推荐+拓展+领导+分红奖金合计为基数的相应代数的比率配置值
* 跟领导奖一样的算法不算启动卡
* @return: List<CuMemberBonusCoach>
* @Author: sui q
* @Date: 2022/11/17 14:14
*
* @param settleDateStr 结算日期
* @param period 期间
*/
List<CuMemberBonusDetail> calculateShareBonus(String settleDateStr, BonusConfigDTO bonusConfigDTO, Integer period,
Map<Long, CuMemberBonus> cuMemberBonusMap, Map<Long, CuAwardsControl> cuAwardsControlMap) {
@ -1115,7 +1073,7 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
// }
BigDecimal gradeExpandRatio = bdGrade.getExpandRatio();
// 验证受益人等级
CuMember cuMember = cuMemberService.getMember(targetMemberSettleExt.getMemberCode());
CuMember cuMember = iCuMemberService.getMember(targetMemberSettleExt.getMemberCode());
if (targetMemberSettleExt.getPkSettleCountry().equals(CountryConstants.CHINA_COUNTRY) &&
cuMember != null && DateUtils.compareDate(DateUtils.parseStringToDate("2024-09-11"), cuMember.getPayTime()) > 0) {
if (targetMemberSettleExt.getGradeValue() == EGrade.VIP.getValue()) {

View File

@ -26,10 +26,8 @@ import com.hzs.common.domain.sale.order.SaOrder;
import com.hzs.common.domain.system.config.BdAwards;
import com.hzs.common.domain.system.config.BdGrade;
import com.hzs.common.domain.system.config.ext.BdBonusItemsExt;
import com.hzs.sale.order.ISaOrderServiceApi;
import com.hzs.system.base.ICurrencyServiceApi;
import com.hzs.system.base.dto.CurrencyDTO;
import com.hzs.system.config.IBonusItemsServiceApi;
import com.hzs.system.config.dto.BonusConfigDTO;
import com.hzs.system.config.dto.BonusExpandDTO;
import com.hzs.system.config.dto.RangeDTO;
@ -45,33 +43,15 @@ import java.util.*;
public abstract class BonusSettleHandle {
@DubboReference
ISaOrderServiceApi saOrderServiceApi;
@DubboReference
IBonusItemsServiceApi bonusItemsServiceApi;
@DubboReference
ICurrencyServiceApi currencyServiceApi;
ICurrencyServiceApi iCurrencyServiceApi;
@Autowired
protected ICuMemberTreeService cuMemberTreeService;
@Autowired
public void setCuMemberTreeService(ICuMemberTreeService cuMemberTreeService) {
this.cuMemberTreeService = cuMemberTreeService;
}
private ICuMemberSettlePeriodService cuMemberSettlePeriodService;
@Autowired
private ICuMemberAssessService cuMemberAssessService;
@Autowired
public void setCuMemberAssessService(ICuMemberAssessService cuMemberAssessService) {
this.cuMemberAssessService = cuMemberAssessService;
}
@Autowired
public void setCuMemberSettlePeriodService(ICuMemberSettlePeriodService cuMemberSettlePeriodService) {
this.cuMemberSettlePeriodService = cuMemberSettlePeriodService;
}
public ICuMemberSettlePeriodService getCuMemberSettlePeriodService() {
return cuMemberSettlePeriodService;
}
@ -475,7 +455,7 @@ public abstract class BonusSettleHandle {
* @param cuMemberBonusCoach 辅导奖
* @param sourceMemberRangeExt 提供奖金的人
* @param targetMemberRangeExt 获得奖金的人
* @Description: 获得 辅导收益的备注
* 获得 辅导收益的备注
* @return: String
* @Author: sui q
* @Date: 2022/11/17 11:22
@ -495,7 +475,7 @@ public abstract class BonusSettleHandle {
* @param cuMemberBonusDetail 报单服务费
* @param sourceCuMemberSettleExt 提供奖金的人
* @param targetCuMemberSettleExt 获得奖金的人
* @Description: 获得 报单服务费收益的备注
* 获得 报单服务费收益的备注
* @return: String
* @Author: sui q
* @Date: 2022/11/17 11:22
@ -514,7 +494,7 @@ public abstract class BonusSettleHandle {
* @param cuMemberBonusDetail 报单服务费
* @param sourceCuMemberRangeExt 提供奖金的人
* @param targetCuMemberRangeExt 获得奖金的人
* @Description: 获得 报单服务费收益的备注
* 获得 报单服务费收益的备注
* @return: String
* @Author: sui q
* @Date: 2022/11/17 11:22
@ -577,7 +557,7 @@ public abstract class BonusSettleHandle {
/**
* @param cuMemberBonusDetail 分红
* @param settleDate 结算日期
* @Description: 获得 分红收益的备注
* 获得 分红收益的备注
* @return: String
* @Author: sui q
* @Date: 2022/11/17 11:22
@ -591,7 +571,7 @@ public abstract class BonusSettleHandle {
/**
* @param cuMemberBonusDetail 分红
* @param settleDate 结算日期
* @Description: 获得 分红收益的备注
* 获得 分红收益的备注
* @return: String
* @Author: sui q
* @Date: 2022/11/17 11:22
@ -604,7 +584,7 @@ public abstract class BonusSettleHandle {
/**
* @param cuMemberBonusDetail 分红
* @Description: 获得 分红收益的备注
* 获得 分红收益的备注
* @return: String
* @Author: sui q
* @Date: 2022/11/17 11:22
@ -619,7 +599,7 @@ public abstract class BonusSettleHandle {
* @param cuMemberBonusRange 报单服务费
* @param sourceCuMemberSettleExt 提供奖金的人
* @param targetCuMemberSettleExt 获得奖金的人
* @Description: 获得 报单服务费收益的备注
* 获得 报单服务费收益的备注
* @return: String
* @Author: sui q
* @Date: 2022/11/17 11:22
@ -640,7 +620,7 @@ public abstract class BonusSettleHandle {
* @param cuMemberBonusRange 报单服务费
* @param sourceCuMemberSettleExt 提供奖金的人
* @param targetCuMemberSettleExt 获得奖金的人
* @Description: 获得 报单服务费收益的备注
* 获得 报单服务费收益的备注
* @return: String
* @Author: sui q
* @Date: 2022/11/17 11:22
@ -744,7 +724,7 @@ public abstract class BonusSettleHandle {
* @param cuMemberBonusDetail 云代首购
* @param sourceCuMemberSettleExt 提供奖金的人
* @param targetCuMemberSettleExt 获得奖金的人
* @Description: 获得 报单服务费收益的备注
* 获得 报单服务费收益的备注
* @return: String
* @Author: sui q
* @Date: 2022/11/17 11:22
@ -761,7 +741,7 @@ public abstract class BonusSettleHandle {
/**
* @param settleDateStr 结算日期
* @param cuMemberSettleExtList 会员列表
* @Description: 获取会员列表的考核结果
* 获取会员列表的考核结果
* @return: Map<Long, CuMemberAssess>
* @Author: sui q
* @Date: 2022/11/17 14:25
@ -790,7 +770,7 @@ public abstract class BonusSettleHandle {
CuMemberSettleExt cuMemberSettleExt) {
Integer pkRate = saOrder.getPkRate();
if (pkRate == null || !Objects.equals(cuMemberSettleExt.getPkSettleCountry(), saOrder.getPkCountry())) {
CurrencyDTO currencyDTO = currencyServiceApi.getCurrency(cuMemberSettleExt.getPkSettleCountry()).getData();
CurrencyDTO currencyDTO = iCurrencyServiceApi.getCurrency(cuMemberSettleExt.getPkSettleCountry()).getData();
pkRate = currencyDTO.getPkId();
}
return getCuMemberBonus(period, cuMemberBonusMap, cuMemberSettleExt.getPkMember(), cuMemberSettleExt.getIncomeStatus(),
@ -919,7 +899,7 @@ public abstract class BonusSettleHandle {
* @param cuMemberSettleExtMap 树关系
* @param settleTableName 结算表
* @param saOrderList 订单
* @Description: 根据订单获取会员的血缘父级用于嗨粉推荐复购极差
* 根据订单获取会员的血缘父级用于嗨粉推荐复购极差
* @return: void
* @Author: sui q
* @Date: 2023/1/4 14:10
@ -935,7 +915,7 @@ public abstract class BonusSettleHandle {
/**
* @param awardsMap 奖衔
* @param parentMemberTree 会员树历史记录
* @Description: 获取会员的极差等级验证会员是否有奖衔
* 获取会员的极差等级验证会员是否有奖衔
* @return: String
* @Author: sui q
* @Date: 2023/1/4 14:22
@ -958,7 +938,7 @@ public abstract class BonusSettleHandle {
/**
* @param awardsMap 奖衔
* @param parentMemberTree 会员树历史记录
* @Description: 获取会员的极差等级验证会员是否有奖衔
* 获取会员的极差等级验证会员是否有奖衔
* @return: String
* @Author: sui q
* @Date: 2023/1/4 14:22
@ -973,13 +953,11 @@ public abstract class BonusSettleHandle {
}
/**
* 奖金明细 报单服务费分红云代首购云代复购海豆收益
*
* @param saOrderExt 订单
* @param targetMemberSettleExt 奖金网体
* @param cuMemberBonus 奖金主表
* @Description: 奖金明细 报单服务费分红云代首购云代复购海豆收益
* @return: CuMemberBonusDetail
* @Author: sui q
* @Date: 2023/1/5 16:31
*/
protected CuMemberBonusDetail getCuMemberBonusDetail(SaOrder saOrderExt, CuMemberSettleExt targetMemberSettleExt, CuMemberBonus cuMemberBonus) {
CuMemberBonusDetail cuMemberBonusDetail = CuMemberBonusDetail.builder()
@ -1004,12 +982,10 @@ public abstract class BonusSettleHandle {
}
/**
* 获得需要查询的会员免考通过的不需要查询考核记录
*
* @param cuMemberSettleExtMap 存储目前有的会员数据
* @param cuMemberSettleExtList 需要查询的会员数据
* @Description: 获得需要查询的会员免考通过的不需要查询考核记录
* @return: List<CuMemberSettleExt>
* @Author: sui q
* @Date: 2022/11/17 17:57
*/
protected List<CuMemberSettleExt> getQueryMemberSettleExtList(Map<Long, CuMemberSettleExt> cuMemberSettleExtMap, List<CuMemberSettleExt> cuMemberSettleExtList) {
// 过滤数据免考的会员不进行查询
@ -1025,12 +1001,10 @@ public abstract class BonusSettleHandle {
}
/**
* 设置奖金扣项计算税前收益扣税实际收益, 设置主表
*
* @param cuMemberBonus 奖金明细
* @param bonusDetail 奖金明细表
* @Description: 设置奖金扣项计算税前收益扣税实际收益, 设置主表
* @return: void
* @Author: sui q
* @Date: 2023/1/11 11:17
*/
protected void setBonusDeduct(BdBonusDeduct bdBonusDeduct, CuMemberBonus cuMemberBonus, Object bonusDetail) {
BigDecimal pretaxIncome = ReflectUtils.invokeGetter(bonusDetail, BonusFieldConstants.PRETAX_INCOME);
@ -1045,10 +1019,7 @@ public abstract class BonusSettleHandle {
}
/**
* @Description: 首购计算 扣项小计总计
* @return: void
* @Author: sui q
* @Date: 2023/1/11 13:59
* 首购计算 扣项小计总计
*/
protected void setFirstPurchaseTotal(BdBonusDeduct bdBonusDeduct, CuMemberBonus cuMemberBonus, Object bonusDetail) {
setBonusDeduct(bdBonusDeduct, cuMemberBonus, bonusDetail);
@ -1058,10 +1029,7 @@ public abstract class BonusSettleHandle {
}
/**
* @Description: 复购计算 扣项小计总计
* @return: void
* @Author: sui q
* @Date: 2023/1/11 13:59
* 复购计算 扣项小计总计
*/
protected void setPurchaseTotal(BdBonusDeduct bdBonusDeduct, CuMemberBonus cuMemberBonus, Object bonusDetail) {
setBonusDeduct(bdBonusDeduct, cuMemberBonus, bonusDetail);
@ -1071,10 +1039,7 @@ public abstract class BonusSettleHandle {
}
/**
* @Description: 云代计算 扣项小计总计
* @return: void
* @Author: sui q
* @Date: 2023/1/11 13:59
* 云代计算 扣项小计总计
*/
protected void setCloudTotal(BdBonusDeduct bdBonusDeduct, CuMemberBonus cuMemberBonus, Object bonusDetail) {
setBonusDeduct(bdBonusDeduct, cuMemberBonus, bonusDetail);

View File

@ -132,6 +132,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 注册升级复购重消盒数业绩算个人累计数据盒数业绩
sourceMemberRangeExt.setNewBoxNum(sourceMemberRangeExt.getNewBoxNum() + boxNum);
sourceMemberRangeExt.setConsumeBoxNum(sourceMemberRangeExt.getConsumeBoxNum() + boxNum);
sourceMemberRangeExt.setMonthBoxNum(sourceMemberRangeExt.getMonthBoxNum() + boxNum);
sourceMemberRangeExt.setNewConsumePv(ComputeUtil.computeAdd(sourceMemberRangeExt.getNewConsumePv(), orderAchieve));
sourceMemberRangeExt.setConsumePv(ComputeUtil.computeAdd(sourceMemberRangeExt.getConsumePv(), orderAchieve));
sourceMemberRangeExt.setMonthConsumePv(ComputeUtil.computeAdd(sourceMemberRangeExt.getMonthConsumePv(), orderAchieve));
@ -233,9 +234,9 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 等级mapkey:等级IDvalue:等级对象
Map<Integer, BdGrade> gradeIdMap = new HashMap<>();
// 等级列表
List<BdGrade> retaiGradeList = bonusConfigDTO.getRetaiGradeList();
List<BdGrade> retailGradeList = bonusConfigDTO.getRetaiGradeList();
// 等级
for (BdGrade bdGrade : retaiGradeList) {
for (BdGrade bdGrade : retailGradeList) {
if (bdGrade.getBoxTotal() > 0) {
retailTeamGradeMap.put(bdGrade.getGradeValue(), bdGrade);
}
@ -267,11 +268,12 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 订单业绩
BigDecimal orderAchieve = saOrderExt.getOrderAchieve();
// 复购重消盒数业绩算个人累计数据盒数业绩
sourceMemberRangeExt.setConsumeBoxNum(sourceMemberRangeExt.getConsumeBoxNum() - boxNum);
sourceMemberRangeExt.setNewBoxNum(sourceMemberRangeExt.getNewBoxNum() - boxNum);
sourceMemberRangeExt.setConsumeBoxNum(sourceMemberRangeExt.getConsumeBoxNum() - boxNum);
sourceMemberRangeExt.setMonthBoxNum(sourceMemberRangeExt.getMonthBoxNum() - boxNum);
sourceMemberRangeExt.setNewConsumePv(ComputeUtil.computeSubtract(sourceMemberRangeExt.getNewConsumePv(), orderAchieve));
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<>();
@ -283,7 +285,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
List<CuMemberRetailRangeExt> cuMemberRetailRangeExtList = calculateRetailBackRangeGradeAwards(currentPeriod, memberRangeExtMap, rangeTableName, saOrderExt, retailTeamGradeMap, retailAwardsMap, secondRangeTableName, boxNum, cuMemberGradeMap, cuMemberAwardsMap);
cuMemberRetailRangeExtList.add(sourceMemberRangeExt);
// 查询期间的等级和奖衔
List<CuMemberGrade> memberGradeList = iCuMemberGradeService.queryCuMemberGrade(cuMemberRetailRangeExtList, currentPeriod);
// 查询最大的手动奖衔
@ -323,7 +324,9 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
}
}
if (cuMemberGradeList.size() > 0) {
// 删除等级
iCuMemberGradeService.deleteCuMemberGrade(cuMemberGradeList, currentPeriod);
// 批量更新会员等级
iCuMemberService.updateCuMemberMinGradeByList(cuMemberGradeList, currentPeriod);
}
}
@ -347,8 +350,9 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
}
// 处理等级奖衔
if (cuMemberAwardsList.size() > 0) {
// 删除会员奖衔记录
iCuMemberAwardsService.deleteCuMemberAwards(cuMemberAwardsList, currentPeriod);
// 更新会员表,更新奖衔
// 更新会员表奖衔数据
iCuMemberService.updateCuMemberMinAwardsByList(cuMemberAwardsList, currentPeriod);
}
}
@ -493,7 +497,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 复购重消盒数业绩算个人累计数据盒数业绩
sourceMemberRangeExt.setNewBoxNum(sourceMemberRangeExt.getNewBoxNum() + boxNum);
sourceMemberRangeExt.setConsumeBoxNum(sourceMemberRangeExt.getConsumeBoxNum() + boxNum);
sourceMemberRangeExt.setMonthBoxNum(sourceMemberRangeExt.getConsumeBoxNum() + boxNum);
sourceMemberRangeExt.setMonthBoxNum(sourceMemberRangeExt.getMonthBoxNum() + boxNum);
sourceMemberRangeExt.setNewConsumePv(ComputeUtil.computeAdd(sourceMemberRangeExt.getNewConsumePv(), orderAchieve));
sourceMemberRangeExt.setConsumePv(ComputeUtil.computeAdd(sourceMemberRangeExt.getConsumePv(), orderAchieve));
sourceMemberRangeExt.setMonthConsumePv(ComputeUtil.computeAdd(sourceMemberRangeExt.getMonthConsumePv(), orderAchieve));
@ -554,14 +558,17 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
}
}
if (cuMemberAwardsList.size() > 0) {
// 批量插入会员奖衔记录
iCuMemberAwardsService.saveBatchCuMemberAwards(cuMemberAwardsList);
// 更新会员表,更新奖衔
// 更新会员表奖衔数据
iCuMemberService.updateCuMemberRetailRangeByPeriod(cuMemberAwardsList, period);
}
if (cuMemberGradeList.size() > 0) {
// 批量插入会员等级记录
iCuMemberGradeService.insertCuMemberGrade(cuMemberGradeList);
// 更新会员表等级数据来源 cu_member_grade)
iCuMemberService.updateCuMemberGradeByPeriod(cuMemberGradeList, period);
// 根据cu_member_level更新cu_member
// 更新会员表等级数据来源 cu_member_level)
iCuMemberService.updateCuMemberLevel(settleStartDate, settleEndDate);
}
// 更新网体
@ -864,18 +871,18 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 激活的账号才能累计业绩和盒数有注册升级订单
if (targetMemberRangeExt.getEnableStatus() == EYesNo.YES.getIntValue()) {
// 累计业绩
// 累计金额
targetMemberRangeExt.setTeamNewAmount(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamNewAmount(), orderAmount));
targetMemberRangeExt.setTeamConsumeAmount(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamConsumeAmount(), orderAmount));
targetMemberRangeExt.setTeamMonthAmount(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamMonthAmount(), orderAmount));
// 累计金额
// 累计业绩
targetMemberRangeExt.setTeamNewPv(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamNewPv(), orderAchieve));
targetMemberRangeExt.setTeamConsumePv(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamConsumePv(), orderAchieve));
targetMemberRangeExt.setTeamMonthPv(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamMonthPv(), orderAchieve));
// 累计盒数
targetMemberRangeExt.setTeamNewBoxNum(targetMemberRangeExt.getTeamNewBoxNum() + boxNum);
targetMemberRangeExt.setTeamBoxNum(targetMemberRangeExt.getTeamBoxNum() + boxNum);
targetMemberRangeExt.setMonthBoxNum(targetMemberRangeExt.getMonthBoxNum() + boxNum);
targetMemberRangeExt.setTeamMonthBoxNum(targetMemberRangeExt.getTeamMonthBoxNum() + boxNum);
// 计算等级
calculateGradeAwards(period, memberRangeExtMap, rangeTableName, saOrderExt, retailTeamGradeMap, retailAwardsMap,
secondRangeTableName, cuMemberGradeList, cuMemberAwardsList, targetMemberRangeExt, activateMap);
@ -946,9 +953,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
}
}
}
if (targetMemberRangeExt.getPkMember() == 201) {
log.info("targetMemberRangeExt: {}", targetMemberRangeExt);
}
// 计算奖衔荣誉级别
while (true) {
// 当前实时奖衔值 + 5获取下一个奖衔值
@ -1063,16 +1067,17 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 激活的账号才能累计业绩和盒数有注册升级订单
if (targetMemberRangeExt.getEnableStatus() == EYesNo.YES.getIntValue()) {
// 累计业绩
targetMemberRangeExt.setTeamConsumeAmount(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamConsumeAmount(), orderAmount));
targetMemberRangeExt.setTeamConsumePv(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamConsumePv(), orderAchieve));
targetMemberRangeExt.setTeamMonthAmount(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamMonthAmount(), orderAmount));
targetMemberRangeExt.setTeamMonthPv(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamMonthPv(), orderAchieve));
targetMemberRangeExt.setTeamNewAmount(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamNewAmount(), orderAmount));
targetMemberRangeExt.setTeamNewPv(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamNewPv(), orderAchieve));
targetMemberRangeExt.setTeamConsumePv(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamConsumePv(), orderAchieve));
targetMemberRangeExt.setTeamMonthPv(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamMonthPv(), orderAchieve));
// 累计金额
targetMemberRangeExt.setTeamNewAmount(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamNewAmount(), orderAmount));
targetMemberRangeExt.setTeamConsumeAmount(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamConsumeAmount(), orderAmount));
targetMemberRangeExt.setTeamMonthAmount(ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamMonthAmount(), orderAmount));
// 累计盒数
targetMemberRangeExt.setTeamBoxNum(targetMemberRangeExt.getTeamBoxNum() - boxNum);
targetMemberRangeExt.setMonthBoxNum(targetMemberRangeExt.getMonthBoxNum() - boxNum);
targetMemberRangeExt.setTeamNewBoxNum(targetMemberRangeExt.getTeamNewBoxNum() - boxNum);
targetMemberRangeExt.setTeamBoxNum(targetMemberRangeExt.getTeamBoxNum() - boxNum);
targetMemberRangeExt.setTeamMonthBoxNum(targetMemberRangeExt.getTeamMonthBoxNum() - boxNum);
// 计算等级
calculateBackGrade(period, memberRangeExtMap, rangeTableName, saOrderExt, retailTeamGradeMap, retailAwardsMap, secondRangeTableName, cuMemberGradeMap, cuMemberAwardsMap, targetMemberRangeExt);
cuMemberRetailRangeExtList.add(targetMemberRangeExt);
@ -1755,39 +1760,53 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
*/
void calculateRetailShareBonus(String settleDateStr, BonusConfigDTO bonusConfigDTO,
Integer period, BonusRecordDetailVO bonusRecordDetailVO, Map<Long, CuMemberBonus> cuMemberBonusMap) {
// 结算日期
Date settleDate = DateUtils.parseStringToDate(settleDateStr);
// 上月最后一天
String beforeMonthLastDate = DateUtils.beforeMonthLastDateStr(settleDate);
// 查询上月最后一天
// 上月最后一天期数
Integer beforeMonthLastPeriod = getCuMemberSettlePeriodService().getCuMemberSettlePeriodByDate(beforeMonthLastDate).getPkId();
String rangeTableName = TableNameConstants.CU_MEMBER_RETAIL_RANGE + beforeMonthLastPeriod;
// 查询上月订单
// 结算月第一天
// 结算月第一天上月第一天
Date currentMonthFirstDate = DateUtils.beforeMonthFirstDate(settleDate);
// 结算月下月第一天
// 结算月下月第一天本月第一天
Date nextMonthFirstDate = DateUtils.currentMonthFirstDate(settleDate);
List<Integer> orderType = new ArrayList<>();
orderType.add(EOrderType.RETAIL_REGISTER.getValue());
orderType.add(EOrderType.RETAIL_UPGRADE.getValue());
orderType.add(EOrderType.RETAIL_REPURCHASE.getValue());
// 月订单列表
List<SaOrder> totalMonthOrderList = new ArrayList<>();
List<CuMemberBonusRange> memberBonusRangeList = new ArrayList<>();
List<CuMemberBonusDetail> memberBonusDetailList = new ArrayList<>();
// 当前年月
String month = DateUtils.getMonth(settleDateStr);
while (!DateUtils.compareDateEqual(currentMonthFirstDate, nextMonthFirstDate)) {
// 从上月第一天开始每天查一次订单查到本月第一天停止
Date endDate = DateUtils.afterDate(1, ChronoUnit.DAYS, currentMonthFirstDate);
List<SaOrder> currentMonthOrderList = saOrderServiceApi.querySaOrderByDayForCloud(currentMonthFirstDate, endDate, orderType).getData();
// 查询指定时间范围内订单
List<SaOrder> currentMonthOrderList = iBonusOrderService.listSaOrderByTime(currentMonthFirstDate, endDate, orderType);
totalMonthOrderList.addAll(currentMonthOrderList);
currentMonthFirstDate = endDate;
}
if (totalMonthOrderList.size() > 0) {
// 会员ID集合
Set<Long> pkMemberSet = new HashSet<>();
totalMonthOrderList.forEach(saOrder -> pkMemberSet.add(saOrder.getPkMember()));
// 查询会员血缘伞上数据
List<CuMemberRetailRangeExt> cuMemberRetailRangeExtList = iCuMemberRetailRangeService.batchQueryMemberRetailRangeByMemberPk(rangeTableName, pkMemberSet);
// 会员结算mapkey:会员ID, value:会员结算数据
Map<Long, CuMemberRetailRangeExt> memberRangeExtMap = new HashMap<>();
cuMemberRetailRangeExtList.forEach(cuMemberRetailRangeExt ->
memberRangeExtMap.put(cuMemberRetailRangeExt.getPkMember(), cuMemberRetailRangeExt));
// 按照体系将订单区分
// key:会员体系value会员订单列表
Map<Integer, List<SaOrder>> orderMap = new HashMap<>();
for (SaOrder saOrder : totalMonthOrderList) {
if (memberRangeExtMap.containsKey(saOrder.getPkMember())) {

View File

@ -67,8 +67,6 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
@Autowired
private ICuMemberSettlePeriodService cuMemberSettlePeriodService;
@Autowired
private ICuMemberService cuMemberService;
@Autowired
private ICuAwardsControlService cuAwardsControlService;
@Autowired
private ICuMemberRepeatBonusService cuMemberRepeatBonusService;
@ -175,6 +173,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
Date currentDate = DateUtils.afterDate(1, ChronoUnit.DAYS, DateUtils.parseStringToDate(settleDate));
String afterDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, currentDate);
if (afterDate.endsWith("01")) {
// TODO new 区域考核处理
// 计算完月奖计算考核区域6个月要达到蓝宝以上
String rangeTableName = TableNameConstants.CU_MEMBER_RETAIL_RANGE + period;
cuRegionAssessService.assessRegionByEveryMonth(settleDate, rangeTableName);

View File

@ -1,112 +0,0 @@
package com.hzs.bonus.bonus.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.hzs.common.core.constant.BonusFieldConstants;
import com.hzs.common.core.constant.TableNameConstants;
import com.hzs.common.core.enums.EBonusIncomeStatus;
import com.hzs.common.core.enums.EBonusItems;
import com.hzs.common.core.utils.ComputeUtil;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.core.utils.reflect.ReflectUtils;
import com.hzs.common.domain.bonus.BdBonusDeduct;
import com.hzs.common.domain.member.bonus.CuMemberBonus;
import com.hzs.common.domain.member.bonus.CuMemberBonusDetail;
import com.hzs.common.domain.member.ext.CuMemberSettleExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.order.SaOrder;
import com.hzs.common.domain.system.config.BdStoreLevelDetail;
import com.hzs.common.domain.system.config.ext.BdStoreLevelExt;
import com.hzs.system.config.IGradeServiceApi;
import com.hzs.system.config.dto.BonusConfigDTO;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
/**
* @description: 计算店铺奖金
* @author: sui q
* @time: 2023/5/8 15:40
* @classname: BonusStoreHandle
* @package_name: com.hzs.member.bonus.service.impl
* version 1.0.0
*/
@Component
public class BonusSettleStoreHandle extends BonusSettleHandle{
@DubboReference
private IGradeServiceApi gradeServiceApi;
/**
* @param period 期间
* @param bonusConfigDTO 参数
* @param cuMemberBonusMap 所有计算出来的奖金汇总
* @Description: 计算嗨粉奖金
* @return: void
* @Author: sui q
* @Date: 2022/11/10 14:17
*/
List<CuMemberBonusDetail> calculateStoreBonus(String settleDateStr, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap) {
// 云代区域 月奖
// 查询时间范围内订单
Date settleDate = DateUtils.parseStringToDate(settleDateStr);
// 上个月最后一天
settleDate = DateUtils.beforeMonthLastDate(settleDate);
// 结算月第一天
Date currentMonthFirstDate = DateUtils.currentMonthFirstDate(settleDate);
// 结算月下月第一天
Date nextMonthFirstDate = DateUtils.afterDate(1, ChronoUnit.DAYS, settleDate);
// 查询月末会员状态
Date currentMonthLastDate = DateUtils.currentMonthLastDate(settleDate);
Integer lastPeriod = getCuMemberSettlePeriodService().getCuMemberSettlePeriodByDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, currentMonthLastDate)).getPkId();
String currentSettleTableName = TableNameConstants.CU_MEMBER_SETTLE + lastPeriod;
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
List<SaOrderExt> currentMonthOrderList = saOrderServiceApi.querySaOrderByTimeForStore(currentMonthFirstDate, nextMonthFirstDate).getData();
if(CollectionUtil.isNotEmpty(currentMonthOrderList)){
// 查询店铺奖金配置表
Set<Long> pkMemberSet = currentMonthOrderList.stream().distinct().map(SaOrder::getPkMember).collect(Collectors.toSet());
List<CuMemberSettleExt> cuMemberSettleExtList = cuMemberTreeService.batchQueryMemberSettleByMemberPk(currentSettleTableName, pkMemberSet);
Map<Long, CuMemberSettleExt> cuMemberSettleExtMap = new HashMap<>();
getMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList);
List<BdStoreLevelExt> storeLevelList = gradeServiceApi.queryStoreLevel().getData();
Map<String, BdStoreLevelExt> storeLevelExtMap = new HashMap<>(ComputeUtil.mapInitCapacity(storeLevelList.size()));
if(CollectionUtil.isNotEmpty(storeLevelList)){
for (BdStoreLevelExt bdStoreLevel : storeLevelList) {
storeLevelExtMap.put(bdStoreLevel.getPkId().toString() + bdStoreLevel.getPkCreator().toString(), bdStoreLevel);
}
}
for (SaOrderExt saOrderExt : currentMonthOrderList) {
String key = saOrderExt.getPkMemberStore().toString() + saOrderExt.getPkCountry().toString();
if(storeLevelExtMap.containsKey(key)){
BdStoreLevelExt bdStoreLevelExt = storeLevelExtMap.get(key);
for (BdStoreLevelDetail bdStoreLevelDetail : bdStoreLevelExt.getStoreLevelDetailList()) {
if(ComputeUtil.compareValue(saOrderExt.getOrderAchieve(), bdStoreLevelDetail.getEndAchievement())){
CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(saOrderExt.getPkMember());
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrderExt, targetMemberSettleExt);
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrderExt, targetMemberSettleExt, cuMemberBonus);
// 计算比例
cuMemberBonusDetail.setCalValue(bdStoreLevelDetail.getRatio());
cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.STORE_INCOME.getValue()));
cuMemberBonusDetail.setPretaxIncome(ComputeUtil.computeBonusMultiply(saOrderExt.getOrderAchieve(), bdStoreLevelDetail.getRatio()));
storeRemark(cuMemberBonusDetail, DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, currentMonthLastDate));
cuMemberBonusDetailList.add(cuMemberBonusDetail);
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
cuMemberBonus.setStoreIncome(cuMemberBonusDetail.getPretaxIncome());
setBonusDeduct(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
BigDecimal realIncome = ReflectUtils.invokeGetter(cuMemberBonusDetail, BonusFieldConstants.REAL_INCOME);
cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), realIncome));
}
break;
}
}
}
}
}
return cuMemberBonusDetailList;
}
}

View File

@ -1,6 +1,7 @@
package com.hzs.bonus.order.mapper;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.order.SaOrder;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
@ -28,4 +29,15 @@ public interface BonusOrderMapper {
@Param("endDate") Date endDate,
@Param("orderCode") String orderCode);
/**
* 查询订单列表
*
* @param startDate 开始日期
* @param endDate 结束日期
* @param orderType 订单类型列表
*/
List<SaOrder> listSaOrderByTime(@Param("startDate") Date startDate,
@Param("endDate") Date endDate,
@Param("orderType") List<Integer> orderType);
}

View File

@ -1,7 +1,7 @@
package com.hzs.bonus.order.service;
import com.hzs.common.core.domain.R;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.order.SaOrder;
import java.util.Date;
import java.util.List;
@ -21,4 +21,13 @@ public interface IBonusOrderService {
*/
SaOrderExt querySaOrderByDay(Date startDate, Date endDate, String orderCode);
/**
* 查询订单列表
*
* @param startDate 开始日期
* @param endDate 结束日期
* @param orderType 订单类型列表
*/
List<SaOrder> listSaOrderByTime(Date startDate, Date endDate, List<Integer> orderType);
}

View File

@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
import com.hzs.bonus.order.mapper.BonusOrderMapper;
import com.hzs.bonus.order.service.IBonusOrderService;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.order.SaOrder;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@ -30,4 +31,9 @@ public class BonusOrderServiceImpl implements IBonusOrderService {
return null;
}
@Override
public List<SaOrder> listSaOrderByTime(Date startDate, Date endDate, List<Integer> orderType) {
return bonusOrderMapper.listSaOrderByTime(startDate, endDate, orderType);
}
}

View File

@ -26,20 +26,21 @@
<result column="IS_REAL_NAME" property="isRealName"/>
<result column="PK_RATE" property="pkRate"/>
<result column="SYSTEM_TYPE" property="systemType"/>
<result column="CONSUME_BOX_NUM" property="consumeBoxNum"/>
<result column="NEW_BOX_NUM" property="newBoxNum"/>
<result column="TEAM_BOX_NUM" property="teamBoxNum"/>
<result column="CONSUME_BOX_NUM" property="consumeBoxNum"/>
<result column="MONTH_BOX_NUM" property="monthBoxNum"/>
<result column="TEAM_NEW_BOX_NUM" property="teamNewBoxNum"/>
<result column="NEW_CONSUME_PV" property="newConsumePv"/>
<result column="CONSUME_PV" property="consumePv"/>
<result column="MONTH_CONSUME_PV" property="monthConsumePv"/>
<result column="NEW_CONSUME_PV" property="newConsumePv"/>
<result column="TEAM_CONSUME_AMOUNT" property="teamConsumeAmount"/>
<result column="TEAM_NEW_BOX_NUM" property="teamNewBoxNum"/>
<result column="TEAM_BOX_NUM" property="teamBoxNum"/>
<result column="TEAM_MONTH_BOX_NUM" property="teamMonthBoxNum"/>
<result column="TEAM_NEW_PV" property="teamNewPv"/>
<result column="TEAM_CONSUME_PV" property="teamConsumePv"/>
<result column="TEAM_MONTH_AMOUNT" property="teamMonthAmount"/>
<result column="TEAM_MONTH_PV" property="teamMonthPv"/>
<result column="TEAM_NEW_AMOUNT" property="teamNewAmount"/>
<result column="TEAM_NEW_PV" property="teamNewPv"/>
<result column="TEAM_CONSUME_AMOUNT" property="teamConsumeAmount"/>
<result column="TEAM_MONTH_AMOUNT" property="teamMonthAmount"/>
<result column="RECOMMEND_NUM" property="recommendNum"/>
<result column="TEAM_NUM" property="teamNum"/>
<result column="REGION_ADDRESS" property="regionAddress"/>
@ -60,51 +61,66 @@
<update id="mergeMemberRetailRangeInit">
update ${rangeTableName}
set consume_box_num=0,
new_box_num=0,
team_box_num=0,
month_box_num=0,
team_new_box_num=0,
pk_share_awards = (select pk_id from BD_AWARDS where awards_value = 0),
consume_pv=0,
month_consume_pv=0,
new_consume_pv=0,
team_consume_amount=0,
team_consume_pv=0,
enable_status=1,
team_month_amount=0,
team_month_pv=0,
team_new_amount=0,
team_new_pv=0,
recommend_num=0,
team_num=0,
set new_box_num = 0,
consume_box_num = 0,
month_box_num = 0,
new_consume_pv = 0,
consume_pv = 0,
month_consume_pv = 0,
team_new_box_num = 0,
team_box_num = 0,
team_month_box_num = 0,
team_new_pv = 0,
team_consume_pv = 0,
team_month_pv = 0,
team_new_amount = 0,
team_consume_amount = 0,
team_month_amount = 0,
recommend_num = 0,
team_num = 0,
enable_status = 1,
pk_grade = (select pk_id from bd_grade where del_flag = 0 and grade_value = 20),
region_address=0,
big_box_num=0,
small_box_num=0,
big_team_pv=0,
small_team_pv=0
pk_share_awards = (select pk_id from BD_AWARDS where awards_value = 0),
region_address = 0,
big_box_num = 0,
small_box_num = 0,
big_team_pv = 0,
small_team_pv = 0
</update>
<update id="mergeMemberRetailRangeByYesterday">
merge into ${rangeTableName} a
using(
select pk_member,consume_box_num,new_box_num,team_box_num,month_box_num,team_new_box_num,enable_status,
consume_pv,month_consume_pv,new_consume_pv,team_consume_amount,team_consume_pv,pk_share_awards,
team_month_amount,team_month_pv,team_new_amount,team_new_pv,recommend_num,team_num,pk_grade,
big_box_num,small_box_num,big_team_pv,small_team_pv
select pk_member, pk_grade, pk_share_awards, enable_status,
new_box_num, consume_box_num, month_box_num,
new_consume_pv, consume_pv, month_consume_pv,
team_new_box_num, team_box_num, team_month_box_num,
team_new_pv, team_consume_pv, team_month_pv,
team_new_amount, team_consume_amount, team_month_amount,
recommend_num, team_num,
big_box_num, small_box_num, big_team_pv, small_team_pv
from ${yesterdayRangeTableName}
) b
on (a.pk_member=b.pk_member)
on (a.pk_member = b.pk_member)
when matched then
update set a.consume_box_num=b.consume_box_num,a.team_box_num=b.team_box_num,
a.consume_pv=b.consume_pv,a.team_consume_amount=b.team_consume_amount,a.team_consume_pv=b.team_consume_pv,
a.recommend_num=b.recommend_num,a.team_num=b.team_num,a.pk_grade=b.pk_grade, a.enable_status = b.enable_status,
a.big_box_num=b.big_box_num,a.small_box_num=b.small_box_num,
a.big_team_pv=b.big_team_pv,a.small_team_pv=b.small_team_pv
update set
a.consume_box_num = b.consume_box_num,
a.consume_pv = b.consume_pv,
a.team_box_num = b.team_box_num,
a.team_consume_pv = b.team_consume_pv,
a.team_consume_amount = b.team_consume_amount,
a.recommend_num = b.recommend_num, a.team_num = b.team_num,
a.pk_grade = b.pk_grade,
a.enable_status = b.enable_status,
a.big_box_num = b.big_box_num, a.small_box_num = b.small_box_num,
a.big_team_pv = b.big_team_pv, a.small_team_pv = b.small_team_pv
<if test="isSameMonth == 0">
,a.month_box_num=b.month_box_num,a.month_consume_pv=b.month_consume_pv,a.pk_share_awards=b.pk_share_awards,
a.team_month_amount=b.team_month_amount,a.team_month_pv=b.team_month_pv
,a.month_box_num = b.month_box_num
,a.month_consume_pv = b.month_consume_pv
,a.team_month_box_num = b.team_month_box_num
,a.team_month_pv = b.team_month_pv
,a.team_month_amount = b.team_month_amount
,a.pk_share_awards = b.pk_share_awards
</if>
</update>
@ -112,28 +128,24 @@
merge into ${rangeTableName} a
using (
<foreach collection="cuMemberRangeExtList" item="item" open=" " close=" " separator="union">
select #{item.pkMember} pk_member, #{item.pkAwards} pk_awards, #{item.pkGrade} pk_grade,
#{item.consumeBoxNum} consume_box_num, #{item.newBoxNum} new_bosx_num, #{item.pkShareAwards} pk_share_awards,
#{item.teamBoxNum} team_box_num, #{item.monthBoxNum} month_box_num, #{item.teamNewBoxNum} team_new_box_num,
#{item.consumePv} consume_pv, #{item.monthConsumePv} month_consume_pv,
#{item.newConsumePv} new_consume_pv, #{item.teamConsumeAmount} team_consume_amount,
#{item.teamMonthAmount} team_month_amount, #{item.teamMonthPv} team_month_pv,
#{item.teamNewPv} team_new_pv, #{item.teamNewAmount} team_new_amount,
#{item.teamConsumePv} team_consume_pv, #{item.newBoxNum} new_box_num,
#{item.recommendNum} recommend_num, #{item.teamNum} team_num,
#{item.enableStatus} enable_status
select #{item.pkMember} pk_member, #{item.pkAwards} pk_awards, #{item.pkGrade} pk_grade, #{item.pkShareAwards} pk_share_awards,
#{item.newBoxNum} new_box_num, #{item.consumeBoxNum} consume_box_num, #{item.monthBoxNum} month_box_num,
#{item.newConsumePv} new_consume_pv, #{item.consumePv} consume_pv, #{item.monthConsumePv} month_consume_pv,
#{item.teamNewBoxNum} team_new_box_num, #{item.teamBoxNum} team_box_num, #{item.teamMonthBoxNum} team_month_box_num,
#{item.teamNewPv} team_new_pv, #{item.teamConsumePv} team_consume_pv, #{item.teamMonthPv} team_month_pv,
#{item.teamNewAmount} team_new_amount, #{item.teamConsumeAmount} team_consume_amount, #{item.teamMonthAmount} team_month_amount,
#{item.recommendNum} recommend_num, #{item.teamNum} team_num, #{item.enableStatus} enable_status
from dual
</foreach>
) b
on (a.pk_member=b.pk_member)
on (a.pk_member = b.pk_member)
when matched then
update set a.pk_awards = b.pk_awards, a.pk_grade = b.pk_grade, a.pk_share_awards = b.pk_share_awards,
a.consume_box_num = b.consume_box_num, a.new_box_num = b.new_box_num, a.team_box_num = b.team_box_num,
a.month_box_num = b.month_box_num, a.team_new_box_num = b.team_new_box_num,
a.consume_pv = b.consume_pv, a.month_consume_pv = b.month_consume_pv, a.new_consume_pv = b.new_consume_pv,
a.team_consume_amount = b.team_consume_amount, a.team_consume_pv = b.team_consume_pv,
a.team_month_amount = b.team_month_amount, a.team_month_pv = b.team_month_pv,
a.team_new_amount = b.team_new_amount, a.team_new_pv = b.team_new_pv,
a.new_box_num = b.new_box_num, a.consume_box_num = b.consume_box_num, a.month_box_num = b.month_box_num,
a.new_consume_pv = b.new_consume_pv, a.consume_pv = b.consume_pv, a.month_consume_pv = b.month_consume_pv,
a.team_new_box_num = b.team_new_box_num, a.team_box_num = b.team_box_num, a.team_month_box_num = b.team_month_box_num,
a.team_new_pv = b.team_new_pv, a.team_consume_pv = b.team_consume_pv, a.team_month_pv = b.team_month_pv,
a.team_new_amount = b.team_new_amount, a.team_consume_amount = b.team_consume_amount, a.team_month_amount = b.team_month_amount,
a.recommend_num = b.recommend_num, a.team_num = b.team_num, a.enable_status = b.enable_status
</update>
@ -202,8 +214,8 @@
when matched then
update set a.pk_grade = b.pk_grade, a.pk_awards = b.pk_awards,
a.new_box_num = b.new_box_num, a.new_consume_pv = b.new_consume_pv,
a.team_new_box_num = b.team_new_box_num,a.team_new_pv = b.team_new_pv,
a.team_new_amount = b.team_new_amount,a.enable_status = b.enable_status
a.team_new_box_num = b.team_new_box_num, a.team_new_pv = b.team_new_pv,
a.team_new_amount = b.team_new_amount, a.enable_status = b.enable_status
</update>
<update id="mergeMemberRetailGradeByMember">
@ -224,8 +236,11 @@
select cm.pk_member, cr.county region_address
from ${rangeTableName} cm
inner join cu_member_retail_region cr
on cr.pk_member = cm.pk_member and cr.effective = 0 and cr.del_flag = 0
where cr.creation_time &lt; #{settleDate,jdbcType=DATE}) b
on cr.pk_member = cm.pk_member
and cr.effective = 0
and cr.del_flag = 0
where cr.creation_time &lt; #{settleDate, jdbcType=DATE}
) b
on (a.pk_member = b.pk_member)
when matched then
update set a.region_address = b.region_address
@ -241,15 +256,14 @@
from cu_member_spe_retail
where del_flag = 0
and period = #{period}
group by member_code) b
on a.member_code = b.member_code and nvl(a.modified_time, a.creation_time) = b.creation_time
group by member_code
) b on a.member_code = b.member_code and nvl(a.modified_time, a.creation_time) = b.creation_time
) b
on (a.member_code = b.member_code)
when matched then
update set a.big_box_num = b.team_box_num - b.small_box_num,a.small_box_num = b.small_box_num,
a.team_box_num = a.team_box_num + b.team_box_num,a.team_consume_pv = a.team_consume_pv + b.total_team_pv,
a.team_month_pv = a.team_month_pv + b.total_team_pv,
a.big_team_pv = b.total_team_pv - b.small_area_pv, a.small_team_pv = b.small_area_pv
update set
a.big_box_num = b.team_box_num - b.small_box_num,
a.small_box_num = b.small_box_num
</update>
<update id="mergeCuMemberRetailBackBoxBySpecial">
@ -257,25 +271,26 @@
using (
select *
from ${beforeTableName} a
inner join(
inner join (
select cr.*
from cu_member_spe_retail cr
inner join(
inner join (
select member_code, max(pk_id) pk_id
from cu_member_spe_retail
where period &lt; #{period}
and del_flag = 0
group by member_code
) b
on cr.member_code = b.member_code
) b on cr.member_code = b.member_code
where cr.period = #{period}
and cr.del_flag = 0) b
on a.member_code = b.member_code
and cr.del_flag = 0
) b on a.member_code = b.member_code
) b
on (a.pk_member = b.pk_member)
when matched then
update set a.big_box_num = 0,a.small_box_num = 0,
a.team_box_num = a.team_box_num - a.big_box_num - a.small_box_num
update set
a.big_box_num = 0,
a.small_box_num = 0,
a.team_box_num = a.team_box_num
</update>
<select id="queryCuMemberRetailRangeParent" resultMap="CuMemberRetailRangeExt">
@ -306,14 +321,15 @@
new_consume_pv,
consume_pv,
month_consume_pv,
team_box_num,
team_new_box_num,
team_consume_amount,
team_box_num,
team_month_box_num,
team_new_pv,
team_consume_pv,
team_month_amount,
team_month_pv,
team_new_amount,
team_new_pv,
team_consume_amount,
team_month_amount,
recommend_num,
team_num,
pk_grade,
@ -370,20 +386,21 @@
a.big_team_pv,
a.small_team_pv,
a.system_type,
consume_box_num,
new_box_num,
team_box_num,
consume_box_num,
month_box_num,
team_new_box_num,
new_consume_pv,
consume_pv,
month_consume_pv,
new_consume_pv,
team_consume_amount,
team_new_box_num,
team_box_num,
team_month_box_num,
team_new_pv,
team_consume_pv,
team_month_amount,
team_month_pv,
team_new_amount,
team_new_pv,
team_consume_amount,
team_month_amount,
recommend_num,
team_num,
ba.grade_value,
@ -414,18 +431,22 @@
select pk_member,c.pk_parent,member_code,member_name,c.pk_awards,c.pk_grade,c.pk_rate,c.enable_status,
c.income_status,c.pk_country,c.pk_settle_country,c.account_status,c.category,bwa.awards_value share_awards_value,
bg.grade_value,bg.grade_name,bw.awards_value,bw.awards_name,c.pk_share_awards,c.system_type,
bw.range_ratio,bw.benefit_avg_ratio,bw.benefit_share_ratio from (
select * from ${rangeTableName}
bw.range_ratio,bw.benefit_avg_ratio,bw.benefit_share_ratio
from (
select *
from ${rangeTableName}
start with pk_member = #{item}
connect by pk_member = prior pk_parent
) c
inner join bd_grade bg
on c.pk_grade = bg.pk_id
left join bd_awards bw
on bw.pk_id=c.pk_awards
on bw.pk_id = c.pk_awards
left join bd_awards bwa
on bwa.pk_id=c.pk_share_awards and bwa.del_flag=0
where bg.del_flag=0 and bw.del_flag=0
on bwa.pk_id = c.pk_share_awards
and bwa.del_flag = 0
where bg.del_flag = 0
and bw.del_flag = 0
</foreach>
</select>
@ -577,26 +598,27 @@
cm.income_status,
cm.pay_time,
b.pk_rate,
nvl(cm.is_activate, a.enable_status) enable_status,
nvl(b.consume_box_num, 0) + a.new_box_num consume_box_num,
nvl(cm.is_activate, a.enable_status) enable_status,
a.new_box_num,
nvl(b.team_box_num, 0) + a.team_new_box_num team_box_num,
nvl(b.month_box_num, 0) + a.team_new_box_num month_box_num,
a.team_new_box_num,
nvl(b.consume_pv, 0) + a.new_consume_pv consume_pv,
nvl(month_consume_pv, 0) + a.new_consume_pv month_consume_pv,
nvl(b.consume_box_num, 0) + a.new_box_num consume_box_num,
nvl(b.month_box_num, 0) + a.new_box_num month_box_num,
a.new_consume_pv,
nvl(b.team_consume_amount, 0) + a.team_new_amount team_consume_amount,
nvl(b.consume_pv, 0) + a.new_consume_pv consume_pv,
nvl(b.month_consume_pv, 0) + a.new_consume_pv month_consume_pv,
a.team_new_box_num,
nvl(b.team_box_num, 0) + a.team_new_box_num team_box_num,
nvl(b.team_month_box_num, 0) + a.team_new_box_num team_month_box_num,
a.team_new_pv,
nvl(b.team_consume_pv, 0) + a.team_new_pv team_consume_pv,
nvl(b.team_month_amount, 0) + a.team_new_amount team_month_amount,
nvl(b.team_month_pv, 0) + a.team_new_pv team_month_pv,
a.team_new_amount,
nvl(b.team_consume_amount, 0) + a.team_new_amount team_consume_amount,
nvl(b.team_month_amount, 0) + a.team_new_amount team_month_amount,
nvl(b.big_box_num, 0) big_box_num,
nvl(b.small_box_num, 0) small_box_num,
nvl(b.big_team_pv, 0) big_team_pv,
nvl(b.small_team_pv, 0) small_team_pv,
a.system_type,
a.team_new_amount,
a.team_new_pv,
bg.grade_value,
bg.grade_name,
bw.awards_value,
@ -657,17 +679,17 @@
<select id="queryCuMemberSecondRangeExtByParent" resultMap="CuMemberRetailRangeExt">
select cm.pk_id pkMember,
nvl(b.team_box_num, 0) + nvl(a.team_new_box_num, 0) team_box_num,
nvl(b.consume_box_num, 0) + nvl(a.new_box_num, 0) consume_box_num,
nvl(b.big_box_num, 0) big_box_num,
nvl(b.small_box_num, 0) small_box_num
nvl(b.consume_box_num, 0) + nvl(a.new_box_num, 0) consume_box_num,
nvl(b.team_box_num, 0) + nvl(a.team_new_box_num, 0) team_box_num,
nvl(b.big_box_num, 0) big_box_num,
nvl(b.small_box_num, 0) small_box_num
from cu_member cm
left join ${secondTableName} a
on cm.pk_id = a.pk_member
left join ${rangeTableName} b
on cm.pk_id = b.pk_member
left join ${secondTableName} a
on cm.pk_id = a.pk_member
left join ${rangeTableName} b
on cm.pk_id = b.pk_member
where cm.pk_parent = #{pkMember}
and cm.del_flag = 0
and cm.del_flag = 0
<!--
select a.pk_member,

View File

@ -533,10 +533,10 @@
enable_status number(2) default 1 not null,
system_type NUMBER(2) default 2 not null,
new_box_num number(8) default 0 not null,
team_new_box_num number(8) default 0 not null,
new_consume_pv number(17,6) default 0 not null,
team_new_amount number(17,6) default 0 not null,
team_new_pv number(17,6) default 0 not null
team_new_box_num number(8) default 0 not null,
team_new_pv number(17,6) default 0 not null,
team_new_amount number(17,6) default 0 not null
)
</update>
@ -567,20 +567,21 @@
pk_country number(4) default 1 not null,
system_type NUMBER(2) default 2 not null,
pk_rate NUMBER(6),
consume_box_num number(8) default 0 not null,
new_box_num number(8) default 0 not null,
team_box_num number(8) default 0 not null,
consume_box_num number(8) default 0 not null,
month_box_num number(8) default 0 not null,
team_new_box_num number(8) default 0 not null,
new_consume_pv number(17,6) default 0 not null,
consume_pv number(17,6) default 0 not null,
month_consume_pv number(17,6) default 0 not null,
new_consume_pv number(17,6) default 0 not null,
team_consume_amount number(17,6) default 0 not null,
team_new_box_num number(8) default 0 not null,
team_box_num number(8) default 0 not null,
team_month_box_num number(8) default 0 not null,
team_new_pv number(17,6) default 0 not null,
team_consume_pv number(17,6) default 0 not null,
team_month_amount number(17,6) default 0 not null,
team_month_pv number(17,6) default 0 not null,
team_new_amount number(17,6) default 0 not null,
team_new_pv number(17,6) default 0 not null,
team_consume_amount number(17,6) default 0 not null,
team_month_amount number(17,6) default 0 not null,
recommend_num number(8) default 0 not null,
team_num number(8) default 0 not null,
region_address number(8) default 0 not null,

View File

@ -422,7 +422,7 @@
<update id="updateCuMemberMinGradeByList">
merge into cu_member a
using (
select pk_member,min(pk_grade) pk_grade from(
select pk_member, min(pk_grade) pk_grade from(
<foreach item="item" index="index" collection="cuMemberGradeList" separator=" union ">
select #{item.pkMember} pk_member,#{item.newLevel} pk_grade from dual
</foreach>)
@ -432,6 +432,7 @@
when matched then
update set a.pk_settle_grade = b.pk_grade,a.modified_time = sysdate
</update>
<update id="updateCuMemberLevel">
merge into cu_member a
using (
@ -454,6 +455,6 @@
) b
on (a.pk_id = b.pk_id)
when matched then
update set a.pk_settle_grade = b.pk_grade,a.modified_time = sysdate
update set a.pk_settle_grade = b.pk_grade, a.modified_time = sysdate
</update>
</mapper>

View File

@ -66,7 +66,7 @@
using (
select cw.*
from cu_member_awards cw
inner join(
inner join (
select ca.pk_member, min(ca.pk_id) pk_id
from cu_member_awards ca
inner join bd_awards bw
@ -82,11 +82,8 @@
with pk_id = #{pkMember}
connect by prior pk_parent = pk_id)
group by ca.pk_member
) cx
on cw.pk_id = cx.pk_id
where cw.del_flag = 0
) b
on (a.pk_member = b.pk_member)
) cx on cw.pk_id = cx.pk_id where cw.del_flag = 0
) b on (a.pk_member = b.pk_member)
when matched then
update set a.pk_awards = b.old_level
</update>

View File

@ -46,19 +46,19 @@
using (
select cs.pk_member, b.pk_grade
from ${secondRangeTableName} cs
inner join(
inner join (
select a.pk_member, max(a.new_level) pk_grade
from cu_member_grade a
inner join(
inner join (
select pk_member, max(nvl(modified_time, creation_time)) creation_time
from cu_member_grade
where period &lt;= #{period}
and del_flag = 0
and up_type = 2
group by pk_member) b
on a.pk_member = b.pk_member and nvl(a.modified_time, a.creation_time) = b.creation_time
group by a.pk_member) b
on cs.pk_member = b.pk_member
group by pk_member
) b on a.pk_member = b.pk_member and nvl(a.modified_time, a.creation_time) = b.creation_time
group by a.pk_member
) b on cs.pk_member = b.pk_member
where cs.pk_grade &lt; b.pk_grade
) b
on (a.pk_member = b.pk_member)
@ -127,9 +127,10 @@
</delete>
<select id="queryCuMemberGrade" resultMap="CuMemberGrade">
select cg.* from cu_member_grade cg
select cg.*
from cu_member_grade cg
inner join bd_grade bg
on cg.new_level=bg.pk_id
on cg.new_level = bg.pk_id
where bg.del_flag = 0
and cg.del_flag = 0
and bg.grade_value >= 60
@ -153,7 +154,7 @@
<select id="queryCuMemberGradeByList" resultType="com.hzs.common.domain.member.detail.CuMemberGrade">
select a.* from cu_member_grade a
inner join(
inner join (
select pk_member, max(nvl(modified_time,creation_time)) creation_time
from cu_member_grade
where period &lt;= #{period}

View File

@ -241,4 +241,26 @@
order by pay_time
</select>
<select id="listSaOrderByTime" resultType="com.hzs.common.domain.sale.order.SaOrder">
select pk_id,
pk_member,
order_code,
order_type,
pk_rate,
order_amount,
order_achieve,
rec_province,
rec_city,
rec_county,
pk_country
from sa_order so
where so.order_status = 1
and so.order_type in
<foreach collection="orderType" item="item" open="(" separator="," close=")">
#{item}
</foreach>
and so.pay_time >= #{startDate}
and #{endDate} > so.pay_time
</select>
</mapper>

View File

@ -8,10 +8,8 @@ import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* 时间工具类
@ -160,22 +158,18 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
}
/**
* 截取字符串转换为月
*
* @param date
* @Description: 截取字符串转换为月
* @return: String
* @Author: sui q
* @Date: 2022/11/7 15:50
*/
public static String getMonth(String date) {
return date.replace("-", "").substring(0, 6);
}
/**
* 截取字符串转换为年
*
* @param date
* @Description: 截取字符串转换为年
* @return: String
* @Author: sui q
* @Date: 2022/11/7 15:50
*/
public static String getYear(String date) {
return date.substring(0, 4);
@ -476,7 +470,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
/**
* 根据条件获取数量后的日期按照
*
* @param number 数量
* @param number 数量
* @return Date
*/
public static Date afterMonthDate(Integer number, Date... date) {
@ -798,39 +792,6 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
return instance.getTime();
}
/**
* 获取两个时间内的每一天
*
* @param startTime
* @param endTime
* @return
*/
public static List findDaysStr(String startTime, String endTime) {
SimpleDateFormat sdf = new SimpleDateFormat(DateUtils.YYYY_MM_DD);
Date dBegin = null;
Date dEnd = null;
try {
dBegin = sdf.parse(startTime);
dEnd = sdf.parse(endTime);
} catch (ParseException e) {
e.printStackTrace();
}
List daysStrList = new ArrayList();
daysStrList.add(sdf.format(dBegin));
Calendar calBegin = Calendar.getInstance();
calBegin.setTime(dBegin);
Calendar calEnd = Calendar.getInstance();
calEnd.setTime(dEnd);
while (dEnd.after(calBegin.getTime())) {
calBegin.add(Calendar.DAY_OF_MONTH, 1);
String dayStr = sdf.format(calBegin.getTime());
daysStrList.add(dayStr);
}
return daysStrList;
}
/**
* 计算当前日期前n天的日期
*
@ -841,16 +802,12 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_YEAR, -n);
Date date = calendar.getTime();
return date;
return calendar.getTime();
}
/*
* @description: 获取最近的星期一
* @author: sui q
* @date: 2023/7/15 14:00
* @param: null null
**/
/**
* 获取最近的星期一
*/
public static String getRecentlyTuesday(String date) {
Date settleDate = parseStringToDate(date);
DayOfWeek dayOfWeek = toLocalDate(settleDate).getDayOfWeek();
@ -864,23 +821,17 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
}
}
/*
* @description: 获取某一天的是这一周的第几天
* @author: sui q
* @date: 2023/7/15 14:00
* @param: null null
**/
/**
* 获取某一天的是这一周的第几天
*/
public static Integer getRecentlyDay(Date settleDate) {
DayOfWeek dayOfWeek = toLocalDate(settleDate).getDayOfWeek();
return dayOfWeek.getValue();
}
/*
* @description: 获取最近的星期二
* @author: sui q
* @date: 2023/7/15 14:00
* @param: null null
**/
/**
* 获取最近的星期二
*/
public static String getRecentlyTuesday(Date settleDate) {
DayOfWeek dayOfWeek = toLocalDate(settleDate).getDayOfWeek();
if (dayOfWeek.getValue() == 1) {
@ -892,12 +843,9 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
}
}
/*
* @description: 获取最近的星期一
* @author: sui q
* @date: 2023/7/15 14:00
* @param: null null
**/
/**
* 获取最近的星期一
*/
public static String getRecentlyMonday(Date settleDate) {
DayOfWeek dayOfWeek = toLocalDate(settleDate).getDayOfWeek();
if (dayOfWeek.getValue() == 1) {
@ -925,11 +873,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
}
/**
* @description: 判断日期是否在7天内
* @author: zhang jing
* @date: 2023/3/28 9:25
* @param: [addtime, now]
* @return: boolean
* 判断日期是否在7天内
**/
public static boolean isLatestWeek(Date addtime, Date now) {
Calendar calendar = Calendar.getInstance(); //得到日历
@ -939,9 +883,4 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
return before7days.getTime() < addtime.getTime();
}
public static void main(String[] args) {
System.out.println(parseDateToFormat(DateUtils.YYYY_MM_DD, afterMonthDate(1,parseStringToDate("2023-09-25"))));
System.out.println(parseDateToFormat(DateUtils.YYYY_MM_DD, afterMonthDate(6,parseStringToDate("2023-09-25"))));
System.out.println(parseDateToFormat(DateUtils.YYYY_MM_DD, afterMonthDate(12,parseStringToDate("2023-09-25"))));
}
}

View File

@ -1,8 +1,11 @@
package com.hzs.common.domain.member.achieve;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableField;
import com.hzs.common.core.web.domain.BaseEntity;
import lombok.Data;
@ -108,16 +111,37 @@ public class CuMemberRetailRange extends BaseEntity {
private Integer systemType;
/**
* 累计消费盒数
*/
@TableField("CONSUME_BOX_NUM")
private Integer consumeBoxNum;
/**
* 新消费盒数
* 本人当天新消费盒数
*/
@TableField("NEW_BOX_NUM")
private Integer newBoxNum;
/**
* 本人累计消费盒数
*/
@TableField("CONSUME_BOX_NUM")
private Integer consumeBoxNum;
/**
* 本人月累计盒数
*/
@TableField("MONTH_BOX_NUM")
private Integer monthBoxNum;
/**
* 本人当天新消费pv
*/
@TableField("NEW_CONSUME_PV")
private BigDecimal newConsumePv;
/**
* 本人累计消费pv
*/
@TableField("CONSUME_PV")
private BigDecimal consumePv;
/**
* 本人月累计消费pv
*/
@TableField("MONTH_CONSUME_PV")
private BigDecimal monthConsumePv;
// @TableField("own_box_num")
// private Integer ownBoxNum;
@ -128,41 +152,54 @@ public class CuMemberRetailRange extends BaseEntity {
// @TableField("NEW_OWN_BOX_NUM")
// private Integer newOwnBoxNum;
/**
* 团队当天新增盒数
*/
@TableField("TEAM_NEW_BOX_NUM")
private Integer teamNewBoxNum;
/**
* 团队累计盒数
*/
@TableField("TEAM_BOX_NUM")
private Integer teamBoxNum;
/**
* 团队月累计盒数
*/
@TableField("MONTH_BOX_NUM")
private Integer monthBoxNum;
@TableField("TEAM_MONTH_BOX_NUM")
private Integer teamMonthBoxNum;
/**
* 团队新增盒数
* 团队当天新增消费pv
*/
@TableField("TEAM_NEW_BOX_NUM")
private Integer teamNewBoxNum;
@TableField("TEAM_NEW_PV")
private BigDecimal teamNewPv;
/**
* 团队累计消费pv
*/
@TableField("TEAM_CONSUME_PV")
private BigDecimal teamConsumePv;
/**
* 团队月累计消费pv
*/
@TableField("TEAM_MONTH_PV")
private BigDecimal teamMonthPv;
/**
* 累计消费pv
* 团队新增消费金额
*/
@TableField("CONSUME_PV")
private BigDecimal consumePv;
@TableField("TEAM_NEW_AMOUNT")
private BigDecimal teamNewAmount;
/**
* 月累计消费pv
* 团队累计消费金额
*/
@TableField("MONTH_CONSUME_PV")
private BigDecimal monthConsumePv;
@TableField("TEAM_CONSUME_AMOUNT")
private BigDecimal teamConsumeAmount;
/**
* 新消费pv
* 团队月累计消费金额
*/
@TableField("NEW_CONSUME_PV")
private BigDecimal newConsumePv;
@TableField("TEAM_MONTH_AMOUNT")
private BigDecimal teamMonthAmount;
// /**
// * 月累计消费pv
@ -176,42 +213,6 @@ public class CuMemberRetailRange extends BaseEntity {
// @TableField("NEW_OWN_CONSUME_PV")
// private BigDecimal newOwnConsumePv;
/**
* 团队累计消费金额
*/
@TableField("TEAM_CONSUME_AMOUNT")
private BigDecimal teamConsumeAmount;
/**
* 团队累计消费pv
*/
@TableField("TEAM_CONSUME_PV")
private BigDecimal teamConsumePv;
/**
* 团队月累计消费金额
*/
@TableField("TEAM_MONTH_AMOUNT")
private BigDecimal teamMonthAmount;
/**
* 团队月累计消费pv
*/
@TableField("TEAM_MONTH_PV")
private BigDecimal teamMonthPv;
/**
* 团队新增消费金额
*/
@TableField("TEAM_NEW_AMOUNT")
private BigDecimal teamNewAmount;
/**
* 团队新增消费pv
*/
@TableField("TEAM_NEW_PV")
private BigDecimal teamNewPv;
/**
* 推荐人数
*/