从mysql查询机构表用java解析成机构树

本文介绍了一个基于Java的系统模块设计,该模块通过递归方式构建组织机构树形结构,并提供了相应的API供前端调用。文章详细展示了实体类、Controller层和服务层的具体实现。

数据库表:
这里写图片描述

对应实体:

@Entity
@Table(name = "t_sys_org")
public class SysOrgDTO {
    private Long id;
    private String name;  
    private Long parentId;

    @Transient
    private List<SysOrgDTO> childOrg = new ArrayList<SysOrgDTO>();   
}

Controller层:

@RestController
@RequestMapping("/api/sys/org")
public class OrgController extends BaseController{
    @Autowired
    private OrgBO orgBO;
/**
     *机构树
     * @param orgId
     * @return
     */
    @RequestMapping(value = "/getOrgTree",method = RequestMethod.GET)
    @ApiOperation(value = "机构树",notes="机构树")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "orgId",value = "机构id",dataType = "Long",paramType = "query")
    })
    @ApiResponses(value = {@ApiResponse(code = 200,message = "机构树")})
    public JsonMessage<String> getOrgTree(@RequestParam(value = "orgId",required = false) Long orgId){
        return JsonMessage.successed(JsonUtil.toDefaultJSONString(orgBO.generateTreeNode(orgId),SysOrgDTO.getDefaultJsonFilter()));
    }
}

Service层:

@Service
public class OrgBO {
    @Autowired
    private SysOrgBO sysOrgBO;

    /**
     * 生成机构树
     * @param rootId
     * @return
     */
    public List<SysOrgDTO> generateTreeNode(Long rootId){
        List<SysOrgDTO> root = new ArrayList<SysOrgDTO>();
        if (rootId != null){
            //找到所有一级机构
            root = sysOrgBO.findAll(new NumberCondition("id",rootId,NumberCondition.Handler.EQUAL));
        }else {
            root = sysOrgBO.findAll(new NumberCondition("parentId",0,NumberCondition.Handler.EQUAL));
        }
        //为一级机构设置子机构
        for(SysOrgDTO org:root){
            org.setChildOrg(getChildNode(org.getId()));
        }
        return root;
    }

    /**
     * 根据父id查询所有子机构
     * @param nodeId
     * @return
     */
    public List<SysOrgDTO> getChildNode(Long nodeId){
        //根据父id查询子机构
        List<SysOrgDTO> childNodeList = sysOrgBO.findAll(new NumberCondition("parentId",nodeId,NumberCondition.Handler.EQUAL));
        //子机构下的子机构
        for(SysOrgDTO org:childNodeList){
            org.setChildOrg(getChildNode(org.getId()));//递归
        }
        if (childNodeList.size() == 0){
            return null;
        }
        return childNodeList;
    }
 }

这样返回的是一个list集合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值