|
@@ -1,25 +1,32 @@
|
|
|
package com.qmth.distributed.print.business.templete.service.impl;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
-import com.qmth.distributed.print.business.entity.ExamPrintPlan;
|
|
|
+import com.qmth.distributed.print.business.entity.ExamStudent;
|
|
|
import com.qmth.distributed.print.business.entity.TSyncExamStudentScore;
|
|
|
-import com.qmth.distributed.print.business.service.ExamPrintPlanService;
|
|
|
+import com.qmth.distributed.print.business.service.ExamStudentService;
|
|
|
import com.qmth.distributed.print.business.service.TSyncExamStudentScoreService;
|
|
|
import com.qmth.distributed.print.business.templete.service.PushLogicService;
|
|
|
import com.qmth.teachcloud.common.bean.result.SyncCountResult;
|
|
|
import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
|
import com.qmth.teachcloud.common.entity.BasicClazz;
|
|
|
-import com.qmth.teachcloud.common.entity.SysOrg;
|
|
|
+import com.qmth.teachcloud.common.entity.BasicMajor;
|
|
|
+import com.qmth.teachcloud.common.entity.BasicStudent;
|
|
|
import com.qmth.teachcloud.common.entity.SysUser;
|
|
|
-import com.qmth.teachcloud.common.service.*;
|
|
|
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
|
|
|
+import com.qmth.teachcloud.common.service.BasicClazzService;
|
|
|
+import com.qmth.teachcloud.common.service.BasicMajorService;
|
|
|
+import com.qmth.teachcloud.common.service.BasicStudentService;
|
|
|
+import com.qmth.teachcloud.common.service.SysUserService;
|
|
|
import com.qmth.teachcloud.common.sync.StmmsUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.util.LinkedMultiValueMap;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
|
|
/**
|
|
|
* @Description: 同步推送处理逻辑接口实现类
|
|
@@ -33,26 +40,23 @@ public class PushLogicServiceImpl implements PushLogicService {
|
|
|
@Resource
|
|
|
private SysUserService sysUserService;
|
|
|
|
|
|
- @Resource
|
|
|
- private SysUserRoleService sysUserRoleService;
|
|
|
-
|
|
|
@Resource
|
|
|
StmmsUtils stmmsUtils;
|
|
|
|
|
|
@Resource
|
|
|
- private PushUserTrackService pushUserTrackService;
|
|
|
+ BasicClazzService basicClazzService;
|
|
|
|
|
|
@Resource
|
|
|
- SysOrgService sysOrgService;
|
|
|
+ TSyncExamStudentScoreService tSyncExamStudentScoreService;
|
|
|
|
|
|
@Resource
|
|
|
- BasicClazzService basicClazzService;
|
|
|
+ BasicStudentService basicStudentService;
|
|
|
|
|
|
@Resource
|
|
|
- ExamPrintPlanService examPrintPlanService;
|
|
|
+ ExamStudentService examStudentService;
|
|
|
|
|
|
@Resource
|
|
|
- TSyncExamStudentScoreService tSyncExamStudentScoreService;
|
|
|
+ BasicMajorService basicMajorService;
|
|
|
|
|
|
@Override
|
|
|
public Map<String, Object> executeUserPushLogic(Map<String, Object> map) throws IllegalAccessException {
|
|
@@ -77,82 +81,77 @@ public class PushLogicServiceImpl implements PushLogicService {
|
|
|
public Map<String, Object> executeScorePushLogic(Map<String, Object> map) throws Exception {
|
|
|
SysUser sysUser = (SysUser) map.get(SystemConstant.USER);
|
|
|
Long schoolId = sysUser.getSchoolId();
|
|
|
- Integer examId = (Integer) map.get("examId");
|
|
|
- Long examIdLong = Long.parseLong(String.valueOf(examId));
|
|
|
- String subjectCode = (String) map.get("subjectCode");
|
|
|
- String college = (String) map.get("college");
|
|
|
- String className = (String) map.get("className");
|
|
|
- List<TSyncExamStudentScore> tSyncExamStudentScoreList = null;
|
|
|
- List<String> errorTSyncExamStudentScoreList = null;
|
|
|
+ LinkedMultiValueMap<Long, Integer> semesterExamIdMap = (LinkedMultiValueMap<Long, Integer>) map.get("semesterExamIdMap");
|
|
|
+ List<TSyncExamStudentScore> tSyncExamStudentScoreList = new ArrayList<>();
|
|
|
+ List<String> errorTSyncExamStudentScoreList = new ArrayList<>();
|
|
|
+ AtomicInteger count = new AtomicInteger(0);
|
|
|
try {
|
|
|
- int totalCount = stmmsUtils.getStudentCount(schoolId, examId, null, null, null, subjectCode, college, className, null, true);
|
|
|
- log.info("云阅卷:考试成绩考生数量查询接口调用,返回数量:{}", totalCount);
|
|
|
- if (totalCount > 0) {
|
|
|
- int pageSize = stmmsUtils.getDefaultPageSize();
|
|
|
- int mod = totalCount % pageSize;
|
|
|
- int pageNos = mod == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
|
|
|
- Map<String, SysOrg> orgMap = new HashMap<>();
|
|
|
- Map<String, BasicClazz> clazzMap = new HashMap<>();
|
|
|
- Long semesterId = examPrintPlanService.getOne(new QueryWrapper<ExamPrintPlan>().lambda().eq(ExamPrintPlan::getThirdRelateId, examIdLong)).getSemesterId();
|
|
|
- tSyncExamStudentScoreList = new ArrayList<>();
|
|
|
- errorTSyncExamStudentScoreList = new ArrayList<>();
|
|
|
- for (int i = 1; i <= pageNos; i++) {
|
|
|
- List<Map> students = stmmsUtils.getStudentScore(schoolId, examId, null, null, null, subjectCode, college, className, null, true, i, pageSize);
|
|
|
- for (Map student : students) {
|
|
|
- try {
|
|
|
- Long orgId = null, clazzId = null, majorId = null;
|
|
|
- if (Objects.nonNull(student.get("college")) && Objects.equals("无", student.get("college"))) {
|
|
|
- //查学院id
|
|
|
- if (!orgMap.containsKey(student.get("college"))) {
|
|
|
- SysOrg sysOrg = sysOrgService.getOne(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getSchoolId, schoolId).eq(SysOrg::getName, student.get("college")));
|
|
|
- if (Objects.nonNull(sysOrg)) {
|
|
|
- orgId = sysOrg.getId();
|
|
|
- orgMap.put(sysOrg.getName(), sysOrg);
|
|
|
+ semesterExamIdMap.forEach((k, v) -> {
|
|
|
+ for (Integer examId : v) {
|
|
|
+ int totalCount = stmmsUtils.getStudentCount(schoolId, examId, null, null, null, null, null, null, null, true);
|
|
|
+ count.set(count.get() + totalCount);
|
|
|
+ log.info("云阅卷:考试成绩考生数量查询接口调用,返回数量:{}", totalCount);
|
|
|
+ if (totalCount > 0) {
|
|
|
+ int pageSize = stmmsUtils.getDefaultPageSize();
|
|
|
+ int mod = totalCount % pageSize;
|
|
|
+ int pageNos = mod == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
|
|
|
+ for (int i = 1; i <= pageNos; i++) {
|
|
|
+ List<Map> students = stmmsUtils.getStudentScore(schoolId, examId, null, null, null, null, null, null, null, true, i, pageSize);
|
|
|
+ for (Map student : students) {
|
|
|
+ try {
|
|
|
+ Long orgId = null, clazzId = null, majorId = null;
|
|
|
+ if (Objects.nonNull(student.get("studentCode")) && !Objects.equals("无", student.get("studentCode"))) {
|
|
|
+ //先查学生表
|
|
|
+ QueryWrapper<BasicStudent> basicStudentQueryWrapper = new QueryWrapper<>();
|
|
|
+ basicStudentQueryWrapper.lambda().eq(BasicStudent::getSchoolId, sysUser.getSchoolId())
|
|
|
+ .eq(BasicStudent::getStudentCode, student.get("studentCode"));
|
|
|
+ BasicStudent basicStudent = basicStudentService.getOne(basicStudentQueryWrapper);
|
|
|
+ if (Objects.isNull(basicStudent)) {//如果学生表为空,则查考生表
|
|
|
+ QueryWrapper<ExamStudent> examStudentQueryWrapper = new QueryWrapper<>();
|
|
|
+ examStudentQueryWrapper.lambda().eq(ExamStudent::getSchoolId, sysUser.getSchoolId())
|
|
|
+ .eq(ExamStudent::getStudentCode, student.get("studentCode"));
|
|
|
+ ExamStudent examStudent = examStudentService.getOne(examStudentQueryWrapper);
|
|
|
+ Optional.ofNullable(examStudent).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未找到此考生信息"));
|
|
|
+ clazzId = Long.parseLong(examStudent.getClazzId());
|
|
|
+ if (Objects.nonNull(clazzId)) {
|
|
|
+ BasicClazz basicClazz = basicClazzService.getById(clazzId);
|
|
|
+ if (Objects.nonNull(basicClazz)) {
|
|
|
+ majorId = basicClazz.getMajorId();
|
|
|
+ BasicMajor basicMajor = basicMajorService.getById(majorId);
|
|
|
+ orgId = basicMajor.getBelongOrgId();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ orgId = basicStudent.getBelongOrgId();
|
|
|
+ clazzId = basicStudent.getClazzId();
|
|
|
+ majorId = basicStudent.getMajorId();
|
|
|
+ }
|
|
|
}
|
|
|
- } else {
|
|
|
- orgId = orgMap.get(student.get("college")).getId();
|
|
|
+ student.put(SystemConstant.SCHOOL_ID, schoolId);
|
|
|
+ student.put("semesterId", k);
|
|
|
+ student.put("orgId", orgId);
|
|
|
+ student.put("clazzId", clazzId);
|
|
|
+ student.put("majorId", majorId);
|
|
|
+ student.put("userId", sysUser.getId());
|
|
|
+ tSyncExamStudentScoreList.add(new TSyncExamStudentScore(student));
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.info("同步学生成绩信息失败:{}", e.getMessage());
|
|
|
+ e.printStackTrace();
|
|
|
+ errorTSyncExamStudentScoreList.add(student.get("name") + "," + student.get("examNumber") + "\r\n");
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- if (Objects.nonNull(student.get("className")) && Objects.equals("无", student.get("className"))) {
|
|
|
- //查班级和专业id
|
|
|
- if (!clazzMap.containsKey(student.get("className"))) {
|
|
|
- BasicClazz basicClazz = basicClazzService.getOne(new QueryWrapper<BasicClazz>().lambda().eq(BasicClazz::getSchoolId, schoolId).eq(BasicClazz::getClazzName, student.get("className")));
|
|
|
- if (Objects.nonNull(basicClazz)) {
|
|
|
- clazzId = basicClazz.getId();
|
|
|
- majorId = basicClazz.getMajorId();
|
|
|
- clazzMap.put(basicClazz.getClazzName(), basicClazz);
|
|
|
- }
|
|
|
- } else {
|
|
|
- clazzId = clazzMap.get(student.get("className")).getId();
|
|
|
- majorId = clazzMap.get(student.get("className")).getMajorId();
|
|
|
- }
|
|
|
- }
|
|
|
- student.put(SystemConstant.SCHOOL_ID, schoolId);
|
|
|
- student.put("semesterId", semesterId);
|
|
|
- student.put("orgId", orgId);
|
|
|
- student.put("clazzId", clazzId);
|
|
|
- student.put("majorId", majorId);
|
|
|
- student.put("userId", sysUser.getId());
|
|
|
- tSyncExamStudentScoreList.add(new TSyncExamStudentScore(student));
|
|
|
- } catch (Exception e) {
|
|
|
- log.info("同步学生成绩信息失败:{}", e.getMessage());
|
|
|
- e.printStackTrace();
|
|
|
- errorTSyncExamStudentScoreList.add(student.get("name") + "," + student.get("examNumber") + "\r\n");
|
|
|
+ }
|
|
|
+ if (tSyncExamStudentScoreList.size() > 0) {
|
|
|
+ tSyncExamStudentScoreService.remove(new QueryWrapper<TSyncExamStudentScore>().lambda().eq(TSyncExamStudentScore::getSchoolId, schoolId).eq(TSyncExamStudentScore::getExamId, Long.parseLong(String.valueOf(examId))));
|
|
|
+ tSyncExamStudentScoreService.saveOrUpdateBatch(tSyncExamStudentScoreList);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- if (tSyncExamStudentScoreList.size() > 0) {
|
|
|
- tSyncExamStudentScoreService.remove(new QueryWrapper<TSyncExamStudentScore>().lambda().eq(TSyncExamStudentScore::getSchoolId, schoolId).eq(TSyncExamStudentScore::getExamId, examIdLong));
|
|
|
- tSyncExamStudentScoreService.saveOrUpdateBatch(tSyncExamStudentScoreList);
|
|
|
- }
|
|
|
- }
|
|
|
- map.computeIfAbsent("count", v -> totalCount);
|
|
|
- List<TSyncExamStudentScore> finalTSyncExamStudentScoreList = tSyncExamStudentScoreList;
|
|
|
- map.computeIfAbsent("correct", v -> finalTSyncExamStudentScoreList.size());
|
|
|
+ });
|
|
|
+ map.computeIfAbsent("count", e -> count.get());
|
|
|
+ map.computeIfAbsent("correct", e -> tSyncExamStudentScoreList.size());
|
|
|
if (Objects.nonNull(errorTSyncExamStudentScoreList) && errorTSyncExamStudentScoreList.size() > 0) {
|
|
|
- List<String> finalErrorTSyncExamStudentScoreList = errorTSyncExamStudentScoreList;
|
|
|
- map.computeIfAbsent("error", v -> "未同步成功数据" + finalErrorTSyncExamStudentScoreList.size() + "条:\r\n" + finalErrorTSyncExamStudentScoreList.toString());
|
|
|
+ map.computeIfAbsent("error", e -> "未同步成功数据" + errorTSyncExamStudentScoreList.size() + "条:\r\n" + errorTSyncExamStudentScoreList.toString());
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
log.info("云阅卷:接口调用失败:{}", e.getMessage());
|