/** * 初始化部门表parentids **/ public void initParentIds() { List<Department> departments = departmentMapper.pageList(new HashMap<>()); Map<Integer, Department> groupMap = departments.stream().collect(Collectors.toMap(Department::getId, s -> s)); // 循环获取父级组织路径 departments.stream().forEach(department -> { ArrayList arrayList = new ArrayList(); arrayList.add(department.getId()); String lastPids = getParentIds(groupMap, department.getId(), arrayList); department.setParentIds(lastPids); }); batchUpdateParentIds(departments); } /** * 递归获取部门路径 **/ private String getParentIds(Map<Integer, Department> groupMap, Integer key, ArrayList arrayList) { if (groupMap.containsKey(key)) { Department department = groupMap.get(key); arrayList.add(department.getParentId()); // 递归取出父级的父级ID String lastPids = getParentIds(groupMap, department.getParentId(), arrayList); return lastPids; } else { // 当取不到父级时,倒序集合父级排在前面 Collections.reverse(arrayList); // 将集合转换成字符串,用逗号隔开 return StringUtils.join(arrayList, ",") + ","; } } /** * 批量更新部门路径 **/ private void batchUpdateParentIds(List<Department> departments) { int len = 300; if (departments.size() < len) { departmentMapper.batchUpdateParentIds(departments); } else { int size = departments.size(); int count = (size + len - 1) / len; for (int i = 0; i < count; i++) { // 以300条数据为组切割集合,当最后数据不足300条全部取出 List<Department> subListOK = departments.subList(i * len, ((i + 1) * len > size ? size : len * (i + 1))); departmentMapper.batchUpdateParentIds(subListOK); } } }
/** * 设置部门的父级ids */ private void deptSetPids(Department department) { if (null == department.getParentId() || department.getParentId().equals(0)) { department.setParentId(0); department.setParentIds("0," + department.getId() + ","); } else { Integer pid = department.getParentId(); Department temp = this.load(pid); String pids = temp.getParentIds(); department.setParentId(pid); department.setParentIds(pids + department.getId() + ","); } }