## 一阶段点位填充处理;

This commit is contained in:
cabbage 2025-09-19 18:14:50 +08:00
parent 647be8bb87
commit 3b89fd6ca1
14 changed files with 1297 additions and 286 deletions

View File

@ -29,6 +29,12 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
@Param("yesterdayRangeTableName") String yesterdayRangeTableName,
@Param("isSameMonth") Integer isSameMonth);
/**
* 将昨天的结算明细迁移到今天
*/
void mergeMemberRetailRangeDetailByYesterday(@Param("detailTableName") String detailTableName,
@Param("yesterdayDetailTableName") String yesterdayDetailTableName);
/**
* 当前网体更新极差秒结表
*/
@ -52,6 +58,11 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
*/
List<CuMemberRetailRangeExt> queryCuMemberRetailRangeParent(@Param("tableName") String tableName, @Param("saOrderExtList") List<?> saOrderExtList);
/**
* 根据会员ID查询会员数据
*/
List<CuMemberRetailRangeExt> listCuMemberRetailRange(@Param("tableName") String tableName, @Param("pkMemberList") List<Long> pkMemberList);
/**
* 推荐推荐人查询推荐人下的所有部门, 该订单日期之前的算他的网体
*/
@ -80,13 +91,19 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
void mergeCuMemberSecondRange(@Param("secondTableName") String secondTableName, @Param("cuMemberRangeExtList") List<?> cuMemberRangeExtList);
/**
* 批量更新网体
* 更新会员日结数据
*/
void mergeCuMemberRetailRangeExt(@Param("rangeTableName") String rangeTableName, @Param("cuMemberRangeExtList") List<?> cuMemberRangeExtList);
/**
* 批量会员日结明细数据
*/
void mergeCuMemberRetailDetail(@Param("rangeDetailTableName") String rangeDetailTableName, @Param("cuMemberDetailList") List<?> cuMemberDetailList);
/**
* 向上查找所有parentID
*
* @param pkMember
* @return
*/
@ -95,6 +112,7 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
/**
* 更新自己秒结
*
* @param tableName
* @param orderExt
* @param cuMember
@ -103,6 +121,7 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
/**
* 更新上级秒结
*
* @param tableName
* @param orderExt
* @param memberList

View File

@ -18,4 +18,10 @@ public interface ICuMemberRetailDetailService extends IService<CuMemberRetailDet
*/
void listMemberRetailDetail(String retailDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, EBonusStage eBonusStage);
/**
* 指定会员获取对应的点位数据
*/
void listMemberRetailDetail(String retailDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
List<Long> queryMemberList, EBonusStage eBonusStage);
}

View File

@ -21,7 +21,12 @@ public interface ICuMemberRetailRangeService extends IService<CuMemberRetailRang
/**
* 将昨天的业绩信息迁移到今天
*/
void mergeMemberRetailRangeByYesterday(Date settleEndDate, String rangeTableName, String yesterdayRangeTableName, Boolean isSameMonth);
void mergeMemberRetailRangeByYesterday(String rangeTableName, String yesterdayRangeTableName, Boolean isSameMonth);
/**
* 将昨天的结算明细迁移到今天
*/
void mergeMemberRetailRangeDetailByYesterday(String detailTableName, String yesterdayDetailTableName);
/**
* 根据会员查询会员上的所有网体, 按照pkParent作为key
@ -49,13 +54,15 @@ public interface ICuMemberRetailRangeService extends IService<CuMemberRetailRang
List<CuMemberRetailRangeExt> queryCuMemberSecondRangeExtByParent(String rangeTableName, String secondTableName, Long pkMember);
/**
* 更新会员树的累计业绩
*
* @param settleTableName 结算日期
* @param cuMemberTreeMap
* 更新会员日结数据
*/
void updateCuMemberRetailRange(String settleTableName, Map<Long, CuMemberRetailRangeExt> cuMemberTreeMap);
/**
* 更新会员日结明细数据
*/
void updateCuMemberRetailDetail(String rangeDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap);
/**
* 更新极差秒接表用昨天的结算表
*/

View File

@ -3,10 +3,7 @@ package com.hzs.bonus.achieve.service.impl;
import com.hzs.common.core.constant.MagicNumberConstants;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.*;
/**
* 奖金计算工具类
@ -39,4 +36,11 @@ public class CuMemberBonusSettle {
List<?> oriList = Arrays.asList(baseEntityList.toArray());
return handleCutList(oriList, batchNum);
}
public List<List<?>> handleCutList(Collection<?> baseEntityList, Integer... batchNum) {
List<?> oriList = Arrays.asList(baseEntityList.toArray());
return handleCutList(oriList, batchNum);
}
}

View File

@ -1,5 +1,6 @@
package com.hzs.bonus.achieve.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.hzs.bonus.achieve.mapper.CuMemberRetailDetailMapper;
import com.hzs.bonus.achieve.service.ICuMemberRetailDetailService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -25,21 +26,42 @@ public class CuMemberRetailDetailServiceImpl extends ServiceImpl<CuMemberRetailD
public void listMemberRetailDetail(String retailDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, EBonusStage eBonusStage) {
List<List<?>> pkMemberList = cuMemberBonusSettle.handleCutList(memberRangeExtMap.keySet(), MagicNumberConstants.BATCH_QUERY_NUM);
pkMemberList.forEach(tmpIdList -> {
// 查询明细数据指定阶段未完成的
List<CuMemberRetailDetail> tmpList = baseMapper.listMemberRetailDetail(retailDetailTableName, tmpIdList, eBonusStage.getValue());
if (tmpList.size() > 0) {
if (CollectionUtil.isNotEmpty(tmpList)) {
// 明细数据放到对应的会员数据中
for (CuMemberRetailDetail cuMemberRetailDetail : tmpList) {
CuMemberRetailRangeExt cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailDetail.getPkMember());
if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) {
// 阶段一点位列表
if (null == cuMemberRetailRangeExt.getOneDetailList()) {
cuMemberRetailRangeExt.setOneDetailList(new ArrayList<>());
// 阶段一点位列表使用有序map为了后续业务处理方便
if (null == cuMemberRetailRangeExt.getOneDetailMap()) {
cuMemberRetailRangeExt.setOneDetailMap(new LinkedHashMap<>());
}
cuMemberRetailRangeExt.getOneDetailList().add(cuMemberRetailDetail);
cuMemberRetailRangeExt.getOneDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail);
}
}
}
});
}
@Override
public void listMemberRetailDetail(String retailDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
List<Long> queryMemberList, EBonusStage eBonusStage) {
// 查询明细数据指定阶段未完成的
List<CuMemberRetailDetail> tmpDetailList = baseMapper.listMemberRetailDetail(retailDetailTableName, queryMemberList, eBonusStage.getValue());
if (CollectionUtil.isNotEmpty(tmpDetailList)) {
// 明细数据放到对应的会员数据中
for (CuMemberRetailDetail cuMemberRetailDetail : tmpDetailList) {
CuMemberRetailRangeExt cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailDetail.getPkMember());
if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) {
// 阶段一点位列表使用有序map为了后续业务处理方便
if (null == cuMemberRetailRangeExt.getOneDetailMap()) {
cuMemberRetailRangeExt.setOneDetailMap(new LinkedHashMap<>());
}
cuMemberRetailRangeExt.getOneDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail);
}
}
}
}
}

View File

@ -1,10 +1,12 @@
package com.hzs.bonus.achieve.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.bonus.achieve.mapper.CuMemberRetailRangeMapper;
import com.hzs.bonus.achieve.service.ICuMemberRetailRangeService;
import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.core.enums.EOrderType;
import com.hzs.common.domain.member.achieve.CuMemberRetailDetail;
import com.hzs.common.domain.member.achieve.CuMemberRetailRange;
import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt;
import com.hzs.common.domain.member.base.CuMember;
@ -27,7 +29,7 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl<CuMemberRetailRa
private CuMemberBonusSettle cuMemberBonusSettle;
@Override
public void mergeMemberRetailRangeByYesterday(Date settleEndDate, String rangeTableName, String yesterdayRangeTableName, Boolean isSameMonth) {
public void mergeMemberRetailRangeByYesterday(String rangeTableName, String yesterdayRangeTableName, Boolean isSameMonth) {
// 当天数据全部更新为0
baseMapper.mergeMemberRetailRangeInit(rangeTableName);
if (isSameMonth) {
@ -38,6 +40,11 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl<CuMemberRetailRa
}
}
@Override
public void mergeMemberRetailRangeDetailByYesterday(String detailTableName, String yesterdayDetailTableName) {
baseMapper.mergeMemberRetailRangeDetailByYesterday(detailTableName, yesterdayDetailTableName);
}
@Override
public List<CuMemberRetailRangeExt> queryCuMemberRetailRangeParent(String tableName, List<SaOrderExt> saOrderExtList) {
List<CuMemberRetailRangeExt> memberRetailRangeExtList = new ArrayList<>();
@ -82,6 +89,21 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl<CuMemberRetailRa
treeList.forEach(list -> baseMapper.mergeCuMemberRetailRangeExt(settleTableName, list));
}
@Override
public void updateCuMemberRetailDetail(String rangeDetailTableName, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap) {
Collection<CuMemberRetailDetail> retailDetailColl = new ArrayList<>();
memberRangeExtMap.forEach((key, value) -> {
if (null != value.getOneDetailMap() && value.getOneDetailMap().size() > 0) {
retailDetailColl.addAll(value.getOneDetailMap().values());
}
});
List<List<?>> list = cuMemberBonusSettle.handleCutList(retailDetailColl);
if (CollectionUtil.isNotEmpty(list)) {
list.forEach(tmpList ->
baseMapper.mergeCuMemberRetailDetail(rangeDetailTableName, tmpList));
}
}
@Override
public void mergeMemberSecondRetailRangeByRange(String rangeTableName, String secondRangeTableName, Long pkMember) {
// 当前网体更新极差秒接表血缘伞上

View File

@ -0,0 +1,11 @@
package com.hzs.bonus.bonus.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.member.bonus.CuMemberBonusStage;
/**
* 会员奖金-阶段收益明细表 Mapper 接口
*/
public interface CuMemberBonusStageMapper extends BaseMapper<CuMemberBonusStage> {
}

View File

@ -0,0 +1,41 @@
package com.hzs.bonus.bonus.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.member.achieve.CuMemberRetailDetail;
import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt;
import com.hzs.common.domain.member.bonus.CuMemberBonusStage;
import java.util.Map;
/**
* 会员奖金-阶段收益明细表 服务类
*/
public interface ICuMemberBonusStageService extends IService<CuMemberBonusStage> {
/**
* 填充会员点位
*/
String fillChildNode(CuMemberRetailDetail cuMemberRetailDetail, CuMemberRetailDetail newRetailDetail);
/**
* 处理新点位是推荐第一层
*/
void handlePointFirst(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail,
String rangeTableName, String rangeDetailTableName, String newNode);
/**
* 处理新点位是推荐第二层
*/
void handlePointSecond(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail,
String rangeTableName, String rangeDetailTableName, String newNode);
/**
* 处理新点位是推荐第三层
*/
void handlePointThird(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail,
String rangeTableName, String rangeDetailTableName, String newNode);
}

View File

@ -6,6 +6,7 @@ import cn.hutool.core.util.ReflectUtil;
import com.hzs.bonus.achieve.service.ICuMemberRetailDetailService;
import com.hzs.bonus.achieve.service.ICuMemberRetailRangeService;
import com.hzs.bonus.base.service.ICuMemberService;
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;
@ -44,10 +45,12 @@ import java.util.stream.Collectors;
@Component
public class BonusSettleRangeHandle extends BonusSettleHandle {
@Autowired
private ICuMemberRetailDetailService iCuMemberRetailDetailService;
@Autowired
private ICuMemberRetailRangeService iCuMemberRetailRangeService;
@Autowired
private ICuMemberRetailDetailService iCuMemberRetailDetailService;
private ICuMemberBonusStageService iCuMemberBonusStageService;
@Autowired
private ICuMemberAwardsService iCuMemberAwardsService;
@Autowired
@ -289,8 +292,10 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// TODO 回退奖衔将奖衔回退到结算前状态
iCuMemberAwardsService.calculateCuMemberRetailRangeAwardsInit(settleDate, period, rangeTableName);
// 更新网体
iCuMemberRetailRangeService.mergeMemberRetailRangeByYesterday(settleEndDate, rangeTableName, yesterdayRangeTableName, isSameMonth);
// 初始化结算网体数据昨天数据更新到今天数据
iCuMemberRetailRangeService.mergeMemberRetailRangeByYesterday(rangeTableName, yesterdayRangeTableName, isSameMonth);
// 初始化结算明细数据昨天数据更新到今天数据
iCuMemberRetailRangeService.mergeMemberRetailRangeDetailByYesterday(rangeDetailTableName, yesterdayRangeDetailTableName);
if (orderList.size() > 0) {
// 按照血缘查询该会员所有伞上会员
@ -313,8 +318,10 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 会员奖衔升级记录
List<CuMemberAwards> cuMemberAwardsList = new ArrayList<>();
// 精品直推收益复购见点收益
// 直推收益见点收益
List<CuMemberBonusPush> cuMemberBonusPushList = new ArrayList<>();
// 阶段收益
List<CuMemberBonusStage> cuMemberBonusStageList = new ArrayList<>();
// 复购级差收益
List<CuMemberBonusRange> cuMemberBonusRangeList = new ArrayList<>();
// 会员奖金明细
@ -328,8 +335,8 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
bonusConfigDTO, period, cuMemberBonusMap);
// TODO 阶段收益 -- 来源订单金额
this.calculateStageIncome(cuMemberBonusPushList, memberRangeExtMap, saOrderExt,
settleStartDate);
this.calculateStageIncome(cuMemberBonusStageList, memberRangeExtMap, saOrderExt,
settleStartDate, rangeTableName, rangeDetailTableName);
// TODO 领导级差收益 -- 来源PV
@ -359,8 +366,10 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 更新会员表奖衔数据
iCuMemberService.updateCuMemberRetailRangeByPeriod(period);
}
// 更新网体
// 更新日结数据
iCuMemberRetailRangeService.updateCuMemberRetailRange(rangeTableName, memberRangeExtMap);
// 更新日结明细数据
iCuMemberRetailRangeService.updateCuMemberRetailDetail(rangeDetailTableName, memberRangeExtMap);
}
}
@ -428,85 +437,85 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
break;
}
// 校验大小区会员数据
List<CuMemberRetailRangeExt> cuMemberRangeExtList = null;
// 校验累计小部门会员数据
List<CuMemberRetailRangeExt> cuMemberRetailRangeExtList = null;
// 计算分红奖衔
while (true) {
// 当月奖衔值 + 5获取下一个奖衔值
int awardsValue = targetMemberRangeExt.getShareAwardsValue() + 5;
if (retailAwardsMap.containsKey(awardsValue)) {
BdAwards bdAwards = retailAwardsMap.get(awardsValue);
// 先验证累计业绩
if (ComputeUtil.compareValue(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamMonthPv(), targetMemberRangeExt.getMonthConsumePv()), bdAwards.getShareTotalCheck())) {
// 再验证小区计算小区业绩拉取直推会员数据
if (null == cuMemberRangeExtList) {
if (null != secondRangeTableName) {
// 会员表 关联 秒结表 昨日结算表查询订单会员直推数据
cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberSecondRangeExtByParent(rangeTableName, secondRangeTableName, targetMemberRangeExt.getPkMember());
} else {
// 昨日结算表查询订单会员直推数据
cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeExtByParent(rangeTableName, targetMemberRangeExt.getPkMember());
}
}
// 本人月消费业绩默认为大区
BigDecimal consumeBigPv = targetMemberRangeExt.getMonthConsumePv();
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRangeExtList) {
if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember());
}
// 月累计业绩 = 本人月消费业绩 + 团队月消费业绩
BigDecimal consumePv = ComputeUtil.computeAdd(cuMemberRetailRangeExt.getMonthConsumePv(), cuMemberRetailRangeExt.getAllTeamMonthPv());
if (ComputeUtil.compareGreaterThan(consumePv, consumeBigPv)) {
// 月累计业绩 > 大区业绩则月累计就成为大区了
consumeBigPv = consumePv;
}
}
// 小区业绩 = 本人月消费业绩 + 团队月消费业绩 - 大区业绩
BigDecimal smallAreaPv = ComputeUtil.computeAdd(targetMemberRangeExt.getMonthConsumePv(), ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamMonthPv(), consumeBigPv));
if (ComputeUtil.compareValue(smallAreaPv, bdAwards.getShareCommunityCheck())) {
// 小区业绩 >= 小区考核业绩
if (bdAwards.getPlaceDeptNum() > 0) {
// 验证是否有多个区满足业绩
if (null == cuMemberRetailRangeExtList) {
// 非秒结需要查询日结相关数据秒结表使用上面查出的数据就可以
if (null != secondRangeTableName) {
// 会员表 关联 秒结表 昨日结算表查询订单会员直推数据
cuMemberRetailRangeExtList = cuMemberRangeExtList;
} else {
// 昨日结算表查询订单会员直推数据
cuMemberRetailRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeEnoughAchieve(rangeTableName, targetMemberRangeExt.getPkMember(), bdAwards.getShareCommunityCheck());
}
}
int enoughNum = 0;
if (ComputeUtil.compareValue(targetMemberRangeExt.getMonthConsumePv(), bdAwards.getShareCommunityCheck())) {
enoughNum += 1;
}
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRetailRangeExtList) {
if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember());
}
if (ComputeUtil.compareValue(ComputeUtil.computeAdd(cuMemberRetailRangeExt.getMonthConsumePv(), cuMemberRetailRangeExt.getAllTeamMonthPv()), bdAwards.getShareCommunityCheck())) {
// 本人月消费业绩 + 团队月消费业绩 >= 小区考核业绩则满足条件小部门 +1
enoughNum += 1;
}
}
if (bdAwards.getPlaceDeptNum() > enoughNum) {
break;
}
}
cuMemberAwardsList.add(getCuMemberRetailAwards(targetMemberRangeExt, period, saOrderExt, bdAwards, EAwardsType.SHARE_TYPE.getValue(), targetMemberRangeExt.getPkShareAwards()));
targetMemberRangeExt.setShareAwardsValue(bdAwards.getAwardsValue());
targetMemberRangeExt.setPkShareAwards(bdAwards.getPkId());
continue;
}
}
}
break;
}
// // 校验大小区会员数据
// List<CuMemberRetailRangeExt> cuMemberRangeExtList = null;
// // 校验累计小部门会员数据
// List<CuMemberRetailRangeExt> cuMemberRetailRangeExtList = null;
// // 计算分红奖衔
// while (true) {
// // 当月奖衔值 + 5获取下一个奖衔值
// int awardsValue = targetMemberRangeExt.getShareAwardsValue() + 5;
// if (retailAwardsMap.containsKey(awardsValue)) {
// BdAwards bdAwards = retailAwardsMap.get(awardsValue);
// // 先验证累计业绩
// if (ComputeUtil.compareValue(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamMonthPv(), targetMemberRangeExt.getMonthConsumePv()), bdAwards.getShareTotalCheck())) {
// // 再验证小区计算小区业绩拉取直推会员数据
// if (null == cuMemberRangeExtList) {
// if (null != secondRangeTableName) {
// // 会员表 关联 秒结表 昨日结算表查询订单会员直推数据
// cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberSecondRangeExtByParent(rangeTableName, secondRangeTableName, targetMemberRangeExt.getPkMember());
// } else {
// // 昨日结算表查询订单会员直推数据
// cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeExtByParent(rangeTableName, targetMemberRangeExt.getPkMember());
// }
// }
// // 本人月消费业绩默认为大区
// BigDecimal consumeBigPv = targetMemberRangeExt.getMonthConsumePv();
// for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRangeExtList) {
// if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
// cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember());
// }
// // 月累计业绩 = 本人月消费业绩 + 团队月消费业绩
// BigDecimal consumePv = ComputeUtil.computeAdd(cuMemberRetailRangeExt.getMonthConsumePv(), cuMemberRetailRangeExt.getAllTeamMonthPv());
// if (ComputeUtil.compareGreaterThan(consumePv, consumeBigPv)) {
// // 月累计业绩 > 大区业绩则月累计就成为大区了
// consumeBigPv = consumePv;
// }
// }
//
// // 小区业绩 = 本人月消费业绩 + 团队月消费业绩 - 大区业绩
// BigDecimal smallAreaPv = ComputeUtil.computeAdd(targetMemberRangeExt.getMonthConsumePv(), ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamMonthPv(), consumeBigPv));
// if (ComputeUtil.compareValue(smallAreaPv, bdAwards.getShareCommunityCheck())) {
// // 小区业绩 >= 小区考核业绩
// if (bdAwards.getPlaceDeptNum() > 0) {
// // 验证是否有多个区满足业绩
// if (null == cuMemberRetailRangeExtList) {
// // 非秒结需要查询日结相关数据秒结表使用上面查出的数据就可以
// if (null != secondRangeTableName) {
// // 会员表 关联 秒结表 昨日结算表查询订单会员直推数据
// cuMemberRetailRangeExtList = cuMemberRangeExtList;
// } else {
// // 昨日结算表查询订单会员直推数据
// cuMemberRetailRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeEnoughAchieve(rangeTableName, targetMemberRangeExt.getPkMember(), bdAwards.getShareCommunityCheck());
// }
// }
//
// int enoughNum = 0;
// if (ComputeUtil.compareValue(targetMemberRangeExt.getMonthConsumePv(), bdAwards.getShareCommunityCheck())) {
// enoughNum += 1;
// }
// for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRetailRangeExtList) {
// if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
// cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember());
// }
// if (ComputeUtil.compareValue(ComputeUtil.computeAdd(cuMemberRetailRangeExt.getMonthConsumePv(), cuMemberRetailRangeExt.getAllTeamMonthPv()), bdAwards.getShareCommunityCheck())) {
// // 本人月消费业绩 + 团队月消费业绩 >= 小区考核业绩则满足条件小部门 +1
// enoughNum += 1;
// }
// }
// if (bdAwards.getPlaceDeptNum() > enoughNum) {
// break;
// }
// }
// cuMemberAwardsList.add(getCuMemberRetailAwards(targetMemberRangeExt, period, saOrderExt, bdAwards, EAwardsType.SHARE_TYPE.getValue(), targetMemberRangeExt.getPkShareAwards()));
// targetMemberRangeExt.setShareAwardsValue(bdAwards.getAwardsValue());
// targetMemberRangeExt.setPkShareAwards(bdAwards.getPkId());
// continue;
// }
// }
// }
// break;
// }
}
/**
@ -579,79 +588,79 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
break;
}
// 计算分红奖衔
while (true) {
// 当月奖衔值 + 5获取下一个奖衔值
int awardsValue = targetMemberRangeExt.getShareAwardsValue() + 5;
if (retailAwardsMap.containsKey(awardsValue)) {
BdAwards bdAwards = retailAwardsMap.get(awardsValue);
// 先验证累计业绩
if (ComputeUtil.compareValue(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamMonthPv(), targetMemberRangeExt.getMonthConsumePv()), bdAwards.getShareTotalCheck())) {
// 验证小区计算小区业绩拉取直推会员数据
List<CuMemberRetailRangeExt> cuMemberRangeExtList;
if (secondRangeTableName != null) {
// 会员表 关联 秒结表 昨日结算表查询订单会员直推数据
cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberSecondRangeExtByParent(rangeTableName, secondRangeTableName, targetMemberRangeExt.getPkMember());
} else {
// 昨日结算表查询订单会员直推数据
cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeExtByParent(rangeTableName, targetMemberRangeExt.getPkMember());
}
// 本人月消费业绩默认为大区
BigDecimal consumeBigPv = targetMemberRangeExt.getMonthConsumePv();
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRangeExtList) {
if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember());
}
// 月累计业绩 = 本人月消费业绩 + 团队月消费业绩
BigDecimal consumePv = ComputeUtil.computeAdd(cuMemberRetailRangeExt.getMonthConsumePv(), cuMemberRetailRangeExt.getAllTeamMonthPv());
if (ComputeUtil.compareGreaterThan(consumePv, consumeBigPv)) {
// 月累计业绩 > 大区业绩则月累计就成为大区了
consumeBigPv = consumePv;
}
}
// 小区业绩 = 本人月消费业绩 + 团队月消费业绩 - 大区业绩
BigDecimal smallAreaPv = ComputeUtil.computeAdd(targetMemberRangeExt.getMonthConsumePv(), ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamMonthPv(), consumeBigPv));
if (ComputeUtil.compareValue(smallAreaPv, bdAwards.getShareCommunityCheck())) {
// 小区业绩 >= 小区考核业绩
if (bdAwards.getPlaceDeptNum() > 0) {
// 验证是否有多个区满足业绩
List<CuMemberRetailRangeExt> cuMemberRetailRangeExtList;
if (secondRangeTableName != null) {
// 会员表 关联 秒结表 昨日结算表查询订单会员直推数据
cuMemberRetailRangeExtList = iCuMemberRetailRangeService.queryCuMemberSecondRangeExtByParent(rangeTableName, secondRangeTableName, targetMemberRangeExt.getPkMember());
} else {
// 昨日结算表查询订单会员直推数据
cuMemberRetailRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeEnoughAchieve(rangeTableName, targetMemberRangeExt.getPkMember(), bdAwards.getShareCommunityCheck());
}
int enoughNum = 0;
if (ComputeUtil.compareValue(targetMemberRangeExt.getMonthConsumePv(), bdAwards.getShareCommunityCheck())) {
enoughNum += 1;
}
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRetailRangeExtList) {
if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember());
}
if (ComputeUtil.compareValue(ComputeUtil.computeAdd(cuMemberRetailRangeExt.getMonthConsumePv(), cuMemberRetailRangeExt.getAllTeamMonthPv()), bdAwards.getShareCommunityCheck())) {
// 本人月消费业绩 + 团队月消费业绩 >= 小区考核业绩则满足条件小部门 +1
enoughNum += 1;
}
}
if (bdAwards.getPlaceDeptNum() > enoughNum) {
break;
}
}
CuMemberAwards cuMemberRetailAwards = getCuMemberRetailAwards(targetMemberRangeExt, period, saOrderExt, bdAwards, EAwardsType.SHARE_TYPE.getValue(), targetMemberRangeExt.getPkShareAwards());
cuMemberShareAwardsMap.put(cuMemberRetailAwards.getPkMember() + "_" + cuMemberRetailAwards.getNewLevel(), cuMemberRetailAwards);
targetMemberRangeExt.setShareAwardsValue(bdAwards.getAwardsValue());
targetMemberRangeExt.setPkShareAwards(bdAwards.getPkId());
continue;
}
}
}
break;
}
// // 计算分红奖衔
// while (true) {
// // 当月奖衔值 + 5获取下一个奖衔值
// int awardsValue = targetMemberRangeExt.getShareAwardsValue() + 5;
// if (retailAwardsMap.containsKey(awardsValue)) {
// BdAwards bdAwards = retailAwardsMap.get(awardsValue);
// // 先验证累计业绩
// if (ComputeUtil.compareValue(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamMonthPv(), targetMemberRangeExt.getMonthConsumePv()), bdAwards.getShareTotalCheck())) {
// // 验证小区计算小区业绩拉取直推会员数据
// List<CuMemberRetailRangeExt> cuMemberRangeExtList;
// if (secondRangeTableName != null) {
// // 会员表 关联 秒结表 昨日结算表查询订单会员直推数据
// cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberSecondRangeExtByParent(rangeTableName, secondRangeTableName, targetMemberRangeExt.getPkMember());
// } else {
// // 昨日结算表查询订单会员直推数据
// cuMemberRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeExtByParent(rangeTableName, targetMemberRangeExt.getPkMember());
// }
// // 本人月消费业绩默认为大区
// BigDecimal consumeBigPv = targetMemberRangeExt.getMonthConsumePv();
// for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRangeExtList) {
// if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
// cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember());
// }
// // 月累计业绩 = 本人月消费业绩 + 团队月消费业绩
// BigDecimal consumePv = ComputeUtil.computeAdd(cuMemberRetailRangeExt.getMonthConsumePv(), cuMemberRetailRangeExt.getAllTeamMonthPv());
// if (ComputeUtil.compareGreaterThan(consumePv, consumeBigPv)) {
// // 月累计业绩 > 大区业绩则月累计就成为大区了
// consumeBigPv = consumePv;
// }
// }
//
// // 小区业绩 = 本人月消费业绩 + 团队月消费业绩 - 大区业绩
// BigDecimal smallAreaPv = ComputeUtil.computeAdd(targetMemberRangeExt.getMonthConsumePv(), ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamMonthPv(), consumeBigPv));
// if (ComputeUtil.compareValue(smallAreaPv, bdAwards.getShareCommunityCheck())) {
// // 小区业绩 >= 小区考核业绩
// if (bdAwards.getPlaceDeptNum() > 0) {
// // 验证是否有多个区满足业绩
// List<CuMemberRetailRangeExt> cuMemberRetailRangeExtList;
// if (secondRangeTableName != null) {
// // 会员表 关联 秒结表 昨日结算表查询订单会员直推数据
// cuMemberRetailRangeExtList = iCuMemberRetailRangeService.queryCuMemberSecondRangeExtByParent(rangeTableName, secondRangeTableName, targetMemberRangeExt.getPkMember());
// } else {
// // 昨日结算表查询订单会员直推数据
// cuMemberRetailRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeEnoughAchieve(rangeTableName, targetMemberRangeExt.getPkMember(), bdAwards.getShareCommunityCheck());
// }
//
// int enoughNum = 0;
// if (ComputeUtil.compareValue(targetMemberRangeExt.getMonthConsumePv(), bdAwards.getShareCommunityCheck())) {
// enoughNum += 1;
// }
// for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRetailRangeExtList) {
// if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
// cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember());
// }
// if (ComputeUtil.compareValue(ComputeUtil.computeAdd(cuMemberRetailRangeExt.getMonthConsumePv(), cuMemberRetailRangeExt.getAllTeamMonthPv()), bdAwards.getShareCommunityCheck())) {
// // 本人月消费业绩 + 团队月消费业绩 >= 小区考核业绩则满足条件小部门 +1
// enoughNum += 1;
// }
// }
// if (bdAwards.getPlaceDeptNum() > enoughNum) {
// break;
// }
// }
// CuMemberAwards cuMemberRetailAwards = getCuMemberRetailAwards(targetMemberRangeExt, period, saOrderExt, bdAwards, EAwardsType.SHARE_TYPE.getValue(), targetMemberRangeExt.getPkShareAwards());
// cuMemberShareAwardsMap.put(cuMemberRetailAwards.getPkMember() + "_" + cuMemberRetailAwards.getNewLevel(), cuMemberRetailAwards);
// targetMemberRangeExt.setShareAwardsValue(bdAwards.getAwardsValue());
// targetMemberRangeExt.setPkShareAwards(bdAwards.getPkId());
// continue;
// }
// }
// }
// break;
// }
}
@ -919,8 +928,8 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
/**
* 计算阶段收益 -- 精品专区
*/
private void calculateStageIncome(List<CuMemberBonusPush> cuMemberBonusPushList, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, SaOrderExt saOrderExt,
Date settleDate) {
private void calculateStageIncome(List<CuMemberBonusStage> cuMemberBonusStageList, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, SaOrderExt saOrderExt,
Date settleDate, String rangeTableName, String rangeDetailTableName) {
// 订单金额除50取整为新増点位数量
int newPointInt = saOrderExt.getOrderAmount().divide(RetailConstants.POINT_VAL, 0, RoundingMode.DOWN).intValue();
if (newPointInt == 0) {
@ -931,26 +940,26 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 订单会员
CuMemberRetailRangeExt sourceMember = memberRangeExtMap.get(saOrderExt.getPkMember());
// 会员一阶段子点位列表
List<CuMemberRetailDetail> detailList = sourceMember.getOneDetailList();
LinkedHashMap<Integer, CuMemberRetailDetail> detailList = sourceMember.getOneDetailMap();
if (null == detailList) {
detailList = new ArrayList<>();
sourceMember.setOneDetailList(detailList);
detailList = new LinkedHashMap<>();
sourceMember.setOneDetailMap(detailList);
}
// 当前会员子点位总数
int pointCount = sourceMember.getPointCount();
for (int i = 1; i <= newPointInt; i++) {
// 订单生成的新点位
CuMemberRetailDetail tmpDetail = CuMemberRetailDetail.builder()
// 订单会员生成的新点位
CuMemberRetailDetail newRetailDetail = CuMemberRetailDetail.builder()
.pkMember(sourceMember.getPkMember())
.childNode(pointCount + i)
.pkParent(sourceMember.getPkParent())
.stage(EBonusStage.ONE.getValue())
.stage(EBonusStageStatus.NO.getValue())
.stageStatus(EBonusStageStatus.NO.getValue())
.pointType(EBonusStageType.NORMAL.getValue())
.pointGift(0)
.creationTime(settleDate)
.build();
detailList.add(tmpDetail);
detailList.put(newRetailDetail.getChildNode(), newRetailDetail);
// 推荐人
Long pkParent = sourceMember.getPkParent();
@ -960,87 +969,57 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 没有推荐人了则直接结束
break;
}
pkParent = targetMember.getPkParent();
// 推荐人一阶段子点位列表
List<CuMemberRetailDetail> parentDetailList = targetMember.getOneDetailList();
LinkedHashMap<Integer, CuMemberRetailDetail> parentDetailList = targetMember.getOneDetailMap();
if (CollectionUtil.isEmpty(parentDetailList)) {
// 推荐人没有未完成点位继续往上找
continue;
}
for (CuMemberRetailDetail cuMemberRetailDetail : parentDetailList) {
if (EBonusStageStatus.NO.getValue() == cuMemberRetailDetail.getStageStatus()) {
// 推荐人子点位未完成则进行填充
String firstNode = this.fillChildNode(cuMemberRetailDetail, tmpDetail.getPkMember(), tmpDetail.getChildNode());
switch (firstNode) {
parentDetailList.forEach((key, parentRetailDetail) -> {
// 遍历推荐人点位使用第一个未完成的点位进行填充
if (EBonusStageStatus.NO.getValue() == parentRetailDetail.getStageStatus()) {
String newNode = iCuMemberBonusStageService.fillChildNode(parentRetailDetail, newRetailDetail);
if (null == newNode) {
return;
}
switch (newNode) {
case BonusConstants.POINT_11:
break;
case BonusConstants.POINT_12:
// 新点位是推荐人点位的第一层
iCuMemberBonusStageService.handlePointFirst(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, newNode);
break;
case BonusConstants.POINT_21:
break;
case BonusConstants.POINT_22:
break;
case BonusConstants.POINT_23:
break;
case BonusConstants.POINT_24:
break;
case BonusConstants.POINT_31:
break;
case BonusConstants.POINT_32:
break;
case BonusConstants.POINT_33:
break;
case BonusConstants.POINT_34:
break;
case BonusConstants.POINT_35:
break;
case BonusConstants.POINT_36:
break;
case BonusConstants.POINT_37:
// 新点位是推荐人点位的第二层
iCuMemberBonusStageService.handlePointSecond(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, newNode);
break;
case BonusConstants.POINT_38:
// 第一个点位已经全部填满
cuMemberRetailDetail.setStageStatus(EBonusStageStatus.YES.getValue());
cuMemberRetailDetail.setStageDate(settleDate);
// 第一个点位已经全部填满更新完成状态和时间
parentRetailDetail.setStageStatus(EBonusStageStatus.YES.getValue());
parentRetailDetail.setStageDate(settleDate);
// TODO 一阶段全满则需要发放一阶段奖金
// TODO 需要记录填满子点位用来处理生成二阶段以及生成赠点
}
case BonusConstants.POINT_31:
case BonusConstants.POINT_32:
case BonusConstants.POINT_33:
case BonusConstants.POINT_34:
case BonusConstants.POINT_35:
case BonusConstants.POINT_36:
case BonusConstants.POINT_37:
// 新点位是推荐人点位的第三层
iCuMemberBonusStageService.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail,
rangeTableName, rangeDetailTableName, newNode);
}
}
});
}
}
}
/**
* 填充子点位
*/
private String fillChildNode(CuMemberRetailDetail cuMemberRetailDetail, Long pointValue, Integer pointMemberValue) {
if (ObjectUtil.isEmpty(BonusConstants.FIELD_MAP)) {
initFieldMap();
}
for (String suffix : BonusConstants.FIELD_LIST) {
Field pointField = BonusConstants.FIELD_MAP.get(BonusConstants.POINT_FIELD_NAME + suffix);
Field pointMemberField = BonusConstants.FIELD_MAP.get(BonusConstants.POINT_MEMBER_FIELD_NAME + suffix);
Object pointFieldValue = ReflectUtil.getFieldValue(cuMemberRetailDetail, pointField);
if (ObjectUtil.isEmpty(pointFieldValue)) {
ReflectUtil.setFieldValue(cuMemberRetailDetail, pointField, pointValue);
ReflectUtil.setFieldValue(cuMemberRetailDetail, pointMemberField, pointMemberValue);
return suffix;
}
}
return null;
}
private void initFieldMap() {
BonusConstants.FIELD_MAP = new HashMap<>();
for (String suffix : BonusConstants.FIELD_LIST) {
BonusConstants.FIELD_MAP.put(BonusConstants.POINT_FIELD_NAME + suffix, ReflectUtil.getField(CuMemberRetailDetail.class, BonusConstants.POINT_FIELD_NAME + suffix));
BonusConstants.FIELD_MAP.put(BonusConstants.POINT_MEMBER_FIELD_NAME + suffix, ReflectUtil.getField(CuMemberRetailDetail.class, BonusConstants.POINT_MEMBER_FIELD_NAME + suffix));
}
}
}

View File

@ -0,0 +1,415 @@
package com.hzs.bonus.bonus.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReflectUtil;
import com.hzs.bonus.achieve.mapper.CuMemberRetailRangeMapper;
import com.hzs.bonus.achieve.service.ICuMemberRetailDetailService;
import com.hzs.bonus.bonus.mapper.CuMemberBonusStageMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.bonus.bonus.service.ICuMemberBonusStageService;
import com.hzs.bonus.constant.BonusConstants;
import com.hzs.common.core.enums.EBonusStage;
import com.hzs.common.domain.member.achieve.CuMemberRetailDetail;
import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt;
import com.hzs.common.domain.member.bonus.CuMemberBonusStage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 会员奖金-阶段收益明细表 服务实现类
*/
@Service
public class CuMemberBonusStageServiceImpl extends ServiceImpl<CuMemberBonusStageMapper, CuMemberBonusStage> implements ICuMemberBonusStageService {
@Autowired
private ICuMemberRetailDetailService iCuMemberRetailDetailService;
@Resource
private CuMemberRetailRangeMapper cuMemberRetailRangeMapper;
private void initFieldMap() {
BonusConstants.FIELD_MAP = new HashMap<>();
for (String suffix : BonusConstants.FIELD_LIST) {
BonusConstants.FIELD_MAP.put(BonusConstants.POINT_MEMBER_FIELD_NAME + suffix, ReflectUtil.getField(CuMemberRetailDetail.class, BonusConstants.POINT_MEMBER_FIELD_NAME + suffix));
BonusConstants.FIELD_MAP.put(BonusConstants.POINT_FIELD_NAME + suffix, ReflectUtil.getField(CuMemberRetailDetail.class, BonusConstants.POINT_FIELD_NAME + suffix));
}
}
@Override
public String fillChildNode(CuMemberRetailDetail cuMemberRetailDetail, CuMemberRetailDetail newRetailDetail) {
if (ObjectUtil.isEmpty(BonusConstants.FIELD_MAP)) {
initFieldMap();
}
for (String suffix : BonusConstants.FIELD_LIST) {
Field pointMemberField = BonusConstants.FIELD_MAP.get(BonusConstants.POINT_MEMBER_FIELD_NAME + suffix);
Field pointField = BonusConstants.FIELD_MAP.get(BonusConstants.POINT_FIELD_NAME + suffix);
Object pointFieldValue = ReflectUtil.getFieldValue(cuMemberRetailDetail, pointField);
if (ObjectUtil.isEmpty(pointFieldValue)) {
ReflectUtil.setFieldValue(cuMemberRetailDetail, pointMemberField, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(cuMemberRetailDetail, pointField, newRetailDetail.getChildNode());
return suffix;
}
}
return null;
}
/**
* 向上填充子点位
*/
public void fillUpTargetRetailDetail(CuMemberRetailDetail targetRetailDetail, CuMemberRetailDetail newParentRetailDetail,
CuMemberRetailDetail newRetailDetail, String node) {
if (null == targetRetailDetail) {
return;
}
for (String suffix : BonusConstants.FIELD_LIST) {
Field pointMemberField = BonusConstants.FIELD_MAP.get(BonusConstants.POINT_MEMBER_FIELD_NAME + suffix);
Field pointField = BonusConstants.FIELD_MAP.get(BonusConstants.POINT_FIELD_NAME + suffix);
if (ReflectUtil.getFieldValue(targetRetailDetail, pointMemberField).equals(newParentRetailDetail.getPkMember())
&& ReflectUtil.getFieldValue(targetRetailDetail, pointField).equals(newParentRetailDetail.getChildNode())) {
// 中间点位在目标点位的位置根据位置获取新点位填充的位置
switch (suffix) {
case BonusConstants.POINT_11:
if (BonusConstants.POINT_11.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_21, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_21, newRetailDetail.getChildNode());
} else if (BonusConstants.POINT_12.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_22, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_22, newRetailDetail.getChildNode());
} else if (BonusConstants.POINT_21.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_31, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_31, newRetailDetail.getChildNode());
} else if (BonusConstants.POINT_22.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_32, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_32, newRetailDetail.getChildNode());
} else if (BonusConstants.POINT_23.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_33, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_33, newRetailDetail.getChildNode());
} else if (BonusConstants.POINT_24.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_34, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_34, newRetailDetail.getChildNode());
}
break;
case BonusConstants.POINT_12:
if (BonusConstants.POINT_11.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_23, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_23, newRetailDetail.getChildNode());
} else if (BonusConstants.POINT_12.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_24, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_24, newRetailDetail.getChildNode());
} else if (BonusConstants.POINT_21.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_35, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_35, newRetailDetail.getChildNode());
} else if (BonusConstants.POINT_22.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_36, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_36, newRetailDetail.getChildNode());
} else if (BonusConstants.POINT_23.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_37, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_37, newRetailDetail.getChildNode());
} else if (BonusConstants.POINT_24.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_38, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_38, newRetailDetail.getChildNode());
}
break;
case BonusConstants.POINT_21:
if (BonusConstants.POINT_11.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_31, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_31, newRetailDetail.getChildNode());
} else if (BonusConstants.POINT_12.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_32, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_32, newRetailDetail.getChildNode());
}
break;
case BonusConstants.POINT_22:
if (BonusConstants.POINT_11.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_33, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_33, newRetailDetail.getChildNode());
} else if (BonusConstants.POINT_12.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_34, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_34, newRetailDetail.getChildNode());
}
break;
case BonusConstants.POINT_23:
if (BonusConstants.POINT_11.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_35, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_35, newRetailDetail.getChildNode());
} else if (BonusConstants.POINT_12.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_36, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_36, newRetailDetail.getChildNode());
}
break;
case BonusConstants.POINT_24:
if (BonusConstants.POINT_11.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_37, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_37, newRetailDetail.getChildNode());
} else if (BonusConstants.POINT_12.equals(node)) {
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + BonusConstants.POINT_38, newRetailDetail.getPkMember());
ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + BonusConstants.POINT_38, newRetailDetail.getChildNode());
}
break;
}
break;
}
}
}
/**
* 向下填充子点位
*/
public void fillDownTargetRetailDetail(CuMemberRetailDetail targetRetailDetail, CuMemberRetailDetail newRetailDetail,
String node, Integer level) {
if (null == targetRetailDetail) {
return;
}
if (level.equals(1)) {
if (BonusConstants.POINT_21.equals(node)
|| BonusConstants.POINT_23.equals(node)
|| BonusConstants.POINT_31.equals(node)
|| BonusConstants.POINT_33.equals(node)
|| BonusConstants.POINT_35.equals(node)
|| BonusConstants.POINT_37.equals(node)) {
targetRetailDetail.setPointMember11(newRetailDetail.getPkMember());
targetRetailDetail.setPoint11(newRetailDetail.getChildNode());
} else if (BonusConstants.POINT_22.equals(node)
|| BonusConstants.POINT_24.equals(node)
|| BonusConstants.POINT_32.equals(node)
|| BonusConstants.POINT_34.equals(node)
|| BonusConstants.POINT_36.equals(node)
|| BonusConstants.POINT_38.equals(node)) {
targetRetailDetail.setPointMember12(newRetailDetail.getPkMember());
targetRetailDetail.setPoint12(newRetailDetail.getChildNode());
}
} else if (level.equals(2)) {
if (BonusConstants.POINT_31.equals(node)
|| BonusConstants.POINT_35.equals(node)) {
targetRetailDetail.setPointMember21(newRetailDetail.getPkMember());
targetRetailDetail.setPoint21(newRetailDetail.getChildNode());
} else if (BonusConstants.POINT_32.equals(node)
|| BonusConstants.POINT_36.equals(node)) {
targetRetailDetail.setPointMember22(newRetailDetail.getPkMember());
targetRetailDetail.setPoint22(newRetailDetail.getChildNode());
} else if (BonusConstants.POINT_33.equals(node)
|| BonusConstants.POINT_37.equals(node)) {
targetRetailDetail.setPointMember23(newRetailDetail.getPkMember());
targetRetailDetail.setPoint23(newRetailDetail.getChildNode());
} else if (BonusConstants.POINT_34.equals(node)
|| BonusConstants.POINT_38.equals(node)) {
targetRetailDetail.setPointMember24(newRetailDetail.getPkMember());
targetRetailDetail.setPoint24(newRetailDetail.getChildNode());
}
}
}
@Override
public void handlePointFirst(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail,
String rangeTableName, String rangeDetailTableName, String newNode) {
// 新点位的上第一层
newRetailDetail.setPointMemberFirst(newParentRetailDetail.getPkMember());
newRetailDetail.setPointFirst(newParentRetailDetail.getChildNode());
List<Long> queryMemberList = new ArrayList<>(2);
// 获取上第二三层结算数据
CuMemberRetailRangeExt memberFirst = memberRangeExtMap.get(newParentRetailDetail.getPointMemberFirst());
if (null == memberFirst && null != newParentRetailDetail.getPointMemberFirst()) {
queryMemberList.add(newParentRetailDetail.getPointMemberFirst());
}
CuMemberRetailRangeExt memberSecond = memberRangeExtMap.get(newParentRetailDetail.getPointMemberSecond());
if (null == memberSecond && null != newParentRetailDetail.getPointMemberSecond()) {
queryMemberList.add(newParentRetailDetail.getPointMemberSecond());
}
if (CollectionUtil.isNotEmpty(queryMemberList)) {
// 查询会员数据
List<CuMemberRetailRangeExt> retailList = cuMemberRetailRangeMapper.listCuMemberRetailRange(rangeTableName, queryMemberList);
if (CollectionUtil.isNotEmpty(retailList)) {
retailList.forEach(tmpRetail -> {
memberRangeExtMap.put(tmpRetail.getPkMember(), tmpRetail);
});
// 查询血缘会员明细数据一阶段
iCuMemberRetailDetailService.listMemberRetailDetail(rangeDetailTableName, memberRangeExtMap, queryMemberList, EBonusStage.ONE);
}
}
// 新点位的上第二层
newRetailDetail.setPointMemberSecond(newParentRetailDetail.getPointMemberFirst());
newRetailDetail.setPointSecond(newParentRetailDetail.getPointFirst());
CuMemberRetailRangeExt firstMemberRetail = memberRangeExtMap.get(newParentRetailDetail.getPointMemberFirst());
if (null != firstMemberRetail) {
CuMemberRetailDetail memberDetail = firstMemberRetail.getOneDetailMap().get(newParentRetailDetail.getPointFirst());
this.fillUpTargetRetailDetail(memberDetail, newParentRetailDetail, newRetailDetail, newNode);
}
// 新点位的上第三层
newRetailDetail.setPointMemberThird(newParentRetailDetail.getPointMemberSecond());
newRetailDetail.setPointThird(newParentRetailDetail.getPointSecond());
CuMemberRetailRangeExt secondMemberRetail = memberRangeExtMap.get(newParentRetailDetail.getPointMemberSecond());
if (null != secondMemberRetail) {
CuMemberRetailDetail memberDetail = secondMemberRetail.getOneDetailMap().get(newParentRetailDetail.getPointSecond());
this.fillUpTargetRetailDetail(memberDetail, newParentRetailDetail, newRetailDetail, newNode);
}
}
@Override
public void handlePointSecond(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail,
String rangeTableName, String rangeDetailTableName, String newNode) {
// 新点位的上第二层
newRetailDetail.setPointMemberSecond(newParentRetailDetail.getPkMember());
newRetailDetail.setPointSecond(newParentRetailDetail.getChildNode());
List<Long> queryMemberList = new ArrayList<>(2);
// 获取上第三层结算数据
CuMemberRetailRangeExt memberUpFirst = memberRangeExtMap.get(newParentRetailDetail.getPointMemberFirst());
if (null == memberUpFirst) {
queryMemberList.add(newParentRetailDetail.getPointMemberFirst());
}
// 获取上第一层结算数据
Long downFirstMember = null;
Integer downFirstPoint = null;
switch (newNode) {
case BonusConstants.POINT_21:
case BonusConstants.POINT_22:
downFirstMember = newParentRetailDetail.getPointMember11();
downFirstPoint = newParentRetailDetail.getPoint11();
break;
case BonusConstants.POINT_23:
case BonusConstants.POINT_24:
downFirstMember = newParentRetailDetail.getPointMember12();
downFirstPoint = newParentRetailDetail.getPoint12();
break;
}
CuMemberRetailRangeExt memberDownFirst = memberRangeExtMap.get(downFirstMember);
if (null == memberDownFirst) {
queryMemberList.add(downFirstMember);
}
if (CollectionUtil.isNotEmpty(queryMemberList)) {
// 查询会员数据
List<CuMemberRetailRangeExt> retailList = cuMemberRetailRangeMapper.listCuMemberRetailRange(rangeTableName, queryMemberList);
if (CollectionUtil.isNotEmpty(retailList)) {
retailList.forEach(tmpRetail -> {
memberRangeExtMap.put(tmpRetail.getPkMember(), tmpRetail);
});
// 查询血缘会员明细数据一阶段
iCuMemberRetailDetailService.listMemberRetailDetail(rangeDetailTableName, memberRangeExtMap, queryMemberList, EBonusStage.ONE);
}
}
// 新点位的上第三层
newRetailDetail.setPointMemberThird(newParentRetailDetail.getPointMemberFirst());
newRetailDetail.setPointThird(newParentRetailDetail.getPointFirst());
CuMemberRetailRangeExt thirdMemberRetail = memberRangeExtMap.get(newParentRetailDetail.getPointMemberFirst());
if (null != thirdMemberRetail) {
CuMemberRetailDetail memberDetail = thirdMemberRetail.getOneDetailMap().get(newParentRetailDetail.getPointFirst());
this.fillUpTargetRetailDetail(memberDetail, newParentRetailDetail, newRetailDetail, newNode);
}
// 新点位的上第一层
CuMemberRetailRangeExt firstMemberRetail = memberRangeExtMap.get(downFirstMember);
if (null != firstMemberRetail) {
CuMemberRetailDetail memberDetail = firstMemberRetail.getOneDetailMap().get(downFirstPoint);
if (null != memberDetail) {
newRetailDetail.setPointMemberFirst(memberDetail.getPkMember());
newRetailDetail.setPointFirst(memberDetail.getChildNode());
this.fillDownTargetRetailDetail(memberDetail, newRetailDetail, newNode, 1);
}
}
}
@Override
public void handlePointThird(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail,
String rangeTableName, String rangeDetailTableName, String newNode) {
// 新点位的上第三层
newRetailDetail.setPointMemberThird(newParentRetailDetail.getPkMember());
newRetailDetail.setPointThird(newParentRetailDetail.getChildNode());
List<Long> queryMemberList = new ArrayList<>(2);
// 获取上第二层结算数据
Long downSecondMember = null;
Integer downSecondPoint = null;
// 获取上第一层结算数据
Long downFirstMember = null;
Integer downFirstPoint = null;
switch (newNode) {
case BonusConstants.POINT_31:
case BonusConstants.POINT_32:
case BonusConstants.POINT_33:
case BonusConstants.POINT_34:
downSecondMember = newParentRetailDetail.getPointMember11();
downSecondPoint = newParentRetailDetail.getPoint11();
if (BonusConstants.POINT_31.equals(newNode)
|| BonusConstants.POINT_32.equals(newNode)) {
downFirstMember = newParentRetailDetail.getPointMember21();
downFirstPoint = newParentRetailDetail.getPoint21();
} else {
downFirstMember = newParentRetailDetail.getPointMember22();
downFirstPoint = newParentRetailDetail.getPoint22();
}
break;
case BonusConstants.POINT_35:
case BonusConstants.POINT_36:
case BonusConstants.POINT_37:
case BonusConstants.POINT_38:
downSecondMember = newParentRetailDetail.getPointMember12();
downSecondPoint = newParentRetailDetail.getPoint12();
if (BonusConstants.POINT_35.equals(newNode)
|| BonusConstants.POINT_36.equals(newNode)) {
downFirstMember = newParentRetailDetail.getPointMember23();
downFirstPoint = newParentRetailDetail.getPoint23();
} else {
downFirstMember = newParentRetailDetail.getPointMember24();
downFirstPoint = newParentRetailDetail.getPoint24();
}
break;
}
CuMemberRetailRangeExt memberDownSecond = memberRangeExtMap.get(downSecondMember);
if (null == memberDownSecond) {
queryMemberList.add(downSecondMember);
}
CuMemberRetailRangeExt memberDownFirst = memberRangeExtMap.get(downFirstMember);
if (null == memberDownFirst) {
queryMemberList.add(downFirstMember);
}
if (CollectionUtil.isNotEmpty(queryMemberList)) {
// 查询会员数据
List<CuMemberRetailRangeExt> retailList = cuMemberRetailRangeMapper.listCuMemberRetailRange(rangeTableName, queryMemberList);
if (CollectionUtil.isNotEmpty(retailList)) {
retailList.forEach(tmpRetail -> {
memberRangeExtMap.put(tmpRetail.getPkMember(), tmpRetail);
});
// 查询血缘会员明细数据一阶段
iCuMemberRetailDetailService.listMemberRetailDetail(rangeDetailTableName, memberRangeExtMap, queryMemberList, EBonusStage.ONE);
}
}
// 新点位的上第二层
CuMemberRetailRangeExt secondMemberRetail = memberRangeExtMap.get(downSecondMember);
if (null != secondMemberRetail) {
CuMemberRetailDetail memberDetail = secondMemberRetail.getOneDetailMap().get(downSecondPoint);
if (null != memberDetail) {
newRetailDetail.setPointMemberSecond(newParentRetailDetail.getPkMember());
newRetailDetail.setPointSecond(newParentRetailDetail.getChildNode());
this.fillDownTargetRetailDetail(memberDetail, newRetailDetail, newNode, 2);
}
}
// 新点位的上第一层
CuMemberRetailRangeExt firstMemberRetail = memberRangeExtMap.get(downFirstMember);
if (null != firstMemberRetail) {
CuMemberRetailDetail memberDetail = firstMemberRetail.getOneDetailMap().get(downFirstPoint);
if (null != memberDetail) {
newRetailDetail.setPointMemberFirst(newParentRetailDetail.getPkMember());
newRetailDetail.setPointFirst(newParentRetailDetail.getChildNode());
this.fillDownTargetRetailDetail(memberDetail, newRetailDetail, newNode, 1);
}
}
}
}

View File

@ -50,11 +50,10 @@
<result column="rep_consume_new_pv" property="repConsumeNewPv"/>
<result column="rep_team_new_amount" property="repTeamNewAmount"/>
<result column="rep_team_new_pv" property="repTeamNewPv"/>
<result column="point_count" property="pointCount"/>
<result column="AWARDS_VALUE" property="awardsValue"/>
<result column="AWARDS_NAME" property="awardsName"/>
<result column="SHARE_AWARDS_VALUE" property="shareAwardsValue"/>
<result column="SHARE_AWARDS_NAME" property="shareAwardsName"/>
<result column="RANGE_RATIO" property="rangeRatio"/>
<result column="MONTH_REPURCHASE_RATIO" property="monthRepurchaseRatio"/>
<result column="BENEFIT_AVG_RATIO" property="benefitAvgRatio"/>
@ -125,6 +124,191 @@
</if>
</update>
<!-- 将昨天的结算明细迁移到今天 -->
<update id="mergeMemberRetailRangeDetailByYesterday">
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
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)
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)
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)
when matched then
update set
a.pk_parent = b.pk_parent,
a.stage = b.stage,
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
</update>
<!-- 更新会员日结数据 -->
<update id="mergeCuMemberRetailRangeExt">
merge into ${rangeTableName} a
using (
@ -156,6 +340,104 @@
a.rep_team_new_amount = b.rep_team_new_amount, a.rep_team_new_pv = b.rep_team_new_pv
</update>
<!-- 更新会员日结数据 -->
<update id="mergeCuMemberRetailDetail">
merge into ${rangeDetailTableName} a
using (
<foreach collection="cuMemberDetailList" item="item" open=" " close=" " separator=" union ">
select
#{item.pkMember} pk_member, #{item.childNode} child_node, #{item.pkParent} pk_parent,
#{item.stage} stage, #{item.stageStatus} stage_status, #{item.stageDate, jdbcType=TIMESTAMP} stage_date,
#{item.point11, jdbcType=NUMERIC} point_11, #{item.point12, jdbcType=NUMERIC} point_12,
#{item.point21, jdbcType=NUMERIC} point_21, #{item.point22, jdbcType=NUMERIC} point_22,
#{item.point23, jdbcType=NUMERIC} point_23, #{item.point24, jdbcType=NUMERIC} point_24,
#{item.point31, jdbcType=NUMERIC} point_31, #{item.point32, jdbcType=NUMERIC} point_32,
#{item.point33, jdbcType=NUMERIC} point_33, #{item.point34, jdbcType=NUMERIC} point_34,
#{item.point35, jdbcType=NUMERIC} point_35, #{item.point36, jdbcType=NUMERIC} point_36,
#{item.point37, jdbcType=NUMERIC} point_37, #{item.point38, jdbcType=NUMERIC} point_38,
#{item.pointMember11, jdbcType=NUMERIC} point_member_11, #{item.pointMember12, jdbcType=NUMERIC} point_member_12,
#{item.pointMember21, jdbcType=NUMERIC} point_member_21, #{item.pointMember22, jdbcType=NUMERIC} point_member_22,
#{item.pointMember23, jdbcType=NUMERIC} point_member_23, #{item.pointMember24, jdbcType=NUMERIC} point_member_24,
#{item.pointMember31, jdbcType=NUMERIC} point_member_31, #{item.pointMember32, jdbcType=NUMERIC} point_member_32,
#{item.pointMember33, jdbcType=NUMERIC} point_member_33, #{item.pointMember34, jdbcType=NUMERIC} point_member_34,
#{item.pointMember35, jdbcType=NUMERIC} point_member_35, #{item.pointMember36, jdbcType=NUMERIC} point_member_36,
#{item.pointMember37, jdbcType=NUMERIC} point_member_37, #{item.pointMember38, jdbcType=NUMERIC} point_member_38,
#{item.pointType} point_type, #{item.pointGift} point_gift,
#{item.creationTime, jdbcType=TIMESTAMP} creation_time,
#{item.pointFirst, jdbcType=NUMERIC} point_first, #{item.pointMemberFirst, jdbcType=NUMERIC} point_member_first,
#{item.pointSecond, jdbcType=NUMERIC} point_second, #{item.pointMemberSecond, jdbcType=NUMERIC} point_member_second,
#{item.pointThird, jdbcType=NUMERIC} point_third, #{item.pointMemberThird, jdbcType=NUMERIC} point_member_third
from dual
</foreach>
) b
on (a.pk_member = b.pk_member and a.child_node = b.child_node)
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)
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)
when matched then
update set
a.stage = b.stage, 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
</update>
<!-- 当前网体更新极差秒接表 -->
<update id="mergeMemberSecondRetailRangeByRange">
merge into ${secondRangeTableName} a
@ -321,48 +603,43 @@
rep_consume_new_pv,
rep_team_new_amount,
rep_team_new_pv,
point_count,
bw.awards_value,
bw.awards_name,
bwa.awards_value share_awards_value,
bwa.awards_name share_awards_name
bw.awards_name
from (
select * from ${tableName}
start with pk_member = #{item}
connect by pk_member = prior pk_parent
) a
inner join bd_awards bw
on bw.pk_id = a.pk_awards and bw.del_flag = 0
left join bd_awards bwa
on bwa.pk_id = a.pk_share_awards and bwa.del_flag = 0
on bw.pk_id = a.pk_awards
left join bd_vertex bv
on bv.pk_id = a.pk_vertex
</foreach>
</select>
<select id="queryCuMemberRetailRangeExtByParent" resultMap="CuMemberRetailRangeExt">
select a.pk_member,
<select id="listCuMemberRetailRange" resultMap="CuMemberRetailRangeExt">
select
a.pk_member,
a.pk_parent,
a.member_code,
a.member_name,
a.pk_parent,
a.pk_settle_country,
a.category,
a.account_status,
a.pk_grade,
a.pk_awards,
a.pk_share_awards,
a.income_status,
a.consume_pv,
a.account_status,
a.pay_time,
a.pk_rate,
a.category,
a.income_status,
a.pk_country,
a.pk_vertex,
a.pk_settle_country,
a.big_team_pv,
a.small_team_pv,
a.system_type,
a.pk_rate,
new_consume_pv,
consume_pv,
month_consume_pv,
new_consume_amount,
consume_amount,
month_consume_amount,
team_new_pv,
team_consume_pv,
team_month_pv,
@ -371,22 +648,76 @@
team_month_amount,
recommend_num,
team_num,
big_team_pv,
small_team_pv,
reg_consume_new_amount,
reg_consume_new_pv,
reg_team_new_amount,
reg_team_new_pv,
rep_consume_new_amount,
rep_consume_new_pv,
rep_team_new_amount,
rep_team_new_pv,
bw.awards_value,
bw.awards_name,
bws.awards_value share_awards_value,
bw.range_ratio,
bw.month_repurchase_ratio,
bw.benefit_avg_ratio,
bw.benefit_share_ratio
bw.awards_name
from ${tableName} a
inner join bd_grade ba
on a.pk_grade = ba.pk_id
inner join bd_awards bw
on bw.pk_id = a.pk_awards and bw.del_flag = 0
inner join bd_awards bws
on bws.pk_id = a.pk_share_awards and bws.del_flag = 0
where ba.del_flag = 0
and a.pk_parent = #{pkParent}
on bw.pk_id = a.pk_awards
left join bd_vertex bv
on bv.pk_id = a.pk_vertex
where a.pk_member in
<foreach collection="pkMemberList" item="items" open="(" close=")" separator=",">
#{items}
</foreach>
</select>
<select id="queryCuMemberRetailRangeExtByParent" resultMap="CuMemberRetailRangeExt">
select a.pk_member,
a.pk_parent,
a.member_code,
a.member_name,
a.pk_grade,
a.pk_awards,
a.pk_share_awards,
a.account_status,
a.pay_time,
a.category,
a.income_status,
a.pk_vertex,
a.pk_settle_country,
a.pk_rate,
new_consume_pv,
consume_pv,
month_consume_pv,
new_consume_amount,
consume_amount,
month_consume_amount,
team_new_pv,
team_consume_pv,
team_month_pv,
team_new_amount,
team_consume_amount,
team_month_amount,
recommend_num,
team_num,
big_team_pv,
small_team_pv,
reg_consume_new_amount,
reg_consume_new_pv,
reg_team_new_amount,
reg_team_new_pv,
rep_consume_new_amount,
rep_consume_new_pv,
rep_team_new_amount,
rep_team_new_pv,
bw.awards_value,
bw.awards_name
from ${tableName} a
inner join bd_awards bw
on bw.pk_id = a.pk_awards
left join bd_vertex bv
on bv.pk_id = a.pk_vertex
where a.pk_parent = #{pkParent}
</select>
<select id="queryCuMemberSecondRangeParent" resultMap="CuMemberRetailRangeExt">

View File

@ -0,0 +1,32 @@
<?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.bonus.mapper.CuMemberBonusStageMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.hzs.common.domain.member.bonus.CuMemberBonusStage">
<id column="PK_ID" property="pkId"/>
<result column="DEL_FLAG" property="delFlag"/>
<result column="PK_COUNTRY" property="pkCountry"/>
<result column="PK_CREATOR" property="pkCreator"/>
<result column="CREATION_TIME" property="creationTime"/>
<result column="PK_MODIFIED" property="pkModified"/>
<result column="MODIFIED_TIME" property="modifiedTime"/>
<result column="PK_BONUS" property="pkBonus"/>
<result column="PK_ORDER" property="pkOrder"/>
<result column="PK_BONUS_ITEMS" property="pkBonusItems"/>
<result column="INCOME_STATUS" property="incomeStatus"/>
<result column="CAL_TYPE" property="calType"/>
<result column="CAL_ACHIEVE" property="calAchieve"/>
<result column="CAL_VALUE" property="calValue"/>
<result column="PRETAX_INCOME" property="pretaxIncome"/>
<result column="INCOME_TAX" property="incomeTax"/>
<result column="REAL_INCOME" property="realIncome"/>
<result column="REMARK" property="remark"/>
<result column="INCOME_RATIO" property="incomeRatio"/>
<result column="INCOME_DIAL_RATIO" property="incomeDialRatio"/>
<result column="ORDER_DIAL_RATIO" property="orderDialRatio"/>
<result column="STAGE" property="stage"/>
<result column="STAGE_NUM" property="stageNum"/>
</resultMap>
</mapper>

View File

@ -6,6 +6,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.LinkedHashMap;
import java.util.List;
/**
@ -33,14 +34,6 @@ public class CuMemberRetailRangeExt extends CuMemberRetailRange {
* 奖衔名称
*/
private String awardsName;
/**
* 分红奖衔值
*/
private Integer shareAwardsValue;
/**
* 分红奖衔名称
*/
private String shareAwardsName;
/**
* 福利级差比例
@ -139,6 +132,6 @@ public class CuMemberRetailRangeExt extends CuMemberRetailRange {
/**
* 阶段一点位列表
*/
private List<CuMemberRetailDetail> oneDetailList;
private LinkedHashMap<Integer, CuMemberRetailDetail> oneDetailMap;
}

View File

@ -0,0 +1,129 @@
package com.hzs.common.domain.member.bonus;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import com.hzs.common.core.web.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 会员奖金-阶段收益明细表
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@KeySequence("CU_MEMBER_BONUS_STAGE_SEQ")
@TableName("CU_MEMBER_BONUS_STAGE")
public class CuMemberBonusStage extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId("PK_ID")
private Long pkId;
/**
* 主表主键
*/
@TableField("PK_BONUS")
private Long pkBonus;
/**
* 订单主键
*/
@TableField("PK_ORDER")
private Long pkOrder;
/**
* 奖金项
*/
@TableField("PK_BONUS_ITEMS")
private Integer pkBonusItems;
/**
* 收益状态 (0=正常1=烧伤)
*/
@TableField("INCOME_STATUS")
private Integer incomeStatus;
/**
* 计算类型 1=比例 2=
*/
@TableField("CAL_TYPE")
private Integer calType;
/**
* 计算业绩
*/
@TableField("CAL_ACHIEVE")
private BigDecimal calAchieve;
/**
* 计算比例
*/
@TableField("CAL_VALUE")
private BigDecimal calValue;
/**
* 税前收益
*/
@TableField("PRETAX_INCOME")
private BigDecimal pretaxIncome;
/**
* 扣除个税
*/
@TableField("INCOME_TAX")
private BigDecimal incomeTax;
/**
* 实际收益
*/
@TableField("REAL_INCOME")
private BigDecimal realIncome;
/**
* 备注
*/
@TableField("REMARK")
private String remark;
/**
* 收益占比
*/
@TableField("INCOME_RATIO")
private BigDecimal incomeRatio;
/**
* 收益拨比
*/
@TableField("INCOME_DIAL_RATIO")
private BigDecimal incomeDialRatio;
/**
* 订单拨比
*/
@TableField("ORDER_DIAL_RATIO")
private BigDecimal orderDialRatio;
/**
* 三个阶段123
*/
@TableField("STAGE")
private Integer stage;
/**
* 第几个点一二阶段满14发三阶段满2发满6发7以上每个发一次
*/
@TableField("STAGE_NUM")
private Integer stageNum;
}