## 三阶段架构,子会员节点查询

This commit is contained in:
zhangheng 2025-09-22 15:13:12 +08:00
parent e3fae413a6
commit 619e6f1006
8 changed files with 282 additions and 0 deletions

View File

@ -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<CuMemberRetailDetail> {
List<ChildCodeVO> 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);
}

View File

@ -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<ChildCodeVO> 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<Tree<String>> convertToNodeList(CuMemberRetailDetail cuMemberRetailDetail);
}

View File

@ -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<CuMemberRetailDetailMapper, CuMemberRetailDetail> implements ICumemberRetailDetail {
@Autowired
private ICuMemberService iCuMemberService;
@Override
public List<ChildCodeVO> 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<Tree<String>> convertToNodeList(CuMemberRetailDetail cuMemberRetailDetail) {
// 所有会员id
Set<Long> 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<CuMember> members;
if (ids.isEmpty()) {
members = Collections.emptyList();
} else {
members = iCuMemberService.listByIds(new ArrayList<>(ids));
}
Map<Long, CuMember> memberMap = members.stream()
.collect(Collectors.toMap(CuMember::getPkId, Function.identity(), (a, b) -> a));
// 构建node
List<Map<String, Object>> 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<String, Object> makeNode(String id, String parentId, String label,
Long memberId, Map<Long, CuMember> memberMap) {
Map<String, Object> 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;
}
}

View File

@ -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<Tree<String>> 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<ChildCodeVO> childCodeList = iCumemberRetailDetail.getChildList(memberCode,stage,stageStatus,settleTableName);
return AjaxResult.success(childCodeList);
}
/**
* 查询最近一月所有期数
*

View File

@ -0,0 +1,13 @@
package com.hzs.member.structure.controller.vo;
import lombok.Data;
@Data
public class ChildCodeVO {
/**
* 子会员节点
*/
Integer childNode;
}

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hzs.member.base.mapper.CuMemberRetailDetailMapper">
<select id="getChildList" resultType="com.hzs.member.structure.controller.vo.ChildCodeVO">
SELECT
cud.CHILD_NODE
FROM
CU_MEMBER cu LEFT JOIN
${ settleTableName } cud ON cu.PK_ID = cud.PK_MEMBER
WHERE
cu.MEMBER_CODE = #{ memberCode }
AND cud.STAGE = #{ stage }
AND cud.STAGE_STATUS = #{ stageStatus }
</select>
<select id="getFindCumemberRetailDetail" resultType="java.lang.Integer">
select 1
from user_tables
where table_name = upper(#{settleTableName})
</select>
<select id="getCuMemberRetailDetailExt"
resultType="com.hzs.common.domain.member.achieve.CuMemberRetailDetail">
SELECT
cud.*
FROM
CU_MEMBER cu
LEFT JOIN ${ settleTableName } cud ON cu.PK_ID = cud.PK_MEMBER
WHERE
cu.MEMBER_CODE = #{ memberCode }
AND STAGE = #{stage}
AND STAGE_STATUS = #{stageStatus}
AND CHILD_NODE = #{childNode}
</select>
</mapper>

View File

@ -402,6 +402,8 @@ public enum EOperationBusiness {
MONTHLY_JOB_LEVEL("月度职级名单查询"),
MEMBER_RISK_CONTROL("K值风控设置"),
MEMBER_RETAIL_STAT("收益区域数据"),
MEMBER_RETAIL_CHILDNODE("会员子节点查询"),
MEMBER_RETAIL_TREE("三阶段结构")
;

View File

@ -401,6 +401,8 @@ public enum EOperationModule {
MEMBER_RISK_CONTROL("K值风控设置"),
ORDER_SYNC("同步失败订单"),
MEMBER_RETAIL_CHILDNODE("会员子节点查询"),
MEMBER_RETAIL_TREE("三阶段结构")
;
/**