实体类
@Data
public class OrganizationEntity implements Serializable {
private Integer id;
private String organizationName; //部门名称
private String organizationUuid;
private String type;// 根据type来判断组织部门:SELF_OU:组织;DEPARTMENT:部门
private String rootNode;//是否是根节点
private Integer levelNumber; //部门排序号
private Integer status;//部门状态:1:启用;0:停用
private String parentUuid;//父节点id
业务代码
@ApiOperation(value = "获取组织架构及其员工", notes = "", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@CrossOrigin(origins = "*")//解决跨域问题的标签
@GetMapping("/findOrganizationAndStaff")
public R findOrganizationAndStaff(HttpServletRequest request) {
Map<Object, Object> organizationMap = new HashMap<>();
//获取所有根组织架构
List<OrganizationEntity> rootOrganizations = organizationService.getRootOrganization();
for (OrganizationEntity rootOrganization : rootOrganizations) {
Map<String, Object> memberMap = new HashMap<>();
String id = rootOrganization.getId() + "";//组织id
//获取该组织的管理者
List<Map<String, Object>> organizationAdmins = organizationService.getOrganizationAdmin(id);
//组织员工
List<Map<String, Object>> organizationStaffs = organizationService.getOrganizationStaff(id);
//展示子节点组织及其管理员和员工
Map<Object, Object> childOrganization = findChildOrganization(rootOrganization.getOrganizationUuid());
memberMap.put("admin", organizationAdmins);
memberMap.put("staff", organizationStaffs);
memberMap.put("childOrganization", childOrganization);
organizationMap.put(rootOrganization, memberMap);
}
return new R().put("data", organizationMap);
}
//递归查询子组织架构及其成员
private Map<Object, Object> findChildOrganization(String parentUuid) {
Map<Object, Object> map = new HashMap<>();
Map<String, Object> memberMap = new HashMap<>();
List<OrganizationEntity> childOrganizations = organizationService.getChildOrganization(parentUuid);
for (OrganizationEntity or : childOrganizations) {
Map<Object, Object> childOrganization = findChildOrganization(or.getOrganizationUuid());
String id = or.getId() + "";
//获取该组织的管理者
List<Map<String, Object>> organizationAdmins = organizationService.getOrganizationAdmin(id);
//组织员工
List<Map<String, Object>> organizationStaffs = organizationService.getOrganizationStaff(id);
memberMap.put("admin", organizationAdmins);
memberMap.put("staff", organizationStaffs);
memberMap.put("childOrganization", childOrganization);
map.put(or, memberMap);
}
return map;
}
用postman测试是这样的结果
"OrganizationEntity(id=143, organizationName=四川省环境政策研究与规划院, organizationUuid=3be864f2c61047c69f7ad2d06eb54f4b, type=DEPARTMENT, rootNode=0, levelNumber=326, status=1, parentUuid=root)": {
"admin": [],
"staff": [],
"childOrganization": {
"OrganizationEntity(id=148, organizationName=能源与气候变化研究中心, organizationUuid=55fb490a57ba449889fa97aa608980be, type=DEPARTMENT, rootNode=0, levelNumber=70, status=1, parentUuid=3be864f2c61047c69f7ad2d06eb54f4b)": {
"admin": [],
"staff": [],
"childOrganization": {}
},
"OrganizationEntity(id=144, organizationName=环境政策研究部, organizationUuid=0fca9e074b454254bbd4ee6890c80ab3, type=DEPARTMENT, rootNode=0, levelNumber=20, status=1, parentUuid=3be864f2c61047c69f7ad2d06eb54f4b)": {
"admin": [],
"staff": [],
"childOrganization": {}
},
"OrganizationEntity(id=151, organizationName=战略规划部, organizationUuid=dab737faca564a30993bdcc2aacca924, type=DEPARTMENT, rootNode=0, levelNumber=40, status=1, parentUuid=3be864f2c61047c69f7ad2d06eb54f4b)": {
"admin": [],
"staff": [],
"childOrganization": {}
},