浏览代码

3.3.0 修改题目属性

ting.yin 1 年之前
父节点
当前提交
4a9445830a

+ 5 - 3
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/score/StudentObjectiveAnswerDto.java

@@ -1,12 +1,14 @@
 package com.qmth.teachcloud.mark.dto.mark.score;
 
+import com.qmth.teachcloud.mark.enums.QuestionType;
+
 public class StudentObjectiveAnswerDto {
 
     private Integer mainNumber;
     private Integer subNumber;
     private String answer;
     private Boolean exist;
-    private String questionType;
+    private QuestionType questionType;
 
     public Integer getMainNumber() {
         return mainNumber;
@@ -40,11 +42,11 @@ public class StudentObjectiveAnswerDto {
         this.exist = exist;
     }
 
-    public String getQuestionType() {
+    public QuestionType getQuestionType() {
         return questionType;
     }
 
-    public void setQuestionType(String questionType) {
+    public void setQuestionType(QuestionType questionType) {
         this.questionType = questionType;
     }
 }

+ 28 - 7
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkQuestion.java

@@ -1,13 +1,14 @@
 package com.qmth.teachcloud.mark.entity;
 
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
 import java.io.Serializable;
 
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.teachcloud.mark.enums.ObjectivePolicy;
+import com.qmth.teachcloud.mark.enums.QuestionType;
+
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -65,7 +66,11 @@ public class MarkQuestion implements Serializable {
     private ObjectivePolicy objectivePolicy;
 
     @ApiModelProperty(value = "题型")
-    private String questionType;
+    private QuestionType questionType;
+    
+    private Integer paperIndex;
+    
+    private Integer pageIndex;
 
     private String name;
 
@@ -153,11 +158,11 @@ public class MarkQuestion implements Serializable {
     public void setObjectivePolicy(ObjectivePolicy objectivePolicy) {
         this.objectivePolicy = objectivePolicy;
     }
-    public String getQuestionType() {
+    public QuestionType getQuestionType() {
         return questionType;
     }
 
-    public void setQuestionType(String questionType) {
+    public void setQuestionType(QuestionType questionType) {
         this.questionType = questionType;
     }
     public String getName() {
@@ -171,7 +176,23 @@ public class MarkQuestion implements Serializable {
     public String getQuestionNumber() {
         return getMainNumber() + "." + getSubNumber();
     }
-    @Override
+    public Integer getPaperIndex() {
+		return paperIndex;
+	}
+
+	public void setPaperIndex(Integer paperIndex) {
+		this.paperIndex = paperIndex;
+	}
+
+	public Integer getPageIndex() {
+		return pageIndex;
+	}
+
+	public void setPageIndex(Integer pageIndex) {
+		this.pageIndex = pageIndex;
+	}
+
+	@Override
     public String toString() {
         return "MarkQuestion{" +
             "id=" + id +

+ 35 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/enums/QuestionType.java

@@ -0,0 +1,35 @@
+package com.qmth.teachcloud.mark.enums;
+
+/**
+ * 题型
+ * 
+ */
+public enum QuestionType {
+    SINGLE("单选", 1), MULTIPLE("多选", 2), TRUE_OR_FALSE("判断", 3);
+
+    private String name;
+
+    private int value;
+
+    private QuestionType(String name, int value) {
+        this.name = name;
+        this.value = value;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public int getValue() {
+        return value;
+    }
+
+    public static QuestionType findByValue(int value) {
+        for (QuestionType c : QuestionType.values()) {
+            if (c.getValue() == value) {
+                return c;
+            }
+        }
+        return null;
+    }
+}

+ 3 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkQuestionService.java

@@ -44,4 +44,7 @@ public interface MarkQuestionService extends IService<MarkQuestion> {
     long countQuestionByExamIdAndPaperNumberAndGroupNumberIsNull(Long examId, String paperNumber, boolean isObjective);
 
     MarkQuestion getByExamIdAndPaperNumberAndMainNumberAndSubNumberAndObjective(Long examId, String paperNumber, Integer mainNumber, Integer subNumber, boolean isObjective);
+
+	List<MarkQuestion> listByExamIdAndPaperNumberAndPaperIndexAndPageIndex(Long examId, String paperNumber,
+			Integer paperIndex, Integer pageIndex);
 }

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

@@ -205,4 +205,15 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
                 .eq(MarkQuestion::getObjective, isObjective);
         return this.getOne(queryWrapper);
     }
+
+	@Override
+	public List<MarkQuestion> listByExamIdAndPaperNumberAndPaperIndexAndPageIndex(Long examId, String paperNumber,
+			Integer paperIndex, Integer pageIndex) {
+		QueryWrapper<MarkQuestion> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(MarkQuestion::getExamId, examId)
+                .eq(MarkQuestion::getPaperNumber, paperNumber)
+                .eq(MarkQuestion::getPaperIndex, paperIndex)
+                .eq(MarkQuestion::getPageIndex, pageIndex);
+        return this.list(queryWrapper);
+	}
 }

+ 45 - 44
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanOmrTaskServiceImpl.java

@@ -21,6 +21,7 @@ import com.qmth.boot.core.concurrent.service.ConcurrentService;
 import com.qmth.boot.core.exception.ParameterException;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.ScanStatus;
 import com.qmth.teachcloud.common.enums.scan.ConditionType;
 import com.qmth.teachcloud.common.enums.scan.OmrField;
 import com.qmth.teachcloud.mark.bean.OmrTaskItem;
@@ -33,6 +34,7 @@ import com.qmth.teachcloud.mark.dto.ScanOmrTaskResultDto;
 import com.qmth.teachcloud.mark.dto.ScanOmrTaskResultPageDto;
 import com.qmth.teachcloud.mark.dto.ScanOmrTaskSaveDto;
 import com.qmth.teachcloud.mark.dto.ScanOmrTaskStatusDto;
+import com.qmth.teachcloud.mark.entity.MarkQuestion;
 import com.qmth.teachcloud.mark.entity.MarkStudent;
 import com.qmth.teachcloud.mark.entity.ScanOmrTask;
 import com.qmth.teachcloud.mark.entity.ScanPaper;
@@ -40,9 +42,10 @@ import com.qmth.teachcloud.mark.entity.ScanPaperPage;
 import com.qmth.teachcloud.mark.entity.ScanStudentPaper;
 import com.qmth.teachcloud.mark.enums.LockType;
 import com.qmth.teachcloud.mark.enums.OmrTaskStatus;
+import com.qmth.teachcloud.mark.enums.QuestionType;
 import com.qmth.teachcloud.mark.mapper.ScanOmrTaskMapper;
+import com.qmth.teachcloud.mark.service.MarkQuestionService;
 import com.qmth.teachcloud.mark.service.MarkStudentService;
-import com.qmth.teachcloud.mark.service.ScanAnswerCardService;
 import com.qmth.teachcloud.mark.service.ScanOmrTaskService;
 import com.qmth.teachcloud.mark.service.ScanPaperPageService;
 import com.qmth.teachcloud.mark.service.ScanPaperService;
@@ -71,7 +74,7 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
 	@Autowired
 	private ConcurrentService concurrentService;
 	@Autowired
-	private ScanAnswerCardService answerCardService;
+	private MarkQuestionService questionService;
 
 	private static final String OMR_SUSPECT = "?";
 
@@ -153,48 +156,46 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
 //                        items.add(item);
 //                    }
 //                }
-//                if (ConditionType.QUESTION_MULTI_BLANK.equals(c)) {
-//                    for (int i = 0; pageEntity.getQuestion() != null && pageEntity.getQuestion().getResult() != null
-//                            && i < pageEntity.getQuestion().getResult().size(); i++) {
-//                        String result = pageEntity.getQuestion().getResult().get(i);
-//                        PaperStructure question = structureService.getPaperStructure(paper.getExamId(),
-//                                paper.getCardNumber(), spe.getPaperNumber(), pageEntity.getPageIndex(), i + 1,
-//                                OmrField.QUESTION);
-//                        if (!question.getSingle() && result != null && result.contains(OMR_BLANK)) {
-//                            OmrTaskItem item = new OmrTaskItem();
-//                            item.setIndex(i + 1);
-//                            item.setField(OmrField.QUESTION);
-//                            item.setOmrResult(result);
-//                            pageDto.getPageMultiBlankItems().add(item);
-//                            multi_blank_count++;
-//                            if (multi_blank_count > condition.getValue()) {
-//                                multi_blank = true;
-//                            }
-//                        }
-//                    }
-//                }
-//                if (ConditionType.QUESTION_SINGLE_BLANK.equals(c)
-//                        && ScanStatus.SCANNED.equals(student.getStatus()) && !allObjectiveBlank) {
-//                    for (int i = 0; pageEntity.getQuestion() != null && pageEntity.getQuestion().getResult() != null
-//                            && i < pageEntity.getQuestion().getResult().size(); i++) {
-//                        String result = pageEntity.getQuestion().getResult().get(i);
-//                        PaperStructure question = structureService.getPaperStructure(paper.getExamId(),
-//                                paper.getCardNumber(), spe.getPaperNumber(), pageEntity.getPageIndex(), i + 1,
-//                                OmrField.QUESTION);
-//                        if (question.getSingle() && result != null && result.contains(OMR_BLANK)) {
-//                            OmrTaskItem item = new OmrTaskItem();
-//                            item.setIndex(i + 1);
-//                            item.setField(OmrField.QUESTION);
-//                            item.setOmrResult(result);
-//                            pageDto.getPageSingleBlankItems().add(item);
-//                            single_blank_count++;
-//                            multi_blank_count++;
-//                            if (single_blank_count > condition.getValue()) {
-//                                single_blank = true;
-//                            }
-//                        }
-//                    }
-//                }
+                if (ConditionType.QUESTION_MULTI_BLANK.equals(c)) {
+                	List<MarkQuestion> questiongList=questionService.listByExamIdAndPaperNumberAndPaperIndexAndPageIndex(student.getExamId(), student.getPaperNumber(),spe.getPaperIndex(),pageEntity.getPageIndex());
+                    for (int i = 0; pageEntity.getQuestion() != null && pageEntity.getQuestion().getResult() != null
+                            && i < pageEntity.getQuestion().getResult().size(); i++) {
+                        String result = pageEntity.getQuestion().getResult().get(i);
+                        MarkQuestion question = questiongList.get(i);
+                        if (question.getQuestionType().equals(QuestionType.MULTIPLE) && result != null && result.contains(OMR_BLANK)) {
+                            OmrTaskItem item = new OmrTaskItem();
+                            item.setIndex(i + 1);
+                            item.setField(OmrField.QUESTION);
+                            item.setOmrResult(result);
+                            pageDto.getPageMultiBlankItems().add(item);
+                            multi_blank_count++;
+                            if (multi_blank_count > 0) {
+                                multi_blank = true;
+                            }
+                        }
+                    }
+                }
+                if (ConditionType.QUESTION_SINGLE_BLANK.equals(c)
+                        && ScanStatus.SCANNED.equals(student.getScanStatus()) && !allObjectiveBlank) {
+                	List<MarkQuestion> questiongList=questionService.listByExamIdAndPaperNumberAndPaperIndexAndPageIndex(student.getExamId(), student.getPaperNumber(),spe.getPaperIndex(),pageEntity.getPageIndex());
+                	for (int i = 0; pageEntity.getQuestion() != null && pageEntity.getQuestion().getResult() != null
+                            && i < pageEntity.getQuestion().getResult().size(); i++) {
+                        String result = pageEntity.getQuestion().getResult().get(i);
+                        MarkQuestion question = questiongList.get(i);
+                        if (question.getQuestionType().equals(QuestionType.SINGLE) && result != null && result.contains(OMR_BLANK)) {
+                            OmrTaskItem item = new OmrTaskItem();
+                            item.setIndex(i + 1);
+                            item.setField(OmrField.QUESTION);
+                            item.setOmrResult(result);
+                            pageDto.getPageSingleBlankItems().add(item);
+                            single_blank_count++;
+                            multi_blank_count++;
+                            if (single_blank_count > 0) {
+                                single_blank = true;
+                            }
+                        }
+                    }
+                }
 //                if (ConditionType.QUESTION_SINGLE_EXCEED.equals(c)
 //                        && ScanStatus.SCANNED.equals(student.getStatus()) && !allObjectiveBlank) {
 //                    for (int i = 0; pageEntity.getQuestion() != null && pageEntity.getQuestion().getResult() != null

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

@@ -30,7 +30,6 @@ import com.qmth.teachcloud.mark.service.ScanPaperService;
 import com.qmth.teachcloud.mark.service.ScanRefixBatchService;
 import com.qmth.teachcloud.mark.service.ScanStudentPaperService;
 
-
 /**
  * <p>
  * 服务实现类
@@ -60,7 +59,8 @@ public class ScanRefixBatchServiceImpl extends ServiceImpl<ScanRefixBatchMapper,
 	@Transactional
 	@Override
 	public AnswerRefixVo answerRefix(Long userId, AnswerRefixDomain domain) {
-		MarkStudent student = studentService.findByExamIdAndCoursePaperIdAndStudentCode(domain.getExamId(),domain.getCoursePaperId(), domain.getStudentCode());
+		MarkStudent student = studentService.findByExamIdAndCoursePaperIdAndStudentCode(domain.getExamId(),
+				domain.getCoursePaperId(), domain.getStudentCode());
 		if (student == null) {
 			throw new ParameterException("考生信息未找到");
 		}
@@ -68,16 +68,15 @@ public class ScanRefixBatchServiceImpl extends ServiceImpl<ScanRefixBatchMapper,
 		if (answerCard == null) {
 			throw new ParameterException("卡格式信息未找到");
 		}
-		boolean allowSubject = answerCardSubjectService
-				.checkSubject(answerCard.getExamId(), answerCard.getNumber(),
+		boolean allowSubject = answerCardSubjectService.checkSubject(answerCard.getExamId(), answerCard.getNumber(),
 				student.getCoursePaperId());
 		if (!allowSubject) {
 			throw new ParameterException("卡格式与考生科目不匹配");
 		}
-		// if (domain.getPapers().size() != answerCard.getPaperCount()) {
-		// throw new ParameterException("卡格式张数不一致");
-		// }
-		
+		if (domain.getPapers().size() != answerCard.getPaperCount()) {
+			throw new ParameterException("卡格式张数不一致");
+		}
+
 		concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().lock();
 		try {
 			List<ScanStudentPaper> studentPaperList = studentPaperService.findByStudentId(student.getId());