Bläddra i källkod

提交 报表模块

xuwenjin@qmth.com.cn 6 år sedan
förälder
incheckning
953cc84ca0

+ 21 - 0
.idea/compiler.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <annotationProcessing>
+      <profile name="Maven default annotation processors profile" enabled="true">
+        <sourceOutputDir name="target/generated-sources/annotations" />
+        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
+        <outputRelativeToContentRoot value="true" />
+        <module name="stmms-biz" />
+        <module name="stmms-web" />
+        <module name="stmms-common" />
+      </profile>
+    </annotationProcessing>
+    <bytecodeTargetLevel>
+      <module name="stmms-biz" target="1.7" />
+      <module name="stmms-common" target="1.7" />
+      <module name="stmms-parent" target="1.7" />
+      <module name="stmms-web" target="1.7" />
+    </bytecodeTargetLevel>
+  </component>
+</project>

+ 13 - 10
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamQuestionDao.java

@@ -1,35 +1,38 @@
 package cn.com.qmth.stmms.biz.exam.dao;
 package cn.com.qmth.stmms.biz.exam.dao;
 
 
-import java.util.List;
-
+import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.jpa.repository.Query;
 
 
-import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
+import java.util.List;
 
 
 public interface ExamQuestionDao extends JpaRepository<ExamQuestion, Integer>, JpaSpecificationExecutor<ExamQuestion> {
 public interface ExamQuestionDao extends JpaRepository<ExamQuestion, Integer>, JpaSpecificationExecutor<ExamQuestion> {
 
 
+
+    @Query("select sum(q.totalScore) as totalScore from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.mainNumber=?3")
+    public Double queryFullScoreByExamIdAndSubjectCodeAndMainNumber(Integer examId, String subjectCode, Integer mainNumber);
+
     @Query("select q from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3 "
     @Query("select q from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3 "
-            + "order by q.paperType, q.mainNumber, q.subNumber")
+            + "order by q.mainNumber, q.subNumber")
     public List<ExamQuestion> findByExamIdAndSubjectCodeAndObjective(Integer examId, String subjectCode,
     public List<ExamQuestion> findByExamIdAndSubjectCodeAndObjective(Integer examId, String subjectCode,
-            boolean objective);
+                                                                     boolean objective);
 
 
     @Query("select q from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3 "
     @Query("select q from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3 "
             + "and q.paperType=?4 order by q.mainNumber, q.subNumber")
             + "and q.paperType=?4 order by q.mainNumber, q.subNumber")
     public List<ExamQuestion> findByExamIdAndSubjectCodeAndObjectiveAndPaperType(Integer examId, String subjectCode,
     public List<ExamQuestion> findByExamIdAndSubjectCodeAndObjectiveAndPaperType(Integer examId, String subjectCode,
-            boolean objective, String paperType);
+                                                                                 boolean objective, String paperType);
 
 
     @Query("select q from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3 "
     @Query("select q from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3 "
             + "and q.mainNumber=?4 order by q.subNumber")
             + "and q.mainNumber=?4 order by q.subNumber")
     public List<ExamQuestion> findByExamIdAndSubjectCodeAndObjectiveAndMainNumber(Integer examId, String subjectCode,
     public List<ExamQuestion> findByExamIdAndSubjectCodeAndObjectiveAndMainNumber(Integer examId, String subjectCode,
-            boolean objective, Integer mainNumber);
+                                                                                  boolean objective, Integer mainNumber);
 
 
     @Query("select q from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3 "
     @Query("select q from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3 "
             + "and q.paperType=?4 and q.mainNumber=?5 order by q.subNumber")
             + "and q.paperType=?4 and q.mainNumber=?5 order by q.subNumber")
     public List<ExamQuestion> findByExamIdAndSubjectCodeAndObjectiveAndPaperTypeAndMainNumber(Integer examId,
     public List<ExamQuestion> findByExamIdAndSubjectCodeAndObjectiveAndPaperTypeAndMainNumber(Integer examId,
-            String subjectCode, boolean objective, String paperType, Integer mainNumber);
+                                                                                              String subjectCode, boolean objective, String paperType, Integer mainNumber);
 
 
     @Modifying
     @Modifying
     @Query("delete from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3")
     @Query("delete from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3")
@@ -38,12 +41,12 @@ public interface ExamQuestionDao extends JpaRepository<ExamQuestion, Integer>, J
     @Modifying
     @Modifying
     @Query("delete from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3 and q.mainNumber=?4")
     @Query("delete from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3 and q.mainNumber=?4")
     public void deleteByExamIdAndSubjectCodeAndObjectiveAndMainNumber(Integer examId, String subjectCode,
     public void deleteByExamIdAndSubjectCodeAndObjectiveAndMainNumber(Integer examId, String subjectCode,
-            boolean objective, Integer mainNumber);
+                                                                      boolean objective, Integer mainNumber);
 
 
     @Modifying
     @Modifying
     @Query("update ExamQuestion q set q.mainTitle=?5 where q.examId=?1 and q.subjectCode=?2 "
     @Query("update ExamQuestion q set q.mainTitle=?5 where q.examId=?1 and q.subjectCode=?2 "
             + "and q.objective=?3 and q.mainNumber=?4")
             + "and q.objective=?3 and q.mainNumber=?4")
     public void updateMainTitleByExamIdAndSubjectCodeAndObjectiveAndMainNumber(Integer examId, String subjectCode,
     public void updateMainTitleByExamIdAndSubjectCodeAndObjectiveAndMainNumber(Integer examId, String subjectCode,
-            boolean objective, Integer mainNumber, String mainTitle);
+                                                                               boolean objective, Integer mainNumber, String mainTitle);
 
 
 }
 }

+ 15 - 13
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamStudentDao.java

@@ -1,15 +1,14 @@
 package cn.com.qmth.stmms.biz.exam.dao;
 package cn.com.qmth.stmms.biz.exam.dao;
 
 
-import java.util.Date;
-import java.util.List;
-
+import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.PagingAndSortingRepository;
 import org.springframework.data.repository.PagingAndSortingRepository;
 
 
-import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
+import java.util.Date;
+import java.util.List;
 
 
 public interface ExamStudentDao
 public interface ExamStudentDao
         extends PagingAndSortingRepository<ExamStudent, Integer>, JpaSpecificationExecutor<ExamStudent> {
         extends PagingAndSortingRepository<ExamStudent, Integer>, JpaSpecificationExecutor<ExamStudent> {
@@ -17,7 +16,7 @@ public interface ExamStudentDao
     public List<ExamStudent> findByExamId(int examId, Pageable pageable);
     public List<ExamStudent> findByExamId(int examId, Pageable pageable);
 
 
     public List<ExamStudent> findByExamIdAndUploadAndAbsent(int examId, boolean upload, boolean absent,
     public List<ExamStudent> findByExamIdAndUploadAndAbsent(int examId, boolean upload, boolean absent,
-            Pageable pageable);
+                                                            Pageable pageable);
 
 
     public List<ExamStudent> findByExamIdAndCampusName(int examId, String campusName, Pageable pageable);
     public List<ExamStudent> findByExamIdAndCampusName(int examId, String campusName, Pageable pageable);
 
 
@@ -63,7 +62,7 @@ public interface ExamStudentDao
     @Modifying
     @Modifying
     @Query("update ExamStudent s set s.subjectName=?3, s.subjectLevel=?4, s.subjectCategory=?5 where s.examId=?1 and s.subjectCode=?2")
     @Query("update ExamStudent s set s.subjectName=?3, s.subjectLevel=?4, s.subjectCategory=?5 where s.examId=?1 and s.subjectCode=?2")
     public void updateSubjectInfo(int examId, String subjectCode, String subjectName, String subjectLevel,
     public void updateSubjectInfo(int examId, String subjectCode, String subjectName, String subjectLevel,
-            String subjectCategory);
+                                  String subjectCategory);
 
 
     @Modifying
     @Modifying
     @Query("update ExamStudent s set s.exception=?2 where s.id=?1")
     @Query("update ExamStudent s set s.exception=?2 where s.id=?1")
@@ -81,7 +80,7 @@ public interface ExamStudentDao
     @Query("update ExamStudent s set s.sheetCount=?2, s.sliceCount=?3, s.answers=?4, s.batchCode=?5, s.paperType=?6,"
     @Query("update ExamStudent s set s.sheetCount=?2, s.sliceCount=?3, s.answers=?4, s.batchCode=?5, s.paperType=?6,"
             + " s.absent=?7, s.upload=true, s.uploadTime=?8, s.objectiveScore=?9, s.objectiveScoreList=?10 where s.id=?1")
             + " s.absent=?7, s.upload=true, s.uploadTime=?8, s.objectiveScore=?9, s.objectiveScoreList=?10 where s.id=?1")
     public int updateScanInfo(Integer id, Integer sheetCount, Integer sliceCount, String answers, String batchCode,
     public int updateScanInfo(Integer id, Integer sheetCount, Integer sliceCount, String answers, String batchCode,
-            String paperType, boolean absent, Date uploadTime, Double objectiveScore, String objectiveScoreList);
+                              String paperType, boolean absent, Date uploadTime, Double objectiveScore, String objectiveScoreList);
 
 
     @Modifying
     @Modifying
     @Query("update ExamStudent s set s.manualAbsent=0 where s.examId=?1")
     @Query("update ExamStudent s set s.manualAbsent=0 where s.examId=?1")
@@ -98,34 +97,37 @@ public interface ExamStudentDao
     public ExamStudent findByExamIdAndSubjectCodeAndStudentCode(Integer id, String subjectCode, String studentCode);
     public ExamStudent findByExamIdAndSubjectCodeAndStudentCode(Integer id, String subjectCode, String studentCode);
 
 
     public ExamStudent findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(Integer schoolId, String subjectCode,
     public ExamStudent findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(Integer schoolId, String subjectCode,
-            String studentCode, String examSeqCode);
+                                                                           String studentCode, String examSeqCode);
 
 
     public List<ExamStudent> findByExamIdAndUploadTimeAfter(int examId, Date date);
     public List<ExamStudent> findByExamIdAndUploadTimeAfter(int examId, Date date);
 
 
     public List<ExamStudent> findByExamIdAndSubjectCodeAndUploadTimeAfter(int examId, String code, Date date,
     public List<ExamStudent> findByExamIdAndSubjectCodeAndUploadTimeAfter(int examId, String code, Date date,
-            Pageable page);
+                                                                          Pageable page);
 
 
     @Query("select count(s) from ExamStudent s where s.examId=?1 and s.subjectiveScoreList != null ")
     @Query("select count(s) from ExamStudent s where s.examId=?1 and s.subjectiveScoreList != null ")
     public long countByExamIdAndSubjectiveScoreListNotNull(Integer examId);
     public long countByExamIdAndSubjectiveScoreListNotNull(Integer examId);
 
 
     public List<ExamStudent> findByExamIdAndSubjectCodeAndUploadTimeNotNull(int examId, String code);
     public List<ExamStudent> findByExamIdAndSubjectCodeAndUploadTimeNotNull(int examId, String code);
 
 
+    public List<ExamStudent> findByExamIdAndSubjectCodeAndUploadTimeNotNullAndAbsent(int examId, String code, Boolean absent);
+
+
     @Query("select s from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and s.absent=false and s.breach=false and s.uploadTime!=null "
     @Query("select s from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and s.absent=false and s.breach=false and s.uploadTime!=null "
             + "and not exists (select l.id from MarkLibrary l where l.studentId=s.id and l.groupNumber=?3)")
             + "and not exists (select l.id from MarkLibrary l where l.studentId=s.id and l.groupNumber=?3)")
     public List<ExamStudent> findUnLibraryStudent(Integer examId, String subjectCode, Integer groupNumber,
     public List<ExamStudent> findUnLibraryStudent(Integer examId, String subjectCode, Integer groupNumber,
-            Pageable page);
+                                                  Pageable page);
 
 
     @Query("select s from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and s.absent=false and s.breach=false and s.uploadTime!=null and s.uploadTime>=?4 "
     @Query("select s from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and s.absent=false and s.breach=false and s.uploadTime!=null and s.uploadTime>=?4 "
             + "and not exists (select l.id from MarkLibrary l where l.studentId=s.id and l.groupNumber=?3)")
             + "and not exists (select l.id from MarkLibrary l where l.studentId=s.id and l.groupNumber=?3)")
     public List<ExamStudent> findUnLibraryStudent(Integer examId, String subjectCode, Integer groupNumber,
     public List<ExamStudent> findUnLibraryStudent(Integer examId, String subjectCode, Integer groupNumber,
-            Date minUploadTime, Pageable page);
+                                                  Date minUploadTime, Pageable page);
 
 
     @Query("select s from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and s.upload=true and s.absent=false and s.breach=false "
     @Query("select s from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and s.upload=true and s.absent=false and s.breach=false "
             + "and not exists (select l.id from TrialLibrary l where l.studentId=s.id and l.groupNumber=?3)")
             + "and not exists (select l.id from TrialLibrary l where l.studentId=s.id and l.groupNumber=?3)")
     public List<ExamStudent> findUnTrialStudent(Integer examId, String subjectCode, Integer groupNumber, Pageable page);
     public List<ExamStudent> findUnTrialStudent(Integer examId, String subjectCode, Integer groupNumber, Pageable page);
 
 
     @Query("select s from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and (s.absent=true or s.breach=true) and "
     @Query("select s from ExamStudent s where s.examId=?1 and s.subjectCode=?2 and (s.absent=true or s.breach=true) and "
-            + " (exists (select l.id from MarkLibrary l where l.studentId=s.id) or exists (select t.id from TrialLibrary t where t.studentId=s.id)) ")
+            + "exists (select l.id from MarkLibrary l where l.studentId=s.id)")
     public List<ExamStudent> findAbsentOrBreachLibraryStudent(Integer examId, String subjectCode);
     public List<ExamStudent> findAbsentOrBreachLibraryStudent(Integer examId, String subjectCode);
 
 
     @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),"
     @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),"
@@ -160,7 +162,7 @@ public interface ExamStudentDao
             + "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) "
             + "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")
             + " 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,
     public List<Object[]> statisticsByAbsentAndBreach(Integer examId, String code, Boolean upload, boolean absent,
-            boolean breach);
+                                                      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)
     @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);
     public List<String[]> findIdsByMarkLogin(String markLogin);

+ 32 - 13
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/Exam.java

@@ -1,22 +1,13 @@
 package cn.com.qmth.stmms.biz.exam.model;
 package cn.com.qmth.stmms.biz.exam.model;
 
 
+import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
+import cn.com.qmth.stmms.common.enums.ExamStatus;
+
+import javax.persistence.*;
 import java.io.Serializable;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
 
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-
-import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
-import cn.com.qmth.stmms.common.enums.ExamStatus;
-
 @Entity
 @Entity
 @Table(name = "eb_exam")
 @Table(name = "eb_exam")
 public class Exam implements Serializable {
 public class Exam implements Serializable {
@@ -68,6 +59,19 @@ public class Exam implements Serializable {
     @Column(name = "creator_id")
     @Column(name = "creator_id")
     private Integer creatorId;
     private Integer creatorId;
 
 
+    /**
+     * 及格分数
+     */
+    @Column(name = "pass_score")
+    private Double passScore;
+
+    /**
+     * 优秀分数
+     */
+    @Column(name = "excellent_score")
+    private Double excellentScore;
+
+
     public Integer getId() {
     public Integer getId() {
         return id;
         return id;
     }
     }
@@ -160,4 +164,19 @@ public class Exam implements Serializable {
         return PictureConfigItem.parse(sliceConfig);
         return PictureConfigItem.parse(sliceConfig);
     }
     }
 
 
+    public Double getPassScore() {
+        return passScore;
+    }
+
+    public void setPassScore(Double passScore) {
+        this.passScore = passScore;
+    }
+
+    public Double getExcellentScore() {
+        return excellentScore;
+    }
+
+    public void setExcellentScore(Double excellentScore) {
+        this.excellentScore = excellentScore;
+    }
 }
 }

+ 3 - 2
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/examIndex.jsp

@@ -70,7 +70,7 @@
 				      <li><a href="${ctx}/admin/account/modifyPwd" target="mainFrame"><i class="icon-lock"></i>&nbsp; 修改密码</a></li>
 				      <li><a href="${ctx}/admin/account/modifyPwd" target="mainFrame"><i class="icon-lock"></i>&nbsp; 修改密码</a></li>
 				    </ul>
 				    </ul>
 			  	 </li>
 			  	 </li>
-			  	 <li><a href="${ctx}/logout" title="退出登录">退出</a></li>
+			  	 <li><a href="${ctx}/admin-logout" title="退出登录">退出</a></li>
 			  	 <li>&nbsp;</li>
 			  	 <li>&nbsp;</li>
 	           </ul>
 	           </ul>
 	         </div><!--/.nav-collapse -->
 	         </div><!--/.nav-collapse -->
@@ -95,7 +95,8 @@
 											<li><a href="${ctx}/admin/exam/scan" target="mainFrame" ><i class="icon-print"></i>扫描进度</a></li>
 											<li><a href="${ctx}/admin/exam/scan" target="mainFrame" ><i class="icon-print"></i>扫描进度</a></li>
 											<li><a href="${ctx}/admin/exam/mark" target="mainFrame" ><i class="icon-pencil"></i>评卷管理</a></li>
 											<li><a href="${ctx}/admin/exam/mark" target="mainFrame" ><i class="icon-pencil"></i>评卷管理</a></li>
 											<li><a href="${ctx}/admin/exam/score" target="mainFrame" ><i class="icon-search"></i>成绩查询</a></li>
 											<li><a href="${ctx}/admin/exam/score" target="mainFrame" ><i class="icon-search"></i>成绩查询</a></li>
-											<li><a href="${ctx}/admin/exam/statistics" target="mainFrame" ><i class="icon-align-center"></i>成绩分析</a></li>		
+											<li><a href="${ctx}/admin/exam/reportSubjectRange" target="mainFrame" ><i class="icon-search"></i>报表统计</a></li>
+											<li><a href="${ctx}/admin/exam/statistics" target="mainFrame" ><i class="icon-align-center"></i>成绩分析</a></li>
 											<li><a href="${ctx}/admin/exam/tag" target="mainFrame" ><i class="icon-tag"></i>标记试卷</a></li>	
 											<li><a href="${ctx}/admin/exam/tag" target="mainFrame" ><i class="icon-tag"></i>标记试卷</a></li>	
 											<li><a href="${ctx}/admin/exam/check/answer" target="mainFrame" ><i class="icon-check"></i>数据检查</a></li>			
 											<li><a href="${ctx}/admin/exam/check/answer" target="mainFrame" ><i class="icon-check"></i>数据检查</a></li>			
 											</c:if>
 											</c:if>