浏览代码

成绩查询上加入缺考、上传、违纪、标记卷、等字段

ting.yin 6 年之前
父节点
当前提交
f0533d0478

+ 36 - 14
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamStudentDao.java

@@ -93,28 +93,50 @@ public interface ExamStudentDao
     public List<ExamStudent> findUnLibraryStudent(int examId, String subjectCode, int groupNumber, Date minUploadTime,
             Pageable page);
 
-    @Query("select s.id from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and s.absent=true and "
+    @Query("select s.id from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and s.absent=true and s.breach=true and "
             + "exists (select l.id from MarkLibrary l where l.studentId=s.id)")
-    public List<Integer> findAbsentLibraryStudent(int examId, String subjectCode);
+    public List<Integer> findAbsentOrBreachLibraryStudent(int examId, String subjectCode);
     
-    @Query("select sum(case when (s.objectiveScore + s.subjectiveScore) between 0 and 49 then 1 else 0 end),"
-    		+ "sum(case when (s.objectiveScore + s.subjectiveScore) between 50 and 59 then 1 else 0 end) ,"
-    		+ "sum(case when (s.objectiveScore + s.subjectiveScore) between 60 and 69 then 1 else 0 end) ,"
-    		+ "sum(case when (s.objectiveScore + s.subjectiveScore) between 70 and 79 then 1 else 0 end) ,"
-    		+ "sum(case when (s.objectiveScore + s.subjectiveScore) between 80 and 89 then 1 else 0 end) ,"
-    		+ "sum(case when (s.objectiveScore + s.subjectiveScore) between 90 and 100 then 1 else 0 end) "
+    @Query("select sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 0 and 49.9 then 1 else 0 end),"
+    		+ "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 50 and 59.9 then 1 else 0 end) ,"
+    		+ "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 60 and 69.9 then 1 else 0 end) ,"
+    		+ "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 70 and 79.9 then 1 else 0 end) ,"
+    		+ "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 80 and 89.9 then 1 else 0 end) ,"
+    		+ "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 90 and 100 then 1 else 0 end),"
+            + "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 0 and 59.9 then 1 else 0 end), "
+            + "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 60 and 100 then 1 else 0 end) "
     		+ " from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and s.upload=?3  and s.absent=?4 ")
 	public List<Object[]> statisticsByExamIdAndSubjectCode(Integer examId,
 			String code, Boolean upload, boolean absent);
 
-    @Query("select sum(case when (s.objectiveScore + s.subjectiveScore) between 0 and 49 then 1 else 0 end),"
-    		+ "sum(case when (s.objectiveScore + s.subjectiveScore) between 50 and 59 then 1 else 0 end) ,"
-    		+ "sum(case when (s.objectiveScore + s.subjectiveScore) between 60 and 69 then 1 else 0 end) ,"
-    		+ "sum(case when (s.objectiveScore + s.subjectiveScore) between 70 and 79 then 1 else 0 end) ,"
-    		+ "sum(case when (s.objectiveScore + s.subjectiveScore) between 80 and 89 then 1 else 0 end) ,"
-    		+ "sum(case when (s.objectiveScore + s.subjectiveScore) between 90 and 100 then 1 else 0 end) "
+    @Query("select sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 0 and 49.9 then 1 else 0 end),"
+    		+ "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 50 and 59.9 then 1 else 0 end) ,"
+    		+ "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 60 and 69.9 then 1 else 0 end) ,"
+    		+ "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 70 and 79.9 then 1 else 0 end) ,"
+    		+ "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 80 and 89.9 then 1 else 0 end) ,"
+    		+ "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 90 and 100 then 1 else 0 end), "
+            + "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 0 and 59.9 then 1 else 0 end), "
+            + "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 60 and 100 then 1 else 0 end) "
     		+ " from ExamStudent s where s.examId=?1 and s.subjectCode=?2 ")
 	public List<Object[]> statisticsByExamIdAndSubjectCode(Integer examId,
 			String code);
+	
+    @Query("select sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 0 and 49.9 then 1 else 0 end),"
+            + "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 50 and 59.9 then 1 else 0 end) ,"
+            + "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 60 and 69.9 then 1 else 0 end) ,"
+            + "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 70 and 79.9 then 1 else 0 end) ,"
+            + "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 80 and 89.9 then 1 else 0 end) ,"
+            + "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 90 and 100 then 1 else 0 end),"
+            + "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 0 and 59.9 then 1 else 0 end), "
+            + "sum(case when ((case when s.objectiveScore is null then 0 else s.objectiveScore end) + (case when s.subjectiveScore is null then 0 else s.subjectiveScore end)) between 60 and 100 then 1 else 0 end) "
+            + " from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and s.upload=?3  and s.absent=?4 and s.breach = ?5")
+    public List<Object[]> statisticsByAbsentAndBreach(Integer examId, String code, Boolean upload,boolean absent,boolean breach);
+	
+	@Query(value="select s.id from eb_exam_student s where 1=1 and s.id in (select m.student_id from m_library m where 1=1 and m.marker_id in (select m.id from eb_marker m where 1=1 and m.login_name = ?1 ))",nativeQuery=true)
+    public List<String[]> findIdsByMarkLogin(String markLogin);
+        
+    @Query(value="select s.id from eb_exam_student s where 1=1 and s.id in (select m.student_id from m_library m where 1=1 and m.marker_id in (select m.id from eb_marker m where 1=1 and m.name = ?1))",nativeQuery=true)
+    public List<String[]> findIdsByMarkName(String markName);
+
 
 }

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/MarkerDao.java

@@ -42,7 +42,7 @@ public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>,
     public void deleteByExamId(int examId);
     
     @Query(value="select e.* from eb_marker e,m_library m where 1=1 and e.id = m.marker_id and m.student_id =?1",nativeQuery=true)
-    public Marker findByStudentId(int studentId);
+    public List<Marker> findByStudentId(int studentId);
 
     @Query("select count(m) from Marker m where m.loginName=?1")
     public long countByLoginName(String loginName);

+ 55 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ExamStudent.java

@@ -158,6 +158,9 @@ public class ExamStudent implements Serializable {
     @Column(name = "is_absent")
     private boolean absent;
 
+    @Column(name = "is_breach")
+    private boolean breach;
+
     /**
      * 是否数据校验异常
      */
@@ -233,6 +236,18 @@ public class ExamStudent implements Serializable {
 
     @Transient
     private Integer libraryId;
+    
+    @Transient
+    private int number;
+    
+    @Transient
+    private String markLogin;
+    
+    @Transient
+    private String markName;
+    
+    @Transient
+    private String tagValue;
 
     public Integer getId() {
         return id;
@@ -602,4 +617,44 @@ public class ExamStudent implements Serializable {
         this.subject = subject;
     }
 
+	public boolean isBreach() {
+		return breach;
+	}
+
+	public void setBreach(boolean breach) {
+		this.breach = breach;
+	}
+
+	public int getNumber() {
+		return number;
+	}
+
+	public void setNumber(int number) {
+		this.number = number;
+	}
+
+	public String getMarkLogin() {
+		return markLogin;
+	}
+
+	public void setMarkLogin(String markLogin) {
+		this.markLogin = markLogin;
+	}
+
+	public String getMarkName() {
+		return markName;
+	}
+
+	public void setMarkName(String markName) {
+		this.markName = markName;
+	}
+
+	public String getTagValue() {
+		return tagValue;
+	}
+
+	public void setTagValue(String tagValue) {
+		this.tagValue = tagValue;
+	}
+
 }

+ 60 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/ExamStudentSearchQuery.java

@@ -63,6 +63,18 @@ public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
     private String campusNameNotIn;
 
     private String subjectCodeNotIn;
+    
+    private String markLogin;
+    
+    private String markName;
+    
+    private String ids;
+    
+    private Double startScroe; 
+    
+    private Double endScroe;
+
+    private Boolean breach;
 
     public void orderByExamNumber() {
         setSort(new Sort(Direction.ASC, "examNumber"));
@@ -284,4 +296,52 @@ public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
 		this.subjectCodeNotIn = subjectCodeNotIn;
 	}
 
+	public String getMarkLogin() {
+		return markLogin;
+	}
+
+	public void setMarkLogin(String markLogin) {
+		this.markLogin = markLogin;
+	}
+
+	public String getMarkName() {
+		return markName;
+	}
+
+	public void setMarkName(String markName) {
+		this.markName = markName;
+	}
+
+	public String getIds() {
+		return ids;
+	}
+
+	public void setIds(String ids) {
+		this.ids = ids;
+	}
+
+	public Double getStartScroe() {
+		return startScroe;
+	}
+
+	public void setStartScroe(Double startScroe) {
+		this.startScroe = startScroe;
+	}
+
+	public Double getEndScroe() {
+		return endScroe;
+	}
+
+	public void setEndScroe(Double endScroe) {
+		this.endScroe = endScroe;
+	}
+
+	public Boolean getBreach() {
+		return breach;
+	}
+
+	public void setBreach(Boolean breach) {
+		this.breach = breach;
+	}
+
 }

+ 12 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamStudentService.java

@@ -78,7 +78,7 @@ public interface ExamStudentService {
 
     ExamStudent findUnLibraryStudent(int examId, String subjectCode, int groupNumber, Date minUploadTime);
 
-    List<Integer> findAbsentLibraryStudent(int examId, String subjectCode);
+    List<Integer> findAbsentOrBreachLibraryStudent(int examId, String subjectCode);
 
 	public List<Object[]> statisticsByExamIdAndSubjectCode(Integer examId,String subjectCode);
 
@@ -87,4 +87,15 @@ public interface ExamStudentService {
 	public Long countByExamIdAndSubjectCodeAndCampus(Integer examId, String code,
 			String campusName, boolean upload, boolean absent);
 
+    public long countByNoAbsentAndBreach(int examId, String subjectCode, boolean upload, boolean absent,boolean breach);
+
+    public long countByAbsentAndBreach(int examId, String subjectCode, Boolean absent, Boolean breach);
+	
+	public String findIdsByMarkLogin(String markLogin);
+	
+	public String findIdsByMarkName(String markName);
+
+    List<ExamStudent> findByExamId(int examId,int pageNumber,int pageSize);
+
+    List<Object[]> statisticsByAbsentAndBreach(Integer examId, String code, Boolean upload,boolean absent,boolean breach);
 }

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/MarkerService.java

@@ -41,7 +41,7 @@ public interface MarkerService {
     
 	List<Marker> findMode(String commo);
 
-	public Marker findByStudentId(int studentId);
+	public List<Marker> findByStudentId(int studentId);
 
     public int batchSave(List<Marker> list);
 

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

@@ -1,5 +1,6 @@
 package cn.com.qmth.stmms.biz.exam.service.impl;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -10,6 +11,7 @@ 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;
 
@@ -364,9 +366,34 @@ 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));
+                if (query.getStartScroe()!=null ) {
+                    Predicate predicate1 = cb.ge(evaluationItemSum,query.getStartScroe());
+                    Predicate predicate2  = cb.le(evaluationItemSum,query.getEndScroe());
+                    if(query.getStartScroe() == 0){
+                        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 {
+                        predicates.add(cb.equal(root.get("absent"),  false));
+                        predicates.add(cb.equal(root.get("breach"),  false));
+                        predicates.add(cb.and(predicate1,predicate2));
+                    }
+                }
+//                if (query.getStartScroe()!=null && query.getEndScroe()!=null ) {
+//                    predicates.add(cb.between(evaluationItemSum, query.getStartScroe(), query.getEndScroe()));
+//                }
                 if (query.getExamId() > 0) {
                     predicates.add(cb.equal(root.get("examId"), query.getExamId()));
                 }
+                if (StringUtils.isNotBlank(query.getIds())) {
+                    String[] ids = query.getIds().split(",");
+                    List<String> list = new ArrayList<String>();
+                    for(String str : ids){
+                        list.add(str);
+                    }
+                    predicates.add(root.get("id").in(list));
+                }
                 if (StringUtils.isNotBlank(query.getExamNumber())) {
                     predicates.add(cb.equal(root.get("examNumber"), query.getExamNumber()));
                 } else if (StringUtils.isNotBlank(query.getExamNumberIn())) {
@@ -425,7 +452,15 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
                     predicates.add(cb.equal(root.get("upload"), query.getUpload()));
                 }
                 if (query.getAbsent() != null) {
-                    predicates.add(cb.equal(root.get("absent"), query.getAbsent()));
+                    if(query.getAbsent()){//缺考=缺考+ 未上传
+                        predicates.add(cb.or(cb.equal(root.get("absent"),true),cb.equal(root.get("upload"),false)));
+                    }else {
+                        predicates.add(cb.equal(root.get("absent"), query.getAbsent()));
+                        predicates.add(cb.equal(root.get("upload"), true));
+                    }
+                }
+                if (query.getBreach() != null) {
+                    predicates.add(cb.equal(root.get("breach"), query.getBreach()));
                 }
                 if (query.getException() != null) {
                     predicates.add(cb.equal(root.get("exception"), query.getException()));
@@ -540,8 +575,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     }
 
     @Override
-    public List<Integer> findAbsentLibraryStudent(int examId, String subjectCode) {
-        return studentDao.findAbsentLibraryStudent(examId, subjectCode);
+    public List<Integer> findAbsentOrBreachLibraryStudent(int examId, String subjectCode) {
+        return studentDao.findAbsentOrBreachLibraryStudent(examId, subjectCode);
     }
 
     @Override
@@ -570,5 +605,50 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         query.setAbsent(absent);
         return countByQuery(query);
 	}
-
+	
+    @Override
+    public List<ExamStudent> findByExamId(int examId,int pageNumber, int pageSize) {
+        ExamStudentSearchQuery query = new ExamStudentSearchQuery();
+        query.setPageNumber(pageNumber);
+        query.setPageSize(pageSize);
+        return studentDao.findByExamId(examId, query);
+    }
+    public long countByNoAbsentAndBreach(int examId, String subjectCode, boolean upload, boolean absent,boolean breach) {
+        ExamStudentSearchQuery query = new ExamStudentSearchQuery();
+        query.setExamId(examId);
+        query.setSubjectCode(subjectCode);
+        query.setUpload(upload);
+        query.setAbsent(absent);
+        query.setBreach(breach);
+        return countByQuery(query);
+    }
+    public long countByAbsentAndBreach(int examId, String subjectCode, Boolean absent, Boolean breach) {
+        ExamStudentSearchQuery query = new ExamStudentSearchQuery();
+        query.setExamId(examId);
+        query.setSubjectCode(subjectCode);
+        if(breach != null){
+            query.setBreach(breach);
+        }
+        if(absent != null){
+            query.setAbsent(absent);
+        }
+        return countByQuery(query);
+    }
+	@Override
+	public String findIdsByMarkLogin(String markLogin) {
+	    List<String[]> o = studentDao.findIdsByMarkLogin(markLogin);
+	    return StringUtils.join(o, ",");
+	}
+	@Override
+    public String findIdsByMarkName(String MarkName) {
+        List<String[]> o = studentDao.findIdsByMarkName(MarkName);
+        return StringUtils.join(o, ",");
+    }
+    @Override
+    /**
+     * 根据缺考和违纪字段联合查询
+     */
+    public List<Object[]> statisticsByAbsentAndBreach(Integer examId, String code, Boolean upload,boolean absent,boolean breach){
+        return  studentDao.statisticsByAbsentAndBreach(examId,code,upload,absent,breach);
+    }
 }

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/MarkerServiceImpl.java

@@ -249,7 +249,7 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
     
 	
 	@Override
-	public Marker findByStudentId(int studentId){
+	public List<Marker> findByStudentId(int studentId){
 	    return  markerDao.findByStudentId(studentId);
 	}
 

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

@@ -194,8 +194,8 @@ public class MarkController extends BaseExamController {
     private void createLibraryByExam(Exam exam, Map<String, Campus> campusMap) {
         List<ExamSubject> subjects = subjectService.list(exam.getId(), 0);
         for (ExamSubject subject : subjects) {
-            // 清除缺考考生
-            List<Integer> idList = studentService.findAbsentLibraryStudent(subject.getExamId(), subject.getCode());
+            // 清除缺考考生和违纪考生
+            List<Integer> idList = studentService.findAbsentOrBreachLibraryStudent(subject.getExamId(), subject.getCode());
             if (idList != null) {
                 for (Integer studentId : idList) {
                     libraryService.deleteByStudent(studentId);

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

@@ -30,12 +30,15 @@ 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.Marker;
 import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
 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.ExamStudentService;
 import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
+import cn.com.qmth.stmms.biz.exam.service.MarkerService;
 import cn.com.qmth.stmms.biz.exam.service.ScoreRateService;
+import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
 import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
 import cn.com.qmth.stmms.biz.utils.ScoreItem;
 import cn.com.qmth.stmms.common.auth.annotation.RoleRequire;
@@ -78,6 +81,9 @@ public class ScoreController extends BaseExamController {
 
     @Value("${card.server}")
     private String cardServer;
+    
+    @Autowired
+    private MarkerService markerService;
 
     @Autowired
     private AsyncTaskExecutor taskExecutor;
@@ -95,8 +101,8 @@ public class ScoreController extends BaseExamController {
             query.setSubjectCode(subjectCode);
         }
         query.setExamId(examId);
-        query.setUpload(true);
-        query.setAbsent(false);
+       // query.setUpload(true);
+       // query.setAbsent(false);
         query.orderByExamNumber();
         if (filter == 1) {
             query.setObjectiveScore(0d);
@@ -105,6 +111,10 @@ public class ScoreController extends BaseExamController {
             query.setObjectiveScoreGt(0d);
             query.setSubjectiveScore(0d);
         }
+        String ids = getStudentIdsByMarkLoginAndMarkName(query.getMarkLogin(),query.getMarkName());
+        if(StringUtils.isNotBlank(ids)){
+            query.setIds(ids);
+        }
         subjectFilter(query, wu);
         query = studentService.findByQuery(query);
         for (ExamStudent student : query.getResult()) {
@@ -112,6 +122,26 @@ public class ScoreController extends BaseExamController {
             buildPackageUrl(student);
             buildAnswerUrl(student);
             student.setSubjectRemark(subjectService.find(student.getExamId(), student.getSubjectCode()).getRemark());
+            List<Marker> markers = markerService.findByStudentId(student.getId());
+            if(!markers.isEmpty()){
+            	String loginNames = "";
+            	String names = "";
+            	for (Marker marker : markers) {
+            		loginNames = loginNames.equals("")?marker.getLoginName():loginNames+","+marker.getLoginName();
+            		names = names.equals("")?marker.getName():names +","+marker.getName();
+				}
+                student.setMarkLogin(loginNames);
+                student.setMarkName(names);
+            }
+            List<MarkLibrary> markLibrarys = markLibraryService.findByStudentId(student.getId());
+            if(!markLibrarys.isEmpty()){
+            	for (MarkLibrary markLibrary : markLibrarys) {
+            		if(markLibrary.getTags()!=null){
+            			student.setTagValue(markLibrary.getTags());
+            			break;
+            		}
+				}
+            }
         }
         view.addObject("query", query);
         view.addObject("filter", filter);
@@ -196,11 +226,15 @@ public class ScoreController extends BaseExamController {
         int examId = getSessionExamId(request);
         String subjectCode = RequestUtils.getSession(request).getParameter("subjectCode");
         query.setExamId(examId);
-        query.setUpload(true);
-        query.setAbsent(false);
+//        query.setUpload(true);
+//        query.setAbsent(false);
         query.setPageNumber(1);
         query.setPageSize(Integer.MAX_VALUE);
         subjectFilter(query, wu);
+        String ids = getStudentIdsByMarkLoginAndMarkName(query.getMarkLogin(),query.getMarkName());
+        if(StringUtils.isNotBlank(ids)){
+            query.setIds(ids);
+        }
         query = studentService.findByQuery(query);
         String fileName = "成绩单.xlsx";
         try {
@@ -208,6 +242,10 @@ public class ScoreController extends BaseExamController {
                 fileName = subjectService.find(examId, subjectCode).getName() + "-机阅考试成绩表";
                 List<ScoreExportDTO> list = new LinkedList<ScoreExportDTO>();
                 for (ExamStudent student : query.getResult()) {
+                    if(student.isBreach() || student.isAbsent()){
+                        student.setObjectiveScore(0d);
+                        student.setSubjectiveScore(0d);
+                    }
                     list.add(new ScoreExportDTO(student));
                 }
                 new ExportExcel(subjectCode + "-" + subjectService.find(examId, subjectCode).getName(),
@@ -216,6 +254,10 @@ public class ScoreController extends BaseExamController {
             }
             List<ExamStudentDTO> list = new LinkedList<ExamStudentDTO>();
             for (ExamStudent student : query.getResult()) {
+                if(student.isBreach() || student.isAbsent()){
+                    student.setObjectiveScore(0d);
+                    student.setSubjectiveScore(0d);
+                }
                 list.add(new ExamStudentDTO(student));
             }
             new ExportExcel("成绩单", ExamStudentDTO.class).setDataList(list).write(response, fileName).dispose();
@@ -286,4 +328,31 @@ public class ScoreController extends BaseExamController {
             student.setAnswerUrl(subject.getAnswerUrl());
         }
     }
+    
+    public String getStudentIdsByMarkLoginAndMarkName(String markLogin,String markName){
+        String ids = "";
+        if(StringUtils.isNotBlank(markLogin)){
+            ids += studentService.findIdsByMarkLogin(markLogin);
+            if(ids.equals("")){
+                ids = "-1";
+            }
+        }
+        if(StringUtils.isNotBlank(markName)){
+            String s =  studentService.findIdsByMarkName(markName);
+            if(StringUtils.isBlank(ids)){
+                if(s.equals("")){
+                    ids = "-1";
+                }else{
+                    ids += s;
+                }
+            }else{
+                if(!ids.equals("-1")){
+                    if(StringUtils.isBlank(s)){
+                        ids = "-1";
+                    }
+                }
+            }
+        }
+        return ids;
+    }
 }

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

@@ -12,7 +12,7 @@
 		<input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>
 		<input type="hidden" id="pageSize" name="pageSize" value="${query.pageSize }"/>
 		<div>
-			<label>姓名</label>
+			<label>姓&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;名</label>
 			<input type="text" name="name" value="${query.name}"  maxlength="10" class="input-mini"/>
 			<label>准考证号</label>
 			<input type="text" name="examNumber" value="${query.examNumber}" maxlength="50" class="input-small"/>
@@ -25,13 +25,45 @@
 				<option value="${subject.code}" <c:if test="${subject.code==query.subjectCode}">selected</c:if>>${subject.code}-${subject.name}</option>
 				</c:forEach>
 			</select>
+			<label>评卷账号</label>
+			<input type="text" name="markLogin" value="${query.markLogin}"  maxlength="20" class="input-medium"/>
+			<br/><br/>
+			<label>评卷姓名</label>
+			<input type="text" name="markName" value="${query.markName}"  maxlength="20" class="input-mini"/>
 			<label>筛选</label>
 			<select class="input-medium" name="filter">
 				<option value="0">无</option>
 				<option value="1" <c:if test="${filter==1}">selected</c:if>>客观0分,主观有分</option>
 				<option value="2" <c:if test="${filter==2}">selected</c:if>>客观有分,主观0分</option>
 			</select>
-			<br/><br/>
+			
+			<label>是否缺考</label>
+			<select id="absent" name="absent" class="input-small">
+				<option value="">不限</option>
+				<option value="1" <c:if test="${query.absent!=null && query.absent==true}">selected</c:if>>缺考</option>
+				<option value="0" <c:if test="${query.absent!=null && query.absent==false}">selected</c:if>>正常</option>
+			</select>
+
+            <label>是否上传</label>
+            <select id="upload" name="upload" class="input-small">
+                <option value="">不限</option>
+                <option value="1" <c:if test="${query.upload!=null && query.upload==true}">selected</c:if>>已上传</option>
+                <option value="0" <c:if test="${query.upload!=null && query.upload==false}">selected</c:if>>未上传</option>
+            </select>
+
+            <label>是否违纪</label>
+            <select id="breach" name="breach" class="input-small">
+                <option value="">不限</option>
+                <option value="1" <c:if test="${query.breach!=null && query.breach==true}">selected</c:if>>违纪</option>
+                <option value="0" <c:if test="${query.breach!=null && query.breach==false}">selected</c:if>>正常</option>
+            </select>
+            <br/><br/>
+            <!--     总分 > startScore and 总分 <=endScore             -->
+			<label>总分:从</label>
+			<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-mini"/>
+			
 			<input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
 			&nbsp;
 			<c:if test="${!web_user.schoolViewer}">
@@ -61,6 +93,12 @@
 				<th>客观总分</th>
 				<th>主观总分</th>
 				<th>全卷总分</th>
+				<th>是否缺考</th>
+				<th>是否上传</th>
+				<th>是否违纪</th>
+				<th>标记卷类型</th>
+				<th>阅卷账号</th>
+				<th>阅卷姓名</th>
 				<th>查看图片</th>
 			</tr>
 		</thead>
@@ -75,9 +113,82 @@
 				<td>${student.subjectCode}-${student.subjectName}&nbsp;${student.subjectRemark}</td>
 				<td>${student.subjectLevel}</td>
 				<td>${student.subjectCategory}</td>
-				<td>${student.objectiveScoreString}</td>
-				<td>${student.subjectiveScoreString}</td>
-				<td>${student.totalScoreString}</td>
+<td style="text-align: center;">
+                    <c:choose>
+                        <c:when test="${student.absent == true || student.upload == false }">
+                            -
+                        </c:when>
+                        <c:when test="${student.breach == true}">
+                            0
+                        </c:when>
+                        <c:otherwise>
+                            ${student.objectiveScoreString}
+                        </c:otherwise>
+                    </c:choose>
+                </td>
+				<td style="text-align: center;">
+                <c:choose>
+                    <c:when test="${student.absent == true || student.upload == false }">
+                        -
+                    </c:when>
+                    <c:when test="${student.breach == true}">
+                        0
+                    </c:when>
+                    <c:otherwise>
+                        ${student.subjectiveScoreString}
+                    </c:otherwise>
+                </c:choose>
+                </td>
+				<td style="text-align: center;">
+                    <c:choose>
+                        <c:when test="${student.absent == true || student.upload == false }">
+                           -
+                        </c:when>
+                        <c:when test="${student.breach == true}">
+                           0
+                        </c:when>
+                        <c:otherwise>
+                            ${student.totalScoreString}
+                        </c:otherwise>
+                    </c:choose>
+				</td>
+				<td>
+					<!--在成绩查询页面 未上传或者缺考的情况都判断为缺考情况 -->
+					<c:if test="${student.absent == true || student.upload == false }">
+						缺考
+					</c:if>
+				</td>
+                <td>
+                    <c:choose>
+                        <c:when test="${student.upload == false }">
+                            未上传
+                        </c:when>
+                        <c:otherwise>
+                            已上传
+                        </c:otherwise>
+                    </c:choose>
+                </td>
+                <td>
+                    <c:if test="${student.breach == true}">
+                        违纪
+                    </c:if>
+                </td>
+				<td>
+                    <c:if test="${student.tagValue.indexOf('1')>-1}">
+                        试卷雷同<br>
+                    </c:if>
+                    <c:if test="${student.tagValue.indexOf('2')>-1}">
+                        科目错误<br>
+                    </c:if>
+                    <c:if test="${student.tagValue.indexOf('3')>-1}">
+                        贴错条码<br>
+                    </c:if>
+                    <c:if test="${student.tagValue.indexOf('4')>-1}">
+                        违纪<br>
+                    </c:if>
+				</td>
+				<td>${student.markLogin}</td>
+				<td>${student.markName}</td>
 				<td>
 					<a class="sheet-link" href="##" data-sheet-url="${student.sheetUrlString}" data-answer-url="<c:if test="${student.answerUrl!=null}">${cardServer}${student.answerUrl}</c:if>" data-title="${student.examNumber}&nbsp;&nbsp;${student.name}&nbsp;&nbsp;客观总分${student.objectiveScoreString}&nbsp;&nbsp;主观总分${student.subjectiveScoreString}&nbsp;&nbsp;全卷总分${student.totalScoreString}">原图</a>
 					<a class="track-link" href="##" data-image-url="${ctx}/admin/exam/track?studentId=${student.id}" data-title="${student.examNumber}&nbsp;&nbsp;${student.name}">阅卷轨迹</a>
@@ -99,6 +210,7 @@ $(document).ready(function() {
     	delayClose: 0,
     	maxHeight: $(window).height()*0.88
     }); */
+	$("#searchForm").validate();
     
     $('.detail-link').click(function(){
     	var url = '${ctx}/admin/exam/score/detail?examNumber=' + $(this).attr('data-exam-number') + '&queryString=' + encodeURIComponent($('#searchForm').serialize());
@@ -125,6 +237,20 @@ function page(n,s){
 	return false;
 }
 function goSearch(){
+    var startScroe = $("#startScroe").val();var endScore = $("#endScroe").val();
+    if(startScroe.length>0){
+        if(endScore.length == 0){
+            alert("请输入结束分数值!");return false;
+        }
+    }if(endScore.length>0){
+        if(startScroe.length == 0){
+            alert("请输入开始分数值!");return false;
+        }
+    }if(endScore.length>0 && startScroe.length > 0){
+        if(parseInt(startScroe) > parseInt(endScore)){
+            alert("开始分值必须小于结束分值");return false;
+        }
+    }
 	$("#pageNumber").val(1);
 	$("#pageSize").val('${query.pageSize}');
 	$("#searchForm").attr('action','${ctx}/admin/exam/score');
@@ -135,6 +261,10 @@ function goExport(){
 	$("#searchForm").attr('action','${ctx}/admin/exam/score/export');
 	$("#searchForm").submit();
 }
+function goExportScore(){
+	$("#searchForm").attr('action','${ctx}/admin/exam/score/exportScore');
+	$("#searchForm").submit();
+}
 </script>	
 </body>
 </html>