1.字典数据
省市县结构在资源中
/*
Date: 13/08/2024 14:27:16
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for kz_meta_nodes
-- ----------------------------
DROP TABLE IF EXISTS `kz_meta_nodes`;
CREATE TABLE `kz_meta_nodes` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '字典编码',
`name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称',
`pid` int NULL DEFAULT NULL COMMENT '父ID(顶级父ID为0)',
`type_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务类型code',
`type_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '业务名称',
`sort` int NULL DEFAULT NULL COMMENT '排序',
`status` int NULL DEFAULT NULL COMMENT '状态(0:启用,1:禁用)',
`business_value` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '拓展value编码',
`remarks` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注说明',
`created_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
`created_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`updated_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人',
`updated_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`deleted_time` datetime NULL DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX `pid`(`pid` ASC) USING BTREE,
INDEX `value`(`value` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 407 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '业务字典表 ' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of kz_meta_nodes
-- ----------------------------
INSERT INTO `kz_meta_nodes` VALUES (352, '143', '球星卡', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (353, '144', '篮球', 352, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (354, '145', '足球', 352, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (355, '146', '橄榄球', 352, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (356, '147', '棒球', 352, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (357, '148', '冰球', 352, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (358, '149', '高尔夫', 352, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (359, '150', '网球', 352, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (360, '185', '3C数码家电', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (361, '186', '3C数码配件', 360, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (362, '187', '电脑', 360, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (363, '188', '电脑配件', 360, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (364, '189', '网络设备', 360, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (365, '190', '影音电器', 360, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (366, '191', '摄影/摄像', 360, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (367, '192', '智能设备', 360, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (368, '193', '家电', 360, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (369, '194', '生活电器', 360, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (370, '195', '服饰内衣', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (371, '196', '男装', 370, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (372, '197', '女装', 370, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (373, '198', '鞋靴箱包', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (374, '199', '男鞋', 373, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (375, '200', '女鞋', 373, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (376, '201', '箱包', 373, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (377, '202', '运动户外', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (378, '203', '运动用品', 377, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (379, '204', '运动服饰', 377, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (380, '205', '自行车', 377, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (381, '206', '钟表配饰', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (382, '207', '钟表', 381, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (383, '208', '时尚饰品', 381, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (384, '209', '打火机', 381, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (385, '210', '瑞士军刀', 381, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (386, '211', '眼镜', 381, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (387, '212', '珠宝文玩', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (388, '213', '珠宝', 387, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (389, '214', '文玩', 387, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (390, '215', '收藏品', 387, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (391, '216', '美妆个护', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (392, '217', '美妆', 391, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (393, '218', '个护', 391, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (394, '219', '食品饮料', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (395, '220', '食品', 394, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (396, '221', '饮品', 394, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (397, '222', '保健品', 394, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (398, '223', '玩具潮玩', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (399, '224', '玩具', 398, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (400, '225', '潮玩', 398, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (401, '226', '动漫周边', 398, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (402, '227', '图书影像', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (403, '228', '图书', 402, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (404, '229', '影音', 402, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (405, '230', '智能家居', 0, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `kz_meta_nodes` VALUES (406, '231', '智能家居', 405, 'realRightType', '物权资产类型', 1, 0, '304754107695108096860436', NULL, NULL, NULL, NULL, NULL, NULL);
SET FOREIGN_KEY_CHECKS = 1;
2.树结构工具类
package com.jiuheng.smartCard.common.utils;
import com.jiuheng.smartCard.vo.KzMetaNodesVO;
import java.util.ArrayList;
import java.util.List;
public class TreeBuildUtil {
// 保存参与构建树形的所有数据(通常数据库查询结果)
public List<KzMetaNodesVO> nodeList = new ArrayList<KzMetaNodesVO>();
/**
* 构造方法
* @param nodeList 将数据集合赋值给nodeList,即所有数据作为所有节点。
*/
public TreeBuildUtil(List<KzMetaNodesVO> nodeList){
this.nodeList = nodeList;
}
/**
* 获取需构建的所有根节点(顶级节点) "0"
* 所有根节点List集合
*/
public List<KzMetaNodesVO> getRootNode(){
// 保存所有根节点(所有根节点的数据)
List<KzMetaNodesVO> rootNodeList = new ArrayList<>();
// treeNode:查询出的每一条数据(节点)
for (KzMetaNodesVO treeNode : nodeList){
// 判断当前节点是否为根节点,此处注意:若parentId类型是String,则要采用equals()方法判断。
if ("0".equals(treeNode.getPid())) {
// 是,添加
rootNodeList.add(treeNode);
}
}
return rootNodeList;
}
/**
* 根据每一个顶级节点(根节点)进行构建树形结构
* @return 构建整棵树
*/
public List<KzMetaNodesVO> buildTree(){
// treeNodes:保存一个顶级节点所构建出来的完整树形
List<KzMetaNodesVO> treeNodes = new ArrayList<KzMetaNodesVO>();
// getRootNode():获取所有的根节点
for (KzMetaNodesVO kzMetaNodesVO : getRootNode()) {
// 将顶级节点进行构建子树
kzMetaNodesVO = buildChildTree(kzMetaNodesVO);
// 完成一个顶级节点所构建的树形,增加进来
treeNodes.add(kzMetaNodesVO);
}
return treeNodes;
}
/**
* 递归-----构建子树形结构
* 根节点(顶级节点)
* @return 整棵树
*/
public KzMetaNodesVO buildChildTree(KzMetaNodesVO kzMetaNodesVO){
List<KzMetaNodesVO> childTree = new ArrayList<KzMetaNodesVO>();
// nodeList:所有节点集合(所有数据)
for (KzMetaNodesVO treeNode : nodeList) {
// 判断当前节点的父节点ID是否等于根节点的ID,即当前节点为其下的子节点
if (treeNode.getPid().equals(kzMetaNodesVO.getCodeId())) {
// 再递归进行判断当前节点的情况,调用自身方法
childTree.add(buildChildTree(treeNode));
}
}
// for循环结束,即节点下没有任何节点,树形构建结束,设置树结果
kzMetaNodesVO.setChildren(childTree);
return kzMetaNodesVO;
}
}
3.入参DTO
package com.jiuheng.smartCard.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class metaNokesDTO {
@Schema(description = "业务类型code")
private String typeCode;
}
4.返参
package com.jiuheng.smartCard.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class KzMetaNodesVO {
/*
* 名称
* */
private String name;
/*
* 父ID(顶级父ID为0)
* */
private String pid;
/*
* value
* */
private String id;
/*
* 主键ID
* */
private String codeId;
/*
* 备注说明
* */
private String remarks;
/*
* 子集,集合
* */
private List<KzMetaNodesVO> children;
}
5.代码编写
1.controller
@GetMapping("/metaNodesMode")
@Operation(summary = "查询树结构")
public CommonResult metaNodesMode(@Valid metaNokesDTO dto) {
List<KzMetaNodesVO> result = kzProductService.metaNodesMode(dto);
return CommonResult.success(result);
}
2.service
List<KzMetaNodesVO> metaNodesMode(metaNokesDTO dto);
3.serviceImpl
@Override
public List<KzMetaNodesVO> metaNodesMode(metaNokesDTO dto) {
//查询出全部类型数据
List<KzMetaNodesVO> result = kzProductDao.seleTypecode(dto);
//树结构工具类
TreeBuildUtil treeBuildUtil = new TreeBuildUtil(result);
result = treeBuildUtil.buildTree();
return result;
}
4.dao
List<KzMetaNodesVO> seleTypecode(metaNokesDTO dto);
5.mapper
<select id="seleTypecode" resultType="com.jiuheng.smartCard.vo.KzMetaNodesVO">
SELECT
`name`,
pid,
`value` AS id,
id AS codeId,
remarks
FROM
kz_meta_nodes
WHERE
type_code = #{typeCode} and status=0
order by sort asc
</select>