diff --git a/pom.xml b/pom.xml index a342bc4..6e70a24 100644 --- a/pom.xml +++ b/pom.xml @@ -183,7 +183,7 @@ spring-boot-starter-aop - + org.springdoc springdoc-openapi-ui diff --git a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/DbClassController.java b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/DbClassController.java index 6794210..782cdf9 100644 --- a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/DbClassController.java +++ b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/DbClassController.java @@ -1,10 +1,17 @@ package com.yunhai.bschclassmanage.controller.oapi.oa; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import com.yunhai.bschclassmanage.Repository.SchInfoRepository; +import com.yunhai.bschclassmanage.Repository.SchTeacherGroupRepository; +import com.yunhai.bschclassmanage.Repository.SchTeacherRepository; import com.yunhai.bschclassmanage.config.Config; +import com.yunhai.bschclassmanage.entity.SchInfo; import com.yunhai.bschclassmanage.entity.SchTeacher; +import com.yunhai.bschclassmanage.entity.SchTeacherGroup; import com.yunhai.bschclassmanage.model.vo.oa.SchInfoVO; import com.yunhai.bschclassmanage.service.ISchInfoService; -import com.yunhai.bschclassmanage.service.ISchTeacherService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.CrossOrigin; @@ -16,36 +23,60 @@ 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 = "基础班级数据接口") @RestController @RequestMapping(Config.OAPI + "/DbClass/") @CrossOrigin(originPatterns = {"*"}, allowCredentials = "true") public class DbClassController { - @Autowired private ISchTeacherService schTeacherService; @Autowired private ISchInfoService schInfoService; + @Autowired private SchTeacherGroupRepository schTeacherGroupRepository; + @Autowired private SchTeacherRepository schTeacherRepository; + @Autowired private SchInfoRepository schInfoRepository; @GetMapping("GetSchteaList") - public ResponseEntity>> getSchteaList(@RequestParam("Group") Integer group) { + @Operation(summary = "获取学校教师列表", description = "根据学校 ID 查询学校下的全部教师信息;教师属于多个组时,每个组返回一条记录") + public ResponseEntity>> getSchteaList( + @Parameter(description = "学校 ID", required = true, example = "950") + @RequestParam("Group") Integer group) { if (group == null || group <= 0) return ResponseEntity.badRequest().build(); SchInfoVO school = schInfoService.GetSchFirst(group); - String schSerId = school == null ? null : school.getSchSerId(); - List teachers = schTeacherService.getSchTeacherList(group); - if (teachers == null || teachers.isEmpty()) return ResponseEntity.ok(Collections.emptyList()); + String schSerId = school == null ? schInfoRepository.findBySchId(group).map(SchInfo::getSchSerId).orElse(null) : school.getSchSerId(); + List memberships = schTeacherGroupRepository.findBySchIdAndTransferStatus(group, 0); + if (memberships == null || memberships.isEmpty()) return ResponseEntity.ok(Collections.emptyList()); - List> result = teachers.stream().map(teacher -> { - Map row = new LinkedHashMap<>(); - row.put("SchSerID", schSerId); - row.put("TeaTel", teacher.getTel()); - row.put("TeaName", teacher.getName()); - row.put("UserTeaSerID", teacher.getTeaId()); - row.put("TeaIDCard", teacher.getIdCard()); - row.put("TeaNo", teacher.getSort()); - return row; - }).collect(Collectors.toList()); + Map> teacherGroupIds = memberships.stream() + .filter(m -> m.getTeaId() != null && m.getGroupId() != null) + .collect(Collectors.groupingBy(SchTeacherGroup::getTeaId, LinkedHashMap::new, + Collectors.mapping(SchTeacherGroup::getGroupId, Collectors.toList()))); + + // Keep one output row per school-group membership, including duplicate teachers. + List> 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()))) + .collect(Collectors.toList()); return ResponseEntity.ok(result); } + + private Map teacherRow(SchTeacher teacher, String schSerId, List groupIds) { + Map row = new LinkedHashMap<>(); + row.put("SchSerID", schSerId); + row.put("TeaTel", teacher.getTel()); + row.put("TeaName", teacher.getName()); + row.put("UserTeaSerID", teacher.getTeaId()); + row.put("TeaIDCard", teacher.getIdCard()); + row.put("TeaNo", teacher.getSort()); + row.put("GroupIds", groupIds); + return row; + } } diff --git a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/FamilyCompatController.java b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/FamilyCompatController.java index f0ea517..46056b1 100644 --- a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/FamilyCompatController.java +++ b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/FamilyCompatController.java @@ -1,19 +1,25 @@ package com.yunhai.bschclassmanage.controller.oapi.oa; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; + import com.yunhai.bschclassmanage.config.Config; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.*; +@Tag(name = "FamilyCompat", description = "FamilyCompat related APIs") @RestController @RequestMapping(Config.OAPI+"/Common/FamCom/") @CrossOrigin(originPatterns = {"*"}, allowCredentials = "true") public class FamilyCompatController { @PostMapping("GetStuUserFamIDList") + @Operation(summary = "getStuUserFamIdList") public ResponseEntity> getStuUserFamIdList(@RequestBody(required=false) String stuIds) { return ResponseEntity.ok(Collections.emptyList()); } @PostMapping("GetAllStuFamMem") + @Operation(summary = "getAllStuFamMem") public ResponseEntity>> getAllStuFamMem(@RequestBody(required=false) String stuIds) { return ResponseEntity.ok(Collections.emptyList()); } 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 61e99fd..b793444 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 @@ -1,5 +1,8 @@ package com.yunhai.bschclassmanage.controller.oapi.oa; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; + import com.yunhai.bschclassmanage.config.Config; import com.yunhai.bschclassmanage.model.vo.oa.SchInfoVO; import com.yunhai.bschclassmanage.service.ISchInfoService; @@ -9,6 +12,7 @@ import org.springframework.web.bind.annotation.*; import java.util.List; +@Tag(name = "SchGroup", description = "SchGroup related APIs") @RestController @RequestMapping(Config.OAPI+"/SchGroup/") @CrossOrigin(originPatterns = {"*"}, allowCredentials = "true") diff --git a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/SchInfoController.java b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/SchInfoController.java index 198498c..d806f47 100644 --- a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/SchInfoController.java +++ b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/SchInfoController.java @@ -1,5 +1,8 @@ package com.yunhai.bschclassmanage.controller.oapi.oa; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; + import com.yunhai.bschclassmanage.Repository.SchInfoRepository; import com.yunhai.bschclassmanage.config.Config; import com.yunhai.bschclassmanage.entity.SchInfo; @@ -12,6 +15,7 @@ import org.springframework.web.bind.annotation.*; import java.util.*; import java.util.stream.Collectors; +@Tag(name = "SchInfo", description = "SchInfo related APIs") @RestController @RequestMapping(Config.OAPI+"/SchInfo/") @CrossOrigin(originPatterns = {"*"}, allowCredentials = "true") @@ -20,24 +24,29 @@ public class SchInfoController { @Autowired private SchInfoRepository schInfoRepository; @GetMapping("GetSchlist") + @Operation(summary = "获取学校列表", description = "根据多个学校 ID 查询学校") public ResponseEntity> GetSchlist(@RequestParam(required = false) String SchIDArr) { return ResponseEntity.ok(schInfoService.getSchVOList(SchIDArr)); } @GetMapping("AllList") + @Operation(summary = "获取全部学校列表", description = "查询全部学校") public ResponseEntity> AllList() { return ResponseEntity.ok(schInfoService.getSchVOList(null)); } @GetMapping("GetSchFirst") + @Operation(summary = "获取单个学校校", description = "根据单个学校 ID 查询学校") public ResponseEntity GetSchFirst(@RequestParam(required = false) String SchID) { return ResponseEntity.ok(SchID == null ? null : schInfoService.GetSchFirst(SchID)); } @GetMapping("GetUserSchFirst") + @Operation(summary = "获取学校", description = "根据用户中心 ID 查询学校") public ResponseEntity GetUserSchFirst(@RequestParam(required = false) Integer UserSchID) { return ResponseEntity.ok(UserSchID == null ? null : schInfoService.GetSchFirst(UserSchID)); } @GetMapping("GetUserSchlist") + @Operation(summary = "获取学校列表", description = "根据用户中心多个 ID 查询学校") public ResponseEntity> GetUserSchlist(@RequestParam(required = false) String UserSchIds) { if (UserSchIds == null || UserSchIds.trim().isEmpty()) return ResponseEntity.ok(Collections.emptyList()); Set ids = parseInts(UserSchIds); @@ -47,6 +56,7 @@ public class SchInfoController { } @GetMapping("GetSchoolByGroupId") + @Operation(summary = "获取学校列表", description = "根据用户中心组 ID 查询学校") public ResponseEntity> GetSchoolByGroupId(@RequestParam(required = false) Integer groupId) { if (groupId == null || groupId == 0) return ResponseEntity.ok(Collections.emptyList()); return ResponseEntity.ok(schInfoRepository.findAll().stream() @@ -54,6 +64,7 @@ public class SchInfoController { } @GetMapping("GetSchoolBySchoolenId") + @Operation(summary = "获取学校学制", description = "根据用户中心组 ID 查询学校学制") public ResponseEntity>> GetSchoolBySchoolenId(@RequestParam(required = false) Integer groupId) { return ResponseEntity.ok(Collections.emptyList()); } diff --git a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/SchSubController.java b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/SchSubController.java index 3f6908e..14eed15 100644 --- a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/SchSubController.java +++ b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/SchSubController.java @@ -1,5 +1,8 @@ package com.yunhai.bschclassmanage.controller.oapi.oa; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; + import com.yunhai.bschclassmanage.Repository.*; import com.yunhai.bschclassmanage.config.Config; import com.yunhai.bschclassmanage.entity.*; @@ -10,6 +13,7 @@ import org.springframework.web.bind.annotation.*; import java.util.*; import java.util.stream.Collectors; +@Tag(name = "SchSub", description = "SchSub related APIs") @RestController @RequestMapping(Config.OAPI+"/SubInfo/") @CrossOrigin(originPatterns = {"*"}, allowCredentials = "true") @@ -19,6 +23,7 @@ public class SchSubController { @Autowired private SchClassTeachRepository teachRepository; @GetMapping("GetSchSublist") + @Operation(summary = "GetSchSublist") public ResponseEntity>> GetSchSublist(@RequestParam(required=false) String SchID, @RequestParam(required=false) Integer schooling, @RequestParam(required=false) Integer gradeId) { if (SchID == null || SchID.trim().isEmpty()) return ResponseEntity.ok(Collections.emptyList()); Optional school = schInfoRepository.findBySchSerId(SchID); @@ -27,6 +32,7 @@ public class SchSubController { } @GetMapping("GetSchIdsSublist") + @Operation(summary = "GetSchIdsSublist") public ResponseEntity>> GetSchIdsSublist(@RequestParam(required=false) String SchIds) { if (SchIds == null || SchIds.trim().isEmpty()) return ResponseEntity.ok(Collections.emptyList()); List ids = OaCompatSupport.strings(SchIds); @@ -36,6 +42,7 @@ public class SchSubController { } @GetMapping("GetSchTeaSublist") + @Operation(summary = "GetSchTeaSublist") public ResponseEntity> GetSchTeaSublist(@RequestParam(required=false) String UserTeaSerID) { if (UserTeaSerID == null) return ResponseEntity.ok(Collections.emptyList()); try { @@ -45,6 +52,7 @@ public class SchSubController { } @GetMapping("GetSchTeachSublist") + @Operation(summary = "GetSchTeachSublist") public ResponseEntity> GetSchTeachSublist(@RequestParam(required=false) String SchID) { if (SchID == null) return ResponseEntity.ok(Collections.emptyList()); Optional school = schInfoRepository.findBySchSerId(SchID); diff --git a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/SchoolingController.java b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/SchoolingController.java index aba934d..b985ff4 100644 --- a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/SchoolingController.java +++ b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/SchoolingController.java @@ -1,5 +1,8 @@ package com.yunhai.bschclassmanage.controller.oapi.oa; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; + import com.yunhai.bschclassmanage.Repository.*; import com.yunhai.bschclassmanage.config.Config; import com.yunhai.bschclassmanage.entity.*; @@ -10,6 +13,7 @@ import org.springframework.web.bind.annotation.*; import java.util.*; import java.util.stream.Collectors; +@Tag(name = "Schooling", description = "Schooling related APIs") @RestController @RequestMapping(Config.OAPI+"/Schoolen/") @CrossOrigin(originPatterns = {"*"}, allowCredentials = "true") @@ -25,6 +29,7 @@ public class SchoolingController { @Autowired private SchDicSubjectRepository subjectRepository; @GetMapping("GetSchLenLevellist") + @Operation(summary = "获取学校学制列表", description = "根据用 SchSerID 查询学校学制") public ResponseEntity>> GetSchLenLevellist(@RequestParam(required=false) String SchSerID) { if (SchSerID == null || SchSerID.trim().isEmpty()) return ResponseEntity.ok(Collections.emptyList()); SchInfoVOHolder school = findSchool(SchSerID); @@ -33,12 +38,14 @@ public class SchoolingController { } @GetMapping("GetLevelIdlist") + @Operation(summary = "获取学校学制列表", description = "根据用 Schooling 查询学校学制") public ResponseEntity>> GetLevelIdlist(@RequestParam(required=false) Integer Schooling) { if (Schooling == null || Schooling == 0) return ResponseEntity.ok(Collections.emptyList()); return ResponseEntity.ok(gradeRepository.findBySchSystemId(Schooling).stream().map(this::grade).collect(Collectors.toList())); } @GetMapping("GetSchLenLevelFirst") + @Operation(summary = "获取学校学制列表", description = "根据用 年级id 查询学校学制") public ResponseEntity> GetSchLenLevelFirst(@RequestParam(required=false) String GradeId) { if (GradeId == null) return ResponseEntity.ok(null); try { @@ -48,6 +55,7 @@ public class SchoolingController { } @GetMapping("GetSchLenlist") + @Operation(summary = "获取学校学制长度", description = "根据用 SchSerID 查询学校学制长度") public ResponseEntity>> GetSchLenlist(@RequestParam(required=false) String SchSerID) { if (SchSerID == null || SchSerID.trim().isEmpty()) return ResponseEntity.ok(Collections.emptyList()); SchInfoVOHolder school = findSchool(SchSerID); @@ -57,6 +65,7 @@ public class SchoolingController { } @GetMapping("GetAllClassSubject") + @Operation(summary = "获取全部", description = "根据用 SchSerID 查询学校学制长度") public ResponseEntity>> GetAllClassSubject(@RequestParam(required=false) Integer schId, @RequestParam(required=false) String schserid, @RequestParam(required=false) String startTime) { return ResponseEntity.ok(Collections.emptyList()); } diff --git a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/StuInfoController.java b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/StuInfoController.java index 5bdca7e..cf63b8f 100644 --- a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/StuInfoController.java +++ b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/StuInfoController.java @@ -1,5 +1,8 @@ package com.yunhai.bschclassmanage.controller.oapi.oa; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; + import com.yunhai.bschclassmanage.Repository.*; import com.yunhai.bschclassmanage.config.Config; import com.yunhai.bschclassmanage.entity.*; @@ -9,6 +12,7 @@ import org.springframework.web.bind.annotation.*; import java.util.*; import java.util.stream.Collectors; +@Tag(name = "StuInfo", description = "StuInfo related APIs") @RestController @RequestMapping(Config.OAPI+"/OAStu/") @CrossOrigin(originPatterns = {"*"}, allowCredentials = "true") @@ -18,60 +22,79 @@ public class StuInfoController { @Autowired private SchStudentHistoryRepository historyRepository; @GetMapping("GetAllStulist") + @Operation(summary = "GetAllStulist") public ResponseEntity>> GetAllStulist() { return ResponseEntity.ok(students(studentRepository.findAll(), null)); } @GetMapping("GetEleAllStulist") + @Operation(summary = "GetEleAllStulist") public ResponseEntity>> GetEleAllStulist() { return ResponseEntity.ok(studentRepository.findAll().stream().map(s -> OaCompatSupport.electiveStudent(s, schoolSer(s.getSchId()), String.valueOf(s.getClassId()))).collect(Collectors.toList())); } @GetMapping("GetSchStulist") + @Operation(summary = "GetSchStulist") public ResponseEntity>> GetSchStulist(@RequestParam(required=false) String schserid, @RequestParam(required=false) String schgroupid) { return ResponseEntity.ok(filter(schserid, schgroupid, null, null)); } @GetMapping("GetEleSchStulist") + @Operation(summary = "GetEleSchStulist") public ResponseEntity>> GetEleSchStulist(@RequestParam(required=false) String schserid, @RequestParam(required=false) String schgroupid) { return ResponseEntity.ok(filter(schserid, schgroupid, null, null).stream().map(m -> m).collect(Collectors.toList())); } @GetMapping("GetClaStulist") + @Operation(summary = "GetClaStulist") public ResponseEntity>> GetClaStulist(@RequestParam(required=false) String ClassID, @RequestParam(required=false) String clagroupid) { return ResponseEntity.ok(filter(null, null, ClassID, clagroupid)); } @GetMapping("GetEleClaStulist") + @Operation(summary = "GetEleClaStulist") public ResponseEntity>> GetEleClaStulist(@RequestParam(required=false) String ClassID, @RequestParam(required=false) String clagroupid) { return ResponseEntity.ok(filter(null, null, ClassID, clagroupid)); } @GetMapping("GetClaArrStulist") + @Operation(summary = "GetClaArrStulist") public ResponseEntity>> GetClaArrStulist(@RequestParam(required=false) String ClassIDs, @RequestParam(required=false) String clagroupids) { return ResponseEntity.ok(filterArrays(ClassIDs, clagroupids)); } @GetMapping("GetEleClaArrStulist") + @Operation(summary = "GetEleClaArrStulist") public ResponseEntity>> GetEleClaArrStulist(@RequestParam(required=false) String ClassIDs, @RequestParam(required=false) String clagroupids) { return ResponseEntity.ok(filterArrays(ClassIDs, clagroupids)); } @GetMapping("GetStuIdslist") + @Operation(summary = "GetStuIdslist") public ResponseEntity>> GetStuIdslist(@RequestParam(required=false) String stuids) { Set ids = new HashSet<>(OaCompatSupport.ints(stuids)); return ResponseEntity.ok(students(studentRepository.findAll().stream().filter(s -> ids.contains(s.getStuId())).collect(Collectors.toList()), null)); } @GetMapping("GetEleStuIdslist") + @Operation(summary = "GetEleStuIdslist") public ResponseEntity>> GetEleStuIdslist(@RequestParam(required=false) String stuids) { return GetStuIdslist(stuids); } @GetMapping("GetStuUserFamIDList") + @Operation(summary = "GetStuUserFamIDList") public ResponseEntity> GetStuUserFamIDList(@RequestParam(required=false) String stuids) { return ResponseEntity.ok(Collections.emptyList()); } @GetMapping("GetFamStulist") + @Operation(summary = "GetFamStulist") public ResponseEntity>> GetFamStulist(@RequestParam(required=false) String invitecodes) { Set codes = new HashSet<>(OaCompatSupport.strings(invitecodes)); return ResponseEntity.ok(students(studentRepository.findAll().stream().filter(s -> codes.contains(s.getInvitationCode())).collect(Collectors.toList()), null)); } @GetMapping("GetStuFamMem") + @Operation(summary = "GetAllStuFamMem") public ResponseEntity>> GetAllStuFamMem(@RequestParam(required=false) String SchSerID) { return ResponseEntity.ok(Collections.emptyList()); } @GetMapping("GetSchBySchIds") + @Operation(summary = "GetSchIdsStulist") public ResponseEntity>> GetSchIdsStulist(@RequestParam(required=false) String schserids) { Set ids = new HashSet<>(); for (String id : OaCompatSupport.strings(schserids)) schoolRepository.findBySchSerId(id).ifPresent(s -> ids.add(s.getSchId())); return ResponseEntity.ok(students(studentRepository.findAll().stream().filter(s -> ids.contains(s.getSchId())).collect(Collectors.toList()), null)); } @GetMapping("GetEleSchIdsStulist") + @Operation(summary = "GetEleSchIdsStulist") public ResponseEntity>> GetEleSchIdsStulist(@RequestParam(required=false) String schserids) { return GetSchIdsStulist(schserids); } @GetMapping("GetEleSchBySchIds") + @Operation(summary = "GetEleSchBySchIds") public ResponseEntity>> GetEleSchBySchIds(@RequestParam(required=false) String schserids) { return GetSchIdsStulist(schserids); } @GetMapping("GetStudentsByElectiveId") + @Operation(summary = "GetStudentsByElectiveId") public ResponseEntity>> GetStudentsByElectiveId(@RequestParam(required=false) Integer electiveIds) { return ResponseEntity.ok(Collections.emptyList()); } @GetMapping("getHistoryStudentsBySchoolId") + @Operation(summary = "getHistoryStudentsBySchoolId") public ResponseEntity>> getHistoryStudentsBySchoolId(@RequestParam Integer schoolId, @RequestParam Integer year) { return ResponseEntity.ok(historyRepository.findAll().stream().filter(h -> Objects.equals(h.getSchId(), schoolId) && Objects.equals(h.getYear(), year)).map(this::history).collect(Collectors.toList())); } @GetMapping("getHistoryClass") + @Operation(summary = "getHistoryClass") public ResponseEntity>> getHistoryClass(@RequestParam Integer schoolId, @RequestParam Integer year) { return ResponseEntity.ok(Collections.emptyList()); } private List> filter(String schserid, String schgroupid, String classId, String classGroupId) { diff --git a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/TeaChesController.java b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/TeaChesController.java index 6bb9f79..690d23d 100644 --- a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/TeaChesController.java +++ b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/TeaChesController.java @@ -1,5 +1,8 @@ package com.yunhai.bschclassmanage.controller.oapi.oa; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; + import com.yunhai.bschclassmanage.Repository.*; import com.yunhai.bschclassmanage.config.Config; import com.yunhai.bschclassmanage.entity.*; @@ -9,6 +12,7 @@ import org.springframework.web.bind.annotation.*; import java.util.*; import java.util.stream.Collectors; +@Tag(name = "TeaChes", description = "TeaChes related APIs") @RestController @RequestMapping(Config.OAPI+"/TeachInfo/") @CrossOrigin(originPatterns = {"*"}, allowCredentials = "true") @@ -17,26 +21,34 @@ public class TeaChesController { @Autowired private SchInfoRepository schoolRepository; @GetMapping("GetSchTeachlist") + @Operation(summary = "GetSchTeach") public ResponseEntity>> GetSchTeach(@RequestParam(required=false) String SchID, @RequestParam(required=false) Integer UserTeaSerID) { Integer schId = SchID == null ? null : schoolRepository.findBySchSerId(SchID).map(SchInfo::getSchId).orElse(null); return ResponseEntity.ok(teachingRepository.findAll().stream().filter(t -> (schId == null || Objects.equals(t.getSchId(), schId)) && (UserTeaSerID == null || Objects.equals(t.getTeaId(), UserTeaSerID))).map(t -> OaCompatSupport.teaching(t, schoolSer(t.getSchId()))).collect(Collectors.toList())); } @GetMapping("GetEleSchTeachlist") + @Operation(summary = "GetEleSchTeachlist") public ResponseEntity>> GetEleSchTeachlist(@RequestParam(required=false) String SchID, @RequestParam(required=false) Integer UserTeaSerID) { return GetSchTeach(SchID, UserTeaSerID); } @GetMapping("GetSchArrTeachlist") + @Operation(summary = "GetSchArrTeach") public ResponseEntity>> GetSchArrTeach(@RequestParam(required=false) String SchIDArr) { return bySchools(SchIDArr); } @GetMapping("GetEleSchArrTeachList") + @Operation(summary = "GetEleSchArrTeachList") public ResponseEntity>> GetEleSchArrTeachList(@RequestParam(required=false) String SchIDArr) { return bySchools(SchIDArr); } @GetMapping("GetSchClaTeachlist") + @Operation(summary = "GetClassTeach") public ResponseEntity>> GetClassTeach(@RequestParam(required=false) String ClassID) { Integer classId = intValue(ClassID); return ResponseEntity.ok(teachingRepository.findAll().stream().filter(t -> classId != null && Objects.equals(t.getClassId(), classId)).map(t -> OaCompatSupport.teaching(t, schoolSer(t.getSchId()))).collect(Collectors.toList())); } @GetMapping("GetEleSchClaTeachlist") + @Operation(summary = "GetEleSchClaTeachlist") public ResponseEntity>> GetEleSchClaTeachlist(@RequestParam(required=false) String ClassID) { return GetClassTeach(ClassID); } @GetMapping("GetElectiveClassByGrade") + @Operation(summary = "GetElectiveClassByGrade") public ResponseEntity>> GetElectiveClassByGrade(@RequestParam(required=false) Integer schoolId, @RequestParam(required=false) Integer gradeId) { return ResponseEntity.ok(Collections.emptyList()); } @PostMapping("GetElectiveClassByTeachers") + @Operation(summary = "GetElectiveClassByTeachers") public ResponseEntity>> GetElectiveClassByTeachers(@RequestBody(required=false) String teacherIds) { return ResponseEntity.ok(Collections.emptyList()); } private ResponseEntity>> bySchools(String value) { diff --git a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/TeainfoController.java b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/TeainfoController.java index fd9e882..dbc8c5a 100644 --- a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/TeainfoController.java +++ b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/TeainfoController.java @@ -1,5 +1,8 @@ package com.yunhai.bschclassmanage.controller.oapi.oa; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; + import com.yunhai.bschclassmanage.Repository.SchTeacherRepository; import com.yunhai.bschclassmanage.config.Config; import com.yunhai.bschclassmanage.entity.SchTeacher; @@ -22,6 +25,7 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; +@Tag(name = "Teainfo", description = "Teainfo related APIs") @RestController @RequestMapping(Config.OAPI+"/OATea/") @CrossOrigin(originPatterns = {"*"}, allowCredentials = "true") @@ -37,15 +41,16 @@ public class TeainfoController { private ISchInfoService schInfoService; @GetMapping("GetTeainfo") + @Operation(summary = "getTeainfo") public ResponseEntity getTeainfo(@RequestParam Integer uid) { - // 1. 参数校验 + // 1. 鍙傛暟鏍¢獙 if (uid == null) { return ResponseEntity.badRequest().build(); } - // 2. 直接使用 uid 查询 - return schTeacherRepository.findByTeaId(uid) // 假设 findByTeaId 返回 Optional - .map(this::convertToTeaInfoVO) // 将 SchTeacher 转为 TeaInfoVO + // 2. 鐩存帴浣跨敤 uid 鏌ヨ + return schTeacherRepository.findByTeaId(uid) // 鍋囪 findByTeaId 杩斿洖 Optional + .map(this::convertToTeaInfoVO) // 灏?SchTeacher 杞负 TeaInfoVO .map(ResponseEntity::ok) .orElse(ResponseEntity.notFound().build()); } @@ -56,7 +61,7 @@ public class TeainfoController { } TeaInfoVO vo = new TeaInfoVO(); - // 直接映射 + // 鐩存帴鏄犲皠 vo.setAccount(teacher.getAccount()); vo.setName(teacher.getName()); vo.setTeaIDCard(teacher.getIdCard()); @@ -69,7 +74,7 @@ public class TeainfoController { vo.setTeaSex(sex); } - // TeaSerID 使用 teaId(转为字符串)或 id + // TeaSerID 浣跨敤 teaId锛堣浆涓哄瓧绗︿覆锛夋垨 id if (teacher.getTeaId() != null) { vo.setTeaSerID(teacher.getTeaId().toString()); } else { @@ -80,7 +85,7 @@ public class TeainfoController { if(groupList==null||groupList.isEmpty()) return null; - // 其他字段默认 null(或根据业务设置默认值) + // 鍏朵粬瀛楁榛樿 null锛堟垨鏍规嵁涓氬姟璁剧疆榛樿鍊硷級 SchInfoVO schInfoVO= schInfoService.GetSchFirst(groupList.stream().findFirst().get().getSchId()); vo.setSchSerID(schInfoVO==null?null:schInfoVO.getSchSerId()); @@ -90,8 +95,9 @@ public class TeainfoController { } @PostMapping("GetArrTeainfo") + @Operation(summary = "根据教师id数组 获取教师列表") public ResponseEntity> getArrTeainfo(@RequestBody String userIds) { - // 1. 参数校验 + // 1. 鍙傛暟鏍¢獙 if (userIds == null) { return ResponseEntity.badRequest().build(); } @@ -106,21 +112,35 @@ public class TeainfoController { return voList.isEmpty() ? ResponseEntity.noContent().build() : ResponseEntity.ok(voList); } + /** + * 解析学校ID:支持直接传 schId,或传 SchSerID 反查 schId,二者至少提供一个。 + * + * @param schId 学校内部ID(优先使用) + * @param schSerID 学校外部序列号 + * @return 学校内部ID,参数非法或查不到时返回 null + */ + private Integer resolveSchId(Integer schId, String schSerID) { + if (schId != null) { + return schId; + } + if (schSerID == null || schSerID.trim().isEmpty()) { + return null; + } + SchInfoVO schInfoVO = schInfoService.GetSchFirst(schSerID); + return schInfoVO == null ? null : schInfoVO.getUserSchSerId(); + } + @GetMapping("GetSchTeainfo") - public ResponseEntity> getSchTeainfo(@RequestParam String SchSerID) { - // 1. 参数校验 - if (SchSerID == null) { + @Operation(summary = "根据学校ID 获取教师列表(SchSerID 与 schId 二选一)") + public ResponseEntity> getSchTeainfo(@RequestParam(value = "SchSerID", required = false) String SchSerID, + @RequestParam(value = "schId", required = false) Integer schId) { + // 1. 参数校验:SchSerID 与 schId 至少传一个 + Integer resolvedSchId = resolveSchId(schId, SchSerID); + if (resolvedSchId == null) { return ResponseEntity.badRequest().build(); } - SchInfoVO schInfoVO= schInfoService.GetSchFirst(SchSerID); - if(schInfoVO==null) - { - return ResponseEntity.badRequest().build(); - } - Integer schId=schInfoVO.getUserSchSerId(); - - List teachers = schTeacherService.getSchTeacherList(schId); + List teachers = schTeacherService.getSchTeacherList(resolvedSchId); List voList = teachers.stream() .map(this::convertToTeaInfoVO) @@ -130,8 +150,10 @@ public class TeainfoController { } @GetMapping("GetSchTeaList") - public ResponseEntity> getSchTeaList(@RequestParam String SchSerID) { - return getSchTeainfo(SchSerID); + @Operation(summary = "getSchTeaList(SchSerID 与 schId 二选一)") + public ResponseEntity> getSchTeaList(@RequestParam(value = "SchSerID", required = false) String SchSerID, + @RequestParam(value = "schId", required = false) Integer schId) { + return getSchTeainfo(SchSerID, schId); } diff --git a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/UserInfoController.java b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/UserInfoController.java index 474d6e1..6c8b4b9 100644 --- a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/UserInfoController.java +++ b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/UserInfoController.java @@ -1,5 +1,8 @@ package com.yunhai.bschclassmanage.controller.oapi.oa; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; + import com.yunhai.bschclassmanage.Repository.SchStudentRepository; import com.yunhai.bschclassmanage.Repository.SchTeacherRepository; import com.yunhai.bschclassmanage.config.Config; @@ -23,6 +26,7 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; +@Tag(name = "UserInfo", description = "UserInfo related APIs") @RestController @RequestMapping(Config.OAPI + "/UserInfo/") @CrossOrigin(originPatterns = {"*"}, allowCredentials = "true") @@ -44,8 +48,9 @@ public class UserInfoController { private ISchInfoService schInfoService; @GetMapping("GetUserList") + @Operation(summary = "getUserList") public ResponseEntity> getUserList(@RequestParam String SchSerID) { - // 1. 参数校验 + // 1. 鍙傛暟鏍¢獙 if (SchSerID == null || SchSerID.trim().isEmpty()) { return ResponseEntity.badRequest().build(); } @@ -56,16 +61,16 @@ public class UserInfoController { } Integer schId = schInfoVO.getUserSchSerId(); - // 2. 获取教师和学生列表(判空) + // 2. 鑾峰彇鏁欏笀鍜屽鐢熷垪琛紙鍒ょ┖锛? List teachers = schTeacherService.getSchTeacherCacheList(schId); List students = schStudentService.getSchGradeClassStudentCacheList(schId, null, null, null); - // 3. 转换为 UserInfoVO + // 3. 杞崲涓?UserInfoVO List voList = new ArrayList<>(); if (teachers != null) { voList.addAll(teachers.stream() .map(this::convertToUserInfoVO) - .filter(vo -> vo != null) // 过滤转换失败的 + .filter(vo -> vo != null) // 杩囨护杞崲澶辫触鐨? .collect(Collectors.toList())); } if (students != null) { @@ -75,51 +80,51 @@ public class UserInfoController { .collect(Collectors.toList())); } - // 4. 返回结果 + // 4. 杩斿洖缁撴灉 return voList.isEmpty() ? ResponseEntity.noContent().build() : ResponseEntity.ok(voList); } - // ===== 转换教师 ===== + // ===== 杞崲鏁欏笀 ===== private UserInfoVO convertToUserInfoVO(SchTeacher teacher) { if (teacher == null) { return null; } UserInfoVO vo = new UserInfoVO(); - // 基础字段 + // 鍩虹瀛楁 vo.setUids(teacher.getAccount()); vo.setName(teacher.getName()); vo.setIDCard(teacher.getIdCard()); vo.setTel(teacher.getTel()); vo.setNo(teacher.getSort()); vo.setSex(teacher.getGender()); - vo.setUserID(teacher.getTeaId()); // 教师用户ID - vo.setUsertype(1); // 假设教师类型为1 + vo.setUserID(teacher.getTeaId()); // 鏁欏笀鐢ㄦ埛ID + vo.setUsertype(1); // 鍋囪鏁欏笀绫诲瀷涓? - // 获取学校ID和组ID + // 鑾峰彇瀛︽牎ID鍜岀粍ID List groupList = teacher.getGroupList(); if (groupList != null && !groupList.isEmpty()) { SchTeacherGroup firstGroup = groupList.get(0); vo.setGroupID(firstGroup.getGroupId()); - // 通过组获取学校信息 + // 閫氳繃缁勮幏鍙栧鏍′俊鎭? SchInfoVO schInfo = schInfoService.GetSchFirst(firstGroup.getSchId()); - // 若没有直接按组查学校的方法,可改为通过组的schId查 + // 鑻ユ病鏈夌洿鎺ユ寜缁勬煡瀛︽牎鐨勬柟娉曪紝鍙敼涓洪€氳繃缁勭殑schId鏌? if (schInfo != null) { vo.setSchSerID(schInfo.getSchSerId()); } } else { - // 无分组,可能是管理员或特殊用户,可设置默认或 null + // 鏃犲垎缁勶紝鍙兘鏄鐞嗗憳鎴栫壒娈婄敤鎴凤紝鍙缃粯璁ゆ垨 null vo.setGroupID(null); vo.setSchSerID(null); } - // 其他字段(如 Photo, SerID 等)如果 SchTeacher 没有,可置 null 或从别处获取 - vo.setPhoto(null); // 可根据 teacher 的某字段补充 + // 鍏朵粬瀛楁锛堝 Photo, SerID 绛夛級濡傛灉 SchTeacher 娌℃湁锛屽彲缃?null 鎴栦粠鍒鑾峰彇 + vo.setPhoto(null); // 鍙牴鎹?teacher 鐨勬煇瀛楁琛ュ厖 vo.setSerID(null); return vo; } - // ===== 转换学生 ===== + // ===== 杞崲瀛︾敓 ===== private UserInfoVO convertToUserInfoVO(SchStudent student) { if (student == null) { return null; @@ -129,16 +134,16 @@ public class UserInfoController { vo.setUids(student.getAccount()); vo.setName(student.getName()); vo.setIDCard(student.getIdCard()); - vo.setTel(null); // 学生表可能无电话,如有则补充 - vo.setNo(null); // 学生表没有 No 字段,可置 null 或从 stuClassNo 转换 + vo.setTel(null); // 瀛︾敓琛ㄥ彲鑳芥棤鐢佃瘽锛屽鏈夊垯琛ュ厖 + vo.setNo(null); // 瀛︾敓琛ㄦ病鏈?No 瀛楁锛屽彲缃?null 鎴栦粠 stuClassNo 杞崲 vo.setSex(student.getGender()); - vo.setUserID(student.getStuId()); // 学生用户ID - vo.setUsertype(UserRole.STU_USER.getValue()); // 假设学生类型为2 + vo.setUserID(student.getStuId()); // 瀛︾敓鐢ㄦ埛ID + vo.setUsertype(UserRole.STU_USER.getValue()); // 鍋囪瀛︾敓绫诲瀷涓? vo.setGroupID(student.getGroupId()); SchInfoVO schInfo = schInfoService.GetSchFirst(student.getSchId()); - // 若没有直接按组查学校的方法,可改为通过组的schId查 + // 鑻ユ病鏈夌洿鎺ユ寜缁勬煡瀛︽牎鐨勬柟娉曪紝鍙敼涓洪€氳繃缁勭殑schId鏌? if (schInfo != null) { vo.setSchSerID(schInfo.getSchSerId()); } @@ -149,6 +154,7 @@ public class UserInfoController { } @GetMapping("getUserIdList") + @Operation(summary = "getUserIdList") public ResponseEntity> getUserIdList(@RequestParam Integer userid) { if (userid == null) { return ResponseEntity.badRequest().build(); @@ -174,4 +180,4 @@ public class UserInfoController { } -} \ No newline at end of file +} diff --git a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/VClassController.java b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/VClassController.java index 7825468..357c30f 100644 --- a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/VClassController.java +++ b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/oa/VClassController.java @@ -1,5 +1,8 @@ package com.yunhai.bschclassmanage.controller.oapi.oa; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; + import com.yunhai.bschclassmanage.Repository.*; import com.yunhai.bschclassmanage.config.Config; import com.yunhai.bschclassmanage.entity.*; @@ -9,6 +12,7 @@ import org.springframework.web.bind.annotation.*; import java.util.*; import java.util.stream.Collectors; +@Tag(name = "VClass", description = "VClass related APIs") @RestController @RequestMapping(Config.OAPI+"/VSchClass/") @CrossOrigin(originPatterns = {"*"}, allowCredentials = "true") @@ -18,44 +22,61 @@ public class VClassController { @Autowired private SchClassTeachRepository teachingRepository; @GetMapping("GetVClassList") + @Operation(summary = "GetVClassList") public ResponseEntity>> GetVClassList(@RequestParam(required=false) String SchSerID) { return bySchool(SchSerID, false); } @GetMapping("GetEleVClassList") + @Operation(summary = "GetEleVClassList") public ResponseEntity>> GetEleVClassList(@RequestParam(required=false) String SchSerID) { return bySchool(SchSerID, true); } @GetMapping("GetSchArrVClassList") + @Operation(summary = "GetSchArrVClassList") public ResponseEntity>> GetSchArrVClassList(@RequestParam(required=false) String SchIDArr) { return bySchools(SchIDArr, false); } @GetMapping("GetEleSchArrVClassList") + @Operation(summary = "GetEleSchArrVClassList") public ResponseEntity>> GetEleSchArrVClassList(@RequestParam(required=false) String SchIDArr) { return bySchools(SchIDArr, true); } @GetMapping("GetFunTimeSchClass") + @Operation(summary = "GetFunTimeSchClass") public ResponseEntity>> GetFunTimeSchClass(@RequestParam(required=false) String time, @RequestParam(required=false) String SchSerID) { return bySchool(SchSerID, false); } @GetMapping("GetVClassFirst") + @Operation(summary = "GetVClassFirst") public ResponseEntity> GetVClassFirst(@RequestParam(required=false) String ClassID) { return one(ClassID); } @GetMapping("GetEleVClassFirst") + @Operation(summary = "GetEleVClassFirst") public ResponseEntity> GetEleVClassFirst(@RequestParam(required=false) String ClassID) { return one(ClassID); } @GetMapping("GetVClassIdsList") + @Operation(summary = "GetVClassIdsList") public ResponseEntity>> GetVClassIdsList(@RequestParam(required=false) String ClassIds) { return byClassIds(ClassIds); } @GetMapping("GetEleVClassIdsList") + @Operation(summary = "GetEleVClassIdsList") public ResponseEntity>> GetEleVClassIdsList(@RequestParam(required=false) String ClassIds) { return byClassIds(ClassIds); } @GetMapping("GetGradeClassList") + @Operation(summary = "GetGradeClassList") public ResponseEntity>> GetGradeClassList(@RequestParam(required=false) String SchSerID, @RequestParam(required=false) Integer Schooling, @RequestParam(required=false) Integer GradeId) { Integer schId = schoolId(SchSerID); if (schId == null) return ResponseEntity.ok(Collections.emptyList()); return ResponseEntity.ok(classRepository.findAll().stream().filter(c -> Objects.equals(c.getSchId(), schId) && (GradeId == null || Objects.equals(c.getGradeId(), GradeId)) && (Schooling == null || Objects.equals(c.getGradeId(), Schooling)) && !Boolean.TRUE.equals(c.getGraduate())).map(c -> OaCompatSupport.classInfo(c, SchSerID)).collect(Collectors.toList())); } @GetMapping("GetTeachClassArr") + @Operation(summary = "GetTeachClassArr") public ResponseEntity> GetTeachClassArr(@RequestParam(required=false) Integer UserTeaSerID) { if (UserTeaSerID == null) return ResponseEntity.ok(Collections.emptyList()); return ResponseEntity.ok(teachingRepository.findAll().stream().filter(t -> Objects.equals(t.getTeaId(), UserTeaSerID)).map(SchClassTeach::getClassId).filter(Objects::nonNull).map(String::valueOf).distinct().collect(Collectors.toList())); } @GetMapping("GetSchArrVClassListAll") + @Operation(summary = "GetSchArrVClassListAll") public ResponseEntity>> GetSchArrVClassListAll() { return ResponseEntity.ok(classRepository.findAll().stream().filter(c -> !Boolean.TRUE.equals(c.getGraduate())).map(c -> OaCompatSupport.classInfo(c, schoolSer(c.getSchId()))).collect(Collectors.toList())); } @GetMapping("GetEleSchArrVClassListAll") + @Operation(summary = "GetEleSchArrVClassListAll") public ResponseEntity>> GetEleSchArrVClassListAll() { return GetSchArrVClassListAll(); } @PostMapping("GetSchArrVClassListPost") + @Operation(summary = "GetSchArrVClassListPost") public ResponseEntity>> GetSchArrVClassListPost(@RequestBody(required=false) String body) { return bySchools(body, false); } @GetMapping("GetElectiveClassById") + @Operation(summary = "GetElectiveClassById") public ResponseEntity> GetElectiveClassById(@RequestParam(required=false) Integer electiveId) { return ResponseEntity.ok(null); } @GetMapping("GetElectiveClassByGrade") + @Operation(summary = "GetElectiveClassByGrade") public ResponseEntity>> GetElectiveClassByGrade(@RequestParam(required=false) Integer schoolId, @RequestParam(required=false) Integer gradeId) { return ResponseEntity.ok(Collections.emptyList()); } @PostMapping("GetElectiveClassByTeachers") + @Operation(summary = "GetElectiveClassByTeachers") public ResponseEntity>> GetElectiveClassByTeachers(@RequestBody(required=false) String teacherIds) { return ResponseEntity.ok(Collections.emptyList()); } private ResponseEntity>> bySchool(String ser, boolean elective) { diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 2a500ba..15e4399 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -95,4 +95,4 @@ springdoc: path: /swagger-ui.html operations-sorter: method tags-sorter: alpha - packages-to-scan: com.yunhai.bschclassmanage.controller + packages-to-scan: com.yunhai.bschclassmanage.controller # 扫描 Controller 包