From 619e6f10064f3b5295cce5b1137d6a2056886790 Mon Sep 17 00:00:00 2001 From: zhangheng Date: Mon, 22 Sep 2025 15:13:12 +0800 Subject: [PATCH 1/2] =?UTF-8?q?##=20=E4=B8=89=E9=98=B6=E6=AE=B5=E6=9E=B6?= =?UTF-8?q?=E6=9E=84,=E5=AD=90=E4=BC=9A=E5=91=98=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/CuMemberRetailDetailMapper.java | 23 ++++ .../base/service/ICumemberRetailDetail.java | 17 +++ .../impl/ICumemberRetailDetailImpl.java | 115 ++++++++++++++++++ .../manage/MemberStructureController.java | 75 ++++++++++++ .../structure/controller/vo/ChildCodeVO.java | 13 ++ .../member/CuMemberRetailDetailMapper.xml | 35 ++++++ .../common/core/enums/EOperationBusiness.java | 2 + .../common/core/enums/EOperationModule.java | 2 + 8 files changed, 282 insertions(+) create mode 100644 bd-business/bd-business-member/src/main/java/com/hzs/member/base/mapper/CuMemberRetailDetailMapper.java create mode 100644 bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICumemberRetailDetail.java create mode 100644 bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/ICumemberRetailDetailImpl.java create mode 100644 bd-business/bd-business-member/src/main/java/com/hzs/member/structure/controller/vo/ChildCodeVO.java create mode 100644 bd-business/bd-business-member/src/main/resources/mapper/retail/member/CuMemberRetailDetailMapper.xml diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/mapper/CuMemberRetailDetailMapper.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/mapper/CuMemberRetailDetailMapper.java new file mode 100644 index 00000000..6a747921 --- /dev/null +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/mapper/CuMemberRetailDetailMapper.java @@ -0,0 +1,23 @@ +package com.hzs.member.base.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.hzs.common.domain.member.achieve.CuMemberRetailDetail; +import com.hzs.member.structure.controller.vo.ChildCodeVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface CuMemberRetailDetailMapper extends BaseMapper { + List getChildList(@Param("memberCode") String memberCode, + @Param("stage")Integer stage, + @Param("stageStatus")Integer stageStatus, + @Param("settleTableName")String settleTableName); + + CuMemberRetailDetail getCuMemberRetailDetailExt(@Param("memberCode")String memberCode, + @Param("stage")Integer stage, + @Param("stageStatus")Integer stageStatus, + @Param("childNode")String childNode, + @Param("settleTableName")String settleTableName); + + Integer getFindCumemberRetailDetail(@Param("settleTableName") String settleTableName); +} diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICumemberRetailDetail.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICumemberRetailDetail.java new file mode 100644 index 00000000..415b32c5 --- /dev/null +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/ICumemberRetailDetail.java @@ -0,0 +1,17 @@ +package com.hzs.member.base.service; + +import cn.hutool.core.lang.tree.Tree; +import com.hzs.common.domain.member.achieve.CuMemberRetailDetail; +import com.hzs.member.structure.controller.vo.ChildCodeVO; + +import java.util.List; + +public interface ICumemberRetailDetail { + List getChildList(String memberCode, Integer stage, Integer stageStatus, String settleTableName); + + CuMemberRetailDetail getCuMemberRetailDetail(String memberCode, Integer stage, Integer stageStatus, String childNode, String settleTableName); + + Integer getFindCumemberRetailDetail(String settleTableName); + + List> convertToNodeList(CuMemberRetailDetail cuMemberRetailDetail); +} diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/ICumemberRetailDetailImpl.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/ICumemberRetailDetailImpl.java new file mode 100644 index 00000000..83cc5881 --- /dev/null +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/ICumemberRetailDetailImpl.java @@ -0,0 +1,115 @@ +package com.hzs.member.base.service.impl; + +import cn.hutool.core.lang.tree.Tree; +import cn.hutool.core.lang.tree.TreeUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.hzs.common.domain.member.achieve.CuMemberRetailDetail; +import com.hzs.common.domain.member.base.CuMember; +import com.hzs.member.base.mapper.CuMemberRetailDetailMapper; +import com.hzs.member.base.service.ICuMemberService; +import com.hzs.member.base.service.ICumemberRetailDetail; +import com.hzs.member.structure.controller.vo.ChildCodeVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@Service +public class ICumemberRetailDetailImpl extends ServiceImpl implements ICumemberRetailDetail { + @Autowired + private ICuMemberService iCuMemberService; + @Override + public List getChildList(String memberCode, Integer stage, Integer stageStatus, String settleTableName) { + return baseMapper.getChildList(memberCode,stage,stageStatus,settleTableName); + } + + @Override + public CuMemberRetailDetail getCuMemberRetailDetail(String memberCode, Integer stage, Integer stageStatus,String childNode,String settleTableName) { + return baseMapper.getCuMemberRetailDetailExt(memberCode,stage,stageStatus,childNode,settleTableName); + } + + @Override + public Integer getFindCumemberRetailDetail(String settleTableName) { + return baseMapper.getFindCumemberRetailDetail(settleTableName); + } + + @Override + public List> convertToNodeList(CuMemberRetailDetail cuMemberRetailDetail) { + // 所有会员id + Set ids = new LinkedHashSet<>(); + ids.add(cuMemberRetailDetail.getPkMember()); + // 过滤空的会员id + Stream.of( + cuMemberRetailDetail.getPointMember11(), cuMemberRetailDetail.getPointMember12(), + cuMemberRetailDetail.getPointMember21(), cuMemberRetailDetail.getPointMember22(), cuMemberRetailDetail.getPointMember23(), cuMemberRetailDetail.getPointMember24(), + cuMemberRetailDetail.getPointMember31(), cuMemberRetailDetail.getPointMember32(), cuMemberRetailDetail.getPointMember33(), cuMemberRetailDetail.getPointMember34(), + cuMemberRetailDetail.getPointMember35(), cuMemberRetailDetail.getPointMember36(), cuMemberRetailDetail.getPointMember37(), cuMemberRetailDetail.getPointMember38(), + cuMemberRetailDetail.getPointMemberFirst(), cuMemberRetailDetail.getPointMemberSecond(), cuMemberRetailDetail.getPointMemberThird() + ).filter(Objects::nonNull).forEach(ids::add); + + // 查找对应会员信息 + List members; + if (ids.isEmpty()) { + members = Collections.emptyList(); + } else { + members = iCuMemberService.listByIds(new ArrayList<>(ids)); + } + + Map memberMap = members.stream() + .collect(Collectors.toMap(CuMember::getPkId, Function.identity(), (a, b) -> a)); + + // 构建node + List> nodeList = new ArrayList<>(); + nodeList.add(makeNode("root", "0", "root", cuMemberRetailDetail.getPkMember(), memberMap)); + + nodeList.add(makeNode("1", "root", "1", cuMemberRetailDetail.getPointMember11(), memberMap)); + nodeList.add(makeNode("2", "root", "2", cuMemberRetailDetail.getPointMember12(), memberMap)); + + nodeList.add(makeNode("3", "1", "3", cuMemberRetailDetail.getPointMember21(), memberMap)); + nodeList.add(makeNode("4", "1", "4", cuMemberRetailDetail.getPointMember22(), memberMap)); + nodeList.add(makeNode("5", "2", "5", cuMemberRetailDetail.getPointMember23(), memberMap)); + nodeList.add(makeNode("6", "2", "6", cuMemberRetailDetail.getPointMember24(), memberMap)); + + nodeList.add(makeNode("7", "3", "7", cuMemberRetailDetail.getPointMember31(), memberMap)); + nodeList.add(makeNode("8", "3", "8", cuMemberRetailDetail.getPointMember32(), memberMap)); + nodeList.add(makeNode("9", "4", "9", cuMemberRetailDetail.getPointMember33(), memberMap)); + nodeList.add(makeNode("10", "4", "10", cuMemberRetailDetail.getPointMember34(), memberMap)); + nodeList.add(makeNode("11", "5", "11", cuMemberRetailDetail.getPointMember35(), memberMap)); + nodeList.add(makeNode("12", "5", "12", cuMemberRetailDetail.getPointMember36(), memberMap)); + nodeList.add(makeNode("13", "6", "13", cuMemberRetailDetail.getPointMember37(), memberMap)); + nodeList.add(makeNode("14", "6", "14", cuMemberRetailDetail.getPointMember38(), memberMap)); + + // 构造树结构 + return TreeUtil.build(nodeList, "0", (node, tree) -> { + tree.setId((String) node.get("id")); + tree.setParentId((String) node.get("parentId")); + tree.setName((String) node.get("label")); + tree.putExtra("memberCode", node.get("memberCode")); + tree.putExtra("memberName", node.get("memberName")); + tree.putExtra("nodeCode", node.get("nodeCode")); + }); + } + private Map makeNode(String id, String parentId, String label, + Long memberId, Map memberMap) { + Map map = new HashMap<>(); + map.put("id", id); + map.put("parentId", parentId); + map.put("label", label); + map.put("nodeCode", label); + + if (memberId != null && memberMap.containsKey(memberId)) { + CuMember member = memberMap.get(memberId); + map.put("memberCode", member.getMemberCode()); + map.put("memberName", member.getMemberName()); + } else { + // 没有信息置空 + map.put("memberCode", ""); + map.put("memberName", ""); + } + return map; + } + +} diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/structure/controller/manage/MemberStructureController.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/structure/controller/manage/MemberStructureController.java index bc5fd02f..bd3db03d 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/structure/controller/manage/MemberStructureController.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/structure/controller/manage/MemberStructureController.java @@ -3,19 +3,26 @@ package com.hzs.member.structure.controller.manage; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.tree.Tree; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.hzs.common.core.annotation.AccessPermissions; +import com.hzs.common.core.annotation.Log; import com.hzs.common.core.constant.*; +import com.hzs.common.core.constant.msg.CommonMsgConstants; import com.hzs.common.core.constant.msg.MemberMsgConstants; import com.hzs.common.core.domain.R; +import com.hzs.common.core.enums.EOperationBusiness; +import com.hzs.common.core.enums.EOperationMethod; +import com.hzs.common.core.enums.EOperationModule; import com.hzs.common.core.enums.EYesNo; import com.hzs.common.core.utils.DateUtils; import com.hzs.common.core.utils.StringUtils; import com.hzs.common.core.utils.sign.Base64Util; import com.hzs.common.core.web.controller.BaseController; import com.hzs.common.core.web.domain.AjaxResult; +import com.hzs.common.domain.member.achieve.CuMemberRetailDetail; import com.hzs.common.domain.member.achieve.CuMemberSettlePeriod; import com.hzs.common.domain.member.achieve.ext.CuMemberRetailSExt; import com.hzs.common.domain.member.base.CuMember; @@ -24,11 +31,14 @@ import com.hzs.common.util.TransactionUtils; import com.hzs.member.achieve.service.ICuMemberSettlePeriodService; import com.hzs.member.achieve.service.ICuMemberTreeService; import com.hzs.member.base.service.ICuMemberService; +import com.hzs.member.base.service.ICumemberRetailDetail; +import com.hzs.member.structure.controller.vo.ChildCodeVO; import com.hzs.member.structure.controller.vo.CuMemberSettlePeriodVo; import com.hzs.system.config.IGradeServiceApi; import com.hzs.system.config.dto.GradeDTO; import com.hzs.system.sys.IUserServiceApi; import com.hzs.system.sys.dto.UserAuthorityDTO; +import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -38,6 +48,7 @@ import java.util.*; /** * 架构管理 */ +@Slf4j @RestController @RequestMapping("/manage/member-structure") public class MemberStructureController extends BaseController { @@ -49,6 +60,8 @@ public class MemberStructureController extends BaseController { @Autowired private ICuMemberService iCuMemberService; + @Autowired + private ICumemberRetailDetail iCumemberRetailDetail; @DubboReference IUserServiceApi iUserServiceApi; @DubboReference @@ -193,6 +206,68 @@ public class MemberStructureController extends BaseController { } } + + /** + * 三阶段架构 + * @param memberSettlePeriodId + * @param memberCode + * @param stage + * @param childNode + * @param stageStatus + * @return + */ + @Log(module = EOperationModule.MEMBER_RETAIL_TREE, business = EOperationBusiness.MEMBER_RETAIL_TREE, method = EOperationMethod.SELECT) + @GetMapping("/three-framework") + public AjaxResult Framework(Long memberSettlePeriodId, String memberCode,Integer stage,String childNode,Integer stageStatus) { + if (memberSettlePeriodId == null || memberCode == null || stage == null || stageStatus == null || childNode == null) { + log.error("参数错误"); + return AjaxResult.error(CommonMsgConstants.MISSING_PARAM); + } + CuMemberSettlePeriod csPeriod = iCuMemberSettlePeriodService.getById(memberSettlePeriodId); + log.info("日结信息{}",csPeriod); + String settleTableName = TableNameConstants.CU_MEMBER_RETAIL_RANGE_DETAIL + csPeriod.getPkId(); + log.info("日结表名称{}",settleTableName); + // 校验当前日结表是否存在 + Integer isFind = iCumemberRetailDetail.getFindCumemberRetailDetail(settleTableName); + if (isFind != 1) { + log.error("当前表名不存在{}",settleTableName); + return AjaxResult.error("当前日结信息表不存在",settleTableName); + } + CuMemberRetailDetail cuMemberRetailDetail = iCumemberRetailDetail.getCuMemberRetailDetail(memberCode,stage,stageStatus,childNode,settleTableName); + log.info("日结表会员信息{}",cuMemberRetailDetail); + // 拼接树形结构 + List> cuMemberRetailTree = iCumemberRetailDetail.convertToNodeList(cuMemberRetailDetail); + return AjaxResult.success(cuMemberRetailTree); + } + + /** + * 查询子节点 + * @param memberSettlePeriodId + * @param memberCode + * @param stage + * @param stageStatus + * @return + */ + @Log(module = EOperationModule.MEMBER_RETAIL_CHILDNODE, business = EOperationBusiness.MEMBER_RETAIL_CHILDNODE, method = EOperationMethod.SELECT) + @GetMapping("/childList") + public AjaxResult Framework(Long memberSettlePeriodId, String memberCode,Integer stage,Integer stageStatus) { + if (memberSettlePeriodId == null || memberCode == null || stage == null || stageStatus == null) { + log.error("参数错误"); + return AjaxResult.error(CommonMsgConstants.MISSING_PARAM); + } + CuMemberSettlePeriod csPeriod = iCuMemberSettlePeriodService.getById(memberSettlePeriodId); + log.info("日结信息{}",csPeriod); + String settleTableName = TableNameConstants.CU_MEMBER_RETAIL_RANGE_DETAIL + csPeriod.getPkId(); + log.info("日结表名称{}",settleTableName); + // 校验当前日结表是否存在 + Integer isFind = iCumemberRetailDetail.getFindCumemberRetailDetail(settleTableName); + if (isFind != 1) { + log.error("当前表名不存在{}",settleTableName); + return AjaxResult.error("当前日结信息表不存在",settleTableName); + } + List childCodeList = iCumemberRetailDetail.getChildList(memberCode,stage,stageStatus,settleTableName); + return AjaxResult.success(childCodeList); + } /** * 查询最近一月所有期数 * diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/structure/controller/vo/ChildCodeVO.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/structure/controller/vo/ChildCodeVO.java new file mode 100644 index 00000000..4bc9f369 --- /dev/null +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/structure/controller/vo/ChildCodeVO.java @@ -0,0 +1,13 @@ +package com.hzs.member.structure.controller.vo; + +import lombok.Data; + +@Data + +public class ChildCodeVO { + /** + * 子会员节点 + */ + Integer childNode; + +} diff --git a/bd-business/bd-business-member/src/main/resources/mapper/retail/member/CuMemberRetailDetailMapper.xml b/bd-business/bd-business-member/src/main/resources/mapper/retail/member/CuMemberRetailDetailMapper.xml new file mode 100644 index 00000000..08dff19e --- /dev/null +++ b/bd-business/bd-business-member/src/main/resources/mapper/retail/member/CuMemberRetailDetailMapper.xml @@ -0,0 +1,35 @@ + + + + + + + + + diff --git a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EOperationBusiness.java b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EOperationBusiness.java index f3bb3c13..f9f3e67b 100644 --- a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EOperationBusiness.java +++ b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EOperationBusiness.java @@ -402,6 +402,8 @@ public enum EOperationBusiness { MONTHLY_JOB_LEVEL("月度职级名单查询"), MEMBER_RISK_CONTROL("K值风控设置"), MEMBER_RETAIL_STAT("收益区域数据"), + MEMBER_RETAIL_CHILDNODE("会员子节点查询"), + MEMBER_RETAIL_TREE("三阶段结构") ; diff --git a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EOperationModule.java b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EOperationModule.java index 0c18f133..e4cd274c 100644 --- a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EOperationModule.java +++ b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/enums/EOperationModule.java @@ -401,6 +401,8 @@ public enum EOperationModule { MEMBER_RISK_CONTROL("K值风控设置"), ORDER_SYNC("同步失败订单"), + MEMBER_RETAIL_CHILDNODE("会员子节点查询"), + MEMBER_RETAIL_TREE("三阶段结构") ; /** From abe46ad69ed67b01fad07f122a2f660b6d697e61 Mon Sep 17 00:00:00 2001 From: cabbage <281119120@qq.com> Date: Mon, 22 Sep 2025 15:49:15 +0800 Subject: [PATCH 2/2] =?UTF-8?q?##=20=E4=B8=80=E9=98=B6=E6=AE=B5=E5=A1=AB?= =?UTF-8?q?=E5=85=85=E7=82=B9=E4=BD=8D=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/CuMemberRetailRangeServiceImpl.java | 26 ++- .../service/ICuMemberBonusStageService.java | 6 + .../service/impl/BonusSettleRangeHandle.java | 175 ++++++++++++++---- .../impl/CuMemberBonusStageServiceImpl.java | 144 +++++++------- .../hzs/bonus/constant/BonusConstants.java | 18 +- .../bonus/achieve/CuMemberTreeMapper.xml | 26 +-- .../mapper/bonus/order/BonusOrderMapper.xml | 2 +- .../member/achieve/CuActiveMemberCensus.java | 5 - .../member/achieve/CuMemberRangeMonth.java | 59 ------ .../member/achieve/CuMemberRetailDetail.java | 5 + 10 files changed, 259 insertions(+), 207 deletions(-) delete mode 100644 bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuMemberRangeMonth.java 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 9a50232d..38a019a3 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 @@ -4,15 +4,14 @@ 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.bonus.achieve.service.ICuMemberTreeService; 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; import com.hzs.common.domain.member.ext.CuMemberExt; import com.hzs.common.domain.sale.ext.SaOrderExt; -import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -27,6 +26,8 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl retailDetailColl = new ArrayList<>(); memberRangeExtMap.forEach((key, value) -> { if (null != value.getOneDetailMap() && value.getOneDetailMap().size() > 0) { - retailDetailColl.addAll(value.getOneDetailMap().values()); + Collection tmpDetailColl = value.getOneDetailMap().values(); + for (CuMemberRetailDetail cuMemberRetailDetail : tmpDetailColl) { + // 只有需要更新的才进行入库操作 + if (null != cuMemberRetailDetail.getUpdateBool()) { + retailDetailColl.add(cuMemberRetailDetail); + } + } } }); List> list = cuMemberBonusSettle.handleCutList(retailDetailColl); - list.forEach(tmpList -> { - if (CollectionUtil.isNotEmpty(tmpList)) { - baseMapper.mergeCuMemberRetailDetail(rangeDetailTableName, tmpList); - } - }); + list.forEach(tmpList -> { + if (CollectionUtil.isNotEmpty(tmpList)) { + baseMapper.mergeCuMemberRetailDetail(rangeDetailTableName, tmpList); + } + }); } @Override 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 index 15c1ccb8..72592edd 100644 --- 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 @@ -37,6 +37,12 @@ public interface ICuMemberBonusStageService extends IService */ String fillChildNode(CuMemberRetailDetail cuMemberRetailDetail, CuMemberRetailDetail newRetailDetail); + /** + * 填充指定点位 + */ + void fillRetailDetail(CuMemberRetailDetail targetRetailDetail, String point, + Long pkMember, Integer childNode); + /** * 处理新点位是推荐第一层 */ 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 83c92210..50b3f5de 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 @@ -278,7 +278,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { Date settleEndDate = DateUtils.afterDate(1, ChronoUnit.DAYS, settleStartDate); // 新零售订单(注册、复购) - List orderList = iBonusOrderService.listRetailSaOrder(settleStartDate, settleEndDate, null, Arrays.asList(EOrderType.RETAIL_REGISTER.getValue(), EOrderType.RETAIL_REPURCHASE.getValue())); + List orderList = iBonusOrderService.listRetailSaOrder(settleStartDate, settleEndDate, null, Arrays.asList(EOrderType.RETAIL_REGISTER.getValue(), EOrderType.RETAIL_UPGRADE.getValue(), EOrderType.RETAIL_REPURCHASE.getValue())); // 更新当月会员, 将昨天业绩更到到今天,更新当月会员考核结果,有消费的考核通过 // 结算期间表 @@ -371,6 +371,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { } // 更新日结数据 iCuMemberRetailRangeService.updateCuMemberRetailRange(rangeTableName, memberRangeExtMap); + CuMemberRetailRangeExt tt = memberRangeExtMap.get(20363L); // 更新日结明细数据 iCuMemberRetailRangeService.updateCuMemberRetailDetail(rangeDetailTableName, memberRangeExtMap); } @@ -950,6 +951,8 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { } // 当前会员子点位总数 int pointCount = sourceMember.getPointCount(); + + newPointInt: for (int i = 1; i <= newPointInt; i++) { // 订单会员生成的新点位 CuMemberRetailDetail newRetailDetail = CuMemberRetailDetail.builder() @@ -961,6 +964,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { .pointType(EBonusStageType.NORMAL.getValue()) .pointGift(0) .creationTime(settleDate) + .updateBool(0) .build(); detailList.put(newRetailDetail.getChildNode(), newRetailDetail); @@ -980,47 +984,142 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { // 推荐人没有未完成点位,继续往上找 continue; } - parentDetailList.forEach((key, parentRetailDetail) -> { + for (Map.Entry integerCuMemberRetailDetailEntry : parentDetailList.entrySet()) { + // 第一层填充 + CuMemberRetailDetail parentRetailDetail = integerCuMemberRetailDetailEntry.getValue(); // 遍历推荐人点位,使用第一个未完成的点位,进行填充 if (EBonusStageStatus.NO.getValue() == parentRetailDetail.getStageStatus()) { - String newNode = iCuMemberBonusStageService.fillChildNode(parentRetailDetail, newRetailDetail); - if (null == newNode) { - return; - } - switch (newNode) { - case BonusConstants.POINT_11: - case BonusConstants.POINT_12: - // 新点位是推荐人点位的第一层 - iCuMemberBonusStageService.handlePointFirst(memberRangeExtMap, newRetailDetail, parentRetailDetail, - rangeTableName, rangeDetailTableName, newNode); - break; - case BonusConstants.POINT_21: - case BonusConstants.POINT_22: - case BonusConstants.POINT_23: - case BonusConstants.POINT_24: - // 新点位是推荐人点位的第二层 - iCuMemberBonusStageService.handlePointSecond(memberRangeExtMap, newRetailDetail, parentRetailDetail, - rangeTableName, rangeDetailTableName, newNode); - break; - case BonusConstants.POINT_38: - // 第一个点位已经全部填满,更新完成状态和时间 - 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); + if (null == parentRetailDetail.getPointMember11()) { + iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_11, + newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); + // 新点位是推荐人点位的第一层 + iCuMemberBonusStageService.handlePointFirst(memberRangeExtMap, newRetailDetail, parentRetailDetail, + rangeTableName, rangeDetailTableName, BonusConstants.POINT_11); + // 当前新子点位填充完成,进入下一个新子点位 + continue newPointInt; + } else if (null == parentRetailDetail.getPointMember12()) { + iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_12, + newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); + // 新点位是推荐人点位的第一层 + iCuMemberBonusStageService.handlePointFirst(memberRangeExtMap, newRetailDetail, parentRetailDetail, + rangeTableName, rangeDetailTableName, BonusConstants.POINT_12); + // 当前新子点位填充完成,进入下一个新子点位 + continue newPointInt; } } - }); + } + for (Map.Entry integerCuMemberRetailDetailEntry : parentDetailList.entrySet()) { + // 第二层填充 + CuMemberRetailDetail parentRetailDetail = integerCuMemberRetailDetailEntry.getValue(); + // 遍历推荐人点位,使用第一个未完成的点位,进行填充 + if (EBonusStageStatus.NO.getValue() == parentRetailDetail.getStageStatus()) { + if (null == parentRetailDetail.getPointMember21()) { + iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_21, + newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); + // 新点位是推荐人点位的第二层 + iCuMemberBonusStageService.handlePointSecond(memberRangeExtMap, newRetailDetail, parentRetailDetail, + rangeTableName, rangeDetailTableName, BonusConstants.POINT_21); + // 当前新子点位填充完成,进入下一个新子点位 + continue newPointInt; + } else if (null == parentRetailDetail.getPointMember22()) { + iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_22, + newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); + // 新点位是推荐人点位的第二层 + iCuMemberBonusStageService.handlePointSecond(memberRangeExtMap, newRetailDetail, parentRetailDetail, + rangeTableName, rangeDetailTableName, BonusConstants.POINT_22); + // 当前新子点位填充完成,进入下一个新子点位 + continue newPointInt; + } else if (null == parentRetailDetail.getPointMember23()) { + iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_23, + newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); + // 新点位是推荐人点位的第二层 + iCuMemberBonusStageService.handlePointSecond(memberRangeExtMap, newRetailDetail, parentRetailDetail, + rangeTableName, rangeDetailTableName, BonusConstants.POINT_23); + // 当前新子点位填充完成,进入下一个新子点位 + continue newPointInt; + } else if (null == parentRetailDetail.getPointMember24()) { + iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_24, + newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); + // 新点位是推荐人点位的第二层 + iCuMemberBonusStageService.handlePointSecond(memberRangeExtMap, newRetailDetail, parentRetailDetail, + rangeTableName, rangeDetailTableName, BonusConstants.POINT_24); + // 当前新子点位填充完成,进入下一个新子点位 + continue newPointInt; + } + } + } + for (Map.Entry integerCuMemberRetailDetailEntry : parentDetailList.entrySet()) { + // 第三层填充 + CuMemberRetailDetail parentRetailDetail = integerCuMemberRetailDetailEntry.getValue(); + // 遍历推荐人点位,使用第一个未完成的点位,进行填充 + if (EBonusStageStatus.NO.getValue() == parentRetailDetail.getStageStatus()) { + if (null == parentRetailDetail.getPointMember31()) { + iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_31, + newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); + // 新点位是推荐人点位的第三层 + iCuMemberBonusStageService.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail, + rangeTableName, rangeDetailTableName, BonusConstants.POINT_31); + // 当前新子点位填充完成,进入下一个新子点位 + continue newPointInt; + } else if (null == parentRetailDetail.getPointMember32()) { + iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_32, + newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); + // 新点位是推荐人点位的第三层 + iCuMemberBonusStageService.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail, + rangeTableName, rangeDetailTableName, BonusConstants.POINT_32); + // 当前新子点位填充完成,进入下一个新子点位 + continue newPointInt; + } else if (null == parentRetailDetail.getPointMember33()) { + iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_33, + newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); + // 新点位是推荐人点位的第三层 + iCuMemberBonusStageService.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail, + rangeTableName, rangeDetailTableName, BonusConstants.POINT_33); + // 当前新子点位填充完成,进入下一个新子点位 + continue newPointInt; + } else if (null == parentRetailDetail.getPointMember34()) { + iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_34, + newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); + // 新点位是推荐人点位的第三层 + iCuMemberBonusStageService.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail, + rangeTableName, rangeDetailTableName, BonusConstants.POINT_34); + // 当前新子点位填充完成,进入下一个新子点位 + continue newPointInt; + } else if (null == parentRetailDetail.getPointMember35()) { + iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_35, + newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); + // 新点位是推荐人点位的第三层 + iCuMemberBonusStageService.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail, + rangeTableName, rangeDetailTableName, BonusConstants.POINT_35); + // 当前新子点位填充完成,进入下一个新子点位 + continue newPointInt; + } else if (null == parentRetailDetail.getPointMember36()) { + iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_36, + newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); + // 新点位是推荐人点位的第三层 + iCuMemberBonusStageService.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail, + rangeTableName, rangeDetailTableName, BonusConstants.POINT_36); + // 当前新子点位填充完成,进入下一个新子点位 + continue newPointInt; + } else if (null == parentRetailDetail.getPointMember37()) { + iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_37, + newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); + // 新点位是推荐人点位的第三层 + iCuMemberBonusStageService.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail, + rangeTableName, rangeDetailTableName, BonusConstants.POINT_37); + // 当前新子点位填充完成,进入下一个新子点位 + continue newPointInt; + } else if (null == parentRetailDetail.getPointMember38()) { + iCuMemberBonusStageService.fillRetailDetail(parentRetailDetail, BonusConstants.POINT_38, + newRetailDetail.getPkMember(), newRetailDetail.getChildNode()); + // 新点位是推荐人点位的第三层 + iCuMemberBonusStageService.handlePointThird(memberRangeExtMap, newRetailDetail, parentRetailDetail, + rangeTableName, rangeDetailTableName, BonusConstants.POINT_38); + // 当前新子点位填充完成,进入下一个新子点位 + continue newPointInt; + } + } + } } } } 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 index 60d38738..7a923d3b 100644 --- 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 @@ -47,7 +47,7 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl cuMemberBonusStageList, Set memberIdSet) { - if (cuMemberBonusStageList.size() == 0) { + if (CollectionUtil.isEmpty(cuMemberBonusStageList)) { return; } List addMemberBonusStageList = new ArrayList<>(); @@ -89,19 +89,8 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl(); - 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); @@ -109,6 +98,7 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl memberRangeExtMap, CuMemberRetailDetail newRetailDetail, CuMemberRetailDetail newParentRetailDetail, @@ -292,22 +267,25 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl queryMemberList = new ArrayList<>(2); // 获取上第三层结算数据 CuMemberRetailRangeExt memberUpFirst = memberRangeExtMap.get(newParentRetailDetail.getPointMemberFirst()); - if (null == memberUpFirst) { + if (null == memberUpFirst && null != newParentRetailDetail.getPointMemberFirst()) { queryMemberList.add(newParentRetailDetail.getPointMemberFirst()); } // 获取上第一层结算数据 @@ -341,7 +319,7 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl FIELD_LIST = Arrays.asList(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); - public static final String POINT_FIELD_NAME = "point"; + // 会员ID字段 public static final String POINT_MEMBER_FIELD_NAME = "pointMember"; + // 会员子点位字段 + public static final String POINT_FIELD_NAME = "point"; + // 入库标记字段 + public static final String UPDATE_FLAG = "updateBool"; public static Map FIELD_MAP = null; + static { + 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)); + } + } + } diff --git a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberTreeMapper.xml b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberTreeMapper.xml index b737895b..2a39496d 100644 --- a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberTreeMapper.xml +++ b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberTreeMapper.xml @@ -299,32 +299,32 @@ stage_status NUMBER(1) default 1 not null, stage_date DATE, point_11 NUMBER(8), - point_12 NUMBER(8), - point_21 NUMBER(8), - point_22 NUMBER(8), - point_23 NUMBER(8), - point_24 NUMBER(8), - point_31 NUMBER(8), - point_32 NUMBER(8), - point_33 NUMBER(8), - point_34 NUMBER(8), - point_35 NUMBER(8), - point_36 NUMBER(8), - point_37 NUMBER(8), - point_38 NUMBER(8), point_member_11 NUMBER(20), + point_12 NUMBER(8), point_member_12 NUMBER(20), + point_21 NUMBER(8), point_member_21 NUMBER(20), + point_22 NUMBER(8), point_member_22 NUMBER(20), + point_23 NUMBER(8), point_member_23 NUMBER(20), + point_24 NUMBER(8), point_member_24 NUMBER(20), + point_31 NUMBER(8), point_member_31 NUMBER(20), + point_32 NUMBER(8), point_member_32 NUMBER(20), + point_33 NUMBER(8), point_member_33 NUMBER(20), + point_34 NUMBER(8), point_member_34 NUMBER(20), + point_35 NUMBER(8), point_member_35 NUMBER(20), + point_36 NUMBER(8), point_member_36 NUMBER(20), + point_37 NUMBER(8), point_member_37 NUMBER(20), + point_38 NUMBER(8), point_member_38 NUMBER(20), point_type NUMBER(1) default 0 not null, point_gift NUMBER(1) default 0 not null, diff --git a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/order/BonusOrderMapper.xml b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/order/BonusOrderMapper.xml index 808f4e14..7d93e0e3 100644 --- a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/order/BonusOrderMapper.xml +++ b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/order/BonusOrderMapper.xml @@ -90,7 +90,7 @@ and so.pay_time >= #{startDate} and so.pay_time < #{endDate} - order by pay_time desc + order by pay_time diff --git a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuActiveMemberCensus.java b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuActiveMemberCensus.java index 0d4db8a5..ba8858ed 100644 --- a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuActiveMemberCensus.java +++ b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuActiveMemberCensus.java @@ -10,12 +10,7 @@ import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** - *

* 统计活跃会员 - *

- * - * @author zhangjing - * @since 2023-05-17 */ @Data @EqualsAndHashCode(callSuper = true) diff --git a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuMemberRangeMonth.java b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuMemberRangeMonth.java deleted file mode 100644 index eb4662b0..00000000 --- a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuMemberRangeMonth.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.hzs.common.domain.member.achieve; - -import java.math.BigDecimal; -import com.baomidou.mybatisplus.annotation.TableName; -import java.util.Date; -import com.baomidou.mybatisplus.annotation.TableField; -import com.hzs.common.core.web.domain.BaseEntity; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - *

- * 极差月新增业绩 - *

- * - * @author hzs - * @since 2024-10-28 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@Accessors(chain = true) -@TableName("CU_MEMBER_RANGE_MONTH") -public class CuMemberRangeMonth extends BaseEntity { - - private static final long serialVersionUID = 1L; - - /** - * 会员ID - */ - @TableField("PK_MEMBER") - private Long pkMember; - - /** - * 期数 - */ - @TableField("PERIOD") - private Integer period; - - /** - * 结算日期 - */ - @TableField("SETTLE_DATE") - private Date settleDate; - - /** - * 个人新增PV - */ - @TableField("NEW_PV") - private BigDecimal newPv; - - /** - * 团队新增PV - */ - @TableField("NEW_TEAM_PV") - private BigDecimal newTeamPv; - - -} diff --git a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuMemberRetailDetail.java b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuMemberRetailDetail.java index f705282d..ceaf9aa9 100644 --- a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuMemberRetailDetail.java +++ b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuMemberRetailDetail.java @@ -280,5 +280,10 @@ public class CuMemberRetailDetail { @TableField("POINT_MEMBER_THIRD") private Long pointMemberThird; + /** + * 更新标记(不为null则需要入库) + */ + @TableField(exist = false) + private Integer updateBool; }