Sfoglia il codice sorgente

修复识别对照生成任务问题

yin 1 anno fa
parent
commit
2464c1f99e

+ 8 - 7
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkQuestionService.java

@@ -1,15 +1,16 @@
 package com.qmth.teachcloud.mark.service;
 
+import java.util.List;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.web.multipart.MultipartFile;
+
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.qmth.teachcloud.mark.dto.mark.setting.MarkQuestionDto;
 import com.qmth.teachcloud.common.entity.MarkQuestion;
+import com.qmth.teachcloud.mark.dto.mark.setting.MarkQuestionDto;
 import com.qmth.teachcloud.mark.params.MarkObjectiveQuestionParams;
 import com.qmth.teachcloud.mark.params.MarkQuestionParams;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.List;
 
 /**
  * <p>
@@ -65,7 +66,7 @@ public interface MarkQuestionService extends IService<MarkQuestion> {
 
     MarkQuestion getByExamIdAndPaperNumberAndMainNumberAndSubNumberAndObjective(Long examId, String paperNumber, Integer mainNumber, Integer subNumber, boolean isObjective);
 
-    List<MarkQuestion> listByExamIdAndPaperNumberAndPaperIndexAndPageIndex(Long examId, String paperNumber, Integer paperIndex, Integer pageIndex);
+    List<MarkQuestion> listByExamIdAndPaperNumberAndPaperIndexAndPageIndex(Long examId, String paperNumber, Integer paperIndex, Integer pageIndex, boolean isObjective);
 
     MarkQuestionDto pageQuestionsByExamIdAndPaperNumber(Long examId, String paperNumber, String paperType, boolean canCreate);
 

+ 4 - 6
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/ScanOmrTaskService.java

@@ -2,15 +2,13 @@ package com.qmth.teachcloud.mark.service;
 
 import java.util.List;
 
+import org.apache.ibatis.annotations.Param;
+
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 import com.qmth.teachcloud.common.enums.scan.ConditionType;
-import com.qmth.teachcloud.mark.dto.ScanOmrStudent;
-import com.qmth.teachcloud.mark.dto.ScanOmrTaskResultDto;
-import com.qmth.teachcloud.mark.dto.ScanOmrTaskSaveDto;
-import com.qmth.teachcloud.mark.dto.ScanOmrTaskStatusDto;
-import com.qmth.teachcloud.mark.dto.ScanStudentDto;
+import com.qmth.teachcloud.mark.dto.*;
 import com.qmth.teachcloud.mark.entity.ScanOmrTask;
 import com.qmth.teachcloud.mark.enums.OmrTaskStatus;
 
@@ -24,7 +22,7 @@ import com.qmth.teachcloud.mark.enums.OmrTaskStatus;
  */
 public interface ScanOmrTaskService extends IService<ScanOmrTask> {
 	
-	ScanOmrTask buildTask(ConditionType c, Long studentId);
+	List<ScanOmrTask> buildTask(@Param("c") ConditionType c, @Param("studentId") Long studentId);
 
 	ScanOmrStudent getTask(Long studentId);
 

+ 19 - 14
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkQuestionServiceImpl.java

@@ -1,5 +1,19 @@
 package com.qmth.teachcloud.mark.service.impl;
 
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -23,18 +37,6 @@ import com.qmth.teachcloud.mark.params.MarkQuestionParams;
 import com.qmth.teachcloud.mark.service.MarkGroupService;
 import com.qmth.teachcloud.mark.service.MarkPaperService;
 import com.qmth.teachcloud.mark.service.MarkQuestionService;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.MapUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletResponse;
-import java.util.*;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
  * <p>
@@ -402,12 +404,15 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
 
     @Override
     public List<MarkQuestion> listByExamIdAndPaperNumberAndPaperIndexAndPageIndex(Long examId, String paperNumber,
-                                                                                  Integer paperIndex, Integer pageIndex) {
+                                                                                  Integer paperIndex, Integer pageIndex,boolean isObjective) {
         QueryWrapper<MarkQuestion> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(MarkQuestion::getExamId, examId)
                 .eq(MarkQuestion::getPaperNumber, paperNumber)
                 .eq(MarkQuestion::getPaperIndex, paperIndex)
-                .eq(MarkQuestion::getPageIndex, pageIndex);
+                .eq(MarkQuestion::getPageIndex, pageIndex)
+                .eq(MarkQuestion::getObjective, isObjective)
+                .orderByAsc(MarkQuestion::getMainNumber)
+                .orderByAsc(MarkQuestion::getSubNumber);
         return this.list(queryWrapper);
     }
 

+ 16 - 14
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanOmrTaskServiceImpl.java

@@ -84,7 +84,7 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
 
     @Override
     @Transactional
-    public ScanOmrTask buildTask(ConditionType c, Long studentId) {
+    public List<ScanOmrTask> buildTask(ConditionType c, Long studentId) {
         List<ScanStudentPaper> paperIds = clearAndToDispose(c, studentId);
         if (CollectionUtils.isEmpty(paperIds)) {
             return null;
@@ -166,7 +166,7 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
                 if (ConditionType.QUESTION_MULTI_BLANK.equals(c)) {
                     List<MarkQuestion> questiongList = questionService
                             .listByExamIdAndPaperNumberAndPaperIndexAndPageIndex(student.getExamId(),
-                                    student.getPaperNumber(), spe.getPaperIndex(), pageEntity.getPageIndex());
+                                    student.getPaperNumber(), spe.getPaperIndex(), pageEntity.getPageIndex(),true);
                     if (pageEntity.getQuestion() == null || pageEntity.getQuestion().getResult() == null
                             || questiongList.isEmpty()) {
                         continue;
@@ -194,7 +194,7 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
                         && !allObjectiveBlank) {
                     List<MarkQuestion> questiongList = questionService
                             .listByExamIdAndPaperNumberAndPaperIndexAndPageIndex(student.getExamId(),
-                                    student.getPaperNumber(), spe.getPaperIndex(), pageEntity.getPageIndex());
+                                    student.getPaperNumber(), spe.getPaperIndex(), pageEntity.getPageIndex(),true);
                     if (pageEntity.getQuestion() == null || pageEntity.getQuestion().getResult() == null
                             || questiongList.isEmpty()) {
                         continue;
@@ -204,7 +204,8 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
                     for (int i = 0; i < size; i++) {
                         String result = pageEntity.getQuestion().getResult().get(i);
                         MarkQuestion question = questiongList.get(i);
-                        if (question.getQuestionType().equals(QuestionType.SINGLE.getValue()) && result != null
+                        if ((question.getQuestionType().equals(QuestionType.SINGLE.getValue())||question.getQuestionType().equals(QuestionType.TRUE_OR_FALSE.getValue()))
+                                && result != null
                                 && result.contains(OMR_BLANK)) {
                             OmrTaskItem item = new OmrTaskItem();
                             item.setIndex(i + 1);
@@ -212,7 +213,6 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
                             item.setOmrResult(result);
                             pageDto.getPageSingleBlankItems().add(item);
                             single_blank_count++;
-                            multi_blank_count++;
                             if (single_blank_count > 0) {
                                 single_blank = true;
                             }
@@ -223,7 +223,7 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
                         && !allObjectiveBlank) {
                     List<MarkQuestion> questiongList = questionService
                             .listByExamIdAndPaperNumberAndPaperIndexAndPageIndex(student.getExamId(),
-                                    student.getPaperNumber(), spe.getPaperIndex(), pageEntity.getPageIndex());
+                                    student.getPaperNumber(), spe.getPaperIndex(), pageEntity.getPageIndex(),true);
                     if (pageEntity.getQuestion() == null || pageEntity.getQuestion().getResult() == null
                             || questiongList.isEmpty()) {
                         continue;
@@ -234,7 +234,8 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
                         String result = pageEntity.getQuestion().getResult().get(i);
                         MarkQuestion question = questiongList.get(i);
                         String newStr = result.replace(OMR_SUSPECT, "");
-                        if (question.getQuestionType().equals(QuestionType.SINGLE.getValue()) && result != null
+                        if ((question.getQuestionType().equals(QuestionType.SINGLE.getValue())||question.getQuestionType().equals(QuestionType.TRUE_OR_FALSE.getValue()))
+                                && result != null
                                 && newStr.length() > 1) {
                             OmrTaskItem item = new OmrTaskItem();
                             item.setIndex(i + 1);
@@ -247,8 +248,9 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
                 }
             }
         }
+        List<ScanOmrTask> result = new ArrayList<>();
         if (retList.size() == 0) {
-            return null;
+            return result;
         }
         for (OmrTaskDto dto : retList) {
             for (OmrTaskPageDto pageDto : dto.getPage()) {
@@ -266,10 +268,10 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
                 }
             }
             if (dto.getTask().getPages().size() > 0) {
-                return dto.getTask();
+                result.add(dto.getTask());
             }
         }
-        return null;
+        return result;
     }
 
     private List<ScanStudentPaper> clearAndToDispose(ConditionType c, Long studentId) {
@@ -645,12 +647,12 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
     public void saveTask(Long studentId) {
         List<ScanOmrTask> omrTaskList = new ArrayList<ScanOmrTask>();
         for (ConditionType c : ConditionType.values()) {
-            ScanOmrTask omrTask = this.buildTask(c, studentId);
-            if (omrTask != null) {
-                omrTaskList.add(omrTask);
+            List<ScanOmrTask> omrTask = this.buildTask(c, studentId);
+            if (!omrTask.isEmpty()) {
+                omrTaskList.addAll(omrTask);
             }
         }
-        if (!omrTaskList.isEmpty()) {
+        if (omrTaskList!=null && !omrTaskList.isEmpty()) {
             this.saveBatch(omrTaskList);
         }
     }