|
@@ -15,11 +15,9 @@ import cn.com.qmth.examcloud.core.basic.api.OrgCloudService;
|
|
|
import cn.com.qmth.examcloud.core.basic.api.StudentCloudService;
|
|
|
import cn.com.qmth.examcloud.core.basic.api.bean.OrgBean;
|
|
|
import cn.com.qmth.examcloud.core.basic.api.bean.StudentBean;
|
|
|
-import cn.com.qmth.examcloud.core.basic.api.request.GetOrgReq;
|
|
|
-import cn.com.qmth.examcloud.core.basic.api.request.GetStudentReq;
|
|
|
+import cn.com.qmth.examcloud.core.basic.api.request.GetOrgMapsReq;
|
|
|
+import cn.com.qmth.examcloud.core.basic.api.request.GetStudentMapsReq;
|
|
|
import cn.com.qmth.examcloud.core.basic.api.request.SaveStudentReq;
|
|
|
-import cn.com.qmth.examcloud.core.basic.api.response.GetOrgResp;
|
|
|
-import cn.com.qmth.examcloud.core.basic.api.response.GetStudentResp;
|
|
|
import cn.com.qmth.examcloud.core.basic.api.response.SaveStudentResp;
|
|
|
import cn.com.qmth.examcloud.core.examwork.api.controller.bean.ExamStudentDomain;
|
|
|
import cn.com.qmth.examcloud.core.examwork.dao.ExamRepo;
|
|
@@ -28,6 +26,8 @@ import cn.com.qmth.examcloud.core.examwork.dao.ExamStudentRepo;
|
|
|
import cn.com.qmth.examcloud.core.examwork.dao.entity.ExamEntity;
|
|
|
import cn.com.qmth.examcloud.core.examwork.dao.entity.ExamStageEntity;
|
|
|
import cn.com.qmth.examcloud.core.examwork.dao.entity.ExamStudentEntity;
|
|
|
+import cn.com.qmth.examcloud.core.examwork.service.ExamService;
|
|
|
+import cn.com.qmth.examcloud.core.examwork.service.ExamStageService;
|
|
|
import cn.com.qmth.examcloud.core.examwork.service.ExamStudentService;
|
|
|
import cn.com.qmth.examcloud.core.examwork.service.bean.ExamStudentInfo;
|
|
|
import cn.com.qmth.examcloud.core.oe.admin.api.ExamRecordCloudService;
|
|
@@ -56,10 +56,7 @@ import org.springframework.web.bind.annotation.*;
|
|
|
import javax.persistence.criteria.Predicate;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
import java.io.File;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Collections;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Locale;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
@@ -80,6 +77,9 @@ public class ExamStudentController extends ControllerSupport {
|
|
|
@Autowired
|
|
|
ExamRepo examRepo;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ ExamService examService;
|
|
|
+
|
|
|
@Autowired
|
|
|
StudentCloudService studentCloudService;
|
|
|
|
|
@@ -95,6 +95,9 @@ public class ExamStudentController extends ControllerSupport {
|
|
|
@Autowired
|
|
|
ExamStageRepo examStageRepo;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ ExamStageService examStageService;
|
|
|
+
|
|
|
/**
|
|
|
* 方法注释
|
|
|
*
|
|
@@ -267,88 +270,112 @@ public class ExamStudentController extends ControllerSupport {
|
|
|
PageRequest pageable = PageRequest.of(curPage, pageSize, Sort.by(Direction.DESC, "id", "updateTime"));
|
|
|
Page<ExamStudentEntity> page = examStudentRepo.findAll(specification, pageable);
|
|
|
|
|
|
- List<ExamStudentDomain> examStudents = Lists.newArrayList();
|
|
|
- for (ExamStudentEntity cur : page) {
|
|
|
- ExamEntity exam = GlobalHelper.getEntity(examRepo, cur.getExamId(), ExamEntity.class);
|
|
|
-
|
|
|
- GetOrgReq getOrgReq = new GetOrgReq();
|
|
|
- getOrgReq.setOrgId(cur.getOrgId());
|
|
|
- GetOrgResp getOrgResp = orgCloudService.getOrg(getOrgReq);
|
|
|
- OrgBean org = getOrgResp.getOrg();
|
|
|
-
|
|
|
- GetStudentReq getStudentReq = new GetStudentReq();
|
|
|
- getStudentReq.setRootOrgId(accessUser.getRootOrgId());
|
|
|
- getStudentReq.setIdentityNumber(cur.getIdentityNumber());
|
|
|
- GetStudentResp getStudentResp = studentCloudService.getStudent(getStudentReq);
|
|
|
- StudentBean studentBean = getStudentResp.getStudentInfo();
|
|
|
-
|
|
|
- Boolean started = null;
|
|
|
- if (null != withStarted && withStarted) {
|
|
|
- CheckExamIsStartedReq checkExamIsStartedReq = new CheckExamIsStartedReq();
|
|
|
- checkExamIsStartedReq.setExamId(exam.getId());
|
|
|
- checkExamIsStartedReq.setCourseId(cur.getCourseId());
|
|
|
- checkExamIsStartedReq.setStudentId(studentBean.getId());
|
|
|
- checkExamIsStartedReq.setExamId(exam.getId());
|
|
|
- try {
|
|
|
- CheckExamIsStartedResp checkExamIsStartedResp = examRecordCloudService
|
|
|
- .checkExamIsStarted(checkExamIsStartedReq);
|
|
|
- started = checkExamIsStartedResp.getIsStarted();
|
|
|
- } catch (Exception e) {
|
|
|
- LOGGER.error("fail to invoke remote method: checkExamIsStarted()", e);
|
|
|
- }
|
|
|
+ if (!page.hasContent()) {
|
|
|
+ return new PageInfo(Page.empty());
|
|
|
+ }
|
|
|
+
|
|
|
+ Set<Long> orgIds = new HashSet<>(), examIds = new HashSet<>(), examStageIds = new HashSet<>(), studentIds = new HashSet<>();
|
|
|
+ for (ExamStudentEntity entity : page.getContent()) {
|
|
|
+ orgIds.add(entity.getOrgId());
|
|
|
+ examIds.add(entity.getExamId());
|
|
|
+ studentIds.add(entity.getStudentId());
|
|
|
+ if (entity.getExamStageId() != null) {
|
|
|
+ examStageIds.add(entity.getExamStageId());
|
|
|
}
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取考试信息列表
|
|
|
+ Map<Long, ExamEntity> examMaps = examService.getExamMapsByIds(examIds);
|
|
|
+
|
|
|
+ // 获取场次信息列表
|
|
|
+ Map<Long, ExamStageEntity> examStageMaps = examStageService.getExamStageMapsByIds(examStageIds);
|
|
|
+
|
|
|
+ // 获取机构信息列表
|
|
|
+ GetOrgMapsReq orgMapsReq = new GetOrgMapsReq();
|
|
|
+ orgMapsReq.setOrgIds(orgIds);
|
|
|
+ Map<Long, OrgBean> orgMaps = orgCloudService.getOrgMaps(orgMapsReq).getOrgMaps();
|
|
|
+
|
|
|
+ // 获取学生信息列表
|
|
|
+ GetStudentMapsReq studentMapsReq = new GetStudentMapsReq();
|
|
|
+ studentMapsReq.setStudentIds(studentIds);
|
|
|
+ Map<Long, StudentBean> studentMaps = studentCloudService.getStudentMaps(studentMapsReq).getStudentMaps();
|
|
|
+
|
|
|
+ List<ExamStudentDomain> examStudents = new ArrayList<>();
|
|
|
+ for (ExamStudentEntity cur : page.getContent()) {
|
|
|
+ ExamEntity exam = examMaps.get(cur.getExamId());
|
|
|
+ OrgBean org = orgMaps.get(cur.getOrgId());
|
|
|
+ StudentBean student = studentMaps.get(cur.getStudentId());
|
|
|
|
|
|
ExamStudentDomain bean = new ExamStudentDomain();
|
|
|
bean.setRootOrgId(cur.getRootOrgId());
|
|
|
bean.setId(cur.getId());
|
|
|
- bean.setExamId(exam.getId());
|
|
|
- bean.setExamName(exam.getName());
|
|
|
bean.setStudentId(cur.getStudentId());
|
|
|
bean.setStudentName(cur.getName());
|
|
|
bean.setStudentCode(cur.getStudentCode());
|
|
|
bean.setIdentityNumber(cur.getIdentityNumber());
|
|
|
+
|
|
|
+ bean.setPhone(student.getPhoneNumber());
|
|
|
+ bean.setPhotoPath(student.getPhotoPath());
|
|
|
+
|
|
|
+ bean.setOrgId(cur.getOrgId());
|
|
|
+ bean.setOrgCode(org.getCode());
|
|
|
+ bean.setOrgName(org.getName());
|
|
|
+
|
|
|
+ bean.setExamId(cur.getExamId());
|
|
|
+ bean.setExamName(exam.getName());
|
|
|
+ bean.setExamType(exam.getExamType().name());
|
|
|
+ bean.setLocked(exam.getExamStudentLocked() == null ? false : exam.getExamStudentLocked());
|
|
|
+
|
|
|
bean.setCourseId(cur.getCourseId());
|
|
|
bean.setCourseCode(cur.getCourseCode());
|
|
|
bean.setCourseName(cur.getCourseName());
|
|
|
bean.setCourseLevel(cur.getCourseLevel());
|
|
|
- bean.setInfoCollector(cur.getInfoCollector());
|
|
|
- bean.setOrgId(cur.getOrgId());
|
|
|
- bean.setOrgCode(org.getCode());
|
|
|
- bean.setOrgName(org.getName());
|
|
|
+
|
|
|
bean.setPaperType(cur.getPaperType());
|
|
|
- bean.setPhone(studentBean.getPhoneNumber());
|
|
|
- bean.setGrade(cur.getGrade());
|
|
|
bean.setSpecialtyName(cur.getSpecialtyName());
|
|
|
+ bean.setGrade(cur.getGrade());
|
|
|
bean.setExamSite(cur.getExamSite());
|
|
|
- bean.setExamType(exam.getExamType().name());
|
|
|
+ bean.setInfoCollector(cur.getInfoCollector());
|
|
|
bean.setUpdateTime(cur.getUpdateTime());
|
|
|
bean.setEnable(cur.getEnable());
|
|
|
- bean.setLocked(null == exam.getExamStudentLocked() ? false : exam.getExamStudentLocked());
|
|
|
- bean.setStarted(started);
|
|
|
- bean.setPhotoPath(studentBean.getPhotoPath());
|
|
|
|
|
|
bean.setExt1(cur.getExt1());
|
|
|
- bean.setExt2(IdentityNumberHelper.conceal(cur.getRootOrgId(), cur.getIdentityNumber()));//特殊处理:把ext2
|
|
|
- // 当作隐私模式下的身份证号
|
|
|
+ // 特殊处理:把ext2当作隐私模式下的身份证号
|
|
|
+ bean.setExt2(IdentityNumberHelper.conceal(cur.getRootOrgId(), cur.getIdentityNumber()));
|
|
|
bean.setExt3(cur.getExt3());
|
|
|
bean.setExt4(cur.getExt4());
|
|
|
bean.setExt5(cur.getExt5());
|
|
|
- if (null != cur.getExamStageId()) {
|
|
|
- ExamStageEntity examStageEntity = GlobalHelper.getEntity(examStageRepo, cur.getExamStageId(), ExamStageEntity.class);
|
|
|
- if (null == examStageEntity) {
|
|
|
+
|
|
|
+ if (cur.getExamStageId() != null) {
|
|
|
+ ExamStageEntity examStage = examStageMaps.get(cur.getExamStageId());
|
|
|
+ if (examStage == null) {
|
|
|
throw new StatusException("005001", "场次id不正确");
|
|
|
}
|
|
|
|
|
|
- if (examStageEntity.getEnable() == false) {
|
|
|
+ if (!examStage.getEnable()) {
|
|
|
throw new StatusException("005002", "场次被禁用,请重新选择场次");
|
|
|
}
|
|
|
|
|
|
- bean.setExamStageOrder(examStageEntity.getStageOrder());
|
|
|
- bean.setStartTime(examStageEntity.getStartTime());
|
|
|
- bean.setEndTime(examStageEntity.getEndTime());
|
|
|
+ bean.setExamStageId(cur.getExamStageId());
|
|
|
+ bean.setExamStageOrder(examStage.getStageOrder());
|
|
|
+ bean.setStartTime(examStage.getStartTime());
|
|
|
+ bean.setEndTime(examStage.getEndTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (withStarted != null && withStarted) {
|
|
|
+ CheckExamIsStartedReq checkReq = new CheckExamIsStartedReq();
|
|
|
+ checkReq.setExamId(cur.getExamId());
|
|
|
+ checkReq.setCourseId(cur.getCourseId());
|
|
|
+ checkReq.setStudentId(cur.getStudentId());
|
|
|
+ try {
|
|
|
+ // todo 优化
|
|
|
+ CheckExamIsStartedResp checkResp = examRecordCloudService.checkExamIsStarted(checkReq);
|
|
|
+ bean.setStarted(checkResp.getIsStarted());
|
|
|
+ } catch (Exception e) {
|
|
|
+ LOGGER.warn("checkExamIsStarted fail..." + e.getMessage(), e);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- bean.setExamStageId(cur.getExamStageId());
|
|
|
examStudents.add(bean);
|
|
|
}
|
|
|
|