diff --git a/src/main/java/com/yunhai/bschclassmanage/controller/api/SchStudentController.java b/src/main/java/com/yunhai/bschclassmanage/controller/api/SchStudentController.java index 733fe1b..356d5e0 100644 --- a/src/main/java/com/yunhai/bschclassmanage/controller/api/SchStudentController.java +++ b/src/main/java/com/yunhai/bschclassmanage/controller/api/SchStudentController.java @@ -145,12 +145,11 @@ public class SchStudentController extends BaseController { } @GetMapping("searchTransferOut") - public PageVO searchTransferOutStudent(@RequestParam(required = false) Integer schId, - @RequestParam(required = false) Integer gradeId, + public PageVO searchTransferOutStudent(@RequestParam(required = false) Integer gradeId, @RequestParam(required = false) Integer classId, @RequestParam(required = false) String keyword, Pageable pageable) { - return schStudentService.searchTransferOutStudent(schId,gradeId,classId,keyword,pageable); + return schStudentService.searchTransferOutStudent(UserContext.getSchId(),gradeId,classId,keyword,pageable); } @@ -172,7 +171,6 @@ public class SchStudentController extends BaseController { column.setGender("示例:男"); stuList.add(column); } - List gradeList=baseSchsystemGradeService.getGradeSelect(schId,null,null) .stream().collect(Collectors.toList()); @@ -222,7 +220,7 @@ public class SchStudentController extends BaseController { } @GetMapping("studentClassNoTemplate") - public void studentClassNoTemplate(HttpServletResponse response, Integer schId, + public void studentClassNoTemplate(HttpServletResponse response,Integer schId, @RequestParam(required = false) Integer schsystemId, @RequestParam(required = false) Integer gradeId, @RequestParam(required = false) Integer classId){ @@ -234,7 +232,7 @@ public class SchStudentController extends BaseController { @RequestParam(required = false) Integer schsystemId, @RequestParam(required = false) Integer gradeId, @RequestParam(required = false) Integer classId) { - schStudentService.importStudents(UserContext.getCurrentUser(),file); + schStudentService.importStudents(UserContext.getCurrentUser(),file,schsystemId,gradeId,classId); } @PostMapping("importStudentClassNo") diff --git a/src/main/java/com/yunhai/bschclassmanage/service/ISchClassService.java b/src/main/java/com/yunhai/bschclassmanage/service/ISchClassService.java index 14e4e94..4c56ef7 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/ISchClassService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/ISchClassService.java @@ -52,6 +52,13 @@ public interface ISchClassService { String keyword, Pageable pageable); + List searcHigherSchClass(Integer schId, + Integer year, + Integer campusId, + Integer divisionId, + Integer majorsId, + String keyword); + void saveHigherSchClass(UserContext.UserInfo user, SchClass entity); diff --git a/src/main/java/com/yunhai/bschclassmanage/service/ISchInfoService.java b/src/main/java/com/yunhai/bschclassmanage/service/ISchInfoService.java index 161472c..1f537e2 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/ISchInfoService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/ISchInfoService.java @@ -3,6 +3,7 @@ package com.yunhai.bschclassmanage.service; import com.yunhai.bschclassmanage.entity.BaseDicGrade; import com.yunhai.bschclassmanage.entity.SchInfo; import com.yunhai.bschclassmanage.model.dto.SchInfoDto; +import com.yunhai.bschclassmanage.model.vo.HigherSchClassVO; import com.yunhai.bschclassmanage.model.vo.oa.SchInfoVO; import com.yunhai.bschclassmanage.utils.UserContext; import org.springframework.stereotype.Service; @@ -21,4 +22,10 @@ public interface ISchInfoService { SchInfoVO GetSchFirst(Integer schId); void addSchool(UserContext.UserInfo user, SchInfoDto dto); + + /** + * 查询高等教育班级列表(返回全部匹配的 VO 列表) + */ + List searcHigherSchClass(Integer schId, Integer year, Integer campusId, + Integer divisionId, Integer majorsId, String keyword); } diff --git a/src/main/java/com/yunhai/bschclassmanage/service/ISchStudentService.java b/src/main/java/com/yunhai/bschclassmanage/service/ISchStudentService.java index 633a8fa..2535855 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/ISchStudentService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/ISchStudentService.java @@ -56,7 +56,7 @@ public interface ISchStudentService { List transferOutSchSelect(); - void importStudents(UserContext.UserInfo user,MultipartFile file); + void importStudents(UserContext.UserInfo user, MultipartFile file, Integer schsystemId, Integer gradeId, Integer classId); void studentClassNoTemplate(HttpServletResponse response, Integer schId, Integer systemId, Integer gradeId, Integer classId); diff --git a/src/main/java/com/yunhai/bschclassmanage/service/impl/SchClassService.java b/src/main/java/com/yunhai/bschclassmanage/service/impl/SchClassService.java index 775cb61..275519c 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/impl/SchClassService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/impl/SchClassService.java @@ -93,6 +93,12 @@ public class SchClassService implements ISchClassService { return queryService.searcHigherSchClass(schId, year, campusId, divisionId, majorsId,keyword, pageable); } + @Override + public List searcHigherSchClass(Integer schId, Integer year, Integer campusId, + Integer divisionId, Integer majorsId,String keyword) { + return queryService.searcHigherSchClass(schId, year, campusId, divisionId, majorsId,keyword); + } + @Override public List getClassSelect(Integer schId, Integer gradeId) { return queryService.getClassSelect(schId, gradeId); diff --git a/src/main/java/com/yunhai/bschclassmanage/service/impl/SchInfoService.java b/src/main/java/com/yunhai/bschclassmanage/service/impl/SchInfoService.java index 5c76689..bcc39bf 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/impl/SchInfoService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/impl/SchInfoService.java @@ -6,11 +6,13 @@ import com.yunhai.bschclassmanage.entity.SchInfo; import com.yunhai.bschclassmanage.enums.NodeType; import com.yunhai.bschclassmanage.model.dto.SchInfoDto; import com.yunhai.bschclassmanage.model.entityField.EntityFieldNames; +import com.yunhai.bschclassmanage.model.vo.HigherSchClassVO; import com.yunhai.bschclassmanage.model.vo.SelectIntVO; import com.yunhai.bschclassmanage.model.vo.oa.SchInfoVO; import com.yunhai.bschclassmanage.service.IComSchTreeService; import com.yunhai.bschclassmanage.service.ISchInfoService; import com.yunhai.bschclassmanage.service.ISendUserBaseService; +import com.yunhai.bschclassmanage.service.impl.classes.SchClassQueryService; import com.yunhai.bschclassmanage.utils.LogContextHolder; import com.yunhai.bschclassmanage.utils.OtherUtil; import com.yunhai.bschclassmanage.utils.RedisUtil; @@ -44,6 +46,9 @@ public class SchInfoService implements ISchInfoService { @Autowired private RedisUtil redisUtil; + @Autowired + private SchClassQueryService schClassQueryService; + public List getSchList(){ return schInfoRepository.findAll(); } @@ -161,4 +166,10 @@ public class SchInfoService implements ISchInfoService { LogContextHolder.setDescription("添加学校" + dto.getName() + "(初始化)成功"); } + @Override + public List searcHigherSchClass(Integer schId, Integer year, Integer campusId, + Integer divisionId, Integer majorsId, String keyword) { + return schClassQueryService.searcHigherSchClass(schId, year, campusId, divisionId, majorsId, keyword); + } + } diff --git a/src/main/java/com/yunhai/bschclassmanage/service/impl/SchStudentService.java b/src/main/java/com/yunhai/bschclassmanage/service/impl/SchStudentService.java index 68ff7fc..a64965f 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/impl/SchStudentService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/impl/SchStudentService.java @@ -125,8 +125,8 @@ public class SchStudentService implements ISchStudentService { @Transactional(rollbackFor = Exception.class) @Override - public void importStudents(UserContext.UserInfo user, MultipartFile file) { - importService.importStudents(user, file); + public void importStudents(UserContext.UserInfo user, MultipartFile file, Integer schsystemId, Integer gradeId, Integer classId) { + importService.importStudents(user, file, schsystemId, gradeId, classId); } @Override diff --git a/src/main/java/com/yunhai/bschclassmanage/service/impl/classes/SchClassQueryService.java b/src/main/java/com/yunhai/bschclassmanage/service/impl/classes/SchClassQueryService.java index c0c39e1..4909209 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/impl/classes/SchClassQueryService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/impl/classes/SchClassQueryService.java @@ -203,6 +203,28 @@ public class SchClassQueryService { return vo; } + /** + * 查询高等教育班级列表(不传分页,返回全部匹配的 VO 列表) + */ + public List searcHigherSchClass(Integer schId, Integer year, Integer campusId, + Integer divisionId, Integer majorsId, String keyword) { + List years = new ArrayList<>(); + if (year != null && year > 0) years.add(year); + years = years.isEmpty() ? null : years; + + Page classPage = schClassRepository.findClassesByConditions(schId, campusId, divisionId, majorsId, years, keyword, Pageable.unpaged()); + + Map campusNameMap = schDicCampusService.toIdAndNameMap(schId); + Map divisionsNameMap = schDicDivisionService.toIdAndNameMap(schId); + Map majorssNameMap = schDicMajorsService.toIdAndNameMap(schId); + Map teacherNameMap = schTeacherService.toIdAndNameMap(schId); + return classPage.getContent().stream() + .map(clazz -> convertHigherSchClassToVO(clazz, campusNameMap, divisionsNameMap, majorssNameMap,teacherNameMap)) + .collect(Collectors.toList()); + } + + + // ---------- 下拉列表 ---------- public List getClassSelect(Integer schId, Integer gradeId) { List schClassList = getSchClassCacheFilter(schId, gradeId, null); diff --git a/src/main/java/com/yunhai/bschclassmanage/service/impl/student/SchStudentImportService.java b/src/main/java/com/yunhai/bschclassmanage/service/impl/student/SchStudentImportService.java index aa64d6d..a530208 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/impl/student/SchStudentImportService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/impl/student/SchStudentImportService.java @@ -8,20 +8,15 @@ import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import com.yunhai.bschclassmanage.Repository.SchStudentRepository; import com.yunhai.bschclassmanage.entity.SchClass; import com.yunhai.bschclassmanage.entity.SchStudent; -import com.yunhai.bschclassmanage.enums.StuAbnormalStatus; -import com.yunhai.bschclassmanage.enums.TransferStatus; -import com.yunhai.bschclassmanage.enums.UserGender; -import com.yunhai.bschclassmanage.enums.UserStatus; +import com.yunhai.bschclassmanage.enums.*; import com.yunhai.bschclassmanage.model.dto.SchStudentDTO; import com.yunhai.bschclassmanage.model.excel.ErrorExcelColumn; import com.yunhai.bschclassmanage.model.excel.StudentClassNoExcelColumn; import com.yunhai.bschclassmanage.model.excel.StudentExcelColumn; import com.yunhai.bschclassmanage.model.vo.BaseSchClassVO; +import com.yunhai.bschclassmanage.model.vo.HigherSchClassVO; import com.yunhai.bschclassmanage.model.vo.SelectIntVO; -import com.yunhai.bschclassmanage.service.IBaseSchsystemGradeService; -import com.yunhai.bschclassmanage.service.IComSchTreeService; -import com.yunhai.bschclassmanage.service.ISchClassService; -import com.yunhai.bschclassmanage.service.ISendUserBaseService; +import com.yunhai.bschclassmanage.service.*; import com.yunhai.bschclassmanage.utils.EasyPoiUtils; import com.yunhai.bschclassmanage.utils.UserContext; import com.yunhai.bschclassmanage.utils.ValidateUtil; @@ -63,6 +58,8 @@ public class SchStudentImportService { @Autowired private IComSchTreeService comSchTreeService; + @Autowired + private ISchBinSchsystemService schBinSchsystemService; @Autowired private ISendUserBaseService sendUserBaseService; @@ -76,7 +73,7 @@ public class SchStudentImportService { /** * 导入学生数据 */ - public void importStudents(UserContext.UserInfo user, MultipartFile file) { + public void importStudents(UserContext.UserInfo user, MultipartFile file, Integer schsystemId, Integer gradeId, Integer classId) { List errorMsgArr = new ArrayList<>(); ImportParams params = new ImportParams(); params.setTitleRows(1); @@ -91,7 +88,7 @@ public class SchStudentImportService { // 使用 try-with-resources 确保流关闭 try (InputStream is = file.getInputStream()) { // 1. 加载基础数据(放在 try 内,若加载失败也回滚) - List gradeList = baseSchsystemGradeService.getGradeSelect(schId, null, null); + List gradeList = baseSchsystemGradeService.getGradeSelect(schId, schsystemId, gradeId); List schClassList = schClassService.getSchClassCacheList(schId); Set classIds = new HashSet<>(); @@ -161,7 +158,7 @@ public class SchStudentImportService { } } - Integer gradeId; + Integer gradeId2; // 年级 { Optional gradeIdOpt = gradeList.stream() @@ -170,7 +167,11 @@ public class SchStudentImportService { .findFirst(); if (gradeIdOpt.isPresent()) { - gradeId = gradeIdOpt.get(); + gradeId2 = gradeIdOpt.get(); + if (gradeId != null && !gradeId2.equals(gradeId)) { + errorMsgArr.add(new ErrorExcelColumn(currentRow, item.getGradeName(), StudentExcelColumn.GRADE_NAME + "参数年级与模板年级不一致!")); + continue; + } } else { errorMsgArr.add(new ErrorExcelColumn(currentRow, item.getGradeName(), StudentExcelColumn.GRADE_NAME + "不存在!")); continue; @@ -179,9 +180,13 @@ public class SchStudentImportService { // 班级 { Optional schClassOpt = schClassList.stream() - .filter(s -> gradeId.equals(s.getGradeId()) && s.getName().equals(item.getClazzName())) + .filter(s -> gradeId2.equals(s.getGradeId()) && s.getName().equals(item.getClazzName())) .findFirst(); if (schClassOpt.isPresent()) { + if (classId != null && !schClassOpt.get().getClassId().equals(classId)) { + errorMsgArr.add(new ErrorExcelColumn(currentRow, item.getClazzName(), StudentExcelColumn.CLAZZ_NAME + "参数班级与模板班级不一致!")); + continue; + } stu.setClassId(schClassOpt.get().getClassId()); stu.setGroupId(schClassOpt.get().getClassId()); } else { @@ -397,18 +402,31 @@ public class SchStudentImportService { List schStudentList= cacheService.getSchGradeClassStudentCacheList(schId,systemId,gradeId,classId); - List schClassdentList= schClassService.searcBaseSchClass(schId,systemId,gradeId,classId); + // 班级信息映射(classId -> 年级名 / 班级名),按学校类型区分基础教育与职业教育 + Integer schType=schBinSchsystemService.getSchType(schId); + Map gradeNameMap = new HashMap<>(); + Map classNameMap = new HashMap<>(); + if(SchType.BASICEDUCATION.getKey().equals(schType)) + { + List schClassdentList= schClassService.searcBaseSchClass(schId,systemId,gradeId,classId); + for (BaseSchClassVO clazz : schClassdentList) { + gradeNameMap.put(clazz.getClassId(), clazz.getGradeName()); + classNameMap.put(clazz.getClassId(), clazz.getName()); + } + }else { + List schHigherClassdentList=schClassService.searcHigherSchClass(schId,gradeId,null,null,null,null); + for (HigherSchClassVO clazz : schHigherClassdentList) { + gradeNameMap.put(clazz.getClassId(), clazz.getGradeName()); + classNameMap.put(clazz.getClassId(), clazz.getName()); + } + } for (SchStudent stu: schStudentList) { - Optional stuClassOpt= schClassdentList.stream() - .filter(s->s.getClassId().equals(stu.getClassId())).findFirst(); - - StudentClassNoExcelColumn column=new StudentClassNoExcelColumn(); - column.setGradeName(stuClassOpt.isPresent()?stuClassOpt.get().getGradeName():"未知"); - column.setClazzName(stuClassOpt.isPresent()?stuClassOpt.get().getName():"未知"); + column.setGradeName(gradeNameMap.getOrDefault(stu.getClassId(), "未知")); + column.setClazzName(classNameMap.getOrDefault(stu.getClassId(), "未知")); column.setStuName(stu.getName()); column.setAccount(stu.getAccount()); column.setClazzNo(stu.getStuClassNo()); @@ -531,30 +549,32 @@ public class SchStudentImportService { } } - // 班级 + // 班级(按学校类型区分班级来源:基础教育走班级缓存,职业教育走高等教育班级查询) { + Integer matchClassId = null; Optional schClassOpt = schClassList.stream() - .filter(s -> gradeId2.equals(s.getGradeId()) && s.getName().equals(item.getClazzName())) - .findFirst(); + .filter(s -> gradeId2.equals(s.getGradeId()) && s.getName().equals(item.getClazzName())) + .findFirst(); if (schClassOpt.isPresent()) { - if(classId!=null){ - if(!schClassOpt.get().getClassId().equals(classId)){ - errorMsgArr.add(new ErrorExcelColumn(currentRow, item.getClazzName(), StudentExcelColumn.CLAZZ_NAME + "参数班级与模板班级不一致!")); - currentRow++; - continue; - } - } - // 学生当前班级必须与模板班级一致,避免改错其他班级学生的学号 - if (!Objects.equals(stu.getClassId(), schClassOpt.get().getClassId())) { - errorMsgArr.add(new ErrorExcelColumn(currentRow, item.getClazzName(), "学生当前班级与模板班级不一致!")); - currentRow++; - continue; - } - } else { + matchClassId = schClassOpt.get().getClassId(); + } + + if (matchClassId == null) { errorMsgArr.add(new ErrorExcelColumn(currentRow, item.getClazzName(), StudentExcelColumn.CLAZZ_NAME + "不存在!")); currentRow++; continue; } + if (classId != null && !matchClassId.equals(classId)) { + errorMsgArr.add(new ErrorExcelColumn(currentRow, item.getClazzName(), StudentExcelColumn.CLAZZ_NAME + "参数班级与模板班级不一致!")); + currentRow++; + continue; + } + // 学生当前班级必须与模板班级一致,避免改错其他班级学生的学号 + if (!Objects.equals(stu.getClassId(), matchClassId)) { + errorMsgArr.add(new ErrorExcelColumn(currentRow, item.getClazzName(), "学生当前班级与模板班级不一致!")); + currentRow++; + continue; + } } // 学号(为空时保留原学号,避免误清空)