/DbClass/GetSchteaList groupids

This commit is contained in:
2026-08-31 12:11:11 +08:00
parent 1448e2ee90
commit 5aa13e8d25
@@ -23,13 +23,12 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/** Compatibility endpoints used by BestSchool.IBaseClass.BLL.DbClass consumers. */
@Tag(name = "DbClass", description = "基础班级数据接口")
@Tag(name = "DbClass", description = "School class data APIs")
@RestController
@RequestMapping(Config.OAPI + "/DbClass/")
@CrossOrigin(originPatterns = {"*"}, allowCredentials = "true")
@@ -40,35 +39,32 @@ public class DbClassController {
@Autowired private SchInfoRepository schInfoRepository;
@GetMapping("GetSchteaList")
@Operation(summary = "获取学校教师列表", description = "根据学校 ID 查询学校下的全部教师信息;教师属于多个组时,每个组返回一条记录")
@Operation(summary = "Get school teachers", description = "Returns one row for each active teacher-group membership. A teacher in multiple groups is returned multiple times.")
public ResponseEntity<List<Map<String, Object>>> getSchteaList(
@Parameter(description = "学校 ID", required = true, example = "3")
@Parameter(description = "School ID", required = true, example = "3")
@RequestParam("Group") Integer group) {
if (group == null || group <= 0) return ResponseEntity.badRequest().build();
SchInfoVO school = schInfoService.GetSchFirst(group);
String schSerId = school == null ? schInfoRepository.findBySchId(group).map(SchInfo::getSchSerId).orElse(null) : school.getSchSerId();
String schSerId = school == null
? schInfoRepository.findBySchId(group).map(SchInfo::getSchSerId).orElse(null)
: school.getSchSerId();
List<SchTeacherGroup> memberships = schTeacherGroupRepository.findBySchIdAndTransferStatus(group, 0);
if (memberships == null || memberships.isEmpty()) return ResponseEntity.ok(Collections.emptyList());
Map<Integer, List<Integer>> teacherGroupIds = memberships.stream()
.filter(m -> m.getTeaId() != null && m.getGroupId() != null)
.collect(Collectors.groupingBy(SchTeacherGroup::getTeaId, LinkedHashMap::new,
Collectors.mapping(SchTeacherGroup::getGroupId, Collectors.toList())));
List<Integer> teaIds = memberships.stream().map(SchTeacherGroup::getTeaId)
.filter(java.util.Objects::nonNull).distinct().collect(Collectors.toList());
Map<Integer, SchTeacher> teachers = schTeacherRepository.findByTeaIdIn(teaIds).stream()
.collect(Collectors.toMap(SchTeacher::getTeaId, t -> t, (a, b) -> a, LinkedHashMap::new));
// Keep one output row per school-group membership, including duplicate teachers.
List<Map<String, Object>> result = memberships.stream()
.map(SchTeacherGroup::getTeaId)
.filter(java.util.Objects::nonNull)
.map(schTeacherRepository::findByTeaId)
.filter(Optional::isPresent)
.map(Optional::get)
.map(teacher -> teacherRow(teacher, schSerId, teacherGroupIds.getOrDefault(teacher.getTeaId(), Collections.emptyList())))
.filter(membership -> teachers.get(membership.getTeaId()) != null)
.map(membership -> teacherRow(teachers.get(membership.getTeaId()), schSerId,membership.getGroupId()))
.collect(Collectors.toList());
return ResponseEntity.ok(result);
}
private Map<String, Object> teacherRow(SchTeacher teacher, String schSerId, List<Integer> groupIds) {
private Map<String, Object> teacherRow(SchTeacher teacher, String schSerId, Integer groupId) {
Map<String, Object> row = new LinkedHashMap<>();
row.put("SchSerID", schSerId);
row.put("TeaTel", teacher.getTel());
@@ -76,7 +72,7 @@ public class DbClassController {
row.put("UserTeaSerID", teacher.getTeaId());
row.put("TeaIDCard", teacher.getIdCard());
row.put("TeaNo", teacher.getSort());
row.put("GroupIds", groupIds);
row.put("GroupID", groupId);
return row;
}
}