From 3b89fd6ca1504b7c993a3fc6a589826a24c1ad19 Mon Sep 17 00:00:00 2001 From: cabbage <281119120@qq.com> Date: Fri, 19 Sep 2025 18:14:50 +0800 Subject: [PATCH] =?UTF-8?q?##=20=E4=B8=80=E9=98=B6=E6=AE=B5=E7=82=B9?= =?UTF-8?q?=E4=BD=8D=E5=A1=AB=E5=85=85=E5=A4=84=E7=90=86=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/CuMemberRetailRangeMapper.java | 21 +- .../service/ICuMemberRetailDetailService.java | 6 + .../service/ICuMemberRetailRangeService.java | 17 +- .../service/impl/CuMemberBonusSettle.java | 12 +- .../impl/CuMemberRetailDetailServiceImpl.java | 32 +- .../impl/CuMemberRetailRangeServiceImpl.java | 24 +- .../mapper/CuMemberBonusStageMapper.java | 11 + .../service/ICuMemberBonusStageService.java | 41 ++ .../service/impl/BonusSettleRangeHandle.java | 437 +++++++++--------- .../impl/CuMemberBonusStageServiceImpl.java | 415 +++++++++++++++++ .../achieve/CuMemberRetailRangeMapper.xml | 395 ++++++++++++++-- .../bonus/bonus/CuMemberBonusStageMapper.xml | 32 ++ .../achieve/ext/CuMemberRetailRangeExt.java | 11 +- .../member/bonus/CuMemberBonusStage.java | 129 ++++++ 14 files changed, 1297 insertions(+), 286 deletions(-) create mode 100644 bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/mapper/CuMemberBonusStageMapper.java create mode 100644 bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/ICuMemberBonusStageService.java create mode 100644 bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusStageServiceImpl.java create mode 100644 bd-business/bd-business-bonus/src/main/resources/mapper/bonus/bonus/CuMemberBonusStageMapper.xml create mode 100644 bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/bonus/CuMemberBonusStage.java diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/mapper/CuMemberRetailRangeMapper.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/mapper/CuMemberRetailRangeMapper.java index a5ae5617..d3b1e4c7 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/mapper/CuMemberRetailRangeMapper.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/mapper/CuMemberRetailRangeMapper.java @@ -29,6 +29,12 @@ public interface CuMemberRetailRangeMapper extends BaseMapper queryCuMemberRetailRangeParent(@Param("tableName") String tableName, @Param("saOrderExtList") List saOrderExtList); + /** + * 根据会员ID查询会员数据 + */ + List listCuMemberRetailRange(@Param("tableName") String tableName, @Param("pkMemberList") List pkMemberList); + /** * 推荐推荐人查询推荐人下的所有部门, 该订单日期之前的算他的网体 */ @@ -80,13 +91,19 @@ public interface CuMemberRetailRangeMapper extends BaseMapper 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 memberRangeExtMap, EBonusStage eBonusStage); + /** + * 指定会员获取对应的点位数据 + */ + void listMemberRetailDetail(String retailDetailTableName, Map memberRangeExtMap, + List queryMemberList, EBonusStage eBonusStage); + } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberRetailRangeService.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberRetailRangeService.java index 83e54bc3..8b805aa7 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberRetailRangeService.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberRetailRangeService.java @@ -21,7 +21,12 @@ public interface ICuMemberRetailRangeService extends IService queryCuMemberSecondRangeExtByParent(String rangeTableName, String secondTableName, Long pkMember); /** - * 更新会员树的累计业绩 - * - * @param settleTableName 结算日期 - * @param cuMemberTreeMap 树 + * 更新会员日结数据 */ void updateCuMemberRetailRange(String settleTableName, Map cuMemberTreeMap); + /** + * 更新会员日结明细数据 + */ + void updateCuMemberRetailDetail(String rangeDetailTableName, Map memberRangeExtMap); + /** * 更新极差秒接表,用昨天的结算表 */ diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberBonusSettle.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberBonusSettle.java index 3d05e281..02a1530b 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberBonusSettle.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberBonusSettle.java @@ -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> handleCutList(Collection baseEntityList, Integer... batchNum) { + List oriList = Arrays.asList(baseEntityList.toArray()); + return handleCutList(oriList, batchNum); + } + + } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailDetailServiceImpl.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailDetailServiceImpl.java index 92494240..46291351 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailDetailServiceImpl.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailDetailServiceImpl.java @@ -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 memberRangeExtMap, EBonusStage eBonusStage) { List> pkMemberList = cuMemberBonusSettle.handleCutList(memberRangeExtMap.keySet(), MagicNumberConstants.BATCH_QUERY_NUM); pkMemberList.forEach(tmpIdList -> { + // 查询明细数据(指定阶段,未完成的) List 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 memberRangeExtMap, + List queryMemberList, EBonusStage eBonusStage) { + // 查询明细数据(指定阶段,未完成的) + List 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); + } + } + } + } + } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailRangeServiceImpl.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailRangeServiceImpl.java index 811c89f1..6254eb3c 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailRangeServiceImpl.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailRangeServiceImpl.java @@ -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 queryCuMemberRetailRangeParent(String tableName, List saOrderExtList) { List memberRetailRangeExtList = new ArrayList<>(); @@ -82,6 +89,21 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl baseMapper.mergeCuMemberRetailRangeExt(settleTableName, list)); } + @Override + public void updateCuMemberRetailDetail(String rangeDetailTableName, Map memberRangeExtMap) { + Collection retailDetailColl = new ArrayList<>(); + memberRangeExtMap.forEach((key, value) -> { + if (null != value.getOneDetailMap() && value.getOneDetailMap().size() > 0) { + retailDetailColl.addAll(value.getOneDetailMap().values()); + } + }); + 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) { // 当前网体更新极差秒接表(血缘伞上) diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/mapper/CuMemberBonusStageMapper.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/mapper/CuMemberBonusStageMapper.java new file mode 100644 index 00000000..cda6f8d0 --- /dev/null +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/mapper/CuMemberBonusStageMapper.java @@ -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 { + +} diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/ICuMemberBonusStageService.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/ICuMemberBonusStageService.java new file mode 100644 index 00000000..9324c81a --- /dev/null +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/ICuMemberBonusStageService.java @@ -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 { + + /** + * 填充会员点位 + */ + String fillChildNode(CuMemberRetailDetail cuMemberRetailDetail, CuMemberRetailDetail newRetailDetail); + + /** + * 处理新点位是推荐第一层 + */ + void handlePointFirst(Map memberRangeExtMap, + CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail, + String rangeTableName, String rangeDetailTableName, String newNode); + + /** + * 处理新点位是推荐第二层 + */ + void handlePointSecond(Map memberRangeExtMap, + CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail, + String rangeTableName, String rangeDetailTableName, String newNode); + + /** + * 处理新点位是推荐第三层 + */ + void handlePointThird(Map memberRangeExtMap, + CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail, + String rangeTableName, String rangeDetailTableName, String newNode); + +} diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java index edcd78c5..4abdb337 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java @@ -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 cuMemberAwardsList = new ArrayList<>(); - // 精品直推收益、复购见点收益 + // 直推收益、见点收益 List cuMemberBonusPushList = new ArrayList<>(); + // 阶段收益 + List cuMemberBonusStageList = new ArrayList<>(); // 复购级差收益 List 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 cuMemberRangeExtList = null; - // 校验累计小部门会员数据 - List 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 cuMemberRangeExtList = null; +// // 校验累计小部门会员数据 +// List 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 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 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 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 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 cuMemberBonusPushList, Map memberRangeExtMap, SaOrderExt saOrderExt, - Date settleDate) { + private void calculateStageIncome(List cuMemberBonusStageList, Map 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 detailList = sourceMember.getOneDetailList(); + LinkedHashMap 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 parentDetailList = targetMember.getOneDetailList(); + LinkedHashMap 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)); - } - } - - } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusStageServiceImpl.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusStageServiceImpl.java new file mode 100644 index 00000000..cc86523b --- /dev/null +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusStageServiceImpl.java @@ -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 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 memberRangeExtMap, + CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail, + String rangeTableName, String rangeDetailTableName, String newNode) { + // 新点位的上第一层 + newRetailDetail.setPointMemberFirst(newParentRetailDetail.getPkMember()); + newRetailDetail.setPointFirst(newParentRetailDetail.getChildNode()); + + List 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 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 memberRangeExtMap, + CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail, + String rangeTableName, String rangeDetailTableName, String newNode) { + // 新点位的上第二层 + newRetailDetail.setPointMemberSecond(newParentRetailDetail.getPkMember()); + newRetailDetail.setPointSecond(newParentRetailDetail.getChildNode()); + + List 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 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 memberRangeExtMap, + CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail, + String rangeTableName, String rangeDetailTableName, String newNode) { + // 新点位的上第三层 + newRetailDetail.setPointMemberThird(newParentRetailDetail.getPkMember()); + newRetailDetail.setPointThird(newParentRetailDetail.getChildNode()); + + List 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 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); + } + } + } +} diff --git a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberRetailRangeMapper.xml b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberRetailRangeMapper.xml index 1d3ef1a3..610ce41a 100644 --- a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberRetailRangeMapper.xml +++ b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberRetailRangeMapper.xml @@ -50,11 +50,10 @@ + - - @@ -125,6 +124,191 @@ + + + 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 + + + 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 + + + merge into ${rangeDetailTableName} a + using ( + + 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 + + ) 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 + + merge into ${secondRangeTableName} a @@ -321,48 +603,95 @@ 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 + +