Jelajahi Sumber

修复复核查询和复核流程取卷逻辑

ting.yin 4 tahun lalu
induk
melakukan
8ce641050d

+ 22 - 10
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/ExamStudentSearchQuery.java

@@ -1,13 +1,16 @@
 package cn.com.qmth.stmms.biz.exam.query;
 
-import cn.com.qmth.stmms.biz.common.BaseQuery;
-import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
-import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
 import org.springframework.data.domain.Sort;
 import org.springframework.data.domain.Sort.Direction;
 
-import java.util.Date;
-import java.util.List;
+import cn.com.qmth.stmms.biz.common.BaseQuery;
+import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
+import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
 
 public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
 
@@ -43,7 +46,7 @@ public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
 
     private Double objectiveScoreLt;
 
-    private SubjectiveStatus subjectiveStatus;
+    private Set<SubjectiveStatus> statusSet;
 
     private Double subjectiveScore;
 
@@ -91,6 +94,11 @@ public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
 
     private List<Integer> studentIds;
 
+    public ExamStudentSearchQuery() {
+        super();
+        this.statusSet = new HashSet<>();
+    }
+
     public void orderByExamNumber() {
         setSort(new Sort(Direction.ASC, "examNumber"));
     }
@@ -403,12 +411,16 @@ public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
         this.paperType = paperType;
     }
 
-    public SubjectiveStatus getSubjectiveStatus() {
-        return subjectiveStatus;
+    public Set<SubjectiveStatus> getStatusSet() {
+        return statusSet;
+    }
+
+    public void clearStatus() {
+        this.statusSet.clear();
     }
 
-    public void setSubjectiveStatus(SubjectiveStatus subjectiveStatus) {
-        this.subjectiveStatus = subjectiveStatus;
+    public void addStatus(SubjectiveStatus status) {
+        this.statusSet.add(status);
     }
 
     public List<Integer> getStudentIds() {

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

@@ -1,10 +1,47 @@
 package cn.com.qmth.stmms.biz.exam.service.impl;
 
+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.Set;
+
+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.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 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.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.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.mark.model.MarkLibrary;
 import cn.com.qmth.stmms.biz.mark.model.MarkSpecialTag;
 import cn.com.qmth.stmms.biz.mark.model.MarkTrack;
@@ -17,19 +54,6 @@ import cn.com.qmth.stmms.biz.utils.PictureConfigTransform;
 import cn.com.qmth.stmms.biz.utils.PictureTag;
 import cn.com.qmth.stmms.biz.utils.ScoreItem;
 import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.math.RandomUtils;
-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.criteria.*;
-import java.text.DecimalFormat;
-import java.util.*;
 
 @Service
 public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implements ExamStudentService {
@@ -154,8 +178,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
             if (student.getSecretNumber() == null) {
                 student.randomSecretNumber();
                 while (secretNumberSet.contains(student.getSecretNumber())
-                        || studentDao.countByExamIdAndSecretNumber(student.getExamId(), student.getSecretNumber())
-                        > 0) {
+                        || studentDao.countByExamIdAndSecretNumber(student.getExamId(), student.getSecretNumber()) > 0) {
                     student.randomSecretNumber();
                 }
             }
@@ -375,10 +398,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     @Transactional
     public boolean updateScanInfo(ExamStudent student) {
         student.setUploadTime(new Date());
-        return studentDao
-                .updateScanInfo(student.getId(), student.getSheetCount(), student.getSliceCount(), student.getAnswers(),
-                        student.getBatchCode(), student.getPaperType(), student.isAbsent(), student.getUploadTime(),
-                        student.getObjectiveScore(), student.getObjectiveScoreList()) > 0;
+        return studentDao.updateScanInfo(student.getId(), student.getSheetCount(), student.getSliceCount(),
+                student.getAnswers(), student.getBatchCode(), student.getPaperType(), student.isAbsent(),
+                student.getUploadTime(), student.getObjectiveScore(), student.getObjectiveScoreList()) > 0;
     }
 
     @Override
@@ -453,14 +475,14 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
             @Override
             public Predicate toPredicate(Root<ExamStudent> root, CriteriaQuery<?> cQuery, CriteriaBuilder cb) {
                 List<Predicate> predicates = new LinkedList<Predicate>();
-                Expression<Double> evaluationItemSum = cb
-                        .sum(root.get("objectiveScore").as(Double.class), root.get("subjectiveScore").as(Double.class));
+                Expression<Double> evaluationItemSum = cb.sum(root.get("objectiveScore").as(Double.class),
+                        root.get("subjectiveScore").as(Double.class));
                 if (query.getStartScore() != null) {
                     Predicate predicate1 = cb.ge(evaluationItemSum, query.getStartScore());
                     Predicate predicate2 = cb.le(evaluationItemSum, query.getEndScore());
                     if (query.getStartScore() == 0) {
-                        Predicate predicate = cb
-                                .or(cb.equal(root.get("absent"), true), cb.equal(root.get("breach"), true));
+                        Predicate predicate = cb.or(cb.equal(root.get("absent"), true),
+                                cb.equal(root.get("breach"), true));
                         Predicate predicate3 = cb.and(predicate1, predicate2);
                         predicates.add(cb.or(predicate, predicate3));
                     } else {
@@ -539,9 +561,12 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
                     predicates
                             .add(cb.lessThan(root.get("objectiveScore").as(Double.class), query.getObjectiveScoreLt()));
                 }
-                if (query.getSubjectiveStatus() != null) {
-                    predicates.add(cb.equal(root.get("subjectiveStatus").as(SubjectiveStatus.class),
-                            query.getSubjectiveStatus()));
+                if (query.getStatusSet() != null && query.getStatusSet().size() > 0) {
+                    List<Predicate> sub = new LinkedList<>();
+                    for (SubjectiveStatus status : query.getStatusSet()) {
+                        sub.add(cb.equal(root.get("subjectiveStatus").as(SubjectiveStatus.class), status));
+                    }
+                    predicates.add(cb.or(sub.toArray(new Predicate[sub.size()])));
                 }
                 if (query.getSubjectiveScore() != null) {
                     predicates.add(cb.equal(root.get("subjectiveScore"), query.getSubjectiveScore()));
@@ -633,9 +658,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
                 if (StringUtils.isNotBlank(query.getTeacher())) {
                     predicates.add(cb.equal(root.get("teacher"), query.getTeacher()));
                 }
-                return predicates.isEmpty() ?
-                        cb.conjunction() :
-                        cb.and(predicates.toArray(new Predicate[predicates.size()]));
+                return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates
+                        .size()]));
             }
         };
     }
@@ -654,8 +678,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     @Override
     public ExamStudent findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(Integer schoolId, String subjectCode,
             String studentCode, String examSeqCode) {
-        return studentDao
-                .findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(schoolId, subjectCode, studentCode, examSeqCode);
+        return studentDao.findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(schoolId, subjectCode, studentCode,
+                examSeqCode);
     }
 
     @Override
@@ -694,9 +718,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         query.setPageNumber(1);
         query.setPageSize(1);
         query.setSort(new Sort(Direction.ASC, "uploadTime", "id"));
-        List<ExamStudent> list = minUploadTime != null ?
-                studentDao.findUnLibraryStudent(examId, subjectCode, groupNumber, minUploadTime, query) :
-                studentDao.findUnLibraryStudent(examId, subjectCode, groupNumber, query);
+        List<ExamStudent> list = minUploadTime != null ? studentDao.findUnLibraryStudent(examId, subjectCode,
+                groupNumber, minUploadTime, query) : studentDao.findUnLibraryStudent(examId, subjectCode, groupNumber,
+                query);
         return list.isEmpty() ? null : list.get(0);
     }
 
@@ -829,8 +853,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     @Override
     public Map<MarkGroup, List<OriginTag>> getSliceTags(ExamStudent student, boolean withGroupScore) {
         Map<MarkGroup, List<OriginTag>> tagMap = new HashMap<MarkGroup, List<OriginTag>>();
-        List<ExamQuestion> questions = questionService
-                .findByExamAndSubjectAndObjective(student.getExamId(), student.getSubjectCode(), false);
+        List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjective(student.getExamId(),
+                student.getSubjectCode(), false);
         List<ScoreItem> scoreList = student.getScoreList(false);
         List<MarkGroup> markGroups = groupService.findByExamAndSubject(student.getExamId(), student.getSubjectCode());
         for (MarkGroup group : markGroups) {
@@ -852,14 +876,13 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         List<String> lines = new LinkedList<>();
         lines.add("成绩明细");
         // 总分得分明细
-        lines.add("总分 (客观+主观) | " + format.format(student.getTotalScore()) + "=" + format
-                .format(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0) + "+" + format
-                .format(student.getSubjectiveScore() != null ? student.getSubjectiveScore() : 0));
+        lines.add("总分 (客观+主观) | " + format.format(student.getTotalScore()) + "="
+                + format.format(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0) + "+"
+                + format.format(student.getSubjectiveScore() != null ? student.getSubjectiveScore() : 0));
         // 客观题得分明细
         List<String> objectives = new LinkedList<>();
-        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<ScoreItem> scoreList = student.getScoreList(true);
         List<String> details = new ArrayList<>();
         int i = 0;
@@ -949,8 +972,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
             // 添加轨迹分
             List<MarkTrack> tracks = trackService.findByLibraryId(selected.getId());
             for (MarkTrack markTrack : tracks) {
-                originTags.add(new OriginTag(format.format(markTrack.getScore()), markTrack.getOffsetIndex(),
-                        markTrack.getOffsetX(), markTrack.getOffsetY()));
+                originTags.add(new OriginTag(format.format(markTrack.getScore()), markTrack.getOffsetIndex(), markTrack
+                        .getOffsetX(), markTrack.getOffsetY()));
             }
             // 添加特殊标记
             List<MarkSpecialTag> specialTags = specialTagService.findByLibraryId(selected.getId());

+ 38 - 23
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/InspectedController.java

@@ -1,5 +1,31 @@
 package cn.com.qmth.stmms.admin.exam;
 
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
 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;
@@ -24,25 +50,6 @@ import cn.com.qmth.stmms.common.enums.MarkStatus;
 import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
-import net.sf.json.JSONArray;
-import net.sf.json.JSONObject;
-
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.servlet.ModelAndView;
-import org.springframework.web.servlet.mvc.support.RedirectAttributes;
-
-import javax.servlet.http.HttpServletRequest;
-
-import java.util.*;
 
 @Controller("inspectedController")
 @RequestMapping("/admin/exam/inspected")
@@ -82,6 +89,7 @@ public class InspectedController extends BaseExamController {
 
     @RequestMapping
     public String list(Model model, HttpServletRequest request, ExamStudentSearchQuery query,
+            @RequestParam(required = false) SubjectiveStatus status,
             @RequestParam(required = false) Integer groupNumber,
             @RequestParam(required = false) Double groupStartScore,
             @RequestParam(required = false) Double groupEndScore, @RequestParam(required = false) Double questionScore) {
@@ -95,6 +103,12 @@ public class InspectedController extends BaseExamController {
         if (query.getSubjectCode() == null && !subjectList.isEmpty()) {
             query.setSubjectCode(subjectList.get(0).getCode());
         }
+        if (status != null) {
+            query.addStatus(status);
+        } else {
+            query.addStatus(SubjectiveStatus.INSPECTED);
+            query.addStatus(SubjectiveStatus.MARKED);
+        }
         if (groupNumber != null || groupStartScore != null || groupEndScore != null || questionScore != null) {
             SubjectiveScoreSearchQuery query2 = new SubjectiveScoreSearchQuery();
             query2.setExamId(examId);
@@ -116,10 +130,9 @@ public class InspectedController extends BaseExamController {
             group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
                     group.getSubjectCode(), false, group.getNumber()));
         }
-        SubjectiveStatus status = query.getSubjectiveStatus();
-        query.setSubjectiveStatus(SubjectiveStatus.MARKED);
+        query.clearStatus();
+        query.addStatus(SubjectiveStatus.MARKED);
         long inspectCount = studentService.countByQuery(query);
-        query.setSubjectiveStatus(status);
         model.addAttribute("query", query);
         model.addAttribute("inspectCount", inspectCount);
         model.addAttribute("groupList", groupList);
@@ -129,6 +142,7 @@ public class InspectedController extends BaseExamController {
         model.addAttribute("questionScore", questionScore);
         model.addAttribute("subjectList", subjectList);
         model.addAttribute("statusList", SubjectiveStatus.getOptionList());
+        model.addAttribute("status", status);
         return "modules/exam/inspectedList";
     }
 
@@ -147,7 +161,7 @@ public class InspectedController extends BaseExamController {
         query.setUpload(true);
         query.setAbsent(false);
         query.setBreach(false);
-        query.setSubjectiveStatus(SubjectiveStatus.MARKED);
+        query.addStatus(SubjectiveStatus.MARKED);
         query.setPageSize(Integer.MAX_VALUE);
         List<ExamSubject> subjectList = getExamSubject(examId, wu);
         if (query.getSubjectCode() == null && !subjectList.isEmpty()) {
@@ -192,6 +206,7 @@ public class InspectedController extends BaseExamController {
         view.addObject("inspectCount", ids.size());
         view.addObject("fileServer", fileService.getFileServer());
         view.addObject("ids", StringUtils.join(ids, ","));
+        view.addObject("studentId", studentId);
         return view;
     }
 

+ 8 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/inspected.jsp

@@ -71,6 +71,7 @@
 <script type="text/javascript">
     var message = '${message}';
     var ids = [${ids}];
+    var studentId = '${studentId}';
     var current;
     var student;
     var iviewer;
@@ -94,7 +95,13 @@
             }, function (result) {
             });
         }
-
+		if(studentId){
+			$.post('${ctx}/admin/exam/inspected/clear', {
+                studentId: studentId
+            }, function (result) {
+            });
+		}
+		
         $('#progress').html(ids.length);
         process(1);
     });

+ 4 - 4
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/inspectedList.jsp

@@ -31,10 +31,10 @@
         </select>
         &nbsp;
         <label>状态</label>
-        <select class="input-medium" name="subjectiveStatus">
+        <select class="input-medium" name="status">
             <option value="">请选择</option>
-            <c:forEach items="${statusList}" var="status">
-                <option value="${status}" <c:if test="${status==query.subjectiveStatus}">selected</c:if>>${status.name}</option>
+            <c:forEach items="${statusList}" var="result">
+                <option value="${result}" <c:if test="${status==result}">selected</c:if>>${result.name}</option>
             </c:forEach>
         </select>
         &nbsp;<br/><br/>
@@ -127,7 +127,7 @@
         $('#subject-select').change(function () {
             var code = $(this).val();
             $('#group-select').empty();
-            $("<option value='0'>请选择</option>").appendTo('#group-select');
+            $("<option value=''>请选择</option>").appendTo('#group-select');
             if (code == '') {
                 $('#group-select').val('').trigger('change');
                 return;