Parcourir la source

feat:添加作业创建接口

wuzilong il y a 1 an
Parent
commit
2d8a5565ae

+ 107 - 0
seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/dto/AssignmentDTO.java

@@ -0,0 +1,107 @@
+package cn.seecoder.seecoderportalcommon.vo.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author: Leonezhurui
+ * @Date: 2024/3/5 - 20:03
+ * @Package: EAI-Backend
+ */
+
+@Data
+public class AssignmentDTO {
+    @NotNull(message = "作业名称不能缺失")
+    private String assignmentName;
+
+    @NotNull(message = "作业描述不能缺失")
+    private String description;
+
+    @NotNull(message = "作业类型不能缺失")
+    private String type;
+
+    private String descriptionFile; // 作业要求,Word/Pdf文件
+
+    private List<String> attachments; // 作业附件
+
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+    @NotNull(message = "起始时间不能缺失")
+    private Date startTime;
+
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai")
+    @NotNull(message = "结束时间不能缺失")
+    private Date endTime;
+
+    @Override
+    public String toString() {
+        return "AssignmentDTO{" +
+                "assignmentName='" + assignmentName + '\'' +
+                ", description='" + description + '\'' +
+                ", type='" + type + '\'' +
+                ", descriptionFile='" + descriptionFile + '\'' +
+                ", attachments=" + attachments +
+                ", startTime=" + startTime +
+                ", endTime=" + endTime +
+                '}';
+    }
+
+    public @NotNull(message = "作业名称不能缺失") String getAssignmentName() {
+        return assignmentName;
+    }
+
+    public void setAssignmentName(@NotNull(message = "作业名称不能缺失") String assignmentName) {
+        this.assignmentName = assignmentName;
+    }
+
+    public @NotNull(message = "作业描述不能缺失") String getDescription() {
+        return description;
+    }
+
+    public void setDescription(@NotNull(message = "作业描述不能缺失") String description) {
+        this.description = description;
+    }
+
+    public @NotNull(message = "作业类型不能缺失") String getType() {
+        return type;
+    }
+
+    public void setType(@NotNull(message = "作业类型不能缺失") String type) {
+        this.type = type;
+    }
+
+    public String getDescriptionFile() {
+        return descriptionFile;
+    }
+
+    public void setDescriptionFile(String descriptionFile) {
+        this.descriptionFile = descriptionFile;
+    }
+
+    public List<String> getAttachments() {
+        return attachments;
+    }
+
+    public void setAttachments(List<String> attachments) {
+        this.attachments = attachments;
+    }
+
+    public @NotNull(message = "起始时间不能缺失") Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(@NotNull(message = "起始时间不能缺失") Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public @NotNull(message = "结束时间不能缺失") Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(@NotNull(message = "结束时间不能缺失") Date endTime) {
+        this.endTime = endTime;
+    }
+}

+ 5 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/ExamService.java

@@ -1,6 +1,7 @@
 package cn.seecoder.seecoderportalserver.service;
 
 import cn.seecoder.seecoderportalcommon.vo.dto.AiSpeakingAssignmentDTO;
+import cn.seecoder.seecoderportalcommon.vo.dto.AssignmentDTO;
 import cn.seecoder.seecoderportalcommon.vo.dto.AssignmentUpdateDTO;
 import cn.seecoder.seecoderportalcommon.vo.CreateEvalExamVO;
 import cn.seecoder.seecoderportalcommon.vo.QuestionScoreMapVO;
@@ -112,6 +113,10 @@ public interface ExamService {
 
     JSONObject getExamCodeQuestionAndScoreById(Integer examId);
 
+    JSONObject createEaiWritingExam(int courseId, AssignmentDTO assignmentDTO);
+
+    JSONObject createEaiSpeakingExam(int courseId, AiSpeakingAssignmentDTO assignmentDTO);
+
     JSONArray findEaiTeacherExamsByCourseId(int courseId);
 
     JSONObject updateEaiWritingExam(int assignmentId, AssignmentUpdateDTO assignmentUpdateDTO);

+ 11 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/ExamServiceImpl.java

@@ -1,6 +1,7 @@
 package cn.seecoder.seecoderportalserver.serviceImpl;
 
 import cn.seecoder.seecoderportalcommon.vo.dto.AiSpeakingAssignmentDTO;
+import cn.seecoder.seecoderportalcommon.vo.dto.AssignmentDTO;
 import cn.seecoder.seecoderportalcommon.vo.dto.AssignmentUpdateDTO;
 import cn.seecoder.seecoderportalcommon.vo.CourseVO;
 import cn.seecoder.seecoderportalcommon.vo.CreateEvalExamVO;
@@ -362,6 +363,16 @@ public class ExamServiceImpl implements ExamService {
         return result;
     }
 
+    @Override
+    public JSONObject createEaiWritingExam(int courseId, AssignmentDTO assignmentDTO) {
+        return eaiService.createWritingAssignment(courseId, assignmentDTO);
+    }
+
+    @Override
+    public JSONObject createEaiSpeakingExam(int courseId, AiSpeakingAssignmentDTO assignmentDTO) {
+        return eaiService.createSpeakingAssignment(courseId, assignmentDTO);
+    }
+
     @Override
     public JSONArray findEaiTeacherExamsByCourseId(int courseId) {
         return eaiService.findTeacherExamsByCourseId(courseId).getJSONArray("result");

+ 53 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/subsystem/EaiService.java

@@ -1,6 +1,7 @@
 package cn.seecoder.seecoderportalserver.serviceImpl.subsystem;
 
 import cn.seecoder.seecoderportalcommon.vo.dto.AiSpeakingAssignmentDTO;
+import cn.seecoder.seecoderportalcommon.vo.dto.AssignmentDTO;
 import cn.seecoder.seecoderportalcommon.vo.dto.AssignmentUpdateDTO;
 import cn.seecoder.seecoderportalcommon.vo.CourseVO;
 import cn.seecoder.seecoderportalserver.service.HttpService;
@@ -212,6 +213,58 @@ public class EaiService implements SubsystemService {
         }
     }
 
+    public JSONObject createWritingAssignment(int courseId, AssignmentDTO assignmentDTO) {
+        String uri = eaiHost + "/api/assignment";
+        JSONObject requestBody = new JSONObject();
+        List<NameValuePair> params = new ArrayList<>();
+        String token = httpService.getToken();
+        requestBody.put("assignmentName", assignmentDTO.getAssignmentName());
+        requestBody.put("description", assignmentDTO.getDescription());
+        requestBody.put("type", assignmentDTO.getType());
+        requestBody.put("descriptionFile", assignmentDTO.getDescriptionFile());
+        requestBody.put("attachments", assignmentDTO.getAttachments());
+        requestBody.put("startTime", assignmentDTO.getStartTime());
+        requestBody.put("endTime", assignmentDTO.getEndTime());
+        System.out.println("EAI创建作业信息:" + requestBody);
+        params.add(new BasicNameValuePair("courseId", String.valueOf(courseId)));
+        try{
+            String result = httpService.sendPost(uri, requestBody, params, token);
+            System.out.println("EAI新建作业结果: " + result);
+            return JSON.parseObject(result);
+        }catch (Exception e){
+            e.printStackTrace();
+            return new JSONObject().fluentPut("创建作业异常,",e.getMessage());
+        }
+    }
+
+    public JSONObject createSpeakingAssignment(int courseId, AiSpeakingAssignmentDTO assignmentDTO) {
+        String uri = eaiHost + "/api/aispeaking";
+        JSONObject requestBody = new JSONObject();
+        List<NameValuePair> params = new ArrayList<>();
+        String token = httpService.getToken();
+        requestBody.put("assignmentName", assignmentDTO.getAssignmentName());
+        requestBody.put("description", assignmentDTO.getDescription());
+        requestBody.put("type", assignmentDTO.getType());
+        requestBody.put("descriptionFile", assignmentDTO.getDescriptionFile());
+        requestBody.put("attachments", assignmentDTO.getAttachments());
+        requestBody.put("startTime", assignmentDTO.getStartTime());
+        requestBody.put("endTime", assignmentDTO.getEndTime());
+        requestBody.put("minDuration", assignmentDTO.getMinDuration());
+        requestBody.put("minInteraction", assignmentDTO.getMinInteraction());
+        requestBody.put("surveyLinks", assignmentDTO.getSurveyLinks());
+        requestBody.put("surveyDuration", assignmentDTO.getSurveyDuration());
+        System.out.println("EAI创建作业信息:" + requestBody);
+        params.add(new BasicNameValuePair("courseId", String.valueOf(courseId)));
+        try{
+            String result = httpService.sendPost(uri, requestBody, params, token);
+            System.out.println("EAI新建作业结果: " + result);
+            return JSON.parseObject(result);
+        }catch (Exception e){
+            e.printStackTrace();
+            return new JSONObject().fluentPut("创建作业异常,",e.getMessage());
+        }
+    }
+
 
     @Override
     public JSONObject findRecommendExamsByCourseId(int courseId){return null;}

+ 9 - 1
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/ExamController.java

@@ -1,5 +1,6 @@
 package cn.seecoder.seecoderportalserver.web.rest;
 
+import cn.seecoder.seecoderportalcommon.vo.dto.AssignmentDTO;
 import cn.seecoder.seecoderportalcommon.vo.dto.AiSpeakingAssignmentDTO;
 import cn.seecoder.seecoderportalcommon.vo.dto.AssignmentUpdateDTO;
 import cn.seecoder.seecoderportalcommon.vo.CreateEvalExamVO;
@@ -383,7 +384,14 @@ public class ExamController {
         return OkResponse.of(examService.getExamListByCurrentStudent());
     }
 
-
+    @PostMapping("/eai/exam/{courseId:\\d+}/create/writing")
+    public JSONObject createEaiWritingExam(@PathVariable int courseId,@RequestBody AssignmentDTO assignmentDTO) {
+        return examService.createEaiWritingExam(courseId,assignmentDTO);
+    }
+    @PostMapping("/eai/exam/{courseId:\\d+}/create/speaking")
+    public JSONObject createEaiSpeakingExam(@PathVariable int courseId, @RequestBody AiSpeakingAssignmentDTO assignmentDTO) {
+        return examService.createEaiSpeakingExam(courseId,assignmentDTO);
+    }