浏览代码

数据库脚本修正;bug修改

luoshi 4 年之前
父节点
当前提交
7ff5185690
共有 31 个文件被更改,包括 925 次插入951 次删除
  1. 10 18
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/CheckStudent.java
  2. 5 13
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ExamQuestion.java
  3. 1 2
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ExamStudent.java
  4. 1 1
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/MarkGroup.java
  5. 15 6
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/ExamStudentSearchQuery.java
  6. 33 25
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamStudentServiceImpl.java
  7. 1 1
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/ArbitrateHistory.java
  8. 7 7
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/MarkLibrary.java
  9. 10 16
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/TrialHistory.java
  10. 16 24
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/school/model/School.java
  11. 17 17
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/school/service/impl/SchoolServiceImpl.java
  12. 2 2
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/user/service/impl/UserServiceImpl.java
  13. 17 0
      stmms-common/src/main/java/cn/com/qmth/stmms/common/utils/EncryptUtils.java
  14. 0 40
      stmms-common/src/main/java/cn/com/qmth/stmms/common/utils/Md5EncryptUtils.java
  15. 3 3
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkerController.java
  16. 12 19
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ProblemTypeController.java
  17. 14 18
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/StudentController.java
  18. 12 13
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/home/AccountController.java
  19. 16 15
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/school/SchoolController.java
  20. 165 170
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/user/SubjectUserController.java
  21. 152 158
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/user/UserClassController.java
  22. 3 3
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/user/UserController.java
  23. 11 12
      stmms-web/src/main/java/cn/com/qmth/stmms/api/interceptor/ApiInterceptor.java
  24. 2 2
      stmms-web/src/main/java/cn/com/qmth/stmms/common/controller/LoginController.java
  25. 19 13
      stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkController.java
  26. 1 1
      stmms-web/src/main/webapp/WEB-INF/application.properties
  27. 4 4
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/examList.jsp
  28. 13 13
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/paperList.jsp
  29. 0 10
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/studentForm.jsp
  30. 4 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/studentList.jsp
  31. 359 325
      stmms-web/src/main/webapp/sql/stmms_ft.sql

+ 10 - 18
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/CheckStudent.java

@@ -1,19 +1,11 @@
 package cn.com.qmth.stmms.biz.exam.model;
 
+import cn.com.qmth.stmms.common.enums.CheckType;
+
+import javax.persistence.*;
 import java.io.Serializable;
 import java.util.Date;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-
-import cn.com.qmth.stmms.common.enums.CheckType;
-
 @Entity
 @Table(name = "eb_check_student")
 public class CheckStudent implements Serializable {
@@ -36,6 +28,13 @@ public class CheckStudent implements Serializable {
     @Column(name = "subject_code", nullable = false)
     private String subjectCode;
 
+    /**
+     * 处理类型
+     */
+    @Enumerated(EnumType.STRING)
+    @Column(name = "type", length = 16, nullable = false)
+    private CheckType type;
+
     /**
      * 是否被处理
      */
@@ -49,13 +48,6 @@ public class CheckStudent implements Serializable {
     @Column(name = "update_time")
     private Date updateTime;
 
-    /**
-     * 处理类型
-     */
-    @Enumerated(EnumType.STRING)
-    @Column(name = "type", length = 16, nullable = false)
-    private CheckType type;
-
     public CheckStudent() {
     }
 

+ 5 - 13
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ExamQuestion.java

@@ -1,20 +1,12 @@
 package cn.com.qmth.stmms.biz.exam.model;
 
+import cn.com.qmth.stmms.common.enums.ObjectivePolicy;
+
+import javax.persistence.*;
 import java.io.Serializable;
 import java.util.LinkedList;
 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.Transient;
-
-import cn.com.qmth.stmms.common.enums.ObjectivePolicy;
-
 @Entity
 @Table(name = "eb_exam_question")
 public class ExamQuestion implements Serializable {
@@ -31,7 +23,7 @@ public class ExamQuestion implements Serializable {
     @Column(name = "subject_code", nullable = false, length = 32)
     private String subjectCode;
 
-    @Column(name = "paper_type", nullable = true, length = 32)
+    @Column(name = "paper_type", nullable = true, length = 8)
     private String paperType;
 
     @Column(name = "is_objective", nullable = false)
@@ -43,7 +35,7 @@ public class ExamQuestion implements Serializable {
     @Column(name = "sub_number", nullable = false)
     private Integer subNumber;
 
-    @Column(name = "main_title", nullable = false, length = 64)
+    @Column(name = "main_title", nullable = false, length = 32)
     private String mainTitle;
 
     @Column(name = "group_number", nullable = false)

+ 1 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ExamStudent.java

@@ -53,7 +53,6 @@ public class ExamStudent implements Serializable {
      * 学习中心
      */
     @Column(name = "campus_name", length = 32, nullable = true)
-    @ExcelField(title = "学习中心", align = 2, sort = 10)
     private String campusName;
 
     /**
@@ -134,7 +133,7 @@ public class ExamStudent implements Serializable {
     /**
      * 扫描批次编号
      */
-    @Column(name = "batch_code", length = 64, nullable = true)
+    @Column(name = "batch_code", length = 32, nullable = true)
     private String batchCode;
 
     /**

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/MarkGroup.java

@@ -28,7 +28,7 @@ public class MarkGroup implements Serializable {
     /**
      * 评卷图片设置
      */
-    @Column(name = "pic_list", length = 255, nullable = false)
+    @Column(name = "pic_list", length = 255, nullable = true)
     private String picList;
 
     /**

+ 15 - 6
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/ExamStudentSearchQuery.java

@@ -1,14 +1,13 @@
 package cn.com.qmth.stmms.biz.exam.query;
 
-import java.util.Date;
-import java.util.List;
-
-import org.springframework.data.domain.Sort;
-import org.springframework.data.domain.Sort.Direction;
-
 import cn.com.qmth.stmms.biz.common.BaseQuery;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Direction;
+
+import java.util.Date;
+import java.util.List;
 
 public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
 
@@ -24,6 +23,8 @@ public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
 
     private String examNumber;
 
+    private String secretNumber;
+
     private String studentCode;
 
     private String subjectCode;
@@ -138,6 +139,14 @@ public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
         this.examNumber = examNumber;
     }
 
+    public String getSecretNumber() {
+        return secretNumber;
+    }
+
+    public void setSecretNumber(String secretNumber) {
+        this.secretNumber = secretNumber;
+    }
+
     public String getStudentCode() {
         return studentCode;
     }

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

@@ -155,7 +155,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
             if (student.getSecretNumber() == null) {
                 student.randomSecretNumber();
                 while (secretNumberSet.contains(student.getSecretNumber())
-                        || studentDao.countByExamIdAndSecretNumber(student.getExamId(), student.getSecretNumber()) > 0) {
+                        || studentDao.countByExamIdAndSecretNumber(student.getExamId(), student.getSecretNumber())
+                        > 0) {
                     student.randomSecretNumber();
                 }
             }
@@ -375,9 +376,10 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     @Transactional
     public boolean updateScanInfo(ExamStudent student) {
         student.setUploadTime(new Date());
-        return studentDao.updateScanInfo(student.getId(), student.getSheetCount(), student.getSliceCount(),
-                student.getAnswers(), student.getBatchCode(), student.getPaperType(), student.isAbsent(),
-                student.getUploadTime(), student.getObjectiveScore(), student.getObjectiveScoreList()) > 0;
+        return studentDao
+                .updateScanInfo(student.getId(), student.getSheetCount(), student.getSliceCount(), student.getAnswers(),
+                        student.getBatchCode(), student.getPaperType(), student.isAbsent(), student.getUploadTime(),
+                        student.getObjectiveScore(), student.getObjectiveScoreList()) > 0;
     }
 
     @Override
@@ -444,14 +446,14 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
             @Override
             public Predicate toPredicate(Root<ExamStudent> root, CriteriaQuery<?> cQuery, CriteriaBuilder cb) {
                 List<Predicate> predicates = new LinkedList<Predicate>();
-                Expression<Double> evaluationItemSum = cb.sum(root.get("objectiveScore").as(Double.class),
-                        root.get("subjectiveScore").as(Double.class));
+                Expression<Double> evaluationItemSum = cb
+                        .sum(root.get("objectiveScore").as(Double.class), root.get("subjectiveScore").as(Double.class));
                 if (query.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 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 {
@@ -494,6 +496,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
                         predicates.add(cb.or(sub));
                     }
                 }
+                if (StringUtils.isNotEmpty(query.getSecretNumber())) {
+                    predicates.add(cb.equal(root.get("secretNumber"), query.getSecretNumber()));
+                }
                 if (StringUtils.isNotEmpty(query.getStudentCode())) {
                     predicates.add(cb.equal(root.get("studentCode"), query.getStudentCode()));
                 }
@@ -621,8 +626,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
                 if (StringUtils.isNotBlank(query.getTeacher())) {
                     predicates.add(cb.equal(root.get("teacher"), query.getTeacher()));
                 }
-                return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates
-                        .size()]));
+                return predicates.isEmpty() ?
+                        cb.conjunction() :
+                        cb.and(predicates.toArray(new Predicate[predicates.size()]));
             }
         };
     }
@@ -641,8 +647,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     @Override
     public ExamStudent findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(Integer schoolId, String subjectCode,
             String studentCode, String examSeqCode) {
-        return studentDao.findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(schoolId, subjectCode, studentCode,
-                examSeqCode);
+        return studentDao
+                .findBySchoolIdAndSubjectCodeAndStudentCodeAndRemark(schoolId, subjectCode, studentCode, examSeqCode);
     }
 
     @Override
@@ -681,9 +687,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         query.setPageNumber(1);
         query.setPageSize(1);
         query.setSort(new Sort(Direction.ASC, "uploadTime", "id"));
-        List<ExamStudent> list = minUploadTime != null ? studentDao.findUnLibraryStudent(examId, subjectCode,
-                groupNumber, minUploadTime, query) : studentDao.findUnLibraryStudent(examId, subjectCode, groupNumber,
-                query);
+        List<ExamStudent> list = minUploadTime != null ?
+                studentDao.findUnLibraryStudent(examId, subjectCode, groupNumber, minUploadTime, query) :
+                studentDao.findUnLibraryStudent(examId, subjectCode, groupNumber, query);
         return list.isEmpty() ? null : list.get(0);
     }
 
@@ -722,7 +728,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         return countByQuery(query);
     }
 
-    public long countByNoAbsentAndBreach(int examId, String subjectCode, boolean upload, boolean absent, boolean breach) {
+    public long countByNoAbsentAndBreach(int examId, String subjectCode, boolean upload, boolean absent,
+            boolean breach) {
         ExamStudentSearchQuery query = new ExamStudentSearchQuery();
         query.setExamId(examId);
         query.setSubjectCode(subjectCode);
@@ -815,8 +822,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.findByExamAndSubjectAndObjective(student.getExamId(),
-                student.getSubjectCode(), false);
+        List<ExamQuestion> questions = questionService
+                .findByExamAndSubjectAndObjective(student.getExamId(), student.getSubjectCode(), false);
         List<ScoreItem> scoreList = student.getScoreList(false);
         List<MarkGroup> markGroups = groupService.findByExamAndSubject(student.getExamId(), student.getSubjectCode());
         for (MarkGroup group : markGroups) {
@@ -838,13 +845,14 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         List<String> lines = new LinkedList<>();
         lines.add("成绩明细");
         // 总分得分明细
-        lines.add("总分 (客观+主观) | " + format.format(student.getTotalScore()) + "="
-                + format.format(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0) + "+"
-                + format.format(student.getSubjectiveScore() != null ? student.getSubjectiveScore() : 0));
+        lines.add("总分 (客观+主观) | " + format.format(student.getTotalScore()) + "=" + format
+                .format(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0) + "+" + format
+                .format(student.getSubjectiveScore() != null ? student.getSubjectiveScore() : 0));
         // 客观题得分明细
         List<String> objectives = new LinkedList<>();
-        List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjectiveAndPaperType(
-                student.getExamId(), student.getSubjectCode(), true, student.getPaperType());
+        List<ExamQuestion> questions = questionService
+                .findByExamAndSubjectAndObjectiveAndPaperType(student.getExamId(), student.getSubjectCode(), true,
+                        student.getPaperType());
         List<ScoreItem> scoreList = student.getScoreList(true);
         List<String> details = new ArrayList<>();
         int i = 0;
@@ -932,8 +940,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
             // 添加轨迹分
             List<MarkTrack> tracks = trackService.findByLibraryId(selected.getId());
             for (MarkTrack markTrack : tracks) {
-                originTags.add(new OriginTag(format.format(markTrack.getScore()), markTrack.getOffsetIndex(), markTrack
-                        .getOffsetX(), markTrack.getOffsetY()));
+                originTags.add(new OriginTag(format.format(markTrack.getScore()), markTrack.getOffsetIndex(),
+                        markTrack.getOffsetX(), markTrack.getOffsetY()));
             }
             // 添加特殊标记
             List<MarkSpecialTag> specialTags = specialTagService.findByLibraryId(selected.getId());

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/ArbitrateHistory.java

@@ -80,7 +80,7 @@ public class ArbitrateHistory implements Serializable {
      * 状态
      */
     @Column(name = "status")
-    @Enumerated(EnumType.ORDINAL)
+    @Enumerated(EnumType.STRING)
     private HistoryStatus status;
 
     /**

+ 7 - 7
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/MarkLibrary.java

@@ -63,6 +63,13 @@ public class MarkLibrary implements Serializable {
     @Column(name = "task_number")
     private Integer taskNumber;
 
+    /**
+     * 任务状态
+     */
+    @Column(name = "status")
+    @Enumerated(EnumType.STRING)
+    private LibraryStatus status;
+
     /**
      * 评卷员
      */
@@ -93,13 +100,6 @@ public class MarkLibrary implements Serializable {
     @Column(name = "marker_spent")
     private Integer markerSpent;
 
-    /**
-     * 任务状态
-     */
-    @Column(name = "status")
-    @Enumerated(EnumType.ORDINAL)
-    private LibraryStatus status;
-
     /**
      * 科组长
      */

+ 10 - 16
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/TrialHistory.java

@@ -1,21 +1,15 @@
 package cn.com.qmth.stmms.biz.mark.model;
 
+import cn.com.qmth.stmms.biz.exam.model.Marker;
+
+import javax.persistence.*;
 import java.io.Serializable;
 import java.util.Date;
 
-import javax.persistence.Column;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
-import javax.persistence.Table;
-import javax.persistence.Transient;
-
-import cn.com.qmth.stmms.biz.exam.model.Marker;
-
 /**
  * 试评任务给分记录表
- * 
- * @author luoshi
  *
+ * @author luoshi
  */
 @Entity
 @Table(name = "m_trial_history")
@@ -50,6 +44,12 @@ public class TrialHistory implements Serializable {
     @Column(name = "student_id")
     private Integer studentId;
 
+    /**
+     * 考生密号
+     */
+    @Column(name = "secret_number")
+    private String secretNumber;
+
     /**
      * 评卷时间
      */
@@ -68,12 +68,6 @@ public class TrialHistory implements Serializable {
     @Column(name = "marker_score_list")
     private String markerScoreList;
 
-    /**
-     * 考生密号
-     */
-    @Column(name = "secret_number")
-    private String secretNumber;
-
     @Transient
     private Marker marker;
 

+ 16 - 24
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/school/model/School.java

@@ -1,17 +1,10 @@
 package cn.com.qmth.stmms.biz.school.model;
 
 import cn.com.qmth.stmms.common.utils.AccessControlUtils;
-import org.apache.commons.lang3.RandomStringUtils;
 
+import javax.persistence.*;
 import java.io.Serializable;
 import java.util.Date;
-import java.util.UUID;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
 
 @Entity
 @Table(name = "b_school")
@@ -75,11 +68,11 @@ public class School implements Serializable {
     @Column(name = "access_secret", nullable = true, length = 64)
     private String accessSecret;
 
-    @Column(name = "time_create")
-    private Date timeCreate;
+    @Column(name = "create_time")
+    private Date createTime;
 
-    @Column(name = "time_modified")
-    private Date timeModified;
+    @Column(name = "update_time")
+    private Date updateTime;
 
     public Integer getId() {
         return id;
@@ -169,25 +162,24 @@ public class School implements Serializable {
         this.accessSecret = accessSecret;
     }
 
-    public Date getTimeCreate() {
-        return timeCreate;
+    public void resetAccessKeyAndSecret() {
+        accessKey = AccessControlUtils.uuidString();
+        accessSecret = AccessControlUtils.randomString(ACCESS_SECRET_LENGTH);
     }
 
-    public void setTimeCreate(Date timeCreate) {
-        this.timeCreate = timeCreate;
+    public Date getCreateTime() {
+        return createTime;
     }
 
-    public Date getTimeModified() {
-        return timeModified;
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
     }
 
-    public void setTimeModified(Date timeModified) {
-        this.timeModified = timeModified;
+    public Date getUpdateTime() {
+        return updateTime;
     }
 
-    public void resetAccessKeyAndSecret() {
-        accessKey = AccessControlUtils.uuidString();
-        accessSecret = AccessControlUtils.randomString(ACCESS_SECRET_LENGTH);
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
     }
-
 }

+ 17 - 17
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/school/service/impl/SchoolServiceImpl.java

@@ -1,14 +1,10 @@
 package cn.com.qmth.stmms.biz.school.service.impl;
 
-import java.util.Date;
-import java.util.LinkedList;
-import java.util.List;
-
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-
+import cn.com.qmth.stmms.biz.common.BaseQueryService;
+import cn.com.qmth.stmms.biz.school.dao.SchoolDao;
+import cn.com.qmth.stmms.biz.school.model.School;
+import cn.com.qmth.stmms.biz.school.query.SchoolSearchQuery;
+import cn.com.qmth.stmms.biz.school.service.SchoolService;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -16,11 +12,13 @@ import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import cn.com.qmth.stmms.biz.common.BaseQueryService;
-import cn.com.qmth.stmms.biz.school.dao.SchoolDao;
-import cn.com.qmth.stmms.biz.school.model.School;
-import cn.com.qmth.stmms.biz.school.query.SchoolSearchQuery;
-import cn.com.qmth.stmms.biz.school.service.SchoolService;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
 
 @Service("schoolService")
 public class SchoolServiceImpl extends BaseQueryService<School> implements SchoolService {
@@ -54,7 +52,9 @@ public class SchoolServiceImpl extends BaseQueryService<School> implements Schoo
                 if (StringUtils.isNotBlank(query.getCity())) {
                     predicates.add(cb.equal(root.get("city"), query.getCity()));
                 }
-                return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates.size()]));
+                return predicates.isEmpty() ?
+                        cb.conjunction() :
+                        cb.and(predicates.toArray(new Predicate[predicates.size()]));
             }
 
         }, query);
@@ -65,9 +65,9 @@ public class SchoolServiceImpl extends BaseQueryService<School> implements Schoo
     @Transactional
     public School save(School school) {
         if (school.getId() != null && school.getId() > 0) {
-            school.setTimeModified(new Date());
+            school.setUpdateTime(new Date());
         } else {
-            school.setTimeCreate(new Date());
+            school.setCreateTime(new Date());
         }
         return schoolDao.save(school);
     }

+ 2 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/user/service/impl/UserServiceImpl.java

@@ -6,7 +6,7 @@ import cn.com.qmth.stmms.biz.user.service.UserService;
 import cn.com.qmth.stmms.biz.user.service.query.UserSearchQuery;
 import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.enums.UserSource;
-import cn.com.qmth.stmms.common.utils.Md5EncryptUtils;
+import cn.com.qmth.stmms.common.utils.EncryptUtils;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -152,7 +152,7 @@ public class UserServiceImpl implements UserService {
     @Transactional
     public User login(String loginName, String password, String ip) {
         User user = findByLoginName(loginName);
-        if (user != null && user.getPassword().equals(Md5EncryptUtils.md5(password))) {
+        if (user != null && user.getPassword().equals(EncryptUtils.md5(password))) {
             user.setLastLoginIp(StringUtils.trimToEmpty(ip));
             user.setLastLoginTime(new Date());
             user.refreshAccessToken();

+ 17 - 0
stmms-common/src/main/java/cn/com/qmth/stmms/common/utils/EncryptUtils.java

@@ -0,0 +1,17 @@
+package cn.com.qmth.stmms.common.utils;
+
+import com.google.common.hash.Hashing;
+
+import java.nio.charset.StandardCharsets;
+
+public class EncryptUtils {
+
+    public static String md5(String input) {
+        return Hashing.md5().hashString(input, StandardCharsets.UTF_8).toString();
+    }
+
+    public static void main(String[] args) {
+        System.out.println(md5("qmth87863577"));
+    }
+
+}

+ 0 - 40
stmms-common/src/main/java/cn/com/qmth/stmms/common/utils/Md5EncryptUtils.java

@@ -1,40 +0,0 @@
-package cn.com.qmth.stmms.common.utils;
-
-import java.nio.charset.StandardCharsets;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-
-public class Md5EncryptUtils {
-
-    /**
-     * @param text - 明文
-     * @return 密文
-     */
-    public static String md5(String text) {
-        MessageDigest msgDigest = null;
-
-        try {
-            msgDigest = MessageDigest.getInstance("MD5");
-        } catch (NoSuchAlgorithmException e) {
-            throw new IllegalStateException("System doesn't support MD5 algorithm.");
-        }
-
-        try {
-            msgDigest.update(text.getBytes(StandardCharsets.UTF_8)); // 按照utf-8编码形式加密
-
-            byte[] bytes = msgDigest.digest();
-
-            String md5Str = Encodes.encodeHex(bytes);
-
-            msgDigest.update(md5Str.getBytes(StandardCharsets.UTF_8)); // 按照utf-8编码形式加密
-
-            byte[] bytes1 = msgDigest.digest();
-
-            return Encodes.encodeHex(bytes1);
-
-        } catch (Exception e) {
-            throw new IllegalStateException("Exception when Md5 make");
-        }
-    }
-
-}

+ 3 - 3
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkerController.java

@@ -16,9 +16,9 @@ import cn.com.qmth.stmms.common.annotation.Logging;
 import cn.com.qmth.stmms.common.annotation.RoleRequire;
 import cn.com.qmth.stmms.common.domain.WebUser;
 import cn.com.qmth.stmms.common.enums.*;
+import cn.com.qmth.stmms.common.utils.EncryptUtils;
 import cn.com.qmth.stmms.common.utils.ExportExcel;
 import cn.com.qmth.stmms.common.utils.ImportExcel;
-import cn.com.qmth.stmms.common.utils.Md5EncryptUtils;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
 import com.google.common.collect.Lists;
 import net.sf.json.JSONArray;
@@ -293,7 +293,7 @@ public class MarkerController extends BaseExamController {
         User user = userService.findById(marker.getUserId());
         JSONObject obj = new JSONObject();
         if (user != null) {
-            user.setPassword(Md5EncryptUtils.md5(password));
+            user.setPassword(EncryptUtils.md5(password));
             user = userService.save(user);
             obj.accumulate("success", true);
         } else {
@@ -437,7 +437,7 @@ public class MarkerController extends BaseExamController {
             user = new User();
             user.setLoginName(loginName);
             user.setName(loginName);
-            user.setPassword(Md5EncryptUtils.md5(USER_PASSWORD));
+            user.setPassword(EncryptUtils.md5(USER_PASSWORD));
             user.setRole(Role.MARKER);
             user.setSource(UserSource.INTERNAL);
             user.setSchoolId(schoolId);

+ 12 - 19
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ProblemTypeController.java

@@ -1,31 +1,24 @@
 package cn.com.qmth.stmms.admin.exam;
 
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-
+import cn.com.qmth.stmms.biz.mark.model.ProblemType;
+import cn.com.qmth.stmms.biz.mark.service.ProblemHistoryService;
+import cn.com.qmth.stmms.biz.mark.service.ProblemTypeService;
+import cn.com.qmth.stmms.common.annotation.Logging;
+import cn.com.qmth.stmms.common.domain.WebUser;
+import cn.com.qmth.stmms.common.enums.LogType;
+import cn.com.qmth.stmms.common.utils.RequestUtils;
 import net.sf.json.JSONObject;
-
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
-import cn.com.qmth.stmms.biz.mark.model.ProblemType;
-import cn.com.qmth.stmms.biz.mark.service.ProblemHistoryService;
-import cn.com.qmth.stmms.biz.mark.service.ProblemTypeService;
-import cn.com.qmth.stmms.common.annotation.Logging;
-import cn.com.qmth.stmms.common.domain.WebUser;
-import cn.com.qmth.stmms.common.enums.LogType;
-import cn.com.qmth.stmms.common.utils.RequestUtils;
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 @Controller
 @RequestMapping("/admin/exam/problem/type")
@@ -41,8 +34,8 @@ public class ProblemTypeController extends BaseExamController {
 
     @Logging(menu = "查询问题卷分类", type = LogType.QUERY)
     @RequestMapping
-    public String list(HttpServletRequest request, Model model, @RequestParam Integer examId) {
-        List<ProblemType> list = problemService.findByExamId(examId);
+    public String list(HttpServletRequest request, Model model) {
+        List<ProblemType> list = problemService.findByExamId(getSessionExamId(request));
         model.addAttribute("list", list);
         return "modules/exam/problemList";
     }

+ 14 - 18
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/StudentController.java

@@ -87,7 +87,6 @@ public class StudentController extends BaseExamController {
             model.addAttribute("studentList", query.getResult());
         }
         model.addAttribute("query", query);
-        model.addAttribute("campusList", studentService.findDistinctCampusName(examId));
         model.addAttribute("subjectList", getExamSubject(examId, wu));
         model.addAttribute("levelList", subjectService.listLevel(examId));
         model.addAttribute("categoryList", subjectService.listCategory(examId));
@@ -103,7 +102,6 @@ public class StudentController extends BaseExamController {
         Exam exam = examService.findById(getSessionExamId(request));
         model.addAttribute("student", student);
         model.addAttribute("subjectList", getExamSubject(exam.getId(), RequestUtils.getWebUser(request)));
-        model.addAttribute("campusList", studentService.findDistinctCampusName(exam.getId()));
         return "modules/exam/studentForm";
     }
 
@@ -114,7 +112,6 @@ public class StudentController extends BaseExamController {
         ExamStudent student = studentService.findById(id);
         model.addAttribute("student", student);
         model.addAttribute("subjectList", getExamSubject(exam.getId(), RequestUtils.getWebUser(request)));
-        model.addAttribute("campusList", studentService.findDistinctCampusName(exam.getId()));
         return "modules/exam/studentForm";
     }
 
@@ -209,11 +206,8 @@ public class StudentController extends BaseExamController {
         if (student != null) {
             studentService.deleteById(id);
             markService.deleteByStudent(student);
-            subjectService.updateUploadCount(
-                    student.getExamId(),
-                    student.getSubjectCode(),
-                    (int) studentService.countUploadedByExamIdAndSubjectCode(student.getExamId(),
-                            student.getSubjectCode()));
+            subjectService.updateUploadCount(student.getExamId(), student.getSubjectCode(), (int) studentService
+                    .countUploadedByExamIdAndSubjectCode(student.getExamId(), student.getSubjectCode()));
             addMessage(redirectAttributes, "删除考生成功");
             RequestUtils.setLog(request, "删除成功,id:" + id);
         } else {
@@ -262,11 +256,10 @@ public class StudentController extends BaseExamController {
 
             for (ExamStudent student : list) {
                 if (StringUtils.isBlank(student.getExamNumber()) || StringUtils.isBlank(student.getName())
-                        || StringUtils.isBlank(student.getSubjectCode())
-                        || StringUtils.isBlank(student.getSubjectName())
-                        || StringUtils.isBlank(student.getCampusName()) || StringUtils.isBlank(student.getCollege())
-                        || StringUtils.isBlank(student.getClassName()) || StringUtils.isBlank(student.getTeacher())
-                        || StringUtils.isBlank(student.getStudentCode())) {
+                        || StringUtils.isBlank(student.getSubjectCode()) || StringUtils
+                        .isBlank(student.getSubjectName()) || StringUtils.isBlank(student.getCollege()) || StringUtils
+                        .isBlank(student.getClassName()) || StringUtils.isBlank(student.getTeacher()) || StringUtils
+                        .isBlank(student.getStudentCode())) {
                     continue;
                 }
 
@@ -358,7 +351,8 @@ public class StudentController extends BaseExamController {
 
     @Logging(menu = "导入缺考名单", type = LogType.IMPORT_FILE)
     @RequestMapping(value = "/absentImport", method = RequestMethod.POST)
-    public String absentImportFile(HttpServletRequest request, MultipartFile file, RedirectAttributes redirectAttributes) {
+    public String absentImportFile(HttpServletRequest request, MultipartFile file,
+            RedirectAttributes redirectAttributes) {
         int examId = getSessionExamId(request);
         try {
             int successNum = 0;
@@ -410,7 +404,8 @@ public class StudentController extends BaseExamController {
 
     @Logging(menu = "导入违纪名单", type = LogType.IMPORT_FILE)
     @RequestMapping(value = "/breachImport", method = RequestMethod.POST)
-    public String breachImportFile(HttpServletRequest request, MultipartFile file, RedirectAttributes redirectAttributes) {
+    public String breachImportFile(HttpServletRequest request, MultipartFile file,
+            RedirectAttributes redirectAttributes) {
         int examId = getSessionExamId(request);
         // Exam exam = examService.findById(examId);
         try {
@@ -484,7 +479,8 @@ public class StudentController extends BaseExamController {
     }
 
     @RequestMapping(value = "/uploadImport", method = RequestMethod.POST)
-    public String uploadImportFile(HttpServletRequest request, MultipartFile file, RedirectAttributes redirectAttributes) {
+    public String uploadImportFile(HttpServletRequest request, MultipartFile file,
+            RedirectAttributes redirectAttributes) {
         int examId = getSessionExamId(request);
         // Exam exam = examService.findById(examId);
         try {
@@ -559,8 +555,8 @@ public class StudentController extends BaseExamController {
     }
 
     private void buildSheetUrl(ExamStudent student) {
-        student.setSheetUrls(fileService.getSheetUris(student.getExamId(), student.getExamNumber(), 1,
-                student.getSheetCount()));
+        student.setSheetUrls(
+                fileService.getSheetUris(student.getExamId(), student.getExamNumber(), 1, student.getSheetCount()));
     }
 
     private void buildPackageUrl(ExamStudent student) {

+ 12 - 13
stmms-web/src/main/java/cn/com/qmth/stmms/admin/home/AccountController.java

@@ -1,26 +1,25 @@
 package cn.com.qmth.stmms.admin.home;
 
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-
 import cn.com.qmth.stmms.biz.school.model.School;
 import cn.com.qmth.stmms.biz.school.service.SchoolService;
 import cn.com.qmth.stmms.biz.user.model.User;
 import cn.com.qmth.stmms.biz.user.service.UserService;
 import cn.com.qmth.stmms.common.annotation.Logging;
 import cn.com.qmth.stmms.common.enums.LogType;
-import cn.com.qmth.stmms.common.utils.Md5EncryptUtils;
+import cn.com.qmth.stmms.common.utils.EncryptUtils;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * 个人账号管理
- * 
+ *
  * @author ThinkGem
  * @version 2013-5-31
  */
@@ -65,8 +64,8 @@ public class AccountController {
     public String modifyPwd(HttpServletRequest request, String oldPassword, String newPassword, Model model) {
         User user = RequestUtils.getWebUser(request).getUser();
         if (StringUtils.isNotBlank(oldPassword) && StringUtils.isNotBlank(newPassword)) {
-            if (Md5EncryptUtils.md5(oldPassword).equals(user.getPassword())) {
-                user.setPassword(Md5EncryptUtils.md5(newPassword));
+            if (EncryptUtils.md5(oldPassword).equals(user.getPassword())) {
+                user.setPassword(EncryptUtils.md5(newPassword));
                 userService.save(user);
                 model.addAttribute("message", "修改密码成功");
             } else {

+ 16 - 15
stmms-web/src/main/java/cn/com/qmth/stmms/admin/school/SchoolController.java

@@ -1,15 +1,5 @@
 package cn.com.qmth.stmms.admin.school;
 
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.servlet.ModelAndView;
-
 import cn.com.qmth.stmms.biz.school.model.School;
 import cn.com.qmth.stmms.biz.school.query.SchoolSearchQuery;
 import cn.com.qmth.stmms.biz.school.service.SchoolService;
@@ -19,7 +9,17 @@ import cn.com.qmth.stmms.common.annotation.Logging;
 import cn.com.qmth.stmms.common.controller.BaseController;
 import cn.com.qmth.stmms.common.enums.LogType;
 import cn.com.qmth.stmms.common.enums.Role;
-import cn.com.qmth.stmms.common.utils.Md5EncryptUtils;
+import cn.com.qmth.stmms.common.enums.UserSource;
+import cn.com.qmth.stmms.common.utils.EncryptUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
 
 @Controller
 @RequestMapping("/admin/sys/school")
@@ -118,7 +118,7 @@ public class SchoolController extends BaseController {
             previous.setLoginName(user.getLoginName());
             previous.setName(user.getName());
             if (StringUtils.isNotBlank(user.getPassword())) {
-                previous.setPassword(Md5EncryptUtils.md5(user.getPassword()));
+                previous.setPassword(EncryptUtils.md5(user.getPassword()));
             }
             if (checkLoginName(previous)) {
                 userService.save(previous);
@@ -131,7 +131,8 @@ public class SchoolController extends BaseController {
         } else if (checkLoginName(user)) {
             user.setEnable(true);
             user.setRole(Role.SCHOOL_ADMIN);
-            user.setPassword(Md5EncryptUtils.md5(user.getPassword()));
+            user.setSource(UserSource.INTERNAL);
+            user.setPassword(EncryptUtils.md5(user.getPassword()));
             userService.save(user);
             return new ModelAndView("redirect:/admin/sys/school");
         } else {
@@ -173,7 +174,7 @@ public class SchoolController extends BaseController {
             previous.setLoginName(user.getLoginName());
             previous.setName(user.getName());
             if (StringUtils.isNotBlank(user.getPassword())) {
-                previous.setPassword(Md5EncryptUtils.md5(user.getPassword()));
+                previous.setPassword(EncryptUtils.md5(user.getPassword()));
             }
             if (checkLoginName(previous)) {
                 userService.save(previous);
@@ -186,7 +187,7 @@ public class SchoolController extends BaseController {
         } else if (checkLoginName(user)) {
             user.setEnable(true);
             user.setRole(Role.SCHOOL_VIEWER);
-            user.setPassword(Md5EncryptUtils.md5(user.getPassword()));
+            user.setPassword(EncryptUtils.md5(user.getPassword()));
             userService.save(user);
             return new ModelAndView("redirect:/admin/sys/school");
         } else {

+ 165 - 170
stmms-web/src/main/java/cn/com/qmth/stmms/admin/user/SubjectUserController.java

@@ -1,170 +1,165 @@
-package cn.com.qmth.stmms.admin.user;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.servlet.mvc.support.RedirectAttributes;
-
-import cn.com.qmth.stmms.admin.exam.BaseExamController;
-import cn.com.qmth.stmms.biz.exam.model.Exam;
-import cn.com.qmth.stmms.biz.exam.model.SubjectUser;
-import cn.com.qmth.stmms.biz.exam.service.ExamService;
-import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
-import cn.com.qmth.stmms.biz.exam.service.SubjectUserService;
-import cn.com.qmth.stmms.biz.user.model.User;
-import cn.com.qmth.stmms.biz.user.service.UserService;
-import cn.com.qmth.stmms.biz.user.service.query.UserSearchQuery;
-import cn.com.qmth.stmms.common.annotation.Logging;
-import cn.com.qmth.stmms.common.domain.WebUser;
-import cn.com.qmth.stmms.common.enums.LogType;
-import cn.com.qmth.stmms.common.enums.MarkerExcelError;
-import cn.com.qmth.stmms.common.enums.Role;
-import cn.com.qmth.stmms.common.enums.UserSource;
-import cn.com.qmth.stmms.common.utils.ExportExcel;
-import cn.com.qmth.stmms.common.utils.ImportExcel;
-import cn.com.qmth.stmms.common.utils.Md5EncryptUtils;
-import cn.com.qmth.stmms.common.utils.RequestUtils;
-
-@Controller
-@RequestMapping("/admin/user/subject")
-public class SubjectUserController extends BaseExamController {
-
-    public static final String USER_PASSWORD = "123456";
-
-    @Autowired
-    private UserService userService;
-
-    @Autowired
-    private SubjectUserService subjectUserService;
-
-    @Autowired
-    private ExamSubjectService subjectService;
-
-    @Autowired
-    private ExamService examService;
-
-    @RequestMapping(value = "/template")
-    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
-        try {
-            String fileName = "科组长数据导入模板.xlsx";
-            List<SubjectUser> list = new ArrayList<SubjectUser>();
-            list.add(new SubjectUser());
-            new ExportExcel("科组长数据", SubjectUser.class, 2).setDataList(list).write(response, fileName).dispose();
-            return null;
-        } catch (Exception e) {
-            addMessage(redirectAttributes, "导入模板下载失败!失败信息:" + e.getMessage());
-        }
-        return "redirect:/admin/user/list";
-    }
-
-    @RequestMapping(value = "/import", method = RequestMethod.POST)
-    public String importFile(HttpServletRequest request, MultipartFile file, RedirectAttributes redirectAttributes) {
-        WebUser wu = RequestUtils.getWebUser(request);
-        try {
-            int successNum = 0;
-            int failureNum = 0;
-            StringBuilder failureMsg = new StringBuilder();
-            ImportExcel ei = new ImportExcel(file, 1, 0);
-            List<SubjectUser> list = ei.getDataList(SubjectUser.class);
-
-            Map<String, User> userMap = new HashMap<String, User>();
-            List<SubjectUser> saveList = new ArrayList<SubjectUser>();
-            Integer schoolId = wu.getUser().getSchoolId();
-            for (SubjectUser subjectUser : list) {
-                if (StringUtils.isBlank(subjectUser.getLoginName())) {
-                    failureMsg.append("<br/>用户 " + subjectUser.getLoginName() + "," + subjectUser.getSubjectCode()
-                            + MarkerExcelError.NAMENULL.getName());
-                    failureNum++;
-                    continue;
-                }
-                User user = userMap.get(subjectUser.getLoginName().trim());
-                if (user == null) {
-                    user = userService.findByLoginName(subjectUser.getLoginName().trim());
-                    if (user != null && !schoolId.equals(user.getSchoolId())) {
-                        failureMsg.append("<br/>用户 " + subjectUser.getLoginName() + "," + subjectUser.getSubjectCode()
-                                + MarkerExcelError.NAMEUSED.getName());
-                        failureNum++;
-                        continue;
-                    }
-                    if (user == null) {
-                        user = getUser(userMap, subjectUser.getLoginName().trim(), schoolId);
-                    }
-                }
-                subjectUser = getSubjectUser(subjectUser.getSubjectCode(), user.getId());
-                saveList.add(subjectUser);
-            }
-            successNum = subjectUserService.batchSave(saveList);
-            if (failureNum > 0) {
-                failureMsg.insert(0, ",失败 " + failureNum + " 条记录!");
-            }
-            addMessage(redirectAttributes, "已成功导入" + successNum + " 条 " + failureMsg);
-        } catch (Exception e) {
-            log.error("Batch import subject user error!", e);
-            addMessage(redirectAttributes, "导入用户失败!失败信息:" + e.getMessage());
-        }
-        return "redirect:/admin/user/list";
-    }
-
-    private SubjectUser getSubjectUser(String subjectCode, Integer userId) {
-        SubjectUser subjectUser = subjectUserService.findBySubjectCodeAndUserId(subjectCode, userId);
-        if (subjectUser == null) {
-            subjectUser = new SubjectUser();
-            subjectUser.setSubjectCode(subjectCode);
-            subjectUser.setUserId(userId);
-        }
-        return subjectUser;
-    }
-
-    private User getUser(Map<String, User> saveMap, String loginName, Integer schoolId) {
-        User user = saveMap.get(loginName);
-        if (user == null) {
-            user = new User();
-            user.setLoginName(loginName);
-            user.setName(loginName);
-            user.setPassword(Md5EncryptUtils.md5(USER_PASSWORD));
-            user.setRole(Role.SUBJECT_HEADER);
-            user.setSchoolId(schoolId);
-            user.setEnable(true);
-            user.setCreatedTime(new Date());
-            user.setSource(UserSource.INTERNAL);
-            userService.save(user);
-            saveMap.put(loginName, user);
-        }
-        return user;
-    }
-
-    @Logging(menu = "科组长绑定", type = LogType.ADD)
-    @RequestMapping("/save")
-    public String add(Model model, HttpServletRequest request, UserSearchQuery query, @RequestParam String subjectCode) {
-        int examId = getSessionExamId(request);
-        Exam exam = examService.findById(examId);
-        query.setSchoolId(exam.getSchoolId());
-        query.setRole(Role.SUBJECT_HEADER);
-        query = userService.findByQuery(query);
-        model.addAttribute("query", query);
-        model.addAttribute("subject", subjectService.find(examId, subjectCode));
-        return "modules/exam/userSubject";
-    }
-
-    @RequestMapping(value = "/add", method = RequestMethod.POST)
-    public String save(@RequestParam String subjectCode, @RequestParam Integer[] userIds, HttpServletRequest request,
-            RedirectAttributes redirectAttributes) {
-        subjectUserService.save(subjectCode, userIds);
-        addMessage(redirectAttributes, subjectCode + "设置成功");
-        return "redirect:/admin/user/subject?subjectCode=" + subjectCode;
-    }
-}
+package cn.com.qmth.stmms.admin.user;
+
+import cn.com.qmth.stmms.admin.exam.BaseExamController;
+import cn.com.qmth.stmms.biz.exam.model.Exam;
+import cn.com.qmth.stmms.biz.exam.model.SubjectUser;
+import cn.com.qmth.stmms.biz.exam.service.ExamService;
+import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
+import cn.com.qmth.stmms.biz.exam.service.SubjectUserService;
+import cn.com.qmth.stmms.biz.user.model.User;
+import cn.com.qmth.stmms.biz.user.service.UserService;
+import cn.com.qmth.stmms.biz.user.service.query.UserSearchQuery;
+import cn.com.qmth.stmms.common.annotation.Logging;
+import cn.com.qmth.stmms.common.domain.WebUser;
+import cn.com.qmth.stmms.common.enums.LogType;
+import cn.com.qmth.stmms.common.enums.MarkerExcelError;
+import cn.com.qmth.stmms.common.enums.Role;
+import cn.com.qmth.stmms.common.enums.UserSource;
+import cn.com.qmth.stmms.common.utils.EncryptUtils;
+import cn.com.qmth.stmms.common.utils.ExportExcel;
+import cn.com.qmth.stmms.common.utils.ImportExcel;
+import cn.com.qmth.stmms.common.utils.RequestUtils;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
+
+@Controller
+@RequestMapping("/admin/user/subject")
+public class SubjectUserController extends BaseExamController {
+
+    public static final String USER_PASSWORD = "123456";
+
+    @Autowired
+    private UserService userService;
+
+    @Autowired
+    private SubjectUserService subjectUserService;
+
+    @Autowired
+    private ExamSubjectService subjectService;
+
+    @Autowired
+    private ExamService examService;
+
+    @RequestMapping(value = "/template")
+    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+        try {
+            String fileName = "科组长数据导入模板.xlsx";
+            List<SubjectUser> list = new ArrayList<SubjectUser>();
+            list.add(new SubjectUser());
+            new ExportExcel("科组长数据", SubjectUser.class, 2).setDataList(list).write(response, fileName).dispose();
+            return null;
+        } catch (Exception e) {
+            addMessage(redirectAttributes, "导入模板下载失败!失败信息:" + e.getMessage());
+        }
+        return "redirect:/admin/user/list";
+    }
+
+    @RequestMapping(value = "/import", method = RequestMethod.POST)
+    public String importFile(HttpServletRequest request, MultipartFile file, RedirectAttributes redirectAttributes) {
+        WebUser wu = RequestUtils.getWebUser(request);
+        try {
+            int successNum = 0;
+            int failureNum = 0;
+            StringBuilder failureMsg = new StringBuilder();
+            ImportExcel ei = new ImportExcel(file, 1, 0);
+            List<SubjectUser> list = ei.getDataList(SubjectUser.class);
+
+            Map<String, User> userMap = new HashMap<String, User>();
+            List<SubjectUser> saveList = new ArrayList<SubjectUser>();
+            Integer schoolId = wu.getUser().getSchoolId();
+            for (SubjectUser subjectUser : list) {
+                if (StringUtils.isBlank(subjectUser.getLoginName())) {
+                    failureMsg.append("<br/>用户 " + subjectUser.getLoginName() + "," + subjectUser.getSubjectCode()
+                            + MarkerExcelError.NAMENULL.getName());
+                    failureNum++;
+                    continue;
+                }
+                User user = userMap.get(subjectUser.getLoginName().trim());
+                if (user == null) {
+                    user = userService.findByLoginName(subjectUser.getLoginName().trim());
+                    if (user != null && !schoolId.equals(user.getSchoolId())) {
+                        failureMsg.append("<br/>用户 " + subjectUser.getLoginName() + "," + subjectUser.getSubjectCode()
+                                + MarkerExcelError.NAMEUSED.getName());
+                        failureNum++;
+                        continue;
+                    }
+                    if (user == null) {
+                        user = getUser(userMap, subjectUser.getLoginName().trim(), schoolId);
+                    }
+                }
+                subjectUser = getSubjectUser(subjectUser.getSubjectCode(), user.getId());
+                saveList.add(subjectUser);
+            }
+            successNum = subjectUserService.batchSave(saveList);
+            if (failureNum > 0) {
+                failureMsg.insert(0, ",失败 " + failureNum + " 条记录!");
+            }
+            addMessage(redirectAttributes, "已成功导入" + successNum + " 条 " + failureMsg);
+        } catch (Exception e) {
+            log.error("Batch import subject user error!", e);
+            addMessage(redirectAttributes, "导入用户失败!失败信息:" + e.getMessage());
+        }
+        return "redirect:/admin/user/list";
+    }
+
+    private SubjectUser getSubjectUser(String subjectCode, Integer userId) {
+        SubjectUser subjectUser = subjectUserService.findBySubjectCodeAndUserId(subjectCode, userId);
+        if (subjectUser == null) {
+            subjectUser = new SubjectUser();
+            subjectUser.setSubjectCode(subjectCode);
+            subjectUser.setUserId(userId);
+        }
+        return subjectUser;
+    }
+
+    private User getUser(Map<String, User> saveMap, String loginName, Integer schoolId) {
+        User user = saveMap.get(loginName);
+        if (user == null) {
+            user = new User();
+            user.setLoginName(loginName);
+            user.setName(loginName);
+            user.setPassword(EncryptUtils.md5(USER_PASSWORD));
+            user.setRole(Role.SUBJECT_HEADER);
+            user.setSchoolId(schoolId);
+            user.setEnable(true);
+            user.setCreatedTime(new Date());
+            user.setSource(UserSource.INTERNAL);
+            userService.save(user);
+            saveMap.put(loginName, user);
+        }
+        return user;
+    }
+
+    @Logging(menu = "科组长绑定", type = LogType.ADD)
+    @RequestMapping("/save")
+    public String add(Model model, HttpServletRequest request, UserSearchQuery query,
+            @RequestParam String subjectCode) {
+        int examId = getSessionExamId(request);
+        Exam exam = examService.findById(examId);
+        query.setSchoolId(exam.getSchoolId());
+        query.setRole(Role.SUBJECT_HEADER);
+        query = userService.findByQuery(query);
+        model.addAttribute("query", query);
+        model.addAttribute("subject", subjectService.find(examId, subjectCode));
+        return "modules/exam/userSubject";
+    }
+
+    @RequestMapping(value = "/add", method = RequestMethod.POST)
+    public String save(@RequestParam String subjectCode, @RequestParam Integer[] userIds, HttpServletRequest request,
+            RedirectAttributes redirectAttributes) {
+        subjectUserService.save(subjectCode, userIds);
+        addMessage(redirectAttributes, subjectCode + "设置成功");
+        return "redirect:/admin/user/subject?subjectCode=" + subjectCode;
+    }
+}

+ 152 - 158
stmms-web/src/main/java/cn/com/qmth/stmms/admin/user/UserClassController.java

@@ -1,158 +1,152 @@
-package cn.com.qmth.stmms.admin.user;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.servlet.mvc.support.RedirectAttributes;
-
-import cn.com.qmth.stmms.admin.exam.BaseExamController;
-import cn.com.qmth.stmms.biz.exam.model.MarkerClass;
-import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
-import cn.com.qmth.stmms.biz.exam.service.MarkerClassService;
-import cn.com.qmth.stmms.biz.user.model.User;
-import cn.com.qmth.stmms.biz.user.service.UserService;
-import cn.com.qmth.stmms.common.domain.WebUser;
-import cn.com.qmth.stmms.common.enums.MarkerExcelError;
-import cn.com.qmth.stmms.common.enums.Role;
-import cn.com.qmth.stmms.common.enums.UserSource;
-import cn.com.qmth.stmms.common.utils.ExportExcel;
-import cn.com.qmth.stmms.common.utils.ImportExcel;
-import cn.com.qmth.stmms.common.utils.Md5EncryptUtils;
-import cn.com.qmth.stmms.common.utils.RequestUtils;
-
-@Controller
-@RequestMapping("/admin/user/class")
-public class UserClassController extends BaseExamController {
-
-    public static final String USER_PASSWORD = "123456";
-
-    @Autowired
-    private UserService userService;
-
-    @Autowired
-    private MarkerClassService markerClassService;
-
-    @Autowired
-    private ExamStudentService studentService;
-
-    @RequestMapping(value = "/template")
-    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
-        try {
-            String fileName = "用户班级导入模板.xlsx";
-            List<MarkerClass> list = new ArrayList<MarkerClass>();
-            list.add(new MarkerClass());
-            new ExportExcel("用户班级数据", MarkerClass.class, 2).setDataList(list).write(response, fileName).dispose();
-            return null;
-        } catch (Exception e) {
-            addMessage(redirectAttributes, "导入模板下载失败!失败信息:" + e.getMessage());
-        }
-        return "redirect:/admin/user/list";
-    }
-
-    @RequestMapping(value = "/import", method = RequestMethod.POST)
-    public String importFile(HttpServletRequest request, MultipartFile file, RedirectAttributes redirectAttributes) {
-        WebUser wu = RequestUtils.getWebUser(request);
-        try {
-            int successNum = 0;
-            int failureNum = 0;
-            StringBuilder failureMsg = new StringBuilder();
-            ImportExcel ei = new ImportExcel(file, 1, 0);
-            List<MarkerClass> list = ei.getDataList(MarkerClass.class);
-            Map<String, User> userMap = new HashMap<String, User>();
-            List<MarkerClass> saveList = new ArrayList<MarkerClass>();
-            Map<Integer, List<String>> classMap = new HashMap<Integer, List<String>>();
-            Integer schoolId = wu.getUser().getSchoolId();
-            for (MarkerClass markerClass : list) {
-                if (markerClass.getExamId() == null) {
-                    failureMsg.append("<br/>用户 " + markerClass.getLoginName() + MarkerExcelError.EXAMNULL.getName());
-                    failureNum++;
-                    continue;
-                }
-                if (StringUtils.isBlank(markerClass.getClassName())) {
-                    failureMsg.append("<br/>用户 " + markerClass.getLoginName() + MarkerExcelError.CLASSNULL.getName());
-                    failureNum++;
-                    continue;
-                }
-                List<String> classes = classMap.get(markerClass.getExamId());
-                if (classes == null) {
-                    classes = studentService.findDistinctClassName(markerClass.getExamId());
-                    classMap.put(markerClass.getExamId(), classes);
-                }
-                if (!classes.contains(markerClass.getClassName())) {
-                    failureMsg.append("<br/>考试 " + markerClass.getExamId() + " 班级 " + markerClass.getClassName()
-                            + MarkerExcelError.EXAMCLASSNULL.getName());
-                    failureNum++;
-                    continue;
-                }
-                if (StringUtils.isBlank(markerClass.getLoginName())) {
-                    failureMsg.append("<br/>用户 " + markerClass.getLoginName() + MarkerExcelError.NAMENULL.getName());
-                    failureNum++;
-                    continue;
-                }
-                User user = userMap.get(markerClass.getLoginName().trim());
-                if (user == null) {
-                    user = userService.findByLoginName(markerClass.getLoginName().trim());
-                    if (user != null && !schoolId.equals(user.getSchoolId())) {
-                        failureMsg
-                                .append("<br/>用户 " + markerClass.getLoginName() + MarkerExcelError.NAMEUSED.getName());
-                        failureNum++;
-                        continue;
-                    }
-                    if (user == null) {
-                        user = getUser(userMap, markerClass.getLoginName().trim(), schoolId);
-                    }
-                }
-                markerClass = getMarkerClass(user.getId(), markerClass.getExamId(), markerClass.getClassName());
-                saveList.add(markerClass);
-            }
-            successNum = markerClassService.batchSave(saveList);
-            if (failureNum > 0) {
-                failureMsg.insert(0, ",失败 " + failureNum + " 条记录!");
-            }
-            addMessage(redirectAttributes, "已成功导入" + successNum + " 条 " + failureMsg);
-        } catch (Exception e) {
-            log.error("Batch import subject user error!", e);
-            addMessage(redirectAttributes, "导入用户班级失败!失败信息:" + e.getMessage());
-        }
-        return "redirect:/admin/user/list";
-    }
-
-    private MarkerClass getMarkerClass(Integer userId, Integer examId, String className) {
-        MarkerClass m = markerClassService.findByUserIdAndExamIdAndClassName(userId, examId, className);
-        if (m == null) {
-            m = new MarkerClass(userId, examId, className);
-        }
-        return m;
-    }
-
-    private User getUser(Map<String, User> saveMap, String loginName, Integer schoolId) {
-        User user = saveMap.get(loginName);
-        if (user == null) {
-            user = new User();
-            user.setLoginName(loginName);
-            user.setName(loginName);
-            user.setPassword(Md5EncryptUtils.md5(USER_PASSWORD));
-            user.setRole(Role.SUBJECT_HEADER);
-            user.setSchoolId(schoolId);
-            user.setEnable(true);
-            user.setCreatedTime(new Date());
-            user.setSource(UserSource.INTERNAL);
-            userService.save(user);
-            saveMap.put(loginName, user);
-        }
-        return user;
-    }
-
-}
+package cn.com.qmth.stmms.admin.user;
+
+import cn.com.qmth.stmms.admin.exam.BaseExamController;
+import cn.com.qmth.stmms.biz.exam.model.MarkerClass;
+import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
+import cn.com.qmth.stmms.biz.exam.service.MarkerClassService;
+import cn.com.qmth.stmms.biz.user.model.User;
+import cn.com.qmth.stmms.biz.user.service.UserService;
+import cn.com.qmth.stmms.common.domain.WebUser;
+import cn.com.qmth.stmms.common.enums.MarkerExcelError;
+import cn.com.qmth.stmms.common.enums.Role;
+import cn.com.qmth.stmms.common.enums.UserSource;
+import cn.com.qmth.stmms.common.utils.EncryptUtils;
+import cn.com.qmth.stmms.common.utils.ExportExcel;
+import cn.com.qmth.stmms.common.utils.ImportExcel;
+import cn.com.qmth.stmms.common.utils.RequestUtils;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
+
+@Controller
+@RequestMapping("/admin/user/class")
+public class UserClassController extends BaseExamController {
+
+    public static final String USER_PASSWORD = "123456";
+
+    @Autowired
+    private UserService userService;
+
+    @Autowired
+    private MarkerClassService markerClassService;
+
+    @Autowired
+    private ExamStudentService studentService;
+
+    @RequestMapping(value = "/template")
+    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+        try {
+            String fileName = "用户班级导入模板.xlsx";
+            List<MarkerClass> list = new ArrayList<MarkerClass>();
+            list.add(new MarkerClass());
+            new ExportExcel("用户班级数据", MarkerClass.class, 2).setDataList(list).write(response, fileName).dispose();
+            return null;
+        } catch (Exception e) {
+            addMessage(redirectAttributes, "导入模板下载失败!失败信息:" + e.getMessage());
+        }
+        return "redirect:/admin/user/list";
+    }
+
+    @RequestMapping(value = "/import", method = RequestMethod.POST)
+    public String importFile(HttpServletRequest request, MultipartFile file, RedirectAttributes redirectAttributes) {
+        WebUser wu = RequestUtils.getWebUser(request);
+        try {
+            int successNum = 0;
+            int failureNum = 0;
+            StringBuilder failureMsg = new StringBuilder();
+            ImportExcel ei = new ImportExcel(file, 1, 0);
+            List<MarkerClass> list = ei.getDataList(MarkerClass.class);
+            Map<String, User> userMap = new HashMap<String, User>();
+            List<MarkerClass> saveList = new ArrayList<MarkerClass>();
+            Map<Integer, List<String>> classMap = new HashMap<Integer, List<String>>();
+            Integer schoolId = wu.getUser().getSchoolId();
+            for (MarkerClass markerClass : list) {
+                if (markerClass.getExamId() == null) {
+                    failureMsg.append("<br/>用户 " + markerClass.getLoginName() + MarkerExcelError.EXAMNULL.getName());
+                    failureNum++;
+                    continue;
+                }
+                if (StringUtils.isBlank(markerClass.getClassName())) {
+                    failureMsg.append("<br/>用户 " + markerClass.getLoginName() + MarkerExcelError.CLASSNULL.getName());
+                    failureNum++;
+                    continue;
+                }
+                List<String> classes = classMap.get(markerClass.getExamId());
+                if (classes == null) {
+                    classes = studentService.findDistinctClassName(markerClass.getExamId());
+                    classMap.put(markerClass.getExamId(), classes);
+                }
+                if (!classes.contains(markerClass.getClassName())) {
+                    failureMsg.append("<br/>考试 " + markerClass.getExamId() + " 班级 " + markerClass.getClassName()
+                            + MarkerExcelError.EXAMCLASSNULL.getName());
+                    failureNum++;
+                    continue;
+                }
+                if (StringUtils.isBlank(markerClass.getLoginName())) {
+                    failureMsg.append("<br/>用户 " + markerClass.getLoginName() + MarkerExcelError.NAMENULL.getName());
+                    failureNum++;
+                    continue;
+                }
+                User user = userMap.get(markerClass.getLoginName().trim());
+                if (user == null) {
+                    user = userService.findByLoginName(markerClass.getLoginName().trim());
+                    if (user != null && !schoolId.equals(user.getSchoolId())) {
+                        failureMsg
+                                .append("<br/>用户 " + markerClass.getLoginName() + MarkerExcelError.NAMEUSED.getName());
+                        failureNum++;
+                        continue;
+                    }
+                    if (user == null) {
+                        user = getUser(userMap, markerClass.getLoginName().trim(), schoolId);
+                    }
+                }
+                markerClass = getMarkerClass(user.getId(), markerClass.getExamId(), markerClass.getClassName());
+                saveList.add(markerClass);
+            }
+            successNum = markerClassService.batchSave(saveList);
+            if (failureNum > 0) {
+                failureMsg.insert(0, ",失败 " + failureNum + " 条记录!");
+            }
+            addMessage(redirectAttributes, "已成功导入" + successNum + " 条 " + failureMsg);
+        } catch (Exception e) {
+            log.error("Batch import subject user error!", e);
+            addMessage(redirectAttributes, "导入用户班级失败!失败信息:" + e.getMessage());
+        }
+        return "redirect:/admin/user/list";
+    }
+
+    private MarkerClass getMarkerClass(Integer userId, Integer examId, String className) {
+        MarkerClass m = markerClassService.findByUserIdAndExamIdAndClassName(userId, examId, className);
+        if (m == null) {
+            m = new MarkerClass(userId, examId, className);
+        }
+        return m;
+    }
+
+    private User getUser(Map<String, User> saveMap, String loginName, Integer schoolId) {
+        User user = saveMap.get(loginName);
+        if (user == null) {
+            user = new User();
+            user.setLoginName(loginName);
+            user.setName(loginName);
+            user.setPassword(EncryptUtils.md5(USER_PASSWORD));
+            user.setRole(Role.SUBJECT_HEADER);
+            user.setSchoolId(schoolId);
+            user.setEnable(true);
+            user.setCreatedTime(new Date());
+            user.setSource(UserSource.INTERNAL);
+            userService.save(user);
+            saveMap.put(loginName, user);
+        }
+        return user;
+    }
+
+}

+ 3 - 3
stmms-web/src/main/java/cn/com/qmth/stmms/admin/user/UserController.java

@@ -10,7 +10,7 @@ import cn.com.qmth.stmms.common.controller.BaseController;
 import cn.com.qmth.stmms.common.enums.LogType;
 import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.enums.UserSource;
-import cn.com.qmth.stmms.common.utils.Md5EncryptUtils;
+import cn.com.qmth.stmms.common.utils.EncryptUtils;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -97,7 +97,7 @@ public class UserController extends BaseController {
         if (previous == null) {
             String message = validate(user, subjectCodeString);
             if (message == null) {
-                user.setPassword(Md5EncryptUtils.md5(user.getPassword()));
+                user.setPassword(EncryptUtils.md5(user.getPassword()));
                 user.setSchoolId(current.getSchoolId());
                 user.setSource(UserSource.INTERNAL);
                 user.setCreatedTime(new Date());
@@ -113,7 +113,7 @@ public class UserController extends BaseController {
             previous.setLoginName(user.getLoginName());
             previous.setName(user.getName());
             if (StringUtils.isNotBlank(user.getPassword())) {
-                previous.setPassword(Md5EncryptUtils.md5(user.getPassword()));
+                previous.setPassword(EncryptUtils.md5(user.getPassword()));
             }
             previous.setEnable(user.isEnable());
             String message = validate(previous, subjectCodeString);

+ 11 - 12
stmms-web/src/main/java/cn/com/qmth/stmms/api/interceptor/ApiInterceptor.java

@@ -1,30 +1,29 @@
 package cn.com.qmth.stmms.api.interceptor;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 import cn.com.qmth.stmms.api.exception.ApiException;
-import cn.com.qmth.stmms.common.domain.AuthInfo;
 import cn.com.qmth.stmms.biz.school.model.School;
 import cn.com.qmth.stmms.biz.school.service.SchoolService;
 import cn.com.qmth.stmms.biz.user.model.User;
 import cn.com.qmth.stmms.biz.user.service.UserService;
-import cn.com.qmth.stmms.common.authorization.AuthorizationService;
 import cn.com.qmth.stmms.common.annotation.RoleRequire;
+import cn.com.qmth.stmms.common.authorization.AuthorizationService;
 import cn.com.qmth.stmms.common.domain.ApiUser;
+import cn.com.qmth.stmms.common.domain.AuthInfo;
 import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.session.service.SessionService;
 import cn.com.qmth.stmms.common.signature.SignatureInfo;
 import cn.com.qmth.stmms.common.signature.SignatureType;
 import cn.com.qmth.stmms.common.utils.AccessControlUtils;
-import cn.com.qmth.stmms.common.utils.Md5EncryptUtils;
+import cn.com.qmth.stmms.common.utils.EncryptUtils;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
-
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.method.HandlerMethod;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 /**
  * API接口访问拦截器
  *
@@ -45,7 +44,8 @@ public class ApiInterceptor extends HandlerInterceptorAdapter {
     private SessionService sessionService;
 
     @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
+            throws Exception {
         HandlerMethod method = (HandlerMethod) handler;
         try {
             return validate(request, response, method.getMethodAnnotation(RoleRequire.class));
@@ -78,9 +78,8 @@ public class ApiInterceptor extends HandlerInterceptorAdapter {
                     return buildApiUser(request, response, school);
                 } else if (info.getType() == SignatureType.TOKEN) {
                     User user = userService.findByLoginName(info.getInvoker());
-                    if (user == null || user.getAccessTokenRefreshTime() == null
-                            || AccessControlUtils.expired(user.getAccessTokenRefreshTime())
-                            || !info.validate(user.getAccessToken())) {
+                    if (user == null || user.getAccessTokenRefreshTime() == null || AccessControlUtils
+                            .expired(user.getAccessTokenRefreshTime()) || !info.validate(user.getAccessToken())) {
                         throw ApiException.SIGNATURE_INVALID;
                     }
                     if (!user.isEnable()) {
@@ -97,7 +96,7 @@ public class ApiInterceptor extends HandlerInterceptorAdapter {
             // 再尝试按简单模式解析
             else if ((simple = authorizationService.buildAuthInfo(request)) != null) {
                 User user = userService.findByLoginName(simple.getLoginname());
-                if (user == null || !Md5EncryptUtils.md5(simple.getPassword()).equals(user.getPassword())) {
+                if (user == null || !EncryptUtils.md5(simple.getPassword()).equals(user.getPassword())) {
                     throw ApiException.SIGNATURE_INVALID;
                 }
                 if (!user.isEnable()) {

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

@@ -8,7 +8,7 @@ import cn.com.qmth.stmms.common.enums.LogType;
 import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.session.model.StmmsSession;
 import cn.com.qmth.stmms.common.session.service.SessionService;
-import cn.com.qmth.stmms.common.utils.Md5EncryptUtils;
+import cn.com.qmth.stmms.common.utils.EncryptUtils;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -65,7 +65,7 @@ public class LoginController {
             modelAndView.addObject("message", "user.login.error.account");
             return modelAndView;
         }
-        if (!u.getPassword().equals(Md5EncryptUtils.md5(user.getPassword()))) {
+        if (!u.getPassword().equals(EncryptUtils.md5(user.getPassword()))) {
             modelAndView.addObject("message", "user.login.error.password");
             return modelAndView;
         }

+ 19 - 13
stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkController.java

@@ -19,7 +19,7 @@ import cn.com.qmth.stmms.common.domain.WebUser;
 import cn.com.qmth.stmms.common.enums.*;
 import cn.com.qmth.stmms.common.session.model.StmmsSession;
 import cn.com.qmth.stmms.common.session.service.SessionService;
-import cn.com.qmth.stmms.common.utils.Md5EncryptUtils;
+import cn.com.qmth.stmms.common.utils.EncryptUtils;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -107,7 +107,7 @@ public class MarkController extends BaseController {
     public ModelAndView reset(HttpServletRequest request, User user) {
         User current = RequestUtils.getWebUser(request).getUser();
         current.setName(user.getName());
-        current.setPassword(Md5EncryptUtils.md5(user.getPassword()));
+        current.setPassword(EncryptUtils.md5(user.getPassword()));
         current.setLastLoginIp(request.getRemoteAddr());
         current.setLastLoginTime(new Date());
         userService.save(current);
@@ -127,7 +127,8 @@ public class MarkController extends BaseController {
     }
 
     @RequestMapping(value = "/subject-select", method = RequestMethod.POST)
-    public ModelAndView select(HttpServletRequest request, HttpServletResponse response, @RequestParam Integer markerId) {
+    public ModelAndView select(HttpServletRequest request, HttpServletResponse response,
+            @RequestParam Integer markerId) {
         User user = RequestUtils.getWebUser(request).getUser();
         ModelAndView modelAndView = new ModelAndView("modules/mark/subjectSelectAp");
         Calendar rightNow = Calendar.getInstance();
@@ -199,7 +200,8 @@ public class MarkController extends BaseController {
                 markerService.save(marker);
             }
         }
-        ModelAndView view = new ModelAndView(mode == MarkMode.TRACK ? "modules/mark/markTrack" : "modules/mark/markNew");
+        ModelAndView view = new ModelAndView(
+                mode == MarkMode.TRACK ? "modules/mark/markTrack" : "modules/mark/markNew");
         view.addObject("forceMode", forceMode);
         view.addObject("sheetView", group.isSheetView());
         view.addObject("enableAllZero", group.isEnableAllZero());
@@ -353,8 +355,9 @@ public class MarkController extends BaseController {
             List<MarkLibrary> list = new ArrayList<MarkLibrary>();
             // 需要判断评卷员是否绑定了班级
             long classCount = markerClassService.countByUserIdAndExamId(marker.getUserId(), marker.getExamId());
-            list = libraryService.findUnMarked(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
-                    marker.getId(), marker.getUserId(), classCount > 0, retry, 20);
+            list = libraryService
+                    .findUnMarked(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(), marker.getId(),
+                            marker.getUserId(), classCount > 0, retry, 20);
             if (list.isEmpty()) {
                 break;
             }
@@ -375,8 +378,9 @@ public class MarkController extends BaseController {
         int retry = 1;
         Task task = null;
         while (task == null) {
-            List<TrialLibrary> list = trialService.findUnMarkedLibrary(marker.getExamId(), marker.getSubjectCode(),
-                    marker.getGroupNumber(), marker.getId(), retry, 10);
+            List<TrialLibrary> list = trialService
+                    .findUnMarkedLibrary(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
+                            marker.getId(), retry, 10);
             if (list.isEmpty()) {
                 break;
             }
@@ -471,11 +475,13 @@ public class MarkController extends BaseController {
             // 试评查找给分历史记录
             List<TrialHistory> historyList = new ArrayList<TrialHistory>();
             if (secretNumber != null) {
-                historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(),
-                        marker.getGroupNumber(), marker.getId(), secretNumber, pageNumber, pageSize, querySort);
+                historyList = trialService
+                        .findHistory(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
+                                marker.getId(), secretNumber, pageNumber, pageSize, querySort);
             } else {
-                historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(),
-                        marker.getGroupNumber(), marker.getId(), pageNumber, pageSize, querySort, null);
+                historyList = trialService
+                        .findHistory(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
+                                marker.getId(), pageNumber, pageSize, querySort, null);
             }
             for (TrialHistory history : historyList) {
                 TrialLibrary library = trialService.findLibrary(history.getLibraryId());
@@ -498,7 +504,7 @@ public class MarkController extends BaseController {
         JSONObject result = new JSONObject();
         user.setName(name);
         if (StringUtils.isNotEmpty(password)) {
-            user.setPassword(Md5EncryptUtils.md5(password));
+            user.setPassword(EncryptUtils.md5(password));
         }
         try {
             user = userService.save(user);

+ 1 - 1
stmms-web/src/main/webapp/WEB-INF/application.properties

@@ -1,6 +1,6 @@
 #jdbc config
 jdbc.driver=com.mysql.jdbc.Driver
-jdbc.url=jdbc:mysql://192.168.11.101:3306/stmms_ft_test?useUnicode=true&characterEncoding=UTF-8
+jdbc.url=jdbc:mysql://localhost:3306/stmms_ft_new?useUnicode=true&characterEncoding=UTF-8
 jdbc.username=root
 jdbc.password=root
 jdbc.maxActive=50

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

@@ -59,17 +59,17 @@
     <c:forEach items="${examList}" var="exam">
         <tr>
             <td>${exam.id}</td>
-            <td><a href="${ctx}/admin/exam/edit/${exam.id}">${exam.name}</a></td>
+            <td>${exam.name}</td>
             <td>${exam.type.name}</td>
             <td><fmt:formatDate value="${exam.examTime}" pattern="yyyy-MM-dd"/></td>
-            <td><c:if test="${exam.forceSpecialTag}">是</c:if>
+            <td>
+                <c:if test="${exam.forceSpecialTag}">是</c:if>
                 <c:if test="${!exam.forceSpecialTag}">否</c:if>
             </td>
             <td>${exam.status.name}</td>
             <td>
-                <a href="${ctx}/admin/exam/view/${exam.id}">详情</a>
+                <!--<a href="${ctx}/admin/exam/view/${exam.id}">详情</a>-->
                 <c:if test="${web_user.schoolAdmin==true}">
-                    &nbsp;
                     <a href="${ctx}/admin/exam/edit/${exam.id}">编辑</a>
                     <a href="${ctx}/admin/exam/problem/type?examId=${exam.id}">问题卷分类</a>
                     <c:if test="${exam.type=='MULTI_MEDIA'}">

+ 13 - 13
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/paperList.jsp

@@ -91,15 +91,15 @@
             </ul>
         </div>
         <c:if test="${!examLock}">
-		&nbsp;
-		<a href="${ctx}/admin/exam/paper/calculate" class="btn">客观题统分</a>
-		&nbsp;
-		<a href="${ctx}/admin/exam/paper/report" class="btn">分析计算</a>
+            &nbsp;
+            <a href="${ctx}/admin/exam/paper/calculate" class="btn">客观题统分</a>
+            &nbsp;
+            <a href="${ctx}/admin/exam/paper/report" class="btn">分析计算</a>
         </c:if>
         <c:if test="${examLock}"
         >&nbsp;
-		<a href="#" class="btn" disabled="disabled" >正在计算</a>
-		</c:if>
+            <a href="#" class="btn" disabled="disabled">正在计算</a>
+        </c:if>
     </div>
 </form>
 <tags:message content="${message}"/>
@@ -140,14 +140,14 @@
             <td>${subject.subjectiveScore}</td>
             <td>${subject.totalScore}</td>
             <td>
-				<c:if test="${examLock || subject.loecked}">正在计算</c:if>
-				<c:if test="${!examLock && !subject.loecked}">正常</c:if>
-			</td>
+                <c:if test="${examLock || subject.locked}">正在计算</c:if>
+                <c:if test="${!examLock && !subject.locked}">正常</c:if>
+            </td>
             <td>
-                <c:if test="${!examLock && !subject.loecked}">
-	                <a href="${ctx}/admin/exam/subject/edit?code=${subject.code}">编辑</a>
-					<a href="${ctx}/admin/exam/paper/report?subjectCode=${result.subject.code}">分析计算</a>
-				</c:if>
+                <c:if test="${!examLock && !subject.locked}">
+                    <a href="${ctx}/admin/exam/subject/edit?code=${subject.code}">编辑</a>
+                    <a href="${ctx}/admin/exam/paper/report?subjectCode=${result.subject.code}">分析计算</a>
+                </c:if>
             </td>
         </tr>
     </c:forEach>

+ 0 - 10
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/studentForm.jsp

@@ -10,16 +10,6 @@
 <form:form id="inputForm" modelAttribute="student" action="${ctx}/admin/exam/student/save" method="post" class="form-horizontal">
     <form:hidden path="id"/>
     <tags:message content="${message}"/>
-    <div class="control-group">
-        <label class="control-label">学习中心</label>
-        <div class="controls">
-            <select id="campusName" name="campusName" <c:if test="${student.upload }">disabled="disabled"</c:if>>
-                <c:forEach items="${campusList }" var="campusName">
-                    <option value="${campusName}" <c:if test="${student.campusName eq campusName }">selected</c:if>>${campusName }</option>
-                </c:forEach>
-            </select>
-        </div>
-    </div>
     <div class="control-group">
         <label class="control-label">科目</label>
         <div class="controls">

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

@@ -51,6 +51,8 @@
         <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"/>
+        <label>密号</label>
+        <input type="text" name="secretNumber" value="${query.secretNumber}" maxlength="50" class="input-small"/>
         <label>学号</label>
         <input type="text" name="studentCode" value="${query.studentCode}" maxlength="30" class="input-small"/>
         <label>科目</label>
@@ -130,6 +132,7 @@
     <thead>
     <tr>
         <th>准考证号</th>
+        <th>密号</th>
         <th>姓名</th>
         <th>学号</th>
         <th>科目</th>
@@ -148,6 +151,7 @@
     <c:forEach items="${studentList}" var="student">
         <tr>
             <td>${student.examNumber}</td>
+            <td>${student.secretNumber}</td>
             <td>${student.name}</td>
             <td>${student.studentCode}</td>
             <td>${student.subjectCode}-${student.subjectName}</td>

文件差异内容过多而无法显示
+ 359 - 325
stmms-web/src/main/webapp/sql/stmms_ft.sql


部分文件因为文件数量过多而无法显示