From f8169b453e63a0231afe6aebf0c3e6d6c2fd8149 Mon Sep 17 00:00:00 2001 From: lbw <1192299468@qq.com> Date: Mon, 15 Dec 2025 16:08:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(student):=20=E5=AE=9E=E7=8E=B0=E5=AD=A6?= =?UTF-8?q?=E7=94=9F=E7=9A=84=E6=96=B0=E5=A2=9E=E4=B8=8E=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增AddStudentReqVO和DeleteStudentReqVO请求对象 - 在StudentController中添加新增和删除学生接口 - StudentService及其实现类增加新增和删除学生方法 - 通过StudentDOMapper新增插入和逻辑删除方法 - 新增AddStudentDialog组件,实现学生添加的表单及交互 - 在class.vue页面添加新增学生按钮及删除学生操作列 - API层新增addStudent和deleteStudent接口调用 - 删除学生时更新选中状态及重新加载学生列表 - 初始化新增学生时词汇掌握记录相关数据 --- .../service/controller/StudentController.java | 19 ++- .../domain/mapper/StudentDOMapper.java | 5 + .../model/vo/student/AddStudentReqVO.java | 20 +++ .../model/vo/student/DeleteStudentReqVO.java | 15 ++ .../service/service/StudentService.java | 5 + .../service/student/StudentServiceImpl.java | 33 ++++- .../main/resources/mapper/StudentDOMapper.xml | 14 ++ enlish-vue/src/api/student.js | 15 ++ .../layouts/components/AddStudentDialog.vue | 134 ++++++++++++++++++ enlish-vue/src/pages/class.vue | 31 +++- 10 files changed, 283 insertions(+), 8 deletions(-) create mode 100644 enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/student/AddStudentReqVO.java create mode 100644 enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/student/DeleteStudentReqVO.java create mode 100644 enlish-vue/src/layouts/components/AddStudentDialog.vue diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/StudentController.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/StudentController.java index e2b37d9..c5e222d 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/StudentController.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/StudentController.java @@ -4,10 +4,7 @@ package com.yinlihupo.enlish.service.controller; import com.yinlihupo.enlish.service.domain.dataobject.ClassDO; import com.yinlihupo.enlish.service.domain.dataobject.GradeDO; import com.yinlihupo.enlish.service.domain.dataobject.StudentDO; -import com.yinlihupo.enlish.service.model.vo.student.FindStudentDetailReqVO; -import com.yinlihupo.enlish.service.model.vo.student.FindStudentDetailRspVO; -import com.yinlihupo.enlish.service.model.vo.student.FindStudentsReqVO; -import com.yinlihupo.enlish.service.model.vo.student.StudentItemRspVO; +import com.yinlihupo.enlish.service.model.vo.student.*; import com.yinlihupo.enlish.service.service.ClassService; import com.yinlihupo.enlish.service.service.GradeService; import com.yinlihupo.enlish.service.service.StudentService; @@ -73,4 +70,18 @@ public class StudentController { return Response.success(findStudentDetailRspVO); } + + @PostMapping("add") + @ApiOperationLog(description = "添加学生") + public Response addStudent(@RequestBody AddStudentReqVO addStudentReqVO) { + studentService.addStudent(addStudentReqVO); + return Response.success(); + } + + @PostMapping("delete") + @ApiOperationLog(description = "删除学生") + public Response deleteStudent(@RequestBody DeleteStudentReqVO deleteStudentReqVO) { + studentService.deleteStudent(deleteStudentReqVO.getStudentId()); + return Response.success(); + } } diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/StudentDOMapper.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/StudentDOMapper.java index 87ac5d6..3931254 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/StudentDOMapper.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/StudentDOMapper.java @@ -14,4 +14,9 @@ public interface StudentDOMapper { StudentDO selectStudentById(Integer id); List selectStudentDOListByIds(@Param("ids") List ids); + + void insert(StudentDO studentDO); + + // 逻辑删除 + void deleteById(Integer id); } \ No newline at end of file diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/student/AddStudentReqVO.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/student/AddStudentReqVO.java new file mode 100644 index 0000000..7b95611 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/student/AddStudentReqVO.java @@ -0,0 +1,20 @@ +package com.yinlihupo.enlish.service.model.vo.student; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@AllArgsConstructor +@NoArgsConstructor +@Data +@Builder +public class AddStudentReqVO { + + private String name; + private Integer classId; + private Integer gradeId; + private LocalDateTime createTime; +} diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/student/DeleteStudentReqVO.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/student/DeleteStudentReqVO.java new file mode 100644 index 0000000..4ffe7b0 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/student/DeleteStudentReqVO.java @@ -0,0 +1,15 @@ +package com.yinlihupo.enlish.service.model.vo.student; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +@Builder +public class DeleteStudentReqVO { + + private Integer studentId; +} diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/StudentService.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/StudentService.java index b384111..7e44e23 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/StudentService.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/StudentService.java @@ -3,6 +3,7 @@ package com.yinlihupo.enlish.service.service; import com.yinlihupo.enlish.service.domain.dataobject.StudentDO; import com.yinlihupo.enlish.service.model.bo.StudentDetail; +import com.yinlihupo.enlish.service.model.vo.student.AddStudentReqVO; import java.util.List; @@ -15,4 +16,8 @@ public interface StudentService { StudentDO getStudentById(Integer studentId); List getStudentDetailList(List studentIdList); + + void addStudent(AddStudentReqVO addStudentReqVO); + + void deleteStudent(Integer studentId); } diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/student/StudentServiceImpl.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/student/StudentServiceImpl.java index bd03c52..21ca1e9 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/student/StudentServiceImpl.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/student/StudentServiceImpl.java @@ -4,14 +4,14 @@ package com.yinlihupo.enlish.service.service.student; import com.yinlihupo.enlish.service.domain.dataobject.ClassDO; import com.yinlihupo.enlish.service.domain.dataobject.GradeDO; import com.yinlihupo.enlish.service.domain.dataobject.StudentDO; -import com.yinlihupo.enlish.service.domain.mapper.ClassDOMapper; -import com.yinlihupo.enlish.service.domain.mapper.GradeDOMapper; -import com.yinlihupo.enlish.service.domain.mapper.StudentDOMapper; +import com.yinlihupo.enlish.service.domain.mapper.*; import com.yinlihupo.enlish.service.model.bo.StudentDetail; +import com.yinlihupo.enlish.service.model.vo.student.AddStudentReqVO; import com.yinlihupo.enlish.service.service.StudentService; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -25,6 +25,10 @@ public class StudentServiceImpl implements StudentService { private GradeDOMapper gradeDOMapper; @Resource private ClassDOMapper classDOMapper; + @Resource + private VocabularyBankDOMapper vocabularyBankMapper; + @Resource + private WordMasteryLogDOMapper wordMasteryLogDOMapper; @Override public List getStudentsByClassIdAndGradeId(Integer classId, Integer gradeId, String name, Integer pageNo, Integer pageSize) { @@ -66,4 +70,27 @@ public class StudentServiceImpl implements StudentService { ).toList(); } + + @Override + public void addStudent(AddStudentReqVO addStudentReqVO) { + String name = addStudentReqVO.getName(); + Integer classId = addStudentReqVO.getClassId(); + Integer gradeId = addStudentReqVO.getGradeId(); + LocalDateTime createTime = addStudentReqVO.getCreateTime(); + StudentDO studentDO = StudentDO.builder() + .name(name) + .classId(classId) + .gradeId(gradeId) + .startTime(createTime) + .build(); + studentDOMapper.insert(studentDO); + + List integers = vocabularyBankMapper.selectAllIds(); + wordMasteryLogDOMapper.batchInsertInitialization(integers, studentDO.getId()); + } + + @Override + public void deleteStudent(Integer studentId) { + studentDOMapper.deleteById(studentId); + } } diff --git a/enlish-service/src/main/resources/mapper/StudentDOMapper.xml b/enlish-service/src/main/resources/mapper/StudentDOMapper.xml index 4cddcf9..f6ad208 100644 --- a/enlish-service/src/main/resources/mapper/StudentDOMapper.xml +++ b/enlish-service/src/main/resources/mapper/StudentDOMapper.xml @@ -25,6 +25,8 @@ AND name like concat('%', #{name}, '%') + and is_deleted = 0 + order by start_time desc LIMIT #{startIndex}, #{pageSize} @@ -47,4 +49,16 @@ #{id} + + + insert into student + (name, class_id, grade_id, is_deleted, start_time) + values (#{name}, #{classId}, #{gradeId}, 0, #{startTime}) + + + + update student + set is_deleted = 1 + where id = #{id} + \ No newline at end of file diff --git a/enlish-vue/src/api/student.js b/enlish-vue/src/api/student.js index ba7e87e..cdbcd1c 100644 --- a/enlish-vue/src/api/student.js +++ b/enlish-vue/src/api/student.js @@ -8,4 +8,19 @@ export function getStudentDetail(id) { export function getStudentList(data) { return axios.post('/student/list', data) +} + +export function addStudent(name, classId, gradeId, startDate) { + return axios.post('/student/add', { + name: name, + classId: classId, + gradeId: gradeId, + createTime: startDate + }) +} + +export function deleteStudent(id) { + return axios.post('/student/delete', { + studentId: id + }) } \ No newline at end of file diff --git a/enlish-vue/src/layouts/components/AddStudentDialog.vue b/enlish-vue/src/layouts/components/AddStudentDialog.vue new file mode 100644 index 0000000..5751a6c --- /dev/null +++ b/enlish-vue/src/layouts/components/AddStudentDialog.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/enlish-vue/src/pages/class.vue b/enlish-vue/src/pages/class.vue index 6b5b36d..5049202 100644 --- a/enlish-vue/src/pages/class.vue +++ b/enlish-vue/src/pages/class.vue @@ -57,6 +57,11 @@ + + +
+
+ 新增学生 +
+
@@ -103,10 +117,11 @@ import Header from '@/layouts/components/Header.vue' import { ref, onMounted } from 'vue' import { getClassList, deleteClass } from '@/api/class' import { getGradeList } from '@/api/grade' -import { getStudentList } from '@/api/student' +import { getStudentList, deleteStudent } from '@/api/student' import ExamGenerateDialog from '@/layouts/components/ExamGenerateDialog.vue' import AddClassDialog from '@/layouts/components/AddClassDialog.vue' import AddGradeDialog from '@/layouts/components/AddGradeDialog.vue' +import AddStudentDialog from '@/layouts/components/AddStudentDialog.vue' const classes = ref([]) const pageNo = ref(1) @@ -137,6 +152,7 @@ const studentName = ref('') const studentTableRef = ref(null) const selectedStudentIds = ref([]) const showGenerateDialog = ref(false) +const showAddStudentDialog = ref(false) async function fetchClasses() { loading.value = true @@ -233,6 +249,19 @@ function onGradeRowClick(row) { studentPageNo.value = 1 fetchStudents() } +async function onDeleteStudent(row) { + try { + await deleteStudent(row.id) + ElMessage.success('删除成功') + if (selectedStudentIds.value?.length) { + selectedStudentIds.value = selectedStudentIds.value.filter(id => id !== row.id) + studentTableRef.value?.toggleRowSelection(row, false) + } + await fetchStudents() + } catch (e) { + ElMessage.error('删除失败') + } +} async function onDeleteClass(row) { try { await deleteClass(row.id)