xiaofei 1 سال پیش
والد
کامیت
14fc2ff533

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

@@ -37,7 +37,7 @@ public interface ScanAnswerCardService extends IService<ScanAnswerCard> {
 
     AnswerCardVo cardGet(Long examId, Integer number);
 
-    ScanAnswerCard getByExamIdAndCoursePaperIdAndCardId(Long examId, String coursePaperId, Long cardId);
+    ScanAnswerCard getByExamIdAndCoursePaperIdAndPaperTypeAndCardId(Long examId, String coursePaperId, String paperType, Long cardId);
 
     List<ScanAnswerCard> listByExamIdAndPaperNumber(Long examId, String paperNumber);
 

+ 10 - 4
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkGroupServiceImpl.java

@@ -22,6 +22,7 @@ import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.qmth.teachcloud.mark.entity.MarkTask;
 import com.qmth.teachcloud.mark.entity.MarkUserGroup;
 import com.qmth.teachcloud.mark.enums.LockType;
+import com.qmth.teachcloud.mark.enums.MarkTaskStatus;
 import com.qmth.teachcloud.mark.enums.ScorePolicy;
 import com.qmth.teachcloud.mark.lock.LockService;
 import com.qmth.teachcloud.mark.mapper.MarkGroupMapper;
@@ -33,10 +34,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -121,6 +119,10 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
     @Transactional
     @Override
     public void deleteGroupByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber) {
+        List<MarkTaskStatus> markTaskStatuses = Arrays.asList(MarkTaskStatus.MARKED, MarkTaskStatus.WAIT_ARBITRATE, MarkTaskStatus.PROBLEM, MarkTaskStatus.REJECTED, MarkTaskStatus.ARBITRATED);
+        if (markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndStatusIn(examId, paperNumber, groupNumber, markTaskStatuses) > 0) {
+            throw ExceptionResultEnum.ERROR.exception("该分组已开始评卷,不允许删除");
+        }
         MarkGroup markGroup = this.getByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, groupNumber);
         if (lockService.trylock(LockType.GROUP_DELETE, examId, paperNumber, groupNumber)) {
             markSyncService.deleteMarkGroup(markGroup, true);
@@ -404,6 +406,10 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
 
         // 增加或减少分组内题目数量和题目变动、单双评切换、开启双评且双评比例值修改过。则删除任务
         if (isClear) {
+            List<MarkTaskStatus> markTaskStatuses = Arrays.asList(MarkTaskStatus.MARKED, MarkTaskStatus.WAIT_ARBITRATE, MarkTaskStatus.PROBLEM, MarkTaskStatus.REJECTED, MarkTaskStatus.ARBITRATED);
+            if (markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndStatusIn(examId, paperNumber, markGroupDto.getGroupNumber(), markTaskStatuses) > 0) {
+                throw ExceptionResultEnum.ERROR.exception("该分组已开始评卷,不允许修改");
+            }
             this.updateMarkedCount(examId, paperNumber, markGroupDto.getGroupNumber(), 0);
             this.updateTaskCount(examId, paperNumber, markGroupDto.getGroupNumber(), 0);
             if (lockService.trylock(LockType.GROUP_DELETE, examId, paperNumber, markGroupDto.getGroupNumber())) {

+ 2 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanAnswerCardServiceImpl.java

@@ -254,10 +254,11 @@ public class ScanAnswerCardServiceImpl extends ServiceImpl<ScanAnswerCardMapper,
     }
 
     @Override
-    public ScanAnswerCard getByExamIdAndCoursePaperIdAndCardId(Long examId, String coursePaperId, Long cardId) {
+    public ScanAnswerCard getByExamIdAndCoursePaperIdAndPaperTypeAndCardId(Long examId, String coursePaperId, String paperType, Long cardId) {
         QueryWrapper<ScanAnswerCard> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(ScanAnswerCard::getExamId, examId)
                 .eq(ScanAnswerCard::getCoursePaperId, coursePaperId)
+                .eq(ScanAnswerCard::getPaperType, paperType)
                 .eq(ScanAnswerCard::getCardId, cardId);
         return this.getOne(queryWrapper);
     }

+ 1 - 1
teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/PrintFinishService.java

@@ -16,7 +16,7 @@ public interface PrintFinishService {
 
     void insertScanAnswerCardAndMarkQuestion(ExamDetailCourseInitMarkDto dto, String paperType);
 
-    void insertScanAnswerCard(ExamDetailCourseInitMarkDto dto, PaperInfoVo paperInfoVo, String content);
+    void insertScanAnswerCard(ExamDetailCourseInitMarkDto dto, String paperType, PaperInfoVo paperInfoVo, String content);
 
     void insertMarkQuestion(Long examId, String paperNumber, String paperType, String content);
 

+ 4 - 4
teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/impl/PrintFinishServiceImpl.java

@@ -155,7 +155,7 @@ public class PrintFinishServiceImpl implements PrintFinishService {
                     // 解析卡格式中试卷结构并保存
                     this.insertMarkQuestion(dto.getExamId(), dto.getPaperNumber(), paperType, examCard.getContent());
                     // 生成并保存卡格式文件(后缀为.json)
-                    this.insertScanAnswerCard(dto, paperInfoVo, examCard.getContent());
+                    this.insertScanAnswerCard(dto, paperType, paperInfoVo, examCard.getContent());
                     // 题库获取的试卷,同步标答文件
                     if (examCard.getPaperId() != null) {
                         this.insertPaperAnswerFile(dto.getExamId(), dto.getPaperNumber(), paperType, examCard.getPaperId());
@@ -167,10 +167,10 @@ public class PrintFinishServiceImpl implements PrintFinishService {
     }
 
     @Override
-    public void insertScanAnswerCard(ExamDetailCourseInitMarkDto dto, PaperInfoVo paperInfoVo, String content) {
+    public void insertScanAnswerCard(ExamDetailCourseInitMarkDto dto, String paperType, PaperInfoVo paperInfoVo, String content) {
         ExamCard examCard = examCardService.getById(paperInfoVo.getCardId());
         if (examCard != null) {
-            ScanAnswerCard scanAnswerCard = scanAnswerCardService.getByExamIdAndCoursePaperIdAndCardId(dto.getExamId(), dto.getCoursePaperId(), Long.valueOf(paperInfoVo.getCardId()));
+            ScanAnswerCard scanAnswerCard = scanAnswerCardService.getByExamIdAndCoursePaperIdAndPaperTypeAndCardId(dto.getExamId(), dto.getCoursePaperId(), paperType, Long.valueOf(paperInfoVo.getCardId()));
             if (scanAnswerCard != null) {
                 return;
             }
@@ -197,7 +197,7 @@ public class PrintFinishServiceImpl implements PrintFinishService {
                     scanAnswerCard.setExamId(dto.getExamId());
                     scanAnswerCard.setPaperNumber(dto.getPaperNumber());
                     scanAnswerCard.setCoursePaperId(dto.getCoursePaperId());
-                    scanAnswerCard.setPaperType(dto.getPaperType());
+                    scanAnswerCard.setPaperType(paperType);
                     scanAnswerCard.setCardId(Long.valueOf(paperInfoVo.getCardId()));
                     scanAnswerCard.setNumber(number);
                     scanAnswerCard.setSource(CardSource.WEB);