Ver Fonte

结束监考改动

xiatian há 4 anos atrás
pai
commit
f07b0631c3

+ 5 - 0
themis-backend/src/main/java/com/qmth/themis/backend/api/TEExamController.java

@@ -109,6 +109,11 @@ public class TEExamController {
                 teExamDto.setCreateId(tbUser.getId());
             }
             teExam = new TEExam(teExamDto);
+            if(oldTeExam!=null) {
+            	teExam.setMonitorStatus(oldTeExam.getMonitorStatus());
+            }else {
+            	teExam.setMonitorStatus(InvigilateMonitorStatusEnum.NOT_START);
+            }
             teExamService.saveOrUpdate(teExam);
             teExamService.updateExamCacheBean(teExam.getId());
             if (Objects.nonNull(oldTeExam) && !Objects.equals(oldTeExam.getMode().name(), teExamDto.getMode().name())) {//如果模式改变,则删除之前模式的全部quartz

+ 75 - 13
themis-backend/src/main/java/com/qmth/themis/backend/api/TIeInvigilateController.java

@@ -1,10 +1,39 @@
 package com.qmth.themis.backend.api;
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
+
+import javax.annotation.Resource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.themis.business.annotation.ApiJsonObject;
 import com.qmth.themis.business.annotation.ApiJsonProperty;
-import com.qmth.themis.business.bean.backend.*;
+import com.qmth.themis.business.bean.backend.InvigilateListBean;
+import com.qmth.themis.business.bean.backend.InvigilateListDetailBean;
+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.cache.ExamRecordCacheUtil;
 import com.qmth.themis.business.cache.RedisKeyHelper;
 import com.qmth.themis.business.cache.bean.ExamActivityCacheBean;
@@ -16,10 +45,40 @@ import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.AuthDto;
 import com.qmth.themis.business.dto.ExamPropCountDto;
 import com.qmth.themis.business.dto.MqDto;
-import com.qmth.themis.business.entity.*;
-import com.qmth.themis.business.enums.*;
+import com.qmth.themis.business.entity.TBExamInvigilateUser;
+import com.qmth.themis.business.entity.TBSession;
+import com.qmth.themis.business.entity.TBUser;
+import com.qmth.themis.business.entity.TEExamBreachLog;
+import com.qmth.themis.business.entity.TEExamReexam;
+import com.qmth.themis.business.entity.TEExamStudent;
+import com.qmth.themis.business.entity.TEExamStudentLog;
+import com.qmth.themis.business.entity.TEStudent;
+import com.qmth.themis.business.entity.TIeInvigilateExceptionInfo;
+import com.qmth.themis.business.entity.TIeInvigilateWarnInfo;
+import com.qmth.themis.business.entity.TOeExamRecord;
+import com.qmth.themis.business.enums.BreachCancelTypeEnum;
+import com.qmth.themis.business.enums.BreachTypeEnum;
+import com.qmth.themis.business.enums.ExamRecordStatusEnum;
+import com.qmth.themis.business.enums.FinishTypeEnum;
+import com.qmth.themis.business.enums.InvigilateMonitorStatusEnum;
+import com.qmth.themis.business.enums.MqTagEnum;
+import com.qmth.themis.business.enums.MqTopicEnum;
+import com.qmth.themis.business.enums.RoleEnum;
+import com.qmth.themis.business.enums.VerifyExceptionEnum;
+import com.qmth.themis.business.enums.WarningLevelEnum;
 import com.qmth.themis.business.excel.ExportUtils;
-import com.qmth.themis.business.service.*;
+import com.qmth.themis.business.service.MqDtoService;
+import com.qmth.themis.business.service.TBExamInvigilateUserService;
+import com.qmth.themis.business.service.TEExamActivityService;
+import com.qmth.themis.business.service.TEExamBreachLogService;
+import com.qmth.themis.business.service.TEExamReexamService;
+import com.qmth.themis.business.service.TEExamService;
+import com.qmth.themis.business.service.TEExamStudentLogService;
+import com.qmth.themis.business.service.TEExamStudentService;
+import com.qmth.themis.business.service.TEStudentService;
+import com.qmth.themis.business.service.TIeInvigilateExceptionInfoService;
+import com.qmth.themis.business.service.TIeInvigilateWarnInfoService;
+import com.qmth.themis.business.service.TOeExamRecordService;
 import com.qmth.themis.business.util.JacksonUtil;
 import com.qmth.themis.business.util.RedisUtil;
 import com.qmth.themis.business.util.ServletUtil;
@@ -27,16 +86,12 @@ import com.qmth.themis.common.enums.ExceptionResultEnum;
 import com.qmth.themis.common.exception.BusinessException;
 import com.qmth.themis.common.util.Result;
 import com.qmth.themis.common.util.ResultUtil;
-import io.swagger.annotations.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.web.bind.annotation.*;
 
-import javax.annotation.Resource;
-import java.io.File;
-import java.util.*;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.stream.Collectors;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
 
 /**
  * @Description: 监考信息 前端控制器
@@ -468,6 +523,10 @@ public class TIeInvigilateController {
             throw new BusinessException(ExceptionResultEnum.EXAM_ID_IS_NULL);
         }
         ExamCacheBean examCacheBean = teExamService.getExamCacheBean(examId);
+        long now =new Date().getTime();
+        if(now<examCacheBean.getEndTime()*1000){
+        	throw new BusinessException("未到考试批次结束时间");
+        }
         TBUser tbUser = (TBUser) ServletUtil.getRequestAccount();
         TBSession tbSession = (TBSession) ServletUtil.getRequestSession();
         if (Objects.isNull(tbSession)) {
@@ -559,6 +618,9 @@ public class TIeInvigilateController {
 //                }
             });
         }
+        
+        teExamService.updateInvigilateMonitorStatus(InvigilateMonitorStatusEnum.FINISHED, examId);
+        teExamService.deleteExamCacheBean(examId);
         examPropCountDto.setPrepareCount(prepareCount.get());
         examPropCountDto.setExamCount(examCount.get());
         return ResultUtil.ok(examPropCountDto);

+ 14 - 1
themis-business/src/main/java/com/qmth/themis/business/cache/bean/ExamCacheBean.java

@@ -1,13 +1,13 @@
 package com.qmth.themis.business.cache.bean;
 
 import java.io.Serializable;
-import java.util.Date;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.themis.business.enums.EntryAuthenticationPolicyEnum;
 import com.qmth.themis.business.enums.ExamModeEnum;
 import com.qmth.themis.business.enums.InProcessLivenessJudgePolicyEnum;
+import com.qmth.themis.business.enums.InvigilateMonitorStatusEnum;
 import com.qmth.themis.business.enums.InvigilateVerifyEnum;
 import com.qmth.themis.business.enums.ObjectiveScorePolicyEnum;
 import com.qmth.themis.business.enums.RecordSelectStrategyEnum;
@@ -163,6 +163,9 @@ public class ExamCacheBean implements Serializable {
 
     //监考人工审核,now:实时审核,later:事后审核
     private InvigilateVerifyEnum invigilateVerify;
+    
+    //监考状态,NOT_START:未开始,START:监考中,FINISHED:已结束
+    private InvigilateMonitorStatusEnum monitorStatus;
 
     public InvigilateVerifyEnum getInvigilateVerify() {
         return invigilateVerify;
@@ -543,4 +546,14 @@ public class ExamCacheBean implements Serializable {
     public void setEndTime(Long endTime) {
         this.endTime = endTime;
     }
+
+	public InvigilateMonitorStatusEnum getMonitorStatus() {
+		return monitorStatus;
+	}
+
+	public void setMonitorStatus(InvigilateMonitorStatusEnum monitorStatus) {
+		this.monitorStatus = monitorStatus;
+	}
+    
+    
 }

+ 4 - 0
themis-business/src/main/java/com/qmth/themis/business/dao/TEExamMapper.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.themis.business.dto.response.TEExamDto;
 import com.qmth.themis.business.dto.response.TEExamQueryDto;
 import com.qmth.themis.business.entity.TEExam;
+import com.qmth.themis.business.enums.InvigilateMonitorStatusEnum;
+
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -62,4 +64,6 @@ public interface TEExamMapper extends BaseMapper<TEExam> {
      * @return
      */
     public List<TEExam> examPrivilegeQuery(@Param("userId") Long userId);
+
+	public void updateInvigilateMonitorStatus(@Param("monitorStatus") InvigilateMonitorStatusEnum monitorStatus,@Param("examId") Long examId);
 }

+ 11 - 4
themis-business/src/main/java/com/qmth/themis/business/entity/TEExam.java

@@ -1,18 +1,25 @@
 package com.qmth.themis.business.entity;
 
+import java.util.Objects;
+
 import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.themis.business.base.BaseEntity;
 import com.qmth.themis.business.dto.request.TEExamDto;
-import com.qmth.themis.business.enums.*;
+import com.qmth.themis.business.enums.EntryAuthenticationPolicyEnum;
+import com.qmth.themis.business.enums.ExamModeEnum;
+import com.qmth.themis.business.enums.InProcessLivenessJudgePolicyEnum;
+import com.qmth.themis.business.enums.InvigilateMonitorStatusEnum;
+import com.qmth.themis.business.enums.InvigilateVerifyEnum;
+import com.qmth.themis.business.enums.ObjectiveScorePolicyEnum;
+import com.qmth.themis.business.enums.RecordSelectStrategyEnum;
+import com.qmth.themis.business.enums.ScoreStatusEnum;
+
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
-import java.util.Date;
-import java.util.Objects;
-
 /**
  * @Description: 考试批次
  * @Param:

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

@@ -8,6 +8,7 @@ import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.dto.response.TEExamDto;
 import com.qmth.themis.business.dto.response.TEExamQueryDto;
 import com.qmth.themis.business.entity.TEExam;
+import com.qmth.themis.business.enums.InvigilateMonitorStatusEnum;
 import com.qmth.themis.business.enums.SystemOperationEnum;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -193,6 +194,8 @@ public interface TEExamService extends IService<TEExam> {
 	 * @param taskId
 	 */
 	void calculateScore(Long examId, Long taskId);
+
+	void updateInvigilateMonitorStatus(InvigilateMonitorStatusEnum monitorStatus, Long examId);
 	
 	
 }

+ 7 - 0
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamServiceImpl.java

@@ -80,6 +80,7 @@ import com.qmth.themis.business.enums.ExamRecordStatusEnum;
 import com.qmth.themis.business.enums.FinishExamResultEnum;
 import com.qmth.themis.business.enums.FinishTypeEnum;
 import com.qmth.themis.business.enums.HardwareTestEnum;
+import com.qmth.themis.business.enums.InvigilateMonitorStatusEnum;
 import com.qmth.themis.business.enums.InvigilateVerifyEnum;
 import com.qmth.themis.business.enums.MonitorStatusSourceEnum;
 import com.qmth.themis.business.enums.MonitorVideoSourceEnum;
@@ -1244,4 +1245,10 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
         Double tem = bd.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
         return tem;
     }
+    
+    @Transactional
+    @Override
+    public void updateInvigilateMonitorStatus(InvigilateMonitorStatusEnum monitorStatus,Long examId) {
+    	teExamMapper.updateInvigilateMonitorStatus(monitorStatus,examId);
+    }
 }

+ 4 - 1
themis-business/src/main/resources/mapper/TEExamMapper.xml

@@ -68,7 +68,7 @@
         where
         t1.id = t.update_id) as updateName
         from t_e_exam t
-        <where> 1 = 1
+        <where> t.monitor_status !='FINISHED'
             <if test="userId != null and userId != ''">
                 and t.start_time <![CDATA[ <= ]]> unix_timestamp(current_timestamp()) * 1000
                 and t.end_time <![CDATA[ >= ]]> unix_timestamp(current_timestamp()) * 1000
@@ -169,4 +169,7 @@
                 )
             order by tee.create_time desc
         </select>
+    <update id="updateInvigilateMonitorStatus">
+    	update t_e_exam set monitor_status=#{monitorStatus} where id=#{examId}
+    </update>
 </mapper>