From ddc84c181e86b26d59e293ac08aaf130246cc542 Mon Sep 17 00:00:00 2001
From: Wangmin <wangmin.email@qq.com>
Date: Wed, 26 Jul 2023 15:32:56 +0800
Subject: [PATCH] 答题完成修改开始记录状态、新增检查答题卡完整性

---
 school-paper/src/main/java/com/ruoyi/school/paper/controller/TestPaperController.java      | 11 +++++++++++
 school-paper/src/main/java/com/ruoyi/school/paper/domain/DbTestPaperRecord.java            |  5 +++--
 school-paper/src/main/java/com/ruoyi/school/paper/domain/DbTestPaperRecordDetail.java      |  1 -
 school-paper/src/main/java/com/ruoyi/school/paper/domain/vo/DbTestPaperRecordDetailVo.java |  2 +-
 school-paper/src/main/java/com/ruoyi/school/paper/service/ITestPaperService.java           |  8 ++++++++
 school-paper/src/main/java/com/ruoyi/school/paper/service/impl/TestPaperServiceImpl.java   | 36 +++++++++++++++++++++++++++++++++++-
 school-paper/src/main/resources/mapper/school-paper/DbTestPaperRecordDetailMapper.xml      |  2 +-
 7 files changed, 59 insertions(+), 6 deletions(-)

diff --git a/school-paper/src/main/java/com/ruoyi/school/paper/controller/TestPaperController.java b/school-paper/src/main/java/com/ruoyi/school/paper/controller/TestPaperController.java
index acfacca..75a303d 100644
--- a/school-paper/src/main/java/com/ruoyi/school/paper/controller/TestPaperController.java
+++ b/school-paper/src/main/java/com/ruoyi/school/paper/controller/TestPaperController.java
@@ -70,5 +70,16 @@ public class TestPaperController extends BaseController {
         return toAjax(testPaperService.paperTestEnd(bo));
     }
 
+    /**
+     * [小程序端]检查答题卡完整性
+     *
+     * @param recordId 答题记录ID
+     * @return 结果
+     */
+    @Log(title = "检车答题卡完整性", businessType = BusinessType.OTHER)
+    @GetMapping("/check/{recordId}")
+    public R<Boolean> checkIntegrality(@PathVariable Long recordId) {
+        return R.ok(testPaperService.checkTestPaperIntegrality(recordId));
+    }
 
 }
diff --git a/school-paper/src/main/java/com/ruoyi/school/paper/domain/DbTestPaperRecord.java b/school-paper/src/main/java/com/ruoyi/school/paper/domain/DbTestPaperRecord.java
index 6d7e5db..a46b110 100644
--- a/school-paper/src/main/java/com/ruoyi/school/paper/domain/DbTestPaperRecord.java
+++ b/school-paper/src/main/java/com/ruoyi/school/paper/domain/DbTestPaperRecord.java
@@ -36,9 +36,10 @@ public class DbTestPaperRecord extends BaseEntity {
     /**
      * 状态
      * <ul>
-     *     <ol>0:正在答题</ol>
+     *     <ol>0:答题中</ol>
      *     <ol>1:待批阅</ol>
-     *     <ol>2:已批阅</ol>
+     *     <ol>2:批阅中</ol>
+     *     <ol>3:批阅完成</ol>
      * </ul>
      */
     private Integer status;
diff --git a/school-paper/src/main/java/com/ruoyi/school/paper/domain/DbTestPaperRecordDetail.java b/school-paper/src/main/java/com/ruoyi/school/paper/domain/DbTestPaperRecordDetail.java
index ed14a9f..c40d398 100644
--- a/school-paper/src/main/java/com/ruoyi/school/paper/domain/DbTestPaperRecordDetail.java
+++ b/school-paper/src/main/java/com/ruoyi/school/paper/domain/DbTestPaperRecordDetail.java
@@ -39,7 +39,6 @@ public class DbTestPaperRecordDetail extends BaseEntity {
      * 答案
      */
     private String answer;
-
     /**
      * 图片答案
      */
diff --git a/school-paper/src/main/java/com/ruoyi/school/paper/domain/vo/DbTestPaperRecordDetailVo.java b/school-paper/src/main/java/com/ruoyi/school/paper/domain/vo/DbTestPaperRecordDetailVo.java
index 50c1d6d..f9877c2 100644
--- a/school-paper/src/main/java/com/ruoyi/school/paper/domain/vo/DbTestPaperRecordDetailVo.java
+++ b/school-paper/src/main/java/com/ruoyi/school/paper/domain/vo/DbTestPaperRecordDetailVo.java
@@ -48,7 +48,7 @@ public class DbTestPaperRecordDetailVo {
     /**
      * 图片答案
      */
-    @ExcelProperty(value = "答案")
+    @ExcelProperty(value = "图片答案")
     private String answerPic;
 
     /**
diff --git a/school-paper/src/main/java/com/ruoyi/school/paper/service/ITestPaperService.java b/school-paper/src/main/java/com/ruoyi/school/paper/service/ITestPaperService.java
index 7da220c..c357d83 100644
--- a/school-paper/src/main/java/com/ruoyi/school/paper/service/ITestPaperService.java
+++ b/school-paper/src/main/java/com/ruoyi/school/paper/service/ITestPaperService.java
@@ -42,4 +42,12 @@ public interface ITestPaperService {
      * @return 考试题目
      */
     TableDataInfo<TestQuestionItemVo> nextQuestion(TestPaperAnswerBo request, PageQuery pageQuery);
+
+    /**
+     * 检查答题卡完整性
+     *
+     * @param recordId 答题记录ID
+     * @return 答题完整性
+     */
+    boolean checkTestPaperIntegrality(Long recordId);
 }
diff --git a/school-paper/src/main/java/com/ruoyi/school/paper/service/impl/TestPaperServiceImpl.java b/school-paper/src/main/java/com/ruoyi/school/paper/service/impl/TestPaperServiceImpl.java
index e5b79c9..04c0831 100644
--- a/school-paper/src/main/java/com/ruoyi/school/paper/service/impl/TestPaperServiceImpl.java
+++ b/school-paper/src/main/java/com/ruoyi/school/paper/service/impl/TestPaperServiceImpl.java
@@ -152,7 +152,41 @@ public class TestPaperServiceImpl implements ITestPaperService {
             RedisUtils.deleteKeys(key);
         });
         if (CollUtil.isNotEmpty(insertPaperRecords)) {
-            return paperRecordDetailService.saveBatch(insertPaperRecords);
+            if (!paperRecordDetailService.saveBatch(insertPaperRecords)) {
+                throw new ServiceException("答题记录保存失败");
+            }
+            // 修改考试记录状态为待批阅
+            testPaperRecord.setStatus(1);
+            if (!paperRecordService.updateByBo(BeanUtil.toBean(testPaperService, DbTestPaperRecordBo.class))) {
+                throw new ServiceException("考试记录状态修改失败");
+            }
+            return true;
+        }
+        return true;
+    }
+
+    /**
+     * 检查答题卡完整性
+     *
+     * @param recordId 答题记录ID
+     * @return 答题完整性
+     */
+    @Override
+    public boolean checkTestPaperIntegrality(Long recordId) {
+        // 查询试卷对应所有的题目
+        DbTestPaperRecord testPaperRecord = paperRecordService.getOne(Wrappers.<DbTestPaperRecord>lambdaQuery().eq(DbTestPaperRecord::getId, recordId));
+        Objects.requireNonNull(testPaperRecord, "未检查到合法考试记录");
+        DbQuestionBankTestPaperBo queryCondition = new DbQuestionBankTestPaperBo();
+        queryCondition.setTestPaperId(testPaperRecord.getTestPaperId());
+        List<DbQuestionBankTestPaperVo> questionList = bankTestPaperService.queryList(queryCondition);
+        for (DbQuestionBankTestPaperVo question : questionList) {
+            // 查询Redis中是否有该题的提交记录
+            String key = String.format(TEST_PAPER_ANSWER_KEY_FORMAT, TEST_PAPER_ANSWER_KEY, recordId, question.getId());
+            TestPaperAnswerItemBo cacheObject = RedisUtils.getCacheObject(key);
+            if (cacheObject == null || cacheObject.getId() == null ||
+                (StringUtils.isEmpty(cacheObject.getAnswer()) && StringUtils.isEmpty(cacheObject.getAnswerPic()))) {
+                return false;
+            }
         }
         return true;
     }
diff --git a/school-paper/src/main/resources/mapper/school-paper/DbTestPaperRecordDetailMapper.xml b/school-paper/src/main/resources/mapper/school-paper/DbTestPaperRecordDetailMapper.xml
index 2401efd..5a44dd3 100644
--- a/school-paper/src/main/resources/mapper/school-paper/DbTestPaperRecordDetailMapper.xml
+++ b/school-paper/src/main/resources/mapper/school-paper/DbTestPaperRecordDetailMapper.xml
@@ -13,7 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="good" column="good"/>
         <result property="remark" column="remark"/>
         <result property="status" column="status"/>
-        <result property="createTime" column="cerate_time"/>
+        <result property="createTime" column="create_time"/>
         <result property="createBy" column="create_by"/>
         <result property="updateTime" column="update_time"/>
         <result property="updateBy" column="update_by"/>
--
libgit2 0.26.0