|
@@ -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.marking.scanAnswerCard.AnswerCardPage;
|
|
import com.qmth.teachcloud.common.bean.vo.FilePathVo;
|
|
import com.qmth.teachcloud.common.bean.vo.FilePathVo;
|
|
import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
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.entity.SysUser;
|
|
|
|
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
|
|
import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
|
|
import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
|
|
import com.qmth.teachcloud.common.enums.scan.OmrField;
|
|
import com.qmth.teachcloud.common.enums.scan.OmrField;
|
|
import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
|
|
import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
|
|
@@ -40,6 +42,8 @@ import javax.annotation.Resource;
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+import java.util.function.Function;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -73,6 +77,9 @@ public class ScanAnswerCardServiceImpl extends ServiceImpl<ScanAnswerCardMapper,
|
|
@Resource
|
|
@Resource
|
|
private FileUploadService fileUploadService;
|
|
private FileUploadService fileUploadService;
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
+ MarkQuestionService markQuestionService;
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public ScanAnswerCard findByExamAndNumber(Long examId, Integer cardNumber) {
|
|
public ScanAnswerCard findByExamAndNumber(Long examId, Integer cardNumber) {
|
|
if (examId == null) {
|
|
if (examId == null) {
|
|
@@ -213,6 +220,12 @@ public class ScanAnswerCardServiceImpl extends ServiceImpl<ScanAnswerCardMapper,
|
|
if (CollectionUtils.isNotEmpty(scanAnswerCardQuestions)) {
|
|
if (CollectionUtils.isNotEmpty(scanAnswerCardQuestions)) {
|
|
// 删除
|
|
// 删除
|
|
scanAnswerCardQuestionService.deleteByExamIdAndPaperNumberAndCardNumber(examId, markPaper.getPaperNumber(), number);
|
|
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);
|
|
scanAnswerCardQuestionService.saveBatch(scanAnswerCardQuestions);
|
|
}
|
|
}
|
|
} catch (IOException e) {
|
|
} 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 + "]");
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 解析卡格式文件中的裁切图坐标,用于云阅卷同步
|
|
* 解析卡格式文件中的裁切图坐标,用于云阅卷同步
|
|
*
|
|
*
|