wangliang 4 жил өмнө
parent
commit
e913c4467f

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

@@ -15,13 +15,13 @@ import com.qmth.themis.business.enums.ScoreStatusEnum;
 
 public class ExamCacheBean implements Serializable {
 
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = -1544653057729256077L;
+    /**
+     *
+     */
+    private static final long serialVersionUID = -1544653057729256077L;
 
-	 //主键
-     @JsonSerialize(using = ToStringSerializer.class)
+    //主键
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
 
     //创建人id
@@ -37,8 +37,8 @@ public class ExamCacheBean implements Serializable {
 
     //修改时间
     private Long updateTime;
-	
-	//机构ID
+
+    //机构ID
     @JsonSerialize(using = ToStringSerializer.class)
     private Long orgId;
 
@@ -163,7 +163,7 @@ public class ExamCacheBean implements Serializable {
 
     //监考人工审核,now:实时审核,later:事后审核
     private InvigilateVerifyEnum invigilateVerify;
-    
+
     //监考状态,NOT_START:未开始,START:监考中,FINISHED:已结束
     private InvigilateMonitorStatusEnum monitorStatus;
 
@@ -447,7 +447,7 @@ public class ExamCacheBean implements Serializable {
     }
 
     public Integer getExamCount() {
-        return examCount;
+        return examCount == null ? 0 : examCount;
     }
 
     public void setExamCount(Integer examCount) {
@@ -502,29 +502,29 @@ public class ExamCacheBean implements Serializable {
         this.objectiveScorePolicy = objectiveScorePolicy;
     }
 
-	public Long getId() {
-		return id;
-	}
+    public Long getId() {
+        return id;
+    }
 
-	public void setId(Long id) {
-		this.id = id;
-	}
+    public void setId(Long id) {
+        this.id = id;
+    }
 
-	public Long getCreateId() {
-		return createId;
-	}
+    public Long getCreateId() {
+        return createId;
+    }
 
-	public void setCreateId(Long createId) {
-		this.createId = createId;
-	}
+    public void setCreateId(Long createId) {
+        this.createId = createId;
+    }
 
-	public Long getUpdateId() {
-		return updateId;
-	}
+    public Long getUpdateId() {
+        return updateId;
+    }
 
-	public void setUpdateId(Long updateId) {
-		this.updateId = updateId;
-	}
+    public void setUpdateId(Long updateId) {
+        this.updateId = updateId;
+    }
 
     public Long getCreateTime() {
         return createTime;
@@ -558,13 +558,13 @@ public class ExamCacheBean implements Serializable {
         this.endTime = endTime;
     }
 
-	public InvigilateMonitorStatusEnum getMonitorStatus() {
-		return monitorStatus;
-	}
+    public InvigilateMonitorStatusEnum getMonitorStatus() {
+        return monitorStatus;
+    }
+
+    public void setMonitorStatus(InvigilateMonitorStatusEnum monitorStatus) {
+        this.monitorStatus = monitorStatus;
+    }
+
 
-	public void setMonitorStatus(InvigilateMonitorStatusEnum monitorStatus) {
-		this.monitorStatus = monitorStatus;
-	}
-    
-    
 }

+ 7 - 9
themis-business/src/main/java/com/qmth/themis/business/cache/bean/ExamStudentCacheBean.java

@@ -137,17 +137,15 @@ public class ExamStudentCacheBean implements Serializable {
         this.roomCode = roomCode;
     }
 
-
-    
     public Integer getAlreadyExamCount() {
-		return alreadyExamCount;
-	}
+        return alreadyExamCount == null ? 0 : alreadyExamCount;
+    }
 
-	public void setAlreadyExamCount(Integer alreadyExamCount) {
-		this.alreadyExamCount = alreadyExamCount;
-	}
+    public void setAlreadyExamCount(Integer alreadyExamCount) {
+        this.alreadyExamCount = alreadyExamCount;
+    }
 
-	public Long getCurrentRecordId() {
+    public Long getCurrentRecordId() {
         return currentRecordId;
     }
 
@@ -163,5 +161,5 @@ public class ExamStudentCacheBean implements Serializable {
         this.id = id;
     }
 
-    
+
 }

+ 1 - 1
themis-business/src/main/java/com/qmth/themis/business/dto/response/TEExamActivityDto.java

@@ -217,7 +217,7 @@ public class TEExamActivityDto implements Serializable {
         this.inProcessLivenessJudgePolicy = ec.getInProcessLivenessJudgePolicy().name();
         this.startTime = examActivityCacheBean.getStartTime();
         this.finishTime = examActivityCacheBean.getFinishTime();
-        this.leftExamCount = ec.getExamCount() - examStudentCacheBean.getAlreadyExamCount();
+        this.leftExamCount = (ec.getExamCount().intValue() - examStudentCacheBean.getAlreadyExamCount().intValue()) < 0 ? 0 : ec.getExamCount().intValue() - examStudentCacheBean.getAlreadyExamCount().intValue();
         this.mobilePhotoUpload = ec.getMobilePhotoUpload();
         this.examId = ec.getId();
     }

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

@@ -140,7 +140,7 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
                 map.put(v.getExamId(), teExamActivityDtos);
                 ExamCacheBean examCache = getExamCacheBeanNative(v.getExamId());
                 ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(v.getExamStudentId());
-                v.setLeftExamCount(examCache.getExamCount() - (examStudentCacheBean.getAlreadyExamCount() == null ? 0 : examStudentCacheBean.getAlreadyExamCount()));
+                v.setLeftExamCount((examCache.getExamCount().intValue() - (examStudentCacheBean.getAlreadyExamCount().intValue()) < 0 ? 0 : examCache.getExamCount().intValue() - (examStudentCacheBean.getAlreadyExamCount().intValue())));
                 if (Objects.nonNull(v.getInProcessLivenessFixedRangeStr())) {
                     String[] longs = v.getInProcessLivenessFixedRangeStr().trim().replaceAll(" ", "").split(",");
                     List inProcessLivenessFixedRange = new ArrayList();

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

@@ -406,7 +406,7 @@
 		tees.name,
 		tees.course_code as courseCode,
 		tees.course_name as courseName,
-		(tee.exam_count - tees.already_exam_count) as leftExamCount,
+		if(tee.exam_count - tees.already_exam_count <![CDATA[ < ]]> 0,0,tee.exam_count - tees.already_exam_count) as leftExamCount,
 		if((select count(1) from t_oe_exam_record toer where toer.exam_student_id =
 		tees.id and (toer.status = 'FINISHED' or toer.status = 'PERSISTED') >
 		0),'已完成','未完成') as status,
@@ -460,7 +460,7 @@
 		tees.`identity`,
 		tees.name,
 		group_concat(tees.course_name,CONCAT(CONCAT('(',tees.course_code),')')) as courseName,
-		(tee.exam_count - tees.already_exam_count) as leftExamCount,
+		if(tee.exam_count - tees.already_exam_count <![CDATA[ < ]]> 0,0,tee.exam_count - tees.already_exam_count) as leftExamCount,
 		if((select count(1) from t_oe_exam_record toer where toer.exam_student_id =
 		tees.id and (toer.status = 'FINISHED' or toer.status = 'PERSISTED') >
 		0),'已完成','未完成') as status,

+ 11 - 0
themis-mq/src/main/java/com/qmth/themis/mq/service/impl/MqLogicServiceImpl.java

@@ -273,6 +273,17 @@ public class MqLogicServiceImpl implements MqLogicService {
                 //考试断点异常原因 发送mq end
                 //更新场次-考试记录缓存
                 ExamActivityRecordCacheUtil.setExamRecordStatus(examActivityId, recordId, new ExamActivityRecordCacheBean(ExamRecordCacheUtil.getExamStudentId(recordId), ExamRecordCacheUtil.getStatus(recordId)));
+
+                //更新客户端摄像头推流状态为stop
+                MonitorStatusSourceEnum cameraStatusSourceEnum = ExamRecordCacheUtil.getMonitorStatus(recordId, MonitorVideoSourceEnum.CLIENT_CAMERA.name());
+                if (Objects.nonNull(cameraStatusSourceEnum)) {
+                    ExamRecordCacheUtil.setMonitorStatus(recordId, cameraStatusSourceEnum.name(), MonitorStatusSourceEnum.STOP, true);
+                }
+                //更新客户端屏幕推流状态为stop
+                MonitorStatusSourceEnum screenStatusSourceEnum = ExamRecordCacheUtil.getMonitorStatus(recordId, MonitorVideoSourceEnum.CLIENT_SCREEN.name());
+                if (Objects.nonNull(screenStatusSourceEnum)) {
+                    ExamRecordCacheUtil.setMonitorStatus(recordId, screenStatusSourceEnum.name(), MonitorStatusSourceEnum.STOP, true);
+                }
             }
             //发送移动端监考退出考试mq消息 start
             MqDto mqDtoExamStop = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_STOP.name(), recordId, MqTagEnum.EXAM_STOP, String.valueOf(recordId), String.valueOf(recordId));