根据部门名称搜索,如果该部门是子部门,父部门也要同时递归出来
/*/*
*@参 数: [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());
}