ting.yin 4 years ago
parent
commit
67ac6ff6f8

+ 7 - 8
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/SubjectiveScoreDao.java

@@ -1,16 +1,18 @@
 package cn.com.qmth.stmms.biz.exam.dao;
 
-import cn.com.qmth.stmms.biz.exam.model.SubjectiveScore;
-import cn.com.qmth.stmms.biz.exam.model.SubjectiveScorePK;
-import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
+import java.util.List;
 
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.PagingAndSortingRepository;
 
-import java.util.List;
+import cn.com.qmth.stmms.biz.exam.model.SubjectiveScore;
+import cn.com.qmth.stmms.biz.exam.model.SubjectiveScorePK;
+import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
 
-public interface SubjectiveScoreDao extends PagingAndSortingRepository<SubjectiveScore, SubjectiveScorePK> {
+public interface SubjectiveScoreDao extends PagingAndSortingRepository<SubjectiveScore, SubjectiveScorePK>,
+        JpaSpecificationExecutor<SubjectiveScore> {
 
     @Query("select s from SubjectiveScore s where s.pk.studentId=?1 order by s.pk.mainNumber, s.pk.subNumber")
     List<SubjectiveScore> findByStudentId(Integer studentId);
@@ -38,7 +40,4 @@ public interface SubjectiveScoreDao extends PagingAndSortingRepository<Subjectiv
             + "(select g.pk.studentId from MarkGroupStudent g where g.pk.studentId=s.pk.studentId and g.status=?4)")
     void deleteByStudentGroupStatus(Integer examId, String subjectCode, Integer groupNumber, SubjectiveStatus status);
 
-    @Query("select s.pk.studentId from SubjectiveScore s where "
-            + "s.examId=?1 and s.subjectCode=?2 and s.groupScore=?3 and s.score=?4")
-    List<Integer> findStudentIdByGroupScoreAndScore(Integer examId, String subjectCode, Double groupScore, Double score);
 }

+ 75 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/SubjectiveScoreSearchQuery.java

@@ -0,0 +1,75 @@
+package cn.com.qmth.stmms.biz.exam.query;
+
+import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Direction;
+
+import cn.com.qmth.stmms.biz.common.BaseQuery;
+import cn.com.qmth.stmms.biz.exam.model.SubjectiveScore;
+
+public class SubjectiveScoreSearchQuery extends BaseQuery<SubjectiveScore> {
+
+    private Integer examId;
+
+    private String subjectCode;
+
+    private Integer groupNumber;
+
+    private Double groupStartScore;
+
+    private Double groupEndScore;
+
+    private Double score;
+
+    public void orderByCreateTime() {
+        setSort(new Sort(Direction.ASC, "examId", "subjectCode", "groupNumber"));
+    }
+
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+
+    public String getSubjectCode() {
+        return subjectCode;
+    }
+
+    public void setSubjectCode(String subjectCode) {
+        this.subjectCode = subjectCode;
+    }
+
+    public Integer getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+
+    public Double getGroupStartScore() {
+        return groupStartScore;
+    }
+
+    public void setGroupStartScore(Double groupStartScore) {
+        this.groupStartScore = groupStartScore;
+    }
+
+    public Double getGroupEndScore() {
+        return groupEndScore;
+    }
+
+    public void setGroupEndScore(Double groupEndScore) {
+        this.groupEndScore = groupEndScore;
+    }
+
+    public Double getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+
+}

+ 11 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/SubjectiveScoreService.java

@@ -0,0 +1,11 @@
+package cn.com.qmth.stmms.biz.exam.service;
+
+import java.util.List;
+
+import cn.com.qmth.stmms.biz.exam.query.SubjectiveScoreSearchQuery;
+
+public interface SubjectiveScoreService {
+
+    List<Integer> findStudentIdByQuery(SubjectiveScoreSearchQuery query);
+
+}

+ 86 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/SubjectiveScoreServiceImpl.java

@@ -0,0 +1,86 @@
+package cn.com.qmth.stmms.biz.exam.service.impl;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import cn.com.qmth.stmms.biz.common.BaseQueryService;
+import cn.com.qmth.stmms.biz.exam.dao.SubjectiveScoreDao;
+import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
+import cn.com.qmth.stmms.biz.exam.model.SubjectiveScore;
+import cn.com.qmth.stmms.biz.exam.query.SubjectiveScoreSearchQuery;
+import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
+import cn.com.qmth.stmms.biz.exam.service.SubjectiveScoreService;
+import cn.com.qmth.stmms.common.enums.MarkStatus;
+
+@Service
+public class SubjectiveScoreServiceImpl extends BaseQueryService<SubjectiveScore> implements SubjectiveScoreService {
+
+    @Autowired
+    private SubjectiveScoreDao scoreDao;
+
+    @Autowired
+    private MarkGroupService groupService;
+
+    @Override
+    public List<Integer> findStudentIdByQuery(final SubjectiveScoreSearchQuery query) {
+        Page<SubjectiveScore> result = scoreDao.findAll(buildSpecification(query), query);
+        fillResult(result, query);
+        List<Integer> ids = new ArrayList<Integer>();
+        for (SubjectiveScore subjectiveScore : result) {
+            ids.add(subjectiveScore.getStudentId());
+        }
+        return ids;
+    }
+
+    private Specification<SubjectiveScore> buildSpecification(final SubjectiveScoreSearchQuery query) {
+        return new Specification<SubjectiveScore>() {
+
+            @Override
+            public Predicate toPredicate(Root<SubjectiveScore> root, CriteriaQuery<?> cQuery, CriteriaBuilder cb) {
+                List<Predicate> predicates = new LinkedList<Predicate>();
+                if (query.getExamId() > 0) {
+                    predicates.add(cb.equal(root.get("examId"), query.getExamId()));
+                }
+                if (StringUtils.isNotBlank(query.getSubjectCode())) {
+                    predicates.add(cb.equal(root.get("subjectCode"), query.getSubjectCode()));
+                }
+                if (query.getGroupNumber() != null) {
+                    predicates.add(cb.equal(root.get("groupNumber"), query.getGroupNumber()));
+                } else {
+                    List<MarkGroup> groups = groupService.findByExamAndSubjectAndStatus(query.getExamId(),
+                            query.getSubjectCode(), MarkStatus.FORMAL);
+                    List<Integer> list = new ArrayList<Integer>();
+                    for (MarkGroup markGroup : groups) {
+                        list.add(markGroup.getNumber());
+                    }
+                    predicates.add(root.get("groupNumber").in(list));
+                }
+                if (query.getGroupStartScore() != null) {
+                    Predicate predicate = cb.ge(root.get("groupScore").as(Double.class), query.getGroupStartScore());
+                    predicates.add(predicate);
+                }
+                if (query.getGroupEndScore() != null) {
+                    Predicate predicate = cb.le(root.get("groupScore").as(Double.class), query.getGroupEndScore());
+                    predicates.add(predicate);
+                }
+                if (query.getScore() != null) {
+                    predicates.add(cb.equal(root.get("score"), query.getScore()));
+                }
+                return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates
+                        .size()]));
+            }
+        };
+    }
+}

+ 28 - 11
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/InspectedController.java

@@ -25,14 +25,15 @@ 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.dao.SubjectiveScoreDao;
 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.query.ExamStudentSearchQuery;
+import cn.com.qmth.stmms.biz.exam.query.SubjectiveScoreSearchQuery;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
 import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
 import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
 import cn.com.qmth.stmms.biz.exam.service.MarkerService;
+import cn.com.qmth.stmms.biz.exam.service.SubjectiveScoreService;
 import cn.com.qmth.stmms.biz.file.service.FileService;
 import cn.com.qmth.stmms.biz.lock.LockService;
 import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
@@ -86,15 +87,16 @@ public class InspectedController extends BaseExamController {
     private LockService lockService;
 
     @Autowired
-    private SubjectiveScoreDao scoreDao;
+    private SubjectiveScoreService scoreService;
 
     // 并发处理互斥锁
     private Map<Integer, Integer> currentTaskMap = new HashMap<Integer, Integer>();
 
     @RequestMapping
     public String list(Model model, HttpServletRequest request, ExamStudentSearchQuery query,
-            @RequestParam(required = false) Integer groupNumber, @RequestParam(required = false) Double groupScore,
-            @RequestParam(required = false) Double questionScore) {
+            @RequestParam(required = false) Integer groupNumber,
+            @RequestParam(required = false) Double groupStartScore,
+            @RequestParam(required = false) Double groupEndScore, @RequestParam(required = false) Double questionScore) {
         int examId = getSessionExamId(request);
         WebUser wu = RequestUtils.getWebUser(request);
         query.setExamId(examId);
@@ -102,9 +104,16 @@ public class InspectedController extends BaseExamController {
         if (query.getSubjectCode() == null && !subjectList.isEmpty()) {
             query.setSubjectCode(subjectList.get(0).getCode());
         }
-        if (groupNumber != null || groupScore != null || questionScore != null) {
-            List<Integer> studentIds = scoreDao.findStudentIdByGroupScoreAndScore(examId, query.getSubjectCode(),
-                    groupScore, questionScore);
+        if (groupNumber != null || groupStartScore != null || groupEndScore != null || questionScore != null) {
+            SubjectiveScoreSearchQuery query2 = new SubjectiveScoreSearchQuery();
+            query2.setExamId(examId);
+            query2.setSubjectCode(query.getSubjectCode());
+            query2.setGroupNumber(groupNumber);
+            query2.setGroupStartScore(groupStartScore);
+            query2.setGroupEndScore(groupEndScore);
+            query2.setScore(questionScore);
+            query2.setPageSize(Integer.MAX_VALUE);
+            List<Integer> studentIds = scoreService.findStudentIdByQuery(query2);
             query.setStudentIds(studentIds);
         }
         query = studentService.findByQuery(query);
@@ -119,7 +128,8 @@ public class InspectedController extends BaseExamController {
     @ResponseBody
     public ModelAndView start(HttpServletRequest request, RedirectAttributes redirectAttributes,
             ExamStudentSearchQuery query, @RequestParam(required = false) Integer groupNumber,
-            @RequestParam(required = false) Double groupScore, @RequestParam(required = false) Double questionScore) {
+            @RequestParam(required = false) Double groupStartScore,
+            @RequestParam(required = false) Double groupEndScore, @RequestParam(required = false) Double questionScore) {
         int examId = getSessionExamId(request);
         WebUser wu = RequestUtils.getWebUser(request);
         releaseByUser(wu.getUser().getId());
@@ -129,9 +139,16 @@ public class InspectedController extends BaseExamController {
         if (query.getSubjectCode() == null && !subjectList.isEmpty()) {
             query.setSubjectCode(subjectList.get(0).getCode());
         }
-        if (groupNumber != null || groupScore != null || questionScore != null) {
-            List<Integer> studentIds = scoreDao.findStudentIdByGroupScoreAndScore(examId, query.getSubjectCode(),
-                    groupScore, questionScore);
+        if (groupNumber != null || groupStartScore != null || groupEndScore != null || questionScore != null) {
+            SubjectiveScoreSearchQuery query2 = new SubjectiveScoreSearchQuery();
+            query2.setExamId(examId);
+            query2.setSubjectCode(query.getSubjectCode());
+            query2.setGroupNumber(groupNumber);
+            query2.setGroupStartScore(groupStartScore);
+            query2.setGroupEndScore(groupEndScore);
+            query2.setScore(questionScore);
+            query2.setPageSize(Integer.MAX_VALUE);
+            List<Integer> studentIds = scoreService.findStudentIdByQuery(query2);
             query.setStudentIds(studentIds);
         }
         query = studentService.findByQuery(query);

+ 4 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/admin/interceptor/AdminInterceptor.java

@@ -37,9 +37,11 @@ public class AdminInterceptor extends SessionInterceptor {
 
     private boolean validateAdminUser(WebUser wu, HttpServletRequest request, HttpServletResponse response)
             throws Exception {
+        if (wu != null && (wu.getRole() == Role.SYS_ADMIN)) {
+            return true;
+        }
         if (wu != null
-                && (wu.getRole() == Role.SYS_ADMIN || wu.getRole() == Role.SCHOOL_ADMIN
-                        || wu.getRole() == Role.SUBJECT_HEADER || wu.getRole() == Role.SCHOOL_VIEWER)) {
+                && (wu.getRole() == Role.SCHOOL_ADMIN || wu.getRole() == Role.SUBJECT_HEADER || wu.getRole() == Role.SCHOOL_VIEWER)) {
             Integer examId = SessionExamUtils.getExamId(request);
             String uri = request.getRequestURI();
             if (examId > 0 || uri.startsWith("/admin/exam/select") || uri.startsWith("/admin/home")

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

@@ -81,10 +81,10 @@
 					</c:forEach>
 				</select>
 	      </div>
-	      <c:if test="${web_user.schoolAdmin==true}">
-	      <div class="">
-	      	or <a href="${ctx}/admin/exam/create">新建考试</a>
-	      </div>
+	      <c:if test="${web_user.schoolAdmin==true && examList.size()==0}">
+	      	<div class="login-btn">
+	      	<a href="${ctx}/admin/exam/create">新建考试</a>
+	      	</div>
 	      </c:if>
 	        <div class="point hide" >
 	        	<em class="error"></em>

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

@@ -38,15 +38,19 @@
         </select>
         &nbsp;
         <label>试卷总分:从</label>
-        <input type="text" number="true" id="startScroe" name="startScroe" value="${query.startScroe}" class="input-medium"/>
+        <input type="text" number="true" id="startScroe" name="startScroe" value="${query.startScroe}" class="input-mini"/>
         <label> 到&nbsp;&nbsp;&nbsp;</label>
-        <input type="text" number="true" id="endScroe" name="endScroe" value="${query.endScroe}" class="input-medium"/>
+        <input type="text" number="true" id="endScroe" name="endScroe" value="${query.endScroe}" class="input-mini"/>
         &nbsp;
-        <label>大题得分</label>
-        <input type="text" number="true" name="groupScore" id="groupScore" value="" class="input-medium"/>
+        
+        <label>大题得分:从</label>
+        <input type="text" number="true" name="groupScore" id="groupStartScore" value="" class="input-mini"/>
+        <label> 到&nbsp;&nbsp;&nbsp;</label>
+        <input type="text" number="true" id="endScroe" name="groupEndScroe" value="" class="input-mini"/>
         &nbsp;
+        
         <label>小题得分</label>
-        <input type="text" number="true" name="questionScore" id="questionScore" value="" class="input-medium"/>
+        <input type="text" number="true" name="questionScore" id="questionScore" value="" class="input-mini"/>
         &nbsp;
         <input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
         <input id="btnSubmit" class="btn btn-primary" type="button" value="批量复核" onclick="goSearch()"/>