Jelajahi Sumber

3.4.6 20250613 实施过程中bug修复

xiaofei 1 Minggu lalu
induk
melakukan
b852f63a25

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

@@ -129,10 +129,14 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     @Resource
     private MarkQuestionService markQuestionService;
     @Resource
+    private MarkQuestionAnswerService markQuestionAnswerService;
+    @Resource
     private MarkPaperPackageService markPaperPackageService;
     @Resource
     private ScanAnswerCardService scanAnswerCardService;
     @Resource
+    private ScanAnswerCardQuestionService scanAnswerCardQuestionService;
+    @Resource
     private MarkUserQuestionService markUserQuestionService;
     @Resource
     private MarkUserClassService markUserClassService;
@@ -797,7 +801,9 @@ 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());
+                        scanAnswerCardQuestionService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
                         markUserQuestionService.deleteByExamIdAndPaperNumberAndQuestionId(examDetail.getExamId(), examDetailCourse.getPaperNumber(), null);
                         markUserClassService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
                     } else {

+ 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);
                 }

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

@@ -14,10 +14,11 @@ import java.util.List;
  * @since 2024-11-13
  */
 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);
 
     List<ScanAnswerCardQuestion> listByExamIdAndPaperNumberAndCardNumber(Long examId, String paperNumber, Integer number);
+
 }

+ 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);
 }

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

@@ -96,6 +96,8 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
     @Resource
     private ScanAnswerCardService scanAnswerCardService;
     @Resource
+    private ScanAnswerCardQuestionService scanAnswerCardQuestionService;
+    @Resource
     private TeachcloudCommonService teachcloudCommonService;
     @Resource
     private BasicRoleDataPermissionService basicRoleDataPermissionService;
@@ -654,6 +656,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<>();
@@ -702,7 +705,7 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
                     scanAnswerCard.setCoursePaperId(markPaper.getCoursePaperId());
                     scanAnswerCard.setPaperType(markPaper.getPaperType());
                     scanAnswerCard.setCardId(null);
-                    scanAnswerCard.setNumber(scanAnswerCardService.findMaxCardNumberByExamId(examId) + 1);
+                    scanAnswerCard.setNumber(number);
                     scanAnswerCard.setSource(CardSource.WEB);
                     scanAnswerCard.setUri(uploadPath);
                     scanAnswerCard.setMd5(jsonMd5);
@@ -714,6 +717,31 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
                     scanAnswerCard.setPaperCount(paperCount);
                     scanAnswerCardService.save(scanAnswerCard);
 
+                    List<ScanAnswerCardQuestion> scanAnswerCardQuestions = new ArrayList<>();
+                    for (Struct struct : structList) {
+                        if (!struct.getObjective()) {
+                            continue;
+                        }
+                        ScanAnswerCardQuestion scanAnswerCardQuestion = new ScanAnswerCardQuestion();
+                        scanAnswerCardQuestion.setId(SystemConstant.getDbUuid());
+                        scanAnswerCardQuestion.setExamId(examId);
+                        scanAnswerCardQuestion.setPaperNumber(markPaper.getPaperNumber());
+                        scanAnswerCardQuestion.setCoursePaperId(markPaper.getCoursePaperId());
+                        scanAnswerCardQuestion.setSerialNumber(markPaper.getSerialNumber());
+                        scanAnswerCardQuestion.setCardNumber(number);
+                        scanAnswerCardQuestion.setMainNumber(struct.getMainNumber());
+                        scanAnswerCardQuestion.setSubNumber(struct.getSubNumber());
+                        scanAnswerCardQuestion.setOptionCount(struct.getOptionCount());
+                        scanAnswerCardQuestion.setQuestionType(struct.getType());
+                        scanAnswerCardQuestion.setPaperIndex(struct.getPaperIndex());
+                        scanAnswerCardQuestion.setPageIndex(struct.getPageIndex());
+                        scanAnswerCardQuestion.setCreateTime(System.currentTimeMillis());
+                        scanAnswerCardQuestions.add(scanAnswerCardQuestion);
+                    }
+
+                    scanAnswerCardQuestionService.deleteByExamIdAndPaperNumberAndCardNumber(examId, markPaper.getPaperNumber(), number);
+                    scanAnswerCardQuestionService.saveBatch(scanAnswerCardQuestions);
+
                     // 状态改为未提交
                     UpdateWrapper<MarkPaper> updateWrapper = new UpdateWrapper<>();
                     updateWrapper.lambda().set(MarkPaper::getQuestionStatus, false)

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

@@ -93,6 +93,8 @@ public class MarkServiceImpl implements MarkService {
     @Resource
     private MarkQuestionService markQuestionService;
     @Resource
+    private MarkQuestionAnswerService markQuestionAnswerService;
+    @Resource
     private MarkUserPaperService markUserPaperService;
     @Resource
     private MarkUserQuestionService markUserQuestionService;
@@ -118,6 +120,8 @@ public class MarkServiceImpl implements MarkService {
 
     @Resource
     ScanAnswerCardService scanAnswerCardService;
+    @Resource
+    ScanAnswerCardQuestionService scanAnswerCardQuestionService;
 
     @Resource
     TaskService taskService;
@@ -1274,8 +1278,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<>();

+ 33 - 6
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanAnswerCardServiceImpl.java

@@ -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);
+    }
 }