deason 4 anni fa
parent
commit
506a5c19f3

+ 110 - 122
examcloud-core-examwork-api-provider/src/main/java/cn/com/qmth/examcloud/core/examwork/api/controller/ExamStudentController.java

@@ -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);
     }
 
     /**