## 赠品积分结算处理;

This commit is contained in:
cabbage 2025-10-27 15:19:26 +08:00
parent 60400f5399
commit 174b39edfe
16 changed files with 565 additions and 286 deletions

View File

@ -31,6 +31,11 @@ public class BonusConfigDTO implements Serializable {
*/
private Map<String, BonusDirectDTO> bonusDirectDtoMap;
/**
* 等级列表
*/
private List<BdGrade> gradeList;
/**
* 奖衔列表
*/

View File

@ -121,6 +121,17 @@ public abstract class BonusSettleHandle {
cuMemberBonusRange.setRemark(remark);
}
/**
* 获得 赠送积分的备注
*/
protected void giftPointRemark(SaOrderExt saOrderExt, CuMemberBonusDetail cuMemberBonusDetail,
CuMemberRetailRangeExt targetMemberRangeExt) {
String remark = String.format(BonusMsgConstants.GIFT_POINT, saOrderExt.getOrderCode(),
targetMemberRangeExt.getMemberCode() + targetMemberRangeExt.getMemberName(),
cuMemberBonusDetail.getRealIncome());
cuMemberBonusDetail.setRemark(remark);
}
public CuMemberBonus getCuMemberBonus(Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap,
Long pkMember, Integer incomeStatus, Integer pkCountry, Integer pkRate) {
if (cuMemberBonusMap.containsKey(pkMember)) {

View File

@ -11,6 +11,7 @@ import com.hzs.bonus.bonus.service.ICuMemberBonusStageService;
import com.hzs.bonus.bonus.vo.BonusRecordDetailVO;
import com.hzs.bonus.constant.BonusConstants;
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.RetailConstants;
@ -26,6 +27,7 @@ import com.hzs.common.domain.member.detail.*;
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.BdGrade;
import com.hzs.system.config.dto.BonusConfigDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@ -53,6 +55,8 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
@Autowired
private ICuMemberAwardsService iCuMemberAwardsService;
@Autowired
private ICuMemberGradeService iCuMemberGradeService;
@Autowired
private ICuMemberService iCuMemberService;
@Autowired
private IBonusOrderService iBonusOrderService;
@ -303,11 +307,24 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
iCuMemberRetailRangeService.mergeMemberRetailRangeByYesterday(rangeTableName, yesterdayRangeTableName, isSameMonth);
// 初始化结算明细数据昨天数据更新到今天数据
iCuMemberRetailRangeService.mergeMemberRetailRangeDetailByYesterday(rangeDetailTableName, yesterdayRangeDetailTableName, true);
// 更新会员手动升级
iCuMemberGradeService.updateCuMemberManualGrade(rangeTableName, period);
// 升阶段点位列表
List<CuMemberRetailDetail> stageList = new ArrayList<>();
if (orderList.size() > 0) {
// 会员购买升级记录
Map<Long, CuMemberLevel> memberLevelMap = new HashMap<>();
List<CuMemberLevel> memberLevelList = iCuMemberGradeService.queryCuMemberLevel(settleStartDate, settleEndDate);
memberLevelList.forEach(cuMemberLevel -> memberLevelMap.put(cuMemberLevel.getPkOrder(), cuMemberLevel));
// 等级mapkey:等级IDvalue:等级对象
Map<Integer, BdGrade> gradeIdMap = new HashMap<>();
List<BdGrade> gradeList = bonusConfigDTO.getGradeList();
for (BdGrade bdGrade : gradeList) {
gradeIdMap.put(bdGrade.getPkId(), bdGrade);
}
// 奖衔
Map<Integer, BdAwards> awardsMap = new HashMap<>();
List<BdAwards> awardsList = bonusConfigDTO.getAwardsList();
@ -319,6 +336,8 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
List<CuMemberBonusRange> cuMemberBonusRangeList = new ArrayList<>();
// 阶段收益
List<CuMemberBonusStage> cuMemberBonusStageList = new ArrayList<>();
// 赠品积分
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
// 更新血缘上个人团队累计业绩用于处理奖衔
Map<Long, MemberAchieveParam> memberAchieveHashMap = new HashMap<>();
@ -380,13 +399,31 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
stageList.addAll(this.calculateStageIncome(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period,
memberRangeExtMap, sourceMember, saOrderExt, settleStartDate, rangeTableName, rangeDetailTableName));
// 领导级差收益平级收益 -- 来源PV
this.calculateRetailRangeBonus(cuMemberBonusRangeList, memberRangeExtMap, cuMemberBonusMap, bonusConfigDTO, period,
awardsMap, saOrderExt, sourceMember);
// 2025.10.27需求调整去掉直推收益
// // 直推收益 -- 来源订单金额直推拿业绩的10%
// this.calculateDirectIncome(cuMemberBonusPushList, memberRangeExtMap, sourceMember, saOrderExt,
// bonusConfigDTO, period, cuMemberBonusMap);
// 领导级差收益平级收益 -- 来源PV
this.calculateRetailRangeBonus(cuMemberBonusRangeList, memberRangeExtMap, cuMemberBonusMap, bonusConfigDTO, period,
awardsMap, saOrderExt, sourceMember);
// 2025.10.27需求调整订单满指定PV对应给指定赠品积分
this.calculateGiftPoint(memberRangeExtMap, saOrderExt, cuMemberBonusMap, cuMemberBonusDetailList, bonusConfigDTO, period);
// 订单存在升级记录
if (memberLevelMap.containsKey(saOrderExt.getPkId())) {
CuMemberLevel cuMemberLevel = memberLevelMap.get(saOrderExt.getPkId());
if (gradeIdMap.containsKey(cuMemberLevel.getNewLevel())) {
BdGrade bdGrade = gradeIdMap.get(cuMemberLevel.getNewLevel());
if (bdGrade.getGradeValue() > sourceMember.getGradeValue()) {
sourceMember.setPkGrade(bdGrade.getPkId());
sourceMember.setGradeValue(bdGrade.getGradeValue());
sourceMember.setGradeName(bdGrade.getGradeName());
}
}
}
} else if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()) {
// 商城专区
sourceMember.setRepConsumeNewPv(sourceMember.getRepConsumeNewPv().add(orderAchieve));
@ -445,6 +482,9 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
if (cuMemberBonusStageList.size() > 0) {
bonusRecordDetailVO.setCuMemberBonusStageList(cuMemberBonusStageList);
}
if (cuMemberBonusDetailList.size() > 0) {
bonusRecordDetailVO.setCuMemberBonusDetailList(cuMemberBonusDetailList);
}
// 更新日结数据
iCuMemberRetailRangeService.updateCuMemberRetailRange(rangeTableName, memberRangeExtMap);
// 更新日结明细数据
@ -607,6 +647,28 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
return cuMemberAwards;
}
private CuMemberBonusDetail getCuMemberBonusDetail(SaOrder saOrderExt, CuMemberRetailRangeExt targetMemberRangeExt,
CuMemberBonus cuMemberBonus, Integer pkBonusItems) {
CuMemberBonusDetail cuMemberBonusDetail = CuMemberBonusDetail.builder()
.pkBonus(cuMemberBonus.getPkId())
.pkOrder(saOrderExt.getPkId())
.pkBonusItems(pkBonusItems)
.incomeStatus(targetMemberRangeExt.getIncomeStatus())
.calType(ECalType.VALUE.getValue())
.calAchieve(saOrderExt.getOrderAchieve())
.calValue(BigDecimal.ZERO)
.pretaxIncome(BigDecimal.ZERO)
.incomeTax(BigDecimal.ZERO)
.realIncome(BigDecimal.ZERO)
.incomeRatio(BigDecimal.ZERO)
.incomeDialRatio(BigDecimal.ZERO)
.orderDialRatio(BigDecimal.ZERO)
.build();
cuMemberBonusDetail.setPkCountry(targetMemberRangeExt.getPkSettleCountry());
cuMemberBonusDetail.setPkCreator(MagicNumberConstants.PK_ADMIN);
return cuMemberBonusDetail;
}
/**
* 计算直推收益 -- 精品专区
*/
@ -753,13 +815,13 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType()
|| EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()) {
// 精品专区按订单金额计算 -- 2025.10.13精品专区改为按业绩处理
BigDecimal orderAmount = saOrderExt.getOrderAchieve();
BigDecimal orderAchieve = saOrderExt.getOrderAchieve();
// 订单金额除50取整为新増点位数量
newPointInt = orderAmount.divide(RetailConstants.POINT_VAL, 0, RoundingMode.DOWN).intValue();
if (orderAmount.compareTo(BonusConstants.GIFT_TWO_AMOUNT) >= 0 && sourceMember.getGiftPoint() < 2) {
newPointInt = orderAchieve.divide(RetailConstants.POINT_VAL, 0, RoundingMode.DOWN).intValue();
if (orderAchieve.compareTo(BonusConstants.GIFT_TWO_AMOUNT) >= 0 && sourceMember.getGiftPoint() < 2) {
// 首次订单金额大于等于2万每个点位完成三阶段赠送2个点位
sourceMember.setGiftPoint(2);
} else if (orderAmount.compareTo(BonusConstants.GIFT_ONE_AMOUNT) >= 0 && sourceMember.getGiftPoint() < 1) {
} else if (orderAchieve.compareTo(BonusConstants.GIFT_ONE_AMOUNT) >= 0 && sourceMember.getGiftPoint() < 1) {
// 首次订单金额大于等于1万每个点位完成三阶段赠送1个点位
sourceMember.setGiftPoint(1);
}
@ -1359,5 +1421,63 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
}
}
/**
* 计算赠品积分
*/
private void calculateGiftPoint(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, SaOrderExt saOrderExt,
Map<Long, CuMemberBonus> cuMemberBonusMap, List<CuMemberBonusDetail> cuMemberBonusDetailList,
BonusConfigDTO bonusConfigDTO, Integer period) {
// 订单业绩
BigDecimal orderAchieve = saOrderExt.getOrderAchieve();
// 一次性消费拿赠品积分
CuMemberRetailRangeExt sourceMember = memberRangeExtMap.get(saOrderExt.getPkMember());
// 推荐会员消费拿赠品积分
CuMemberRetailRangeExt targetMember = memberRangeExtMap.get(saOrderExt.getPkReference());
// 赠送积分
BigDecimal giftPoint = BigDecimal.ZERO;
// 推荐赠送积分
BigDecimal targetGiftPoint = BigDecimal.ZERO;
if (orderAchieve.compareTo(BonusConstants.GIFT_TWO_AMOUNT) >= 0) {
// 订单业绩大于等于2万
giftPoint = BonusConstants.GIFT_TWO_POINT;
targetGiftPoint = BonusConstants.TARGET_GIFT_TWO_POINT;
} else if (orderAchieve.compareTo(BonusConstants.GIFT_ONE_AMOUNT) >= 0) {
// 订单业绩大于等于1万
giftPoint = BonusConstants.GIFT_ONE_POINT;
targetGiftPoint = BonusConstants.TARGET_GIFT_ONE_POINT;
}
if (giftPoint.compareTo(BigDecimal.ZERO) > 0 && null != sourceMember) {
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, sourceMember.getPkMember(),
sourceMember.getIncomeStatus(), sourceMember.getPkSettleCountry(), sourceMember.getPkRate() == null ? saOrderExt.getPkRate() : sourceMember.getPkRate());
int pkBonusItems = getPkBonusItems(bonusConfigDTO, sourceMember.getPkSettleCountry(), EBonusItems.RANGE_INCOME.getValue());
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrderExt, sourceMember, cuMemberBonus, pkBonusItems);
cuMemberBonusDetail.setPretaxIncome(giftPoint);
setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
giftPointRemark(saOrderExt, cuMemberBonusDetail, sourceMember);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
cuMemberBonus.setBackPoints(ComputeUtil.computeAdd(cuMemberBonus.getBackPoints(), giftPoint));
}
cuMemberBonusDetailList.add(cuMemberBonusDetail);
}
if (targetGiftPoint.compareTo(BigDecimal.ZERO) > 0 && null != targetMember && targetMember.getGradeValue() >= EGrade.HAI_FAN.getValue()) {
// 银卡 金卡会员推荐才有奖励
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMember.getPkMember(),
targetMember.getIncomeStatus(), targetMember.getPkSettleCountry(), targetMember.getPkRate() == null ? saOrderExt.getPkRate() : targetMember.getPkRate());
int pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMember.getPkSettleCountry(), EBonusItems.RANGE_INCOME.getValue());
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrderExt, targetMember, cuMemberBonus, pkBonusItems);
cuMemberBonusDetail.setPretaxIncome(giftPoint);
setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
giftPointRemark(saOrderExt, cuMemberBonusDetail, targetMember);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
cuMemberBonus.setBackPoints(ComputeUtil.computeAdd(cuMemberBonus.getBackPoints(), giftPoint));
}
cuMemberBonusDetailList.add(cuMemberBonusDetail);
}
}
}

View File

@ -221,6 +221,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
iCuMemberBonusPushService.deleteCuMemberBonusPush(period);
iCuMemberBonusStageService.deleteCuMemberBonusStage(period);
iCuMemberBonusRangeService.deleteCuMemberBonusRange(period);
iCuMemberBonusDetailService.deleteCuMemberBonusDetail(period);
iCuMemberBonusService.deleteCuMemberBonus(period);
if (cuMemberBonusMap.size() == 0) {
return;
@ -230,6 +231,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
List<CuMemberBonusPush> cuMemberBonusPushList = bonusRecordDetailVO.getCuMemberBonusPushList();
List<CuMemberBonusRange> cuMemberBonusRangeList = bonusRecordDetailVO.getCuMemberBonusRangeList();
List<CuMemberBonusStage> cuMemberBonusStageList = bonusRecordDetailVO.getCuMemberBonusStageList();
List<CuMemberBonusDetail> cuMemberBonusDetailList = bonusRecordDetailVO.getCuMemberBonusDetailList();
if (cuMemberBonusPushList != null && cuMemberBonusPushList.size() > 0) {
cuMemberBonusPushList.forEach(cuMemberBonusPush ->
cuMemberBonusPush.setPkBonus(cuMemberBonusMap.get(cuMemberBonusPush.getPkBonus()).getPkId()));
@ -242,12 +244,17 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
cuMemberBonusStageList.forEach(cuMemberBonusStage ->
cuMemberBonusStage.setPkBonus(cuMemberBonusMap.get(cuMemberBonusStage.getPkBonus()).getPkId()));
}
if (cuMemberBonusDetailList != null && cuMemberBonusDetailList.size() > 0) {
cuMemberBonusDetailList.forEach(cuMemberBonusDetail ->
cuMemberBonusDetail.setPkBonus(cuMemberBonusMap.get(cuMemberBonusDetail.getPkBonus()).getPkId()));
}
// 插入奖金主表
iCuMemberBonusService.batchInsertCuMemberBonus(cuMemberBonusList);
Set<Long> memberIdSet = iCuMemberBonusService.queryMemberBonusByPeriod(period);
iCuMemberBonusPushService.batchInsertCuMemberBonusPush(cuMemberBonusPushList, memberIdSet);
iCuMemberBonusRangeService.batchInsertCuMemberBonusRange(cuMemberBonusRangeList, memberIdSet);
iCuMemberBonusStageService.batchInsertCuMemberBonusStage(cuMemberBonusStageList, memberIdSet);
iCuMemberBonusDetailService.batchInsertCuMemberBonusDetail(cuMemberBonusDetailList, memberIdSet);
}
private List<CuMemberBonus> setCuMemberBonusSeq(String settleDate, Map<Long, CuMemberBonus> cuMemberBonusMap) {

View File

@ -40,6 +40,15 @@ public class BonusConstants {
*/
public static final BigDecimal GIFT_ONE_POINT = new BigDecimal("2000");
/**
* 推荐2万业绩会员赠送积分
*/
public static final BigDecimal TARGET_GIFT_TWO_POINT = new BigDecimal("2000");
/**
* 推荐1万业绩会员赠送积分
*/
public static final BigDecimal TARGET_GIFT_ONE_POINT = new BigDecimal("1000");
/**
* 一阶段奖金 -- 满14发35
*/

View File

@ -0,0 +1,28 @@
package com.hzs.bonus.detail.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.member.detail.CuMemberGrade;
import com.hzs.common.domain.member.detail.CuMemberLevel;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
/**
* 会员信息-等级升级记录 Mapper 接口
*/
public interface CuMemberGradeMapper extends BaseMapper<CuMemberGrade> {
/**
* 更新会员手动升级
*/
void updateCuMemberManualGrade(@Param("rangeTableName") String rangeTableName, @Param("period") Integer period);
/**
* 查询会员升级记录
*/
List<CuMemberLevel> queryCuMemberLevel(@Param("startDate") Date startDate,
@Param("endDate") Date endDate,
@Param("upType") Integer upType);
}

View File

@ -0,0 +1,25 @@
package com.hzs.bonus.detail.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.member.detail.CuMemberGrade;
import com.hzs.common.domain.member.detail.CuMemberLevel;
import java.util.Date;
import java.util.List;
/**
* 会员信息-等级升级记录 服务类
*/
public interface ICuMemberGradeService extends IService<CuMemberGrade> {
/**
* 更新会员手动升级
*/
void updateCuMemberManualGrade(String rangeTableName, Integer period);
/**
* 回退极差奖衔每日重新结算先把等级回退到前一天
*/
List<CuMemberLevel> queryCuMemberLevel(Date startDate, Date endDate);
}

View File

@ -0,0 +1,32 @@
package com.hzs.bonus.detail.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.bonus.detail.mapper.CuMemberGradeMapper;
import com.hzs.bonus.detail.service.ICuMemberGradeService;
import com.hzs.common.core.enums.EUpgradeType;
import com.hzs.common.domain.member.detail.CuMemberGrade;
import com.hzs.common.domain.member.detail.CuMemberLevel;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* 会员信息-等级升级记录 服务实现类
*/
@Service
public class CuMemberGradeServiceImpl extends ServiceImpl<CuMemberGradeMapper, CuMemberGrade> implements ICuMemberGradeService {
@Override
public void updateCuMemberManualGrade(String rangeTableName, Integer period) {
// 根据手动升级记录更新日结表
baseMapper.updateCuMemberManualGrade(rangeTableName, period);
}
@Override
public List<CuMemberLevel> queryCuMemberLevel(Date startDate, Date endDate) {
// 购买升级记录列表
return baseMapper.queryCuMemberLevel(startDate, endDate, EUpgradeType.BUY_UPGRADE.getValue());
}
}

View File

@ -58,6 +58,7 @@
<result column="gift_point" property="giftPoint"/>
<result column="gift_pay_time" property="giftPayTime"/>
<result column="GRADE_VALUE" property="gradeValue"/>
<result column="AWARDS_VALUE" property="awardsValue"/>
<result column="AWARDS_NAME" property="awardsName"/>
<result column="RANGE_RATIO" property="rangeRatio"/>
@ -141,252 +142,252 @@
<update id="mergeMemberRetailRangeDetailByYesterday">
insert into ${detailTableName}
select t.pk_member,
t.child_node,
cm.pk_parent,
t.stage,
t.stage_status,
t.stage_date,
t.point_member_11,
t.point_11,
t.point_member_12,
t.point_12,
t.point_member_21,
t.point_21,
t.point_member_22,
t.point_22,
t.point_member_23,
t.point_23,
t.point_member_24,
t.point_24,
t.point_member_31,
t.point_31,
t.point_member_32,
t.point_32,
t.point_member_33,
t.point_33,
t.point_member_34,
t.point_34,
t.point_member_35,
t.point_35,
t.point_member_36,
t.point_36,
t.point_member_37,
t.point_37,
t.point_member_38,
t.point_38,
t.point_type,
t.point_gift,
t.creation_time,
t.point_member_first,
t.point_first,
t.point_member_second,
t.point_second,
t.point_member_third,
t.point_third,
t.third_bonus_1,
t.third_bonus_2,
t.third_bonus_3,
t.stage_sort
t.child_node,
cm.pk_parent,
t.stage,
t.stage_status,
t.stage_date,
t.point_member_11,
t.point_11,
t.point_member_12,
t.point_12,
t.point_member_21,
t.point_21,
t.point_member_22,
t.point_22,
t.point_member_23,
t.point_23,
t.point_member_24,
t.point_24,
t.point_member_31,
t.point_31,
t.point_member_32,
t.point_32,
t.point_member_33,
t.point_33,
t.point_member_34,
t.point_34,
t.point_member_35,
t.point_35,
t.point_member_36,
t.point_36,
t.point_member_37,
t.point_37,
t.point_member_38,
t.point_38,
t.point_type,
t.point_gift,
t.creation_time,
t.point_member_first,
t.point_first,
t.point_member_second,
t.point_second,
t.point_member_third,
t.point_third,
t.third_bonus_1,
t.third_bonus_2,
t.third_bonus_3,
t.stage_sort
from ${yesterdayDetailTableName} t
left join cu_member cm
on cm.pk_id = t.pk_member
<!--
merge into ${detailTableName} a
using (
select x.pk_member,
x.child_node,
cm.pk_parent,
x.stage,
x.stage_status,
x.stage_date,
x.point_11,
x.point_12,
x.point_21,
x.point_22,
x.point_23,
x.point_24,
x.point_31,
x.point_32,
x.point_33,
x.point_34,
x.point_35,
x.point_36,
x.point_37,
x.point_38,
x.point_member_11,
x.point_member_12,
x.point_member_21,
x.point_member_22,
x.point_member_23,
x.point_member_24,
x.point_member_31,
x.point_member_32,
x.point_member_33,
x.point_member_34,
x.point_member_35,
x.point_member_36,
x.point_member_37,
x.point_member_38,
x.point_type,
x.point_gift,
x.creation_time,
x.point_first,
x.point_member_first,
x.point_second,
x.point_member_second,
x.point_third,
x.point_member_third,
x.third_bonus_1,
x.third_bonus_2,
x.third_bonus_3,
x.stage_sort
from ${yesterdayDetailTableName} x
left join cu_member cm
on cm.pk_id = x.pk_member
) b
on (a.pk_member = b.pk_member and a.child_node = b.child_node and a.stage = b.stage)
when not matched then
insert (pk_member,
child_node,
pk_parent,
stage,
stage_status,
stage_date,
point_11,
point_12,
point_21,
point_22,
point_23,
point_24,
point_31,
point_32,
point_33,
point_34,
point_35,
point_36,
point_37,
point_38,
point_member_11,
point_member_12,
point_member_21,
point_member_22,
point_member_23,
point_member_24,
point_member_31,
point_member_32,
point_member_33,
point_member_34,
point_member_35,
point_member_36,
point_member_37,
point_member_38,
point_type,
point_gift,
creation_time,
point_first,
point_member_first,
point_second,
point_member_second,
point_third,
point_member_third,
third_bonus_1,
third_bonus_2,
third_bonus_3,
stage_sort)
values (b.pk_member,
b.child_node,
b.pk_parent,
b.stage,
b.stage_status,
b.stage_date,
b.point_11,
b.point_12,
b.point_21,
b.point_22,
b.point_23,
b.point_24,
b.point_31,
b.point_32,
b.point_33,
b.point_34,
b.point_35,
b.point_36,
b.point_37,
b.point_38,
b.point_member_11,
b.point_member_12,
b.point_member_21,
b.point_member_22,
b.point_member_23,
b.point_member_24,
b.point_member_31,
b.point_member_32,
b.point_member_33,
b.point_member_34,
b.point_member_35,
b.point_member_36,
b.point_member_37,
b.point_member_38,
b.point_type,
b.point_gift,
b.creation_time,
b.point_first,
b.point_member_first,
b.point_second,
b.point_member_second,
b.point_third,
b.point_member_third,
b.third_bonus_1,
b.third_bonus_2,
b.third_bonus_3,
b.stage_sort)
when matched then
update set
a.pk_parent = b.pk_parent,
a.stage_status = b.stage_status,
a.stage_date = b.stage_date,
a.point_11 = b.point_11,
a.point_12 = b.point_12,
a.point_21 = b.point_21,
a.point_22 = b.point_22,
a.point_23 = b.point_23,
a.point_24 = b.point_24,
a.point_31 = b.point_31,
a.point_32 = b.point_32,
a.point_33 = b.point_33,
a.point_34 = b.point_34,
a.point_35 = b.point_35,
a.point_36 = b.point_36,
a.point_37 = b.point_37,
a.point_38 = b.point_38,
a.point_member_11 = b.point_member_11,
a.point_member_12 = b.point_member_12,
a.point_member_21 = b.point_member_21,
a.point_member_22 = b.point_member_22,
a.point_member_23 = b.point_member_23,
a.point_member_24 = b.point_member_24,
a.point_member_31 = b.point_member_31,
a.point_member_32 = b.point_member_32,
a.point_member_33 = b.point_member_33,
a.point_member_34 = b.point_member_34,
a.point_member_35 = b.point_member_35,
a.point_member_36 = b.point_member_36,
a.point_member_37 = b.point_member_37,
a.point_member_38 = b.point_member_38,
a.point_type = b.point_type,
a.point_gift = b.point_gift,
a.creation_time = b.creation_time,
a.point_first = b.point_first,
a.point_member_first = b.point_member_first,
a.point_second = b.point_second,
a.point_member_second = b.point_member_second,
a.point_third = b.point_third,
a.point_member_third = b.point_member_third,
a.third_bonus_1 = b.third_bonus_1,
a.third_bonus_2 = b.third_bonus_2,
a.third_bonus_3 = b.third_bonus_3,
a.stage_sort = b.stage_sort
-->
left join cu_member cm
on cm.pk_id = t.pk_member
<!--
merge into ${detailTableName} a
using (
select x.pk_member,
x.child_node,
cm.pk_parent,
x.stage,
x.stage_status,
x.stage_date,
x.point_11,
x.point_12,
x.point_21,
x.point_22,
x.point_23,
x.point_24,
x.point_31,
x.point_32,
x.point_33,
x.point_34,
x.point_35,
x.point_36,
x.point_37,
x.point_38,
x.point_member_11,
x.point_member_12,
x.point_member_21,
x.point_member_22,
x.point_member_23,
x.point_member_24,
x.point_member_31,
x.point_member_32,
x.point_member_33,
x.point_member_34,
x.point_member_35,
x.point_member_36,
x.point_member_37,
x.point_member_38,
x.point_type,
x.point_gift,
x.creation_time,
x.point_first,
x.point_member_first,
x.point_second,
x.point_member_second,
x.point_third,
x.point_member_third,
x.third_bonus_1,
x.third_bonus_2,
x.third_bonus_3,
x.stage_sort
from ${yesterdayDetailTableName} x
left join cu_member cm
on cm.pk_id = x.pk_member
) b
on (a.pk_member = b.pk_member and a.child_node = b.child_node and a.stage = b.stage)
when not matched then
insert (pk_member,
child_node,
pk_parent,
stage,
stage_status,
stage_date,
point_11,
point_12,
point_21,
point_22,
point_23,
point_24,
point_31,
point_32,
point_33,
point_34,
point_35,
point_36,
point_37,
point_38,
point_member_11,
point_member_12,
point_member_21,
point_member_22,
point_member_23,
point_member_24,
point_member_31,
point_member_32,
point_member_33,
point_member_34,
point_member_35,
point_member_36,
point_member_37,
point_member_38,
point_type,
point_gift,
creation_time,
point_first,
point_member_first,
point_second,
point_member_second,
point_third,
point_member_third,
third_bonus_1,
third_bonus_2,
third_bonus_3,
stage_sort)
values (b.pk_member,
b.child_node,
b.pk_parent,
b.stage,
b.stage_status,
b.stage_date,
b.point_11,
b.point_12,
b.point_21,
b.point_22,
b.point_23,
b.point_24,
b.point_31,
b.point_32,
b.point_33,
b.point_34,
b.point_35,
b.point_36,
b.point_37,
b.point_38,
b.point_member_11,
b.point_member_12,
b.point_member_21,
b.point_member_22,
b.point_member_23,
b.point_member_24,
b.point_member_31,
b.point_member_32,
b.point_member_33,
b.point_member_34,
b.point_member_35,
b.point_member_36,
b.point_member_37,
b.point_member_38,
b.point_type,
b.point_gift,
b.creation_time,
b.point_first,
b.point_member_first,
b.point_second,
b.point_member_second,
b.point_third,
b.point_member_third,
b.third_bonus_1,
b.third_bonus_2,
b.third_bonus_3,
b.stage_sort)
when matched then
update set
a.pk_parent = b.pk_parent,
a.stage_status = b.stage_status,
a.stage_date = b.stage_date,
a.point_11 = b.point_11,
a.point_12 = b.point_12,
a.point_21 = b.point_21,
a.point_22 = b.point_22,
a.point_23 = b.point_23,
a.point_24 = b.point_24,
a.point_31 = b.point_31,
a.point_32 = b.point_32,
a.point_33 = b.point_33,
a.point_34 = b.point_34,
a.point_35 = b.point_35,
a.point_36 = b.point_36,
a.point_37 = b.point_37,
a.point_38 = b.point_38,
a.point_member_11 = b.point_member_11,
a.point_member_12 = b.point_member_12,
a.point_member_21 = b.point_member_21,
a.point_member_22 = b.point_member_22,
a.point_member_23 = b.point_member_23,
a.point_member_24 = b.point_member_24,
a.point_member_31 = b.point_member_31,
a.point_member_32 = b.point_member_32,
a.point_member_33 = b.point_member_33,
a.point_member_34 = b.point_member_34,
a.point_member_35 = b.point_member_35,
a.point_member_36 = b.point_member_36,
a.point_member_37 = b.point_member_37,
a.point_member_38 = b.point_member_38,
a.point_type = b.point_type,
a.point_gift = b.point_gift,
a.creation_time = b.creation_time,
a.point_first = b.point_first,
a.point_member_first = b.point_member_first,
a.point_second = b.point_second,
a.point_member_second = b.point_member_second,
a.point_third = b.point_third,
a.point_member_third = b.point_member_third,
a.third_bonus_1 = b.third_bonus_1,
a.third_bonus_2 = b.third_bonus_2,
a.third_bonus_3 = b.third_bonus_3,
a.stage_sort = b.stage_sort
-->
</update>
<!-- 更新会员日结数据 -->
@ -394,7 +395,7 @@
merge into ${rangeTableName} a
using (
<foreach collection="cuMemberRangeExtList" item="item" open=" " close=" " separator="union">
select #{item.pkMember} pk_member, #{item.pkAwards} pk_awards, #{item.pkShareAwards} pk_share_awards,
select #{item.pkMember} pk_member, #{item.pkGrade} pk_grade, #{item.pkAwards} pk_awards, #{item.pkShareAwards} pk_share_awards,
#{item.newConsumePv} new_consume_pv, #{item.consumePv} consume_pv, #{item.monthConsumePv} month_consume_pv,
#{item.newConsumeAmount} new_consume_amount, #{item.consumeAmount} consume_amount, #{item.monthConsumeAmount} month_consume_amount,
#{item.teamNewPv} team_new_pv, #{item.teamConsumePv} team_consume_pv, #{item.teamMonthPv} team_month_pv,
@ -412,7 +413,7 @@
) b
on (a.pk_member = b.pk_member)
when matched then
update set a.pk_awards = b.pk_awards, a.pk_share_awards = b.pk_share_awards,
update set a.pk_grade = b.pk_grade, a.pk_awards = b.pk_awards, a.pk_share_awards = b.pk_share_awards,
a.new_consume_pv = b.new_consume_pv, a.consume_pv = b.consume_pv, a.month_consume_pv = b.month_consume_pv,
a.new_consume_amount = b.new_consume_amount, a.consume_amount = b.consume_amount, a.month_consume_amount = b.month_consume_amount,
a.team_new_pv = b.team_new_pv, a.team_consume_pv = b.team_consume_pv, a.team_month_pv = b.team_month_pv,
@ -751,7 +752,8 @@
gift_point,
gift_pay_time,
bw.awards_value,
bw.awards_name
bw.awards_name,
bg.grade_value
from (
select * from ${tableName}
start with pk_member = #{item}
@ -759,6 +761,8 @@
) a
inner join bd_awards bw
on bw.pk_id = a.pk_awards
inner join bd_grade bg
on bg.pk_id = a.pk_grade
left join bd_vertex bv
on bv.pk_id = a.pk_vertex
</foreach>
@ -1082,7 +1086,8 @@
connect by cmr.pk_member = prior cmr.pk_parent
group by cmr.pk_parent
having count (distinct cmr.pk_member) >= #{placeDeptNum})
and #{awardsValue} > ba.awards_value
and #{awardsValue}
> ba.awards_value
and cmr.team_consume_pv >= #{totalCheck}
</select>

View File

@ -133,7 +133,7 @@
insert (
pk_id, pk_member, period, pk_rate, direct_income, global_points,
expand_income,expand_no_capping,
expand_capping,coach_income,share_income,service_income,back_points,service_spend,
expand_capping,coach_income,share_income,service_income,back_points, service_spend,
pur_real_subtotal,repur_push_income,repur_range_income,repur_expand_income,repur_real_subtotal,
repur_coupon,repur_coupon_share,repur_coupon_subtotal,
store_income, real_income_total,
@ -147,7 +147,7 @@
values (
b.pk_id, b.pk_member, b.period, b.pk_rate, b.direct_income, b.global_points,
b.expand_income,b.expand_no_capping,
b.expand_capping,b.coach_income,b.share_income,b.service_income,b.back_points,b.service_spend,
b.expand_capping,b.coach_income,b.share_income,b.service_income,b.back_points, b.service_spend,
b.pur_real_subtotal,b.repur_push_income,b.repur_range_income,b.repur_expand_income,b.repur_real_subtotal,
b.repur_coupon,b.repur_coupon_share,b.repur_coupon_subtotal,
b.store_income, b.real_income_total,

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hzs.bonus.detail.mapper.CuMemberGradeMapper">
<!-- 更新会员手动升级 -->
<update id="updateCuMemberManualGrade">
merge into ${rangeTableName} a
using (
select a.pk_member, max(a.new_level) pk_grade
from cu_member_grade a
inner join(
select pk_member, max(nvl(modified_time, creation_time)) creation_time
from cu_member_grade
where period = #{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 (a.pk_member = b.pk_member)
when matched then
update set
a.pk_grade = b.pk_grade
</update>
<!-- 查询会员升级记录 -->
<select id="queryCuMemberLevel" resultType="com.hzs.common.domain.member.detail.CuMemberLevel">
select *
from cu_member_level
where del_flag = 0
and up_type = #{upType}
and upgrade_time >= #{startDate,jdbcType=DATE}
and upgrade_time &lt; #{endDate,jdbcType=DATE}
order by upgrade_time
</select>
</mapper>

View File

@ -46,7 +46,6 @@ import com.hzs.sale.product.service.IBdProductService;
import com.hzs.sale.pub.dto.OrderDeductionDTO;
import com.hzs.system.base.IAreaServiceApi;
import com.hzs.system.base.ICurrencyServiceApi;
import com.hzs.system.base.ISystemConfigServiceApi;
import com.hzs.system.base.dto.CurrencyDTO;
import com.hzs.system.config.IAccountServiceApi;
import com.hzs.system.config.IServiceChargeServiceApi;
@ -1260,7 +1259,8 @@ public class OrderBusinessServiceImpl implements IOrderBusinessService {
}
// 校验订单是否存在进行中的签呈
if (iSaOrderChargeLogService.checkOrderApprovalExist(
Arrays.asList(EApprovalBusiness.ORDER_CHANGE_ADDRESS.getValue(), EApprovalBusiness.ORDER_CHANGE_PRODUCT.getValue(),
Arrays.asList(EApprovalBusiness.ORDER_CHANGE_ADDRESS.getValue(),
EApprovalBusiness.ORDER_CHANGE_PRODUCT.getValue(),
EApprovalBusiness.ORDER_RETURN.getValue(), approveBusiness,
EApprovalBusiness.ORDER_CANCEL_PRODUCT.getValue()
),
@ -1364,13 +1364,13 @@ public class OrderBusinessServiceImpl implements IOrderBusinessService {
}
} else if (orderCancelParam.getCancelType().equals(ECancelOrderType.OTHER_CANCEL_ORDER.getValue())) {
// 其他撤单
if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()) {
// 2025.03.05 复购可以升级需要必须从最后一单开始撤单
if (EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()) {
// 自购买精品专区订单必须按顺序撤单
List<SaOrder> saOrderList = iSaOrderService.querySaleOrderByPkMember(cuMember.getPkSettleCountry(), cuMember.getPkId(),
Arrays.asList(EOrderType.RETAIL_REGISTER.getValue(), EOrderType.RETAIL_REPURCHASE.getValue()),
Arrays.asList(EOrderType.RETAIL_REGISTER.getValue(), EOrderType.RETAIL_UPGRADE.getValue()),
null);
if (!saOrderList.get(0).getOrderCode().equals(saOrderExt.getOrderCode())) {
validateCancelOrderVO.setMsg("撤销复购订单,只能从最新的订单开始撤销,最新的订单编号:" + saOrderList.get(0).getOrderCode());
validateCancelOrderVO.setMsg("撤销复购专区订单,只能从最新的订单开始撤销,最新的订单编号:" + saOrderList.get(0).getOrderCode());
return validateCancelOrderVO;
}
}
@ -2291,7 +2291,7 @@ public class OrderBusinessServiceImpl implements IOrderBusinessService {
return myOrderVO;
}
if (myOrderVO.getOrderType() == EOrderType.RETAIL_REGISTER.getValue() ||
myOrderVO.getOrderType() == EOrderType.RETAIL_REPURCHASE.getValue()) {
myOrderVO.getOrderType() == EOrderType.RETAIL_UPGRADE.getValue()) {
String lastOrderCode = iSaOrderService.lastOrderList(userId, myOrderVO.getPkCountry());
if (StringUtils.isEmpty(lastOrderCode) || !lastOrderCode.equals(myOrderVO.getOrderCode())) {
myOrderVO.setMsg(TransactionUtils.getContent(SaOrderMsgConstants.CHECK_MEMBER_LAST_ORDER));

View File

@ -27,31 +27,33 @@ import java.util.*;
public class BonusItemsServiceProvider implements IBonusItemsServiceApi {
@Autowired
private IBdBonusItemsService bonusItemsService;
private IBdBonusItemsService iBdBonusItemsService;
@Autowired
private IBdBonusDirectService bdBonusDirectService;
private IBdBonusDirectService iBdBonusDirectService;
@Autowired
private IBdAwardsService iBdAwardsService;
@Autowired
private IBdBonusDeductService bdBonusDeductService;
private IBdGradeService iBdGradeService;
@Autowired
private IBdCurrencyService bdCurrencyService;
private IBdBonusDeductService iBdBonusDeductService;
@Autowired
private IBdCountryService bdCountryService;
private IBdCurrencyService iBdCurrencyService;
@Autowired
private IBdCountryService iBdCountryService;
@Override
public R<List<BdBonusItemsExt>> queryBonusItems(Integer pkCountry) {
return R.ok(bonusItemsService.queryBonusItems(pkCountry));
return R.ok(iBdBonusItemsService.queryBonusItems(pkCountry));
}
@Override
public R<List<BdBonusItems>> queryExistsBonusItems(List<Integer> bonusValueList) {
return R.ok(bonusItemsService.queryBonusItemsByValue(bonusValueList));
return R.ok(iBdBonusItemsService.queryBonusItemsByValue(bonusValueList));
}
@Override
public R<BdBonusItems> queryBonusItems(Integer pkCountry, Integer pkBonusItems) {
return R.ok(bonusItemsService.queryBonusItems(pkCountry, pkBonusItems));
return R.ok(iBdBonusItemsService.queryBonusItems(pkCountry, pkBonusItems));
}
@Override
@ -60,7 +62,7 @@ public class BonusItemsServiceProvider implements IBonusItemsServiceApi {
// 汇率
bonusConfigDTO.setCurrencyDtoMap(getCurrencyDtoMap());
// 收益类型
List<BdCountry> allCountryList = bdCountryService.getAllCountry();
List<BdCountry> allCountryList = iBdCountryService.getAllCountry();
Set<Integer> countrySet = new HashSet<>();
allCountryList.forEach(bdCountry ->
countrySet.add(bdCountry.getPkId()));
@ -72,11 +74,13 @@ public class BonusItemsServiceProvider implements IBonusItemsServiceApi {
bonusConfigDTO.setBonusDeductsMap(getBonusDeductConfig());
// 奖衔列表
bonusConfigDTO.setAwardsList(iBdAwardsService.queryAwards());
// 等级列表
bonusConfigDTO.setGradeList(iBdGradeService.queryBdGrade());
return R.ok(bonusConfigDTO);
}
private Map<String, BdCurrencyDTO> getCurrencyDtoMap() {
List<BdCurrency> bdCurrencyList = bdCurrencyService.queryAllBdCurrency();
List<BdCurrency> bdCurrencyList = iBdCurrencyService.queryAllBdCurrency();
Map<String, BdCurrencyDTO> currencyDtoMap = new HashMap<>(ComputeUtil.mapInitCapacity(bdCurrencyList.size()));
bdCurrencyList.forEach(bdCurrency ->
currencyDtoMap.put(bdCurrency.getPkCountry().toString() + bdCurrency.getPkId(),
@ -87,7 +91,7 @@ public class BonusItemsServiceProvider implements IBonusItemsServiceApi {
private Map<String, BdBonusItemsExt> getBdBonusItemsExtMap(Set<Integer> countrySet) {
Map<String, BdBonusItemsExt> bonusItemsMap = new HashMap<>(ComputeUtil.mapInitCapacity(countrySet.size() * 8));
countrySet.forEach(pkCountry -> {
List<BdBonusItemsExt> bdBonusItemsExtList = bonusItemsService.queryCalBonusItems(pkCountry);
List<BdBonusItemsExt> bdBonusItemsExtList = iBdBonusItemsService.queryCalBonusItems(pkCountry);
for (BdBonusItemsExt bdBonusItemsExt : bdBonusItemsExtList) {
bonusItemsMap.put(pkCountry.toString() + bdBonusItemsExt.getBonusValue().toString(), bdBonusItemsExt);
}
@ -99,7 +103,7 @@ public class BonusItemsServiceProvider implements IBonusItemsServiceApi {
* 获得奖金 推荐什么等级 直推奖励配置
*/
private Map<String, BonusDirectDTO> getBonusDirectConfig() {
List<BdBonusDirect> bdBonusDirectList = bdBonusDirectService.queryBonusDirect();
List<BdBonusDirect> bdBonusDirectList = iBdBonusDirectService.queryBonusDirect();
Map<String, BonusDirectDTO> directDtoHashMap = new HashMap<>(ComputeUtil.mapInitCapacity(bdBonusDirectList.size()));
bdBonusDirectList.forEach(bdBonusDirect -> {
BonusDirectDTO bonusDirectDTO = BeanUtil.copyProperties(bdBonusDirect, BonusDirectDTO.class);
@ -112,7 +116,7 @@ public class BonusItemsServiceProvider implements IBonusItemsServiceApi {
* 获取每个国家奖金项对应的扣项
*/
private Map<Integer, BdBonusDeduct> getBonusDeductConfig() {
List<BdBonusDeduct> bdBonusDeductList = bdBonusDeductService.queryBonusDeduct();
List<BdBonusDeduct> bdBonusDeductList = iBdBonusDeductService.queryBonusDeduct();
Map<Integer, BdBonusDeduct> bdBonusDeductMap = new HashMap<>(ComputeUtil.mapInitCapacity(bdBonusDeductList.size()));
bdBonusDeductList.forEach(bdBonusDeduct ->
bdBonusDeductMap.put(bdBonusDeduct.getPkBonusItems(), bdBonusDeduct));

View File

@ -2,7 +2,6 @@ package com.hzs.system.config.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.common.core.constant.CacheConstants;
@ -173,9 +172,8 @@ public class BdGradeServiceImpl extends ServiceImpl<BdGradeMapper, BdGrade> impl
@Override
public List<BdGrade> queryBdGrade() {
QueryWrapper<BdGrade> queryWrapper = new QueryWrapper<>();
queryWrapper.select("PK_ID,GRADE_VALUE,FIRST_CALCULATE,FIRST_ASSESS,EXPAND_CAPPING,EXPAND_RATIO,REPURCHASE_CALCULATE,REPURCHASE_ASSESS,REPURCHASE_CAPPING,REPURCHASE_RATIO,PK_COUNTRY");
queryWrapper.eq("SYSTEM_TYPE", 0);
LambdaQueryWrapper<BdGrade> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.orderByAsc(BdGrade::getGradeValue);
return baseMapper.selectList(queryWrapper);
}

View File

@ -1,13 +1,10 @@
package com.hzs.common.core.enums;
import com.hzs.common.core.constant.EnumsPrefixConstants;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 撤销订单类型
*
* @author: hzs
*/
@AllArgsConstructor
@Getter

View File

@ -92,7 +92,7 @@ public class CuMemberBonus extends BaseEntity {
private BigDecimal serviceIncome;
/**
* 商城重消
* 赠品积分-众康
*/
@TableField("BACK_POINTS")
private BigDecimal backPoints;