|
@@ -1,23 +1,38 @@
|
|
|
package com.qmth.teachcloud.data.service.impl;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
import com.qmth.distributed.print.business.bean.params.SysAdminSetParam;
|
|
|
+import com.qmth.distributed.print.business.service.BasicExamStudentService;
|
|
|
+import com.qmth.distributed.print.business.service.BasicMessageService;
|
|
|
import com.qmth.distributed.print.business.service.ExamTaskService;
|
|
|
import com.qmth.teachcloud.common.bean.sync.*;
|
|
|
+import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
|
+import com.qmth.teachcloud.common.entity.BasicSchool;
|
|
|
+import com.qmth.teachcloud.common.entity.SysConfig;
|
|
|
import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
|
|
|
+import com.qmth.teachcloud.common.enums.MessageEnum;
|
|
|
import com.qmth.teachcloud.common.service.BasicCourseService;
|
|
|
+import com.qmth.teachcloud.common.service.CommonCacheService;
|
|
|
import com.qmth.teachcloud.common.service.SysOrgService;
|
|
|
import com.qmth.teachcloud.common.service.SysUserService;
|
|
|
import com.qmth.teachcloud.data.DataUtil;
|
|
|
import com.qmth.teachcloud.data.entity.TSyncData;
|
|
|
+import com.qmth.teachcloud.common.bean.sync.TSyncDataStudent;
|
|
|
+import com.qmth.teachcloud.data.enums.DataType;
|
|
|
import com.qmth.teachcloud.data.service.DataService;
|
|
|
import com.qmth.teachcloud.data.service.TSyncDataLogService;
|
|
|
+import com.qmth.teachcloud.data.service.TSyncDataStudentService;
|
|
|
import com.qmth.teachcloud.data.util.JdbcUtil;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.StringJoiner;
|
|
|
|
|
|
@Service
|
|
|
public class DataServiceImpl implements DataService {
|
|
@@ -27,13 +42,21 @@ public class DataServiceImpl implements DataService {
|
|
|
@Resource
|
|
|
private TSyncDataLogService tSyncDataLogService;
|
|
|
@Resource
|
|
|
+ private TSyncDataStudentService tSyncDataStudentService;
|
|
|
+ @Resource
|
|
|
private BasicCourseService basicCourseService;
|
|
|
@Resource
|
|
|
+ private BasicExamStudentService basicExamStudentService;
|
|
|
+ @Resource
|
|
|
+ private CommonCacheService commonCacheService;
|
|
|
+ @Resource
|
|
|
private SysOrgService sysOrgService;
|
|
|
@Resource
|
|
|
private SysUserService sysUserService;
|
|
|
@Resource
|
|
|
private ExamTaskService examTaskService;
|
|
|
+ @Resource
|
|
|
+ private BasicMessageService basicMessageService;
|
|
|
|
|
|
@Override
|
|
|
public boolean testConnect(SysAdminSetParam sysAdminSetParam) {
|
|
@@ -55,81 +78,155 @@ public class DataServiceImpl implements DataService {
|
|
|
public void syncData(Long schoolId, Long examId, TSyncData syncData) {
|
|
|
JdbcTemplate jdbcTemplate = JdbcUtil.getJdbcTemplate(dataUtil.createDataSourceMap(schoolId));
|
|
|
String dataRange = syncData.getDataType();
|
|
|
+
|
|
|
+ SysConfig datasourceType = commonCacheService.addSysConfigCache(schoolId, SystemConstant.DATA_DATASOURCE_TYPE);
|
|
|
+ if (datasourceType == null || StringUtils.isBlank(datasourceType.getConfigValue())) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("未设置数据库类型");
|
|
|
+ }
|
|
|
+
|
|
|
+ boolean sendSms = false;
|
|
|
+ StringJoiner stringJoiner = new StringJoiner(";");
|
|
|
// 机构同步
|
|
|
- if (dataRange.contains("A")) {
|
|
|
- long startTime = System.currentTimeMillis();
|
|
|
- List<OrgDataVo> dataVoList = dataUtil.listOrg(jdbcTemplate);
|
|
|
- int count = dataVoList.size();
|
|
|
- String errorMsg = null;
|
|
|
- try {
|
|
|
- for (OrgDataVo orgDataVo : dataVoList) {
|
|
|
- sysOrgService.saveOrgFromSync(schoolId, orgDataVo);
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- count = 0;
|
|
|
- errorMsg = e.getMessage();
|
|
|
- } finally {
|
|
|
- long endTime = System.currentTimeMillis();
|
|
|
- tSyncDataLogService.saveLog(schoolId, examId, "A", startTime, endTime, count, errorMsg);
|
|
|
- }
|
|
|
+ if (dataRange.contains(DataType.A.name())) {
|
|
|
+ int count = syncOrg(jdbcTemplate, schoolId, examId, datasourceType.getConfigValue().toString());
|
|
|
+ stringJoiner.add(DataType.A.name() + ":" + count);
|
|
|
+ sendSms = count == 0 ? true : sendSms;
|
|
|
}
|
|
|
// 用户同步
|
|
|
- if (dataRange.contains("B")) {
|
|
|
- long startTime = System.currentTimeMillis();
|
|
|
- List<UserDataVo> dataVoList = dataUtil.listUser(jdbcTemplate);
|
|
|
- int count = dataVoList.size();
|
|
|
- String errorMsg = null;
|
|
|
- try {
|
|
|
- for (UserDataVo userDataVo : dataVoList) {
|
|
|
- sysUserService.saveUserFromSync(schoolId, userDataVo);
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- count = 0;
|
|
|
- errorMsg = e.getMessage();
|
|
|
- } finally {
|
|
|
- long endTime = System.currentTimeMillis();
|
|
|
- tSyncDataLogService.saveLog(schoolId, examId, "B", startTime, endTime, count, errorMsg);
|
|
|
- }
|
|
|
+ if (dataRange.contains(DataType.B.name())) {
|
|
|
+ int count = syncUser(jdbcTemplate, schoolId, examId, datasourceType.getConfigValue().toString());
|
|
|
+ stringJoiner.add(DataType.B.name() + ":" + count);
|
|
|
+ sendSms = count == 0 ? true : sendSms;
|
|
|
}
|
|
|
// 课程同步
|
|
|
- if (dataRange.contains("C")) {
|
|
|
- long startTime = System.currentTimeMillis();
|
|
|
- List<CourseDataVo> dataVoList = dataUtil.listCourse(jdbcTemplate);
|
|
|
- int count = dataVoList.size();
|
|
|
- String errorMsg = null;
|
|
|
- try {
|
|
|
- for (CourseDataVo courseDataVo : dataVoList) {
|
|
|
- basicCourseService.saveBasicCourseFormSync(schoolId, courseDataVo);
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- count = 0;
|
|
|
- errorMsg = e.getMessage();
|
|
|
- } finally {
|
|
|
- long endTime = System.currentTimeMillis();
|
|
|
- tSyncDataLogService.saveLog(schoolId, examId, "C", startTime, endTime, count, errorMsg);
|
|
|
- }
|
|
|
+ if (dataRange.contains(DataType.C.name())) {
|
|
|
+ int count = syncCourse(jdbcTemplate, schoolId, examId, datasourceType.getConfigValue().toString());
|
|
|
+ stringJoiner.add(DataType.C.name() + ":" + count);
|
|
|
+ sendSms = count == 0 ? true : sendSms;
|
|
|
}
|
|
|
// 考生同步
|
|
|
- if (dataRange.contains("D")) {
|
|
|
- List<ExamStudentDataVo> dataVoList = dataUtil.listExamStudent(jdbcTemplate);
|
|
|
+ if (dataRange.contains(DataType.D.name())) {
|
|
|
+ int count = syncStudent(jdbcTemplate, schoolId, examId, datasourceType.getConfigValue().toString());
|
|
|
+ stringJoiner.add(DataType.D.name() + ":" + count);
|
|
|
+ sendSms = count == 0 ? true : sendSms;
|
|
|
}
|
|
|
// 命题任务同步
|
|
|
- if (dataRange.contains("E")) {
|
|
|
- long startTime = System.currentTimeMillis();
|
|
|
- List<ExamTaskDataVo> dataVoList = dataUtil.listExamTask(jdbcTemplate);
|
|
|
- int count = dataVoList.size();
|
|
|
- String errorMsg = null;
|
|
|
- try {
|
|
|
- for (ExamTaskDataVo examTaskDataVo : dataVoList) {
|
|
|
- examTaskService.saveExamTaskFormSync(schoolId, examId, examTaskDataVo);
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- count = 0;
|
|
|
- errorMsg = e.getMessage();
|
|
|
- } finally {
|
|
|
- long endTime = System.currentTimeMillis();
|
|
|
- tSyncDataLogService.saveLog(schoolId, examId, "C", startTime, endTime, count, errorMsg);
|
|
|
+ if (dataRange.contains(DataType.E.name())) {
|
|
|
+ int count = syncExamTask(jdbcTemplate, schoolId, examId, datasourceType.getConfigValue().toString());
|
|
|
+ stringJoiner.add(DataType.E.name() + ":" + count);
|
|
|
+ sendSms = count == 0 ? true : sendSms;
|
|
|
+ }
|
|
|
+
|
|
|
+ syncData.setDetail(stringJoiner.toString());
|
|
|
+
|
|
|
+ // 有一个失败,发送短信
|
|
|
+ if (sendSms && StringUtils.isNotBlank(syncData.getPhoneNumber())) {
|
|
|
+ BasicSchool basicSchool = commonCacheService.schoolCache(schoolId);
|
|
|
+ Map<String, String> variableParams = new HashMap<>();
|
|
|
+ variableParams.put("schoolName", basicSchool.getName());
|
|
|
+ for (String phoneNumber : syncData.getPhoneNumber().split(",")) {
|
|
|
+ basicMessageService.saveMessageSendLog(schoolId, null, null, phoneNumber, JSON.toJSONString(variableParams), MessageEnum.NOTICE_SYNC_DATA);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ private int syncOrg(JdbcTemplate jdbcTemplate, Long schoolId, Long examId, String datasourceType) {
|
|
|
+ long startTime = System.currentTimeMillis();
|
|
|
+ List<OrgDataVo> dataVoList = dataUtil.listOrg(jdbcTemplate, DataType.A, datasourceType);
|
|
|
+ int count = dataVoList.size();
|
|
|
+ String errorMsg = null;
|
|
|
+ try {
|
|
|
+ for (OrgDataVo orgDataVo : dataVoList) {
|
|
|
+ sysOrgService.saveOrgFromSync(schoolId, orgDataVo);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ count = 0;
|
|
|
+ errorMsg = e.getMessage();
|
|
|
+ } finally {
|
|
|
+ long endTime = System.currentTimeMillis();
|
|
|
+ tSyncDataLogService.saveLog(schoolId, examId, DataType.A.name(), startTime, endTime, count, errorMsg);
|
|
|
+ }
|
|
|
+ return count;
|
|
|
+ }
|
|
|
+
|
|
|
+ private int syncUser(JdbcTemplate jdbcTemplate, Long schoolId, Long examId, String datasourceType) {
|
|
|
+ long startTime = System.currentTimeMillis();
|
|
|
+ List<UserDataVo> dataVoList = dataUtil.listUser(jdbcTemplate, DataType.B, datasourceType);
|
|
|
+ int count = dataVoList.size();
|
|
|
+ String errorMsg = null;
|
|
|
+ try {
|
|
|
+ for (UserDataVo userDataVo : dataVoList) {
|
|
|
+ sysUserService.saveUserFromSync(schoolId, userDataVo);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ count = 0;
|
|
|
+ errorMsg = e.getMessage();
|
|
|
+ } finally {
|
|
|
+ long endTime = System.currentTimeMillis();
|
|
|
+ tSyncDataLogService.saveLog(schoolId, examId, DataType.B.name(), startTime, endTime, count, errorMsg);
|
|
|
+ }
|
|
|
+ return count;
|
|
|
+ }
|
|
|
+
|
|
|
+ private int syncCourse(JdbcTemplate jdbcTemplate, Long schoolId, Long examId, String datasourceType) {
|
|
|
+ long startTime = System.currentTimeMillis();
|
|
|
+ List<CourseDataVo> dataVoList = dataUtil.listCourse(jdbcTemplate, DataType.C, datasourceType);
|
|
|
+ int count = dataVoList.size();
|
|
|
+ String errorMsg = null;
|
|
|
+ try {
|
|
|
+ for (CourseDataVo courseDataVo : dataVoList) {
|
|
|
+ basicCourseService.saveBasicCourseFormSync(schoolId, courseDataVo);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ count = 0;
|
|
|
+ errorMsg = e.getMessage();
|
|
|
+ } finally {
|
|
|
+ long endTime = System.currentTimeMillis();
|
|
|
+ tSyncDataLogService.saveLog(schoolId, examId, DataType.C.name(), startTime, endTime, count, errorMsg);
|
|
|
+ }
|
|
|
+ return count;
|
|
|
+ }
|
|
|
+
|
|
|
+ private int syncStudent(JdbcTemplate jdbcTemplate, Long schoolId, Long examId, String datasourceType) {
|
|
|
+ long startTime = System.currentTimeMillis();
|
|
|
+ List<TSyncDataStudent> dataVoList = dataUtil.listExamStudent(jdbcTemplate, DataType.D, datasourceType);
|
|
|
+ int count = dataVoList.size();
|
|
|
+ String errorMsg = null;
|
|
|
+ try {
|
|
|
+ for (TSyncDataStudent tSyncDataStudent : dataVoList) {
|
|
|
+ tSyncDataStudent.setId(SystemConstant.getDbUuid());
|
|
|
+ tSyncDataStudent.setSchoolId(schoolId);
|
|
|
+ tSyncDataStudent.setExamId(examId);
|
|
|
+ }
|
|
|
+ tSyncDataStudentService.remove(new UpdateWrapper<TSyncDataStudent>().lambda().eq(TSyncDataStudent::getSchoolId, schoolId).eq(TSyncDataStudent::getExamId, examId));
|
|
|
+ tSyncDataStudentService.saveBatch(dataVoList, 2000);
|
|
|
+ basicExamStudentService.saveBasicExamStudentFormSync(schoolId, examId, dataVoList);
|
|
|
+ } catch (Exception e) {
|
|
|
+ count = 0;
|
|
|
+ errorMsg = e.getMessage();
|
|
|
+ } finally {
|
|
|
+ long endTime = System.currentTimeMillis();
|
|
|
+ tSyncDataLogService.saveLog(schoolId, examId, DataType.D.name(), startTime, endTime, count, errorMsg);
|
|
|
+ }
|
|
|
+ return count;
|
|
|
+ }
|
|
|
+
|
|
|
+ private int syncExamTask(JdbcTemplate jdbcTemplate, Long schoolId, Long examId, String datasourceType) {
|
|
|
+ long startTime = System.currentTimeMillis();
|
|
|
+ List<ExamTaskDataVo> dataVoList = dataUtil.listExamTask(jdbcTemplate, DataType.E, datasourceType);
|
|
|
+ int count = dataVoList.size();
|
|
|
+ String errorMsg = null;
|
|
|
+ try {
|
|
|
+ for (ExamTaskDataVo examTaskDataVo : dataVoList) {
|
|
|
+ examTaskService.saveExamTaskFormSync(schoolId, examId, examTaskDataVo);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ count = 0;
|
|
|
+ errorMsg = e.getMessage();
|
|
|
+ } finally {
|
|
|
+ long endTime = System.currentTimeMillis();
|
|
|
+ tSyncDataLogService.saveLog(schoolId, examId, DataType.E.name(), startTime, endTime, count, errorMsg);
|
|
|
+ }
|
|
|
+ return count;
|
|
|
+ }
|
|
|
}
|