Jelajahi Sumber

3.4.4 update-20250327,bug修改

xiaofei 2 bulan lalu
induk
melakukan
f0bfea8a07

+ 2 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardModelFourServiceImpl.java

@@ -441,6 +441,8 @@ public class ExamCardModelFourServiceImpl extends ServiceImpl<ExamCardModelFourM
         if (Objects.nonNull(scanAnswerCard)) {
             printFinishService.insertScanAnswerCardQuestion(dto.getExamId(), dto.getPaperNumber(), examCardModelFour.getContent(), scanAnswerCard.getNumber());
         }
+        // 自动保存题卡遮盖区
+        printFinishService.updateMarkSheetConfig(dto, examCardModelFour.getContent());
     }
 
     /**

+ 3 - 0
distributed-print/install/mysql/upgrade/3.4.4.sql

@@ -366,3 +366,6 @@ insert into boot_app_info (app_code,app_version) values('teachcloud','3.4.3');
 
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('1221', '班级阅卷进度-详情', '/api/admin/mark/question/subjective/class/detail', 'URL', '917', '21', 'AUTH', '1', '1', '1');
 UPDATE `sys_privilege` SET `related` = '928,929,932,933,934,935,936,937,938,939,940,941,942,943,964,965,966,967,968,1008,1012,1183,1186,1221' WHERE (`id` = '944');
+
+UPDATE `sys_config` SET `config_value` = '[{"name":"A3","size":"297*420"}, {"name":"A4","size":"210*297"}, {"name":"A5","size":"148*210"}, {"name":"B3","size":"353*500"}, {"name":"B4","size":"250*353"}, {"name":"B5","size":"176*250"}, {"name":"8K","size":"270*390"}]' WHERE (`id` = '8');
+UPDATE `sys_config` SET `config_value` = '[{"name":"A3","size":"297*420"}, {"name":"8K","size":"270*390"}]' WHERE (`id` = '43');

+ 1 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkTaskMapper.java

@@ -32,7 +32,7 @@ public interface MarkTaskMapper extends BaseMapper<MarkTask> {
     MarkTask getLastOneByUserIdAndStatus(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("questionId") Long questionId, @Param("userId") Long userId, @Param("status") String status);
 
     IPage<MarkTask> listPageHistory(@Param("page") Page<Long> page, @Param("userId") Long userId, @Param("examId") Long examId, @Param("paperNumber") String paperNumber,
-                                    @Param("secretNumber") String secretNumber, @Param("markerScore") Double markerScore);
+                                    @Param("secretNumber") String secretNumber, @Param("markerScore") Double markerScore, @Param("statuses") MarkTaskStatus...statuses);
 
     List<MarkTask> findUnMarked(@Param("page") Page<MarkTask> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber,
                                 @Param("userId") Long userId);

+ 5 - 5
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/params/MarkArbitrateResult.java

@@ -21,7 +21,7 @@ public class MarkArbitrateResult {
     /**
      * 总分
      */
-    private double markScore;
+    private double markerScore;
 
     /**
      * 阅卷轨迹列表
@@ -55,12 +55,12 @@ public class MarkArbitrateResult {
         this.studentId = studentId;
     }
 
-    public double getMarkScore() {
-        return markScore;
+    public double getMarkerScore() {
+        return markerScore;
     }
 
-    public void setMarkScore(double markScore) {
-        this.markScore = markScore;
+    public void setMarkerScore(double markerScore) {
+        this.markerScore = markerScore;
     }
 
     public TrackDTO[] getMarkerTrackList() {

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

@@ -18,4 +18,6 @@ public interface MarkRejectHistoryService extends IService<MarkRejectHistory> {
     IPage<MarkRejectHistoryDto> pageRejectHistory(Long examId, String paperNumber, Long questionId, String loginName, String studentCode, String secretNumber, String teachClassName, Integer pageNumber, Integer pageSize);
 
     void deleteByExamIdAndPaperNumberAndQuestionId(Long examId, String paperNumber, Long questionId);
+
+    void deleteByTaskId(Long taskId);
 }

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

@@ -59,7 +59,7 @@ public interface MarkTaskService extends IService<MarkTask> {
 
     int countByExamIdAndPaperNumberAndUserIdAndAndClassNameAndQuestionIdIn(Long examId, String paperNumber,Long userId, List<String> className, List<Long> questionIds, MarkTaskStatus... status);
 
-    IPage<MarkTask> listPageHistory(Page<Long> page, Long userId, Long examId, String paperNumber, String secretNumber, Double markerScore);
+    IPage<MarkTask> listPageHistory(Page<Long> page, Long userId, Long examId, String paperNumber, String secretNumber, Double markerScore, MarkTaskStatus...statuses);
 
     List<MarkTask> findUnMarked(Page<MarkTask> page, Long examId, String paperNumber, Long userId);
 
@@ -103,4 +103,6 @@ public interface MarkTaskService extends IService<MarkTask> {
     List<MarkTask> listByStudentIdAndMarkerId(Long studentId, Long markerId, List<MarkTaskStatus> markTaskStatuses);
 
     void resetHeaderByStudentIdAndQuestionId(Long studentId, Long questionId);
+
+    void resetArbitrateStatusByStudentIdAndQuestionIdAndTaskNumber(Long studentId, Long questionId, Integer taskNumber);
 }

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

@@ -131,4 +131,6 @@ public interface MarkUserQuestionService extends IService<MarkUserQuestion> {
     void smsMarkTask(Long examId, Long courseId, String paperNumber);
 
     List<MarkUser> listUserByExamIdAndPaperNumber(Long examId, String paperNumber);
+
+    void updateEnableByExamIdAndPaperNumberAndQuestionIds(Long examId, String paperNumber, List<Long> questionIds, Boolean enable);
 }

+ 7 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkRejectHistoryServiceImpl.java

@@ -48,4 +48,11 @@ public class MarkRejectHistoryServiceImpl extends ServiceImpl<MarkRejectHistoryM
         this.remove(updateWrapper);
     }
 
+    @Override
+    public void deleteByTaskId(Long taskId) {
+        UpdateWrapper<MarkRejectHistory> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().eq(MarkRejectHistory::getTaskId, taskId);
+        this.remove(updateWrapper);
+    }
+
 }

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

@@ -177,9 +177,13 @@ public class MarkServiceImpl implements MarkService {
             List<MarkTask> markTaskList = markTaskService.listByExamIdAndPaperNumberAndQuestionIdAndUserIdAndStatusNotIn(examId, paperNumber, questionId, userId, 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);
                 markProblemHistoryService.deleteByExamIdAndPaperNumberAndTaskId(examId, paperNumber, markTask.getId());
+                markRejectHistoryService.deleteByTaskId(markTask.getId());
                 markArbitrateHistoryService.deleteByExamIdAndPaperNumberAndStudentIdAndQuestionId(examId, paperNumber, studentId, questionId);
                 lockService.waitlock(LockType.STUDENT, markTask.getStudentId());
                 markStudentService.updateSubjectiveStatusAndScore(studentId, SubjectiveStatus.UNMARK);
@@ -317,7 +321,7 @@ public class MarkServiceImpl implements MarkService {
     public void processArbitrate(MarkArbitrateResult markResult, Long userId) {
         MarkArbitrateHistory markArbitrateHistory = markArbitrateHistoryService.getById(markResult.getArbitrateId());
         markArbitrateHistory.setUpdateUserId(userId);
-        markArbitrateHistory.setTotalScore(markResult.getMarkScore());
+        markArbitrateHistory.setTotalScore(markResult.getMarkerScore());
 //        markArbitrateHistory.setScoreList(markResult.isUnselective() ? null : markResult.getScoreList());
         markArbitrateHistory.setStatus(MarkArbitrateStatus.MARKED);
         markArbitrateHistory.setUpdateTime(System.currentTimeMillis());
@@ -338,10 +342,10 @@ public class MarkServiceImpl implements MarkService {
         markArbitrateHistoryService.saveOrUpdate(markArbitrateHistory);
         markTaskService.updateHeaderResult(markArbitrateHistory.getExamId(), markArbitrateHistory.getPaperNumber(),
                 markArbitrateHistory.getQuestionId(), markArbitrateHistory.getStudentId(),
-                markArbitrateHistory.getUpdateUserId(), markResult.getMarkScore(), markResult.getMarkerTrackList(), markResult.getMarkerTagList(), markArbitrateHistory.getUpdateTime(), MarkTaskStatus.ARBITRATED);
+                markArbitrateHistory.getUpdateUserId(), markResult.getMarkerScore(), markResult.getMarkerTrackList(), markResult.getMarkerTagList(), markArbitrateHistory.getUpdateTime(), MarkTaskStatus.ARBITRATED);
         updateMarkedCount(markArbitrateHistory.getExamId(), markArbitrateHistory.getPaperNumber(),
                 markArbitrateHistory.getQuestionId());
-        checkStudentQuestion(markArbitrateHistory.getStudentId(), markQuestionService.getById(markArbitrateHistory.getQuestionId()), markResult.getMarkScore());
+        checkStudentQuestion(markArbitrateHistory.getStudentId(), markQuestionService.getById(markArbitrateHistory.getQuestionId()), markResult.getMarkerScore());
         // 评卷质量重新统计
         List<MarkUserQuestion> markUserGroups = markUserQuestionService.listByExamIdAndPaperNumberAndQuestionId(markArbitrateHistory.getExamId(), markArbitrateHistory.getPaperNumber(), markArbitrateHistory.getQuestionId());
         markUserGroups.forEach(m -> this.updateQuality(m));
@@ -798,7 +802,9 @@ public class MarkServiceImpl implements MarkService {
             for (MarkUserQuestion question : markUserQuestionList) {
                 dto = new MarkStatusDto(markQuestionService.getById(question.getQuestionId()), markUserPaper.getMarkedQuestionId());
                 List<Long> questionIds = Arrays.asList(question.getQuestionId());
-                dtoList.add(getDto(dto, examId, paperNumber, userId, classNames, questionIds));
+                MarkStatusDto statusDto = getDto(dto, examId, paperNumber, userId, classNames, questionIds);
+                statusDto.setLeftCount(countLeftCountForSingle(statusDto.getLeftCount(), question.getQuestionId(), userId, classNames));
+                dtoList.add(statusDto);
             }
         } else if (QuestionModel.MULTI.equals(questionModel)) {
             MarkStatusDto dto = new MarkStatusDto();
@@ -807,9 +813,27 @@ public class MarkServiceImpl implements MarkService {
         } else {
             throw ExceptionResultEnum.ERROR.exception("参数有误");
         }
+        dtoList.sort(Comparator.comparing(MarkStatusDto::getMainNumber).thenComparing(MarkStatusDto::getSubNumber));
         return dtoList;
     }
 
+    private int countLeftCountForSingle(int leftCount, Long questionId, Long userId, List<String> classNames) {
+        MarkQuestion markQuestion = markQuestionService.getById(questionId);
+        if (CollectionUtils.isEmpty(classNames)) {
+            int currentCount = this.applyCurrentCount(markQuestion);
+            int userCurrentCount = this.applyCurrentCount(markQuestion, userId);
+            return leftCount - currentCount + userCurrentCount;
+        } else {
+            List<MarkUserClass> markUserClassList = markUserClassService.listByExamIdAndPaperNumber(markQuestion.getExamId(), markQuestion.getPaperNumber());
+            Set<MarkUserClass> markUserClasses = markUserClassList.stream().filter(m -> classNames.contains(m.getClassName()) && !m.getUserId().equals(userId)).collect(Collectors.toSet());
+            int count = 0;
+            for (MarkUserClass markUserClass : markUserClasses) {
+                count += this.applyCurrentCount(markQuestion, markUserClass.getUserId());
+            }
+            return leftCount - count;
+        }
+    }
+
     private MarkStatusDto getDto(MarkStatusDto dto, Long examId, String paperNumber, Long userId, List<String> classNames, List<Long> questionIds) {
         //待仲裁卷数量
         dto.setArbitrateCount(markArbitrateHistoryService.waitArbitrateCount(examId, paperNumber, null, classNames));
@@ -927,7 +951,7 @@ public class MarkServiceImpl implements MarkService {
         Page<Long> page = new Page<>(pageNumber, pageSize);
         OrderItem orderItem = new OrderItem(order, sort.equals(Sort.asc));
         page.addOrder(orderItem);
-        IPage<MarkTask> list = markTaskService.listPageHistory(page, userId, examId, paperNumber, secretNumber, markerScore);
+        IPage<MarkTask> list = markTaskService.listPageHistory(page, userId, examId, paperNumber, secretNumber, markerScore, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED, MarkTaskStatus.WAIT_ARBITRATE, MarkTaskStatus.PROBLEM);
         List<Task> recordsDtos = new ArrayList<>();
         List<MarkTaskStatus> markTaskStatuses = Arrays.asList(MarkTaskStatus.MARKED, MarkTaskStatus.WAIT_ARBITRATE, MarkTaskStatus.PROBLEM);
         for (MarkTask markTask : list.getRecords()) {
@@ -1170,6 +1194,9 @@ public class MarkServiceImpl implements MarkService {
                             resetStudentStatus(task.getStudentId());
                             count++;
                         }
+                    } else if (MarkTaskStatus.ARBITRATED.equals(task.getStatus()) || MarkTaskStatus.WAIT_ARBITRATE.equals(task.getStatus())) {
+                        // 待仲裁、已仲裁,直接跳过
+                        count++;
                     } else if (markResultQuestion.getMarkerScore() <= markQuestion.getTotalScore()) {//阅卷分是否小于等于该组总分
                         if (submitTask(task, userId, markQuestion, markResultQuestion)) {
                             updateMarkedCount(markUserQuestion.getExamId(), markUserQuestion.getPaperNumber(), markUserQuestion.getQuestionId());

+ 25 - 4
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkTaskServiceImpl.java

@@ -246,8 +246,8 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
     }
 
     @Override
-    public IPage<MarkTask> listPageHistory(Page<Long> page, Long userId, Long examId, String paperNumber, String secretNumber, Double markerScore) {
-        return this.baseMapper.listPageHistory(page, userId, examId, paperNumber, secretNumber, markerScore);
+    public IPage<MarkTask> listPageHistory(Page<Long> page, Long userId, Long examId, String paperNumber, String secretNumber, Double markerScore, MarkTaskStatus...statuses) {
+        return this.baseMapper.listPageHistory(page, userId, examId, paperNumber, secretNumber, markerScore, statuses);
     }
 
     @Override
@@ -293,9 +293,14 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
                 .in(MarkTask::getStatus, Arrays.asList(MarkTaskStatus.WAITING, MarkTaskStatus.REJECTED, MarkTaskStatus.MARKED, MarkTaskStatus.PROBLEM))
                 .set(MarkTask::getStatus, MarkTaskStatus.PROBLEM)
                 .set(MarkTask::getUserId, userId)
-                .set(MarkTask::getMarkerScore, 0)
-                .set(MarkTask::getMarkerTagList, null)
+                .set(MarkTask::getMarkerScore, null)
+                .set(MarkTask::getMarkerTrackList, null)
                 .set(MarkTask::getMarkerTagList, null)
+                .set(MarkTask::getHeaderTime, null)
+                .set(MarkTask::getHeaderId, null)
+                .set(MarkTask::getHeaderScore, null)
+                .set(MarkTask::getHeaderTrackList, null)
+                .set(MarkTask::getHeaderTagList, null)
                 .set(MarkTask::getMarkerTime, now)
                 .set(MarkTask::getMarkerSpent, spent);
         return this.update(updateWrapper);
@@ -464,4 +469,20 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
                 .eq(MarkTask::getQuestionId, questionId);
         this.update(updateWrapper);
     }
+
+    @Override
+    public void resetArbitrateStatusByStudentIdAndQuestionIdAndTaskNumber(Long studentId, Long questionId, Integer taskNumber) {
+        UpdateWrapper<MarkTask> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(MarkTask::getStatus, MarkTaskStatus.MARKED)
+                .set(MarkTask::getHeaderId, null)
+                .set(MarkTask::getHeaderTime, null)
+                .set(MarkTask::getHeaderScore, null)
+                .set(MarkTask::getHeaderTrackList, null)
+                .set(MarkTask::getHeaderTagList, null)
+                .eq(MarkTask::getStudentId, studentId)
+                .eq(MarkTask::getQuestionId, questionId)
+                .ne(MarkTask::getTaskNumber, taskNumber)
+                .in(MarkTask::getStatus, MarkTaskStatus.WAIT_ARBITRATE, MarkTaskStatus.ARBITRATED);
+        this.update(updateWrapper);
+    }
 }

+ 23 - 5
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkUserQuestionServiceImpl.java

@@ -3,6 +3,7 @@ package com.qmth.teachcloud.mark.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.Update;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -39,9 +40,11 @@ import com.qmth.teachcloud.mark.mapper.MarkUserQuestionMapper;
 import com.qmth.teachcloud.mark.service.*;
 import com.qmth.teachcloud.mark.utils.Calculator;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.io.filefilter.FalseFileFilter;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.jsf.FacesContextUtils;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
@@ -147,20 +150,25 @@ public class MarkUserQuestionServiceImpl extends ServiceImpl<MarkUserQuestionMap
             // 根据是否合并设置评卷员参数,做合并
             List<Long> questionIds = listMergeQuestionId(markerAddParam.getExamId(), markerAddParam.getPaperNumber(), markerAddParam.getQuestionId());
 
-            List<MarkUserQuestion> markUserGroups = new ArrayList<>();
+            this.updateEnableByExamIdAndPaperNumberAndQuestionIds(markerAddParam.getExamId(), markerAddParam.getPaperNumber(), questionIds, false);
+            List<MarkUserQuestion> markUserQuestionAdd = new ArrayList<>();
+            List<MarkUserQuestion> markUserQuestionUpdate = new ArrayList<>();
             for (Long userId : markerAddParam.getUserIds()) {
                 for (Long questionId : questionIds) {
                     MarkUserQuestion markUserGroup = this.getByExamIdAndPaperNumberAndQuestionIdAndUserId(markerAddParam.getExamId(), markerAddParam.getPaperNumber(), questionId, userId);
                     if (markUserGroup == null) {
-                        markUserGroups.add(new MarkUserQuestion(markerAddParam.getExamId(), markerAddParam.getPaperNumber(), questionId, userId));
+                        markUserQuestionAdd.add(new MarkUserQuestion(markerAddParam.getExamId(), markerAddParam.getPaperNumber(), questionId, userId));
                     } else if (!markUserGroup.getEnable()) {
                         markUserGroup.setEnable(true);
-                        markUserGroups.add(markUserGroup);
+                        markUserQuestionUpdate.add(markUserGroup);
                     }
                 }
             }
-            if (CollectionUtils.isNotEmpty(markUserGroups)) {
-                this.saveOrUpdateBatch(markUserGroups);
+            if (CollectionUtils.isNotEmpty(markUserQuestionAdd)) {
+                this.saveBatch(markUserQuestionAdd);
+            }
+            if (CollectionUtils.isNotEmpty(markUserQuestionUpdate)) {
+                this.saveOrUpdateBatch(markUserQuestionUpdate);
             }
         }
     }
@@ -541,4 +549,14 @@ public class MarkUserQuestionServiceImpl extends ServiceImpl<MarkUserQuestionMap
     public List<MarkUser> listUserByExamIdAndPaperNumber(Long examId, String paperNumber) {
         return this.baseMapper.listUserByExamIdAndPaperNumber(examId, paperNumber);
     }
+
+    @Override
+    public void updateEnableByExamIdAndPaperNumberAndQuestionIds(Long examId, String paperNumber, List<Long> questionIds, Boolean enable) {
+        UpdateWrapper<MarkUserQuestion> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(MarkUserQuestion::getEnable, enable)
+                .eq(MarkUserQuestion::getExamId, examId)
+                .eq(MarkUserQuestion::getPaperNumber, paperNumber)
+                .in(MarkUserQuestion::getQuestionId, questionIds);
+        this.update(updateWrapper);
+    }
 }

+ 11 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/utils/CardParseUtils.java

@@ -12,6 +12,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -128,6 +129,7 @@ public class CardParseUtils {
         List<Pages> pages = JSON.parseArray(jsonObject.getString("pages"), Pages.class);
         List<SubPictureConfig> pictureConfigs = new ArrayList<>();
         List<String> structs = markQuestionList.stream().filter(m -> !m.getObjective()).map(m -> mergeNumber(m.getMainNumber(), m.getSubNumber())).collect(Collectors.toList());
+        Map<String, MarkQuestion> markQuestionMap =markQuestionList.stream().collect(Collectors.toMap(m -> mergeNumber(m.getMainNumber(), m.getSubNumber()), Function.identity()));
         int i = 1;
         for (Pages page : pages) {
             for (AnswerArea area : page.getExchange().getAnswerArea()) {
@@ -135,6 +137,10 @@ public class CardParseUtils {
                 SubPictureConfig subPictureConfig = new SubPictureConfig(i, doubles[0], doubles[1], doubles[2], doubles[3], area.getMainNumber(), mergeNumber(area.getMainNumber(), area.getSubNumber()));
                 if (area.getSubNumber() instanceof Integer) {
                     if (structs.contains(subPictureConfig.getQuestionNumber())) {
+                        MarkQuestion markQuestion = markQuestionMap.get(subPictureConfig.getQuestionNumber());
+                        if(markQuestion != null){
+                            subPictureConfig.setQuestionType(markQuestion.getQuestionType());
+                        }
                         pictureConfigs.add(subPictureConfig);
                     }
                     continue;
@@ -144,6 +150,10 @@ public class CardParseUtils {
                     for (String areaStruct : areaStructs) {
                         Optional<SubPictureConfig> optional = pictureConfigs.stream().filter(m -> m.getQuestionNumber().equals(areaStruct)).findFirst();
                         if (structs.contains(areaStruct) && !optional.isPresent()) {
+                            MarkQuestion markQuestion = markQuestionMap.get(areaStruct);
+                            if(markQuestion != null){
+                                subPictureConfig.setQuestionType(markQuestion.getQuestionType());
+                            }
                             pictureConfigs.add(subPictureConfig);
                             break;
                         }
@@ -168,7 +178,7 @@ public class CardParseUtils {
             }
 
             Double elasticRate = 0.01;
-            if (((prevConfig.getQuestionType().equals("4") && prevConfig.getMainNumber().equals(item.getMainNumber())) || (!prevConfig.getQuestionType().equals("4") && prevConfig.getQuestionNumber().equals(item.getQuestionNumber())))
+            if (((prevConfig.getQuestionType().equals(4) && prevConfig.getMainNumber().equals(item.getMainNumber())) || (!prevConfig.getQuestionType().equals(4) && prevConfig.getQuestionNumber().equals(item.getQuestionNumber())))
                     && prevConfig.getI() == item.getI() &&
                     prevConfig.getY() + prevConfig.getH() + elasticRate >= item.getY() &&
                     prevConfig.getW().equals(item.getW()) &&

+ 4 - 1
teachcloud-mark/src/main/resources/mapper/MarkTaskMapper.xml

@@ -128,7 +128,10 @@
 			mt.exam_id = #{examId}
 		and mt.paper_number = #{paperNumber}
 		and mt.user_id = #{userId}
-		and mt.status = 'MARKED'
+		and mt.status in
+            <foreach collection="statuses" item="status" separator="," open="(" close=")">
+                #{status}
+            </foreach>
             <if test="secretNumber != null and secretNumber != '' ">
                 and mt.secret_number = #{secretNumber}
 			</if>

+ 1 - 1
teachcloud-mark/src/main/resources/mapper/MarkUserQuestionMapper.xml

@@ -44,7 +44,6 @@
                 LEFT JOIN
             basic_semester bs ON be.semester_id = bs.id
         <where>
-            mq.task_count > 0
             <if test="examId != null">
                 and mq.exam_id = #{examId}
             </if>
@@ -176,6 +175,7 @@
                           mark_question mq ON muq.exam_id = mq.exam_id
                               AND muq.paper_number = mq.paper_number
                               AND muq.question_id = mq.id
+                              AND muq.enable = TRUE
                       WHERE
                           mp.exam_id = muq.exam_id
                         AND mp.paper_number = muq.paper_number