Преглед изворни кода

修改eb_exam_question表结构

luoshi пре 6 година
родитељ
комит
a81e0f602c
16 измењених фајлова са 186 додато и 402 уклоњено
  1. 26 47
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamQuestionDao.java
  2. 54 30
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ExamQuestion.java
  3. 0 132
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/QuestionPK.java
  4. 13 31
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamQuestionService.java
  5. 25 88
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamQuestionServiceImpl.java
  6. 8 8
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamStudentServiceImpl.java
  7. 27 17
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/query/ExamQuestionSearchQuery.java
  8. 4 4
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkServiceImpl.java
  9. 4 4
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/TaskServiceImpl.java
  10. 2 2
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/AnswerCheckController.java
  11. 7 8
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkGroupController.java
  12. 2 18
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/PaperController.java
  13. 4 4
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ScoreController.java
  14. 2 2
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/ScoreCalculateThread.java
  15. 6 5
      stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ExamStudentController.java
  16. 2 2
      stmms-web/src/main/java/cn/com/qmth/stmms/common/controller/BaseController.java

+ 26 - 47
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamQuestionDao.java

@@ -8,63 +8,42 @@ import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
-import cn.com.qmth.stmms.biz.exam.model.QuestionPK;
 
-public interface ExamQuestionDao
-        extends JpaRepository<ExamQuestion, QuestionPK>, JpaSpecificationExecutor<ExamQuestion> {
+public interface ExamQuestionDao extends JpaRepository<ExamQuestion, Integer>, JpaSpecificationExecutor<ExamQuestion> {
 
-    @Query("select q from ExamQuestion q where q.pk.examId=?1 and q.pk.subjectCode=?2 "
-            + "and q.pk.objective=?3 order by q.pk.mainNumber, q.pk.subNumber")
-    public List<ExamQuestion> findByExamIdAndSubjectCodeAndObjective(int examId, String subjectCode, boolean objective);
-
-    @Query("select q from ExamQuestion q where q.pk.examId=?1 and q.pk.subjectCode=?2 and q.pk.paperType=?3 "
-            + "and q.pk.objective=?4 order by q.pk.mainNumber, q.pk.subNumber")
-    public List<ExamQuestion> findByExamIdAndSubjectCodeAndPaperTypeAndObjective(int examId, String subjectCode,
-            String paperType, boolean objective);
-
-    @Query("select q from ExamQuestion q where q.pk.examId=?1 and q.pk.subjectCode=?2 "
-            + "and q.pk.objective=?3 and q.pk.mainNumber=?4 order by q.pk.subNumber")
-    public List<ExamQuestion> findByExamIdAndSubjectCodeAndObjectiveAndMainNumber(int examId, String subjectCode,
-            boolean objective, int mainNumber);
-
-    @Query("select q from ExamQuestion q where q.pk.examId=?1 and q.pk.subjectCode=?2 and q.pk.paperType=?3 "
-            + "and q.pk.objective=?4 and q.pk.mainNumber=?5 order by q.pk.subNumber")
-    public List<ExamQuestion> findByExamIdAndSubjectCodeAndPaperTypeAndObjectiveAndMainNumber(int examId,
-            String subjectCode, String paperType, boolean objective, int mainNumber);
+    @Query("select q from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3 "
+            + "order by q.mainNumber, q.subNumber")
+    public List<ExamQuestion> findByExamIdAndSubjectCodeAndObjective(Integer examId, String subjectCode,
+            boolean objective);
 
-    @Query("select sum(q.totalScore) from ExamQuestion q where q.pk.examId=?1 and q.pk.subjectCode=?2 "
-            + "and q.pk.paperType=?3 and q.pk.objective=?4")
-    public Double sumScoreByExamIdAndSubjectCodeAndPaperTypeAndObjective(int examId, String subjectCode,
-            String paperType, boolean objective);
+    @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")
+    public List<ExamQuestion> findByExamIdAndSubjectCodeAndObjectiveAndPaperType(Integer examId, String subjectCode,
+            boolean objective, String paperType);
 
-    @Modifying
-    @Query("delete from ExamQuestion q where q.pk.examId=?1")
-    public void deleteByExamId(int examId);
+    @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")
+    public List<ExamQuestion> findByExamIdAndSubjectCodeAndObjectiveAndMainNumber(Integer examId, String subjectCode,
+            boolean objective, Integer mainNumber);
 
-    @Modifying
-    @Query("delete from ExamQuestion q where q.pk.examId=?1 and q.pk.subjectCode=?2")
-    public void deleteByExamIdAndSubjectCode(int examId, String subjectCode);
+    @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")
+    public List<ExamQuestion> findByExamIdAndSubjectCodeAndObjectiveAndPaperTypeAndMainNumber(Integer examId,
+            String subjectCode, boolean objective, String paperType, Integer mainNumber);
 
     @Modifying
-    @Query("delete from ExamQuestion q where q.pk.examId=?1 and q.pk.subjectCode=?2 and q.pk.objective=?3")
-    public void deleteByExamIdAndSubjectCodeAndObjective(int examId, String subjectCode, boolean objective);
+    @Query("delete from ExamQuestion q where q.examId=?1 and q.subjectCode=?2 and q.objective=?3")
+    public void deleteByExamIdAndSubjectCodeAndObjective(Integer examId, String subjectCode, boolean objective);
 
     @Modifying
-    @Query("delete from ExamQuestion q where q.pk.examId=?1 and q.pk.subjectCode=?2 "
-            + "and q.pk.paperType=?3 and q.pk.objective=?4")
-    public void deleteByExamIdAndSubjectCodeAndPaperTypeAndObjective(int examId, String subjectCode, String paperType,
-            boolean objective);
-
-    @Modifying(clearAutomatically = true)
-    @Query("delete from ExamQuestion q where q.pk.examId=?1 and q.pk.subjectCode=?2 "
-            + "and q.pk.paperType=?3 and q.pk.objective=?4 and q.pk.mainNumber=?5")
-    public void deleteByExamIdAndSubjectCodeAndPaperTypeAndObjectiveAndMainNumber(int examId, String subjectCode,
-            String paperType, boolean objective, int mainNumber);
+    @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,
+            boolean objective, Integer mainNumber);
 
     @Modifying
-    @Query("update ExamQuestion q set q.mainTitle=?5 where q.pk.examId=?1 and q.pk.subjectCode=?2 "
-            + "and q.pk.objective=?3 and q.pk.mainNumber=?4")
-    public void updateMainTitleByExamIdAndSubjectCodeAndObjectiveAndMainNumber(int examId, String subjectCode,
-            boolean objective, int mainNumber, String mainTitle);
+    @Query("update ExamQuestion q set q.mainTitle=?5 where q.examId=?1 and q.subjectCode=?2 "
+            + "and q.objective=?3 and q.mainNumber=?4")
+    public void updateMainTitleByExamIdAndSubjectCodeAndObjectiveAndMainNumber(Integer examId, String subjectCode,
+            boolean objective, Integer mainNumber, String mainTitle);
 
 }

+ 54 - 30
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ExamQuestion.java

@@ -5,8 +5,9 @@ import java.util.LinkedList;
 import java.util.List;
 
 import javax.persistence.Column;
-import javax.persistence.EmbeddedId;
 import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
 import javax.persistence.Table;
 import javax.persistence.Transient;
 
@@ -16,37 +17,56 @@ public class ExamQuestion implements Serializable {
 
     private static final long serialVersionUID = -6614640229855098561L;
 
-    @EmbeddedId
-    private QuestionPK pk;
+    @Id
+    @GeneratedValue
+    private Integer id;
 
-    @Column(name = "main_title", length = 128)
+    @Column(name = "exam_id", nullable = false)
+    private Integer examId;
+
+    @Column(name = "subject_code", nullable = false, length = 32)
+    private String subjectCode;
+
+    @Column(name = "paper_type", nullable = true, length = 32)
+    private String paperType;
+
+    @Column(name = "is_objective", nullable = false)
+    private boolean objective;
+
+    @Column(name = "main_number", nullable = false)
+    private Integer mainNumber;
+
+    @Column(name = "sub_number", nullable = false)
+    private Integer subNumber;
+
+    @Column(name = "main_title", nullable = false, length = 64)
     private String mainTitle;
 
-    @Column(name = "answer")
+    @Column(name = "answer", nullable = true, length = 16)
     private String answer;
 
-    @Column(name = "total_score")
+    @Column(name = "total_score", nullable = false)
     private Double totalScore;
 
-    @Column(name = "interval_score")
+    @Column(name = "interval_score", nullable = false)
     private Double intervalScore;
 
     /**
      * 考生人数
      */
-    @Column(name = "total_count")
+    @Column(name = "total_count", nullable = true)
     private Integer totalCount;
 
     /**
      * 零分人数
      */
-    @Column(name = "zero_count")
+    @Column(name = "zero_count", nullable = true)
     private Integer zeroCount;
 
     /**
      * 满分人数
      */
-    @Column(name = "full_count")
+    @Column(name = "full_count", nullable = true)
     private Integer fullCount;
 
     @Transient
@@ -70,62 +90,66 @@ public class ExamQuestion implements Serializable {
     @Transient
     private Integer trialCount;
 
-    public ExamQuestion() {
-        this.pk = new QuestionPK();
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
     }
 
     public Integer getExamId() {
-        return pk.getExamId();
+        return examId;
     }
 
     public void setExamId(Integer examId) {
-        pk.setExamId(examId);
+        this.examId = examId;
     }
 
     public String getSubjectCode() {
-        return pk.getSubjectCode();
+        return subjectCode;
     }
 
     public void setSubjectCode(String subjectCode) {
-        pk.setSubjectCode(subjectCode);
+        this.subjectCode = subjectCode;
     }
 
     public String getPaperType() {
-        return pk.getPaperType();
+        return paperType;
     }
 
     public void setPaperType(String paperType) {
-        pk.setPaperType(paperType);
+        this.paperType = paperType;
+    }
+
+    public boolean isObjective() {
+        return objective;
+    }
+
+    public void setObjective(boolean objective) {
+        this.objective = objective;
     }
 
     public Integer getMainNumber() {
-        return pk.getMainNumber();
+        return mainNumber;
     }
 
     public void setMainNumber(Integer mainNumber) {
-        pk.setMainNumber(mainNumber);
+        this.mainNumber = mainNumber;
     }
 
     public Integer getSubNumber() {
-        return pk.getSubNumber();
+        return subNumber;
     }
 
     public void setSubNumber(Integer subNumber) {
-        pk.setSubNumber(subNumber);
+        this.subNumber = subNumber;
     }
 
     public String getMainTitle() {
         return mainTitle;
     }
 
-    public void setObjective(boolean objective) {
-        pk.setObjective(objective);
-    }
-
-    public boolean isObjective() {
-        return pk.isObjective();
-    }
-
     public void setMainTitle(String mainTitle) {
         this.mainTitle = mainTitle;
     }

+ 0 - 132
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/QuestionPK.java

@@ -1,132 +0,0 @@
-package cn.com.qmth.stmms.biz.exam.model;
-
-import java.io.Serializable;
-
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
-
-@Embeddable
-public class QuestionPK implements Serializable {
-
-    private static final long serialVersionUID = -4806329348030887113L;
-
-    @Column(name = "exam_id")
-    private Integer examId;
-
-    @Column(name = "subject_code")
-    private String subjectCode;
-
-    @Column(name = "paper_type")
-    private String paperType;
-
-    @Column(name = "main_number")
-    private Integer mainNumber;
-
-    @Column(name = "sub_number")
-    private Integer subNumber;
-
-    @Column(name = "is_objective")
-    private boolean objective;
-
-    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 String getPaperType() {
-        return paperType;
-    }
-
-    public void setPaperType(String paperType) {
-        this.paperType = paperType;
-    }
-
-    public Integer getMainNumber() {
-        return mainNumber;
-    }
-
-    public void setMainNumber(Integer mainNumber) {
-        this.mainNumber = mainNumber;
-    }
-
-    public Integer getSubNumber() {
-        return subNumber;
-    }
-
-    public void setSubNumber(Integer subNumber) {
-        this.subNumber = subNumber;
-    }
-
-    public boolean isObjective() {
-        return objective;
-    }
-
-    public void setObjective(boolean objective) {
-        this.objective = objective;
-    }
-
-    @Override
-    public int hashCode() {
-        final int PRIME = 31;
-        int result = 1;
-        result = PRIME * result + ((examId == null) ? 0 : examId.hashCode());
-        result = PRIME * result + ((subjectCode == null) ? 0 : subjectCode.hashCode());
-        result = PRIME * result + ((paperType == null) ? 0 : paperType.hashCode());
-        result = PRIME * result + ((mainNumber == null) ? 0 : mainNumber.hashCode());
-        result = PRIME * result + ((subNumber == null) ? 0 : subNumber.hashCode());
-        result = PRIME * result + (objective ? 1 : 0);
-        return result;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj)
-            return true;
-        if (obj == null)
-            return false;
-        if (getClass() != obj.getClass())
-            return false;
-        final QuestionPK other = (QuestionPK) obj;
-        if (examId == null) {
-            if (other.examId != null)
-                return false;
-        } else if (!examId.equals(other.examId))
-            return false;
-        if (subjectCode == null) {
-            if (other.subjectCode != null)
-                return false;
-        } else if (!subjectCode.equals(other.subjectCode))
-            return false;
-        if (paperType == null) {
-            if (other.paperType != null)
-                return false;
-        } else if (!paperType.equals(other.paperType))
-            return false;
-        if (mainNumber == null) {
-            if (other.mainNumber != null)
-                return false;
-        } else if (!mainNumber.equals(other.mainNumber))
-            return false;
-        if (subNumber == null) {
-            if (other.subNumber != null)
-                return false;
-        } else if (!subNumber.equals(other.subNumber))
-            return false;
-        if (objective != other.objective) {
-            return false;
-        }
-        return true;
-    }
-
-}

+ 13 - 31
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamQuestionService.java

@@ -9,44 +9,26 @@ public interface ExamQuestionService {
 
     ExamQuestion save(ExamQuestion question);
 
-    void deleteByExam(int examId);
-
-    void deleteByExamAndSubject(int examId, String subjectCode);
-
-    void deleteByExamAndSubjectAndObjective(int examId, String subjectCode, boolean objective);
-
-    void deleteByExamAndSubjectAndPaperTypeAndObjective(int examId, String subjectCode, String paperType,
-            boolean objective);
-
-    void deleteByExamAndSubjectAndPaperTypeAndObjectiveAndMainNumber(int examId, String subjectCode, String paperType,
-            boolean objective, int mainNumber);
-
-    ExamQuestion findOne(int examId, String subjectCode, String paperType, boolean objective, int mainNumber,
-            int subNumber);
-
-    List<ExamQuestion> findByExamAndSubjectAndObjective(int examId, String subjectCode, boolean objective);
+    ExamQuestionSearchQuery findByQuery(ExamQuestionSearchQuery query);
 
-    List<ExamQuestion> findByExamAndSubjectAndPaperTypeAndObjective(int examId, String subjectCode, String paperType,
-            boolean objective);
+    long countByQuery(ExamQuestionSearchQuery query);
 
-    List<ExamQuestion> findByExamAndSubjectAndPaperTypeAndObjectiveAndMainNumber(int examId, String subjectCode,
-            String paperType, boolean objective, int mainNumber);
+    void updateMainTitle(Integer examId, String subjectCode, boolean objective, Integer mainNumber, String mainTitle);
 
-    long countByExamAndSubject(int examId, String subjectCode);
+    void deleteByExamAndSubjectAndObjective(Integer examId, String subjectCode, boolean objective);
 
-    long countByExamAndSubjectAndPaperTypeAndObjective(int examId, String subjectCode, String paperType,
-            boolean objective);
+    void deleteByExamAndSubjectAndObjectiveAndMainNumber(Integer examId, String subjectCode, boolean objective,
+            Integer mainNumber);
 
-    ExamQuestionSearchQuery findByQuery(ExamQuestionSearchQuery query);
-
-    long countByQuery(ExamQuestionSearchQuery query);
+    List<ExamQuestion> findByExamAndSubjectAndObjective(Integer examId, String subjectCode, boolean objective);
 
-    void updateMainTitle(int examId, String subjectCode, boolean objective, int mainNumber, String mainTitle);
+    List<ExamQuestion> findByExamAndSubjectAndObjectiveAndPaperType(Integer examId, String subjectCode,
+            boolean objective, String paperType);
 
-    double sumScoreByExamAndSubjectAndPaperTypeAndObjective(int examId, String subjectCode, String paperType,
-            boolean objective);
+    List<ExamQuestion> findByExamAndSubjectAndObjectiveAndMainNumber(Integer examId, String subjectCode,
+            boolean objective, Integer mainNumber);
 
-    List<ExamQuestion> findByExamAndSubjectAndObjectiveAndMainNumber(int examId, String subjectCode, boolean objective,
-            int mainNumber);
+    List<ExamQuestion> findByExamAndSubjectAndObjectiveAndPaperTypeAndMainNumber(Integer examId, String subjectCode,
+            boolean objective, String paperType, Integer mainNumber);
 
 }

+ 25 - 88
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamQuestionServiceImpl.java

@@ -17,7 +17,6 @@ import org.springframework.transaction.annotation.Transactional;
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
 import cn.com.qmth.stmms.biz.exam.dao.ExamQuestionDao;
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
-import cn.com.qmth.stmms.biz.exam.model.QuestionPK;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
 import cn.com.qmth.stmms.biz.exam.service.query.ExamQuestionSearchQuery;
 
@@ -30,118 +29,54 @@ public class ExamQuestionServiceImpl extends BaseQueryService<ExamQuestion> impl
     @Transactional
     @Override
     public ExamQuestion save(ExamQuestion question) {
-        return questionDao.saveAndFlush(question);
+        return questionDao.save(question);
     }
 
     @Transactional
     @Override
-    public void updateMainTitle(int examId, String subjectCode, boolean objective, int mainNumber, String mainTitle) {
+    public void updateMainTitle(Integer examId, String subjectCode, boolean objective, Integer mainNumber,
+            String mainTitle) {
         questionDao.updateMainTitleByExamIdAndSubjectCodeAndObjectiveAndMainNumber(examId, subjectCode, objective,
                 mainNumber, mainTitle);
     }
 
     @Transactional
     @Override
-    public void deleteByExam(int examId) {
-        questionDao.deleteByExamId(examId);
-    }
-
-    @Transactional
-    @Override
-    public void deleteByExamAndSubject(int examId, String subjectCode) {
-        questionDao.deleteByExamIdAndSubjectCode(examId, subjectCode);
-    }
-
-    @Transactional
-    @Override
-    public void deleteByExamAndSubjectAndObjective(int examId, String subjectCode, boolean objective) {
+    public void deleteByExamAndSubjectAndObjective(Integer examId, String subjectCode, boolean objective) {
         questionDao.deleteByExamIdAndSubjectCodeAndObjective(examId, subjectCode, objective);
     }
 
     @Transactional
     @Override
-    public void deleteByExamAndSubjectAndPaperTypeAndObjective(int examId, String subjectCode, String paperType,
-            boolean objective) {
-        questionDao.deleteByExamIdAndSubjectCodeAndPaperTypeAndObjective(examId, subjectCode, paperType, objective);
-    }
-
-    @Transactional
-    @Override
-    public void deleteByExamAndSubjectAndPaperTypeAndObjectiveAndMainNumber(int examId, String subjectCode,
-            String paperType, boolean objective, int mainNumber) {
-        questionDao.deleteByExamIdAndSubjectCodeAndPaperTypeAndObjectiveAndMainNumber(examId, subjectCode, paperType,
-                objective, mainNumber);
+    public void deleteByExamAndSubjectAndObjectiveAndMainNumber(Integer examId, String subjectCode, boolean objective,
+            Integer mainNumber) {
+        questionDao.deleteByExamIdAndSubjectCodeAndObjectiveAndMainNumber(examId, subjectCode, objective, mainNumber);
     }
 
     @Override
-    public ExamQuestion findOne(int examId, String subjectCode, String paperType, boolean objective, int mainNumber,
-            int subNumber) {
-        QuestionPK pk = new QuestionPK();
-        pk.setExamId(examId);
-        pk.setSubjectCode(subjectCode);
-        pk.setPaperType(paperType);
-        pk.setMainNumber(mainNumber);
-        pk.setSubNumber(subNumber);
-        pk.setObjective(objective);
-        return questionDao.findOne(pk);
-    }
-
-    @Override
-    public List<ExamQuestion> findByExamAndSubjectAndObjective(int examId, String subjectCode, boolean objective) {
+    public List<ExamQuestion> findByExamAndSubjectAndObjective(Integer examId, String subjectCode, boolean objective) {
         return questionDao.findByExamIdAndSubjectCodeAndObjective(examId, subjectCode, objective);
     }
 
     @Override
-    public List<ExamQuestion> findByExamAndSubjectAndPaperTypeAndObjective(int examId, String subjectCode,
-            String paperType, boolean objective) {
-        return questionDao.findByExamIdAndSubjectCodeAndPaperTypeAndObjective(examId, subjectCode, paperType,
-                objective);
+    public List<ExamQuestion> findByExamAndSubjectAndObjectiveAndPaperType(Integer examId, String subjectCode,
+            boolean objective, String paperType) {
+        return questionDao.findByExamIdAndSubjectCodeAndObjectiveAndPaperType(examId, subjectCode, objective,
+                paperType);
     }
 
     @Override
-    public List<ExamQuestion> findByExamAndSubjectAndObjectiveAndMainNumber(int examId, String subjectCode,
-            boolean objective, int mainNumber) {
+    public List<ExamQuestion> findByExamAndSubjectAndObjectiveAndMainNumber(Integer examId, String subjectCode,
+            boolean objective, Integer mainNumber) {
         return questionDao.findByExamIdAndSubjectCodeAndObjectiveAndMainNumber(examId, subjectCode, objective,
                 mainNumber);
     }
 
     @Override
-    public List<ExamQuestion> findByExamAndSubjectAndPaperTypeAndObjectiveAndMainNumber(int examId, String subjectCode,
-            String paperType, boolean objective, int mainNumber) {
-        return questionDao.findByExamIdAndSubjectCodeAndPaperTypeAndObjectiveAndMainNumber(examId, subjectCode,
-                paperType, objective, mainNumber);
-    }
-
-    @Override
-    public long countByExamAndSubject(int examId, String subjectCode) {
-        ExamQuestionSearchQuery query = new ExamQuestionSearchQuery();
-        query.setExamId(examId);
-        query.setSubjectCode(subjectCode);
-        return countByQuery(query);
-    }
-
-    @Override
-    public long countByExamAndSubjectAndPaperTypeAndObjective(int examId, String subjectCode, String paperType,
-            boolean objective) {
-        ExamQuestionSearchQuery query = new ExamQuestionSearchQuery();
-        query.setExamId(examId);
-        query.setSubjectCode(subjectCode);
-        query.setPaperType(paperType);
-        query.setObjective(objective);
-        return countByQuery(query);
-    }
-
-    @Override
-    public double sumScoreByExamAndSubjectAndPaperTypeAndObjective(int examId, String subjectCode, String paperType,
-            boolean objective) {
-        long count = countByExamAndSubjectAndPaperTypeAndObjective(examId, subjectCode, paperType, objective);
-        if (count > 0) {
-            Double score = questionDao.sumScoreByExamIdAndSubjectCodeAndPaperTypeAndObjective(examId, subjectCode,
-                    paperType, objective);
-            return score != null ? score.doubleValue() : 0;
-        } else {
-            return 0;
-        }
+    public List<ExamQuestion> findByExamAndSubjectAndObjectiveAndPaperTypeAndMainNumber(Integer examId,
+            String subjectCode, boolean objective, String paperType, Integer mainNumber) {
+        return questionDao.findByExamIdAndSubjectCodeAndObjectiveAndPaperTypeAndMainNumber(examId, subjectCode,
+                objective, paperType, mainNumber);
     }
 
     @Override
@@ -164,17 +99,19 @@ public class ExamQuestionServiceImpl extends BaseQueryService<ExamQuestion> impl
             public Predicate toPredicate(Root<ExamQuestion> root, CriteriaQuery<?> cQuery, CriteriaBuilder cb) {
 
                 List<Predicate> predicates = new LinkedList<Predicate>();
-                if (query.getExamId() > 0) {
-                    predicates.add(cb.equal(root.get("pk").get("examId"), query.getExamId()));
+                if (query.getExamId() != null) {
+                    predicates.add(cb.equal(root.get("examId"), query.getExamId()));
                 }
                 if (query.getSubjectCode() != null) {
-                    predicates.add(cb.equal(root.get("pk").get("subjectCode"), query.getSubjectCode()));
+                    predicates.add(cb.equal(root.get("subjectCode"), query.getSubjectCode()));
                 }
                 if (query.getPaperType() != null) {
-                    predicates.add(cb.equal(root.get("pk").get("paperType"), query.getPaperType()));
+                    predicates.add(cb.equal(root.get("paperType"), query.getPaperType()));
+                } else if (query.getNullPaperType() != null && query.getNullPaperType().booleanValue()) {
+                    predicates.add(cb.isNull(root.get("paperType")));
                 }
                 if (query.getObjective() != null) {
-                    predicates.add(cb.equal(root.get("pk").get("objective"), query.getObjective()));
+                    predicates.add(cb.equal(root.get("objective"), query.getObjective()));
                 }
                 if (query.getTotalCountGt() != null) {
                     predicates.add(cb.gt(root.get("totalCount").as(Integer.class), query.getTotalCountGt()));

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

@@ -115,7 +115,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         Set<String> packageSet = new HashSet<String>();
 
         for (ExamStudent student : list) {
-        	ExamSubject subject = null;
+            ExamSubject subject = null;
             if (!subjectMap.containsKey(student.getSubjectCode())) {
                 subject = new ExamSubject();
                 subject.setCode(student.getSubjectCode());
@@ -123,9 +123,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
                 subject.setLevel(StringUtils.trimToNull(student.getSubjectLevel()));
                 subject.setCategory(StringUtils.trimToNull(student.getSubjectCategory()));
                 subject.setRemark(StringUtils.trimToNull(student.getSubjectRemark()));
-            }else{
-            	subject = subjectMap.get(student.getSubjectCode());
-            	subject.setLevel(StringUtils.trimToNull(student.getSubjectLevel()));
+            } else {
+                subject = subjectMap.get(student.getSubjectCode());
+                subject.setLevel(StringUtils.trimToNull(student.getSubjectLevel()));
                 subject.setCategory(StringUtils.trimToNull(student.getSubjectCategory()));
                 subject.setRemark(StringUtils.trimToNull(student.getSubjectRemark()));
             }
@@ -799,8 +799,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     @Override
     public Map<MarkGroup, List<OriginTag>> getSliceTags(ExamStudent student) {
         Map<MarkGroup, List<OriginTag>> tagMap = new HashMap<MarkGroup, List<OriginTag>>();
-        List<ExamQuestion> questions = questionService.findByExamAndSubjectAndPaperTypeAndObjective(student.getExamId(),
-                student.getSubjectCode(), student.getPaperType(), 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) {
@@ -826,8 +826,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
                 + format.format(student.getSubjectiveScore() != null ? student.getSubjectiveScore() : 0));
         // 客观题得分明细
         List<String> objectives = new LinkedList<>();
-        List<ExamQuestion> questions = questionService.findByExamAndSubjectAndPaperTypeAndObjective(student.getExamId(),
-                student.getSubjectCode(), student.getPaperType(), true);
+        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;

+ 27 - 17
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/query/ExamQuestionSearchQuery.java

@@ -8,29 +8,31 @@ import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 
 public class ExamQuestionSearchQuery extends BaseQuery<ExamQuestion> {
 
-    private int examId;
+    private Integer examId;
 
     private String subjectCode;
 
     private String paperType;
 
+    private Boolean nullPaperType;
+
     private Boolean objective;
 
     private Integer totalCountGt;
 
-    private Double zeroRateGt;
-
     private Double totalScoreGt;
 
+    private Double zeroRateGt;
+
     public void orderBySubjectAndNumber() {
         setSort(new Sort(Direction.ASC, "pk.subjectCode", "pk.mainNumber", "pk.subNumber"));
     }
 
-    public int getExamId() {
+    public Integer getExamId() {
         return examId;
     }
 
-    public void setExamId(int examId) {
+    public void setExamId(Integer examId) {
         this.examId = examId;
     }
 
@@ -42,6 +44,22 @@ public class ExamQuestionSearchQuery extends BaseQuery<ExamQuestion> {
         this.subjectCode = subjectCode;
     }
 
+    public String getPaperType() {
+        return paperType;
+    }
+
+    public void setPaperType(String paperType) {
+        this.paperType = paperType;
+    }
+
+    public Boolean getNullPaperType() {
+        return nullPaperType;
+    }
+
+    public void setNullPaperType(Boolean nullPaperType) {
+        this.nullPaperType = nullPaperType;
+    }
+
     public Boolean getObjective() {
         return objective;
     }
@@ -58,14 +76,6 @@ public class ExamQuestionSearchQuery extends BaseQuery<ExamQuestion> {
         this.totalCountGt = totalCountGt;
     }
 
-    public Double getZeroRateGt() {
-        return zeroRateGt;
-    }
-
-    public void setZeroRateGt(Double zeroRateGt) {
-        this.zeroRateGt = zeroRateGt;
-    }
-
     public Double getTotalScoreGt() {
         return totalScoreGt;
     }
@@ -74,12 +84,12 @@ public class ExamQuestionSearchQuery extends BaseQuery<ExamQuestion> {
         this.totalScoreGt = totalScoreGt;
     }
 
-    public String getPaperType() {
-        return paperType;
+    public Double getZeroRateGt() {
+        return zeroRateGt;
     }
 
-    public void setPaperType(String paperType) {
-        this.paperType = paperType;
+    public void setZeroRateGt(Double zeroRateGt) {
+        this.zeroRateGt = zeroRateGt;
     }
 
 }

+ 4 - 4
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkServiceImpl.java

@@ -227,8 +227,8 @@ public class MarkServiceImpl implements MarkService {
             markerDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
                     group.getNumber());
             // 小题数据
-            questionDao.deleteByExamIdAndSubjectCodeAndPaperTypeAndObjectiveAndMainNumber(group.getExamId(),
-                    group.getSubjectCode(), null, false, group.getNumber());
+            questionDao.deleteByExamIdAndSubjectCodeAndObjectiveAndMainNumber(group.getExamId(), group.getSubjectCode(),
+                    false, group.getNumber());
             // 科目总分
             subjectService.updateScore(group.getExamId(), group.getSubjectCode(), false,
                     sumTotalScore(group.getExamId(), group.getSubjectCode()));
@@ -253,8 +253,8 @@ public class MarkServiceImpl implements MarkService {
         try {
             lockService.lockGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
 
-            questionDao.deleteByExamIdAndSubjectCodeAndPaperTypeAndObjectiveAndMainNumber(group.getExamId(),
-                    group.getSubjectCode(), null, false, group.getNumber());
+            questionDao.deleteByExamIdAndSubjectCodeAndObjectiveAndMainNumber(group.getExamId(), group.getSubjectCode(),
+                    false, group.getNumber());
             int i = 0;
             double totalScore = 0d;
             for (Double score : scores) {

+ 4 - 4
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/TaskServiceImpl.java

@@ -324,8 +324,8 @@ public class TaskServiceImpl implements TaskService {
 
     private List<MarkStepDTO> buildMarkStep(ExamStudent student) {
         List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
-        List<ExamQuestion> sList = questionService.findByExamAndSubjectAndPaperTypeAndObjective(student.getExamId(),
-                student.getSubjectCode(), null, false);
+        List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjective(student.getExamId(),
+                student.getSubjectCode(), false);
         int number = 0;
         for (ExamQuestion question : sList) {
             number++;
@@ -362,8 +362,8 @@ public class TaskServiceImpl implements TaskService {
                 stepTask.setLibraryId(library.getId());
                 stepTask.setHeaderId(task.getHeaderId());
                 stepTask.setTags(task.getTags());
-                List<ExamQuestion> sList = questionService.findByExamAndSubjectAndPaperTypeAndObjectiveAndMainNumber(
-                        library.getExamId(), library.getSubjectCode(), null, false, library.getGroupNumber());
+                List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjectiveAndMainNumber(
+                        library.getExamId(), library.getSubjectCode(), false, library.getGroupNumber());
                 if (start == end) {
                     end = end + sList.size() * 2 - 1;
                 } else {

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

@@ -135,8 +135,8 @@ public class AnswerCheckController extends BaseExamController {
 
         JSONArray array = new JSONArray();
         Map<Integer, String> titles = new HashMap<Integer, String>();
-        List<ExamQuestion> questions = questionService.findByExamAndSubjectAndPaperTypeAndObjective(student.getExamId(),
-                student.getSubjectCode(), student.getPaperType(), true);
+        List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjectiveAndPaperType(student.getExamId(),
+                student.getSubjectCode(), true, student.getPaperType());
         List<String> answers = student.getAnswerList();
         if (questions.isEmpty()) {
             // 未设置客观题或无客观题

+ 7 - 8
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkGroupController.java

@@ -228,8 +228,8 @@ public class MarkGroupController extends BaseExamController {
             String pictureConfig = buildPictureConfig(group);
             group.setPicList(pictureConfig);
             model.addAttribute("group", group);
-            model.addAttribute("questions", questionService.findByExamAndSubjectAndPaperTypeAndObjectiveAndMainNumber(
-                    group.getExamId(), group.getSubjectCode(), null, false, group.getNumber()));
+            model.addAttribute("questions", questionService.findByExamAndSubjectAndObjectiveAndMainNumber(
+                    group.getExamId(), group.getSubjectCode(), false, group.getNumber()));
             model.addAttribute("pictureConfig", pictureConfig);
             model.addAttribute("markModeList", MarkMode.values());
             model.addAttribute("scorePolicyList", ScorePolicy.values());
@@ -249,8 +249,8 @@ public class MarkGroupController extends BaseExamController {
         if (group != null) {
             String pictureConfig = buildPictureConfig(group);
             group.setPicList(pictureConfig);
-            group.setScoreList(questionService.findByExamAndSubjectAndPaperTypeAndObjectiveAndMainNumber(examId,
-                    subjectCode, null, false, number));
+            group.setScoreList(
+                    questionService.findByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false, number));
             model.addAttribute("group", group);
             model.addAttribute("pictureConfig", pictureConfig);
             model.addAttribute("markModeList", MarkMode.values());
@@ -290,8 +290,8 @@ public class MarkGroupController extends BaseExamController {
             @RequestParam(required = false) Integer trialCount, @RequestParam(required = false) Boolean sheetView) {
         int examId = getSessionExamId(request);
         MarkGroup group = groupService.findOne(examId, subjectCode, number);
-        List<ExamQuestion> questionList = questionService
-                .findByExamAndSubjectAndPaperTypeAndObjectiveAndMainNumber(examId, subjectCode, null, false, number);
+        List<ExamQuestion> questionList = questionService.findByExamAndSubjectAndObjectiveAndMainNumber(examId,
+                subjectCode, false, number);
         if (group != null) {
             // quick update
             picList = StringEscapeUtils.unescapeHtml(picList);
@@ -376,8 +376,7 @@ public class MarkGroupController extends BaseExamController {
             List<Double> scores = buildDoubleList(scoreList);
             if (group.getTitle() != null && group.getPicList() != null && scores.size() > 0) {
                 // clear and replace exam_question
-                questionService.deleteByExamAndSubjectAndPaperTypeAndObjectiveAndMainNumber(examId, subjectCode, null,
-                        false, number);
+                questionService.deleteByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false, number);
                 int i = 0;
                 double totalScore = 0d;
                 for (Double score : scores) {

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

@@ -106,22 +106,6 @@ public class PaperController extends BaseExamController {
         }
     }
 
-    @RequestMapping("/clear")
-    @RoleRequire(Role.SCHOOL_ADMIN)
-    public String clear(Model model, HttpServletRequest request, @RequestParam String subjectCode) {
-        int examId = getSessionExamId(request);
-        ExamSubject subject = subjectService.find(examId, subjectCode);
-        if (subject != null) {
-            questionService.deleteByExamAndSubject(examId, subjectCode);
-
-            subject.setObjectiveScore(0d);
-            subject.setSubjectiveScore(0d);
-            subject.setTotalScore(0d);
-            subjectService.save(subject);
-        }
-        return "redirect:/admin/exam/paper";
-    }
-
     @RequestMapping(value = "/template")
     public String importObjectiveTemplate(HttpServletResponse response, @RequestParam Boolean objective,
             RedirectAttributes redirectAttributes) {
@@ -203,8 +187,8 @@ public class PaperController extends BaseExamController {
                         } else {
                             for (MarkGroup group : dto.getGroups().values()) {
                                 if (groupService.findOne(examId, group.getSubjectCode(), group.getNumber()) == null) {
-                                    questionService.deleteByExamAndSubjectAndPaperTypeAndObjectiveAndMainNumber(
-                                            group.getExamId(), group.getSubjectCode(), null, false, group.getNumber());
+                                    questionService.deleteByExamAndSubjectAndObjectiveAndMainNumber(group.getExamId(),
+                                            group.getSubjectCode(), false, group.getNumber());
                                     for (ExamQuestion question : group.getQuestionList()) {
                                         questionService.save(question);
                                     }

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

@@ -239,8 +239,8 @@ public class ScoreController extends BaseExamController {
     private List<ScoreItem> buildScoreList(ExamStudent student) {
         List<ScoreItem> scoreList = new LinkedList<ScoreItem>();
 
-        List<ExamQuestion> oList = questionService.findByExamAndSubjectAndPaperTypeAndObjective(student.getExamId(),
-                student.getSubjectCode(), student.getPaperType(), true);
+        List<ExamQuestion> oList = questionService.findByExamAndSubjectAndObjectiveAndPaperType(student.getExamId(),
+                student.getSubjectCode(), true, student.getPaperType());
         List<ScoreItem> list1 = student.getScoreList(true);
         int index = 0;
         for (ExamQuestion question : oList) {
@@ -255,8 +255,8 @@ public class ScoreController extends BaseExamController {
         }
         scoreList.addAll(list1);
 
-        List<ExamQuestion> sList = questionService.findByExamAndSubjectAndPaperTypeAndObjective(student.getExamId(),
-                student.getSubjectCode(), null, false);
+        List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjective(student.getExamId(),
+                student.getSubjectCode(), false);
         List<ScoreItem> list2 = student.getScoreList(false);
         index = 0;
         for (ExamQuestion question : sList) {

+ 2 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/ScoreCalculateThread.java

@@ -206,8 +206,8 @@ public class ScoreCalculateThread implements Runnable {
             String key = subjectCode + "_" + StringUtils.trimToEmpty(paperType);
             List<ExamQuestion> list = objectiveMap.get(key);
             if (list == null) {
-                list = questionService.findByExamAndSubjectAndPaperTypeAndObjective(examId, subjectCode, paperType,
-                        true);
+                list = questionService.findByExamAndSubjectAndObjectiveAndPaperType(examId, subjectCode, true,
+                        paperType);
                 objectiveMap.put(key, list);
             }
             return list;

+ 6 - 5
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ExamStudentController.java

@@ -264,8 +264,8 @@ public class ExamStudentController extends BaseApiController {
                         // 构造客观题得分明细
                         JSONArray objective = new JSONArray();
                         List<ScoreItem> scoreList = student.getScoreList(true);
-                        List<ExamQuestion> questionList = questionService.findByExamAndSubjectAndPaperTypeAndObjective(
-                                student.getExamId(), student.getSubjectCode(), student.getPaperType(), true);
+                        List<ExamQuestion> questionList = questionService.findByExamAndSubjectAndObjectiveAndPaperType(
+                                student.getExamId(), student.getSubjectCode(), true, student.getPaperType());
                         int i = 0;
                         for (ScoreItem item : scoreList) {
                             i++;
@@ -288,8 +288,8 @@ public class ExamStudentController extends BaseApiController {
                         // 构造主观题得分明细
                         JSONArray subjective = new JSONArray();
                         scoreList = student.getScoreList(false);
-                        questionList = questionService.findByExamAndSubjectAndPaperTypeAndObjective(student.getExamId(),
-                                student.getSubjectCode(), null, false);
+                        questionList = questionService.findByExamAndSubjectAndObjective(student.getExamId(),
+                                student.getSubjectCode(), false);
                         i = 0;
                         for (ScoreItem item : scoreList) {
                             i++;
@@ -304,7 +304,8 @@ public class ExamStudentController extends BaseApiController {
                             detail.accumulate("mainNumber", question.getMainNumber());
                             detail.accumulate("subNumber", question.getSubNumber());
                             detail.accumulate("score", item.getScore());
-                            detail.accumulate("marker", StringUtils.join(getMarkerNames(student, question.getMainNumber()),","));
+                            detail.accumulate("marker",
+                                    StringUtils.join(getMarkerNames(student, question.getMainNumber()), ","));
                             subjective.add(detail);
                         }
                         obj.accumulate("subjectiveScoreDetail", subjective);

+ 2 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/common/controller/BaseController.java

@@ -149,8 +149,8 @@ public class BaseController {
     private void calculateObjectiveScore(ExamStudent student) {
         ScoreCalculateUtil util = ScoreCalculateUtil.instance(student);
 
-        ScoreInfo info = util.calculate(questionService.findByExamAndSubjectAndPaperTypeAndObjective(
-                student.getExamId(), student.getSubjectCode(), student.getPaperType(), true), null);
+        ScoreInfo info = util.calculate(questionService.findByExamAndSubjectAndObjectiveAndPaperType(
+                student.getExamId(), student.getSubjectCode(), true, student.getPaperType()), null);
 
         student.setObjectiveScore(info.getObjectiveScore());
         student.setScoreList(info.getScoreList(), true);