Просмотр исходного кода

手工制作的答题卡卡格式,成绩检查里面客观题无轨迹(卡格式的题号与电子卡格式的题号不一致导致,需验证)

wangliang 3 месяцев назад
Родитель
Сommit
5ee9e87f2a

+ 32 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanAnswerCardServiceImpl.java

@@ -13,7 +13,9 @@ import com.qmth.teachcloud.common.bean.marking.scanAnswerCard.AnswerCard;
 import com.qmth.teachcloud.common.bean.marking.scanAnswerCard.AnswerCardPage;
 import com.qmth.teachcloud.common.bean.vo.FilePathVo;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.MarkQuestion;
 import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 import com.qmth.teachcloud.common.enums.scan.OmrField;
 import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
@@ -40,6 +42,8 @@ import javax.annotation.Resource;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -73,6 +77,9 @@ public class ScanAnswerCardServiceImpl extends ServiceImpl<ScanAnswerCardMapper,
     @Resource
     private FileUploadService fileUploadService;
 
+    @Resource
+    MarkQuestionService markQuestionService;
+
     @Override
     public ScanAnswerCard findByExamAndNumber(Long examId, Integer cardNumber) {
         if (examId == null) {
@@ -213,6 +220,12 @@ public class ScanAnswerCardServiceImpl extends ServiceImpl<ScanAnswerCardMapper,
             if (CollectionUtils.isNotEmpty(scanAnswerCardQuestions)) {
                 // 删除
                 scanAnswerCardQuestionService.deleteByExamIdAndPaperNumberAndCardNumber(examId, markPaper.getPaperNumber(), number);
+
+                //新增客观题题型匹配
+                List<MarkQuestion> markQuestionList = markQuestionService.listByExamIdAndPaperNumberAndObjective(examId, markPaper.getPaperNumber(), true);
+                if (CollectionUtils.isNotEmpty(markQuestionList)) {
+                    this.megreQuestion(markQuestionList, scanAnswerCardQuestions);
+                }
                 scanAnswerCardQuestionService.saveBatch(scanAnswerCardQuestions);
             }
         } catch (IOException e) {
@@ -220,6 +233,25 @@ public class ScanAnswerCardServiceImpl extends ServiceImpl<ScanAnswerCardMapper,
         }
     }
 
+    /**
+     * 题型匹配
+     *
+     * @param markQuestionList
+     * @param scanAnswerCardQuestions
+     */
+    protected void megreQuestion(List<MarkQuestion> markQuestionList, List<ScanAnswerCardQuestion> scanAnswerCardQuestions) {
+        Map<String, MarkQuestion> markQuestionMap = markQuestionList.stream().collect(Collectors.toMap(k -> k.getMainNumber() + "-" + k.getSubNumber(), Function.identity(), (dto1, dto2) -> dto1));
+        Map<String, ScanAnswerCardQuestion> scanAnswerCardQuestionMap = scanAnswerCardQuestions.stream().collect(Collectors.toMap(k -> k.getMainNumber() + "-" + k.getSubNumber(), Function.identity(), (dto1, dto2) -> dto1));
+        if (markQuestionMap.size() != scanAnswerCardQuestionMap.size()) {
+            throw ExceptionResultEnum.ERROR.exception("电子卡格式和扫描卡格式题型数量不一致");
+        }
+        markQuestionMap.forEach((k, v) -> {
+            if (!scanAnswerCardQuestionMap.containsKey(k)) {
+                throw ExceptionResultEnum.ERROR.exception("电子卡格式和扫描卡格式题型不一致[" + k + "]");
+            }
+        });
+    }
+
     /**
      * 解析卡格式文件中的裁切图坐标,用于云阅卷同步
      *