|
@@ -9,7 +9,6 @@ import com.qmth.distributed.print.business.bean.dto.SyncExamStudentDto;
|
|
|
import com.qmth.distributed.print.business.bean.dto.SyncExamTaskDto;
|
|
|
import com.qmth.distributed.print.business.bean.marking.GroupInfo;
|
|
|
import com.qmth.distributed.print.business.bean.marking.Marker;
|
|
|
-import com.qmth.distributed.print.business.bean.params.SyncDataParam;
|
|
|
import com.qmth.distributed.print.business.entity.*;
|
|
|
import com.qmth.distributed.print.business.enums.ExamPaperStructureStatusEnum;
|
|
|
import com.qmth.distributed.print.business.enums.ExamTaskSyncStatusEnum;
|
|
@@ -99,33 +98,27 @@ public class DataSyncServiceImpl implements DataSyncService {
|
|
|
|
|
|
@Async
|
|
|
@Override
|
|
|
- public void syncExamAndStudentAndCard(Long thirdRelateId, String thirdRelateName, String examTime, TBSyncTask tbSyncTask, SysUser sysUser) {
|
|
|
-
|
|
|
- // 同步初始参数
|
|
|
- TaskResultEnum result = null;
|
|
|
- TaskStatusEnum status;
|
|
|
- String errorMessage = null;
|
|
|
- Long schoolId = tbSyncTask.getSchoolId();
|
|
|
- Long objectId = tbSyncTask.getObjectId();
|
|
|
- SyncDataParam syncDataParam = JSON.parseObject(tbSyncTask.getRemark(), SyncDataParam.class);
|
|
|
- Integer thirdRelateOrgId = null;
|
|
|
-
|
|
|
- // 各步骤状态
|
|
|
- try {
|
|
|
- // 同步中
|
|
|
- status = TaskStatusEnum.RUNNING;
|
|
|
- tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), null, status, null, null);
|
|
|
-
|
|
|
- // 按学院code进行分组,并按学院进行循环同步
|
|
|
- Map<String, List<SyncExamTaskDto>> byCollegeCodeMap = syncDataParam.getList().stream().collect(Collectors.groupingBy(SyncExamTaskDto::getCollegeCode));
|
|
|
- for (Map.Entry<String, List<SyncExamTaskDto>> entry : byCollegeCodeMap.entrySet()) {
|
|
|
- // 本行为,若为按学校同步,则后续方法都传null,方便校验
|
|
|
- String orgCode = cloudMarkingTaskUtils.isCollegeMode(schoolId) ? entry.getKey() : null;
|
|
|
+ public void syncExamAndStudentAndCard(String orgCode, String thirdRelateName, String examTime, List<TBSyncTask> tbSyncTaskList, SysUser sysUser) {
|
|
|
+ for (TBSyncTask tbSyncTask : tbSyncTaskList) {
|
|
|
+ // 同步初始参数
|
|
|
+ TaskResultEnum result = null;
|
|
|
+ TaskStatusEnum status;
|
|
|
+ String errorMessage = null;
|
|
|
+ Long schoolId = tbSyncTask.getSchoolId();
|
|
|
+ Long objectId = tbSyncTask.getObjectId();
|
|
|
+ SyncExamTaskDto syncExamTaskDto = JSON.parseObject(tbSyncTask.getRemark(), SyncExamTaskDto.class);
|
|
|
+ Long thirdRelateId = null;
|
|
|
+
|
|
|
+ // 各步骤状态
|
|
|
+ try {
|
|
|
+ // 同步中
|
|
|
+ status = TaskStatusEnum.RUNNING;
|
|
|
+ tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), null, status, null, null);
|
|
|
|
|
|
if (StringUtils.isNotBlank(orgCode)) {
|
|
|
SysOrg byCode = sysOrgService.findByCode(schoolId, orgCode);
|
|
|
// 同步机构
|
|
|
- thirdRelateOrgId = saveSchool(schoolId, thirdRelateOrgId, orgCode, byCode.getName());
|
|
|
+ saveSchool(schoolId, orgCode, byCode.getName());
|
|
|
}
|
|
|
// 查询本地库中云阅卷考试Id是否存在
|
|
|
TSyncStmmsExam tSyncStmmsExam = tSyncStmmsExamService.getBySchoolIdAndOrgCodeAndExamName(schoolId, orgCode, thirdRelateName);
|
|
@@ -133,90 +126,86 @@ public class DataSyncServiceImpl implements DataSyncService {
|
|
|
thirdRelateId = Long.valueOf(tSyncStmmsExam.getExamId());
|
|
|
}
|
|
|
|
|
|
- //按课程做同步
|
|
|
- for (SyncExamTaskDto param : syncDataParam.getList()) {
|
|
|
- // 前置方法已经校验过各课程下是否有学院代码
|
|
|
- // 同步考试
|
|
|
- thirdRelateId = saveExam(schoolId, objectId, orgCode, thirdRelateId, thirdRelateName, examTime);
|
|
|
+ // 前置方法已经校验过各课程下是否有学院代码
|
|
|
+ // 同步考试
|
|
|
+ thirdRelateId = saveExam(schoolId, objectId, orgCode, thirdRelateId, thirdRelateName, examTime);
|
|
|
|
|
|
- Long examTaskId = Long.valueOf(param.getExamTaskId());
|
|
|
- ExamTask examTask = examTaskService.getById(examTaskId);
|
|
|
+ Long examTaskId = Long.valueOf(syncExamTaskDto.getExamTaskId());
|
|
|
+ ExamTask examTask = examTaskService.getById(examTaskId);
|
|
|
|
|
|
- for (String paperType : param.getPaperType().split(",")) {
|
|
|
- ExamTaskSync examTaskSync = examTaskSyncService.getBySchoolIdAndOrgCodeAndPaperNumberAndPaperType(schoolId, examTask.getExamId(), orgCode, examTask.getPaperNumber(), paperType);
|
|
|
- if (examTaskSync != null && ExamTaskSyncStatusEnum.STARTING.equals(examTaskSync.getSyncStatus())) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("任务中有课程正在同步中,请刷新列表查看最新状态");
|
|
|
- }
|
|
|
- ExamTaskSyncStatusEnum syncStatus = ExamTaskSyncStatusEnum.STARTING;
|
|
|
-
|
|
|
- if (examTaskSync == null) {
|
|
|
- examTaskSync = new ExamTaskSync(schoolId, examTask.getExamId(), examTask.getCourseCode(), examTask.getPaperNumber(), paperType, param.getPaperType(), orgCode, Math.toIntExact(thirdRelateId), syncStatus, sysUser.getId(), System.currentTimeMillis(), null);
|
|
|
+ for (String paperType : syncExamTaskDto.getPaperType().split(",")) {
|
|
|
+ ExamTaskSync examTaskSync = examTaskSyncService.getBySchoolIdAndOrgCodeAndPaperNumberAndPaperType(schoolId, examTask.getExamId(), orgCode, examTask.getPaperNumber(), paperType);
|
|
|
+ if (examTaskSync != null && ExamTaskSyncStatusEnum.STARTING.equals(examTaskSync.getSyncStatus())) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("任务中有课程正在同步,请刷新列表查看最新状态");
|
|
|
+ }
|
|
|
+ ExamTaskSyncStatusEnum syncStatus = ExamTaskSyncStatusEnum.STARTING;
|
|
|
+ if (examTaskSync == null) {
|
|
|
+ examTaskSync = new ExamTaskSync(schoolId, examTask.getExamId(), examTask.getCourseCode(), examTask.getPaperNumber(), paperType, syncExamTaskDto.getPaperType(), orgCode, Math.toIntExact(thirdRelateId), syncStatus, sysUser.getId(), System.currentTimeMillis(), null);
|
|
|
+ } else {
|
|
|
+ examTaskSync.setThirdRelateId(Math.toIntExact(thirdRelateId));
|
|
|
+ examTaskSync.setSyncStatus(syncStatus);
|
|
|
+ examTaskSync.setSyncStartTime(System.currentTimeMillis());
|
|
|
+ examTaskSync.setSyncUserId(sysUser.getId());
|
|
|
+ examTaskSync.setErrorMsg(null);
|
|
|
+ }
|
|
|
+ examTaskSyncService.saveOrUpdate(examTaskSync);
|
|
|
+
|
|
|
+ String errorMsg = null;
|
|
|
+ ExamTaskSyncStatusEnum taskSyncStatusEnum = null;
|
|
|
+ try {
|
|
|
+ List<Long> printPlanIds = Arrays.asList(syncExamTaskDto.getPrintPlanIds().split(",")).stream().map(m -> Long.parseLong(m)).collect(Collectors.toList());
|
|
|
+ List<ExamDetailCourseDto> examDetailCourseList = examDetailCourseService.listByPrintPlanIdAndExamTaskId(printPlanIds, examTaskId, paperType);
|
|
|
+ // 同步考生
|
|
|
+ List<SyncExamStudentDto> syncExamStudentDtoList = examStudentService.listStudentByExamDetailCourseId(examDetailCourseList, paperType);
|
|
|
+
|
|
|
+ // 没有考生就单独推送科目
|
|
|
+ if (CollectionUtils.isEmpty(syncExamStudentDtoList)) {
|
|
|
+ for (ExamDetailCourseDto examDetailCourseDto : examDetailCourseList) {
|
|
|
+ // 只同步当前卷型
|
|
|
+ saveSubject(schoolId, thirdRelateId, examDetailCourseDto.getCourseCode(), examDetailCourseDto.getCourseName(), examDetailCourseDto.getSequence(), paperType);
|
|
|
+ }
|
|
|
} else {
|
|
|
- examTaskSync.setThirdRelateId(Math.toIntExact(thirdRelateId));
|
|
|
- examTaskSync.setSyncStatus(syncStatus);
|
|
|
- examTaskSync.setSyncStartTime(System.currentTimeMillis());
|
|
|
- examTaskSync.setSyncUserId(sysUser.getId());
|
|
|
- examTaskSync.setErrorMsg(null);
|
|
|
- }
|
|
|
- examTaskSyncService.saveOrUpdate(examTaskSync);
|
|
|
-
|
|
|
- String errorMsg = null;
|
|
|
- ExamTaskSyncStatusEnum taskSyncStatusEnum = null;
|
|
|
- try {
|
|
|
- List<Long> printPlanIds = Arrays.asList(param.getPrintPlanIds().split(",")).stream().map(m -> Long.parseLong(m)).collect(Collectors.toList());
|
|
|
- List<ExamDetailCourseDto> examDetailCourseList = examDetailCourseService.listByPrintPlanIdAndExamTaskId(printPlanIds, examTaskId, paperType);
|
|
|
- // 同步考生
|
|
|
- List<SyncExamStudentDto> syncExamStudentDtoList = examStudentService.listStudentByExamDetailCourseId(examDetailCourseList, paperType);
|
|
|
-
|
|
|
- // 没有考生就单独推送科目
|
|
|
- if (CollectionUtils.isEmpty(syncExamStudentDtoList)) {
|
|
|
- for (ExamDetailCourseDto examDetailCourseDto : examDetailCourseList) {
|
|
|
- // 只同步当前卷型
|
|
|
- saveSubject(schoolId, thirdRelateId, examDetailCourseDto.getCourseCode(), examDetailCourseDto.getCourseName(), examDetailCourseDto.getSequence(), paperType);
|
|
|
- }
|
|
|
- } else {
|
|
|
- long count = syncExamStudentDtoList.stream().filter(m -> StringUtils.isBlank(m.getPaperType())).count();
|
|
|
- if (count > 0) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("部分学生未关联试卷类型,数量[" + count + "]");
|
|
|
- }
|
|
|
- // 同步考生
|
|
|
- saveStudent(schoolId, thirdRelateId, syncExamStudentDtoList);
|
|
|
+ long count = syncExamStudentDtoList.stream().filter(m -> StringUtils.isBlank(m.getPaperType())).count();
|
|
|
+ if (count > 0) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("部分学生未关联试卷类型,数量[" + count + "]");
|
|
|
}
|
|
|
-
|
|
|
- // 同步题卡
|
|
|
- // 同步题卡(只上传当前卷型)
|
|
|
- cardUpload(schoolId, thirdRelateId, examTask, paperType);
|
|
|
- } catch (Exception e) {
|
|
|
- errorMsg = e.getMessage();
|
|
|
- taskSyncStatusEnum = ExamTaskSyncStatusEnum.FAIL;
|
|
|
- } finally {
|
|
|
- examTaskSync.setErrorMsg(errorMsg);
|
|
|
- taskSyncStatusEnum = taskSyncStatusEnum == null ? ExamTaskSyncStatusEnum.FINISH : taskSyncStatusEnum;
|
|
|
- examTaskSync.setSyncStatus(taskSyncStatusEnum);
|
|
|
+ // 同步考生
|
|
|
+ saveStudent(schoolId, thirdRelateId, syncExamStudentDtoList);
|
|
|
}
|
|
|
- examTaskSync.setSyncEndTime(System.currentTimeMillis());
|
|
|
- examTaskSyncService.saveOrUpdate(examTaskSync);
|
|
|
|
|
|
- if (StringUtils.isNotBlank(errorMsg)) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception(errorMsg);
|
|
|
- }
|
|
|
+ // 同步题卡
|
|
|
+ // 同步题卡(只上传当前卷型)
|
|
|
+ cardUpload(schoolId, thirdRelateId, examTask, paperType);
|
|
|
+ } catch (Exception e) {
|
|
|
+ errorMsg = e.getMessage();
|
|
|
+ taskSyncStatusEnum = ExamTaskSyncStatusEnum.FAIL;
|
|
|
+ } finally {
|
|
|
+ examTaskSync.setErrorMsg(errorMsg);
|
|
|
+ taskSyncStatusEnum = taskSyncStatusEnum == null ? ExamTaskSyncStatusEnum.FINISH : taskSyncStatusEnum;
|
|
|
+ examTaskSync.setSyncStatus(taskSyncStatusEnum);
|
|
|
+ }
|
|
|
+ examTaskSync.setSyncEndTime(System.currentTimeMillis());
|
|
|
+ examTaskSyncService.saveOrUpdate(examTaskSync);
|
|
|
+
|
|
|
+ if (StringUtils.isNotBlank(errorMsg)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception(errorMsg);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- // 任务结果
|
|
|
- result = TaskResultEnum.SUCCESS;
|
|
|
- } catch (Exception e) {
|
|
|
- result = TaskResultEnum.ERROR;
|
|
|
- errorMessage = e.getMessage();
|
|
|
- } finally {
|
|
|
- // 同步结束
|
|
|
- status = TaskStatusEnum.FINISH;
|
|
|
- tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), thirdRelateId, status, result, errorMessage);
|
|
|
+ // 任务结果
|
|
|
+ result = TaskResultEnum.SUCCESS;
|
|
|
+ } catch (Exception e) {
|
|
|
+ result = TaskResultEnum.ERROR;
|
|
|
+ errorMessage = e.getMessage();
|
|
|
+ } finally {
|
|
|
+ // 同步结束
|
|
|
+ status = TaskStatusEnum.FINISH;
|
|
|
+ tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), thirdRelateId, status, result, errorMessage);
|
|
|
|
|
|
- // 同步成功,发送短信
|
|
|
+ // 同步成功,发送短信
|
|
|
// if (ExamPrintPlanSyncStatusEnum.FINISH.equals(syncStatus)) {
|
|
|
// examPrintPlanService.sendNoticeUploadStructure(printPlanId, sysUser);
|
|
|
// }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -477,6 +466,9 @@ public class DataSyncServiceImpl implements DataSyncService {
|
|
|
if (m.containsKey("type")) {
|
|
|
syncStructureData.setType(ObjectiveTypeEnum.getByType(m.getInteger("type")));
|
|
|
}
|
|
|
+ if (m.containsKey("objectivePolicy")) {
|
|
|
+ syncStructureData.setObjectivePolicy(m.getString("objectivePolicy"));
|
|
|
+ }
|
|
|
return syncStructureData;
|
|
|
}).collect(Collectors.toList());
|
|
|
cloudMarkingTaskUtils.syncPaperStructure(schoolId, examId, subjectCode, true, null, syncObjectiveStructureDatas);
|
|
@@ -565,20 +557,15 @@ public class DataSyncServiceImpl implements DataSyncService {
|
|
|
/**
|
|
|
* 创建考试
|
|
|
*
|
|
|
- * @param schoolId 学校ID
|
|
|
- * @param thirdRelateOrgId 学院ID
|
|
|
- * @param orgCode 学院代码
|
|
|
- * @param orgName 学院名称
|
|
|
+ * @param schoolId 学校ID
|
|
|
+ * @param orgCode 学院代码
|
|
|
+ * @param orgName 学院名称
|
|
|
*/
|
|
|
@Override
|
|
|
- public Integer saveSchool(Long schoolId, Integer thirdRelateOrgId, String orgCode, String orgName) {
|
|
|
- if (StringUtils.isBlank(orgCode)) {
|
|
|
- return null;
|
|
|
- }
|
|
|
+ public Integer saveSchool(Long schoolId, String orgCode, String orgName) {
|
|
|
+ Integer thirdRelateOrgId;
|
|
|
try {
|
|
|
- if (Objects.isNull(thirdRelateOrgId)) {
|
|
|
- thirdRelateOrgId = cloudMarkingTaskUtils.syncSchool(schoolId, orgCode, orgName);
|
|
|
- }
|
|
|
+ thirdRelateOrgId = cloudMarkingTaskUtils.syncSchool(schoolId, orgCode, orgName);
|
|
|
} catch (Exception e) {
|
|
|
throw ExceptionResultEnum.ERROR.exception(e.getMessage());
|
|
|
}
|
|
@@ -586,10 +573,9 @@ public class DataSyncServiceImpl implements DataSyncService {
|
|
|
UpdateWrapper<SysOrg> updateWrapper = new UpdateWrapper<>();
|
|
|
updateWrapper.lambda().set(SysOrg::getThirdRelateId, thirdRelateOrgId)
|
|
|
.eq(SysOrg::getSchoolId, schoolId)
|
|
|
- .eq(SysOrg::getCode, orgCode)
|
|
|
- .isNull(SysOrg::getThirdRelateId);
|
|
|
+ .eq(SysOrg::getCode, orgCode);
|
|
|
} catch (Exception e) {
|
|
|
- log.error("保存云阅卷机构数据失败。");
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("保存云阅卷机构数据失败");
|
|
|
}
|
|
|
return thirdRelateOrgId;
|
|
|
}
|
|
@@ -604,13 +590,13 @@ public class DataSyncServiceImpl implements DataSyncService {
|
|
|
* @param thirdRelateName 云阅卷考试名称
|
|
|
* @param examTime 考试时间
|
|
|
*/
|
|
|
+ @Override
|
|
|
public Long saveExam(Long schoolId, Long objectId, String orgCode, Long thirdRelateId, String thirdRelateName, String examTime) {
|
|
|
try {
|
|
|
if (Objects.isNull(thirdRelateId)) {
|
|
|
String code = String.valueOf(objectId);
|
|
|
thirdRelateId = cloudMarkingTaskUtils.syncExam(schoolId, code, thirdRelateName, examTime, orgCode);
|
|
|
}
|
|
|
-
|
|
|
} catch (Exception e) {
|
|
|
throw ExceptionResultEnum.ERROR.exception(e.getMessage());
|
|
|
}
|
|
@@ -628,7 +614,7 @@ public class DataSyncServiceImpl implements DataSyncService {
|
|
|
tSyncStmmsExamService.save(tSyncStmmsExam);
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
- log.error("保存云阅卷考试数据失败。页面上可刷新从云阅卷系统获取考试列表。");
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("保存云阅卷考试数据失败");
|
|
|
}
|
|
|
return thirdRelateId;
|
|
|
}
|