Prechádzať zdrojové kódy

feat:完成Quill所需的接口

白白 1 rok pred
rodič
commit
3306b6cff2

+ 40 - 10
src/main/java/com/njuzr/eaibackend/controller/AssignmentController.java

@@ -1,5 +1,6 @@
 package com.njuzr.eaibackend.controller;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.njuzr.eaibackend.dto.AssignmentDTO;
 import com.njuzr.eaibackend.dto.AssignmentQueryDTO;
@@ -11,18 +12,24 @@ import com.njuzr.eaibackend.po.Engagement;
 import com.njuzr.eaibackend.po.MyUserDetails;
 import com.njuzr.eaibackend.service.AIDialogueService;
 import com.njuzr.eaibackend.service.AssignmentService;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.core.annotation.AuthenticationPrincipal;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.IOException;
+import java.util.Scanner;
+
 /**
  * @author: Leonezhurui
  * @Date: 2024/3/5 - 20:01
  * @Package: EAI-Backend
  */
-
+@Slf4j
 @RestController
 @RequestMapping("/api/assignment")
 public class AssignmentController {
@@ -114,6 +121,9 @@ public class AssignmentController {
     }
 
 
+    /**
+        已完成onlyOffice向Quill的更新
+     */
     @PreAuthorize("hasRole('STUDENT')")
     @PostMapping("/engage")
     public MyResponse engageAssignment(
@@ -125,7 +135,9 @@ public class AssignmentController {
         return MyResponse.success("参加作业成功");
     }
 
-
+    /**
+        已完成onlyOffice向Quill的更新
+     */
     @GetMapping("/engage")
     public MyResponse getEngagement(
             @RequestParam Long studentId,
@@ -134,7 +146,9 @@ public class AssignmentController {
         return MyResponse.success(assignmentService.getEngagement(studentId, assignmentId));
     }
 
-    // TODO: (柏琪) 新增接口
+    /**
+        已完成onlyOffice向Quill的更新
+     */
     @PostMapping("/engage/query")
     public MyResponse findEngagementPage(
             @RequestParam(value = "page", defaultValue = "1") int currentPage,
@@ -146,6 +160,9 @@ public class AssignmentController {
         return MyResponse.success(assignmentService.findEngagementPage(page, assignmentId));
     }
 
+    /**
+        已完成onlyOffice向Quill的更新
+     */
     @GetMapping("/engage/detail")
     public MyResponse getDetailEngagement(
             @RequestParam Long studentId,
@@ -154,6 +171,9 @@ public class AssignmentController {
         return MyResponse.success(assignmentService.getDetailEngagement(studentId, assignmentId));
     }
 
+    /**
+     已完成onlyOffice向Quill的更新
+     */
     @PutMapping("/engage/submit")
     public MyResponse engagementSubmit(
             @RequestParam Long studentId,
@@ -164,14 +184,24 @@ public class AssignmentController {
         return MyResponse.success("作业提交成功");
     }
 
-
+    /**
+     已完成onlyOffice向Quill的更新
+     替代onlyOffice的回调函数实现的功能
+     */
     @PutMapping("/engage/stage")
-    public MyResponse engagementStage(
-            @RequestParam Long studentId,
-            @RequestParam Long assignmentId
-    ) {
-        assignmentService.engagementStage(studentId, assignmentId);
-        return MyResponse.success("作业暂存成功");
+    public MyResponse engagementStage(HttpServletRequest request, HttpServletResponse response) {
+        try {
+            Scanner scanner = new Scanner(request.getInputStream()).useDelimiter("\\A");
+            String body = scanner.hasNext() ? scanner.next() : "";
+            JSONObject jsonObject = JSONObject.parseObject(body);
+            Long studentId = jsonObject.getLong("studentId");
+            Long assignmentId = jsonObject.getLong("assignmentId");
+            log.info("保存内容为:{}", jsonObject);
+            assignmentService.engagementStage(studentId, assignmentId, jsonObject);
+            return MyResponse.success("保存成功");
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
     }
 
     @PreAuthorize("hasRole('TEACHER')")

+ 3 - 0
src/main/java/com/njuzr/eaibackend/po/Engagement.java

@@ -26,4 +26,7 @@ public class Engagement {
     private String fileUrl; // 学生作业的oss链接
     private int version; // 文件版本,用于onlyoffice key的构建(解决文件不同步问题)
     private AssignmentCompletionStatus status; // 学生作业状态
+    private String quillContent;
+    private String textContent;
+    private String htmlContent;
 }

+ 4 - 1
src/main/java/com/njuzr/eaibackend/service/AssignmentService.java

@@ -1,5 +1,6 @@
 package com.njuzr.eaibackend.service;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.njuzr.eaibackend.dto.AssignmentDTO;
@@ -41,7 +42,9 @@ public interface AssignmentService {
 
     void engagementSubmit(Long studentId, Long assignmentId);
 
-    void engagementStage(Long studentId, Long assignmentId);
+//    void engagementStage(Long studentId, Long assignmentId);
+
+    void engagementStage(Long studentId, Long assignmentId, JSONObject jsonObject);
 
     void engagementCorrect(Long teacherId, Long studentId, Long assignmentId, CorrectDTO correctDTO);
     

+ 19 - 13
src/main/java/com/njuzr/eaibackend/service/impl/AssignmentServiceImpl.java

@@ -1,5 +1,6 @@
 package com.njuzr.eaibackend.service.impl;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -24,7 +25,6 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
 
-import java.io.InputStream;
 import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.Objects;
@@ -186,13 +186,13 @@ public class AssignmentServiceImpl implements AssignmentService {
         engagement.setVersion(1); // 设置这是version
         engagement.setStatus(AssignmentCompletionStatus.NOT_SUBMITTED); // 已经进入到页面编辑,但是还没有提交
 
-        // 2通过FileUtil创建一个空的docx文件
-        InputStream inputStream = fileUtil.createEmptyDocx();
-
-        String filePath = assignmentId + "_" + studentId + ".docx";
-        // 3通过OssUtil工具类上传空文件,注意给其命名为`assignmentId/studentId.docx`,并得到文件链接
-        String fileName = ossUtil.uploadEnduringFile(inputStream, filePath);
-        engagement.setFileUrl(fileName);
+//        // 2通过FileUtil创建一个空的docx文件
+//        InputStream inputStream = fileUtil.createEmptyDocx();
+//
+//        String filePath = assignmentId + "_" + studentId + ".docx";
+//        // 3通过OssUtil工具类上传空文件,注意给其命名为`assignmentId/studentId.docx`,并得到文件链接
+//        String fileName = ossUtil.uploadEnduringFile(inputStream, filePath);
+//        engagement.setFileUrl(fileName);
 
         try {
             int code = studentAssignmentMapper.insert(engagement);
@@ -200,7 +200,7 @@ public class AssignmentServiceImpl implements AssignmentService {
                 throw MyException.create(HttpStatus.INTERNAL_SERVER_ERROR, "参加作业失败");
         } catch (Exception e) {
             log.error(e.getMessage());
-            ossUtil.deleteFile(filePath);
+//            ossUtil.deleteFile(filePath);
             throw MyException.create(HttpStatus.INTERNAL_SERVER_ERROR, "参加作业失败");
         }
     }
@@ -249,9 +249,9 @@ public class AssignmentServiceImpl implements AssignmentService {
         EngagementDetailVO detailVO = ModelMapperUtil.map(engagement, EngagementDetailVO.class);
         detailVO.setUserVO(ModelMapperUtil.map(student, UserVO.class));
         detailVO.setAssignmentVO(convertToVO(assignment));
-        detailVO.setFileKey(assignmentId + "_" + studentId + "_" + engagement.getVersion());
+//        detailVO.setFileKey(assignmentId + "_" + studentId + "_" + engagement.getVersion());
 
-        log.info("请求到详细信息:" + detailVO.toString());
+        log.info("请求到详细信息:" + detailVO);
 
         return detailVO;
     }
@@ -288,12 +288,18 @@ public class AssignmentServiceImpl implements AssignmentService {
      * @param assignmentId
      */
     @Override
-    public void engagementStage(Long studentId, Long assignmentId) {
+    public void engagementStage(Long studentId, Long assignmentId, JSONObject jsonObject) {
         Engagement engagement = studentAssignmentMapper.findEngagementByStudentIdAndAssignmentId(studentId, assignmentId);
         if (engagement == null)
             throw MyException.create(HttpStatus.BAD_REQUEST, "参与作业情况不存在");
         int originalVersion = engagement.getVersion();
+        String quillContent = jsonObject.getString("quillContent");
+        String textContent = jsonObject.getString("textContent");
+        String htmlContent = jsonObject.getString("htmlContent");
         engagement.setVersion(originalVersion + 1);
+        engagement.setQuillContent(quillContent);
+        engagement.setTextContent(textContent);
+        engagement.setHtmlContent(htmlContent);
         try {
             int code = studentAssignmentMapper.updateById(engagement);
             if (code == 0)
@@ -362,7 +368,7 @@ public class AssignmentServiceImpl implements AssignmentService {
     private EngagementVO convertToVO(Engagement engagement) {
         EngagementVO res = ModelMapperUtil.map(engagement, EngagementVO.class);
         // 组装文件key
-        res.setFileKey(res.getAssignmentId() + "_" + res.getStudentId() + "_" + res.getVersion());
+//        res.setFileKey(res.getAssignmentId() + "_" + res.getStudentId() + "_" + res.getVersion());
         // 组装学生姓名
         String studentName = userMapper.selectNameById(engagement.getStudentId());
         res.setStudentName(studentName);

+ 5 - 2
src/main/java/com/njuzr/eaibackend/vo/EngagementDetailVO.java

@@ -16,8 +16,11 @@ public class EngagementDetailVO {
     private UserVO userVO;
     private Double score;
     private String remark;
-    private String fileUrl; // 学生作业的oss链接
     private int version; // 文件版本,用于onlyoffice key的构建(解决文件不同步问题)
     private AssignmentCompletionStatus status; // 学生作业状态
-    private String fileKey;
+    private String quillContent;
+    private String textContent;
+    private String htmlContent;
+//    private String fileUrl; // 学生作业的oss链接
+//    private String fileKey;
 }

+ 5 - 2
src/main/java/com/njuzr/eaibackend/vo/EngagementVO.java

@@ -17,8 +17,11 @@ public class EngagementVO {
     private String studentName;
     private Double score;
     private String remark;
-    private String fileUrl; // 学生作业的oss链接
     private int version; // 文件版本,用于onlyoffice key的构建(解决文件不同步问题)
     private AssignmentCompletionStatus status; // 学生作业状态
-    private String fileKey;
+    private String quillContent;
+    private String textContent;
+    private String htmlContent;
+//    private String fileUrl; // 学生作业的oss链接
+//    private String fileKey;
 }