Selaa lähdekoodia

3.4.5 update-20250417,新功能开发

xiaofei 2 kuukautta sitten
vanhempi
commit
21e29b55b4

+ 4 - 0
distributed-print/install/mysql/upgrade/3.4.5.sql

@@ -121,3 +121,7 @@ WHERE id=897;
 ALTER TABLE `mark_ocr_student_question`
     ADD COLUMN `image_width` INT NULL DEFAULT 0 COMMENT '图片宽度' AFTER `md5`,
 ADD COLUMN `image_height` INT NULL DEFAULT 0 COMMENT '图片高度' AFTER `image_width`;
+
+-- 2025-04-17
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('1236', '查看任务轨迹', 'MarkTaskTrack', 'LINK', '917', '11', 'AUTH', '1237', '1', '0', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('1237', '查看任务轨迹', '/api/admin/mark/task/track', 'URL', '917', '30', 'AUTH', '1', '1', '1');

+ 9 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkTaskController.java

@@ -82,4 +82,13 @@ public class MarkTaskController extends BaseController {
         return ResultUtil.ok(true);
     }
 
+    /**
+     * 查看任务轨迹
+     */
+    @ApiOperation(value = "查看任务轨迹")
+    @RequestMapping(value = "/track", method = RequestMethod.POST)
+    public Result track(@ApiParam(value = "任务ID", required = true) @RequestParam Long id) {
+        return ResultUtil.ok(markTaskService.getTrack(id));
+    }
+
 }

+ 55 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/manage/MarkTaskTrackDto.java

@@ -0,0 +1,55 @@
+package com.qmth.teachcloud.mark.dto.mark.manage;
+
+import com.qmth.teachcloud.common.bean.dto.mark.PictureConfig;
+import com.qmth.teachcloud.mark.entity.MarkAiQuestionParam;
+
+import java.util.List;
+
+public class MarkTaskTrackDto {
+
+    private List<String> sheetUrls;
+    private List<PictureConfig> picList;
+    private List<TrackDTO> trackList;
+    private MarkTaskTrackOcrDto ocr;
+    private MarkAiQuestionParam markAiQuestionParam;
+
+    public List<String> getSheetUrls() {
+        return sheetUrls;
+    }
+
+    public void setSheetUrls(List<String> sheetUrls) {
+        this.sheetUrls = sheetUrls;
+    }
+
+    public List<PictureConfig> getPicList() {
+        return picList;
+    }
+
+    public void setPicList(List<PictureConfig> picList) {
+        this.picList = picList;
+    }
+
+    public List<TrackDTO> getTrackList() {
+        return trackList;
+    }
+
+    public void setTrackList(List<TrackDTO> trackList) {
+        this.trackList = trackList;
+    }
+
+    public MarkTaskTrackOcrDto getOcr() {
+        return ocr;
+    }
+
+    public void setOcr(MarkTaskTrackOcrDto ocr) {
+        this.ocr = ocr;
+    }
+
+    public MarkAiQuestionParam getMarkAiQuestionParam() {
+        return markAiQuestionParam;
+    }
+
+    public void setMarkAiQuestionParam(MarkAiQuestionParam markAiQuestionParam) {
+        this.markAiQuestionParam = markAiQuestionParam;
+    }
+}

+ 25 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/manage/MarkTaskTrackOcrDto.java

@@ -0,0 +1,25 @@
+package com.qmth.teachcloud.mark.dto.mark.manage;
+
+import java.util.List;
+
+public class MarkTaskTrackOcrDto {
+
+    private List<String> result;
+    private String errorMsg;
+
+    public List<String> getResult() {
+        return result;
+    }
+
+    public void setResult(List<String> result) {
+        this.result = result;
+    }
+
+    public String getErrorMsg() {
+        return errorMsg;
+    }
+
+    public void setErrorMsg(String errorMsg) {
+        this.errorMsg = errorMsg;
+    }
+}

+ 11 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/setting/MarkGroupTaskDto.java

@@ -3,6 +3,8 @@ package com.qmth.teachcloud.mark.dto.mark.setting;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.teachcloud.common.entity.MarkQuestion;
+import com.qmth.teachcloud.common.enums.mark.MarkPaperAiMark;
+import com.qmth.teachcloud.mark.entity.MarkPaper;
 
 import java.util.List;
 
@@ -20,6 +22,7 @@ public class MarkGroupTaskDto {
     private Boolean mergeMarker;
     // 是否开启AI评卷
     private Boolean aiMarkSet;
+    private MarkPaperAiMark aiMark;
 
     public Long getExamId() {
         return examId;
@@ -76,4 +79,12 @@ public class MarkGroupTaskDto {
     public void setAiMarkSet(Boolean aiMarkSet) {
         this.aiMarkSet = aiMarkSet;
     }
+
+    public MarkPaperAiMark getAiMark() {
+        return aiMark;
+    }
+
+    public void setAiMark(MarkPaperAiMark aiMark) {
+        this.aiMark = aiMark;
+    }
 }

+ 3 - 4
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkTaskService.java

@@ -4,10 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.teachcloud.mark.dto.mark.SpecialTagDTO;
-import com.qmth.teachcloud.mark.dto.mark.manage.MarkManageDto;
-import com.qmth.teachcloud.mark.dto.mark.manage.MarkTaskDto;
-import com.qmth.teachcloud.mark.dto.mark.manage.Task;
-import com.qmth.teachcloud.mark.dto.mark.manage.TrackDTO;
+import com.qmth.teachcloud.mark.dto.mark.manage.*;
 import com.qmth.teachcloud.mark.entity.MarkTask;
 import com.qmth.teachcloud.mark.enums.MarkTaskStatus;
 import com.qmth.teachcloud.mark.params.MarkResultQuestion;
@@ -124,4 +121,6 @@ public interface MarkTaskService extends IService<MarkTask> {
     void exportAiMark(Long semesterId, Long examId, Long courseId, String paperNumber) throws Exception;
 
     void updateAiMarkErrorMsg(MarkTask t);
+
+    MarkTaskTrackDto getTrack(Long id);
 }

+ 2 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/TaskService.java

@@ -1,6 +1,7 @@
 package com.qmth.teachcloud.mark.service;
 
 import com.qmth.teachcloud.common.entity.MarkQuestion;
+import com.qmth.teachcloud.mark.dto.mark.manage.MarkTaskTrackDto;
 import com.qmth.teachcloud.mark.dto.mark.manage.Task;
 import com.qmth.teachcloud.mark.dto.mark.manage.TaskArchive;
 import com.qmth.teachcloud.mark.entity.MarkArbitrateHistory;
@@ -16,4 +17,5 @@ public interface TaskService {
 
 	Task build(Long userId, List<MarkTask> markTaskList);
 
+    MarkTaskTrackDto buildMarkTask(MarkTask markTask);
 }

+ 1 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkQuestionServiceImpl.java

@@ -598,6 +598,7 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
         markGroupTaskDto.setDoubleMark(markPaper != null && markPaper.getDoubleMark());
         markGroupTaskDto.setMergeMarker(markPaper != null && markPaper.getMergeMarker());
         markGroupTaskDto.setAiMarkSet(markPaper != null && !MarkPaperAiMark.NONE.equals(markPaper.getAiMark()));
+        markGroupTaskDto.setAiMark(markPaper.getAiMark());
         return markGroupTaskDto;
     }
 

+ 5 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java

@@ -1620,12 +1620,12 @@ public class MarkServiceImpl implements MarkService {
                         AutoScoreResult autoScoreResult = aiService.autoScore(request, AiUtil.signatureAi(basicSchool));
                         long endTime = System.currentTimeMillis();
                         submitAiTask(t, aiUser.getId(), markQuestion, autoScoreResult, buildTrack(markAiQuestionParam.getMode(), autoScoreResult, markQuestion, markOcrStudentQuestions), endTime - startTime);
+                        t.setAiMarkErrorMsg(null);
                     } catch (Exception e) {
                         t.setAiMarkErrorMsg(e.getMessage());
                     } finally {
                         this.releaseStudent(examId, paperNumber, t.getStudentId(), aiUser.getId());
                         this.updateMarkedCount(examId, paperNumber, t.getQuestionId());
-                        t.setAiMarkErrorMsg(null);
                         markTaskService.updateAiMarkErrorMsg(t);
                     }
                 }
@@ -1660,6 +1660,10 @@ public class MarkServiceImpl implements MarkService {
                 List<MarkTask> markTaskList = markTaskService.listByExamIdAndPaperNumberAndQuestionIdAndAiMarkedAndStatusNotIn(examId, paperNumber, questionId, true, statusList);
                 for (MarkTask markTask : markTaskList) {
                     Long studentId = markTask.getStudentId();
+
+                    if (MarkTaskStatus.ARBITRATED.equals(markTask.getStatus()) || MarkTaskStatus.WAIT_ARBITRATE.equals(markTask.getStatus())) {
+                        markTaskService.resetArbitrateStatusByStudentIdAndQuestionIdAndTaskNumber(studentId, questionId, markTask.getTaskNumber());
+                    }
                     markTaskService.resetById(markTask.getId(), null, null, null, null, MarkTaskStatus.WAITING);
                     markSubjectiveScoreService.deleteByStudentIdAndQuestionId(studentId, questionId);
                     markRejectHistoryService.deleteByTaskId(markTask.getId());

+ 7 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkTaskServiceImpl.java

@@ -17,6 +17,7 @@ import com.qmth.teachcloud.common.util.ExcelUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.mark.dto.mark.SpecialTagDTO;
 import com.qmth.teachcloud.mark.dto.mark.manage.*;
+import com.qmth.teachcloud.mark.entity.MarkStudent;
 import com.qmth.teachcloud.mark.entity.MarkTask;
 import com.qmth.teachcloud.mark.enums.LockType;
 import com.qmth.teachcloud.mark.enums.MarkTaskStatus;
@@ -56,7 +57,6 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
     private TaskService taskService;
     @Resource
     private BasicRoleDataPermissionService basicRoleDataPermissionService;
-
     @Override
     public IPage<MarkManageDto> listPaperManage(Long examId, Long openCollegeId, Long courseId, String paperNumber, Boolean progressStatus, Integer pageNumber, Integer pageSize) {
         Page<MarkManageDto> page = new Page<>(pageNumber, pageSize);
@@ -559,4 +559,10 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
                 .eq(MarkTask::getId, t.getId());
         this.update(updateWrapper);
     }
+
+    @Override
+    public MarkTaskTrackDto getTrack(Long id) {
+        MarkTask markTask = this.getById(id);
+        return taskService.buildMarkTask(markTask);
+    }
 }

+ 40 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/TaskServiceImpl.java

@@ -51,6 +51,14 @@ public class TaskServiceImpl implements TaskService {
     private MarkArchiveStudentCardService markArchiveStudentCardService;
     @Resource
     private MarkUserQuestionService markUserQuestionService;
+    @Resource
+    private MarkOcrStudentQuestionService markOcrStudentQuestionService;
+    @Resource
+    private MarkAiQuestionParamService markAiQuestionParamService;
+    @Resource
+    private MarkAiQuestionPointService markAiQuestionPointService;
+    @Resource
+    private MarkAiQuestionLevelService markAiQuestionLevelService;
 
     @Override
     public Task build(MarkArbitrateHistory markArbitrateHistory, MarkQuestion markQuestion) {
@@ -379,4 +387,36 @@ public class TaskServiceImpl implements TaskService {
         }
         return taskQuestions;
     }
+
+    @Override
+    public MarkTaskTrackDto buildMarkTask(MarkTask markTask) {
+        MarkTaskTrackDto markTaskTrackDto = new MarkTaskTrackDto();
+        MarkStudent markStudent = markStudentService.getById(markTask.getStudentId());
+        markTaskTrackDto.setSheetUrls(teachcloudCommonService.fileMarkPreview(markStudent.getSheetPathList()));
+        MarkQuestion markQuestion = markQuestionService.getById(markTask.getQuestionId());
+        markTaskTrackDto.setPicList(markQuestion.getPictureConfigs());
+        markTaskTrackDto.setTrackList(StringUtils.isNotBlank(markTask.getHeaderTrackList()) ? markTask.listHeaderTrack() : markTask.listMarkerTrack());
+        MarkTaskTrackOcrDto markTaskTrackOcrDto = new MarkTaskTrackOcrDto();
+        if (StringUtils.isNotBlank(markTask.getAiMarkErrorMsg())) {
+            markTaskTrackOcrDto.setErrorMsg(markTask.getAiMarkErrorMsg());
+        } else {
+            List<MarkOcrStudentQuestion> markOcrStudentQuestions = markOcrStudentQuestionService.listByStudentIdAndQuestionId(markTask.getStudentId(), markTask.getQuestionId());
+            List<String> result = new ArrayList<>();
+            if (CollectionUtils.isNotEmpty(markOcrStudentQuestions)) {
+                result = markOcrStudentQuestions.stream().map(MarkOcrStudentQuestion::getOcrContent).collect(Collectors.toList());
+            }
+            markTaskTrackOcrDto.setResult(result);
+        }
+        markTaskTrackDto.setOcr(markTaskTrackOcrDto);
+
+        MarkAiQuestionParam markAiQuestionParam = markAiQuestionParamService.getByExamIdAndPaperNumberAndQuestionId(markTask.getExamId(), markTask.getPaperNumber(), markTask.getQuestionId());
+        if (Objects.nonNull(markAiQuestionParam)) {
+            List<MarkAiQuestionPoint> markAiQuestionPointDbList = markAiQuestionPointService.listByAiQuestionId(markAiQuestionParam.getId());
+            List<MarkAiQuestionLevel> markAiQuestionLevelDbList = markAiQuestionLevelService.listByAiQuestionId(markAiQuestionParam.getId());
+            markAiQuestionParam.setListInfo(markAiQuestionPointDbList, markAiQuestionLevelDbList);
+        }
+        markTaskTrackDto.setMarkAiQuestionParam(markAiQuestionParam);
+        return markTaskTrackDto;
+    }
+
 }