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='故障类型';
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

树结构查询逻辑实现_主键

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<>();
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

dao层:

List<HitchTypeManagement> getTree();
  • 1.

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;
    }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.

controller层:

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

测试:

树结构查询逻辑实现_List_02