feat: 学生导入增加教师身份校验
当会员手机号对应的会员身份为"教师"时,校验规则: 1. 教师必须已设置学校信息,否则提示"未设置学校信息,无法绑定学生" 2. 教师所属区域必须与学生所属区域一致 3. 教师所属学校必须与学生所属学校一致 4. 教师所属年级必须与学生所属年级一致 5. 教师所属班级必须与学生所属班级一致 不一致则导入失败并返回具体原因 同步更新需求文档
This commit is contained in:
parent
18b9a09348
commit
904c7c9500
|
|
@ -356,9 +356,19 @@ public class PgStudentServiceImpl implements IPgStudentService {
|
|||
}
|
||||
|
||||
// 5. 查找或创建会员
|
||||
Long memberId = findOrCreateMember(dto.getMemberPhone().trim());
|
||||
PgMember member = findOrCreateMember(dto.getMemberPhone().trim());
|
||||
Long memberId = member.getMemberId();
|
||||
|
||||
// 6. 检查学号是否重复
|
||||
// 6. 教师身份校验:教师的区域/学校/年级/班级必须与学生一致
|
||||
if ("2".equals(member.getIdentityType())) {
|
||||
String teacherError = validateTeacherStudent(member, school, schoolGrade, schoolClass);
|
||||
if (teacherError != null) {
|
||||
failList.add(createFailItem(rowNum, teacherError));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// 7. 检查学号是否重复
|
||||
if (StrUtil.isNotBlank(dto.getStudentNo())) {
|
||||
PgStudent existStudent = baseMapper.selectOne(
|
||||
new LambdaQueryWrapper<PgStudent>()
|
||||
|
|
@ -370,7 +380,7 @@ public class PgStudentServiceImpl implements IPgStudentService {
|
|||
}
|
||||
}
|
||||
|
||||
// 7. 创建学生
|
||||
// 8. 创建学生
|
||||
PgStudent student = new PgStudent();
|
||||
student.setStudentName(dto.getStudentName().trim());
|
||||
student.setStudentNo(StrUtil.isNotBlank(dto.getStudentNo()) ? dto.getStudentNo().trim() : null);
|
||||
|
|
@ -440,14 +450,14 @@ public class PgStudentServiceImpl implements IPgStudentService {
|
|||
/**
|
||||
* 查找或创建会员
|
||||
*/
|
||||
private Long findOrCreateMember(String phone) {
|
||||
private PgMember findOrCreateMember(String phone) {
|
||||
// 先查找已有会员
|
||||
PgMember member = memberMapper.selectOne(
|
||||
new LambdaQueryWrapper<PgMember>()
|
||||
.eq(PgMember::getPhone, phone)
|
||||
);
|
||||
if (member != null) {
|
||||
return member.getMemberId();
|
||||
return member;
|
||||
}
|
||||
|
||||
// 不存在则创建新会员(身份为家长,初始密码123456)
|
||||
|
|
@ -462,7 +472,46 @@ public class PgStudentServiceImpl implements IPgStudentService {
|
|||
newMember.setRegisterTime(new Date()); // 注册时间
|
||||
memberMapper.insert(newMember);
|
||||
|
||||
return newMember.getMemberId();
|
||||
return newMember;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验教师与学生的归属关系
|
||||
* 教师的区域/学校/年级/班级必须与学生一致
|
||||
*/
|
||||
private String validateTeacherStudent(PgMember teacher, PgSchool studentSchool,
|
||||
PgSchoolGrade studentGrade, PgSchoolClass studentClass) {
|
||||
String teacherInfo = "教师\"" + (teacher.getNickname() != null ? teacher.getNickname() : "未知")
|
||||
+ "\"(" + teacher.getPhone() + ")";
|
||||
|
||||
// 检查教师是否设置了学校信息
|
||||
if (teacher.getSchoolId() == null || teacher.getSchoolGradeId() == null || teacher.getSchoolClassId() == null) {
|
||||
return teacherInfo + "未设置学校信息,无法绑定学生";
|
||||
}
|
||||
|
||||
// 校验区域(通过学校的区域ID间接校验)
|
||||
if (teacher.getRegionId() != null && studentSchool.getRegionId() != null) {
|
||||
if (!teacher.getRegionId().equals(studentSchool.getRegionId())) {
|
||||
return teacherInfo + "所属区域与学生不一致";
|
||||
}
|
||||
}
|
||||
|
||||
// 校验学校
|
||||
if (!teacher.getSchoolId().equals(studentSchool.getSchoolId())) {
|
||||
return teacherInfo + "所属学校与学生不一致";
|
||||
}
|
||||
|
||||
// 校验年级
|
||||
if (!teacher.getSchoolGradeId().equals(studentGrade.getId())) {
|
||||
return teacherInfo + "所属年级与学生不一致";
|
||||
}
|
||||
|
||||
// 校验班级
|
||||
if (!teacher.getSchoolClassId().equals(studentClass.getId())) {
|
||||
return teacherInfo + "所属班级与学生不一致";
|
||||
}
|
||||
|
||||
return null; // 校验通过
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -829,6 +829,8 @@
|
|||
| 1 | 下载模板,模板包含姓名-必填,学号-必填,会员手机号-必填,区域-必填,学校-必填,年级-必填,班级-必填,性别-选填,出生日期-选填 |
|
||||
| 2 | 导入数据时,检查必填信息,并检查区域/学校/年级/班级对应的信息一致 |
|
||||
| 3 | 导入时,同时需要检查用户手机号,如果系统中存在用户手机号,那么导入的学生就挂在当前用户下;如果系统中不存在对应的用户,自动创建当前手机号的用户,身份为家长,初始密码123456,并把学生信息挂在当前用户下 |
|
||||
| 4 | **教师身份校验**:如果会员手机号对应的会员身份为"教师",需校验教师与学生的归属关系一致(区域、学校、年级、班级),不一致则导入失败并提示原因 |
|
||||
| 5 | 教师未设置学校信息时,无法绑定学生,提示"教师未设置学校信息" |
|
||||
|
||||
**表格列定义:**
|
||||
| 字段 | 说明 |
|
||||
|
|
|
|||
Loading…
Reference in New Issue