Browse Source

查询结果

xiatian 4 years ago
parent
commit
6ce965fd98

+ 4 - 4
themis-business/src/main/java/com/qmth/themis/business/service/TEExamService.java

@@ -115,14 +115,14 @@ public interface TEExamService extends IService<TEExam> {
 	public ExamFileUploadBean fileUpload(Long studentId, Long recordId, MultipartFile file, String suffix, String md5);
 
 	/**断点恢复
-	 * @param id
+	 * @param studentId
 	 * @param recordId
 	 * @return
 	 */
 	public ExamResumeBean resume(Long studentId, Long recordId);
 
 	/**结束考试
-	 * @param id
+	 * @param studentId
 	 * @param recordId
 	 * @param type
 	 * @param durationSeconds
@@ -133,10 +133,10 @@ public interface TEExamService extends IService<TEExam> {
 	ExamCacheBean getExamCacheBean(Long examId);
 
 	/**查询交卷结果
-	 * @param id
 	 * @param recordId
 	 * @return
 	 */
-	public ExamResultBean result(Long studentId, Long recordId);
+	public ExamResultBean result(Long recordId);
+
 
 }

+ 10 - 0
themis-business/src/main/java/com/qmth/themis/business/service/impl/CommonServiceImpl.java

@@ -6,8 +6,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
+import com.qmth.themis.business.cache.ExamRecordCacheUtil;
 import com.qmth.themis.business.cache.RedisKeyHelper;
 import com.qmth.themis.business.constant.SystemConstant;
+import com.qmth.themis.business.enums.ExamRecordStatusEnum;
 import com.qmth.themis.business.service.CommonService;
 import com.qmth.themis.business.service.TOeExamRecordService;
 import com.qmth.themis.business.util.RedisUtil;
@@ -28,6 +30,14 @@ public class CommonServiceImpl implements CommonService {
 
 	@Override
 	public void persisted(Long recordId) {
+    	ExamRecordStatusEnum status=ExamRecordCacheUtil.getStatus(recordId);
+    	if(!ExamRecordStatusEnum.FINISHED.equals(status)) {
+    		return;
+    	}
+    	Double score=ExamRecordCacheUtil.getObjectiveScore(recordId);
+    	if(score==null) {
+    		return;
+    	}
 		String lockKey = SystemConstant.REDIS_LOCK_EXAM_RECORD_PERSISTED_PREFIX + recordId;
 		Boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_CACHE_TIME_OUT);
 		if (!lock) {

+ 20 - 17
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamServiceImpl.java

@@ -45,6 +45,7 @@ import com.qmth.themis.business.dao.TEExamMapper;
 import com.qmth.themis.business.dto.response.TEExamActivityDto;
 import com.qmth.themis.business.dto.response.TEExamDto;
 import com.qmth.themis.business.entity.TEExam;
+import com.qmth.themis.business.entity.TOeExamRecord;
 import com.qmth.themis.business.enums.ExamRecordStatusEnum;
 import com.qmth.themis.business.enums.FinishTypeEnum;
 import com.qmth.themis.business.service.TEExamActivityService;
@@ -84,6 +85,9 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
 
     @Resource
     TOeExamRecordService toeExamRecordService;
+    
+    @Resource
+    TEExamStudentService examStudentService;
 
     @Resource
     RedisUtil redisUtil;
@@ -595,26 +599,25 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
      *查询交卷结果
      */
     @Override
-    public ExamResultBean result(Long studentId, Long recordId) {
-        // 校验当前登录用户和参数一致性
+    public ExamResultBean result(Long recordId) {
+    	ExamResultBean ret = new ExamResultBean();
+    	TOeExamRecord er=null;
         if (ExamRecordCacheUtil.getId(recordId) == null) {
-            throw new BusinessException("未找到考试记录");
-        }
-        Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
-        ExamStudentCacheBean es = (ExamStudentCacheBean) redisUtil
-                .get(RedisKeyHelper.examStudentCacheKey(examStudentId));
-        if (es == null) {
-            throw new BusinessException("未找到考生");
-        }
-        if (studentId.equals(es.getStudentId())) {
-            throw new BusinessException("考试记录的学生Id和当前登录用户不一致");
+        	er=toeExamRecordService.getById(recordId);
+        	if(er==null) {
+        		throw new BusinessException("未找到考试记录");
+        	}
+        	ret.setDurationSeconds(er.getDurationSeconds());
+        	ret.setFinishTime(er.getFinishTime().getTime());
+        	ret.setFinishType(er.getFinishType());
+        	ret.setObjectiveScore(er.getObjectiveScore());
+        }else {
+        	ret.setDurationSeconds(ExamRecordCacheUtil.getDurationSeconds(recordId));
+        	ret.setFinishTime(ExamRecordCacheUtil.getFinishTime(recordId));
+        	ret.setFinishType(ExamRecordCacheUtil.getFinishType(recordId));
+        	ret.setObjectiveScore(ExamRecordCacheUtil.getObjectiveScore(recordId));
         }
 
-        ExamResultBean ret = new ExamResultBean();
-        ret.setDurationSeconds(ExamRecordCacheUtil.getDurationSeconds(recordId));
-        ret.setFinishTime(ExamRecordCacheUtil.getFinishTime(recordId));
-        ret.setFinishType(ExamRecordCacheUtil.getFinishType(recordId));
-        ret.setObjectiveScore(ExamRecordCacheUtil.getObjectiveScore(recordId));
         //TODO
         ret.setReviewResult("");
         return ret;

+ 1 - 11
themis-exam/src/main/java/com/qmth/themis/exam/api/TEExamController.java

@@ -255,17 +255,7 @@ public class TEExamController {
     @RequestMapping(value = "/result", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "试卷信息")})
     public Result result(@ApiParam(value = "考试记录ID", required = true) @RequestParam Long recordId) {
-        TEStudent teStudent = (TEStudent) ServletUtil.getRequestStudentAccount();
-        String lockKey = SystemConstant.REDIS_LOCK_STUDENT_PREFIX + teStudent.getId();
-        Boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_CACHE_TIME_OUT);
-        if (!lock) {
-            throw new BusinessException(ExceptionResultEnum.REQUEST_AWAIT);
-        }
-        try {
-            return ResultUtil.ok(teExamService.result(teStudent.getId(), recordId));
-        } finally {
-            redisUtil.releaseLock(lockKey);
-        }
+        return ResultUtil.ok(teExamService.result(recordId));
     }
     
     /**检查条件并发送持久化消息