merge: teacher class summary and password reset

bugfix/ai-assessment-evidence-rescore
chenyuan 1 month ago
commit 615eb1cc93

@ -694,10 +694,12 @@ public class UserController {
@AnonymousAccess
public ResultEntity updateTeacher(@RequestParam String userId, @RequestParam(required = false) String operatorId) {
Userinfo userInfo = userinfoMapper.selectByPrimaryKey(userId);
if (userInfo == null) {
if (userInfo == null || !Integer.valueOf(3).equals(userInfo.getRole())) {
return new ResultEntity<>(HttpStatus.BAD_REQUEST, "教师账号不存在");
}
if (!canManageSchoolStructure(operatorId, userInfo.getSchoolId())) {
Userinfo operator = userinfoMapper.selectByPrimaryKey(operatorId);
if (!isPlatformAdmin(operator)
&& !(isTeacherAdmin(operator) && StringUtils.equals(operator.getSchoolId(), userInfo.getSchoolId()))) {
return noManagePermission();
}
userInfo.setPassword("123qwe");
@ -2413,11 +2415,39 @@ public class UserController {
}
SchoolClassExample example = new SchoolClassExample();
example.createCriteria().andCreatedByIn(teacherIds);
Set<String> classOwnerIds = schoolClassMapper.selectByExample(example).stream()
.map(SchoolClass::getCreatedBy)
List<SchoolClass> ownedClasses = schoolClassMapper.selectByExample(example);
Map<String, List<SchoolClass>> classesByTeacher = (ownedClasses == null ? Collections.<SchoolClass>emptyList() : ownedClasses)
.stream()
.filter(schoolClass -> StringUtils.isNotBlank(schoolClass.getCreatedBy()))
.collect(java.util.stream.Collectors.groupingBy(
SchoolClass::getCreatedBy,
LinkedHashMap::new,
java.util.stream.Collectors.toList()));
teachers.forEach(teacher -> {
List<SchoolClass> teacherClasses = classesByTeacher.getOrDefault(
teacher.getUserId(), Collections.emptyList());
List<String> classNames = teacherClasses.stream()
.map(SchoolClass::getClassName)
.filter(StringUtils::isNotBlank)
.collect(java.util.stream.Collectors.toSet());
teachers.forEach(teacher -> teacher.setHasCreatedClass(classOwnerIds.contains(teacher.getUserId())));
.distinct()
.collect(java.util.stream.Collectors.toList());
Set<String> studentIds = new LinkedHashSet<>();
if (teachingClassStudentMapper != null) {
for (SchoolClass schoolClass : teacherClasses) {
List<TeachingClassStudent> members = teachingClassStudentMapper
.selectByTeachingClassId(schoolClass.getSchoolClassId());
for (TeachingClassStudent member : members == null
? Collections.<TeachingClassStudent>emptyList() : members) {
if (member != null && StringUtils.isNotBlank(member.getStudentUserId())) {
studentIds.add(member.getStudentUserId());
}
}
}
}
teacher.setHasCreatedClass(!teacherClasses.isEmpty());
teacher.setOwnedClassNames(classNames);
teacher.setOwnedStudentCount(studentIds.size());
});
}
private boolean canOperateClass(String operatorId, String schoolClassId) {

@ -1,6 +1,8 @@
package com.sztzjy.linkCommerce.entity;
import java.util.Date;
import java.util.Collections;
import java.util.List;
import io.swagger.annotations.ApiModelProperty;
/**
@ -83,6 +85,12 @@ public class Userinfo {
@ApiModelProperty("是否已创建班级,教师管理列表展示用")
private Boolean hasCreatedClass = false;
@ApiModelProperty("名下班级名称,教师管理列表展示用")
private List<String> ownedClassNames = Collections.emptyList();
@ApiModelProperty("名下班级当前学生数量,教师管理列表展示用")
private Integer ownedStudentCount = 0;
public String getClassName() {
return className;
}
@ -107,6 +115,22 @@ public class Userinfo {
this.hasCreatedClass = hasCreatedClass;
}
public List<String> getOwnedClassNames() {
return ownedClassNames;
}
public void setOwnedClassNames(List<String> ownedClassNames) {
this.ownedClassNames = ownedClassNames == null ? Collections.emptyList() : ownedClassNames;
}
public Integer getOwnedStudentCount() {
return ownedStudentCount;
}
public void setOwnedStudentCount(Integer ownedStudentCount) {
this.ownedStudentCount = ownedStudentCount == null ? 0 : ownedStudentCount;
}
public String getUserId() {
return userId;
}

@ -156,9 +156,15 @@ class UserControllerTeacherAdminTest {
void teacherManagementListsCurrentSchoolTeachersAndMarksClassOwners() {
UserController controller = controllerWithCommonMocks();
Userinfo owner = teacher("teacher-owner");
SchoolClass ownedClass = classCreatedBy("teacher-owner");
ownedClass.setSchoolClassId("class-owned");
ownedClass.setClassName("产品一班");
TeachingClassStudent member = activeMember("class-owned", "student-1");
when(controller.userinfoMapper.selectByPrimaryKey("teacher-admin")).thenReturn(teacher("teacher-admin", true));
when(controller.userinfoMapper.selectByExample(any(UserinfoExample.class))).thenReturn(Collections.singletonList(owner));
when(controller.schoolClassMapper.selectByExample(any(SchoolClassExample.class))).thenReturn(Collections.singletonList(classCreatedBy("teacher-owner")));
when(controller.schoolClassMapper.selectByExample(any(SchoolClassExample.class))).thenReturn(Collections.singletonList(ownedClass));
when(controller.teachingClassStudentMapper.selectByTeachingClassId("class-owned"))
.thenReturn(Collections.singletonList(member));
ResultEntity<PageInfo<Userinfo>> result = controller.selectTeacher(null, null, null, 1, 10, "teacher-admin");
@ -167,6 +173,49 @@ class UserControllerTeacherAdminTest {
assertEquals(HttpStatus.OK, result.getStatusCode());
assertTrue(hasUserCondition(exampleCaptor.getValue(), "school_id =", "school-1"));
assertTrue(result.getBody().getData().getList().get(0).getHasCreatedClass());
assertEquals(Collections.singletonList("产品一班"),
result.getBody().getData().getList().get(0).getOwnedClassNames());
assertEquals(1, result.getBody().getData().getList().get(0).getOwnedStudentCount());
}
@Test
void teacherAdminCanResetTeacherPasswordInSameSchool() {
UserController controller = controllerWithCommonMocks();
Userinfo target = teacher("teacher-2");
target.setPassword("changed-password");
when(controller.userinfoMapper.selectByPrimaryKey("teacher-2")).thenReturn(target);
when(controller.userinfoMapper.updateByPrimaryKey(target)).thenReturn(1);
ResultEntity result = controller.updateTeacher("teacher-2", "teacher-admin");
assertEquals(HttpStatus.OK, result.getStatusCode());
assertEquals("123qwe", target.getPassword());
verify(controller.userinfoMapper).updateByPrimaryKey(target);
}
@Test
void ordinaryTeacherCannotResetAnotherTeacherPassword() {
UserController controller = controllerWithCommonMocks();
Userinfo target = teacher("teacher-2");
when(controller.userinfoMapper.selectByPrimaryKey("teacher-2")).thenReturn(target);
ResultEntity result = controller.updateTeacher("teacher-2", "teacher-1");
assertEquals(HttpStatus.BAD_REQUEST, result.getStatusCode());
verify(controller.userinfoMapper, never()).updateByPrimaryKey(target);
}
@Test
void teacherAdminCannotResetTeacherPasswordFromAnotherSchool() {
UserController controller = controllerWithCommonMocks();
Userinfo target = teacher("teacher-2");
target.setSchoolId("school-2");
when(controller.userinfoMapper.selectByPrimaryKey("teacher-2")).thenReturn(target);
ResultEntity result = controller.updateTeacher("teacher-2", "teacher-admin");
assertEquals(HttpStatus.BAD_REQUEST, result.getStatusCode());
verify(controller.userinfoMapper, never()).updateByPrimaryKey(target);
}
@Test

Loading…
Cancel
Save