Преглед изворни кода

无答案试卷算分处理

xiatian пре 4 година
родитељ
комит
4adaa0177b

+ 4 - 0
themis-business/src/main/java/com/qmth/themis/business/cache/ExamRecordCacheUtil.java

@@ -431,4 +431,8 @@ public class ExamRecordCacheUtil {
     public static Integer getFaceCompareErrorNum(Long recordId) {
         return Objects.nonNull(redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), "faceCompareErrorNum")) ? (Integer) redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), "faceCompareErrorNum") : 0;
     }
+    
+    public static Integer getHasAnswerFile(Long recordId) {
+        return (Integer) redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.has_answer_file.getCode());
+    }
 }

+ 17 - 7
themis-business/src/main/java/com/qmth/themis/business/dao/TOeExamRecordMapper.java

@@ -1,16 +1,24 @@
 package com.qmth.themis.business.dao;
 
+import java.util.List;
+import java.util.Map;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.qmth.themis.business.bean.backend.*;
+import com.qmth.themis.business.bean.backend.ExaminationMonitorHourWarnCountBean;
+import com.qmth.themis.business.bean.backend.InvigilateListBean;
+import com.qmth.themis.business.bean.backend.InvigilateListHistoryBean;
+import com.qmth.themis.business.bean.backend.InvigilateListPatrolBean;
+import com.qmth.themis.business.bean.backend.InvigilateListPatrolReportBean;
+import com.qmth.themis.business.bean.backend.InvigilateListProgressBean;
+import com.qmth.themis.business.bean.backend.InvigilateListProgressExcelBean;
+import com.qmth.themis.business.bean.backend.InvigilateListVideoBean;
+import com.qmth.themis.business.bean.backend.InvigilateListWarningBean;
 import com.qmth.themis.business.dto.response.TEExamUnFinishDto;
 import com.qmth.themis.business.entity.TOeExamRecord;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
 
 /**
  * @Description: 考试记录 Mapper 接口
@@ -309,4 +317,6 @@ public interface TOeExamRecordMapper extends BaseMapper<TOeExamRecord> {
     public List<Map<String, Object>> getTypeDistribution();
 
     public List<ExaminationMonitorHourWarnCountBean> getWarnTrend(@Param("startTime") Long startTime);
+    
+    public void updateHasAnswerFile(@Param("recordId") Long recordId, @Param("hasAnswerFile") Integer hasAnswerFile);
 }

+ 26 - 4
themis-business/src/main/java/com/qmth/themis/business/entity/TOeExamRecord.java

@@ -1,16 +1,22 @@
 package com.qmth.themis.business.entity;
 
+import java.io.Serializable;
+
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import com.qmth.themis.business.enums.*;
+import com.qmth.themis.business.enums.ExamRecordStatusEnum;
+import com.qmth.themis.business.enums.FinishTypeEnum;
+import com.qmth.themis.business.enums.MonitorStatusSourceEnum;
+import com.qmth.themis.business.enums.ReviewResultEnum;
+import com.qmth.themis.business.enums.ScoreStatusEnum;
+import com.qmth.themis.business.enums.VerifyExceptionEnum;
+import com.qmth.themis.business.enums.WebsocketStatusEnum;
+
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
-import java.io.Serializable;
-import java.util.Date;
-
 /**
  * @Description: 考试记录
  * @Param:
@@ -204,6 +210,12 @@ public class TOeExamRecord implements Serializable {
     @ApiModelProperty(value = "是否在结束时间集中强制收卷,0:不强制,1:强制")
     @TableField(value = "force_finish")
     private Integer forceFinish;
+    
+    @ApiModelProperty(value = "是否有标答,0:无,1:有")
+    @TableField(value = "has_answer_file")
+    private Integer hasAnswerFile;
+    
+    
 
     public ScoreStatusEnum getScoreStatus() {
         return scoreStatus;
@@ -560,4 +572,14 @@ public class TOeExamRecord implements Serializable {
     public void setEndTime(Long endTime) {
         this.endTime = endTime;
     }
+
+	public Integer getHasAnswerFile() {
+		return hasAnswerFile;
+	}
+
+	public void setHasAnswerFile(Integer hasAnswerFile) {
+		this.hasAnswerFile = hasAnswerFile;
+	}
+    
+    
 }

+ 3 - 1
themis-business/src/main/java/com/qmth/themis/business/enums/ExamRecordFieldEnum.java

@@ -95,7 +95,9 @@ public enum ExamRecordFieldEnum {
 
     max_duration_seconds("maxDurationSeconds"),
 
-    force_finish("forceFinish");
+    force_finish("forceFinish"),
+    
+    has_answer_file("hasAnswerFile");
 
     private String code;
 

+ 91 - 70
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamServiceImpl.java

@@ -658,16 +658,21 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
                 answerCache.setDurationSeconds(durationSeconds);
             }
         }
-        // 每次提交,清空得分
-        answerCache.setScore(null);
+        Integer hasAnswerFile=ExamRecordCacheUtil.getHasAnswerFile(recordId);
+        if(hasAnswerFile.intValue()==1) {
+	        // 每次提交,清空得分
+	        answerCache.setScore(null);
+        }
         // 更新考生作答
         redisUtil.set(RedisKeyHelper.examAnswerKey(recordId),
                 RedisKeyHelper.examAnswerHashKey(mainNumber, subNumber, subIndex), answerCache);
-        // 如果是客观题,重置考试记录客观题得分
-        if (answerCache.getObjective()) {
-            ExamRecordCacheUtil.setObjectiveScore(recordId, null, false);
-            // 发消息计算客观分
-            calculateObjectiveScore(recordId, mainNumber, subNumber, subIndex);
+        if(hasAnswerFile.intValue()==1) {
+	        // 如果是客观题,重置考试记录客观题得分
+	        if (answerCache.getObjective()) {
+	            ExamRecordCacheUtil.setObjectiveScore(recordId, null, false);
+	            // 发消息计算客观分
+	            calculateObjectiveScore(recordId, mainNumber, subNumber, subIndex);
+	        }
         }
 
         AnswerSubmitBean ret = new AnswerSubmitBean();
@@ -970,40 +975,45 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
 
         
         //页面结果
-        if (exam.getShowObjectiveScore() != null && exam.getShowObjectiveScore().intValue() == 1) {//实时出分
-            if (InvigilateVerifyEnum.NOW.equals(exam.getInvigilateVerify())) {//实时审核
-                Integer warningCount = ExamRecordCacheUtil.getWarningCount(recordId);
-                Integer breachStatus = Objects.isNull(ExamRecordCacheUtil.getBreachStatus(recordId)) ? 1 : ExamRecordCacheUtil.getBreachStatus(recordId);
-                if (warningCount != null && warningCount.intValue() > 0) {//有预警
-                    if (breachStatus == null) {//无违纪结果
-                        ret.setStatus(FinishExamResultEnum.AUDITING);
-                    } else if (breachStatus.intValue() == 0) {//违纪结果是false
-                        ret.setReviewResult(ReviewResultEnum.PASS);
-                        if (ret.getObjectiveScore() == null) {
-                            ret.setStatus(FinishExamResultEnum.SCORE_CALCULATE);
-                        } else {
-                            ret.setStatus(FinishExamResultEnum.SCORE_VIEW);
-                        }
-                    } else if (breachStatus.intValue() == 1) {//违纪结果是true
-                        ret.setReviewResult(ReviewResultEnum.UN_PASS);
-                        ret.setStatus(FinishExamResultEnum.BREACH);
-                    }
-                } else {
-                    if (Objects.nonNull(exam.getInvigilateVerify()) && exam.getInvigilateVerify().equals(InvigilateVerifyEnum.NOW)) {
-                        ret.setStatus(FinishExamResultEnum.AUDITING);
-                    } else if (Objects.nonNull(exam.getInvigilateVerify()) && exam.getInvigilateVerify().equals(InvigilateVerifyEnum.LATER)) {
-                        ret.setStatus(FinishExamResultEnum.SCORE_VIEW);
-                    }
-                }
-            } else {
-                if (ret.getObjectiveScore() == null) {
-                    ret.setStatus(FinishExamResultEnum.SCORE_CALCULATE);
-                } else {
-                    ret.setStatus(FinishExamResultEnum.SCORE_VIEW);
-                }
-            }
-        } else {//非实时出分
-            ret.setStatus(FinishExamResultEnum.NORMAL);
+        Integer hasAnswerFile=ExamRecordCacheUtil.getHasAnswerFile(recordId);
+        if(hasAnswerFile.intValue()==1) {
+	        if (exam.getShowObjectiveScore() != null && exam.getShowObjectiveScore().intValue() == 1) {//实时出分
+	            if (InvigilateVerifyEnum.NOW.equals(exam.getInvigilateVerify())) {//实时审核
+	                Integer warningCount = ExamRecordCacheUtil.getWarningCount(recordId);
+	                Integer breachStatus = Objects.isNull(ExamRecordCacheUtil.getBreachStatus(recordId)) ? 1 : ExamRecordCacheUtil.getBreachStatus(recordId);
+	                if (warningCount != null && warningCount.intValue() > 0) {//有预警
+	                    if (breachStatus == null) {//无违纪结果
+	                        ret.setStatus(FinishExamResultEnum.AUDITING);
+	                    } else if (breachStatus.intValue() == 0) {//违纪结果是false
+	                        ret.setReviewResult(ReviewResultEnum.PASS);
+	                        if (ret.getObjectiveScore() == null) {
+	                            ret.setStatus(FinishExamResultEnum.SCORE_CALCULATE);
+	                        } else {
+	                            ret.setStatus(FinishExamResultEnum.SCORE_VIEW);
+	                        }
+	                    } else if (breachStatus.intValue() == 1) {//违纪结果是true
+	                        ret.setReviewResult(ReviewResultEnum.UN_PASS);
+	                        ret.setStatus(FinishExamResultEnum.BREACH);
+	                    }
+	                } else {
+	                    if (Objects.nonNull(exam.getInvigilateVerify()) && exam.getInvigilateVerify().equals(InvigilateVerifyEnum.NOW)) {
+	                        ret.setStatus(FinishExamResultEnum.AUDITING);
+	                    } else if (Objects.nonNull(exam.getInvigilateVerify()) && exam.getInvigilateVerify().equals(InvigilateVerifyEnum.LATER)) {
+	                        ret.setStatus(FinishExamResultEnum.SCORE_VIEW);
+	                    }
+	                }
+	            } else {
+	                if (ret.getObjectiveScore() == null) {
+	                    ret.setStatus(FinishExamResultEnum.SCORE_CALCULATE);
+	                } else {
+	                    ret.setStatus(FinishExamResultEnum.SCORE_VIEW);
+	                }
+	            }
+	        } else {//非实时出分
+	            ret.setStatus(FinishExamResultEnum.NORMAL);
+	        }
+        }else {
+        	ret.setStatus(FinishExamResultEnum.NORMAL);
         }
         Long finishTime = System.currentTimeMillis();
         ExamRecordCacheUtil.setFinishTime(recordId, finishTime, false);
@@ -1095,6 +1105,9 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
     public ExamResultBean result(Long recordId) {
         ExamResultBean ret = new ExamResultBean();
         TOeExamRecord er = null;
+        Integer warningCount = null;
+        Integer breachStatus = null;
+        Integer hasAnswerFile = null;
         if (ExamRecordCacheUtil.getId(recordId) == null) {
             er = toeExamRecordService.getById(recordId);
             if (er == null) {
@@ -1104,43 +1117,51 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
             ret.setFinishTime(er.getFinishTime());
             ret.setFinishType(er.getFinishType());
             ret.setObjectiveScore(er.getObjectiveScore());
+            warningCount = er.getWarningCount();
+            breachStatus = er.getBreachStatus();
+            hasAnswerFile = er.getHasAnswerFile();
         } else {
             ret.setDurationSeconds(ExamRecordCacheUtil.getDurationSeconds(recordId));
             ret.setFinishTime(ExamRecordCacheUtil.getFinishTime(recordId));
             ret.setFinishType(ExamRecordCacheUtil.getFinishType(recordId));
             ret.setObjectiveScore(ExamRecordCacheUtil.getObjectiveScore(recordId));
+            warningCount = ExamRecordCacheUtil.getWarningCount(recordId);
+            breachStatus = ExamRecordCacheUtil.getBreachStatus(recordId);
+            hasAnswerFile=ExamRecordCacheUtil.getHasAnswerFile(recordId);
         }
 
         //页面结果
-        ExamCacheBean exam = getExamCacheBeanNative(er.getExamId());
-        if (exam.getShowObjectiveScore() != null && exam.getShowObjectiveScore().intValue() == 1) {//实时出分
-            if (InvigilateVerifyEnum.NOW.equals(exam.getInvigilateVerify())) {//实时审核
-                Integer warningCount = ExamRecordCacheUtil.getWarningCount(recordId);
-                Integer breachStatus = Objects.isNull(ExamRecordCacheUtil.getBreachStatus(recordId)) ? 1 : ExamRecordCacheUtil.getBreachStatus(recordId);
-                if (warningCount != null && warningCount.intValue() > 0) {//有预警
-                    if (breachStatus == null) {//无违纪结果
-                        ret.setStatus(FinishExamResultEnum.AUDITING);
-                    } else if (breachStatus.intValue() == 0) {//违纪结果是false
-                        ret.setReviewResult(ReviewResultEnum.PASS);
-                        if (ret.getObjectiveScore() == null) {
-                            ret.setStatus(FinishExamResultEnum.SCORE_CALCULATE);
-                        } else {
-                            ret.setStatus(FinishExamResultEnum.SCORE_VIEW);
-                        }
-                    } else if (breachStatus.intValue() == 1) {//违纪结果是true
-                        ret.setReviewResult(ReviewResultEnum.UN_PASS);
-                        ret.setStatus(FinishExamResultEnum.BREACH);
-                    }
-                }
-            } else {
-                if (ret.getObjectiveScore() == null) {
-                    ret.setStatus(FinishExamResultEnum.SCORE_CALCULATE);
-                } else {
-                    ret.setStatus(FinishExamResultEnum.SCORE_VIEW);
-                }
-            }
-        } else {//非实时出分
-            ret.setStatus(FinishExamResultEnum.NORMAL);
+        if(hasAnswerFile.intValue()==1) {
+	        ExamCacheBean exam = getExamCacheBeanNative(er.getExamId());
+	        if (exam.getShowObjectiveScore() != null && exam.getShowObjectiveScore().intValue() == 1) {//实时出分
+	            if (InvigilateVerifyEnum.NOW.equals(exam.getInvigilateVerify())) {//实时审核
+	                if (warningCount != null && warningCount.intValue() > 0) {//有预警
+	                    if (breachStatus == null) {//无违纪结果
+	                        ret.setStatus(FinishExamResultEnum.AUDITING);
+	                    } else if (breachStatus.intValue() == 0) {//违纪结果是false
+	                        ret.setReviewResult(ReviewResultEnum.PASS);
+	                        if (ret.getObjectiveScore() == null) {
+	                            ret.setStatus(FinishExamResultEnum.SCORE_CALCULATE);
+	                        } else {
+	                            ret.setStatus(FinishExamResultEnum.SCORE_VIEW);
+	                        }
+	                    } else if (breachStatus.intValue() == 1) {//违纪结果是true
+	                        ret.setReviewResult(ReviewResultEnum.UN_PASS);
+	                        ret.setStatus(FinishExamResultEnum.BREACH);
+	                    }
+	                }
+	            } else {
+	                if (ret.getObjectiveScore() == null) {
+	                    ret.setStatus(FinishExamResultEnum.SCORE_CALCULATE);
+	                } else {
+	                    ret.setStatus(FinishExamResultEnum.SCORE_VIEW);
+	                }
+	            }
+	        } else {//非实时出分
+	            ret.setStatus(FinishExamResultEnum.NORMAL);
+	        }
+        }else {
+        	ret.setStatus(FinishExamResultEnum.NORMAL);
         }
         return ret;
     }

+ 58 - 15
themis-business/src/main/java/com/qmth/themis/business/service/impl/TOeExamRecordServiceImpl.java

@@ -1,13 +1,43 @@
 package com.qmth.themis.business.service.impl;
 
+import java.io.File;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.UUID;
+
+import javax.annotation.Resource;
+
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.qmth.themis.business.bean.backend.*;
+import com.qmth.themis.business.bean.backend.InvigilateListBean;
+import com.qmth.themis.business.bean.backend.InvigilateListHistoryBean;
+import com.qmth.themis.business.bean.backend.InvigilateListPatrolBean;
+import com.qmth.themis.business.bean.backend.InvigilateListProgressBean;
+import com.qmth.themis.business.bean.backend.InvigilateListProgressExcelBean;
+import com.qmth.themis.business.bean.backend.InvigilateListVideoBean;
+import com.qmth.themis.business.bean.backend.InvigilateListWarningBean;
 import com.qmth.themis.business.cache.ExamRecordCacheUtil;
 import com.qmth.themis.business.cache.RedisKeyHelper;
-import com.qmth.themis.business.cache.bean.*;
+import com.qmth.themis.business.cache.bean.ExamActivityCacheBean;
+import com.qmth.themis.business.cache.bean.ExamCacheBean;
+import com.qmth.themis.business.cache.bean.ExamPaperCacheBean;
+import com.qmth.themis.business.cache.bean.ExamStudentAnswerCacheBean;
+import com.qmth.themis.business.cache.bean.ExamStudentPaperStructCacheBean;
+import com.qmth.themis.business.cache.bean.ObjectiveAnswerCacheBean;
 import com.qmth.themis.business.config.SystemConfig;
 import com.qmth.themis.business.constant.SpringContextHolder;
 import com.qmth.themis.business.constant.SystemConstant;
@@ -16,24 +46,25 @@ import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.dto.response.TEExamUnFinishDto;
 import com.qmth.themis.business.entity.TOeExamAnswer;
 import com.qmth.themis.business.entity.TOeExamRecord;
-import com.qmth.themis.business.enums.*;
-import com.qmth.themis.business.service.*;
+import com.qmth.themis.business.enums.ExamRecordFieldEnum;
+import com.qmth.themis.business.enums.ExamRecordStatusEnum;
+import com.qmth.themis.business.enums.ExamTypeEnum;
+import com.qmth.themis.business.enums.LivenessTypeEnum;
+import com.qmth.themis.business.enums.MqTagEnum;
+import com.qmth.themis.business.enums.MqTopicEnum;
+import com.qmth.themis.business.enums.ObjectiveScorePolicyEnum;
+import com.qmth.themis.business.enums.VerifyExceptionEnum;
+import com.qmth.themis.business.service.MqDtoService;
+import com.qmth.themis.business.service.TEExamActivityService;
+import com.qmth.themis.business.service.TEExamPaperService;
+import com.qmth.themis.business.service.TEExamService;
+import com.qmth.themis.business.service.TOeExamAnswerService;
+import com.qmth.themis.business.service.TOeExamRecordService;
 import com.qmth.themis.business.util.OssUtil;
 import com.qmth.themis.business.util.RedisUtil;
 import com.qmth.themis.common.contanst.Constants;
 import com.qmth.themis.common.util.FileUtil;
 import com.qmth.themis.common.util.SimpleBeanUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.annotation.Resource;
-import java.io.File;
-import java.math.BigDecimal;
-import java.text.SimpleDateFormat;
-import java.util.*;
 
 /**
  * @Description: 考试记录 服务实现类
@@ -142,6 +173,12 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
         er.setMinDurationSeconds(exam.getMinDurationSeconds());
         er.setMaxDurationSeconds(ac.getMaxDurationSeconds());
         er.setForceFinish(exam.getForceFinish());
+        ExamPaperCacheBean ep = examPaperService.getExamPaperCacheBean(paperId);
+        if (StringUtils.isBlank(ep.getAnswerPath())) {
+        	er.setHasAnswerFile(0);
+        }else {
+        	er.setHasAnswerFile(1);
+        }
         Map<String, Object> map = SimpleBeanUtil.objectToMap(er);
         redisUtil.setForHash(RedisKeyHelper.examRecordCacheKey(er.getId()), map);
         dataInitMq(map);
@@ -470,6 +507,7 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
         tr.setMinDurationSeconds((Integer) param.get("minDurationSeconds"));
         tr.setMaxDurationSeconds((Integer) param.get("maxDurationSeconds"));
         tr.setForceFinish((Integer) param.get("forceFinish"));
+        tr.setHasAnswerFile((Integer) param.get("hasAnswerFile"));
         saveOrUpdate(tr);
     }
 
@@ -667,6 +705,11 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
     public void calculateScore(Long recordId) {
 
         TOeExamRecord rec = this.getById(recordId);
+        
+        ExamPaperCacheBean ep = examPaperService.getExamPaperCacheBean(rec.getPaperId());
+        if (rec.getHasAnswerFile().intValue()==0 && StringUtils.isNotBlank(ep.getAnswerPath())) {
+        	tOeExamRecordMapper.updateHasAnswerFile(recordId, 1);
+        }
 
         Map<String, ObjectiveAnswerCacheBean> map = examPaperService.getObjectiveAnswerCacheBean(rec.getPaperId());
         if (map == null || map.size() == 0) {

+ 1 - 0
themis-business/src/main/resources/db/init.sql

@@ -1411,6 +1411,7 @@ CREATE TABLE `t_oe_exam_record` (
   `min_duration_seconds` int DEFAULT NULL COMMENT '最短考试时长,相当于考试冻结时间',
   `max_duration_seconds` int DEFAULT NULL COMMENT '最大考试时长',
   `force_finish` tinyint DEFAULT NULL COMMENT '是否在结束时间集中强制收卷,0:不强制,1:强制',
+  `has_answer_file` tinyint DEFAULT NULL COMMENT '是否有标答,0:否,1:是',
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='考试记录';
 

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

@@ -713,4 +713,8 @@
 		GROUP BY
 			FROM_UNIXTIME(w.create_time / 1000,'%H')
 	</select>
+	
+	<update id="updateHasAnswerFile">
+		update t_oe_exam_record t set t.has_answer_file=#{hasAnswerFile} where t.id=#{recordId}
+	</update>
 </mapper>