Quellcode durchsuchen

feat:添加作业查询和修改功能

lalala vor 1 Jahr
Ursprung
Commit
c2beea4568

+ 1 - 0
eaidb.sql

@@ -124,6 +124,7 @@ CREATE TABLE IF NOT EXISTS `eai`.`behavior_record` (
 CREATE TABLE IF NOT EXISTS `eai`.`assignment` (
   `assignment_id` bigint NOT NULL AUTO_INCREMENT COMMENT '作业ID(自增主键)',
   `course_id` bigint NOT NULL COMMENT '所属课程ID(外键)',
+  `teacher_portal_id` varchar(50) COMMENT '教师门户ID',
   `assignment_name` varchar(100) NOT NULL COMMENT '作业名称',
   `description` text COMMENT '作业描述',
   `type` varchar(30) NOT NULL COMMENT '作业类型(如HOMEWORK/QUIZ/EXAM等)',

+ 9 - 6
src/main/java/com/njuzr/eaibackend/controller/CourseController.java

@@ -10,6 +10,7 @@ import com.njuzr.eaibackend.po.Course;
 import com.njuzr.eaibackend.po.MyUserDetails;
 import com.njuzr.eaibackend.po.User;
 import com.njuzr.eaibackend.service.CourseService;
+import com.njuzr.eaibackend.service.UserService;
 import com.njuzr.eaibackend.vo.CourseVO;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -31,6 +32,9 @@ public class CourseController {
     private static final Logger log = LoggerFactory.getLogger(CourseController.class);
     private final CourseService courseService;
 
+    @Autowired
+    UserService userService;
+
     @Autowired
     public CourseController(CourseService courseService) {
         this.courseService = courseService;
@@ -85,7 +89,6 @@ public class CourseController {
             @RequestParam(value = "size", defaultValue = "10") int pageSize
     ) {
         Page<Course> page = new Page<>(currentPage, pageSize);
-
         CourseQueryDTO courseQueryDTO = new CourseQueryDTO();
         courseQueryDTO.setStudentId(studentId);
 
@@ -100,15 +103,16 @@ public class CourseController {
     @PreAuthorize("hasRole('TEACHER')")
     @GetMapping("/byTeacher")
     public MyResponse findByTeacherId(
-            @AuthenticationPrincipal(expression = "id") Long teacherId,
+            @AuthenticationPrincipal MyUserDetails user,
             @RequestParam(value = "page", defaultValue = "1") int currentPage,
             @RequestParam(value = "size", defaultValue = "10") int pageSize
     ) {
         Page<Course> page = new Page<>(currentPage, pageSize);
-
         CourseQueryDTO courseQueryDTO = new CourseQueryDTO();
-        courseQueryDTO.setTeacherId(teacherId);
-
+        courseQueryDTO.setTeacherId(user.getId());
+        if(user.getPid() != null) {
+            courseQueryDTO.setTeacherPid(Long.parseLong(user.getPid()));
+        }
         return MyResponse.success(courseService.findCoursesPage(page, courseQueryDTO));
     }
 
@@ -158,7 +162,6 @@ public class CourseController {
 
         CourseQueryDTO courseQueryDTO =  new CourseQueryDTO();
         courseQueryDTO.setSemester(courseTime);
-
         return MyResponse.success(courseService.findCoursesPage(page, courseQueryDTO));
     }
 

+ 4 - 0
src/main/java/com/njuzr/eaibackend/po/Assignment.java

@@ -1,6 +1,7 @@
 package com.njuzr.eaibackend.po;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
@@ -34,6 +35,9 @@ public class Assignment {
 
     private Long teacherId; // 发布作业的老师的Id
 
+    @TableField("teacher_portal_id")
+    private String teacherPid;
+
     private Date startTime;
 
     private Date endTime;

+ 13 - 2
src/main/java/com/njuzr/eaibackend/service/impl/AiSpeakingAssignmentServiceImpl.java

@@ -3,6 +3,7 @@ package com.njuzr.eaibackend.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mongodb.client.result.DeleteResult;
 import com.njuzr.eaibackend.dto.AiSpeakingAssignmentDTO;
 import com.njuzr.eaibackend.enums.AssignmentStatus;
 import com.njuzr.eaibackend.enums.Role;
@@ -13,9 +14,13 @@ import com.njuzr.eaibackend.service.AiSpeakingAssignmentService;
 import com.njuzr.eaibackend.utils.ConvertUtil;
 import com.njuzr.eaibackend.vo.AiSpeakingAssignmentVO;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.catalina.webresources.war.WarURLConnection;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -39,6 +44,9 @@ public class AiSpeakingAssignmentServiceImpl extends ServiceImpl<AiSpeakingAssig
 
     @Autowired
     StudentAssignmentMapper studentAssignmentMapper;
+
+    @Autowired
+    MongoTemplate mongoTemplate;
     @Override
     public void createSpeakingAssignment(MyUserDetails user, Long courseId, AiSpeakingAssignmentDTO aiSpeakingAssignmentDTO) {
         Course course = courseMapper.selectById(courseId);
@@ -107,7 +115,7 @@ public class AiSpeakingAssignmentServiceImpl extends ServiceImpl<AiSpeakingAssig
     @Transactional
     public boolean updateAssignment(MyUserDetails user, Long assignmentId, AiSpeakingAssignmentDTO aiSpeakingAssignmentDTO) {
         Assignment assignment = assignmentMapper.selectById(assignmentId);
-        if (!Objects.equals(assignment.getTeacherId(), user.getId()))
+        if (!Objects.equals(assignment.getTeacherId(), user.getId()) && !Objects.equals(assignment.getTeacherPid(), user.getPid()))
             throw MyException.create(HttpStatus.BAD_REQUEST, "无权限更新");
         Assignment newAssignment = new Assignment();
         BeanUtils.copyProperties(aiSpeakingAssignmentDTO, newAssignment);
@@ -149,7 +157,10 @@ public class AiSpeakingAssignmentServiceImpl extends ServiceImpl<AiSpeakingAssig
             QueryWrapper<AiSpeakingAssignment> speakingAssignmentQueryWrapper = new QueryWrapper<>();
             speakingAssignmentQueryWrapper.eq("assignment_id", assignmentId);
             int code1 = baseMapper.delete(speakingAssignmentQueryWrapper);
-            if (code==0 || code1 == 0) {
+            Query query = new Query(Criteria.where("assignmentId").is(assignmentId));
+            // 删除相应作业的对话记录
+            DeleteResult code2 = mongoTemplate.remove(query, SpeakingAIDialogue.class);
+            if (code==0 || code1 == 0 || !code2.wasAcknowledged()) {
                 throw MyException.create(HttpStatus.INTERNAL_SERVER_ERROR, "删除作业错误");
             }
         } catch (Exception e) {

+ 2 - 6
src/main/java/com/njuzr/eaibackend/service/impl/AssignmentServiceImpl.java

@@ -16,10 +16,7 @@ import com.njuzr.eaibackend.mapper.*;
 import com.njuzr.eaibackend.po.*;
 import com.njuzr.eaibackend.service.AssignmentService;
 import com.njuzr.eaibackend.utils.*;
-import com.njuzr.eaibackend.vo.AssignmentVO;
-import com.njuzr.eaibackend.vo.EngagementDetailVO;
-import com.njuzr.eaibackend.vo.EngagementVO;
-import com.njuzr.eaibackend.vo.UserVO;
+import com.njuzr.eaibackend.vo.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.cache.annotation.CacheEvict;
@@ -158,12 +155,11 @@ public class AssignmentServiceImpl implements AssignmentService {
     @CacheEvict(value = "assignmentInfo", key = "'assignment_' + #assignmentId")
     public AssignmentVO updateAssignment(MyUserDetails user, Long assignmentId, AssignmentUpdateDTO assignmentUpdateDTO) {
         Assignment target = assignmentMapper.selectById(assignmentId);
-        if (!Objects.equals(target.getTeacherId(), user.getId()))
+        if (!Objects.equals(target.getTeacherId(), user.getId()) && !Objects.equals(target.getTeacherPid(), user.getPid()))
             throw MyException.create(HttpStatus.BAD_REQUEST, "无权限更新");
 
         Assignment ope = convertToPO(assignmentUpdateDTO);
         ope.setAssignmentId(assignmentId);
-
         try {
             int code = assignmentMapper.updateById(ope);
             if (code == 0)

+ 2 - 2
src/main/java/com/njuzr/eaibackend/service/impl/AuthenticationServiceImpl.java

@@ -60,8 +60,8 @@ public class AuthenticationServiceImpl implements AuthenticationService {
             MyUserDetails userDetails = (MyUserDetails) authentication.getPrincipal();
 
             log.info("用户认证通过,用户认证信息如下:" + userDetails.toString());
-
-            String jwt = jwtTokenUtil.generateToken(userDetails.getOfficialNumber());
+            // 原来是学号,这里修改为phone
+            String jwt = jwtTokenUtil.generateToken(userDetails.getPhone());
             log.info("生成jwt成功,token信息:" + jwt);
 
             UserLoginVO userLoginVO = ModelMapperUtil.map(userDetails, UserLoginVO.class);

+ 1 - 2
src/main/java/com/njuzr/eaibackend/service/impl/CourseServiceImpl.java

@@ -139,9 +139,8 @@ public class CourseServiceImpl implements CourseService {
             wrapper.inSql("course_id", "SELECT course_id FROM course_student WHERE student_id = " + courseQueryDTO.getStudentId());
         }
 
-        if (courseQueryDTO.getSemester() != null) { // 课程时间过滤,转换成具体日期
+        if (courseQueryDTO.getSemester() != null && !courseQueryDTO.getSemester().trim().isEmpty()) { // 课程时间过滤,转换成具体日期
             String semester = courseQueryDTO.getSemester();
-
             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
 
             LocalDate startDate, endDate;