瀏覽代碼

识别结果检查

xiatian 22 小時之前
父節點
當前提交
5f5903c9f6

+ 38 - 26
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/ExamStudentSearchQuery.java

@@ -32,7 +32,9 @@ public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
     @ApiModelProperty(value = "姓名")
     private String name;
 
-    private String examNumberIn;
+    // private String examNumberIn;
+    @ApiModelProperty(value = "准考证号数组")
+    private List<String> examNumbers;
 
     @ApiModelProperty(value = "准考证号")
     private String examNumber;
@@ -91,9 +93,11 @@ public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
 
     private String campusNameIn;
 
-    private String subjectCodeIn;
+    @ApiModelProperty(value = "科目数组")
+    private List<String> subjectCodes;
 
-    private String examSiteIn;
+    @ApiModelProperty(value = "考点数组")
+    private List<String> examSites;
 
     private String campusNameNotIn;
 
@@ -345,13 +349,13 @@ public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
         this.maxUploadTime = maxUploadTime;
     }
 
-    public String getExamNumberIn() {
-        return examNumberIn;
-    }
-
-    public void setExamNumberIn(String examNumberIn) {
-        this.examNumberIn = examNumberIn;
-    }
+    // public String getExamNumberIn() {
+    // return examNumberIn;
+    // }
+    //
+    // public void setExamNumberIn(String examNumberIn) {
+    // this.examNumberIn = examNumberIn;
+    // }
 
     public Double getObjectiveScoreLt() {
         return objectiveScoreLt;
@@ -377,14 +381,6 @@ public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
         this.campusNameIn = campusNameIn;
     }
 
-    public String getSubjectCodeIn() {
-        return subjectCodeIn;
-    }
-
-    public void setSubjectCodeIn(String subjectCodeIn) {
-        this.subjectCodeIn = subjectCodeIn;
-    }
-
     public String getCampusNameNotIn() {
         return campusNameNotIn;
     }
@@ -517,14 +513,6 @@ public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
         this.examRoom = examRoom;
     }
 
-    public String getExamSiteIn() {
-        return examSiteIn;
-    }
-
-    public void setExamSiteIn(String examSiteIn) {
-        this.examSiteIn = examSiteIn;
-    }
-
     public String getExamSiteNotIn() {
         return examSiteNotIn;
     }
@@ -629,4 +617,28 @@ public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
         this.filter = filter;
     }
 
+    public List<String> getExamNumbers() {
+        return examNumbers;
+    }
+
+    public void setExamNumbers(List<String> examNumbers) {
+        this.examNumbers = examNumbers;
+    }
+
+    public List<String> getSubjectCodes() {
+        return subjectCodes;
+    }
+
+    public void setSubjectCodes(List<String> subjectCodes) {
+        this.subjectCodes = subjectCodes;
+    }
+
+    public List<String> getExamSites() {
+        return examSites;
+    }
+
+    public void setExamSites(List<String> examSites) {
+        this.examSites = examSites;
+    }
+
 }

+ 71 - 57
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamStudentServiceImpl.java

@@ -1,14 +1,69 @@
 package cn.com.qmth.stmms.biz.exam.service.impl;
 
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Expression;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.math.RandomUtils;
+import org.hibernate.SQLQuery;
+import org.hibernate.transform.Transformers;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Direction;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
 import cn.com.qmth.stmms.biz.exam.dao.ExamStudentDao;
-import cn.com.qmth.stmms.biz.exam.model.*;
+import cn.com.qmth.stmms.biz.exam.model.AnswerCard;
+import cn.com.qmth.stmms.biz.exam.model.Exam;
+import cn.com.qmth.stmms.biz.exam.model.ExamPackage;
+import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
+import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
+import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
+import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
-import cn.com.qmth.stmms.biz.exam.service.*;
+import cn.com.qmth.stmms.biz.exam.service.AnswerCardService;
+import cn.com.qmth.stmms.biz.exam.service.CheckStudentService;
+import cn.com.qmth.stmms.biz.exam.service.ExamPackageService;
+import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
+import cn.com.qmth.stmms.biz.exam.service.ExamService;
+import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
+import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
+import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
 import cn.com.qmth.stmms.biz.exception.StatusException;
 import cn.com.qmth.stmms.biz.mark.dao.HeaderTagDao;
 import cn.com.qmth.stmms.biz.mark.dao.HeaderTrackDao;
-import cn.com.qmth.stmms.biz.mark.model.*;
+import cn.com.qmth.stmms.biz.mark.model.HeaderTag;
+import cn.com.qmth.stmms.biz.mark.model.HeaderTrack;
+import cn.com.qmth.stmms.biz.mark.model.MarkConfigItem;
+import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
+import cn.com.qmth.stmms.biz.mark.model.MarkSpecialTag;
+import cn.com.qmth.stmms.biz.mark.model.MarkTrack;
+import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
 import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
 import cn.com.qmth.stmms.biz.mark.service.MarkSpecialTagService;
 import cn.com.qmth.stmms.biz.mark.service.MarkTrackService;
@@ -18,27 +73,6 @@ import cn.com.qmth.stmms.biz.utils.PictureTag;
 import cn.com.qmth.stmms.biz.utils.ScoreItem;
 import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.math.RandomUtils;
-import org.hibernate.SQLQuery;
-import org.hibernate.transform.Transformers;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Sort;
-import org.springframework.data.domain.Sort.Direction;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.Query;
-import javax.persistence.criteria.*;
-import java.math.BigDecimal;
-import java.text.DecimalFormat;
-import java.util.*;
-import java.util.Map.Entry;
-import java.util.stream.Collectors;
 
 @Service
 public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implements ExamStudentService {
@@ -588,15 +622,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
                 }
                 if (StringUtils.isNotBlank(query.getExamNumber())) {
                     predicates.add(cb.equal(root.get("examNumber"), query.getExamNumber()));
-                } else if (StringUtils.isNotBlank(query.getExamNumberIn())) {
-                    String[] list = query.getExamNumberIn().split(",");
-                    if (list.length > 0) {
-                        Predicate[] sub = new Predicate[list.length];
-                        for (int i = 0; i < list.length; i++) {
-                            sub[i] = cb.equal(root.get("examNumber"), list[i]);
-                        }
-                        predicates.add(cb.or(sub));
-                    }
+                } else if (query.getExamNumbers() != null && query.getExamNumbers().size() > 0) {
+                    predicates.add(root.get("examNumber").in(query.getExamNumbers()));
                 }
                 if (StringUtils.isNotEmpty(query.getSecretNumber())) {
                     predicates.add(cb.equal(root.get("secretNumber"), query.getSecretNumber()));
@@ -685,15 +712,13 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
                 if (query.getMaxUploadTime() != null) {
                     predicates.add(cb.lessThan(root.get("uploadTime").as(Date.class), query.getMaxUploadTime()));
                 }
-                if (StringUtils.isNotBlank(query.getSubjectCodeIn())) {
-                    String[] list = query.getSubjectCodeIn().split(",");
-                    if (list.length > 0) {
-                        Predicate[] sub = new Predicate[list.length];
-                        for (int i = 0; i < list.length; i++) {
-                            sub[i] = cb.equal(root.get("subjectCode"), list[i]);
-                        }
-                        predicates.add(cb.or(sub));
-                    }
+
+                if (query.getSubjectCodes() != null && query.getSubjectCodes().size() > 0) {
+                    predicates.add(root.get("subjectCode").in(query.getSubjectCodes()));
+                }
+
+                if (query.getExamSites() != null && query.getExamSites().size() > 0) {
+                    predicates.add(root.get("examSite").in(query.getExamSites()));
                 }
                 if (StringUtils.isNotBlank(query.getCampusNameIn())) {
                     String[] list = query.getCampusNameIn().split(",");
@@ -705,16 +730,6 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
                         predicates.add(cb.or(sub));
                     }
                 }
-                if (StringUtils.isNotBlank(query.getExamSiteIn())) {
-                    String[] list = query.getExamSiteIn().split(",");
-                    if (list.length > 0) {
-                        Predicate[] sub = new Predicate[list.length];
-                        for (int i = 0; i < list.length; i++) {
-                            sub[i] = cb.equal(root.get("examSite"), list[i]);
-                        }
-                        predicates.add(cb.or(sub));
-                    }
-                }
                 if (StringUtils.isNotBlank(query.getSubjectCodeNotIn())) {
                     String[] list = query.getSubjectCodeNotIn().split(",");
                     if (list.length > 0) {
@@ -1619,15 +1634,14 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         if (query.getUploadTimeNotNull() != null) {
             sql.append(" and s.upload_time is not null");
         }
-        if (StringUtils.isNotBlank(query.getSubjectCodeIn())) {
-            sql.append(
-                    " and s.subject_code in('" + StringUtils.join(query.getSubjectCodeIn().split(","), "','") + "')");
+        if (!CollectionUtils.isEmpty(query.getSubjectCodes())) {
+            sql.append(" and s.subject_code in('" + StringUtils.join(query.getSubjectCodes(), "','") + "')");
         }
         if (StringUtils.isNotBlank(query.getCampusNameIn())) {
             sql.append(" and s.campus_name in('" + StringUtils.join(query.getCampusNameIn().split(","), "','") + "')");
         }
-        if (StringUtils.isNotBlank(query.getExamSiteIn())) {
-            sql.append(" and s.exam_site in('" + StringUtils.join(query.getExamSiteIn().split(","), "','") + "')");
+        if (!CollectionUtils.isEmpty(query.getExamSites())) {
+            sql.append(" and s.exam_site in('" + StringUtils.join(query.getExamSites(), "','") + "')");
         }
         if (StringUtils.isNotBlank(query.getSubjectCodeNotIn())) {
             sql.append(" and s.subject_code not in('" + StringUtils.join(query.getSubjectCodeNotIn().split(","), "','")

+ 42 - 5
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/AnswerCheckController.java

@@ -1,6 +1,7 @@
 package cn.com.qmth.stmms.admin.exam;
 
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -14,6 +15,7 @@ import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
@@ -87,17 +89,52 @@ public class AnswerCheckController extends BaseExamController {
         query.setPageNumber(1);
         query.setPageSize(1000);
         query = studentService.findByQuery(query);
+        List<ExamStudent> ret = new ArrayList<>();
         while (query.getCurrentCount() > 0) {
-            for (ExamStudent student : query.getResult()) {
-                ids.add(student.getId());
-            }
+            ret.addAll(query.getResult());
             query.setPageNumber(query.getPageNumber() + 1);
             query = studentService.findByQuery(query);
         }
+        // 根据查询条件排序优先顺序 准考证号 科目代码 考点,只按一个排序
+        sort(ret, query);
+        for (ExamStudent student : ret) {
+            ids.add(student.getId());
+        }
         setting.accumulate("studentIds", ids);
         return setting;
     }
 
+    private void sort(List<ExamStudent> ret, ExamStudentSearchQuery query) {
+        if (!CollectionUtils.isEmpty(query.getExamNumbers())) {
+            ret.sort(Comparator.comparingInt(o -> {
+                for (int i = 0; i < query.getExamNumbers().size(); i++) {
+                    if (o.getExamNumber().equals(query.getExamNumbers().get(i))) {
+                        return i;
+                    }
+                }
+                return Integer.MAX_VALUE;
+            }));
+        } else if (!CollectionUtils.isEmpty(query.getSubjectCodes())) {
+            ret.sort(Comparator.comparingInt(o -> {
+                for (int i = 0; i < query.getSubjectCodes().size(); i++) {
+                    if (o.getSubjectCode().equals(query.getSubjectCodes().get(i))) {
+                        return i;
+                    }
+                }
+                return Integer.MAX_VALUE;
+            }));
+        } else if (!CollectionUtils.isEmpty(query.getExamSites())) {
+            ret.sort(Comparator.comparingInt(o -> {
+                for (int i = 0; i < query.getExamSites().size(); i++) {
+                    if (o.getExamSite().equals(query.getExamSites().get(i))) {
+                        return i;
+                    }
+                }
+                return Integer.MAX_VALUE;
+            }));
+        }
+    }
+
     @Logging(menu = "识别结果修改", type = LogType.UPDATE)
     @RequestMapping("/save")
     @ResponseBody
@@ -141,8 +178,8 @@ public class AnswerCheckController extends BaseExamController {
 
         JSONArray array = new JSONArray();
         Map<Integer, String> titles = new HashMap<Integer, String>();
-        List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjectiveAndPaperType(
-                student.getExamId(), student.getSubjectCode(), true, student.getPaperType());
+        List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjectiveAndPaperType(student.getExamId(),
+                student.getSubjectCode(), true, student.getPaperType());
         List<String> answers = student.getAnswerList();
         int questionCount = questions.size();
         int answerCount = answers.size();

+ 2 - 4
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ScoreController.java

@@ -77,8 +77,7 @@ public class ScoreController extends BaseExamController {
             query.setSubjectiveScore(0d);
         }
         if ((wu.isSubjectHeader() || wu.isSchoolViewer()) && StringUtils.isBlank(query.getSubjectCode())) {
-            String subjectCodeIn = StringUtils.join(wu.getSubjectCodeSet(), ",");
-            query.setSubjectCodeIn(subjectCodeIn);
+            query.setSubjectCodes(new ArrayList<>(wu.getSubjectCodeSet()));
         }
         query.setRole(wu.getRole());
         query.setUserId(wu.getId());
@@ -262,8 +261,7 @@ public class ScoreController extends BaseExamController {
             List<ExamStudentDTO> list = new LinkedList<>();
             // 可导出科目不为空时,才能执行查询操作
             if (!subjectSet.isEmpty()) {
-                String subjectCodeIn = StringUtils.join(subjectSet, ",");
-                query.setSubjectCodeIn(subjectCodeIn);
+                query.setSubjectCodes(new ArrayList<>(subjectSet));
                 query.setPageNumber(1);
                 query.setPageSize(Integer.MAX_VALUE);
                 query.setRole(wu.getRole());

+ 40 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/admin/AnswerCheckController.java

@@ -0,0 +1,40 @@
+package cn.com.qmth.stmms.api.controller.admin;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import cn.com.qmth.stmms.api.controller.BaseApiController;
+import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
+import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
+import cn.com.qmth.stmms.common.annotation.Logging;
+import cn.com.qmth.stmms.common.enums.LogType;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+@Api(tags = "识别结果检查")
+@Controller("adminAnswerCheckController")
+@RequestMapping("/api/admin/exam/check/answer")
+public class AnswerCheckController extends BaseApiController {
+
+    @Autowired
+    private ExamStudentService studentService;
+
+    @Logging(menu = "识别结果查询数量", type = LogType.QUERY)
+    @ApiOperation(value = "查询数量")
+    @RequestMapping(value = "count", method = RequestMethod.POST)
+    @ResponseBody
+    public long count(ExamStudentSearchQuery query) {
+        int examId = getSessionExamId();
+        if (examId > 0) {
+            query.setExamId(examId);
+            query.setUpload(true);
+            return studentService.countByQuery(query);
+        } else {
+            return 0;
+        }
+    }
+
+}

+ 2 - 4
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/admin/ScoreController.java

@@ -89,8 +89,7 @@ public class ScoreController extends BaseApiController {
             query.setSubjectiveScore(0d);
         }
         if ((wu.isSubjectHeader() || wu.isSchoolViewer()) && StringUtils.isBlank(query.getSubjectCode())) {
-            String subjectCodeIn = StringUtils.join(wu.getSubjectCodeSet(), ",");
-            query.setSubjectCodeIn(subjectCodeIn);
+            query.setSubjectCodes(new ArrayList<>(wu.getSubjectCodeSet()));
         }
         query.setRole(wu.getRole());
         query.setUserId(wu.getId());
@@ -212,8 +211,7 @@ public class ScoreController extends BaseApiController {
             List<ExamStudentDTO> list = new LinkedList<>();
             // 可导出科目不为空时,才能执行查询操作
             if (!subjectSet.isEmpty()) {
-                String subjectCodeIn = StringUtils.join(subjectSet, ",");
-                query.setSubjectCodeIn(subjectCodeIn);
+                query.setSubjectCodes(new ArrayList<>(subjectSet));
                 query.setPageNumber(1);
                 query.setPageSize(Integer.MAX_VALUE);
                 query.setRole(wu.getRole());