Selaa lähdekoodia

merge from release_v4.0.1

deason 4 vuotta sitten
vanhempi
commit
eb8c8c04ee
27 muutettua tiedostoa jossa 1248 lisäystä ja 472 poistoa
  1. 11 4
      .gitignore
  2. 98 126
      examcloud-core-examwork-api-client/src/main/java/cn/com/qmth/examcloud/examwork/api/client/ExamCloudServiceClient.java
  3. 38 0
      examcloud-core-examwork-api-client/src/main/java/cn/com/qmth/examcloud/examwork/api/client/ExamStageCloudServiceClient.java
  4. 153 183
      examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/ExamCloudService.java
  5. 28 0
      examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/ExamStageCloudService.java
  6. 83 0
      examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/bean/ExamStageBean.java
  7. 25 0
      examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/bean/ExamStudentBean.java
  8. 21 0
      examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/request/GetExamNamesReq.java
  9. 51 0
      examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/request/GetExamStageReq.java
  10. 43 0
      examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/request/ModifyExamStageStartExamStatusReq.java
  11. 25 0
      examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/request/SaveExamStudentReq.java
  12. 21 0
      examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/response/GetExamNamesResp.java
  13. 35 0
      examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/response/GetExamStageResp.java
  14. 9 0
      examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/response/ModifyExamStageStartExamStatusResp.java
  15. 77 0
      examcloud-core-oe-admin-api/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/bean/ExamContinuedRecordBean.java
  16. 77 0
      examcloud-core-oe-admin-api/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/bean/ExamProcessRecordBean.java
  17. 94 0
      examcloud-core-oe-admin-api/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/bean/ExamRecordDataBean.java
  18. 122 0
      examcloud-core-oe-admin-api/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/bean/ExamRecordFileAnswerBean.java
  19. 12 26
      examcloud-core-oe-admin-api/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/bean/ExamRecordForMarkingBean.java
  20. 0 39
      examcloud-core-oe-admin-api/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/bean/PagedToBeMarkSubjectiveAnswerBean.java
  21. 119 94
      examcloud-core-oe-admin-api/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/request/SyncExamDataReq.java
  22. 13 0
      examcloud-core-oe-student-api/src/main/java/cn/com/qmth/examcloud/core/oe/student/api/request/HandInExamReq.java
  23. 22 0
      examcloud-core-reports-api-client/src/main/java/cn/com/qmth/examcloud/core/reports/api/client/StudentOperateLogCloudServiceClient.java
  24. 8 0
      examcloud-core-reports-api/src/main/java/cn/com/qmth/examcloud/core/reports/api/StudentOperateLogCloudService.java
  25. 13 0
      examcloud-core-reports-api/src/main/java/cn/com/qmth/examcloud/core/reports/api/response/CleanStudentOperateLogResp.java
  26. 25 0
      examcloud-global-api/src/main/java/cn/com/qmth/examcloud/global/api/request/SyncExamStudentReq.java
  27. 25 0
      examcloud-task-api/src/main/java/cn/com/qmth/examcloud/task/api/request/SyncExamStudentReq.java

+ 11 - 4
.gitignore

@@ -1,12 +1,19 @@
+*.class
+
+# Proguard folder generated by ide
 .project
 .classpath
 .settings
 target/
 .idea/
 *.iml
-*test/
-# Package Files #
-*.jar
-logs/
 
+# Log Files
+*.log
+*.class
 
+
+# Package Files #
+*.jar
+*.war
+*.ear

+ 98 - 126
examcloud-core-examwork-api-client/src/main/java/cn/com/qmth/examcloud/examwork/api/client/ExamCloudServiceClient.java

@@ -1,42 +1,9 @@
 package cn.com.qmth.examcloud.examwork.api.client;
 
-import org.springframework.stereotype.Service;
-
 import cn.com.qmth.examcloud.examwork.api.ExamCloudService;
-import cn.com.qmth.examcloud.examwork.api.request.CountExamStudentReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamCourseListReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamCoursePaperTypeListReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamListReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamOrgListReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamPropertyListReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamPropertyReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamStudentPropertyValueListReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamsByIdListReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamsReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetOngoingExamListReq;
-import cn.com.qmth.examcloud.examwork.api.request.LockExamStudentsReq;
-import cn.com.qmth.examcloud.examwork.api.request.SaveExamReq;
-import cn.com.qmth.examcloud.examwork.api.request.SaveStudentSpecialSettingsReq;
-import cn.com.qmth.examcloud.examwork.api.request.SetExamPropertyReq;
-import cn.com.qmth.examcloud.examwork.api.request.UnlockExamStudentsReq;
-import cn.com.qmth.examcloud.examwork.api.response.CountExamStudentResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamCourseListResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamCoursePaperTypeListResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamListResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamOrgListResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamPropertyListResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamPropertyResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamStudentPropertyValueListResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamsByIdListResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamsResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetOngoingExamListResp;
-import cn.com.qmth.examcloud.examwork.api.response.LockExamStudentsResp;
-import cn.com.qmth.examcloud.examwork.api.response.SaveExamResp;
-import cn.com.qmth.examcloud.examwork.api.response.SaveStudentSpecialSettingsResp;
-import cn.com.qmth.examcloud.examwork.api.response.SetExamPropertyResp;
-import cn.com.qmth.examcloud.examwork.api.response.UnlockExamStudentsResp;
+import cn.com.qmth.examcloud.examwork.api.request.*;
+import cn.com.qmth.examcloud.examwork.api.response.*;
+import org.springframework.stereotype.Service;
 
 /**
  * @author chenken
@@ -47,95 +14,100 @@ import cn.com.qmth.examcloud.examwork.api.response.UnlockExamStudentsResp;
 @Service
 public class ExamCloudServiceClient extends AbstractCloudClientSupport implements ExamCloudService {
 
-	private static final long serialVersionUID = -2880611326177571371L;
-
-	@Override
-	public SaveExamResp saveExam(SaveExamReq req) {
-		return post("exam/saveExam", req, SaveExamResp.class);
-	}
-
-	@Override
-	public GetExamResp getExam(GetExamReq req) {
-		return post("exam/getExam", req, GetExamResp.class);
-	}
-
-	@Override
-	public SetExamPropertyResp setExamProperty(SetExamPropertyReq req) {
-		return post("exam/setExamProperty", req, SetExamPropertyResp.class);
-	}
-
-	@Override
-	public GetExamPropertyResp getExamProperty(GetExamPropertyReq req) {
-		return post("exam/getExamProperty", req, GetExamPropertyResp.class);
-	}
-
-	@Override
-	public GetExamPropertyListResp getExamPropertyList(GetExamPropertyListReq req) {
-		return post("exam/getExamPropertyList", req, GetExamPropertyListResp.class);
-	}
-
-	@Override
-	public GetOngoingExamListResp getOngoingExamList(GetOngoingExamListReq req) {
-		return post("exam/getOngoingExamList", req, GetOngoingExamListResp.class);
-	}
-
-	@Override
-	public LockExamStudentsResp lockExamStudents(LockExamStudentsReq req) {
-		return post("exam/lockExamStudents", req, LockExamStudentsResp.class);
-	}
-
-	@Override
-	public UnlockExamStudentsResp unlockExamStudents(UnlockExamStudentsReq req) {
-		return post("exam/unlockExamStudents", req, UnlockExamStudentsResp.class);
-	}
-
-	@Override
-	public GetExamListResp getExamList(GetExamListReq req) {
-		return post("exam/getExamList", req, GetExamListResp.class);
-	}
-
-	@Override
-	public GetExamCourseListResp getExamCourseList(GetExamCourseListReq req) {
-		return post("exam/getExamCourseList", req, GetExamCourseListResp.class);
-	}
-
-	@Override
-	public GetExamCoursePaperTypeListResp getExamCoursePaperTypeList(
-			GetExamCoursePaperTypeListReq req) {
-		return post("exam/getExamCoursePaperTypeList", req, GetExamCoursePaperTypeListResp.class);
-	}
-
-	@Override
-	public CountExamStudentResp countExamStudent(CountExamStudentReq req) {
-		return post("exam/countExamStudent", req, CountExamStudentResp.class);
-	}
-
-	@Override
-	public GetExamOrgListResp getExamOrgList(GetExamOrgListReq req) {
-		return post("exam/getExamOrgList", req, GetExamOrgListResp.class);
-	}
-
-	@Override
-	public GetExamStudentPropertyValueListResp getExamStudentPropertyValueList(
-			GetExamStudentPropertyValueListReq req) {
-		return post("exam/getExamStudentPropertyValueList", req,
-				GetExamStudentPropertyValueListResp.class);
-	}
-
-	@Override
-	public GetExamsByIdListResp getExamsByIdList(GetExamsByIdListReq req) {
-		return post("exam/getExamsByIdList", req, GetExamsByIdListResp.class);
-	}
-
-	@Override
-	public GetExamsResp getExams(GetExamsReq req) {
-		return post("exam/getExams", req, GetExamsResp.class);
-	}
-
-	@Override
-	public SaveStudentSpecialSettingsResp saveStudentSpecialSettings(
-			SaveStudentSpecialSettingsReq req) {
-		return post("exam/saveStudentSpecialSettings", req, SaveStudentSpecialSettingsResp.class);
-	}
+    private static final long serialVersionUID = -2880611326177571371L;
+
+    @Override
+    public SaveExamResp saveExam(SaveExamReq req) {
+        return post("exam/saveExam", req, SaveExamResp.class);
+    }
+
+    @Override
+    public GetExamResp getExam(GetExamReq req) {
+        return post("exam/getExam", req, GetExamResp.class);
+    }
+
+    @Override
+    public SetExamPropertyResp setExamProperty(SetExamPropertyReq req) {
+        return post("exam/setExamProperty", req, SetExamPropertyResp.class);
+    }
+
+    @Override
+    public GetExamPropertyResp getExamProperty(GetExamPropertyReq req) {
+        return post("exam/getExamProperty", req, GetExamPropertyResp.class);
+    }
+
+    @Override
+    public GetExamPropertyListResp getExamPropertyList(GetExamPropertyListReq req) {
+        return post("exam/getExamPropertyList", req, GetExamPropertyListResp.class);
+    }
+
+    @Override
+    public GetOngoingExamListResp getOngoingExamList(GetOngoingExamListReq req) {
+        return post("exam/getOngoingExamList", req, GetOngoingExamListResp.class);
+    }
+
+    @Override
+    public LockExamStudentsResp lockExamStudents(LockExamStudentsReq req) {
+        return post("exam/lockExamStudents", req, LockExamStudentsResp.class);
+    }
+
+    @Override
+    public UnlockExamStudentsResp unlockExamStudents(UnlockExamStudentsReq req) {
+        return post("exam/unlockExamStudents", req, UnlockExamStudentsResp.class);
+    }
+
+    @Override
+    public GetExamListResp getExamList(GetExamListReq req) {
+        return post("exam/getExamList", req, GetExamListResp.class);
+    }
+
+    @Override
+    public GetExamCourseListResp getExamCourseList(GetExamCourseListReq req) {
+        return post("exam/getExamCourseList", req, GetExamCourseListResp.class);
+    }
+
+    @Override
+    public GetExamCoursePaperTypeListResp getExamCoursePaperTypeList(
+            GetExamCoursePaperTypeListReq req) {
+        return post("exam/getExamCoursePaperTypeList", req, GetExamCoursePaperTypeListResp.class);
+    }
+
+    @Override
+    public CountExamStudentResp countExamStudent(CountExamStudentReq req) {
+        return post("exam/countExamStudent", req, CountExamStudentResp.class);
+    }
+
+    @Override
+    public GetExamOrgListResp getExamOrgList(GetExamOrgListReq req) {
+        return post("exam/getExamOrgList", req, GetExamOrgListResp.class);
+    }
+
+    @Override
+    public GetExamStudentPropertyValueListResp getExamStudentPropertyValueList(
+            GetExamStudentPropertyValueListReq req) {
+        return post("exam/getExamStudentPropertyValueList", req,
+                GetExamStudentPropertyValueListResp.class);
+    }
+
+    @Override
+    public GetExamsByIdListResp getExamsByIdList(GetExamsByIdListReq req) {
+        return post("exam/getExamsByIdList", req, GetExamsByIdListResp.class);
+    }
+
+    @Override
+    public GetExamsResp getExams(GetExamsReq req) {
+        return post("exam/getExams", req, GetExamsResp.class);
+    }
+
+    @Override
+    public SaveStudentSpecialSettingsResp saveStudentSpecialSettings(
+            SaveStudentSpecialSettingsReq req) {
+        return post("exam/saveStudentSpecialSettings", req, SaveStudentSpecialSettingsResp.class);
+    }
+
+    @Override
+    public GetExamNamesResp getExamNames(GetExamNamesReq req) {
+        return post("exam/getExamNames", req, GetExamNamesResp.class);
+    }
 
 }

+ 38 - 0
examcloud-core-examwork-api-client/src/main/java/cn/com/qmth/examcloud/examwork/api/client/ExamStageCloudServiceClient.java

@@ -0,0 +1,38 @@
+package cn.com.qmth.examcloud.examwork.api.client;
+
+import cn.com.qmth.examcloud.examwork.api.ExamStageCloudService;
+import cn.com.qmth.examcloud.examwork.api.request.GetExamStageReq;
+import cn.com.qmth.examcloud.examwork.api.request.ModifyExamStageStartExamStatusReq;
+import cn.com.qmth.examcloud.examwork.api.response.GetExamStageResp;
+import cn.com.qmth.examcloud.examwork.api.response.ModifyExamStageStartExamStatusResp;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description 考试场次
+ * @Author lideyin
+ * @Date 2020/8/6 17:22
+ * @Version 1.0
+ */
+@Service
+public class ExamStageCloudServiceClient extends AbstractCloudClientSupport implements ExamStageCloudService {
+
+    /**
+     * 更新场次中的考试状态
+     *
+     * @param req
+     */
+    @Override
+    public ModifyExamStageStartExamStatusResp modifyExamStageStartExamStatus(ModifyExamStageStartExamStatusReq req) {
+        return post("examStage/modifyExamStageStartExamStatus", req, ModifyExamStageStartExamStatusResp.class);
+    }
+
+    /**
+     * 获取场次信息
+     *
+     * @param req
+     */
+    @Override
+    public GetExamStageResp getExamStage(GetExamStageReq req) {
+        return post("examStage/getExamStage", req, GetExamStageResp.class);
+    }
+}

+ 153 - 183
examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/ExamCloudService.java

@@ -1,40 +1,8 @@
 package cn.com.qmth.examcloud.examwork.api;
 
 import cn.com.qmth.examcloud.api.commons.CloudService;
-import cn.com.qmth.examcloud.examwork.api.request.CountExamStudentReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamCourseListReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamCoursePaperTypeListReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamListReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamOrgListReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamPropertyListReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamPropertyReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamStudentPropertyValueListReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamsByIdListReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetExamsReq;
-import cn.com.qmth.examcloud.examwork.api.request.GetOngoingExamListReq;
-import cn.com.qmth.examcloud.examwork.api.request.LockExamStudentsReq;
-import cn.com.qmth.examcloud.examwork.api.request.SaveExamReq;
-import cn.com.qmth.examcloud.examwork.api.request.SaveStudentSpecialSettingsReq;
-import cn.com.qmth.examcloud.examwork.api.request.SetExamPropertyReq;
-import cn.com.qmth.examcloud.examwork.api.request.UnlockExamStudentsReq;
-import cn.com.qmth.examcloud.examwork.api.response.CountExamStudentResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamCourseListResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamCoursePaperTypeListResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamListResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamOrgListResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamPropertyListResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamPropertyResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamStudentPropertyValueListResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamsByIdListResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetExamsResp;
-import cn.com.qmth.examcloud.examwork.api.response.GetOngoingExamListResp;
-import cn.com.qmth.examcloud.examwork.api.response.LockExamStudentsResp;
-import cn.com.qmth.examcloud.examwork.api.response.SaveExamResp;
-import cn.com.qmth.examcloud.examwork.api.response.SaveStudentSpecialSettingsResp;
-import cn.com.qmth.examcloud.examwork.api.response.SetExamPropertyResp;
-import cn.com.qmth.examcloud.examwork.api.response.UnlockExamStudentsResp;
+import cn.com.qmth.examcloud.examwork.api.request.*;
+import cn.com.qmth.examcloud.examwork.api.response.*;
 
 /**
  * 类注释
@@ -45,154 +13,156 @@ import cn.com.qmth.examcloud.examwork.api.response.UnlockExamStudentsResp;
  */
 public interface ExamCloudService extends CloudService {
 
-	/**
-	 * 保存考试
-	 * 
-	 * @param exam
-	 */
-	SaveExamResp saveExam(SaveExamReq req);
-
-	/**
-	 * 查询考试
-	 * 
-	 * @param name
-	 * @return
-	 */
-	GetExamResp getExam(GetExamReq req);
-
-	/**
-	 * 查询考试
-	 * 
-	 * @param name
-	 * @return
-	 */
-	GetExamsByIdListResp getExamsByIdList(GetExamsByIdListReq req);
-
-	/**
-	 * 设置考试属性配置
-	 *
-	 * @author WANGWEI
-	 * @param req
-	 * @return
-	 */
-	SetExamPropertyResp setExamProperty(SetExamPropertyReq req);
-
-	/**
-	 * 获取考试属性配置
-	 *
-	 * @author WANGWEI
-	 * @param req
-	 * @return
-	 */
-	GetExamPropertyResp getExamProperty(GetExamPropertyReq req);
-
-	/**
-	 * 获取考试属性配置集合
-	 *
-	 * @author WANGWEI
-	 * @param req
-	 * @return
-	 */
-	GetExamPropertyListResp getExamPropertyList(GetExamPropertyListReq req);
-
-	/**
-	 * 获取正在进行的考试
-	 *
-	 * @author WANGWEI
-	 * @param req
-	 * @return
-	 */
-	GetOngoingExamListResp getOngoingExamList(GetOngoingExamListReq req);
-
-	/**
-	 * 锁定考生
-	 *
-	 * @author WANGWEI
-	 * @param req
-	 * @return
-	 */
-	LockExamStudentsResp lockExamStudents(LockExamStudentsReq req);
-
-	/**
-	 * 解锁考生
-	 *
-	 * @author WANGWEI
-	 * @param req
-	 * @return
-	 */
-	UnlockExamStudentsResp unlockExamStudents(UnlockExamStudentsReq req);
-
-	/**
-	 * 查询考试
-	 *
-	 * @author WANGWEI
-	 * @param req
-	 * @return
-	 */
-	GetExamListResp getExamList(GetExamListReq req);
-
-	/**
-	 * 查询考试的课程集合
-	 *
-	 * @author WANGWEI
-	 * @param req
-	 * @return
-	 */
-	GetExamCourseListResp getExamCourseList(GetExamCourseListReq req);
-
-	/**
-	 * 查询考试课程的试卷类型集
-	 *
-	 * @author WANGWEI
-	 * @param req
-	 * @return
-	 */
-	GetExamCoursePaperTypeListResp getExamCoursePaperTypeList(GetExamCoursePaperTypeListReq req);
-
-	/**
-	 * 统计考生数量
-	 *
-	 * @author WANGWEI
-	 * @param req
-	 * @return
-	 */
-	CountExamStudentResp countExamStudent(CountExamStudentReq req);
-
-	/**
-	 * 获取考试机构列表
-	 *
-	 * @author WANGWEI
-	 * @param req
-	 * @return
-	 */
-	GetExamOrgListResp getExamOrgList(GetExamOrgListReq req);
-
-	/**
-	 * 获取考生属性值集合
-	 *
-	 * @author WANGWEI
-	 * @param req
-	 * @return
-	 */
-	GetExamStudentPropertyValueListResp getExamStudentPropertyValueList(
-			GetExamStudentPropertyValueListReq req);
-
-	/**
-	 * 遍历考试
-	 *
-	 * @author WANGWEI
-	 * @param req
-	 * @return
-	 */
-	GetExamsResp getExams(GetExamsReq req);
-
-	/**
-	 * 保存学生特殊设置
-	 *
-	 * @author WANGWEI
-	 * @param req
-	 * @return
-	 */
-	SaveStudentSpecialSettingsResp saveStudentSpecialSettings(SaveStudentSpecialSettingsReq req);
+    /**
+     * 保存考试
+     *
+     * @param exam
+     */
+    SaveExamResp saveExam(SaveExamReq req);
+
+    /**
+     * 查询考试
+     *
+     * @param name
+     * @return
+     */
+    GetExamResp getExam(GetExamReq req);
+
+    /**
+     * 查询考试
+     *
+     * @param name
+     * @return
+     */
+    GetExamsByIdListResp getExamsByIdList(GetExamsByIdListReq req);
+
+    /**
+     * 设置考试属性配置
+     *
+     * @param req
+     * @return
+     * @author WANGWEI
+     */
+    SetExamPropertyResp setExamProperty(SetExamPropertyReq req);
+
+    /**
+     * 获取考试属性配置
+     *
+     * @param req
+     * @return
+     * @author WANGWEI
+     */
+    GetExamPropertyResp getExamProperty(GetExamPropertyReq req);
+
+    /**
+     * 获取考试属性配置集合
+     *
+     * @param req
+     * @return
+     * @author WANGWEI
+     */
+    GetExamPropertyListResp getExamPropertyList(GetExamPropertyListReq req);
+
+    /**
+     * 获取正在进行的考试
+     *
+     * @param req
+     * @return
+     * @author WANGWEI
+     */
+    GetOngoingExamListResp getOngoingExamList(GetOngoingExamListReq req);
+
+    /**
+     * 锁定考生
+     *
+     * @param req
+     * @return
+     * @author WANGWEI
+     */
+    LockExamStudentsResp lockExamStudents(LockExamStudentsReq req);
+
+    /**
+     * 解锁考生
+     *
+     * @param req
+     * @return
+     * @author WANGWEI
+     */
+    UnlockExamStudentsResp unlockExamStudents(UnlockExamStudentsReq req);
+
+    /**
+     * 查询考试
+     *
+     * @param req
+     * @return
+     * @author WANGWEI
+     */
+    GetExamListResp getExamList(GetExamListReq req);
+
+    /**
+     * 查询考试的课程集合
+     *
+     * @param req
+     * @return
+     * @author WANGWEI
+     */
+    GetExamCourseListResp getExamCourseList(GetExamCourseListReq req);
+
+    /**
+     * 查询考试课程的试卷类型集
+     *
+     * @param req
+     * @return
+     * @author WANGWEI
+     */
+    GetExamCoursePaperTypeListResp getExamCoursePaperTypeList(GetExamCoursePaperTypeListReq req);
+
+    /**
+     * 统计考生数量
+     *
+     * @param req
+     * @return
+     * @author WANGWEI
+     */
+    CountExamStudentResp countExamStudent(CountExamStudentReq req);
+
+    /**
+     * 获取考试机构列表
+     *
+     * @param req
+     * @return
+     * @author WANGWEI
+     */
+    GetExamOrgListResp getExamOrgList(GetExamOrgListReq req);
+
+    /**
+     * 获取考生属性值集合
+     *
+     * @param req
+     * @return
+     * @author WANGWEI
+     */
+    GetExamStudentPropertyValueListResp getExamStudentPropertyValueList(
+            GetExamStudentPropertyValueListReq req);
+
+    /**
+     * 遍历考试
+     *
+     * @param req
+     * @return
+     * @author WANGWEI
+     */
+    GetExamsResp getExams(GetExamsReq req);
+
+    /**
+     * 保存学生特殊设置
+     *
+     * @param req
+     * @return
+     * @author WANGWEI
+     */
+    SaveStudentSpecialSettingsResp saveStudentSpecialSettings(SaveStudentSpecialSettingsReq req);
+
+    GetExamNamesResp getExamNames(GetExamNamesReq req);
 
 }

+ 28 - 0
examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/ExamStageCloudService.java

@@ -0,0 +1,28 @@
+package cn.com.qmth.examcloud.examwork.api;
+
+import cn.com.qmth.examcloud.api.commons.CloudService;
+import cn.com.qmth.examcloud.examwork.api.request.*;
+import cn.com.qmth.examcloud.examwork.api.response.*;
+
+/**
+ * @Description 考试场次
+ * @Author lideyin
+ * @Date 2020/8/6 15:54
+ * @Version 1.0
+ */
+public interface ExamStageCloudService extends CloudService {
+
+	/**
+	 * 更新场次中的考试状态
+	 *
+	 * @param req
+	 */
+	ModifyExamStageStartExamStatusResp modifyExamStageStartExamStatus(ModifyExamStageStartExamStatusReq req);
+
+	/**
+	 * 获取场次信息
+	 *
+	 * @param req
+	 */
+	GetExamStageResp getExamStage(GetExamStageReq req);
+}

+ 83 - 0
examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/bean/ExamStageBean.java

@@ -0,0 +1,83 @@
+package cn.com.qmth.examcloud.examwork.api.bean;
+
+import cn.com.qmth.examcloud.api.commons.enums.ExamSpecialSettingsType;
+import cn.com.qmth.examcloud.api.commons.exchange.JsonSerializable;
+
+import java.util.Date;
+
+/**
+ * @Description 场次信息实体
+ * 部分字段,可根据需求自行添加
+ * @Author lideyin
+ * @Date 2020/8/7 17:54
+ * @Version 1.0
+ */
+public class ExamStageBean implements JsonSerializable {
+
+	private static final long serialVersionUID = 6619634459082795393L;
+
+	/**
+	 * ID
+	 */
+	private Long id;
+
+	/**
+	 * 考试id
+	 */
+	private Long examId;
+
+	/**
+	 * 顶级机构Id
+	 */
+	private Long rootOrgId;
+
+	/**
+	 * 场次号
+	 */
+	private Integer stageOrder;
+
+	/**
+	 * 启用标识
+	 */
+	private Boolean enable;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getExamId() {
+		return examId;
+	}
+
+	public void setExamId(Long examId) {
+		this.examId = examId;
+	}
+
+	public Long getRootOrgId() {
+		return rootOrgId;
+	}
+
+	public void setRootOrgId(Long rootOrgId) {
+		this.rootOrgId = rootOrgId;
+	}
+
+	public Integer getStageOrder() {
+		return stageOrder;
+	}
+
+	public void setStageOrder(Integer stageOrder) {
+		this.stageOrder = stageOrder;
+	}
+
+	public Boolean getEnable() {
+		return enable;
+	}
+
+	public void setEnable(Boolean enable) {
+		this.enable = enable;
+	}
+}

+ 25 - 0
examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/bean/ExamStudentBean.java

@@ -132,6 +132,16 @@ public class ExamStudentBean implements JsonSerializable {
 	 */
 	private String ext5;
 
+	/**
+	 * 场次id
+	 */
+	private Long examStageId;
+
+	/**
+	 * 场次号
+	 */
+	private Integer examStageOrder;
+
 	public Long getId() {
 		return id;
 	}
@@ -340,4 +350,19 @@ public class ExamStudentBean implements JsonSerializable {
 		this.ext5 = ext5;
 	}
 
+	public Long getExamStageId() {
+		return examStageId;
+	}
+
+	public void setExamStageId(Long examStageId) {
+		this.examStageId = examStageId;
+	}
+
+	public Integer getExamStageOrder() {
+		return examStageOrder;
+	}
+
+	public void setExamStageOrder(Integer examStageOrder) {
+		this.examStageOrder = examStageOrder;
+	}
 }

+ 21 - 0
examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/request/GetExamNamesReq.java

@@ -0,0 +1,21 @@
+package cn.com.qmth.examcloud.examwork.api.request;
+
+import cn.com.qmth.examcloud.api.commons.exchange.BaseRequest;
+
+import java.util.Set;
+
+public class GetExamNamesReq extends BaseRequest {
+
+    private static final long serialVersionUID = 8427775553678919877L;
+
+    private Set<Long> examIds;
+
+    public Set<Long> getExamIds() {
+        return examIds;
+    }
+
+    public void setExamIds(Set<Long> examIds) {
+        this.examIds = examIds;
+    }
+
+}

+ 51 - 0
examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/request/GetExamStageReq.java

@@ -0,0 +1,51 @@
+package cn.com.qmth.examcloud.examwork.api.request;
+
+import cn.com.qmth.examcloud.api.commons.exchange.BaseRequest;
+
+/**
+ * @Description 获取场次信息
+ * @Author lideyin
+ * @Date 2020/8/7 17:50
+ * @Version 1.0
+ */
+public class GetExamStageReq extends BaseRequest {
+
+    private static final long serialVersionUID = 871420550261627247L;
+    /**
+     * 场次id
+     */
+    private Long id;
+
+    /**
+     * 考试id
+     */
+    private Long examId;
+    /**
+     * 场次号
+     */
+    private Integer examStageOrder;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public Integer getExamStageOrder() {
+        return examStageOrder;
+    }
+
+    public void setExamStageOrder(Integer examStageOrder) {
+        this.examStageOrder = examStageOrder;
+    }
+}

+ 43 - 0
examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/request/ModifyExamStageStartExamStatusReq.java

@@ -0,0 +1,43 @@
+package cn.com.qmth.examcloud.examwork.api.request;
+
+import cn.com.qmth.examcloud.api.commons.enums.ExamStageStartExamStatus;
+import cn.com.qmth.examcloud.api.commons.enums.ExamType;
+import cn.com.qmth.examcloud.api.commons.exchange.BaseRequest;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @Description 修改场次中的开考状态
+ * @Author lideyin
+ * @Date 2020/8/6 15:56
+ * @Version 1.0
+ */
+public class ModifyExamStageStartExamStatusReq extends BaseRequest {
+
+	private static final long serialVersionUID = -1418886087630579901L;
+	/**
+	 * 场次id
+	 */
+	private Long examStageId;
+	/**
+	 * 场次开考状态
+	 */
+	private String examStageStartExamStatus;
+
+	public Long getExamStageId() {
+		return examStageId;
+	}
+
+	public void setExamStageId(Long examStageId) {
+		this.examStageId = examStageId;
+	}
+
+	public String getExamStageStartExamStatus() {
+		return examStageStartExamStatus;
+	}
+
+	public void setExamStageStartExamStatus(String examStageStartExamStatus) {
+		this.examStageStartExamStatus = examStageStartExamStatus;
+	}
+}

+ 25 - 0
examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/request/SaveExamStudentReq.java

@@ -133,6 +133,16 @@ public class SaveExamStudentReq extends BaseRequest {
 	 */
 	private String ext5;
 
+	/**
+	 * 场次id
+	 */
+	private Long examStageId;
+
+	/**
+	 * 场次号
+	 */
+	private Integer examStageOrder;
+
 	public Long getRootOrgId() {
 		return rootOrgId;
 	}
@@ -333,4 +343,19 @@ public class SaveExamStudentReq extends BaseRequest {
 		this.ext5 = ext5;
 	}
 
+	public Long getExamStageId() {
+		return examStageId;
+	}
+
+	public void setExamStageId(Long examStageId) {
+		this.examStageId = examStageId;
+	}
+
+	public Integer getExamStageOrder() {
+		return examStageOrder;
+	}
+
+	public void setExamStageOrder(Integer examStageOrder) {
+		this.examStageOrder = examStageOrder;
+	}
 }

+ 21 - 0
examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/response/GetExamNamesResp.java

@@ -0,0 +1,21 @@
+package cn.com.qmth.examcloud.examwork.api.response;
+
+import cn.com.qmth.examcloud.api.commons.exchange.BaseResponse;
+
+import java.util.Map;
+
+public class GetExamNamesResp extends BaseResponse {
+
+    private static final long serialVersionUID = 8427775553678919877L;
+
+    private Map<Long, String> examNames;
+
+    public Map<Long, String> getExamNames() {
+        return examNames;
+    }
+
+    public void setExamNames(Map<Long, String> examNames) {
+        this.examNames = examNames;
+    }
+
+}

+ 35 - 0
examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/response/GetExamStageResp.java

@@ -0,0 +1,35 @@
+package cn.com.qmth.examcloud.examwork.api.response;
+
+import cn.com.qmth.examcloud.api.commons.exchange.BaseResponse;
+import cn.com.qmth.examcloud.examwork.api.bean.ExamBean;
+import cn.com.qmth.examcloud.examwork.api.bean.ExamStageBean;
+
+/**
+ * @Description 获取场次信息
+ * @Author lideyin
+ * @Date 2020/8/7 17:50
+ * @Version 1.0
+ */
+public class GetExamStageResp extends BaseResponse {
+
+	private static final long serialVersionUID = 3409318139465512174L;
+	private Long id;
+
+	private ExamStageBean examStageBean;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public ExamStageBean getExamStageBean() {
+		return examStageBean;
+	}
+
+	public void setExamStageBean(ExamStageBean examStageBean) {
+		this.examStageBean = examStageBean;
+	}
+}

+ 9 - 0
examcloud-core-examwork-api/src/main/java/cn/com/qmth/examcloud/examwork/api/response/ModifyExamStageStartExamStatusResp.java

@@ -0,0 +1,9 @@
+package cn.com.qmth.examcloud.examwork.api.response;
+
+import cn.com.qmth.examcloud.api.commons.exchange.BaseResponse;
+import cn.com.qmth.examcloud.examwork.api.bean.ExamBean;
+
+public class ModifyExamStageStartExamStatusResp extends BaseResponse {
+
+	private static final long serialVersionUID = 9086371781544830731L;
+}

+ 77 - 0
examcloud-core-oe-admin-api/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/bean/ExamContinuedRecordBean.java

@@ -0,0 +1,77 @@
+package cn.com.qmth.examcloud.core.oe.admin.api.bean;
+
+import cn.com.qmth.examcloud.api.commons.exchange.JsonSerializable;
+
+import java.util.Date;
+
+/**
+ * @Description 断点续考记录表
+ * @Author lideyin
+ * @Date 2020/8/13 11:17
+ * @Version 1.0
+ */
+public class ExamContinuedRecordBean implements JsonSerializable {
+
+    private static final long serialVersionUID = 9169768812546247057L;
+    private Long id;
+
+    /**
+     * 考试记录ID
+     */
+    private Long examRecordDataId;
+
+    /**
+     * 断点续考时间
+     */
+    private Date continuedTime;
+
+    /**
+     * 开始答题时间
+     */
+    private Date startTime;
+
+    /**
+     * 考试已用时长(毫秒)
+     */
+    private long usedExamTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getExamRecordDataId() {
+        return examRecordDataId;
+    }
+
+    public void setExamRecordDataId(Long examRecordDataId) {
+        this.examRecordDataId = examRecordDataId;
+    }
+
+    public Date getContinuedTime() {
+        return continuedTime;
+    }
+
+    public void setContinuedTime(Date continuedTime) {
+        this.continuedTime = continuedTime;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public long getUsedExamTime() {
+        return usedExamTime;
+    }
+
+    public void setUsedExamTime(long usedExamTime) {
+        this.usedExamTime = usedExamTime;
+    }
+}

+ 77 - 0
examcloud-core-oe-admin-api/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/bean/ExamProcessRecordBean.java

@@ -0,0 +1,77 @@
+package cn.com.qmth.examcloud.core.oe.admin.api.bean;
+
+import cn.com.qmth.examcloud.api.commons.exchange.JsonSerializable;
+
+import java.util.Date;
+
+/**
+ * @Description 考试过程记录
+ * @Author lideyin
+ * @Date 2020/8/20 18:49
+ * @Version 1.0
+ */
+public class ExamProcessRecordBean implements JsonSerializable {
+
+    private static final long serialVersionUID = 6443942682157198322L;
+    private Long id;
+
+    /**
+     * 考试记录ID
+     */
+    private Long examRecordDataId;
+
+    /**
+     * 过程名称
+     */
+    private String processName;
+
+    /**
+     * 过程记录时间
+     */
+    private Date recordTime;
+
+    /**
+     * 访问源ip
+     */
+    private String sourceIp;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getExamRecordDataId() {
+        return examRecordDataId;
+    }
+
+    public void setExamRecordDataId(Long examRecordDataId) {
+        this.examRecordDataId = examRecordDataId;
+    }
+
+    public String getProcessName() {
+        return processName;
+    }
+
+    public void setProcessName(String processName) {
+        this.processName = processName;
+    }
+
+    public Date getRecordTime() {
+        return recordTime;
+    }
+
+    public void setRecordTime(Date recordTime) {
+        this.recordTime = recordTime;
+    }
+
+    public String getSourceIp() {
+        return sourceIp;
+    }
+
+    public void setSourceIp(String sourceIp) {
+        this.sourceIp = sourceIp;
+    }
+}

+ 94 - 0
examcloud-core-oe-admin-api/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/bean/ExamRecordDataBean.java

@@ -205,6 +205,36 @@ public class ExamRecordDataBean implements JsonSerializable {
      */
     private Date creationTime;
 
+    /**
+     * 场次id
+     */
+    private Long examStageId;
+
+    /**
+     * 场次号
+     */
+    private Integer examStageOrder;
+
+    /**
+     * 学生最后活动时间
+     */
+    private Date lastActiveTime;
+
+    /**
+     * 断点续考时间
+     */
+    private Date continuedTime;
+
+    /**
+     * 进入考试时间
+     */
+    private Date enterExamTime;
+
+    /**
+     * 切屏次数
+     */
+    private Integer switchScreenCount;
+
     public Long getId() {
         return id;
     }
@@ -556,4 +586,68 @@ public class ExamRecordDataBean implements JsonSerializable {
     public void setSuccPercent(Double succPercent) {
         this.succPercent = succPercent;
     }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public Date getCreationTime() {
+        return creationTime;
+    }
+
+    public void setCreationTime(Date creationTime) {
+        this.creationTime = creationTime;
+    }
+
+    public Long getExamStageId() {
+        return examStageId;
+    }
+
+    public void setExamStageId(Long examStageId) {
+        this.examStageId = examStageId;
+    }
+
+    public Integer getExamStageOrder() {
+        return examStageOrder;
+    }
+
+    public void setExamStageOrder(Integer examStageOrder) {
+        this.examStageOrder = examStageOrder;
+    }
+
+    public Date getLastActiveTime() {
+        return lastActiveTime;
+    }
+
+    public void setLastActiveTime(Date lastActiveTime) {
+        this.lastActiveTime = lastActiveTime;
+    }
+
+    public Date getContinuedTime() {
+        return continuedTime;
+    }
+
+    public void setContinuedTime(Date continuedTime) {
+        this.continuedTime = continuedTime;
+    }
+
+    public Date getEnterExamTime() {
+        return enterExamTime;
+    }
+
+    public void setEnterExamTime(Date enterExamTime) {
+        this.enterExamTime = enterExamTime;
+    }
+
+    public Integer getSwitchScreenCount() {
+        return switchScreenCount;
+    }
+
+    public void setSwitchScreenCount(Integer switchScreenCount) {
+        this.switchScreenCount = switchScreenCount;
+    }
 }

+ 122 - 0
examcloud-core-oe-admin-api/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/bean/ExamRecordFileAnswerBean.java

@@ -0,0 +1,122 @@
+/*
+ * *************************************************
+ * Copyright (c) 2018 QMTH. All Rights Reserved.
+ * Created by Deason on 2018-08-24 11:22:55.
+ * *************************************************
+ */
+
+package cn.com.qmth.examcloud.core.oe.admin.api.bean;
+
+import cn.com.qmth.examcloud.api.commons.exchange.JsonSerializable;
+
+/**
+ * @Description 考试记录文件作答
+ * @Author lideyin
+ * @Date 2020/7/13 17:31
+ * @Version 1.0
+ */
+public class ExamRecordFileAnswerBean implements JsonSerializable {
+    /**
+	 *
+	 */
+	private static final long serialVersionUID = -735354536432038902L;
+    private Long id;
+
+    /**
+     * 考试记录ID
+     */
+    private Long examRecordDataId;
+
+    /**
+     * 文件路径:离线考试
+     */
+    private String offlineFileUrl;
+    /**
+     * 文件名称:离线考试
+     */
+    private String offlineFileName;
+
+    /**
+     * 原始文件名称
+     */
+    private String originalFileName;
+
+    /**
+     * 文件类型
+     */
+    private String fileType;
+
+    /**
+     * 文件后缀名
+     */
+    private String suffix;
+
+    /**
+     * 预留扩展属性
+     */
+    private String properties;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getExamRecordDataId() {
+        return examRecordDataId;
+    }
+
+    public void setExamRecordDataId(Long examRecordDataId) {
+        this.examRecordDataId = examRecordDataId;
+    }
+
+    public String getOfflineFileUrl() {
+        return offlineFileUrl;
+    }
+
+    public void setOfflineFileUrl(String offlineFileUrl) {
+        this.offlineFileUrl = offlineFileUrl;
+    }
+
+    public String getOfflineFileName() {
+        return offlineFileName;
+    }
+
+    public void setOfflineFileName(String offlineFileName) {
+        this.offlineFileName = offlineFileName;
+    }
+
+    public String getFileType() {
+        return fileType;
+    }
+
+    public void setFileType(String fileType) {
+        this.fileType = fileType;
+    }
+
+    public String getSuffix() {
+        return suffix;
+    }
+
+    public void setSuffix(String suffix) {
+        this.suffix = suffix;
+    }
+
+    public String getProperties() {
+        return properties;
+    }
+
+    public void setProperties(String properties) {
+        this.properties = properties;
+    }
+
+    public String getOriginalFileName() {
+        return originalFileName;
+    }
+
+    public void setOriginalFileName(String originalFileName) {
+        this.originalFileName = originalFileName;
+    }
+}

+ 12 - 26
examcloud-core-oe-admin-api/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/bean/ExamRecordForMarkingBean.java

@@ -1,16 +1,17 @@
 package cn.com.qmth.examcloud.core.oe.admin.api.bean;
 
 import cn.com.qmth.examcloud.api.commons.exchange.JsonSerializable;
+import java.util.List;
 
 public class ExamRecordForMarkingBean implements JsonSerializable{
 
 	/**
-	 * 
+	 *
 	 */
 	private static final long serialVersionUID = 6044709807109039873L;
 
 	private Long id;
-	
+
 	/**
 	 * 考试ID
 	 */
@@ -19,12 +20,12 @@ public class ExamRecordForMarkingBean implements JsonSerializable{
 	 * 考试记录ID
 	 */
 	private Long examRecordDataId;
-	
+
 	/**
 	 * 原始试卷ID
 	 */
 	private String basePaperId;
-	
+
 	/**
 	 * 课程Id
 	 */
@@ -37,20 +38,13 @@ public class ExamRecordForMarkingBean implements JsonSerializable{
 	 * 考生ID
 	 */
 	private Long examStudentId;
-	
+
 	/**
 	 * 客观分总分
 	 */
 	private Double objectiveScore;
-	
-	/**
-	 * 文件路径:离线考试
-	 */
-	private String offlineFileUrl;
-	/**
-	 * 文件名称:离线考试
-	 */
-	private String offlineFileName;
+
+	private List<ExamRecordFileAnswerBean> offlineFiles;
 
 	/**
 	 * 批次号
@@ -121,20 +115,12 @@ public class ExamRecordForMarkingBean implements JsonSerializable{
 		this.objectiveScore = objectiveScore;
 	}
 
-	public String getOfflineFileUrl() {
-		return offlineFileUrl;
-	}
-
-	public void setOfflineFileUrl(String offlineFileUrl) {
-		this.offlineFileUrl = offlineFileUrl;
-	}
-
-	public String getOfflineFileName() {
-		return offlineFileName;
+	public List<ExamRecordFileAnswerBean> getOfflineFiles() {
+		return offlineFiles;
 	}
 
-	public void setOfflineFileName(String offlineFileName) {
-		this.offlineFileName = offlineFileName;
+	public void setOfflineFiles(List<ExamRecordFileAnswerBean> offlineFiles) {
+		this.offlineFiles = offlineFiles;
 	}
 
 	public String getBatchNum() {

+ 0 - 39
examcloud-core-oe-admin-api/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/bean/PagedToBeMarkSubjectiveAnswerBean.java

@@ -37,21 +37,6 @@ public class PagedToBeMarkSubjectiveAnswerBean implements JsonSerializable{
      */
     private AnswerType answerType;
 
-	/**
-	 * 标准答案
-	 */
-	private String answer;
-
-	/**
-	 * 题干
-	 */
-	private String body;
-
-    /**
-     * 父题干
-	 */
-	private String parentBody;
-
 	/**
 	 * 题型
 	 */
@@ -97,30 +82,6 @@ public class PagedToBeMarkSubjectiveAnswerBean implements JsonSerializable{
 		this.answerType = answerType;
 	}
 
-	public String getAnswer() {
-		return answer;
-	}
-
-	public void setAnswer(String answer) {
-		this.answer = answer;
-	}
-
-	public String getBody() {
-		return body;
-	}
-
-	public void setBody(String body) {
-		this.body = body;
-	}
-
-	public String getParentBody() {
-		return parentBody;
-	}
-
-	public void setParentBody(String parentBody) {
-		this.parentBody = parentBody;
-	}
-
 	public QuestionType getQuestionType() {
 		return questionType;
 	}

+ 119 - 94
examcloud-core-oe-admin-api/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/request/SyncExamDataReq.java

@@ -2,6 +2,7 @@ package cn.com.qmth.examcloud.core.oe.admin.api.request;
 
 import cn.com.qmth.examcloud.api.commons.exchange.BaseRequest;
 import cn.com.qmth.examcloud.core.oe.admin.api.bean.*;
+
 import java.util.List;
 
 /**
@@ -11,98 +12,122 @@ import java.util.List;
  * @Version 1.0
  */
 public class SyncExamDataReq extends BaseRequest {
-	private static final long serialVersionUID = -6468655557697004398L;
-
-	/**
-	 * 考试记录实体
-	 */
-	private ExamRecordDataBean examRecordData;
-
-	/**
-	 * 照片处理结果实体
-	 */
-	private List<ExamCaptureBean> examCaptures;
-
-	/**
-	 * 同步照片处理结果实体
-	 */
-	private ExamSyncCaptureBean examSyncCapture;
-
-	/**
-	 * face id活体检测结果实体
-	 */
-	private List<ExamFaceLivenessVerifyBean> examFaceLivenessVerifies;
-
-	/**
-	 * 新活检实体
-	 */
-	private FaceBiopsyBean faceBiopsy;
-
-	/**
-	 * 考试记录对应的试卷结构实体
-	 */
-	private ExamRecordPaperStructBean examRecordPaperStruct;
-
-	/**
-	 * 考试记录作答结果实体
-	 */
-	private ExamRecordQuestionsBean examRecordQuestions;
-
-
-
-	public ExamRecordDataBean getExamRecordData() {
-		return examRecordData;
-	}
-
-	public void setExamRecordData(ExamRecordDataBean examRecordData) {
-		this.examRecordData = examRecordData;
-	}
-
-	public List<ExamCaptureBean> getExamCaptures() {
-		return examCaptures;
-	}
-
-	public void setExamCaptures(List<ExamCaptureBean> examCaptures) {
-		this.examCaptures = examCaptures;
-	}
-
-	public ExamSyncCaptureBean getExamSyncCapture() {
-		return examSyncCapture;
-	}
-
-	public void setExamSyncCapture(ExamSyncCaptureBean examSyncCapture) {
-		this.examSyncCapture = examSyncCapture;
-	}
-
-	public List<ExamFaceLivenessVerifyBean> getExamFaceLivenessVerifies() {
-		return examFaceLivenessVerifies;
-	}
-
-	public void setExamFaceLivenessVerifies(List<ExamFaceLivenessVerifyBean> examFaceLivenessVerifies) {
-		this.examFaceLivenessVerifies = examFaceLivenessVerifies;
-	}
-
-	public FaceBiopsyBean getFaceBiopsy() {
-		return faceBiopsy;
-	}
-
-	public void setFaceBiopsy(FaceBiopsyBean faceBiopsy) {
-		this.faceBiopsy = faceBiopsy;
-	}
-
-	public ExamRecordQuestionsBean getExamRecordQuestions() {
-		return examRecordQuestions;
-	}
-
-	public void setExamRecordQuestions(ExamRecordQuestionsBean examRecordQuestions) {
-		this.examRecordQuestions = examRecordQuestions;
-	}
-
-	public ExamRecordPaperStructBean getExamRecordPaperStruct() {
-		return examRecordPaperStruct;
-	}
-
-	public void setExamRecordPaperStruct(ExamRecordPaperStructBean examRecordPaperStruct) {
-		this.examRecordPaperStruct = examRecordPaperStruct;
-	}
+    private static final long serialVersionUID = -6468655557697004398L;
+
+    /**
+     * 考试记录实体
+     */
+    private ExamRecordDataBean examRecordData;
+
+    /**
+     * 照片处理结果实体
+     */
+    private List<ExamCaptureBean> examCaptures;
+
+    /**
+     * 同步照片处理结果实体
+     */
+    private ExamSyncCaptureBean examSyncCapture;
+
+    /**
+     * face id活体检测结果实体
+     */
+    private List<ExamFaceLivenessVerifyBean> examFaceLivenessVerifies;
+
+    /**
+     * 新活检实体
+     */
+    private FaceBiopsyBean faceBiopsy;
+
+    /**
+     * 考试记录对应的试卷结构实体
+     */
+    private ExamRecordPaperStructBean examRecordPaperStruct;
+
+    /**
+     * 考试记录作答结果实体
+     */
+    private ExamRecordQuestionsBean examRecordQuestions;
+
+    /**
+     * 断点续考记录
+     */
+    private List<ExamContinuedRecordBean> examContinuedRecords;
+
+    /**
+     * 考试过程记录
+     */
+    private List<ExamProcessRecordBean> examProcessRecords;
+
+    public ExamRecordDataBean getExamRecordData() {
+        return examRecordData;
+    }
+
+    public void setExamRecordData(ExamRecordDataBean examRecordData) {
+        this.examRecordData = examRecordData;
+    }
+
+    public List<ExamCaptureBean> getExamCaptures() {
+        return examCaptures;
+    }
+
+    public void setExamCaptures(List<ExamCaptureBean> examCaptures) {
+        this.examCaptures = examCaptures;
+    }
+
+    public ExamSyncCaptureBean getExamSyncCapture() {
+        return examSyncCapture;
+    }
+
+    public void setExamSyncCapture(ExamSyncCaptureBean examSyncCapture) {
+        this.examSyncCapture = examSyncCapture;
+    }
+
+    public List<ExamFaceLivenessVerifyBean> getExamFaceLivenessVerifies() {
+        return examFaceLivenessVerifies;
+    }
+
+    public void setExamFaceLivenessVerifies(List<ExamFaceLivenessVerifyBean> examFaceLivenessVerifies) {
+        this.examFaceLivenessVerifies = examFaceLivenessVerifies;
+    }
+
+    public FaceBiopsyBean getFaceBiopsy() {
+        return faceBiopsy;
+    }
+
+    public void setFaceBiopsy(FaceBiopsyBean faceBiopsy) {
+        this.faceBiopsy = faceBiopsy;
+    }
+
+    public ExamRecordQuestionsBean getExamRecordQuestions() {
+        return examRecordQuestions;
+    }
+
+    public void setExamRecordQuestions(ExamRecordQuestionsBean examRecordQuestions) {
+        this.examRecordQuestions = examRecordQuestions;
+    }
+
+    public ExamRecordPaperStructBean getExamRecordPaperStruct() {
+        return examRecordPaperStruct;
+    }
+
+    public void setExamRecordPaperStruct(ExamRecordPaperStructBean examRecordPaperStruct) {
+        this.examRecordPaperStruct = examRecordPaperStruct;
+    }
+
+    public List<ExamContinuedRecordBean> getExamContinuedRecords() {
+        return examContinuedRecords;
+    }
+
+    public void setExamContinuedRecords(List<ExamContinuedRecordBean> examContinuedRecords) {
+        this.examContinuedRecords = examContinuedRecords;
+    }
+
+    public List<ExamProcessRecordBean> getExamProcessRecords() {
+        return examProcessRecords;
+    }
+
+    public void setExamProcessRecords(List<ExamProcessRecordBean> examProcessRecords) {
+        this.examProcessRecords = examProcessRecords;
+    }
 }

+ 13 - 0
examcloud-core-oe-student-api/src/main/java/cn/com/qmth/examcloud/core/oe/student/api/request/HandInExamReq.java

@@ -19,6 +19,11 @@ public class HandInExamReq extends BaseRequest {
 
     private HandInExamType handInExamType;
 
+    /**
+     * 调用者的ip,交卷类型为自动交卷时,不用传值
+     */
+    private String ip;
+
     public Long getExamRecordDataId() {
         return examRecordDataId;
     }
@@ -34,4 +39,12 @@ public class HandInExamReq extends BaseRequest {
     public void setHandInExamType(HandInExamType handInExamType) {
         this.handInExamType = handInExamType;
     }
+
+    public String getIp() {
+        return ip;
+    }
+
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
 }

+ 22 - 0
examcloud-core-reports-api-client/src/main/java/cn/com/qmth/examcloud/core/reports/api/client/StudentOperateLogCloudServiceClient.java

@@ -0,0 +1,22 @@
+package cn.com.qmth.examcloud.core.reports.api.client;
+
+import org.springframework.stereotype.Service;
+
+import cn.com.qmth.examcloud.core.reports.api.StudentOperateLogCloudService;
+import cn.com.qmth.examcloud.core.reports.api.response.CleanStudentOperateLogResp;
+
+@Service
+public class StudentOperateLogCloudServiceClient extends AbstractCloudClientSupport implements StudentOperateLogCloudService {
+
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -4293348178071328505L;
+
+
+	@Override
+	public CleanStudentOperateLogResp clean() {
+		return post("studentOperate/clean", null, CleanStudentOperateLogResp.class);
+	}
+}

+ 8 - 0
examcloud-core-reports-api/src/main/java/cn/com/qmth/examcloud/core/reports/api/StudentOperateLogCloudService.java

@@ -0,0 +1,8 @@
+package cn.com.qmth.examcloud.core.reports.api;
+
+import cn.com.qmth.examcloud.api.commons.CloudService;
+import cn.com.qmth.examcloud.core.reports.api.response.CleanStudentOperateLogResp;
+
+public interface StudentOperateLogCloudService extends CloudService {
+	CleanStudentOperateLogResp clean();
+}

+ 13 - 0
examcloud-core-reports-api/src/main/java/cn/com/qmth/examcloud/core/reports/api/response/CleanStudentOperateLogResp.java

@@ -0,0 +1,13 @@
+package cn.com.qmth.examcloud.core.reports.api.response;
+
+import cn.com.qmth.examcloud.api.commons.exchange.BaseResponse;
+
+public class CleanStudentOperateLogResp extends BaseResponse {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -2721159456957757724L;
+
+
+}

+ 25 - 0
examcloud-global-api/src/main/java/cn/com/qmth/examcloud/global/api/request/SyncExamStudentReq.java

@@ -136,6 +136,16 @@ public class SyncExamStudentReq extends SyncBaseRequest {
 	 */
 	private String ext5;
 
+	/**
+	 * 场次id
+	 */
+	private Long examStageId;
+
+	/**
+	 * 场次号
+	 */
+	private Integer examStageOrder;
+
 	public Long getId() {
 		return id;
 	}
@@ -352,4 +362,19 @@ public class SyncExamStudentReq extends SyncBaseRequest {
 		this.ext5 = ext5;
 	}
 
+	public Long getExamStageId() {
+		return examStageId;
+	}
+
+	public void setExamStageId(Long examStageId) {
+		this.examStageId = examStageId;
+	}
+
+	public Integer getExamStageOrder() {
+		return examStageOrder;
+	}
+
+	public void setExamStageOrder(Integer examStageOrder) {
+		this.examStageOrder = examStageOrder;
+	}
 }

+ 25 - 0
examcloud-task-api/src/main/java/cn/com/qmth/examcloud/task/api/request/SyncExamStudentReq.java

@@ -136,6 +136,16 @@ public class SyncExamStudentReq extends SyncBaseRequest {
 	 */
 	private String ext5;
 
+	/**
+	 * 场次id
+	 */
+	private Long examStageId;
+
+	/**
+	 * 场次号
+	 */
+	private Integer examStageOrder;
+
 	public Long getId() {
 		return id;
 	}
@@ -352,4 +362,19 @@ public class SyncExamStudentReq extends SyncBaseRequest {
 		this.ext5 = ext5;
 	}
 
+	public Long getExamStageId() {
+		return examStageId;
+	}
+
+	public void setExamStageId(Long examStageId) {
+		this.examStageId = examStageId;
+	}
+
+	public Integer getExamStageOrder() {
+		return examStageOrder;
+	}
+
+	public void setExamStageOrder(Integer examStageOrder) {
+		this.examStageOrder = examStageOrder;
+	}
 }