Browse Source

修改作答记录

wangliang 2 years ago
parent
commit
097a50ba03

+ 20 - 11
themis-admin/src/main/java/com/qmth/themis/admin/api/TEExamController.java

@@ -18,6 +18,7 @@ import com.qmth.themis.business.service.*;
 import com.qmth.themis.business.util.*;
 import com.qmth.themis.common.enums.ExceptionResultEnum;
 import com.qmth.themis.common.exception.BusinessException;
+import com.qmth.themis.common.util.GsonUtil;
 import com.qmth.themis.common.util.Result;
 import com.qmth.themis.common.util.ResultUtil;
 import io.swagger.annotations.*;
@@ -96,9 +97,6 @@ public class TEExamController {
     @Resource
     TEExamStudentService teExamStudentService;
 
-    @Resource
-    CommonService commonService;
-
     @ApiOperation(value = "考试批次修改/新增接口")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     @Transactional
@@ -738,12 +736,12 @@ public class TEExamController {
                                   @ApiParam(value = "考试场次id") @RequestParam(required = false) Long examActivityId,
                                   @ApiParam(value = "考生id") @RequestParam(required = false) Long examStudentId,
                                   @ApiParam(value = "是否批量处理") @RequestParam(required = false) Boolean batch,
-                                  @ApiParam(value = "是否只处理答案", required = true) @RequestParam Boolean answer) {
+                                  @ApiParam(value = "补救措施", required = true) @RequestParam RepariEnum repariEnum,
+                                  @ApiParam(value = "考试状态") @RequestParam(required = false) ExamRecordStatusEnum status) {
         List<TOeExamRecord> tOeExamRecordList = null;
         if (Objects.nonNull(batch) && batch) {
             Optional.ofNullable(examId).orElseThrow(() -> new BusinessException("考试批次id不能为空"));
-            Optional.ofNullable(examActivityId).orElseThrow(() -> new BusinessException("考试场次id不能为空"));
-            tOeExamRecordList = tOeExamRecordService.persistedAnswerBatch(examId, examActivityId);
+            tOeExamRecordList = tOeExamRecordService.persistedAnswerBatch(examId, examActivityId, status);
         } else {
             QueryWrapper<TOeExamRecord> tOeExamRecordQueryWrapper = new QueryWrapper<>();
             if (Objects.nonNull(examRecordId)) {
@@ -763,11 +761,22 @@ public class TEExamController {
         if (!CollectionUtils.isEmpty(tOeExamRecordList)) {
             for (TOeExamRecord t : tOeExamRecordList) {
                 try {
-                    if (Objects.nonNull(answer) && answer) {
-                        tOeExamRecordService.saveDataByCachePersistedAnswer(t.getId());
-                    } else {
-                        ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(t.getExamStudentId());
-                        teExamService.finish(examStudentCacheBean.getStudentId(), t.getId(), FinishTypeEnum.AUTO.name(), t.getDurationSeconds());
+                    switch (repariEnum) {
+                        case ANSWER:
+                        case FINISHED_ANSWER:
+                            tOeExamRecordService.saveDataByCachePersistedAnswer(t.getId());
+                            break;
+                        case FINISHED:
+                            ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(t.getExamStudentId());
+                            teExamService.finish(examStudentCacheBean.getStudentId(), t.getId(), FinishTypeEnum.AUTO.name(), t.getDurationSeconds());
+                            break;
+                        case EXAM_STUDENT:
+                            ExamStudentCacheBean examStudentCache = teExamStudentService.getExamStudentCacheBean(t.getExamStudentId());
+                            TEExamStudent examStudent = GsonUtil.fromJson(GsonUtil.toJson(examStudentCache), TEExamStudent.class);
+                            teExamStudentService.saveOrUpdate(examStudent);
+                            break;
+                        default:
+                            break;
                     }
                 } catch (Exception e) {
                     log.error(SystemConstant.LOG_ERROR, e);

+ 2 - 1
themis-business/src/main/java/com/qmth/themis/business/dao/TOeExamRecordMapper.java

@@ -546,7 +546,8 @@ public interface TOeExamRecordMapper extends BaseMapper<TOeExamRecord> {
      *
      * @param examId
      * @param examActivityId
+     * @param status
      * @return
      */
-    public List<TOeExamRecord> persistedAnswerBatch(@Param("examId") Long examId, @Param("examActivityId") Long examActivityId);
+    public List<TOeExamRecord> persistedAnswerBatch(@Param("examId") Long examId, @Param("examActivityId") Long examActivityId, @Param("status") String status);
 }

+ 36 - 0
themis-business/src/main/java/com/qmth/themis/business/enums/RepariEnum.java

@@ -0,0 +1,36 @@
+package com.qmth.themis.business.enums;
+
+/**
+ * @Description: 补救 enum
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2020/7/25
+ */
+public enum RepariEnum {
+
+    ANSWER("answer", "补救未持久化答案"),
+
+    FINISHED("finished", "补救交卷"),
+
+    FINISHED_ANSWER("finished_answer", "补救交卷后没有答案"),
+
+    EXAM_STUDENT("examStudent", "补救考生次数");
+
+    private String code;
+
+    private String title;
+
+    private RepariEnum(String code, String title) {
+        this.code = code;
+        this.title = title;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+}

+ 2 - 1
themis-business/src/main/java/com/qmth/themis/business/service/TOeExamRecordService.java

@@ -537,9 +537,10 @@ public interface TOeExamRecordService extends IService<TOeExamRecord> {
      *
      * @param examId
      * @param examActivityId
+     * @param status
      * @return
      */
-    public List<TOeExamRecord> persistedAnswerBatch(Long examId, Long examActivityId);
+    public List<TOeExamRecord> persistedAnswerBatch(Long examId, Long examActivityId, ExamRecordStatusEnum status);
 
     /**
      * 考试记录数据持久化

+ 20 - 14
themis-business/src/main/java/com/qmth/themis/business/service/impl/TOeExamRecordServiceImpl.java

@@ -37,6 +37,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.io.File;
@@ -428,12 +429,14 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
             //保存作答
             Map<String, ExamStudentAnswerCacheBean> answerMap = redisUtil
                     .getHashEntries(RedisKeyHelper.examAnswerKey(recordId));
-            for (ExamStudentAnswerCacheBean answerCache : answerMap.values()) {
-                TOeExamAnswer answer = new TOeExamAnswer();
-                BeanUtils.copyProperties(answerCache, answer);
-                answer.setId(uidUtil.getId());
-                answer.setExamRecordId(recordId);
-                examAnswerService.saveOrUpdate(answer);
+            if (!CollectionUtils.isEmpty(answerMap)) {
+                for (ExamStudentAnswerCacheBean answerCache : answerMap.values()) {
+                    TOeExamAnswer answer = new TOeExamAnswer();
+                    BeanUtils.copyProperties(answerCache, answer);
+                    answer.setId(uidUtil.getId());
+                    answer.setExamRecordId(recordId);
+                    examAnswerService.saveOrUpdate(answer);
+                }
             }
             //            //更新考生信息
             //            ExamStudentCacheBean examStudentCache = examStudentService.getExamStudentCacheBean(er.getExamStudentId());
@@ -1489,11 +1492,12 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
      *
      * @param examId
      * @param examActivityId
+     * @param status
      * @return
      */
     @Override
-    public List<TOeExamRecord> persistedAnswerBatch(Long examId, Long examActivityId) {
-        return tOeExamRecordMapper.persistedAnswerBatch(examId, examActivityId);
+    public List<TOeExamRecord> persistedAnswerBatch(Long examId, Long examActivityId, ExamRecordStatusEnum status) {
+        return tOeExamRecordMapper.persistedAnswerBatch(examId, examActivityId, Objects.nonNull(status) ? status.name() : null);
     }
 
     /**
@@ -1507,12 +1511,14 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
         //保存作答
         Map<String, ExamStudentAnswerCacheBean> answerMap = redisUtil
                 .getHashEntries(RedisKeyHelper.examAnswerKey(recordId));
-        for (ExamStudentAnswerCacheBean answerCache : answerMap.values()) {
-            TOeExamAnswer answer = new TOeExamAnswer();
-            BeanUtils.copyProperties(answerCache, answer);
-            answer.setId(uidUtil.getId());
-            answer.setExamRecordId(recordId);
-            examAnswerService.saveOrUpdate(answer);
+        if (!CollectionUtils.isEmpty(answerMap)) {
+            for (ExamStudentAnswerCacheBean answerCache : answerMap.values()) {
+                TOeExamAnswer answer = new TOeExamAnswer();
+                BeanUtils.copyProperties(answerCache, answer);
+                answer.setId(uidUtil.getId());
+                answer.setExamRecordId(recordId);
+                examAnswerService.saveOrUpdate(answer);
+            }
         }
     }
 

+ 3 - 0
themis-business/src/main/resources/mapper/TOeExamRecordMapper.xml

@@ -1824,6 +1824,9 @@
                 <if test="examActivityId != null and examActivityId != ''">
                     and toer.exam_activity_id = #{examActivityId}
                 </if>
+                <if test="status != null and status != ''">
+                    and toer.status = #{status}
+                </if>
               and toer.objective_score > 0
               and toea.id is null
             </where>