|
@@ -60,6 +60,12 @@ import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.Collections;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Locale;
|
|
import java.util.Locale;
|
|
|
|
+import java.util.concurrent.ArrayBlockingQueue;
|
|
|
|
+import java.util.concurrent.CountDownLatch;
|
|
|
|
+import java.util.concurrent.ExecutorService;
|
|
|
|
+import java.util.concurrent.Executors;
|
|
|
|
+import java.util.concurrent.ThreadPoolExecutor;
|
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Stream;
|
|
import java.util.stream.Stream;
|
|
|
|
|
|
@@ -176,7 +182,7 @@ public class ExamStudentController extends ControllerSupport {
|
|
@RequestParam(required = false) String infoCollector,
|
|
@RequestParam(required = false) String infoCollector,
|
|
@RequestParam(required = false) BooleanSelect enable,
|
|
@RequestParam(required = false) BooleanSelect enable,
|
|
@RequestParam(required = false) Boolean withStarted,
|
|
@RequestParam(required = false) Boolean withStarted,
|
|
- @RequestParam(required = false, defaultValue = "false") Boolean skipRule) {
|
|
|
|
|
|
+ @RequestParam(required = false, defaultValue = "false") Boolean skipRule) throws InterruptedException {
|
|
|
|
|
|
User accessUser = getAccessUser();
|
|
User accessUser = getAccessUser();
|
|
PageRequest pageable = PageRequest.of(curPage, pageSize, Sort.by(Direction.DESC, "updateTime", "id"));
|
|
PageRequest pageable = PageRequest.of(curPage, pageSize, Sort.by(Direction.DESC, "updateTime", "id"));
|
|
@@ -266,90 +272,99 @@ public class ExamStudentController extends ControllerSupport {
|
|
|
|
|
|
List<ExamStudentDomain> ret = Lists.newArrayList();
|
|
List<ExamStudentDomain> ret = Lists.newArrayList();
|
|
|
|
|
|
- for (ExamStudentEntity cur : examStudents) {
|
|
|
|
- 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);
|
|
|
|
- }
|
|
|
|
|
|
+ ExecutorService service = new ThreadPoolExecutor(6, 10, 1000, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(10), Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());
|
|
|
|
+ final CountDownLatch latch = new CountDownLatch(examStudents.getContent().size());
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ for (ExamStudentEntity cur : examStudents) {
|
|
|
|
+ Runnable runnable = () -> {
|
|
|
|
+ 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);
|
|
|
|
+ }
|
|
|
|
|
|
- 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.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.setExamSite(cur.getExamSite());
|
|
|
|
- bean.setExamType(exam.getExamType().name());
|
|
|
|
- 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
|
|
|
|
- // 当作隐私模式下的身份证号
|
|
|
|
- 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) {
|
|
|
|
- throw new StatusException("005001", "场次id不正确");
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- if (examStageEntity.getEnable() == false) {
|
|
|
|
- throw new StatusException("005002", "场次被禁用,请重新选择场次");
|
|
|
|
|
|
+ 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.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.setExamSite(cur.getExamSite());
|
|
|
|
+ bean.setExamType(exam.getExamType().name());
|
|
|
|
+ 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
|
|
|
|
+ // 当作隐私模式下的身份证号
|
|
|
|
+ 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) {
|
|
|
|
+ throw new StatusException("005001", "场次id不正确");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (examStageEntity.getEnable() == false) {
|
|
|
|
+ throw new StatusException("005002", "场次被禁用,请重新选择场次");
|
|
|
|
+ }
|
|
|
|
+ bean.setExamStageOrder(examStageEntity.getStageOrder());
|
|
|
|
+ bean.setStartTime(examStageEntity.getStartTime());
|
|
|
|
+ bean.setEndTime(examStageEntity.getEndTime());
|
|
}
|
|
}
|
|
- bean.setExamStageOrder(examStageEntity.getStageOrder());
|
|
|
|
- bean.setStartTime(examStageEntity.getStartTime());
|
|
|
|
- bean.setEndTime(examStageEntity.getEndTime());
|
|
|
|
- }
|
|
|
|
- bean.setExamStageId(cur.getExamStageId());
|
|
|
|
- ret.add(bean);
|
|
|
|
|
|
+ bean.setExamStageId(cur.getExamStageId());
|
|
|
|
+ ret.add(bean);
|
|
|
|
+ latch.countDown();
|
|
|
|
+ };
|
|
|
|
+ service.execute(runnable);
|
|
|
|
+
|
|
}
|
|
}
|
|
- return new PageInfo<ExamStudentDomain>(examStudents, ret);
|
|
|
|
|
|
+ latch.await();
|
|
|
|
+ return new PageInfo<>(examStudents, ret);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|