| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- package com.njuzr.eaibackend.controller;
- import com.njuzr.eaibackend.dto.ClassDTO;
- import com.njuzr.eaibackend.exception.MyException;
- import com.njuzr.eaibackend.po.Class;
- import com.njuzr.eaibackend.service.ClassService;
- import com.njuzr.eaibackend.vo.ClassVO;
- import com.njuzr.eaibackend.vo.StudentInfoVO;
- import lombok.Data;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.ibatis.annotations.Delete;
- import org.springframework.security.access.prepost.PreAuthorize;
- import org.springframework.web.bind.annotation.*;
- import org.springframework.web.multipart.MultipartFile;
- import java.util.List;
- @Slf4j
- @RestController
- @RequestMapping("/api/class")
- public class ClassController {
- private final ClassService classService;
- public ClassController(ClassService classService) {
- this.classService = classService;
- }
- /**
- * 原来的创建班级接口,已注释
- */
- /*
- @PostMapping("/create")
- public MyResponse createClass(@RequestBody ClassDTO classDTO){
- Class aClass = classService.createClass(classDTO);
- return MyResponse.success(aClass);
- }
- */
- /**
- * 新的创建班级接口,生成班级码
- */
- @PostMapping("/create")
- public MyResponse createClassWithCode(@RequestBody ClassDTO classDTO) {
- try {
- ClassVO result = classService.createClass(classDTO);
- return MyResponse.success(result);
- } catch (MyException e) {
- return MyResponse.error(e.getErrCode(), e.getMessage());
- } catch (Exception e) {
- log.error("创建班级失败", e);
- return MyResponse.error(500, "服务器内部错误");
- }
- }
- @PutMapping("/update")
- public MyResponse updateClass(@RequestBody ClassDTO classDTO){
- return MyResponse.success(classService.updateClass(classDTO));
- }
- @GetMapping("/select")
- public MyResponse selectClass(@RequestParam Long courseId){
- List<Class> li= classService.select(courseId);
- return MyResponse.success(li);
- }
- @DeleteMapping("/delete")
- public MyResponse deleteClass(@RequestParam Long classId){
- String result = classService.deleteClassWithCheck(classId);
- switch (result) {
- case "删除成功":
- return MyResponse.success(result);
- case "班级不存在":
- return MyResponse.error(404, result);
- default: // 包括 "班级中还有学生" 和 "删除失败"
- return MyResponse.error(400, result);
- }
- }
- /**
- * 批量添加学生到班级
- * @param classId 班级ID
- * @param file 学生数据文件
- * @return 操作结果
- */
- @PostMapping("/{classId}/students/batch")
- @PreAuthorize("hasRole('ADMIN') or hasRole('TEACHER')")
- public MyResponse batchAddStudents(
- @PathVariable Long classId,
- @RequestParam("file") MultipartFile file) {
- try {
- String result = classService.batchAddStudents(classId, file);
- return MyResponse.success(result);
- } catch (MyException e) {
- return MyResponse.error(e.getErrCode(), e.getMessage());
- } catch (Exception e) {
- log.error("批量添加学生失败", e);
- return MyResponse.error(500, "服务器内部错误");
- }
- }
- /**
- * 通过学号添加学生到班级
- * @param classId 班级ID
- * @param officialNumber 学号
- * @return 操作结果
- */
- @PostMapping("/{classId}/students")
- @PreAuthorize("hasRole('ROLE_TEACHER')")
- public MyResponse addStudentByNumber(
- @PathVariable Long classId,
- @RequestParam String officialNumber) {
- try {
- String result = classService.addStudentByOfficialNumber(classId, officialNumber);
- return MyResponse.success(result);
- } catch (MyException e) {
- return MyResponse.error(e.getErrCode(), e.getMessage());
- } catch (Exception e) {
- log.error("添加学生失败", e);
- return MyResponse.error(500, "服务器内部错误");
- }
- }
- /**
- * 根据学生ID和课程ID查询班级
- * @param studentId 学生ID
- * @param courseId 课程ID
- * @return 班级信息
- */
- @GetMapping("/student/{studentId}/course/{courseId}")
- public MyResponse getClassByStudentIdAndCourseId(
- @PathVariable Long studentId,
- @PathVariable Long courseId) {
- try {
- Class aClass = classService.getClassByStudentIdAndCourseId(studentId, courseId);
- if (aClass == null) {
- return MyResponse.error(404, "未找到对应的班级");
- }
- return MyResponse.success(aClass);
- } catch (Exception e) {
- log.error("查询班级失败", e);
- return MyResponse.error(500, "服务器内部错误");
- }
- }
- /**
- * 批量删除班级中的学生
- * @param classId 班级ID
- * @param request 包含学号列表的请求体
- * @return 操作结果
- */
- @DeleteMapping("/{classId}/students/batch")
- @PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_TEACHER')")
- public MyResponse batchDeleteStudents(
- @PathVariable Long classId,
- @RequestBody List<String> request) {
- try {
- String result = classService.batchDeleteStudents(classId, request);
- return MyResponse.success(result);
- } catch (MyException e) {
- return MyResponse.error(e.getErrCode(), e.getMessage());
- } catch (Exception e) {
- log.error("批量删除学生失败", e);
- return MyResponse.error(500, "服务器内部错误");
- }
- }
- @GetMapping("/{classId}")
- public MyResponse getClassStudents(@PathVariable Long classId) {
- try {
- List<StudentInfoVO> students = classService.getStudentsByClassId(classId);
- return MyResponse.success(students);
- } catch (Exception e) {
- // 记录日志
- log.error("查询班级学生失败", e);
- // 返回错误响应
- return MyResponse.error(500, "查询班级学生失败: " + e.getMessage());
- }
- }
- @GetMapping("/find/{classId}")
- public MyResponse getClassById(@PathVariable Long classId) {
- try {
- Class courseClass = classService.getClassById(classId);
- return MyResponse.success(courseClass);
- } catch (IllegalArgumentException e) {
- return MyResponse.error(400, e.getMessage());
- } catch (Exception e) {
- log.error("获取班级信息失败: {}", e.getMessage(), e);
- return MyResponse.error(500, "服务器内部错误");
- }
- }
- }
|