From c91ce61eac58b9f126672577f42f408ff1788236 Mon Sep 17 00:00:00 2001 From: zhangheng Date: Mon, 22 Sep 2025 15:13:12 +0800 Subject: [PATCH] =?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("三阶段结构") ; /**