From b3a9a50fc855a973573ae376700459f856a8d865 Mon Sep 17 00:00:00 2001 From: chenyuan Date: Mon, 12 Oct 2026 22:01:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AD=A6=E7=94=9FExcel=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E5=8F=96=E6=B6=88=E9=99=A2=E7=B3=BB/=E4=B8=93?= =?UTF-8?q?=E4=B8=9A=E5=88=97=E3=80=81=E7=8F=AD=E7=BA=A7=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E6=8C=89=E6=9C=AC=E6=A0=A1=E8=A1=8C=E6=94=BF=E7=8F=AD=E5=8C=B9?= =?UTF-8?q?=E9=85=8D=EF=BC=9B=E6=B7=BB=E5=8A=A0=E6=95=99=E5=B8=88=E8=B4=A6?= =?UTF-8?q?=E5=8F=B7=E9=BB=98=E8=AE=A4=E7=BB=A7=E6=89=BF=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E8=80=85=E5=AD=A6=E6=A0=A1/=E9=99=A2=E7=B3=BB/=E4=B8=93?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../schooladmin/SchoolAdminController.java | 55 ++------ .../controller/stu/UserController.java | 129 +++++++----------- .../SchoolAdminStudentImportDTO.java | 8 -- .../entity/importDto/TeacherImportDTO.java | 14 +- .../linkCommerce/service/ImportService.java | 3 +- .../service/impl/ImportServiceImpl.java | 9 +- .../service/impl/ValidateServiceImpl.java | 20 +-- .../stu/UserControllerTeacherAdminTest.java | 12 +- .../service/impl/ImportServiceImplTest.java | 42 +++++- 9 files changed, 110 insertions(+), 182 deletions(-) diff --git a/src/main/java/com/sztzjy/linkCommerce/controller/schooladmin/SchoolAdminController.java b/src/main/java/com/sztzjy/linkCommerce/controller/schooladmin/SchoolAdminController.java index 454c1ec..4b16113 100644 --- a/src/main/java/com/sztzjy/linkCommerce/controller/schooladmin/SchoolAdminController.java +++ b/src/main/java/com/sztzjy/linkCommerce/controller/schooladmin/SchoolAdminController.java @@ -466,8 +466,6 @@ public class SchoolAdminController { String name = StringUtils.trimToEmpty(row.getName()); String username = StringUtils.trimToEmpty(row.getUsername()); - String facultyName = StringUtils.trimToEmpty(row.getSchoolFacultyName()); - String majorName = StringUtils.trimToEmpty(row.getSchoolMajorName()); String className = StringUtils.trimToEmpty(row.getSchoolClassName()); String sex = normalizeImportSex(row.getSex()); @@ -486,32 +484,16 @@ public class SchoolAdminController { } else { errors.add("第 " + rowNumber + " 行:性别请填写男或女"); } - if (StringUtils.isBlank(facultyName)) { - errors.add("第 " + rowNumber + " 行:所属院系不能为空"); - } - if (StringUtils.isBlank(majorName)) { - errors.add("第 " + rowNumber + " 行:所属专业不能为空"); - } if (StringUtils.isBlank(className)) { errors.add("第 " + rowNumber + " 行:所属班级不能为空"); } - SchoolFaculty faculty = StringUtils.isBlank(facultyName) ? null : findFacultyByName(schoolId, facultyName); - SchoolMajor major = null; + //院系/专业列已取消,班级直接按本校行政班名称匹配 SchoolClass schoolClass = null; - if (StringUtils.isNotBlank(facultyName) && faculty == null) { - errors.add("第 " + rowNumber + " 行:未找到院系“" + facultyName + "”"); - } - if (faculty != null && StringUtils.isNotBlank(majorName)) { - major = findMajorByName(faculty.getSchoolFacultyId(), majorName); - if (major == null) { - errors.add("第 " + rowNumber + " 行:院系“" + facultyName + "”下未找到专业“" + majorName + "”"); - } - } - if (major != null && StringUtils.isNotBlank(className)) { - schoolClass = findClassByName(schoolId, major.getSchoolMajorId(), className); + if (StringUtils.isNotBlank(className)) { + schoolClass = findAdminClassByName(schoolId, className); if (schoolClass == null) { - errors.add("第 " + rowNumber + " 行:专业“" + majorName + "”下未找到班级“" + className + "”"); + errors.add("第 " + rowNumber + " 行:未找到行政班:" + className); } } @@ -524,8 +506,6 @@ public class SchoolAdminController { student.setSex(sex); student.setPhone(StringUtils.trimToEmpty(row.getPhone())); student.setEmail(StringUtils.trimToEmpty(row.getEmail())); - student.setSchoolFacultyId(faculty.getSchoolFacultyId()); - student.setSchoolMajorId(major.getSchoolMajorId()); student.setSchoolClassId(schoolClass.getSchoolClassId()); student.setCreateTime(new Date()); student.setCodeFrom("Excel导入"); @@ -543,8 +523,6 @@ public class SchoolAdminController { return StringUtils.isBlank(row.getName()) && StringUtils.isBlank(row.getUsername()) && StringUtils.isBlank(row.getSex()) - && StringUtils.isBlank(row.getSchoolFacultyName()) - && StringUtils.isBlank(row.getSchoolMajorName()) && StringUtils.isBlank(row.getSchoolClassName()) && StringUtils.isBlank(row.getPhone()) && StringUtils.isBlank(row.getEmail()); @@ -574,30 +552,13 @@ public class SchoolAdminController { return false; } - private SchoolFaculty findFacultyByName(String schoolId, String facultyName) { - SchoolFacultyExample example = new SchoolFacultyExample(); - example.createCriteria() - .andSchoolIdEqualTo(schoolId) - .andSchoolFacultyNameEqualTo(facultyName); - List faculties = schoolFacultyMapper.selectByExample(example); - return faculties.isEmpty() ? null : faculties.get(0); - } - - private SchoolMajor findMajorByName(String facultyId, String majorName) { - SchoolMajorExample example = new SchoolMajorExample(); - example.createCriteria() - .andSchoolFacultyIdEqualTo(facultyId) - .andSchoolMajorNameEqualTo(majorName); - List majors = schoolMajorMapper.selectByExample(example); - return majors.isEmpty() ? null : majors.get(0); - } - - private SchoolClass findClassByName(String schoolId, String majorId, String className) { + //学生账号导入不再区分院系/专业,班级直接按本校行政班名称匹配 + private SchoolClass findAdminClassByName(String schoolId, String className) { SchoolClassExample example = new SchoolClassExample(); example.createCriteria() .andSchoolIdEqualTo(schoolId) - .andSchoolMajorIdEqualTo(majorId) - .andClassNameEqualTo(className); + .andClassNameEqualTo(className) + .andClassTypeEqualTo("ADMIN"); List classes = schoolClassMapper.selectByExample(example); return classes.isEmpty() ? null : classes.get(0); } diff --git a/src/main/java/com/sztzjy/linkCommerce/controller/stu/UserController.java b/src/main/java/com/sztzjy/linkCommerce/controller/stu/UserController.java index 5986571..c60ffae 100644 --- a/src/main/java/com/sztzjy/linkCommerce/controller/stu/UserController.java +++ b/src/main/java/com/sztzjy/linkCommerce/controller/stu/UserController.java @@ -557,32 +557,36 @@ public class UserController { @PostMapping("/addTeacherAccount") @ApiOperation("教师管理-添加教师账号") @AnonymousAccess - public ResultEntity addTeacherAccount(@ApiParam("学校ID") @RequestParam String schoolId, - @ApiParam("学校名称") @RequestParam String schoolName, - @ApiParam("院系ID") @RequestParam String schoolFacultyId, - @ApiParam("专业ID") @RequestParam String schoolMajorId, - @ApiParam("专业名称") @RequestParam String schoolMajorName, + public ResultEntity addTeacherAccount(@ApiParam("学校ID") @RequestParam(required = false) String schoolId, + @ApiParam("学校名称") @RequestParam(required = false) String schoolName, + @ApiParam("院系ID") @RequestParam(required = false) String schoolFacultyId, + @ApiParam("专业ID") @RequestParam(required = false) String schoolMajorId, + @ApiParam("专业名称") @RequestParam(required = false) String schoolMajorName, @ApiParam("教师名称") @RequestParam String name, @ApiParam("教师工号") @RequestParam String userName, @ApiParam("电话号码") @RequestParam(required = false) String phone, @ApiParam("电子邮箱") @RequestParam(required = false) String email, @RequestParam(required = false) String operatorId) { - //先根据schoolId进行查询 如果不存在则返回 - School school = schoolMapper.selectByPrimaryKey(schoolId); + //学校/院系/专业默认从当前操作用户继承;平台管理员可显式指定学校 + Userinfo operator = StringUtils.isBlank(operatorId) ? null : userinfoMapper.selectByPrimaryKey(operatorId); + String effectiveSchoolId = isSchoolTeacher(operator) ? operator.getSchoolId() : StringUtils.trimToNull(schoolId); + if (StringUtils.isBlank(effectiveSchoolId)) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "无法确定教师所属学校"); + } + School school = schoolMapper.selectByPrimaryKey(effectiveSchoolId); if (school == null) { return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该学校不存在"); } - if (!canManageSchoolStructure(operatorId, schoolId)) { + if (!canManageSchoolStructure(operatorId, effectiveSchoolId)) { return noManagePermission(); } - //再根据schoolFacultyId查询 如果不存在则返回 - SchoolFaculty schoolFaculty = schoolFacultyMapper.selectByPrimaryKey(schoolFacultyId); - if (schoolFaculty == null) { + String effectiveFacultyId = isSchoolTeacher(operator) ? StringUtils.trimToNull(operator.getSchoolFacultyId()) : StringUtils.trimToNull(schoolFacultyId); + String effectiveMajorId = isSchoolTeacher(operator) ? StringUtils.trimToNull(operator.getSchoolMajorId()) : StringUtils.trimToNull(schoolMajorId); + //院系/专业选填:有值才校验 + if (StringUtils.isNotBlank(effectiveFacultyId) && schoolFacultyMapper.selectByPrimaryKey(effectiveFacultyId) == null) { return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该院系不存在"); } - //再根据schoolMajorId查询 如果不存在则返回 - SchoolMajor schoolMajor = schoolMajorMapper.selectByPrimaryKey(schoolMajorId); - if (schoolMajor == null) { + if (StringUtils.isNotBlank(effectiveMajorId) && schoolMajorMapper.selectByPrimaryKey(effectiveMajorId) == null) { return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该专业不存在"); } //检查userName是否已经存在 @@ -599,9 +603,9 @@ public class UserController { userInfo.setEmail(email); userInfo.setCreateTime(new Date()); userInfo.setRole(3); - userInfo.setSchoolId(schoolId); - userInfo.setSchoolFacultyId(schoolFacultyId); - userInfo.setSchoolMajorId(schoolMajorId); + userInfo.setSchoolId(effectiveSchoolId); + userInfo.setSchoolFacultyId(effectiveFacultyId); + userInfo.setSchoolMajorId(effectiveMajorId); userInfo.setSchoolClassId(null); userInfo.setTeacherAdmin(false); userInfo.setCodeFrom("添加"); @@ -765,15 +769,18 @@ public class UserController { if (!errorMessages.isEmpty()) { return new ResultEntity<>(HttpStatus.BAD_REQUEST, "数据校验失败!", errorMessages); } - for (TeacherImportDTO teacher : teacherList) { - String schoolId = schoolService.selectSchoolIdBySchoolName(teacher.getSchoolName()); - if (!canManageSchoolStructure(operatorId, schoolId)) { - return noManagePermission(); - } + // 教师的学校/院系/专业直接取自当前操作用户,不再从Excel的院校名称列解析 + Userinfo operator = userinfoMapper.selectByPrimaryKey(operatorId); + String effectiveSchoolId = operator == null ? null : StringUtils.trimToEmpty(operator.getSchoolId()); + if (StringUtils.isBlank(effectiveSchoolId)) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "无法确定当前用户所属学校,导入失败"); + } + if (!canManageSchoolStructure(operatorId, effectiveSchoolId)) { + return noManagePermission(); } // 异步处理导入***** - importService.processTeacherImport(teacherList); + importService.processTeacherImport(teacherList, operator); return new ResultEntity<>(HttpStatus.OK, "导入成功!"); } catch (Exception e) { @@ -815,9 +822,9 @@ public class UserController { @AnonymousAccess public ResultEntity addStudentAccount(@ApiParam("学校ID") @RequestParam String schoolId, @ApiParam("学校名称") @RequestParam String schoolName, - @ApiParam("院系ID") @RequestParam String schoolFacultyId, - @ApiParam("专业ID") @RequestParam String schoolMajorId, - @ApiParam("专业名称") @RequestParam String schoolMajorName, + @ApiParam("院系ID") @RequestParam(required = false) String schoolFacultyId, + @ApiParam("专业ID") @RequestParam(required = false) String schoolMajorId, + @ApiParam("专业名称") @RequestParam(required = false) String schoolMajorName, @ApiParam("班级名称") @RequestParam String schoolClassName, @ApiParam("班级Id") @RequestParam String schoolClassId, @ApiParam("学生姓名") @RequestParam String name, @@ -832,14 +839,11 @@ public class UserController { if (school == null) { return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该学校不存在"); } - //再根据schoolFacultyId查询 如果不存在则返回 - SchoolFaculty schoolFaculty = schoolFacultyMapper.selectByPrimaryKey(schoolFacultyId); - if (schoolFaculty == null) { + //院系/专业改为选填:传了才校验,不传直接入库为空 + if (StringUtils.isNotBlank(schoolFacultyId) && schoolFacultyMapper.selectByPrimaryKey(schoolFacultyId) == null) { return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该院系不存在"); } - //再根据schoolMajorId查询 如果不存在则返回 - SchoolMajor schoolMajor = schoolMajorMapper.selectByPrimaryKey(schoolMajorId); - if (schoolMajor == null) { + if (StringUtils.isNotBlank(schoolMajorId) && schoolMajorMapper.selectByPrimaryKey(schoolMajorId) == null) { return new ResultEntity<>(HttpStatus.BAD_REQUEST, "该专业不存在"); } SchoolClass schoolClass = schoolClassMapper.selectByPrimaryKey(schoolClassId); @@ -865,8 +869,8 @@ public class UserController { userInfo.setRole(4); userInfo.setTeacherAdmin(false); userInfo.setSchoolId(effectiveSchoolId); - userInfo.setSchoolFacultyId(schoolFacultyId); - userInfo.setSchoolMajorId(schoolMajorId); + userInfo.setSchoolFacultyId(StringUtils.trimToNull(schoolFacultyId)); + userInfo.setSchoolMajorId(StringUtils.trimToNull(schoolMajorId)); String adminClassId = "TEACHING".equals(schoolClass.getClassType()) ? resolveAdminClassIdForTeachingClass(schoolClass) : schoolClassId; @@ -2129,8 +2133,6 @@ public class UserController { String name = StringUtils.trimToEmpty(row.getName()); String username = StringUtils.trimToEmpty(row.getUsername()); - String facultyName = StringUtils.trimToEmpty(row.getSchoolFacultyName()); - String majorName = StringUtils.trimToEmpty(row.getSchoolMajorName()); String className = StringUtils.trimToEmpty(row.getSchoolClassName()); String sex = normalizeTeacherImportSex(row.getSex()); @@ -2147,32 +2149,16 @@ public class UserController { if (StringUtils.isNotBlank(row.getSex()) && sex == null) { errors.add("第" + rowNumber + "行:性别请填写男或女"); } - if (StringUtils.isBlank(facultyName)) { - errors.add("第" + rowNumber + "行:所属院系不能为空"); - } - if (StringUtils.isBlank(majorName)) { - errors.add("第" + rowNumber + "行:所属专业不能为空"); - } if (StringUtils.isBlank(className)) { errors.add("第" + rowNumber + "行:所属班级不能为空"); } - SchoolFaculty faculty = StringUtils.isBlank(facultyName) ? null : findTeacherImportFaculty(operator.getSchoolId(), facultyName); - SchoolMajor major = null; + //院系/专业列已取消,班级直接按本校行政班名称匹配 SchoolClass schoolClass = null; - if (StringUtils.isNotBlank(facultyName) && faculty == null) { - errors.add("第" + rowNumber + "行:未找到院系“" + facultyName + "”"); - } - if (faculty != null && StringUtils.isNotBlank(majorName)) { - major = findTeacherImportMajor(faculty.getSchoolFacultyId(), majorName); - if (major == null) { - errors.add("第" + rowNumber + "行:院系“" + facultyName + "”下未找到专业“" + majorName + "”"); - } - } - if (major != null && StringUtils.isNotBlank(className)) { - schoolClass = findTeacherImportClass(operator.getSchoolId(), major.getSchoolMajorId(), className); + if (StringUtils.isNotBlank(className)) { + schoolClass = findTeacherImportAdminClass(operator.getSchoolId(), className); if (schoolClass == null) { - errors.add("第" + rowNumber + "行:专业“" + majorName + "”下未找到班级“" + className + "”"); + errors.add("第" + rowNumber + "行:未找到行政班“" + className + "”"); } else if (!isAdminClass(schoolClass)) { errors.add("第" + rowNumber + "行:学生账号只能导入行政班"); } else if (!canManageAdminClass(operator, schoolClass)) { @@ -2192,8 +2178,6 @@ public class UserController { student.setRole(4); student.setTeacherAdmin(false); student.setSchoolId(operator.getSchoolId()); - student.setSchoolFacultyId(faculty.getSchoolFacultyId()); - student.setSchoolMajorId(major.getSchoolMajorId()); student.setSchoolClassId(schoolClass.getSchoolClassId()); student.setCreateTime(new Date()); student.setCodeFrom("Excel导入"); @@ -2210,8 +2194,6 @@ public class UserController { return StringUtils.isBlank(row.getName()) && StringUtils.isBlank(row.getUsername()) && StringUtils.isBlank(row.getSex()) - && StringUtils.isBlank(row.getSchoolFacultyName()) - && StringUtils.isBlank(row.getSchoolMajorName()) && StringUtils.isBlank(row.getSchoolClassName()) && StringUtils.isBlank(row.getPhone()) && StringUtils.isBlank(row.getEmail()); @@ -2241,30 +2223,23 @@ public class UserController { return false; } - private SchoolFaculty findTeacherImportFaculty(String schoolId, String facultyName) { - SchoolFacultyExample example = new SchoolFacultyExample(); + private SchoolClass findTeacherImportClass(String schoolId, String majorId, String className) { + SchoolClassExample example = new SchoolClassExample(); example.createCriteria() .andSchoolIdEqualTo(schoolId) - .andSchoolFacultyNameEqualTo(facultyName); - List faculties = schoolFacultyMapper.selectByExample(example); - return faculties.isEmpty() ? null : faculties.get(0); - } - - private SchoolMajor findTeacherImportMajor(String facultyId, String majorName) { - SchoolMajorExample example = new SchoolMajorExample(); - example.createCriteria() - .andSchoolFacultyIdEqualTo(facultyId) - .andSchoolMajorNameEqualTo(majorName); - List majors = schoolMajorMapper.selectByExample(example); - return majors.isEmpty() ? null : majors.get(0); + .andSchoolMajorIdEqualTo(majorId) + .andClassNameEqualTo(className); + List classes = schoolClassMapper.selectByExample(example); + return classes.isEmpty() ? null : classes.get(0); } - private SchoolClass findTeacherImportClass(String schoolId, String majorId, String className) { + //学生账号导入不再区分院系/专业,班级直接按本校行政班名称匹配 + private SchoolClass findTeacherImportAdminClass(String schoolId, String className) { SchoolClassExample example = new SchoolClassExample(); example.createCriteria() .andSchoolIdEqualTo(schoolId) - .andSchoolMajorIdEqualTo(majorId) - .andClassNameEqualTo(className); + .andClassNameEqualTo(className) + .andClassTypeEqualTo("ADMIN"); List classes = schoolClassMapper.selectByExample(example); return classes.isEmpty() ? null : classes.get(0); } diff --git a/src/main/java/com/sztzjy/linkCommerce/entity/importDto/SchoolAdminStudentImportDTO.java b/src/main/java/com/sztzjy/linkCommerce/entity/importDto/SchoolAdminStudentImportDTO.java index 1a34b33..dcd3b35 100644 --- a/src/main/java/com/sztzjy/linkCommerce/entity/importDto/SchoolAdminStudentImportDTO.java +++ b/src/main/java/com/sztzjy/linkCommerce/entity/importDto/SchoolAdminStudentImportDTO.java @@ -18,14 +18,6 @@ public class SchoolAdminStudentImportDTO { @ApiModelProperty("性别") private String sex; - @ExcelProperty("所属院系") - @ApiModelProperty("所属院系") - private String schoolFacultyName; - - @ExcelProperty("所属专业") - @ApiModelProperty("所属专业") - private String schoolMajorName; - @ExcelProperty("所属班级") @ApiModelProperty("所属班级") private String schoolClassName; diff --git a/src/main/java/com/sztzjy/linkCommerce/entity/importDto/TeacherImportDTO.java b/src/main/java/com/sztzjy/linkCommerce/entity/importDto/TeacherImportDTO.java index 8eaba68..0199deb 100644 --- a/src/main/java/com/sztzjy/linkCommerce/entity/importDto/TeacherImportDTO.java +++ b/src/main/java/com/sztzjy/linkCommerce/entity/importDto/TeacherImportDTO.java @@ -1,28 +1,24 @@ package com.sztzjy.linkCommerce.entity.importDto; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class TeacherImportDTO { - @ApiModelProperty("院校名称") - private String schoolName; - - @ApiModelProperty("院系名称") - private String schoolFacultyName; - - @ApiModelProperty("专业名称") - private String schoolMajorName; - + @ExcelProperty("教师姓名") @ApiModelProperty("教师姓名") private String teacherName; + @ExcelProperty("工号") @ApiModelProperty("工号") private String userName; + @ExcelProperty("电话") @ApiModelProperty("电话") private String phone; + @ExcelProperty("邮箱") @ApiModelProperty("邮箱") private String email; } diff --git a/src/main/java/com/sztzjy/linkCommerce/service/ImportService.java b/src/main/java/com/sztzjy/linkCommerce/service/ImportService.java index 7af701b..e33b817 100644 --- a/src/main/java/com/sztzjy/linkCommerce/service/ImportService.java +++ b/src/main/java/com/sztzjy/linkCommerce/service/ImportService.java @@ -1,12 +1,13 @@ package com.sztzjy.linkCommerce.service; +import com.sztzjy.linkCommerce.entity.Userinfo; import com.sztzjy.linkCommerce.entity.importDto.StudentImportDTO; import com.sztzjy.linkCommerce.entity.importDto.TeacherImportDTO; import java.util.List; public interface ImportService { - void processTeacherImport(List teacherList); + void processTeacherImport(List teacherList, Userinfo operator); void processStudentImport(List studentList); } diff --git a/src/main/java/com/sztzjy/linkCommerce/service/impl/ImportServiceImpl.java b/src/main/java/com/sztzjy/linkCommerce/service/impl/ImportServiceImpl.java index 85865df..782d8a7 100644 --- a/src/main/java/com/sztzjy/linkCommerce/service/impl/ImportServiceImpl.java +++ b/src/main/java/com/sztzjy/linkCommerce/service/impl/ImportServiceImpl.java @@ -21,7 +21,8 @@ public class ImportServiceImpl implements ImportService { @Autowired UserinfoMapper userInfoMapper; @Override - public void processTeacherImport(List teacherList) { + public void processTeacherImport(List teacherList, Userinfo operator) { + // 教师的学校/院系/专业直接继承当前操作用户 for (int i = 0; i < teacherList.size(); i++) { TeacherImportDTO teacherImportDTO = teacherList.get(i); Userinfo userInfo = new Userinfo(); @@ -34,9 +35,9 @@ public class ImportServiceImpl implements ImportService { userInfo.setCreateTime(new Date()); userInfo.setRole(3); userInfo.setTeacherAdmin(false); - userInfo.setSchoolId(schoolService.selectSchoolIdBySchoolName(teacherImportDTO.getSchoolName())); - userInfo.setSchoolFacultyId(schoolService.selectFacultyIdBySchoolIdAndFacultyName(userInfo.getSchoolId(),teacherImportDTO.getSchoolFacultyName())); - userInfo.setSchoolMajorId(schoolService.selectMajorIdByFacultyIdAndMajorName(userInfo.getSchoolFacultyId(),teacherImportDTO.getSchoolMajorName())); + userInfo.setSchoolId(operator == null ? null : operator.getSchoolId()); + userInfo.setSchoolFacultyId(operator == null ? null : operator.getSchoolFacultyId()); + userInfo.setSchoolMajorId(operator == null ? null : operator.getSchoolMajorId()); userInfo.setSchoolClassId(null); userInfo.setCodeFrom("导入"); userInfoMapper.insert(userInfo); diff --git a/src/main/java/com/sztzjy/linkCommerce/service/impl/ValidateServiceImpl.java b/src/main/java/com/sztzjy/linkCommerce/service/impl/ValidateServiceImpl.java index 7124469..0147f50 100644 --- a/src/main/java/com/sztzjy/linkCommerce/service/impl/ValidateServiceImpl.java +++ b/src/main/java/com/sztzjy/linkCommerce/service/impl/ValidateServiceImpl.java @@ -38,25 +38,7 @@ public class ValidateServiceImpl implements ValidateService { TeacherImportDTO teacher = teacherList.get(i); int rowNum = i + 2; // Excel行号(标题行+1) - // 1. 校验院校名称 - if (StringUtils.isBlank(teacher.getSchoolName())) { - errors.add("第" + rowNum + "行: 院校名称不能为空"); - } - - // 2. 校验院系名称 - if (StringUtils.isBlank(teacher.getSchoolFacultyName())) { - errors.add("第" + rowNum + "行: 院系名称不能为空"); - } - - // 3. 校验专业名称 - if (StringUtils.isBlank(teacher.getSchoolMajorName())) { - errors.add("第" + rowNum + "行: 专业名称不能为空"); - } else if (!schoolService.existsBySchoolMajorName(teacher.getSchoolName(),teacher.getSchoolMajorName(), teacher.getSchoolFacultyName())) { - errors.add("第" + rowNum + "行: 专业'" + teacher.getSchoolMajorName() + - "'在院系'" + teacher.getSchoolFacultyName() + "'下不存在"); - } - - // 4. 校验教师姓名 + // 1. 校验教师姓名(教师归属的学校/院系/专业直接取自当前操作用户,不再从Excel读取) if (StringUtils.isBlank(teacher.getTeacherName())) { errors.add("第" + rowNum + "行: 教师姓名不能为空"); } diff --git a/src/test/java/com/sztzjy/linkCommerce/controller/stu/UserControllerTeacherAdminTest.java b/src/test/java/com/sztzjy/linkCommerce/controller/stu/UserControllerTeacherAdminTest.java index d6c7044..cf80ef2 100644 --- a/src/test/java/com/sztzjy/linkCommerce/controller/stu/UserControllerTeacherAdminTest.java +++ b/src/test/java/com/sztzjy/linkCommerce/controller/stu/UserControllerTeacherAdminTest.java @@ -1304,14 +1304,12 @@ class UserControllerTeacherAdminTest { adminClass.setClassType("ADMIN"); adminClass.setCreatedBy("teacher-1"); when(controller.userinfoMapper.selectByPrimaryKey("teacher-1")).thenReturn(teacher("teacher-1", true)); - when(controller.schoolFacultyMapper.selectByExample(any())).thenReturn(Collections.singletonList(faculty("faculty-1", "院系"))); - when(controller.schoolMajorMapper.selectByExample(any())).thenReturn(Collections.singletonList(major("major-1", "faculty-1", "专业"))); when(controller.schoolClassMapper.selectByExample(any())).thenReturn(Collections.singletonList(adminClass)); when(controller.userInfoService.existsByUserName("20260001")).thenReturn(false); when(controller.userinfoMapper.insertSelective(any(Userinfo.class))).thenReturn(1); ResultEntity result = controller.importTeacherStudentRows( - Collections.singletonList(studentAccountRow("张三", "20260001", "男", "院系", "专业", "行政一班")), + Collections.singletonList(studentAccountRow("张三", "20260001", "男", "行政一班")), "teacher-1"); ArgumentCaptor captor = ArgumentCaptor.forClass(Userinfo.class); @@ -1335,14 +1333,12 @@ class UserControllerTeacherAdminTest { adminClass.setClassType("ADMIN"); adminClass.setCreatedBy("teacher-2"); when(controller.userinfoMapper.selectByPrimaryKey("teacher-1")).thenReturn(teacher("teacher-1", true)); - when(controller.schoolFacultyMapper.selectByExample(any())).thenReturn(Collections.singletonList(faculty("faculty-1", "院系"))); - when(controller.schoolMajorMapper.selectByExample(any())).thenReturn(Collections.singletonList(major("major-1", "faculty-1", "专业"))); when(controller.schoolClassMapper.selectByExample(any())).thenReturn(Collections.singletonList(adminClass)); when(controller.userInfoService.existsByUserName("20260001")).thenReturn(false); when(controller.userinfoMapper.insertSelective(any(Userinfo.class))).thenReturn(1); ResultEntity result = controller.importTeacherStudentRows( - Collections.singletonList(studentAccountRow("张三", "20260001", "男", "院系", "专业", "行政一班")), + Collections.singletonList(studentAccountRow("张三", "20260001", "男", "行政一班")), "teacher-1"); assertEquals(HttpStatus.OK, result.getStatusCode()); @@ -1464,15 +1460,11 @@ class UserControllerTeacherAdminTest { private SchoolAdminStudentImportDTO studentAccountRow(String name, String username, String sex, - String facultyName, - String majorName, String className) { SchoolAdminStudentImportDTO row = new SchoolAdminStudentImportDTO(); row.setName(name); row.setUsername(username); row.setSex(sex); - row.setSchoolFacultyName(facultyName); - row.setSchoolMajorName(majorName); row.setSchoolClassName(className); row.setPhone("13800000000"); row.setEmail("student@example.com"); diff --git a/src/test/java/com/sztzjy/linkCommerce/service/impl/ImportServiceImplTest.java b/src/test/java/com/sztzjy/linkCommerce/service/impl/ImportServiceImplTest.java index 6952a71..d8a7abc 100644 --- a/src/test/java/com/sztzjy/linkCommerce/service/impl/ImportServiceImplTest.java +++ b/src/test/java/com/sztzjy/linkCommerce/service/impl/ImportServiceImplTest.java @@ -3,37 +3,65 @@ package com.sztzjy.linkCommerce.service.impl; import com.sztzjy.linkCommerce.entity.Userinfo; import com.sztzjy.linkCommerce.entity.importDto.TeacherImportDTO; import com.sztzjy.linkCommerce.mapper.UserinfoMapper; -import com.sztzjy.linkCommerce.service.SchoolService; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import java.util.Collections; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; class ImportServiceImplTest { @Test void teacherImportCreatesOrdinaryTeacher() { ImportServiceImpl service = new ImportServiceImpl(); - service.schoolService = mock(SchoolService.class); service.userInfoMapper = mock(UserinfoMapper.class); - when(service.schoolService.selectSchoolIdBySchoolName(any())).thenReturn("school-1"); - when(service.schoolService.selectFacultyIdBySchoolIdAndFacultyName(any(), any())).thenReturn("faculty-1"); - when(service.schoolService.selectMajorIdByFacultyIdAndMajorName(any(), any())).thenReturn("major-1"); + + // 操作用户的学校/院系/专业应直接继承给导入的教师 + Userinfo operator = new Userinfo(); + operator.setUserId("operator-1"); + operator.setSchoolId("school-1"); + operator.setSchoolFacultyId("faculty-1"); + operator.setSchoolMajorId("major-1"); TeacherImportDTO row = new TeacherImportDTO(); row.setTeacherName("张老师"); row.setUserName("t001"); - service.processTeacherImport(Collections.singletonList(row)); + service.processTeacherImport(Collections.singletonList(row), operator); ArgumentCaptor captor = ArgumentCaptor.forClass(Userinfo.class); verify(service.userInfoMapper).insert(captor.capture()); assertFalse(captor.getValue().getTeacherAdmin()); + assertEquals("school-1", captor.getValue().getSchoolId()); + assertEquals("faculty-1", captor.getValue().getSchoolFacultyId()); + assertEquals("major-1", captor.getValue().getSchoolMajorId()); + } + + @Test + void teacherImportWithoutOperatorOrganizationLeavesFieldsEmpty() { + ImportServiceImpl service = new ImportServiceImpl(); + service.userInfoMapper = mock(UserinfoMapper.class); + + Userinfo operator = new Userinfo(); + operator.setUserId("operator-2"); + operator.setSchoolId("school-1"); + + TeacherImportDTO row = new TeacherImportDTO(); + row.setTeacherName("李老师"); + row.setUserName("t002"); + + service.processTeacherImport(Collections.singletonList(row), operator); + + ArgumentCaptor captor = ArgumentCaptor.forClass(Userinfo.class); + verify(service.userInfoMapper).insert(captor.capture()); + assertEquals("school-1", captor.getValue().getSchoolId()); + assertNull(captor.getValue().getSchoolFacultyId()); + assertNull(captor.getValue().getSchoolMajorId()); } }