From 36fad320438607015c666c5f280754d51697a5b2 Mon Sep 17 00:00:00 2001 From: chenyuan Date: Sat, 1 Aug 2026 13:43:24 +0800 Subject: [PATCH] feat: restrict teacher class roster --- .../controller/stu/UserController.java | 12 ++++-- .../TeacherRosterStudentImportDTO.java | 14 +------ .../linkCommerce/service/SchoolService.java | 3 ++ .../service/impl/SchoolServiceImpl.java | 12 ++++++ .../stu/TaskAllocationControllerTest.java | 14 +++++-- .../stu/TeacherRosterImportTest.java | 7 ++++ .../service/impl/SchoolServiceImplTest.java | 41 +++++++++++++++++++ 7 files changed, 82 insertions(+), 21 deletions(-) create mode 100644 src/test/java/com/sztzjy/linkCommerce/service/impl/SchoolServiceImplTest.java 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 4906e50..0da6a72 100644 --- a/src/main/java/com/sztzjy/linkCommerce/controller/stu/UserController.java +++ b/src/main/java/com/sztzjy/linkCommerce/controller/stu/UserController.java @@ -455,7 +455,14 @@ public class UserController { @ApiParam("学校ID") @RequestParam(required = false) String schoolId, @ApiParam("专业ID-学校管理员使用") @RequestParam(required = false) String schoolMajorId, @ApiParam("班级名称") @RequestParam(required = false) String className, - @ApiParam("班级编号") @RequestParam(required = false) String classSn) { + @ApiParam("班级编号") @RequestParam(required = false) String classSn, + @RequestParam(required = false) String operatorId) { + Userinfo operator = StringUtils.isBlank(operatorId) ? null : userinfoMapper.selectByPrimaryKey(operatorId); + if (isSchoolTeacher(operator) && isTeacherRosterMode(operator.getSchoolId())) { + PageInfo pageInfo = schoolService.seleteSchoolClass(index, size, operator.getSchoolId(), + className, classSn, null, operatorId, "TEACHING"); + return new ResultEntity<>(HttpStatus.OK, "班级管理-查询成功", pageInfo); + } PageInfo pageInfo = schoolService.seleteSchoolClass(index, size, schoolId, className, classSn, schoolMajorId); return new ResultEntity<>(HttpStatus.OK, "班级管理-查询成功", pageInfo); } @@ -1223,9 +1230,6 @@ public class UserController { student.setName(name); student.setUsername(username); student.setPassword("123qwe"); - student.setSex(StringUtils.trimToEmpty(row.getSex())); - student.setPhone(StringUtils.trimToEmpty(row.getPhone())); - student.setEmail(StringUtils.trimToEmpty(row.getEmail())); student.setRole(4); student.setTeacherAdmin(false); student.setSchoolId(operator.getSchoolId()); diff --git a/src/main/java/com/sztzjy/linkCommerce/entity/importDto/TeacherRosterStudentImportDTO.java b/src/main/java/com/sztzjy/linkCommerce/entity/importDto/TeacherRosterStudentImportDTO.java index e140ba7..f277174 100644 --- a/src/main/java/com/sztzjy/linkCommerce/entity/importDto/TeacherRosterStudentImportDTO.java +++ b/src/main/java/com/sztzjy/linkCommerce/entity/importDto/TeacherRosterStudentImportDTO.java @@ -3,25 +3,13 @@ package com.sztzjy.linkCommerce.entity.importDto; import com.alibaba.excel.annotation.ExcelProperty; public class TeacherRosterStudentImportDTO { - @ExcelProperty("姓名") + @ExcelProperty("学生姓名") private String name; @ExcelProperty("学号") private String username; - @ExcelProperty("性别") - private String sex; - @ExcelProperty("手机") - private String phone; - @ExcelProperty("邮箱") - private String email; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } - public String getSex() { return sex; } - public void setSex(String sex) { this.sex = sex; } - public String getPhone() { return phone; } - public void setPhone(String phone) { this.phone = phone; } - public String getEmail() { return email; } - public void setEmail(String email) { this.email = email; } } diff --git a/src/main/java/com/sztzjy/linkCommerce/service/SchoolService.java b/src/main/java/com/sztzjy/linkCommerce/service/SchoolService.java index e105d72..65740ef 100644 --- a/src/main/java/com/sztzjy/linkCommerce/service/SchoolService.java +++ b/src/main/java/com/sztzjy/linkCommerce/service/SchoolService.java @@ -21,6 +21,9 @@ public interface SchoolService { PageInfo seleteSchoolClass(Integer index, Integer size, String schoolId, String className, String classSn, String schoolMajorId); + PageInfo seleteSchoolClass(Integer index, Integer size, String schoolId, String className, + String classSn, String schoolMajorId, String createdBy, String classType); + boolean existsBySchoolMajorName(String schoolName,String schoolMajorName, String schoolFacultyName); boolean existsBySchoolClassName(String schoolName, String schoolMajorName, String schoolFacultyName, String schoolClassName); diff --git a/src/main/java/com/sztzjy/linkCommerce/service/impl/SchoolServiceImpl.java b/src/main/java/com/sztzjy/linkCommerce/service/impl/SchoolServiceImpl.java index acbf6e0..b1a99d3 100644 --- a/src/main/java/com/sztzjy/linkCommerce/service/impl/SchoolServiceImpl.java +++ b/src/main/java/com/sztzjy/linkCommerce/service/impl/SchoolServiceImpl.java @@ -102,6 +102,12 @@ public class SchoolServiceImpl implements SchoolService { @Override public PageInfo seleteSchoolClass(Integer index, Integer size, String schoolId, String className, String classSn, String schoolMajorId) { + return seleteSchoolClass(index, size, schoolId, className, classSn, schoolMajorId, null, null); + } + + @Override + public PageInfo seleteSchoolClass(Integer index, Integer size, String schoolId, String className, + String classSn, String schoolMajorId, String createdBy, String classType) { PageHelper.startPage(index, size); // 查询院系信息,假设您有相应的 DAO 或 Mapper 可以用来执行查询 @@ -117,6 +123,12 @@ public class SchoolServiceImpl implements SchoolService { if (StringUtils.isNotBlank(schoolMajorId)) { criteria.andSchoolMajorIdEqualTo(schoolMajorId); } + if (StringUtils.isNotBlank(createdBy)) { + criteria.andCreatedByEqualTo(createdBy); + } + if (StringUtils.isNotBlank(classType)) { + criteria.andClassTypeEqualTo(classType); + } List schoolClasses = schoolClassMapper.selectByExample(schoolClassExample); // 将院系信息转换为 DTO diff --git a/src/test/java/com/sztzjy/linkCommerce/controller/stu/TaskAllocationControllerTest.java b/src/test/java/com/sztzjy/linkCommerce/controller/stu/TaskAllocationControllerTest.java index 18c2f16..3b7630f 100644 --- a/src/test/java/com/sztzjy/linkCommerce/controller/stu/TaskAllocationControllerTest.java +++ b/src/test/java/com/sztzjy/linkCommerce/controller/stu/TaskAllocationControllerTest.java @@ -60,6 +60,7 @@ class TaskAllocationControllerTest { TaskAllocationController controller = controllerWithMocks(); SchoolClass schoolClass = new SchoolClass(); schoolClass.setSchoolClassId("teaching-1"); + schoolClass.setSchoolId("school-1"); schoolClass.setCreatedBy("teacher-1"); schoolClass.setClassType("TEACHING"); when(controller.schoolClassMapper.selectByPrimaryKey("teaching-1")).thenReturn(schoolClass); @@ -72,10 +73,15 @@ class TaskAllocationControllerTest { ArgumentCaptor captor = ArgumentCaptor.forClass(TaskAllocation.class); assertEquals(HttpStatus.OK, result.getStatusCode()); verify(controller.taskAllocationMapper).deleteByExample(any()); - verify(controller.taskAllocationMapper).insert(captor.capture()); - assertNotNull(captor.getValue().getId()); - assertEquals("teaching-1", captor.getValue().getClassId()); - assertEquals("school-1", captor.getValue().getSchoolId()); + verify(controller.taskAllocationMapper, org.mockito.Mockito.times(2)).insert(captor.capture()); + List inserted = captor.getAllValues(); + assertNotNull(inserted.get(0).getId()); + assertEquals(TaskAllocation.PUBLICATION_MARKER, inserted.get(0).getModule()); + assertEquals((byte) 1, inserted.get(0).getDisabledStatus()); + assertEquals("任务A", inserted.get(1).getModule()); + assertEquals((byte) 0, inserted.get(1).getDisabledStatus()); + assertEquals("teaching-1", inserted.get(1).getClassId()); + assertEquals("school-1", inserted.get(1).getSchoolId()); } @Test diff --git a/src/test/java/com/sztzjy/linkCommerce/controller/stu/TeacherRosterImportTest.java b/src/test/java/com/sztzjy/linkCommerce/controller/stu/TeacherRosterImportTest.java index e3e9695..18cb9ae 100644 --- a/src/test/java/com/sztzjy/linkCommerce/controller/stu/TeacherRosterImportTest.java +++ b/src/test/java/com/sztzjy/linkCommerce/controller/stu/TeacherRosterImportTest.java @@ -19,6 +19,7 @@ import java.util.Collections; import java.util.Arrays; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; @@ -65,6 +66,12 @@ class TeacherRosterImportTest { ResultEntity result = controller.importTeacherRosterRows(Collections.singletonList(row), "teach-1", "teacher-1"); assertEquals(HttpStatus.OK, result.getStatusCode()); + ArgumentCaptor student = ArgumentCaptor.forClass(Userinfo.class); + verify(controller.userinfoMapper).insertSelective(student.capture()); + assertNull(student.getValue().getSex()); + assertNull(student.getValue().getPhone()); + assertNull(student.getValue().getEmail()); + assertEquals(2, TeacherRosterStudentImportDTO.class.getDeclaredFields().length); ArgumentCaptor membership = ArgumentCaptor.forClass(TeachingClassStudent.class); verify(controller.teachingClassStudentMapper).insertSelective(membership.capture()); assertEquals("teach-1", membership.getValue().getTeachingClassId()); diff --git a/src/test/java/com/sztzjy/linkCommerce/service/impl/SchoolServiceImplTest.java b/src/test/java/com/sztzjy/linkCommerce/service/impl/SchoolServiceImplTest.java new file mode 100644 index 0000000..71cc190 --- /dev/null +++ b/src/test/java/com/sztzjy/linkCommerce/service/impl/SchoolServiceImplTest.java @@ -0,0 +1,41 @@ +package com.sztzjy.linkCommerce.service.impl; + +import com.sztzjy.linkCommerce.entity.SchoolClassExample; +import com.sztzjy.linkCommerce.mapper.SchoolClassMapper; +import com.sztzjy.linkCommerce.mapper.SchoolFacultyMapper; +import com.sztzjy.linkCommerce.mapper.SchoolMajorMapper; +import com.sztzjy.linkCommerce.mapper.SchoolMapper; +import com.sztzjy.linkCommerce.mapper.UserinfoMapper; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; + +import java.util.Collections; + +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +class SchoolServiceImplTest { + + @Test + void classQueryCanRestrictResultsToTheOwningTeacherTeachingClasses() { + SchoolServiceImpl service = new SchoolServiceImpl(); + service.schoolMapper = mock(SchoolMapper.class); + service.schoolFacultyMapper = mock(SchoolFacultyMapper.class); + service.schoolMajorMapper = mock(SchoolMajorMapper.class); + service.schoolClassMapper = mock(SchoolClassMapper.class); + service.userinfoMapper = mock(UserinfoMapper.class); + when(service.schoolClassMapper.selectByExample(org.mockito.ArgumentMatchers.any(SchoolClassExample.class))) + .thenReturn(Collections.emptyList()); + + service.seleteSchoolClass(1, 10, "school-1", "", "", "", "teacher-1", "TEACHING"); + + ArgumentCaptor example = ArgumentCaptor.forClass(SchoolClassExample.class); + verify(service.schoolClassMapper).selectByExample(example.capture()); + assertTrue(example.getValue().getOredCriteria().get(0).getAllCriteria().stream() + .anyMatch(c -> "created_by =".equals(c.getCondition()) && "teacher-1".equals(c.getValue()))); + assertTrue(example.getValue().getOredCriteria().get(0).getAllCriteria().stream() + .anyMatch(c -> "class_type =".equals(c.getCondition()) && "TEACHING".equals(c.getValue()))); + } +}