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 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 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 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, "服务器内部错误"); } } }