Browse Source

3.4.5 20250613 实施过程中bug修复

xiaofei 1 week ago
parent
commit
2727ae734b

+ 4 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java

@@ -34,6 +34,7 @@ import com.qmth.teachcloud.common.util.ConvertUtil;
 import com.qmth.teachcloud.common.util.RedisCounterUtil;
 import com.qmth.teachcloud.common.util.RedisUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
+import com.qmth.teachcloud.mark.entity.MarkQuestionAnswer;
 import com.qmth.teachcloud.mark.entity.MarkStudent;
 import com.qmth.teachcloud.mark.service.*;
 import org.apache.commons.collections4.CollectionUtils;
@@ -130,6 +131,8 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     @Resource
     private MarkQuestionService markQuestionService;
     @Resource
+    private MarkQuestionAnswerService markQuestionAnswerService;
+    @Resource
     private MarkPaperPackageService markPaperPackageService;
     @Resource
     private ScanAnswerCardService scanAnswerCardService;
@@ -787,6 +790,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
                         markPaperService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
                         markPaperPackageService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
                         markQuestionService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
+                        markQuestionAnswerService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
                         scanAnswerCardService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
                         markUserQuestionService.deleteByExamIdAndPaperNumberAndQuestionId(examDetail.getExamId(), examDetailCourse.getPaperNumber(), null);
                         markUserClassService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());

+ 1 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintFinishServiceImpl.java

@@ -268,6 +268,7 @@ public class PrintFinishServiceImpl implements PrintFinishService {
                 List<String> markQuestionListString = markQuestionList.stream().map(m -> SystemConstant.mergeString("#", m.getMainNumber(), m.getSubNumber(), m.getQuestionType())).collect(Collectors.toList());
                 if (!CollectionUtils.isEqualCollection(structListString, markQuestionListString)) {
                     markQuestionService.deleteByExamIdAndPaperNumber(examId, paperNumber);
+                    markQuestionAnswerService.deleteByExamIdAndPaperNumber(examId, paperNumber);
                     markUserQuestionService.deleteByExamIdAndPaperNumberAndQuestionId(examId, paperNumber, null);
                     markQuestionList = markQuestionService.listQuestionByExamIdAndPaperNumber(examId, paperNumber);
                 }

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

@@ -15,6 +15,7 @@ import java.util.List;
  */
 public interface ScanAnswerCardQuestionService extends IService<ScanAnswerCardQuestion> {
 
+    void deleteByExamIdAndPaperNumber(Long examId, String paperNumber);
     void deleteByExamIdAndPaperNumberAndCardNumber(Long examId, String paperNumber, Integer number);
 
     List<ScanAnswerCardQuestion> listByExamIdAndPaperNumberAndCardNumberAndPaperIndexAndPageIndex(Long examId, String paperNumber, Integer cardNumber, Integer paperIndex, Integer pageIndex);

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

@@ -60,4 +60,6 @@ public interface ScanAnswerCardService extends IService<ScanAnswerCard> {
     List<ScanAnswerCard> findByExamAndCardIdAndCardSource(Long examId, Long cardId, CardSource source);
 
     String getCardContentByCardId(Long cardId, ExamModelEnum examModel);
+
+    ScanAnswerCard getByExamIdAndNumber(Long examId, Integer number);
 }

+ 1 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkPaperServiceImpl.java

@@ -653,6 +653,7 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
                 if (StringUtils.isNotBlank(uploadPath)) {
                     // 删除试卷结构
                     markQuestionService.deleteByExamIdAndPaperNumber(examId, markPaper.getPaperNumber());
+                    markQuestionAnswerService.deleteByExamIdAndPaperNumber(examId, markPaper.getPaperNumber());
                     // 保存试卷结构
                     List<MarkQuestion> markQuestions = new ArrayList<>();
                     List<MarkQuestionAnswer> markQuestionAnswers = new ArrayList<>();

+ 7 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java

@@ -92,6 +92,8 @@ public class MarkServiceImpl implements MarkService {
     @Resource
     private MarkQuestionService markQuestionService;
     @Resource
+    private MarkQuestionAnswerService markQuestionAnswerService;
+    @Resource
     private MarkUserPaperService markUserPaperService;
     @Resource
     private MarkUserQuestionService markUserQuestionService;
@@ -117,6 +119,8 @@ public class MarkServiceImpl implements MarkService {
 
     @Resource
     ScanAnswerCardService scanAnswerCardService;
+    @Resource
+    ScanAnswerCardQuestionService scanAnswerCardQuestionService;
 
     @Resource
     TaskService taskService;
@@ -1273,8 +1277,10 @@ public class MarkServiceImpl implements MarkService {
     public void deleteInitMarkData(Long examId, String paperNumber) {
         markPaperService.deleteByExamIdAndPaperNumber(examId, paperNumber);
         markStudentService.deleteByExamIdAndPaperNumber(examId, paperNumber);
-        scanAnswerCardService.deleteByExamIdAndPaperNumber(examId, paperNumber);
         markQuestionService.deleteByExamIdAndPaperNumber(examId, paperNumber);
+        markQuestionAnswerService.deleteByExamIdAndPaperNumber(examId, paperNumber);
+        scanAnswerCardService.deleteByExamIdAndPaperNumber(examId, paperNumber);
+        scanAnswerCardQuestionService.deleteByExamIdAndPaperNumber(examId, paperNumber);
     }
 
     @Override

+ 8 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanAnswerCardQuestionServiceImpl.java

@@ -21,6 +21,14 @@ import java.util.List;
 @Service
 public class ScanAnswerCardQuestionServiceImpl extends ServiceImpl<ScanAnswerCardQuestionMapper, ScanAnswerCardQuestion> implements ScanAnswerCardQuestionService {
 
+    @Override
+    public void deleteByExamIdAndPaperNumber(Long examId, String paperNumber) {
+        UpdateWrapper<ScanAnswerCardQuestion> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().eq(ScanAnswerCardQuestion::getExamId, examId)
+                .eq(ScanAnswerCardQuestion::getPaperNumber, paperNumber);
+        this.remove(updateWrapper);
+    }
+
     @Override
     public void deleteByExamIdAndPaperNumberAndCardNumber(Long examId, String paperNumber, Integer number) {
         UpdateWrapper<ScanAnswerCardQuestion> updateWrapper = new UpdateWrapper<>();

+ 34 - 7
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanAnswerCardServiceImpl.java

@@ -210,7 +210,7 @@ public class ScanAnswerCardServiceImpl extends ServiceImpl<ScanAnswerCardMapper,
                         scanAnswerCardQuestion.setOptionCount(item.getOptions().size());
                         scanAnswerCardQuestion.setQuestionType(fillArea.isSingle() ? 1 : 2);
                         scanAnswerCardQuestion.setPaperIndex(i / 2 + 1);
-                        scanAnswerCardQuestion.setPageIndex((i+1) % 2 == 1 ? 1 : 2);
+                        scanAnswerCardQuestion.setPageIndex((i + 1) % 2 == 1 ? 1 : 2);
                         scanAnswerCardQuestion.setCreateTime(System.currentTimeMillis());
                         scanAnswerCardQuestions.add(scanAnswerCardQuestion);
                     }
@@ -284,13 +284,21 @@ public class ScanAnswerCardServiceImpl extends ServiceImpl<ScanAnswerCardMapper,
         if (studentCount != 0) {
             throw new ParameterException("卡格式已被使用,无法删除");
         }
-        UpdateWrapper<ScanAnswerCard> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.lambda().eq(ScanAnswerCard::getExamId, card.getExamId());
-        updateWrapper.lambda().eq(ScanAnswerCard::getNumber, card.getNumber());
-        int count = this.baseMapper.delete(updateWrapper);
-        if (count == 0) {
-            throw new ParameterException("未找到卡格式");
+        ScanAnswerCard scanAnswerCard = this.getByExamIdAndNumber(card.getExamId(), card.getNumber());
+//        UpdateWrapper<ScanAnswerCard> updateWrapper = new UpdateWrapper<>();
+//        updateWrapper.lambda().eq(ScanAnswerCard::getExamId, card.getExamId());
+//        updateWrapper.lambda().eq(ScanAnswerCard::getNumber, card.getNumber());
+//        int count = this.baseMapper.delete(updateWrapper);
+//        if (count == 0) {
+//            throw new ParameterException("未找到卡格式");
+//        }
+        if (scanAnswerCard == null) {
+            throw ExceptionResultEnum.ERROR.exception("未找到卡格式");
         }
+        this.removeById(scanAnswerCard.getId());
+
+        // 删除卡格式结构
+        scanAnswerCardQuestionService.deleteByExamIdAndPaperNumberAndCardNumber(scanAnswerCard.getExamId(), scanAnswerCard.getPaperNumber(), scanAnswerCard.getNumber());
     }
 
     @Transactional
@@ -432,6 +440,17 @@ public class ScanAnswerCardServiceImpl extends ServiceImpl<ScanAnswerCardMapper,
         card.setRemark(remark);
         this.save(card);
 
+        // 保存卡格式结构
+        List<ScanAnswerCardQuestion> scanAnswerCardQuestionList = scanAnswerCardQuestionService.listByExamIdAndPaperNumberAndCardNumber(old.getExamId(), old.getPaperNumber(), old.getNumber());
+        if(CollectionUtils.isNotEmpty(scanAnswerCardQuestionList)){
+            for (ScanAnswerCardQuestion question : scanAnswerCardQuestionList) {
+                question.setId(SystemConstant.getDbUuid());
+                question.setCardNumber(card.getNumber());
+                question.setCreateTime(System.currentTimeMillis());
+            }
+            scanAnswerCardQuestionService.saveBatch(scanAnswerCardQuestionList);
+        }
+
         return this.cardGet(examId, card.getNumber());
     }
 
@@ -456,4 +475,12 @@ public class ScanAnswerCardServiceImpl extends ServiceImpl<ScanAnswerCardMapper,
     public String getCardContentByCardId(Long cardId, ExamModelEnum examModel) {
         return this.baseMapper.getCardContentByCardId(cardId, examModel);
     }
+
+    @Override
+    public ScanAnswerCard getByExamIdAndNumber(Long examId, Integer number) {
+        QueryWrapper<ScanAnswerCard> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(ScanAnswerCard::getExamId, examId)
+                .eq(ScanAnswerCard::getNumber, number);
+        return this.getOne(queryWrapper);
+    }
 }