递归企业部门

 根据部门名称搜索,如果该部门是子部门,父部门也要同时递归出来

    /*/*
    *@参   数:     [parentCode]:父级编码 officeName:部门名称
    *@返回 值:
    */
    public List findCompanyDept(String parentCode,String officeName){

        List<Map> list = new ArrayList<>();
        Example example = new Example(SysOffice.class);
        Example.Criteria criteria = example.createCriteria();
        if(!StringUtils.isEmpty(officeName)){
            criteria.andLike("officeName","%"+officeName+"%");
            List<SysOffice> listSysOffice = sysOfficeMapper.selectByExample(example);
            return  convertListToTree(listOfficeDesc(listSysOffice),"0");
        }else{
            if(StringUtils.isEmpty(parentCode)){
                parentCode = "0";
            }
            criteria.andEqualTo("parentCode",parentCode);
            List<SysOffice> listSysOffice = sysOfficeMapper.selectByExample(example);
            if(listSysOffice!=null&&listSysOffice.size()>0){
                for (SysOffice sysOffice : listSysOffice) {
                    Map map = new HashMap();
                    map.put("officeCode",sysOffice.getOfficeCode());
                    map.put("officeName",sysOffice.getOfficeName());
                    map.put("parentCode",sysOffice.getParentCode());
                    List companyDept = findCompanyDept(sysOffice.getOfficeCode(),"");
                    map.put("child",companyDept);
                    list.add(map);
                }
            }
        }

        return list;

    }
    //根据子节点倒查父节点
    private List<SysOffice> listOfficeDesc(List<SysOffice> listSysOffice) {
        List<String> parentCodeList = new ArrayList<>();
        listSysOffice.forEach(so -> {
            String parentCodes = so.getParentCodes();
            String[] s = parentCodes.split(",");
            parentCodeList.addAll(Arrays.asList(s));
        });
        Example example = new Example(SysOffice.class);
        Example.Criteria criteria = example.createCriteria();
        ArrayList<SysOffice> result = new ArrayList<>();
        if(parentCodeList.size()>0){
            criteria.orIn("officeCode", parentCodeList);
            List<SysOffice> sysOffices = sysOfficeMapper.selectByExample(example);
            result.addAll(sysOffices);
        }
        result.addAll(listSysOffice);
        return result;
    }

    private List<OfficeTree> convertListToTree(List<SysOffice> in, String parentCode) {

        List<SysOffice> parent = in.stream().filter(i -> i.getParentCode().equals(parentCode)).collect(Collectors.toList());
        List<OfficeTree> officeTrees = new ArrayList<>();
        parent.forEach(i -> {
            OfficeTree officeTree = new OfficeTree(i);
            officeTrees.add(officeTree);
        });
        return officeTrees.stream().peek(i -> i.setChild(convertListToTree(in,i.getOfficeCode()))).collect(Collectors.toList());
    }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值