diff --git a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/SchGroupController.java b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/SchGroupController.java index c3ebb24..419300e 100644 --- a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/SchGroupController.java +++ b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/SchGroupController.java @@ -27,25 +27,27 @@ public class SchGroupController { private ISchInfoService schInfoService; @GetMapping("GetTeaTree") - @Operation(summary = "获取学校教师组树+教师(SchSerID 与 schId 二选一)") + @Operation(summary = "获取学校教师组树(toUser 默认 true 带教师,false 仅返回组骨架;SchSerID 与 schId 二选一)") public List getTeaTree(@RequestParam(value = "SchSerID", required = false) String SchSerID, - @RequestParam(value = "schId", required = false) Integer schId) { + @RequestParam(value = "schId", required = false) Integer schId, + @RequestParam(value = "toUser", required = false, defaultValue = "true") boolean toUser) { Integer resolvedSchId = resolveSchId(schId, SchSerID); if (resolvedSchId == null) { return Collections.emptyList(); } - return comSchTreeService.getSchTeaTree(resolvedSchId); + return comSchTreeService.getSchTeaTree(resolvedSchId, toUser); } @GetMapping("GetStuTree") - @Operation(summary = "获取学校学生树:学校→学段→年级→班级→学生(SchSerID 与 schId 二选一)") + @Operation(summary = "获取学校学生树:学校→学段→年级→班级→学生(toUser 默认 true 带学生,false 仅返回组织骨架;SchSerID 与 schId 二选一)") public List getStuTree(@RequestParam(value = "SchSerID", required = false) String SchSerID, - @RequestParam(value = "schId", required = false) Integer schId) { + @RequestParam(value = "schId", required = false) Integer schId, + @RequestParam(value = "toUser", required = false, defaultValue = "true") boolean toUser) { Integer resolvedSchId = resolveSchId(schId, SchSerID); if (resolvedSchId == null) { return Collections.emptyList(); } - return comSchTreeService.getSchStuTree(resolvedSchId); + return comSchTreeService.getSchStuTree(resolvedSchId, toUser); } /** diff --git a/src/main/java/com/yunhai/bschclassmanage/service/IComSchTreeService.java b/src/main/java/com/yunhai/bschclassmanage/service/IComSchTreeService.java index 4d15611..e0fb065 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/IComSchTreeService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/IComSchTreeService.java @@ -29,9 +29,9 @@ public interface IComSchTreeService { BoaGroup getTeacherTree(Integer schId); - List getSchTeaTree(Integer schId); + List getSchTeaTree(Integer schId, boolean toUser); - List getSchStuTree(Integer schId); + List getSchStuTree(Integer schId, boolean toUser); List getSchoolList(); diff --git a/src/main/java/com/yunhai/bschclassmanage/service/impl/com/ComSchTreeService.java b/src/main/java/com/yunhai/bschclassmanage/service/impl/com/ComSchTreeService.java index fef4a64..8fd1371 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/impl/com/ComSchTreeService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/impl/com/ComSchTreeService.java @@ -446,9 +446,10 @@ public class ComSchTreeService implements IComSchTreeService { * 结构:学校根(type=1) → 教师组(type=1) → 子组递归 + 教师叶子(type=2)。 * 节点字段:pid=父节点id(根为0)、no=组取 BoaGroup.sort / 教师固定 0、 * isParent=组true/教师false、photo 固定空串(本库无头像数据)。 + * toUser=false 时只返回组织骨架(不查询、不挂载教师叶子)。 * 返回单元素列表(学校根节点)。 */ - public List getSchTeaTree(Integer schId) { + public List getSchTeaTree(Integer schId, boolean toUser) { // 1. 学校根节点(远程组树的根即学校节点,取不到时用学校名兜底) List schTree = getSchTree(schId); BoaGroup schRoot = (schTree == null || schTree.isEmpty()) ? null : schTree.get(0); @@ -479,37 +480,39 @@ public class ComSchTreeService implements IComSchTreeService { groupVoMap.put(teaRootVo.getId(), teaRootVo); rootVo.getChildren().add(teaRootVo); - // 3. 挂教师:多组各挂一份;无组或组不在树中的落到"未分组" - List teacherList = schTeacherService.getSchTeacherList(schId); - if (CollectionUtils.isNotEmpty(teacherList)) { - List teaIds = teacherList.stream() - .map(SchTeacher::getTeaId) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - Map> teaIdToGroupIds = schTeacherGroupRepository.findByTeaIdInAndSchId(teaIds, schId) - .stream() - .collect(Collectors.groupingBy(SchTeacherGroup::getTeaId, - Collectors.mapping(SchTeacherGroup::getGroupId, Collectors.toList()))); + // 3. 挂教师:多组各挂一份;无组或组不在树中的落到"未分组"(toUser=false 时不带用户,跳过查询) + if (toUser) { + List teacherList = schTeacherService.getSchTeacherList(schId); + if (CollectionUtils.isNotEmpty(teacherList)) { + List teaIds = teacherList.stream() + .map(SchTeacher::getTeaId) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + Map> teaIdToGroupIds = schTeacherGroupRepository.findByTeaIdInAndSchId(teaIds, schId) + .stream() + .collect(Collectors.groupingBy(SchTeacherGroup::getTeaId, + Collectors.mapping(SchTeacherGroup::getGroupId, Collectors.toList()))); - for (SchTeacher teacher : teacherList) { - if (teacher.getTeaId() == null) { - continue; - } - List groupIds = teaIdToGroupIds.getOrDefault(teacher.getTeaId(), Collections.emptyList()); - if (groupIds.isEmpty()) { - TeaTreeVO ungrouped = getOrCreateUngrouped(teaRootVo, groupVoMap); - ungrouped.getChildren().add(newTeacherNode(teacher, ungrouped.getId())); - } else { - for (Integer groupId : groupIds) { - TeaTreeVO groupVo = groupVoMap.get(groupId); - if (groupVo == null) { - groupVo = getOrCreateUngrouped(teaRootVo, groupVoMap); - } - // 同一节点下按 teaId 去重(防脏数据中同一组出现多条关联) - boolean exists = groupVo.getChildren().stream() - .anyMatch(c -> Integer.valueOf(2).equals(c.getType()) && c.getId().equals(teacher.getTeaId())); - if (!exists) { - groupVo.getChildren().add(newTeacherNode(teacher, groupVo.getId())); + for (SchTeacher teacher : teacherList) { + if (teacher.getTeaId() == null) { + continue; + } + List groupIds = teaIdToGroupIds.getOrDefault(teacher.getTeaId(), Collections.emptyList()); + if (groupIds.isEmpty()) { + TeaTreeVO ungrouped = getOrCreateUngrouped(teaRootVo, groupVoMap); + ungrouped.getChildren().add(newTeacherNode(teacher, ungrouped.getId())); + } else { + for (Integer groupId : groupIds) { + TeaTreeVO groupVo = groupVoMap.get(groupId); + if (groupVo == null) { + groupVo = getOrCreateUngrouped(teaRootVo, groupVoMap); + } + // 同一节点下按 teaId 去重(防脏数据中同一组出现多条关联) + boolean exists = groupVo.getChildren().stream() + .anyMatch(c -> Integer.valueOf(2).equals(c.getType()) && c.getId().equals(teacher.getTeaId())); + if (!exists) { + groupVo.getChildren().add(newTeacherNode(teacher, groupVo.getId())); + } } } } @@ -588,9 +591,10 @@ public class ComSchTreeService implements IComSchTreeService { * 班级=sch_class(id=group_class_id,名称 cname 优先,no=sort,不含毕业班), * 学生仅取在读正常状态(复用按班缓存查询,已过滤休学/转出/禁用并按 sort 排序)。 * 节点契约与 getSchTeaTree 相同:组织节点 type=1、isParent=true;学生叶子 type=2、isParent=false、children=null。 + * toUser=false 时只返回组织骨架(不查询、不挂载学生叶子)。 * 返回单元素列表(学校根节点)。 */ - public List getSchStuTree(Integer schId) { + public List getSchStuTree(Integer schId, boolean toUser) { TeaTreeVO rootVo = new TeaTreeVO(); rootVo.setId(schId); rootVo.setName(getSchoolName(schId)); @@ -637,12 +641,15 @@ public class ComSchTreeService implements IComSchTreeService { grade.getGradeId(), clazz.getSort()); gradeVo.getChildren().add(classVo); - List students = schStudentService.getSchGradeClassStudentCacheList(schId, null, null, clazz.getClassId()); - for (SchStudent student : students) { - if (student.getStuId() == null) { - continue; + // toUser=false 时不带用户,跳过按班查询 + if (toUser) { + List students = schStudentService.getSchGradeClassStudentCacheList(schId, null, null, clazz.getClassId()); + for (SchStudent student : students) { + if (student.getStuId() == null) { + continue; + } + classVo.getChildren().add(newStudentNode(student, clazz.getClassId())); } - classVo.getChildren().add(newStudentNode(student, clazz.getClassId())); } } }