refactor: 删除学生管理中的学科字段
前端: - 列表页删除学科列 - 编辑弹窗删除学科下拉框 后端: - PgStudent 实体删除 subjectId 字段 - StudentVo 删除 subjectId 和 subjectName 字段 - Service 层删除学科关联查询 需求文档: - 删除学生数据项中的学科字段 - 删除表格列定义中的学科列 数据库需执行:ALTER TABLE pg_student DROP COLUMN subject_id;
This commit is contained in:
parent
b5c2692aab
commit
43ee2dbf87
|
|
@ -44,8 +44,6 @@ public class PgStudent extends BaseEntity {
|
||||||
|
|
||||||
private Long schoolClassId;
|
private Long schoolClassId;
|
||||||
|
|
||||||
private Long subjectId;
|
|
||||||
|
|
||||||
private Long memberId;
|
private Long memberId;
|
||||||
|
|
||||||
private String status;
|
private String status;
|
||||||
|
|
|
||||||
|
|
@ -50,13 +50,6 @@ public class StudentVo {
|
||||||
*/
|
*/
|
||||||
private String className;
|
private String className;
|
||||||
|
|
||||||
private Long subjectId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 学科名称
|
|
||||||
*/
|
|
||||||
private String subjectName;
|
|
||||||
|
|
||||||
private Long memberId;
|
private Long memberId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,6 @@ import org.dromara.pangu.school.domain.PgSchoolGrade;
|
||||||
import org.dromara.pangu.school.mapper.PgSchoolClassMapper;
|
import org.dromara.pangu.school.mapper.PgSchoolClassMapper;
|
||||||
import org.dromara.pangu.school.mapper.PgSchoolGradeMapper;
|
import org.dromara.pangu.school.mapper.PgSchoolGradeMapper;
|
||||||
import org.dromara.pangu.school.mapper.PgSchoolMapper;
|
import org.dromara.pangu.school.mapper.PgSchoolMapper;
|
||||||
import org.dromara.pangu.base.domain.PgSubject;
|
|
||||||
import org.dromara.pangu.base.mapper.PgSubjectMapper;
|
|
||||||
import org.dromara.pangu.student.domain.PgStudent;
|
import org.dromara.pangu.student.domain.PgStudent;
|
||||||
import org.dromara.pangu.student.domain.dto.StudentImportDto;
|
import org.dromara.pangu.student.domain.dto.StudentImportDto;
|
||||||
import org.dromara.pangu.student.domain.vo.StudentVo;
|
import org.dromara.pangu.student.domain.vo.StudentVo;
|
||||||
|
|
@ -53,7 +51,6 @@ public class PgStudentServiceImpl implements IPgStudentService {
|
||||||
private final PgSchoolClassMapper schoolClassMapper;
|
private final PgSchoolClassMapper schoolClassMapper;
|
||||||
private final PgGradeMapper gradeMapper;
|
private final PgGradeMapper gradeMapper;
|
||||||
private final PgClassMapper classMapper;
|
private final PgClassMapper classMapper;
|
||||||
private final PgSubjectMapper subjectMapper;
|
|
||||||
private final PgMemberMapper memberMapper;
|
private final PgMemberMapper memberMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -123,14 +120,12 @@ public class PgStudentServiceImpl implements IPgStudentService {
|
||||||
Set<Long> schoolIds = new HashSet<>();
|
Set<Long> schoolIds = new HashSet<>();
|
||||||
Set<Long> schoolGradeIds = new HashSet<>();
|
Set<Long> schoolGradeIds = new HashSet<>();
|
||||||
Set<Long> schoolClassIds = new HashSet<>();
|
Set<Long> schoolClassIds = new HashSet<>();
|
||||||
Set<Long> subjectIds = new HashSet<>();
|
|
||||||
Set<Long> memberIds = new HashSet<>();
|
Set<Long> memberIds = new HashSet<>();
|
||||||
|
|
||||||
for (PgStudent s : students) {
|
for (PgStudent s : students) {
|
||||||
if (s.getSchoolId() != null) schoolIds.add(s.getSchoolId());
|
if (s.getSchoolId() != null) schoolIds.add(s.getSchoolId());
|
||||||
if (s.getSchoolGradeId() != null) schoolGradeIds.add(s.getSchoolGradeId());
|
if (s.getSchoolGradeId() != null) schoolGradeIds.add(s.getSchoolGradeId());
|
||||||
if (s.getSchoolClassId() != null) schoolClassIds.add(s.getSchoolClassId());
|
if (s.getSchoolClassId() != null) schoolClassIds.add(s.getSchoolClassId());
|
||||||
if (s.getSubjectId() != null) subjectIds.add(s.getSubjectId());
|
|
||||||
if (s.getMemberId() != null) memberIds.add(s.getMemberId());
|
if (s.getMemberId() != null) memberIds.add(s.getMemberId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -147,10 +142,6 @@ public class PgStudentServiceImpl implements IPgStudentService {
|
||||||
schoolClassMapper.selectByIds(schoolClassIds).stream()
|
schoolClassMapper.selectByIds(schoolClassIds).stream()
|
||||||
.collect(Collectors.toMap(PgSchoolClass::getId, Function.identity()));
|
.collect(Collectors.toMap(PgSchoolClass::getId, Function.identity()));
|
||||||
|
|
||||||
Map<Long, PgSubject> subjectMap = subjectIds.isEmpty() ? Collections.emptyMap() :
|
|
||||||
subjectMapper.selectByIds(subjectIds).stream()
|
|
||||||
.collect(Collectors.toMap(PgSubject::getSubjectId, Function.identity()));
|
|
||||||
|
|
||||||
Map<Long, PgMember> memberMap = memberIds.isEmpty() ? Collections.emptyMap() :
|
Map<Long, PgMember> memberMap = memberIds.isEmpty() ? Collections.emptyMap() :
|
||||||
memberMapper.selectByIds(memberIds).stream()
|
memberMapper.selectByIds(memberIds).stream()
|
||||||
.collect(Collectors.toMap(PgMember::getMemberId, Function.identity()));
|
.collect(Collectors.toMap(PgMember::getMemberId, Function.identity()));
|
||||||
|
|
@ -198,12 +189,6 @@ public class PgStudentServiceImpl implements IPgStudentService {
|
||||||
vo.setClassName(classNameMap.get(schoolClass.getClassId()));
|
vo.setClassName(classNameMap.get(schoolClass.getClassId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 填充学科名称
|
|
||||||
PgSubject subject = subjectMap.get(s.getSubjectId());
|
|
||||||
if (subject != null) {
|
|
||||||
vo.setSubjectName(subject.getSubjectName());
|
|
||||||
}
|
|
||||||
|
|
||||||
// 填充会员信息
|
// 填充会员信息
|
||||||
PgMember member = memberMap.get(s.getMemberId());
|
PgMember member = memberMap.get(s.getMemberId());
|
||||||
if (member != null) {
|
if (member != null) {
|
||||||
|
|
|
||||||
|
|
@ -322,7 +322,7 @@
|
||||||
|
|
||||||
| 功能编号 | 功能名称 | 功能描述 | 优先级 |
|
| 功能编号 | 功能名称 | 功能描述 | 优先级 |
|
||||||
| ------- | ------ | ------------------- |:---:|
|
| ------- | ------ | ------------------- |:---:|
|
||||||
| STU-001 | 学生列表查询 | 按姓名、学号、性别、手机号、学科等筛选 | P0 |
|
| STU-001 | 学生列表查询 | 按姓名、学号、性别、手机号等筛选 | P0 |
|
||||||
| STU-002 | 学校树筛选 | 通过左侧学校树快速定位学生,点击节点时带上完整层级条件(学校+年级+班级) | P0 |
|
| STU-002 | 学校树筛选 | 通过左侧学校树快速定位学生,点击节点时带上完整层级条件(学校+年级+班级) | P0 |
|
||||||
| STU-003 | 新增学生 | 手动创建学生信息 | P0 |
|
| STU-003 | 新增学生 | 手动创建学生信息 | P0 |
|
||||||
| STU-004 | 编辑学生 | 修改学生基本信息 | P0 |
|
| STU-004 | 编辑学生 | 修改学生基本信息 | P0 |
|
||||||
|
|
@ -372,7 +372,6 @@
|
||||||
| 所属学校 | 下拉选择 | ✓ | 依赖区域 |
|
| 所属学校 | 下拉选择 | ✓ | 依赖区域 |
|
||||||
| 所属年级 | 下拉选择 | ✓ | 依赖学校 |
|
| 所属年级 | 下拉选择 | ✓ | 依赖学校 |
|
||||||
| 所属班级 | 下拉选择 | ✓ | 依赖年级 |
|
| 所属班级 | 下拉选择 | ✓ | 依赖年级 |
|
||||||
| 学科 | 下拉选择 | - | 学科信息 |
|
|
||||||
| 归属用户 | 关联 | ✓ | 关联会员ID |
|
| 归属用户 | 关联 | ✓ | 关联会员ID |
|
||||||
| 创建时间 | 日期时间 | - | 系统自动记录 |
|
| 创建时间 | 日期时间 | - | 系统自动记录 |
|
||||||
|
|
||||||
|
|
@ -844,7 +843,6 @@
|
||||||
| 学校 | 学校名称 |
|
| 学校 | 学校名称 |
|
||||||
| 年级 | 年级名称 |
|
| 年级 | 年级名称 |
|
||||||
| 班级 | 班级名称 |
|
| 班级 | 班级名称 |
|
||||||
| 学科 | 学科名称 |
|
|
||||||
| 用户身份 | 家长/教师 |
|
| 用户身份 | 家长/教师 |
|
||||||
| 用户昵称 | 归属会员昵称 |
|
| 用户昵称 | 归属会员昵称 |
|
||||||
| 用户手机号 | 归属会员手机号 |
|
| 用户手机号 | 归属会员手机号 |
|
||||||
|
|
|
||||||
|
|
@ -53,11 +53,6 @@
|
||||||
@change="handleSchoolChange"
|
@change="handleSchoolChange"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="学科" prop="subjectId">
|
|
||||||
<el-select v-model="form.subjectId" placeholder="请选择学科(选填)" clearable style="width: 100%">
|
|
||||||
<el-option v-for="item in subjectList" :key="item.subjectId" :label="item.subjectName" :value="item.subjectId" />
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="归属用户" prop="memberId">
|
<el-form-item label="归属用户" prop="memberId">
|
||||||
<div style="display: flex; gap: 8px; width: 100%">
|
<div style="display: flex; gap: 8px; width: 100%">
|
||||||
<el-input
|
<el-input
|
||||||
|
|
@ -102,8 +97,6 @@ const memberSelectRef = ref()
|
||||||
|
|
||||||
// 学校树数据
|
// 学校树数据
|
||||||
const schoolTreeData = ref([])
|
const schoolTreeData = ref([])
|
||||||
// 学科列表
|
|
||||||
const subjectList = ref([])
|
|
||||||
|
|
||||||
const initialForm = {
|
const initialForm = {
|
||||||
studentId: null,
|
studentId: null,
|
||||||
|
|
@ -115,7 +108,6 @@ const initialForm = {
|
||||||
schoolId: null,
|
schoolId: null,
|
||||||
schoolGradeId: null,
|
schoolGradeId: null,
|
||||||
schoolClassId: null,
|
schoolClassId: null,
|
||||||
subjectId: null,
|
|
||||||
memberId: null,
|
memberId: null,
|
||||||
memberDisplay: ''
|
memberDisplay: ''
|
||||||
}
|
}
|
||||||
|
|
@ -143,18 +135,6 @@ const getSchoolTree = async () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取学科列表
|
|
||||||
const getSubjectList = async () => {
|
|
||||||
try {
|
|
||||||
const res = await request.get('/business/subject/list', { params: { status: '0' } })
|
|
||||||
if (res.code === 200) {
|
|
||||||
subjectList.value = res.rows || []
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
console.error('获取学科列表失败:', e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 格式化出生日期
|
// 格式化出生日期
|
||||||
const formatBirthday = (date) => {
|
const formatBirthday = (date) => {
|
||||||
if (!date) return ''
|
if (!date) return ''
|
||||||
|
|
@ -190,7 +170,7 @@ const open = async (row = null) => {
|
||||||
formRef.value?.clearValidate()
|
formRef.value?.clearValidate()
|
||||||
|
|
||||||
// 获取基础数据
|
// 获取基础数据
|
||||||
await Promise.all([getSchoolTree(), getSubjectList()])
|
await getSchoolTree()
|
||||||
|
|
||||||
// 编辑模式:加载学生详情
|
// 编辑模式:加载学生详情
|
||||||
if (row) {
|
if (row) {
|
||||||
|
|
@ -203,7 +183,6 @@ const open = async (row = null) => {
|
||||||
form.studentNo = data.studentNo
|
form.studentNo = data.studentNo
|
||||||
form.gender = data.gender || '0'
|
form.gender = data.gender || '0'
|
||||||
form.birthday = data.birthday ? formatBirthday(data.birthday) : ''
|
form.birthday = data.birthday ? formatBirthday(data.birthday) : ''
|
||||||
form.subjectId = data.subjectId
|
|
||||||
form.memberId = data.memberId
|
form.memberId = data.memberId
|
||||||
form.memberDisplay = data.memberNickname ? `${data.memberNickname}(${data.memberPhone || ''})` : ''
|
form.memberDisplay = data.memberNickname ? `${data.memberNickname}(${data.memberPhone || ''})` : ''
|
||||||
|
|
||||||
|
|
@ -265,7 +244,6 @@ const handleSubmit = async () => {
|
||||||
schoolId: form.schoolId,
|
schoolId: form.schoolId,
|
||||||
schoolGradeId: form.schoolGradeId,
|
schoolGradeId: form.schoolGradeId,
|
||||||
schoolClassId: form.schoolClassId,
|
schoolClassId: form.schoolClassId,
|
||||||
subjectId: form.subjectId,
|
|
||||||
memberId: form.memberId
|
memberId: form.memberId
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,6 @@
|
||||||
<el-table-column prop="schoolName" label="学校" min-width="150" show-overflow-tooltip />
|
<el-table-column prop="schoolName" label="学校" min-width="150" show-overflow-tooltip />
|
||||||
<el-table-column prop="gradeName" label="年级" width="80" />
|
<el-table-column prop="gradeName" label="年级" width="80" />
|
||||||
<el-table-column prop="className" label="班级" width="80" />
|
<el-table-column prop="className" label="班级" width="80" />
|
||||||
<el-table-column prop="subjectName" label="学科" width="80" />
|
|
||||||
<el-table-column prop="memberNickname" label="归属用户" width="120" show-overflow-tooltip>
|
<el-table-column prop="memberNickname" label="归属用户" width="120" show-overflow-tooltip>
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<span v-if="row.memberNickname">{{ row.memberNickname }}</span>
|
<span v-if="row.memberNickname">{{ row.memberNickname }}</span>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue