0
点赞
收藏
分享

微信扫一扫

树结构查询逻辑实现

Brose 2024-06-17 阅读 5

1:数据表的设计

CREATE TABLE `fault_category` (
  `id` varchar(64) NOT NULL COMMENT '主键id ',
  `parent_id` varchar(32) NOT NULL DEFAULT '' COMMENT '父类型id',
  `fault_type` varchar(100) NOT NULL COMMENT '故障类型',
  `create_date` datetime DEFAULT NULL COMMENT '创建时间',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
  `update_date` datetime DEFAULT NULL COMMENT '更新时间',
  `update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
  `del_flag` char(1) DEFAULT '0' COMMENT '0:正常 1: 删除',
  `tenant_id` varchar(64) NOT NULL DEFAULT '00000000' COMMENT '租户id',
  `remarks` varchar(255) DEFAULT NULL COMMENT '备注',
  `organization_id` varchar(64) DEFAULT NULL COMMENT '组织id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='故障类型';

树结构查询逻辑实现_System

2:代码逻辑实现 实体类:

/**
     * id
     */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private String id;

    /**
     * 故障类型
     */
    @TableField(value = "fault_type")
    private String faultType;

    /**
     * 父级Id
     */
    @TableField(value = "parent_id")
    private String parentId;

    /**
     * 下级分类
     */
    @TableField(exist = false)
    private List<HitchTypeManagement> childMenu=new ArrayList<>();

dao层:

List<HitchTypeManagement> getTree();

service层:

@Override
    public List<HitchTypeManagement> getTree() {
        //先查询所有
        List<HitchTypeManagement> hitchTypeManagementList = hitchTypeMapper.getTree();
        System.out.println(hitchTypeManagementList.size());
        //声明一个集合,用来保存结果
        List<HitchTypeManagement> deptTrees = new ArrayList<>();
        //遍历查询出来的结果,确定顶级
        for (HitchTypeManagement hitchTypeManagement : hitchTypeManagementList) {
            //如果相等为第一级,这里“0”表示顶级父id
            if ("0".equals(hitchTypeManagement.getParentId())) {
                //打印顶级信息
                System.out.println(hitchTypeManagement.getId() + "," + hitchTypeManagement.getFaultType() + "," + hitchTypeManagement.getParentId());
                //创建树结构对象
                HitchTypeManagement typeTree = new HitchTypeManagement();
                //实例树对象
                typeTree.setId(hitchTypeManagement.getId());
                // 第一级名字(根)
                typeTree.setFaultType(hitchTypeManagement.getFaultType());
                typeTree.setChildMenu(getDepartmentList(hitchTypeManagement.getId(), hitchTypeManagementList));
                //将最终结构封装到集合
                deptTrees.add(typeTree);
            }
        }
        return deptTrees;
    }

    /**
     * @param pid                  所传为最大父级的id,默认值为 0
     * @param hitchTypeManagements
     * @return
     */
    public List<HitchTypeManagement> getDepartmentList(String pid, List<HitchTypeManagement> hitchTypeManagements) {
        List<HitchTypeManagement> typeTrees = new ArrayList<>();
        for (HitchTypeManagement hitchTypeManagement : hitchTypeManagements) {
            //如果所有pid等于父级id
            if (pid.equals(hitchTypeManagement.getParentId())) {
                System.out.println(hitchTypeManagement.getId() + "," + hitchTypeManagement.getFaultType() + "," + hitchTypeManagement.getParentId());
                HitchTypeManagement typeTree = new HitchTypeManagement();
                typeTree.setId(hitchTypeManagement.getId());
                // 第一级名字
                typeTree.setFaultType(hitchTypeManagement.getFaultType());
                //递归
                typeTree.setChildMenu(getDepartmentList(hitchTypeManagement.getId(), hitchTypeManagements));
                typeTrees.add(typeTree);
            }
        }
        return typeTrees;
    }

controller层:

@GetMapping(value = "treeList")
    //    @RequiresPermissions("hitch:type:treeList")
    public String treeList() {
        List<HitchTypeManagement> treeList = hitchTypeService.getTree();
        return Response.successJson(treeList);
    }

测试:

树结构查询逻辑实现_List_02

举报

相关推荐

0 条评论