|
@@ -9,6 +9,7 @@ import cn.com.qmth.examcloud.api.commons.security.bean.UserDataRule;
|
|
|
import cn.com.qmth.examcloud.api.commons.security.bean.UserType;
|
|
|
import cn.com.qmth.examcloud.commons.exception.StatusException;
|
|
|
import cn.com.qmth.examcloud.commons.util.PathUtil;
|
|
|
+import cn.com.qmth.examcloud.commons.util.SqlUtil;
|
|
|
import cn.com.qmth.examcloud.core.basic.api.CourseCloudService;
|
|
|
import cn.com.qmth.examcloud.core.basic.api.OrgCloudService;
|
|
|
import cn.com.qmth.examcloud.core.basic.api.StudentCloudService;
|
|
@@ -45,7 +46,6 @@ import io.swagger.annotations.ApiOperation;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.data.domain.Page;
|
|
|
-import org.springframework.data.domain.PageImpl;
|
|
|
import org.springframework.data.domain.PageRequest;
|
|
|
import org.springframework.data.domain.Sort;
|
|
|
import org.springframework.data.domain.Sort.Direction;
|
|
@@ -60,12 +60,6 @@ import java.util.ArrayList;
|
|
|
import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
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.Stream;
|
|
|
|
|
@@ -182,16 +176,15 @@ public class ExamStudentController extends ControllerSupport {
|
|
|
@RequestParam(required = false) String infoCollector,
|
|
|
@RequestParam(required = false) BooleanSelect enable,
|
|
|
@RequestParam(required = false) Boolean withStarted,
|
|
|
- @RequestParam(required = false, defaultValue = "false") Boolean skipRule) throws InterruptedException {
|
|
|
+ @RequestParam(required = false, defaultValue = "false") Boolean skipRule) {
|
|
|
|
|
|
User accessUser = getAccessUser();
|
|
|
- PageRequest pageable = PageRequest.of(curPage, pageSize, Sort.by(Direction.DESC, "updateTime", "id"));
|
|
|
|
|
|
UserDataRule orgDataRule = super.getUserDataRule(DataRuleType.ORG);
|
|
|
UserDataRule courseDataRule = super.getUserDataRule(DataRuleType.COURSE);
|
|
|
if (!skipRule) {
|
|
|
if (orgDataRule.assertEmptyQueryResult() || courseDataRule.assertEmptyQueryResult()) {
|
|
|
- return new PageInfo(new PageImpl<>(new ArrayList<>(), pageable, 0L));
|
|
|
+ return new PageInfo(Page.empty());
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -219,44 +212,43 @@ public class ExamStudentController extends ControllerSupport {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (null != examStageId) {
|
|
|
- predicates.add(cb.equal(root.get("examStageId"), examStageId));
|
|
|
+ if (StringUtils.isNotBlank(identityNumber)) {
|
|
|
+ final Boolean queryLike = (identityNumberLike == null) ? true : identityNumberLike;
|
|
|
+ if (queryLike) {
|
|
|
+ predicates.add(cb.like(root.get("identityNumber"), toSqlRightLike(identityNumber)));
|
|
|
+ } else {
|
|
|
+ predicates.add(cb.equal(root.get("identityNumber"), identityNumber));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtils.isNotBlank(studentCode)) {
|
|
|
+ predicates.add(cb.like(root.get("studentCode"), SqlUtil.toSqlRightLike(studentCode)));
|
|
|
}
|
|
|
+
|
|
|
if (StringUtils.isNotEmpty(studentName)) {
|
|
|
- predicates.add(cb.like(root.get("name"), toSqlSearchPattern(studentName)));
|
|
|
+ predicates.add(cb.like(root.get("name"), SqlUtil.toSqlSearchPattern(studentName)));
|
|
|
}
|
|
|
- if (StringUtils.isNotBlank(studentCode)) {
|
|
|
- predicates.add(cb.like(root.get("studentCode"), toSqlRightLike(studentCode)));
|
|
|
+
|
|
|
+ if (null != examStageId) {
|
|
|
+ predicates.add(cb.equal(root.get("examStageId"), examStageId));
|
|
|
}
|
|
|
+
|
|
|
if (StringUtils.isNotEmpty(courseCode)) {
|
|
|
predicates.add(cb.equal(root.get("courseCode"), courseCode));
|
|
|
}
|
|
|
+
|
|
|
if (StringUtils.isNotEmpty(courseLevel)) {
|
|
|
predicates.add(cb.equal(root.get("courseLevel"), courseLevel));
|
|
|
}
|
|
|
+
|
|
|
if (StringUtils.isNotEmpty(courseName)) {
|
|
|
predicates.add(cb.like(root.get("courseName"), toSqlSearchPattern(courseName)));
|
|
|
}
|
|
|
+
|
|
|
if (!StringUtils.isEmpty(examSite)) {
|
|
|
predicates.add(cb.like(root.get("examSite"), toSqlSearchPattern(examSite)));
|
|
|
}
|
|
|
|
|
|
- if (StringUtils.isNotBlank(identityNumber)) {
|
|
|
- final Boolean queryLike = (identityNumberLike == null) ? true : identityNumberLike;
|
|
|
- if (queryLike) {
|
|
|
- predicates.add(cb.like(root.get("identityNumber"), toSqlRightLike(identityNumber)));
|
|
|
- } else {
|
|
|
- predicates.add(cb.equal(root.get("identityNumber"), identityNumber));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (null != enable) {
|
|
|
- Boolean enableBoolean = enable.getBoolean();
|
|
|
- if (null != enableBoolean) {
|
|
|
- predicates.add(cb.equal(root.get("enable"), enableBoolean));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
if (StringUtils.isNotEmpty(specialtyName)) {
|
|
|
predicates.add(cb.like(root.get("specialtyName"), toSqlSearchPattern(specialtyName)));
|
|
|
}
|
|
@@ -265,106 +257,102 @@ public class ExamStudentController extends ControllerSupport {
|
|
|
predicates.add(cb.like(root.get("infoCollector"), toSqlSearchPattern(infoCollector)));
|
|
|
}
|
|
|
|
|
|
+ if (null != enable && null != enable.getBoolean()) {
|
|
|
+ predicates.add(cb.equal(root.get("enable"), enable.getBoolean()));
|
|
|
+ }
|
|
|
+
|
|
|
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
|
|
|
};
|
|
|
|
|
|
- Page<ExamStudentEntity> examStudents = examStudentRepo.findAll(specification, pageable);
|
|
|
-
|
|
|
- List<ExamStudentDomain> ret = Lists.newArrayList();
|
|
|
-
|
|
|
- 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);
|
|
|
- }
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ 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不正确");
|
|
|
}
|
|
|
|
|
|
- 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());
|
|
|
+ if (examStageEntity.getEnable() == false) {
|
|
|
+ throw new StatusException("005002", "场次被禁用,请重新选择场次");
|
|
|
}
|
|
|
- bean.setExamStageId(cur.getExamStageId());
|
|
|
- ret.add(bean);
|
|
|
- latch.countDown();
|
|
|
- };
|
|
|
- service.execute(runnable);
|
|
|
|
|
|
+ bean.setExamStageOrder(examStageEntity.getStageOrder());
|
|
|
+ bean.setStartTime(examStageEntity.getStartTime());
|
|
|
+ bean.setEndTime(examStageEntity.getEndTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ bean.setExamStageId(cur.getExamStageId());
|
|
|
+ examStudents.add(bean);
|
|
|
}
|
|
|
- latch.await();
|
|
|
- return new PageInfo<>(examStudents, ret);
|
|
|
+
|
|
|
+ return new PageInfo<>(page, examStudents);
|
|
|
}
|
|
|
|
|
|
/**
|