ソースを参照

Merge branch 'feture/class' of FanYanPeng/EAI-Backend into refactor

BaiQi 1 年間 前
コミット
4689eb867a

+ 48 - 0
src/main/java/com/njuzr/eaibackend/controller/ClassController.java

@@ -0,0 +1,48 @@
+package com.njuzr.eaibackend.controller;
+
+import com.njuzr.eaibackend.dto.ClassDTO;
+import com.njuzr.eaibackend.po.Class;
+import com.njuzr.eaibackend.service.ClassService;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@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);
+    }
+
+    @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);
+        }
+    }
+}

+ 16 - 0
src/main/java/com/njuzr/eaibackend/dto/ClassDTO.java

@@ -0,0 +1,16 @@
+package com.njuzr.eaibackend.dto;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+@Data
+public class ClassDTO {
+    @NotNull(message = "班级名不能为空")
+    private String className;
+    @NotNull(message = "课程id不能缺失")
+    private Long courseId;
+
+    private Long classId;
+
+    private String classTime;
+}

+ 9 - 0
src/main/java/com/njuzr/eaibackend/mapper/ClassMapper.java

@@ -0,0 +1,9 @@
+package com.njuzr.eaibackend.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.njuzr.eaibackend.po.Class;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ClassMapper extends BaseMapper<Class> {
+}

+ 19 - 0
src/main/java/com/njuzr/eaibackend/po/Class.java

@@ -0,0 +1,19 @@
+package com.njuzr.eaibackend.po;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+
+@Data
+@TableName("class")
+public class Class {
+    @TableId(type = IdType.AUTO)
+    private Long classId;
+
+    private String className;
+
+    private Long courseId;
+
+    private int stuNumber;
+
+    private String classTime;
+}

+ 21 - 0
src/main/java/com/njuzr/eaibackend/service/ClassService.java

@@ -0,0 +1,21 @@
+package com.njuzr.eaibackend.service;
+
+import com.njuzr.eaibackend.dto.ClassDTO;
+import com.njuzr.eaibackend.po.Class;
+
+import java.util.List;
+
+public interface ClassService {
+    Class createClass(ClassDTO classDTO);
+
+    Class updateClass(ClassDTO classDTO);
+
+    List<Class> select(Long courseId);
+
+    /**
+     * 删除班级(需检查学生数量)
+     * @param classId 班级ID
+     * @return 删除结果信息
+     */
+    String deleteClassWithCheck(Long classId);
+}

+ 95 - 0
src/main/java/com/njuzr/eaibackend/service/impl/ClassServiceImpl.java

@@ -0,0 +1,95 @@
+package com.njuzr.eaibackend.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.njuzr.eaibackend.dto.ClassDTO;
+import com.njuzr.eaibackend.exception.MyException;
+import com.njuzr.eaibackend.mapper.ClassMapper;
+import com.njuzr.eaibackend.po.Class;
+import com.njuzr.eaibackend.service.ClassService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Slf4j
+@Service
+public class ClassServiceImpl implements ClassService {
+    private final ClassMapper classMapper;
+
+    public ClassServiceImpl(ClassMapper classMapper) {
+        this.classMapper = classMapper;
+    }
+
+    @Override
+    public Class createClass(ClassDTO classDTO) {
+        Class aClass =new Class();
+        aClass.setClassName(classDTO.getClassName());
+        aClass.setCourseId(classDTO.getCourseId());
+        aClass.setClassTime(classDTO.getClassTime());
+        int status = classMapper.insert(aClass);
+        if (status == 0) {
+            log.error("创建课程失败,数据库插入错误!");
+            throw new MyException(HttpStatus.INTERNAL_SERVER_ERROR.value(), HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase()+":"+"创建班级错误");
+        }
+        return aClass;
+    }
+
+    @Override
+    public Class updateClass(ClassDTO classDTO) {
+        Class aClass=new Class();
+        aClass.setClassName(classDTO.getClassName());
+        aClass.setClassId(classDTO.getClassId());
+        aClass.setClassTime(classDTO.getClassTime());
+        try {
+            int code = classMapper.updateById(aClass);
+            if (code == 0) {
+                throw MyException.create(HttpStatus.INTERNAL_SERVER_ERROR, "更新班级失败");
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            throw MyException.create(HttpStatus.INTERNAL_SERVER_ERROR, "更新班级失败");
+        }
+        aClass= classMapper.selectById(classDTO.getClassId());
+        return aClass;
+    }
+
+    @Override
+    public List<Class> select(Long courseId) {
+        QueryWrapper<Class> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("course_id", courseId); // 按course_id查询
+        List<Class> res= classMapper.selectList(queryWrapper);
+        return res;
+    }
+
+    @Override
+    @Transactional
+    public String deleteClassWithCheck(Long classId) {
+        // 1. 查询班级信息
+        Class cls = classMapper.selectById(classId);
+        if (cls == null) {
+            return "班级不存在";
+        }
+
+        // 2. 检查学生数量
+        if (cls.getStuNumber() > 0) {
+            return "班级中还有学生,无法删除";
+        }
+
+        // 3. 使用Mapper执行带条件的删除
+        QueryWrapper<Class> deleteWrapper = new QueryWrapper<>();
+        deleteWrapper.eq("class_id", classId)
+                .eq("stu_number", 0); // 双重检查
+
+        int affectedRows = classMapper.delete(deleteWrapper);
+
+        if (affectedRows == 0) {
+            return "删除失败(可能学生数量已变化)";
+        }
+
+        return "删除成功";
+    }
+
+
+}