1
0
ting.yin 4 жил өмнө
parent
commit
0a79bdd434
60 өөрчлөгдсөн 987 нэмэгдсэн , 1352 устгасан
  1. 2 2
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/CheckStudentDao.java
  2. 5 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamDao.java
  3. 4 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamStudentDao.java
  4. 20 21
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/MarkerDao.java
  5. 11 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/DataSync.java
  6. 14 125
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/Marker.java
  7. 0 174
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/MarkerDTO.java
  8. 7 17
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/MarkerSearchQuery.java
  9. 1 1
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/CheckStudentService.java
  10. 3 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamService.java
  11. 2 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamStudentService.java
  12. 11 11
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/MarkerService.java
  13. 3 3
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/CheckStudentServiceImpl.java
  14. 5 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamServiceImpl.java
  15. 10 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamStudentServiceImpl.java
  16. 107 112
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/MarkerServiceImpl.java
  17. 1 1
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/ArbitrationDTO.java
  18. 1 1
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkServiceImpl.java
  19. 8 1
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/TaskServiceImpl.java
  20. 0 23
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/user/dao/OpenAccountDao.java
  21. 4 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/user/dao/UserDao.java
  22. 0 125
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/user/model/OpenAccount.java
  23. 2 11
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/user/service/UserService.java
  24. 9 47
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/user/service/impl/UserServiceImpl.java
  25. 2 2
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/dto/MarkerInfoDTO.java
  26. 4 0
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/DataSyncController.java
  27. 7 1
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/InspectedController.java
  28. 5 0
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkController.java
  29. 11 4
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkQualityController.java
  30. 159 242
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkerController.java
  31. 11 4
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/TrialController.java
  32. 9 7
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/interceptor/AdminInterceptor.java
  33. 33 10
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/DataSyncThread.java
  34. 20 14
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/utils/HttpUtil.java
  35. 9 14
      stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ExamStudentController.java
  36. 53 0
      stmms-web/src/main/java/cn/com/qmth/stmms/card/CardController.java
  37. 42 86
      stmms-web/src/main/java/cn/com/qmth/stmms/common/controller/LoginController.java
  38. 0 63
      stmms-web/src/main/java/cn/com/qmth/stmms/common/domain/OpenUser.java
  39. 35 12
      stmms-web/src/main/java/cn/com/qmth/stmms/common/domain/WebUser.java
  40. 12 19
      stmms-web/src/main/java/cn/com/qmth/stmms/common/interceptor/LogInterceptor.java
  41. 17 11
      stmms-web/src/main/java/cn/com/qmth/stmms/common/session/model/StmmsSession.java
  42. 0 16
      stmms-web/src/main/java/cn/com/qmth/stmms/common/utils/RequestUtils.java
  43. 72 15
      stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkController.java
  44. 0 1
      stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkLeaderController.java
  45. 25 14
      stmms-web/src/main/java/cn/com/qmth/stmms/mark/interceptor/MarkInterceptor.java
  46. 111 97
      stmms-web/src/main/java/cn/com/qmth/stmms/open/controller/OpenAccountController.java
  47. 27 30
      stmms-web/src/main/java/cn/com/qmth/stmms/open/interceptor/OpenInterceptor.java
  48. 1 0
      stmms-web/src/main/webapp/WEB-INF/application.properties
  49. 2 1
      stmms-web/src/main/webapp/WEB-INF/spring-mvc.xml
  50. 72 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/card/login.jsp
  51. 2 2
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/examIndex.jsp
  52. 2 2
      stmms-web/src/main/webapp/WEB-INF/views/modules/mark/markNew.jsp
  53. 2 2
      stmms-web/src/main/webapp/WEB-INF/views/modules/mark/markTrack.jsp
  54. 2 6
      stmms-web/src/main/webapp/sql/stmms_ft.sql
  55. 2 0
      stmms-web/src/main/webapp/static/i18n/messages.properties
  56. 2 0
      stmms-web/src/main/webapp/static/i18n/messages_en.properties
  57. 2 0
      stmms-web/src/main/webapp/static/i18n/messages_ja.properties
  58. 2 0
      stmms-web/src/main/webapp/static/i18n/messages_zh.properties
  59. BIN
      stmms-web/src/main/webapp/static/images/logo@2x_1.png
  60. 2 2
      stmms-web/src/main/webapp/static/mark-new/js/modules/mark-board.js

+ 2 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/CheckStudentDao.java

@@ -16,8 +16,8 @@ public interface CheckStudentDao extends PagingAndSortingRepository<CheckStudent
     List<CheckStudent> findByExamIdAndCheckedAndType(int examId, boolean checked, CheckType type);
 
     @Modifying
-    @Query("delete CheckStudent c where c.examId=?1 ")
-    void deleteByExamId(int examId);
+    @Query("delete CheckStudent c where c.studentId=?1 ")
+    void deleteByStudentId(int examId);
 
     long countByExamIdAndChecked(int examId, boolean checked);
 

+ 5 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamDao.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.stmms.biz.exam.dao;
 
+import java.util.Date;
 import java.util.List;
 
 import org.springframework.data.domain.Page;
@@ -40,4 +41,8 @@ public interface ExamDao extends PagingAndSortingRepository<Exam, Integer>, JpaS
     public void updateProcess(Integer id, Double process);
 
     public Exam findBySchoolIdAndCode(Integer schoolId, String code);
+
+    @Query(value = "select * from eb_exam e where e.id in (select m.exam_id from eb_marker m where m.user_id=?1) and e.create_time >?2 "
+            + "order by e.id", nativeQuery = true)
+    public List<Exam> findByUserId(Integer id, Date time);
 }

+ 4 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamStudentDao.java

@@ -155,4 +155,8 @@ public interface ExamStudentDao extends PagingAndSortingRepository<ExamStudent,
     public List<Double> findLowCountTotalSocreByExamIdAndSubjectCodeAndClass(Integer examId, String subjectCode,
             String className, int lowCount);
 
+    @Query("select s from ExamStudent s where s.studentCode=?2 and s.name=?3 and s.examId "
+            + "in (select e.id from Exam e where e.schoolId=?1)")
+    public List<ExamStudent> findBySchoolIdAndStudentCodeAndName(Integer schoolId, String studentCode, String name);
+
 }

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

@@ -2,7 +2,6 @@ package cn.com.qmth.stmms.biz.exam.dao;
 
 import java.util.List;
 
-import cn.com.qmth.stmms.common.enums.MarkStatus;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
@@ -23,11 +22,8 @@ public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>,
 
     public List<Marker> findByExamIdAndSubjectCode(int examId, String subjectCode, Pageable page);
 
-    public List<Marker> findByExamIdAndSubjectCodeAndGroupNumber(int examId, String subjectCode, int number, Pageable page);
-
-    public List<Marker> findByLoginName(String loginName);
-
-    public List<Marker> findByLoginNameAndPassword(String loginName, String password);
+    public List<Marker> findByExamIdAndSubjectCodeAndGroupNumber(int examId, String subjectCode, int number,
+            Pageable page);
 
     @Modifying
     @Query("delete from Marker m where m.examId=?1 and m.subjectCode=?2 and m.groupNumber=?3")
@@ -47,16 +43,18 @@ public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>,
     public void resetById(Integer id);
 
     @Modifying
-    @Query("update Marker m set m.finishCount=?2, m.validCount=?3, m.avgSpeed=?4, m.avgScore=?5, m.stdevScore=?6 " + "where m.id=?1")
-    public void updateQualityById(Integer id, int finishCount, int validCount, double avgSpeed, double avgScore, double stdevScore);
+    @Query("update Marker m set m.finishCount=?2, m.validCount=?3, m.avgSpeed=?4, m.avgScore=?5, m.stdevScore=?6 "
+            + "where m.id=?1")
+    public void updateQualityById(Integer id, int finishCount, int validCount, double avgSpeed, double avgScore,
+            double stdevScore);
 
     @Modifying
     @Query("update Marker m set m.markSetting=?2 where m.id=?1")
     public void updateMarkSettingById(Integer id, String setting);
 
-    @Modifying
-    @Query("update Marker m set m.openAccountId=?2 where m.id=?1")
-    public void updateOpenAccountById(Integer id, Integer accountId);
+    // @Modifying
+    // @Query("update Marker m set m.openAccountId=?2 where m.id=?1")
+    // public void updateOpenAccountById(Integer id, Integer accountId);
 
     @Modifying
     @Query("update Marker m set m.finishCount=null, m.validCount=null, m.avgSpeed=null, m.avgScore=null, m.stdevScore=null "
@@ -66,17 +64,18 @@ public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>,
     @Query(value = "select e.* from eb_marker e,m_library m where 1=1 and e.id = m.marker_id and m.student_id =?1", nativeQuery = true)
     public List<Marker> findByStudentId(int studentId);
 
-    @Query("select count(m) from Marker m where m.loginName=?1")
-    public long countByLoginName(String loginName);
-
     public List<Marker> findByMode(String common);
 
-    @Query(value = "select m from Marker m, MarkGroup g where m.openAccountId=?1 and m.enable=?2 "
-            + "and m.examId=g.pk.examId and m.subjectCode=g.pk.subjectCode and m.groupNumber=g.pk.number and g.status in (?3)")
-    List<Marker> findByOpenAccountIdAndEnableAndMarkStatus(Integer accountId, boolean enable, MarkStatus... status);
-
-    @Query("select count(m) from Marker m where m.examId=?1 and m.subjectCode=?2 and m.groupNumber=?3 and m.openAccountId=?4")
-    long countByExamIdAndSubjectCodeAndGroupNumberAndOpenAccountId(Integer examId, String subjectCode, Integer number,
-            Integer openAccountId);
+    // @Query(value =
+    // "select m from Marker m, MarkGroup g where m.openAccountId=?1 and m.enable=?2 "
+    // +
+    // "and m.examId=g.pk.examId and m.subjectCode=g.pk.subjectCode and m.groupNumber=g.pk.number and g.status in (?3)")
+    // List<Marker> findByOpenAccountIdAndEnableAndMarkStatus(Integer accountId,
+    // boolean enable, MarkStatus... status);
+
+    // @Query("select count(m) from Marker m where m.examId=?1 and m.subjectCode=?2 and m.groupNumber=?3 and m.openAccountId=?4")
+    // long countByExamIdAndSubjectCodeAndGroupNumberAndOpenAccountId(Integer
+    // examId, String subjectCode, Integer number,
+    // Integer openAccountId);
 
 }

+ 11 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/DataSync.java

@@ -57,6 +57,9 @@ public class DataSync implements Serializable {
     @Column(name = "subject_url", nullable = false)
     private String subjectUrl;
 
+    @Column(name = "subject_paper_url", nullable = false)
+    private String subjectPaperUrl;
+
     public Integer getExamId() {
         return examId;
     }
@@ -161,4 +164,12 @@ public class DataSync implements Serializable {
         this.secretKey = secretKey;
     }
 
+    public String getSubjectPaperUrl() {
+        return subjectPaperUrl;
+    }
+
+    public void setSubjectPaperUrl(String subjectPaperUrl) {
+        this.subjectPaperUrl = subjectPaperUrl;
+    }
+
 }

+ 14 - 125
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/Marker.java

@@ -1,7 +1,6 @@
 package cn.com.qmth.stmms.biz.exam.model;
 
 import java.io.Serializable;
-import java.util.Date;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
@@ -12,10 +11,7 @@ import javax.persistence.Id;
 import javax.persistence.Table;
 import javax.persistence.Transient;
 
-import cn.com.qmth.stmms.biz.user.model.OpenAccount;
-import cn.com.qmth.stmms.common.utils.AccessControlUtils;
-import org.apache.commons.lang.StringUtils;
-
+import cn.com.qmth.stmms.biz.user.model.User;
 import cn.com.qmth.stmms.common.annotation.ExcelField;
 import cn.com.qmth.stmms.common.enums.MarkMode;
 
@@ -41,29 +37,13 @@ public class Marker implements Serializable {
     @Column(name = "group_number", nullable = false)
     private Integer groupNumber;
 
-    @Column(name = "login_name", nullable = false)
+    @Column(name = "user_id", nullable = false)
     @ExcelField(title = "登录名", align = 2, sort = 30)
-    private String loginName;
-
-    @Column(name = "name", nullable = true)
-    private String name;
-
-    @Column(name = "password", nullable = false)
-    @ExcelField(title = "密码", align = 2, sort = 40)
-    private String password;
-
-    @Column(name = "open_account_id", nullable = true)
-    private Integer openAccountId;
+    private Integer userId;
 
     @Column(name = "enable", nullable = false)
     private boolean enable;
 
-    @Column(name = "last_login_ip", nullable = true)
-    private String lastLoginIp;
-
-    @Column(name = "last_login_time", nullable = true)
-    private Date lastLoginTime;
-
     @Column(name = "mode", nullable = true)
     @Enumerated(EnumType.STRING)
     private MarkMode mode;
@@ -98,18 +78,6 @@ public class Marker implements Serializable {
     @Column(name = "mark_setting", nullable = true, columnDefinition = "text")
     private String markSetting;
 
-    /**
-     * 访问令牌
-     */
-    @Column(name = "access_token", nullable = true, length = 64)
-    private String accessToken;
-
-    /**
-     * 令牌刷新时间
-     */
-    @Column(name = "access_token_refresh_time", nullable = true)
-    private Date accessTokenRefreshTime;
-
     @Transient
     @ExcelField(title = "科目(导入时可为空)", align = 2, sort = 20)
     private String subjectName;
@@ -127,15 +95,15 @@ public class Marker implements Serializable {
     @Transient
     private MarkGroup group;
 
-    @Transient
-    private OpenAccount openAccount;
-
     @Transient
     private long markedCount;
 
     @Transient
     private long currentCount;
 
+    @Transient
+    private User user;
+
     public Marker() {
     }
 
@@ -163,44 +131,12 @@ public class Marker implements Serializable {
         this.subjectCode = subjectCode;
     }
 
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    public Integer getOpenAccountId() {
-        return openAccountId;
-    }
-
-    public void setOpenAccountId(Integer openAccountId) {
-        this.openAccountId = openAccountId;
+    public Integer getUserId() {
+        return userId;
     }
 
-    public String getLastLoginIp() {
-        return lastLoginIp;
-    }
-
-    public void setLastLoginIp(String lastLoginIp) {
-        this.lastLoginIp = lastLoginIp;
-    }
-
-    public Date getLastLoginTime() {
-        return lastLoginTime;
-    }
-
-    public void setLastLoginTime(Date lastLoginTime) {
-        this.lastLoginTime = lastLoginTime;
-    }
-
-    public String getLoginName() {
-        return loginName;
-    }
-
-    public void setLoginName(String loginName) {
-        this.loginName = loginName;
+    public void setUserId(Integer userId) {
+        this.userId = userId;
     }
 
     public boolean isEnable() {
@@ -219,33 +155,6 @@ public class Marker implements Serializable {
         this.number = number;
     }
 
-    public void buildLoginName(int number) {
-        StringBuilder name = new StringBuilder();
-        name.append(examId).append(LOGINNAME_SPLITE);
-        name.append(subjectCode).append(LOGINNAME_SPLITE);
-        name.append(number);
-        setLoginName(name.toString());
-    }
-
-    public static Marker parseLoginName(String loginName) {
-        Marker marker = null;
-        try {
-            String[] values = StringUtils.split(loginName, LOGINNAME_SPLITE);
-            marker = new Marker();
-            marker.setExamId(Integer.valueOf(values[0]));
-            if (values.length == 2) {
-                marker.setSubjectCode("");
-                marker.setNumber(Integer.valueOf(values[1]));
-            } else {
-                marker.setSubjectCode(values[1]);
-                marker.setNumber(Integer.valueOf(values[2]));
-            }
-        } catch (Exception e) {
-            marker = null;
-        }
-        return marker;
-    }
-
     public ExamSubject getSubject() {
         return subject;
     }
@@ -254,14 +163,6 @@ public class Marker implements Serializable {
         this.subject = subject;
     }
 
-    public OpenAccount getOpenAccount() {
-        return openAccount;
-    }
-
-    public void setOpenAccount(OpenAccount openAccount) {
-        this.openAccount = openAccount;
-    }
-
     public long getMarkedCount() {
         return markedCount;
     }
@@ -286,14 +187,6 @@ public class Marker implements Serializable {
         this.subjectName = subjectName;
     }
 
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
     public MarkMode getMode() {
         return mode;
     }
@@ -390,16 +283,12 @@ public class Marker implements Serializable {
         this.markSetting = markSetting;
     }
 
-    public String getAccessToken() {
-        return accessToken;
+    public User getUser() {
+        return user;
     }
 
-    public Date getAccessTokenRefreshTime() {
-        return accessTokenRefreshTime;
+    public void setUser(User user) {
+        this.user = user;
     }
 
-    public void refreshAccessToken() {
-        accessToken = AccessControlUtils.randomString();
-        accessTokenRefreshTime = new Date();
-    }
 }

+ 0 - 174
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/MarkerDTO.java

@@ -1,174 +0,0 @@
-package cn.com.qmth.stmms.biz.exam.model;
-
-import cn.com.qmth.stmms.common.annotation.ExcelField;
-
-import java.io.Serializable;
-
-public class MarkerDTO implements Serializable {
-    private static final long serialVersionUID = 9026500878343612005L;
-
-    //评卷员主键
-    private Integer markerId;
-    //评卷员姓名
-    private String name;
-    //评卷登录号(旧)
-    @ExcelField(title = "原评卷员(必填)", align = 2, sort = 20)
-    private String loginName;
-    //评卷登录号(新)
-    @ExcelField(title = "新评卷员(必填)", align = 2, sort = 30)
-    private String newLoginName;
-    //评卷账号密码
-    @ExcelField(title = "新评卷员密码(必填)", align = 2, sort = 40)
-    private String password;
-    //分配课程数
-    private long subjectCount;
-    //完成课程数
-    private long finishedCount;
-    //完成数量
-    private long markedCount;
-    //最高分
-    private Double maxScore;
-    //最低分
-    private Double minScore;
-    //平均分
-    private Double avgScore;
-    //课程代码
-    @ExcelField(title = "科目代码(必填)", align = 2, sort = 10)
-    private String subjectCode;
-    //课程名称
-    private String subjectName;
-    //回评个数
-    private long rejectCount;
-    //考试Id
-    private int examId;
-
-
-    public MarkerDTO() {
-    }
-
-    public MarkerDTO(Marker marker) {
-        this.name = marker.getName();
-        this.loginName = marker.getLoginName();
-        this.markerId = marker.getId();
-    }
-
-    public Integer getMarkerId() {
-        return markerId;
-    }
-
-    public void setMarkerId(Integer markerId) {
-        this.markerId = markerId;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getLoginName() {
-        return loginName;
-    }
-
-    public void setLoginName(String loginName) {
-        this.loginName = loginName;
-    }
-
-    public long getSubjectCount() {
-        return subjectCount;
-    }
-
-    public void setSubjectCount(long subjectCount) {
-        this.subjectCount = subjectCount;
-    }
-
-    public long getFinishedCount() {
-        return finishedCount;
-    }
-
-    public void setFinishedCount(long finishedCount) {
-        this.finishedCount = finishedCount;
-    }
-
-    public long getMarkedCount() {
-        return markedCount;
-    }
-
-    public void setMarkedCount(long markedCount) {
-        this.markedCount = markedCount;
-    }
-
-    public Double getMaxScore() {
-        return maxScore;
-    }
-
-    public void setMaxScore(Double maxScore) {
-        this.maxScore = maxScore;
-    }
-
-    public Double getMinScore() {
-        return minScore;
-    }
-
-    public void setMinScore(Double minScore) {
-        this.minScore = minScore;
-    }
-
-    public Double getAvgScore() {
-        return avgScore;
-    }
-
-    public void setAvgScore(Double avgScore) {
-        this.avgScore = avgScore;
-    }
-
-    public String getSubjectCode() {
-        return subjectCode;
-    }
-
-    public void setSubjectCode(String subjectCode) {
-        this.subjectCode = subjectCode;
-    }
-
-    public String getSubjectName() {
-        return subjectName;
-    }
-
-    public void setSubjectName(String subjectName) {
-        this.subjectName = subjectName;
-    }
-
-    public long getRejectCount() {
-        return rejectCount;
-    }
-
-    public void setRejectCount(long rejectCount) {
-        this.rejectCount = rejectCount;
-    }
-
-    public String getNewLoginName() {
-        return newLoginName;
-    }
-
-    public void setNewLoginName(String newLoginName) {
-        this.newLoginName = newLoginName;
-    }
-
-    public int getExamId() {
-        return examId;
-    }
-
-    public void setExamId(int examId) {
-        this.examId = examId;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-}

+ 7 - 17
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/MarkerSearchQuery.java

@@ -14,14 +14,12 @@ public class MarkerSearchQuery extends BaseQuery<Marker> {
 
     private String subjectCode;
 
-    private String loginName;
-
     private Integer groupNumber;
 
-    private String name;
+    private Integer userId;
 
-    public void orderByLoginName() {
-        setSort(new Sort(Direction.ASC, "loginName"));
+    public void orderByUserId() {
+        setSort(new Sort(Direction.ASC, "userId"));
     }
 
     public void orderById() {
@@ -52,14 +50,6 @@ public class MarkerSearchQuery extends BaseQuery<Marker> {
         this.subjectCode = subjectCode;
     }
 
-    public String getLoginName() {
-        return loginName;
-    }
-
-    public void setLoginName(String loginName) {
-        this.loginName = loginName;
-    }
-
     public Integer getGroupNumber() {
         return groupNumber;
     }
@@ -68,12 +58,12 @@ public class MarkerSearchQuery extends BaseQuery<Marker> {
         this.groupNumber = groupNumber;
     }
 
-    public String getName() {
-        return name;
+    public Integer getUserId() {
+        return userId;
     }
 
-    public void setName(String name) {
-        this.name = name;
+    public void setUserId(Integer userId) {
+        this.userId = userId;
     }
 
 }

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

@@ -12,7 +12,7 @@ public interface CheckStudentService {
 
     List<CheckStudent> findByExamIdAndIsCheckedAndType(int examId, boolean checked, CheckType type);
 
-    void deleteByExamId(int examId);
+    void deleteByStudentId(int examId);
 
     CheckStudent findByStudentId(Integer studentId);
 

+ 3 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamService.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.stmms.biz.exam.service;
 
+import java.util.Date;
 import java.util.List;
 
 import cn.com.qmth.stmms.biz.exam.model.Exam;
@@ -35,4 +36,6 @@ public interface ExamService {
 
     Exam findByCode(Integer schoolId, String code);
 
+    List<Exam> findByUserId(Integer id, Date time);
+
 }

+ 2 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamStudentService.java

@@ -123,4 +123,6 @@ public interface ExamStudentService {
 
     public List<String> findDistinctClassName(Integer examId, String subjectCode);
 
+    public List<ExamStudent> findBySchoolIdAndStudentCodeAndName(Integer schoolId, String studentCode, String name);
+
 }

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

@@ -2,10 +2,8 @@ package cn.com.qmth.stmms.biz.exam.service;
 
 import java.util.List;
 
-import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.query.MarkerSearchQuery;
-import cn.com.qmth.stmms.common.enums.MarkStatus;
 
 public interface MarkerService {
 
@@ -13,13 +11,14 @@ public interface MarkerService {
 
     Marker findById(Integer id);
 
-    Marker findByLoginName(String loginName);
-
+    // Marker findByLoginName(String loginName);
+    //
     List<Marker> findByExamAndSubjectAndGroup(int examId, String subjectCode, int groupNumber);
 
     long countByExam(int examId);
 
-    int batchCreate(ExamSubject subject, int groupNumber, int count, String password);
+    // int batchCreate(ExamSubject subject, int groupNumber, int count, String
+    // password);
 
     MarkerSearchQuery findByQuery(MarkerSearchQuery query);
 
@@ -31,17 +30,18 @@ public interface MarkerService {
 
     List<Marker> findMode(String commo);
 
-    public List<Marker> findByStudentId(int studentId);
+    // public List<Marker> findByStudentId(int studentId);
 
     public int batchSave(List<Marker> list);
 
-    long countByLoginName(String loginName);
-
     void updateMarkSetting(Integer id, String setting);
 
-    void updateOpenAccountById(Integer id, Integer openAccountId);
+    // void updateOpenAccountById(Integer id, Integer openAccountId);
 
-    List<Marker> findByOpenAccountAndMarkStatus(Integer openAccountId, MarkStatus... status);
+    // List<Marker> findByOpenAccountAndMarkStatus(Integer openAccountId,
+    // MarkStatus... status);
 
-    long countByExamAndSubjectAndGroupAndOpenAccount(Integer examId, String subjectCode, Integer groupNumber, Integer openAccountId);
+    // long countByExamAndSubjectAndGroupAndOpenAccount(Integer examId, String
+    // subjectCode, Integer groupNumber,
+    // Integer openAccountId);
 }

+ 3 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/CheckStudentServiceImpl.java

@@ -40,8 +40,8 @@ public class CheckStudentServiceImpl extends BaseQueryService<CheckStudent> impl
 
     @Transactional
     @Override
-    public void deleteByExamId(int examId) {
-        checkStudentDao.deleteByExamId(examId);
+    public void deleteByStudentId(int examId) {
+        checkStudentDao.deleteByStudentId(examId);
     }
 
     @Override
@@ -88,7 +88,7 @@ public class CheckStudentServiceImpl extends BaseQueryService<CheckStudent> impl
 
     @Override
     public long countByExamIdAndSubjectCodeAndChecked(int examId, String subjectCode, boolean checked) {
-        return checkStudentDao.countByExamIdAndSubjectCodeAndChecked(examId,subjectCode,checked);
+        return checkStudentDao.countByExamIdAndSubjectCodeAndChecked(examId, subjectCode, checked);
     }
 
 }

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

@@ -181,4 +181,9 @@ public class ExamServiceImpl extends BaseQueryService<Exam> implements ExamServi
         return examDao.findBySchoolIdAndCode(schoolId, code);
     }
 
+    @Override
+    public List<Exam> findByUserId(Integer id, Date time) {
+        return examDao.findByUserId(id, time);
+    }
+
 }

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

@@ -37,6 +37,7 @@ import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
+import cn.com.qmth.stmms.biz.exam.service.CheckStudentService;
 import cn.com.qmth.stmms.biz.exam.service.ExamPackageService;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
 import cn.com.qmth.stmms.biz.exam.service.ExamService;
@@ -88,6 +89,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     @Autowired
     private MarkSpecialTagService specialTagService;
 
+    @Autowired
+    private CheckStudentService checkStudentService;
+
     public static final String LOGINNAME_SPLITE = "-";
 
     public static final String USER_PASSWORD = "123456";
@@ -243,6 +247,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
 
     @Transactional
     public void deleteById(int id) {
+        checkStudentService.deleteByStudentId(id);
         ExamStudent student = findById(id);
         if (student != null) {
             delete(student);
@@ -939,4 +944,9 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     public List<String> findDistinctClassName(Integer examId, String subjectCode) {
         return studentDao.findDistinctClassName(examId, subjectCode);
     }
+
+    @Override
+    public List<ExamStudent> findBySchoolIdAndStudentCodeAndName(Integer schoolId, String studentCode, String name) {
+        return studentDao.findBySchoolIdAndStudentCodeAndName(schoolId, studentCode, name);
+    }
 }

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

@@ -2,28 +2,21 @@ package cn.com.qmth.stmms.biz.exam.service.impl;
 
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Random;
 
 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.common.enums.MarkStatus;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Sort;
-import org.springframework.data.domain.Sort.Direction;
 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.BaseQuery;
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
 import cn.com.qmth.stmms.biz.exam.dao.MarkerDao;
-import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
-import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.query.MarkerSearchQuery;
 import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
@@ -46,12 +39,13 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
     @Transactional
     @Override
     public Marker save(Marker marker) {
-        Marker previous = findByLoginName(marker.getLoginName());
-        if (previous == null || (marker.getId() != null && previous.getId().equals(marker.getId()))) {
-            return markerDao.save(marker);
-        } else {
-            return null;
-        }
+        // Marker previous = findByLoginName(marker.getLoginName());
+        // if (previous == null || (marker.getId() != null &&
+        // previous.getId().equals(marker.getId()))) {
+        return markerDao.save(marker);
+        // } else {
+        // return null;
+        // }
     }
 
     @Transactional
@@ -60,22 +54,22 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
         markerDao.updateMarkSettingById(id, setting);
     }
 
-    @Transactional
-    @Override
-    public void updateOpenAccountById(Integer id, Integer accountId) {
-        markerDao.updateOpenAccountById(id, accountId);
-    }
+    // @Transactional
+    // @Override
+    // public void updateOpenAccountById(Integer id, Integer accountId) {
+    // markerDao.updateOpenAccountById(id, accountId);
+    // }
 
     @Override
     public Marker findById(Integer id) {
         return markerDao.findOne(id);
     }
 
-    @Override
-    public Marker findByLoginName(String loginName) {
-        List<Marker> list = markerDao.findByLoginName(loginName);
-        return list != null && list.size() > 0 ? list.get(0) : null;
-    }
+    // @Override
+    // public Marker findByLoginName(String loginName) {
+    // List<Marker> list = markerDao.findByLoginName(loginName);
+    // return list != null && list.size() > 0 ? list.get(0) : null;
+    // }
 
     @Override
     public List<Marker> findByExamAndSubjectAndGroup(int examId, String subjectCode, int number) {
@@ -92,71 +86,77 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
         return markerDao.countByExamIdAndSubjectCodeAndGroupNumber(examId, subjectCode, number);
     }
 
-    @Transactional
-    @Override
-    public int batchCreate(ExamSubject subject, int groupNumber, int count, String password) {
-        int result = 0;
-        if (subject != null && count > 0) {
-            if (groupNumber > 0) {
-                result = saveMarker(subject, groupNumber, count, password);
-            } else {
-                List<MarkGroup> groups = groupService.findByExamAndSubject(subject.getExamId(), subject.getCode());
-                for (MarkGroup markGroup : groups) {
-                    result = result + saveMarker(subject, markGroup.getNumber(), count, password);
-                }
-            }
-        }
-        return result;
-    }
+    // @Transactional
+    // @Override
+    // public int batchCreate(ExamSubject subject, int groupNumber, int count,
+    // String password) {
+    // int result = 0;
+    // if (subject != null && count > 0) {
+    // if (groupNumber > 0) {
+    // result = saveMarker(subject, groupNumber, count, password);
+    // } else {
+    // List<MarkGroup> groups =
+    // groupService.findByExamAndSubject(subject.getExamId(),
+    // subject.getCode());
+    // for (MarkGroup markGroup : groups) {
+    // result = result + saveMarker(subject, markGroup.getNumber(), count,
+    // password);
+    // }
+    // }
+    // }
+    // return result;
+    // }
 
-    private int saveMarker(ExamSubject subject, int groupNumber, int count, String password) {
-        int result = 0;
-        int start = 1;
-        Marker previous = findLastMarker(subject.getExamId(), subject.getCode());
-        if (previous != null) {
-            start = previous.getNumber() + 1;
-        }
-        int end = start + count - 1;
-        for (; start <= end; start++) {
-            Marker marker = new Marker();
-            marker.setExamId(subject.getExamId());
-            marker.setSubjectCode(subject.getCode());
-            if (StringUtils.isEmpty(password)) {
-                Random random = new Random();
-                for (int i = 0; i < 6; i++) {
-                    password += random.nextInt(10);
-                }
-                marker.setPassword(password);
-                password = "";// 随机码生产后将密码置空
-            } else {
-                marker.setPassword(password);
-            }
-            marker.setEnable(true);
-            marker.buildLoginName(start);
-            marker.setLoginName(marker.getLoginName());
-            marker.setName(marker.getLoginName());
-            marker.setGroupNumber(groupNumber);
-            marker.setClassCount(0);
-            if (save(marker) != null) {
-                result++;
-            }
-        }
-        return result;
-    }
+    // private int saveMarker(ExamSubject subject, int groupNumber, int count,
+    // String password) {
+    // int result = 0;
+    // int start = 1;
+    // Marker previous = findLastMarker(subject.getExamId(), subject.getCode());
+    // if (previous != null) {
+    // start = previous.getNumber() + 1;
+    // }
+    // int end = start + count - 1;
+    // for (; start <= end; start++) {
+    // Marker marker = new Marker();
+    // marker.setExamId(subject.getExamId());
+    // marker.setSubjectCode(subject.getCode());
+    // if (StringUtils.isEmpty(password)) {
+    // Random random = new Random();
+    // for (int i = 0; i < 6; i++) {
+    // password += random.nextInt(10);
+    // }
+    // marker.setPassword(password);
+    // password = "";// 随机码生产后将密码置空
+    // } else {
+    // marker.setPassword(password);
+    // }
+    // marker.setEnable(true);
+    // marker.buildLoginName(start);
+    // marker.setLoginName(marker.getLoginName());
+    // marker.setName(marker.getLoginName());
+    // marker.setGroupNumber(groupNumber);
+    // marker.setClassCount(0);
+    // if (save(marker) != null) {
+    // result++;
+    // }
+    // }
+    // return result;
+    // }
 
-    private Marker findLastMarker(int examId, String subjectCode) {
-        Marker marker = null;
-        List<Marker> list = markerDao
-                .findByExamIdAndSubjectCode(examId, subjectCode, new BaseQuery<Marker>(1, 1, new Sort(Direction.DESC, "id")));
-        if (list != null && !list.isEmpty()) {
-            marker = list.get(0);
-        }
-        if (marker != null) {
-            return Marker.parseLoginName(marker.getLoginName());
-        } else {
-            return null;
-        }
-    }
+    // private Marker findLastMarker(int examId, String subjectCode) {
+    // Marker marker = null;
+    // List<Marker> list = markerDao.findByExamIdAndSubjectCode(examId,
+    // subjectCode, new BaseQuery<Marker>(1, 1,
+    // new Sort(Direction.DESC, "id")));
+    // if (list != null && !list.isEmpty()) {
+    // marker = list.get(0);
+    // }
+    // if (marker != null) {
+    // return Marker.parseLoginName(marker.getLoginName());
+    // } else {
+    // return null;
+    // }
+    // }
 
     @Override
     public List<Marker> getMarkCount(int examId) {
@@ -178,7 +178,8 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
     @Override
     public List<Marker> getMarkCount(int examId, String subjectCode) {
         List<Marker> list = new LinkedList<Marker>();
-        List<Object[]> result = libraryDao.countMarkerAndStatus(examId, subjectCode, LibraryStatus.MARKED, LibraryStatus.INSPECTED);
+        List<Object[]> result = libraryDao.countMarkerAndStatus(examId, subjectCode, LibraryStatus.MARKED,
+                LibraryStatus.INSPECTED);
         if (result != null) {
             for (Object[] array : result) {
                 try {
@@ -218,46 +219,40 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
                 if (query.getGroupNumber() != null) {
                     predicates.add(cb.equal(root.get("groupNumber"), query.getGroupNumber()));
                 }
-                if (StringUtils.isNotBlank(query.getLoginName())) {
-                    predicates.add(cb.equal(root.get("loginName"), query.getLoginName()));
-                }
-                if (StringUtils.isNotBlank(query.getName())) {
-                    predicates.add(cb.equal(root.get("name"), query.getName()));
+                if (query.getUserId() != null) {
+                    predicates.add(cb.equal(root.get("userId"), query.getUserId()));
                 }
-                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()]));
             }
         };
     }
 
-    @Override
-    public List<Marker> findByStudentId(int studentId) {
-        return markerDao.findByStudentId(studentId);
-    }
-
     @Override
     public int batchSave(List<Marker> list) {
         markerDao.save(list);
         return list.size();
     }
 
-    @Override
-    public long countByLoginName(String loginName) {
-        return markerDao.countByLoginName(loginName);
-    }
-
     @Override
     public List<Marker> findMode(String commo) {
         return markerDao.findByMode(commo);
     }
 
-    @Override
-    public List<Marker> findByOpenAccountAndMarkStatus(Integer accountId, MarkStatus... status) {
-        return markerDao.findByOpenAccountIdAndEnableAndMarkStatus(accountId, true, status);
-    }
+    // @Override
+    // public List<Marker> findByOpenAccountAndMarkStatus(Integer accountId,
+    // MarkStatus... status) {
+    // return markerDao.findByOpenAccountIdAndEnableAndMarkStatus(accountId,
+    // true, status);
+    // }
 
-    @Override
-    public long countByExamAndSubjectAndGroupAndOpenAccount(Integer examId, String subjectCode, Integer groupNumber,
-            Integer openAccountId) {
-        return markerDao.countByExamIdAndSubjectCodeAndGroupNumberAndOpenAccountId(examId, subjectCode, groupNumber, openAccountId);
-    }
+    // @Override
+    // public long countByExamAndSubjectAndGroupAndOpenAccount(Integer examId,
+    // String subjectCode, Integer groupNumber,
+    // Integer openAccountId) {
+    // return
+    // markerDao.countByExamIdAndSubjectCodeAndGroupNumberAndOpenAccountId(examId,
+    // subjectCode, groupNumber,
+    // openAccountId);
+    // }
 }

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

@@ -15,7 +15,7 @@ public class ArbitrationDTO {
     private String scoreList;
 
     public ArbitrationDTO(MarkLibrary library, Marker marker) {
-        markerName = marker.getName();
+        markerName = marker.getUser().getName();
         markTime = library.getMarkerTime();
         totalScore = library.getMarkerScore();
         scoreList = library.getMarkerScoreList();

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

@@ -1118,7 +1118,7 @@ public class MarkServiceImpl implements MarkService {
 
     @Override
     public boolean needUpdateQuality(Marker marker, long expireMinutes) {
-        if (marker == null || marker.getLastLoginTime() == null) {
+        if (marker == null) {
             return false;
         }
         Long lastUpdateTime = markerLastUpdateTime.get(marker.getId());

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

@@ -15,6 +15,7 @@ import cn.com.qmth.stmms.biz.campus.service.CampusService;
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
+import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
 import cn.com.qmth.stmms.biz.exam.service.ExamService;
 import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
@@ -40,6 +41,7 @@ import cn.com.qmth.stmms.biz.mark.service.MarkSpecialTagService;
 import cn.com.qmth.stmms.biz.mark.service.MarkTrackService;
 import cn.com.qmth.stmms.biz.mark.service.TaskService;
 import cn.com.qmth.stmms.biz.mark.service.TrialService;
+import cn.com.qmth.stmms.biz.user.service.UserService;
 import cn.com.qmth.stmms.common.enums.LibraryStatus;
 import cn.com.qmth.stmms.common.enums.MarkStatus;
 import cn.com.qmth.stmms.common.utils.PictureUrlBuilder;
@@ -85,6 +87,9 @@ public class TaskServiceImpl implements TaskService {
     @Autowired
     private ExamService examService;
 
+    @Autowired
+    private UserService userService;
+
     @Override
     public List<Task> findByQuery(MarkLibrarySearchQuery query) {
         List<Task> list = new LinkedList<Task>();
@@ -123,7 +128,9 @@ public class TaskServiceImpl implements TaskService {
         List<ArbitrationDTO> list = new ArrayList<ArbitrationDTO>();
         for (MarkLibrary library : libraryList) {
             if (library.getStatus() != LibraryStatus.WAITING) {
-                list.add(new ArbitrationDTO(library, markerService.findById(library.getMarkerId())));
+                Marker marker = markerService.findById(library.getMarkerId());
+                marker.setUser(userService.findById(marker.getUserId()));
+                list.add(new ArbitrationDTO(library, marker));
             }
         }
         task.setArbitrationList(list);

+ 0 - 23
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/user/dao/OpenAccountDao.java

@@ -1,23 +0,0 @@
-package cn.com.qmth.stmms.biz.user.dao;
-
-import cn.com.qmth.stmms.biz.user.model.OpenAccount;
-import cn.com.qmth.stmms.biz.user.model.User;
-import cn.com.qmth.stmms.common.enums.Role;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.PagingAndSortingRepository;
-
-import java.util.List;
-import java.util.Set;
-
-public interface OpenAccountDao extends PagingAndSortingRepository<OpenAccount, Integer>, JpaSpecificationExecutor<OpenAccount> {
-
-    List<OpenAccount> findBySchoolIdAndEnable(Integer schoolId, boolean enable);
-
-    @Query("select o from OpenAccount o where o.schoolId=?1 and o.enable=?2 and not exists "
-            + "(select m.id from Marker m where m.examId=?3 and m.subjectCode=?4 and m.groupNumber=?5 and m.openAccountId=o.id)")
-    List<OpenAccount> findUnbind(Integer schoolId, boolean enable, Integer examId, String subjectCode, Integer groupNumber);
-
-    OpenAccount findFirstBySchoolIdAndAccount(Integer schoolId, String account);
-
-}

+ 4 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/user/dao/UserDao.java

@@ -4,6 +4,7 @@ import java.util.List;
 import java.util.Set;
 
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.PagingAndSortingRepository;
 
 import cn.com.qmth.stmms.biz.user.model.User;
@@ -20,4 +21,7 @@ public interface UserDao extends PagingAndSortingRepository<User, Integer>, JpaS
     public List<User> findBySchoolIdAndRole(int schoolId, Role role);
 
     public List<User> findBySchoolIdAndRoleIn(int schoolId, Set<Role> roleSet);
+
+    @Query(value = "select * from b_user u where u.id = (select m.user_id from eb_marker m where m.id =?1)", nativeQuery = true)
+    public User findByMarkerId(Integer markerId);
 }

+ 0 - 125
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/user/model/OpenAccount.java

@@ -1,125 +0,0 @@
-package cn.com.qmth.stmms.biz.user.model;
-
-import cn.com.qmth.stmms.common.utils.AccessControlUtils;
-
-import javax.persistence.*;
-import java.io.Serializable;
-import java.util.Date;
-
-@Entity
-@Table(name = "b_open_account")
-public class OpenAccount implements Serializable {
-
-    private static final long serialVersionUID = 6570825224244775263L;
-
-    /**
-     * 主键
-     */
-    @Id
-    @GeneratedValue
-    private Integer id;
-
-    /**
-     * 所属学校ID
-     */
-    @Column(name = "school_id", nullable = false)
-    private Integer schoolId;
-
-    /**
-     * 登录名
-     */
-    @Column(name = "account", length = 64, nullable = false)
-    private String account;
-
-    /**
-     * 名称
-     */
-    @Column(name = "name", length = 64, nullable = false)
-    private String name;
-
-    /**
-     * 状态
-     */
-    @Column(name = "enable", length = 1, nullable = false, columnDefinition = "tinyint")
-    private boolean enable;
-
-    /**
-     * 访问令牌
-     */
-    @Column(name = "access_token", length = 64, nullable = true)
-    private String accessToken;
-
-    /**
-     * 令牌刷新时间
-     */
-    @Column(name = "access_token_refresh_time", nullable = true, columnDefinition = "datetime")
-    private Date accessTokenRefreshTime;
-
-    /**
-     * 账号首次创建时间
-     */
-    @Column(name = "create_time", nullable = false, columnDefinition = "datetime")
-    private Date createTime;
-
-    public Integer getId() {
-        return id;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public Integer getSchoolId() {
-        return schoolId;
-    }
-
-    public void setSchoolId(Integer schoolId) {
-        this.schoolId = schoolId;
-    }
-
-    public String getAccount() {
-        return account;
-    }
-
-    public void setAccount(String account) {
-        this.account = account;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public boolean isEnable() {
-        return enable;
-    }
-
-    public void setEnable(boolean enable) {
-        this.enable = enable;
-    }
-
-    public String getAccessToken() {
-        return accessToken;
-    }
-
-    public Date getAccessTokenRefreshTime() {
-        return accessTokenRefreshTime;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public void refreshAccessToken() {
-        this.accessToken = AccessControlUtils.randomString();
-        this.accessTokenRefreshTime = new Date();
-    }
-
-}

+ 2 - 11
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/user/service/UserService.java

@@ -3,23 +3,12 @@ package cn.com.qmth.stmms.biz.user.service;
 import java.util.List;
 import java.util.Set;
 
-import cn.com.qmth.stmms.biz.user.model.OpenAccount;
 import cn.com.qmth.stmms.biz.user.model.User;
 import cn.com.qmth.stmms.biz.user.service.query.UserSearchQuery;
 import cn.com.qmth.stmms.common.enums.Role;
 
 public interface UserService {
 
-    OpenAccount findOpenAccount(Integer id);
-
-    List<OpenAccount> listOpenAccount(Integer schoolId);
-
-    List<OpenAccount> listUnbindOpenAccount(Integer schoolId, Integer examId, String subjectCode, Integer groupNumber);
-
-    OpenAccount openAccountLogin(Integer schoolId, String account);
-
-    OpenAccount saveOpenAccount(Integer schoolId, String account, String name, boolean enable);
-
     User login(String loginName, String password, String ip);
 
     User findByLoginName(String loginName);
@@ -44,4 +33,6 @@ public interface UserService {
 
     User findSchoolViewer(Integer schoolId);
 
+    User findByMarkerId(Integer markerId);
+
 }

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

@@ -1,15 +1,15 @@
 package cn.com.qmth.stmms.biz.user.service.impl;
 
-import java.util.*;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
 
 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.user.dao.OpenAccountDao;
-import cn.com.qmth.stmms.biz.user.model.OpenAccount;
-import cn.com.qmth.stmms.common.utils.Md5EncryptUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -22,6 +22,7 @@ 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.enums.Role;
+import cn.com.qmth.stmms.common.utils.Md5EncryptUtils;
 
 /**
  * 用户Service
@@ -34,9 +35,6 @@ public class UserServiceImpl implements UserService {
     @Autowired
     private UserDao userDao;
 
-    @Autowired
-    private OpenAccountDao openAccountDao;
-
     @Override
     public User findByLoginName(String loginName) {
         List<User> list = userDao.findByLoginName(loginName);
@@ -107,7 +105,8 @@ public class UserServiceImpl implements UserService {
                         predicates.add(cb.equal(root.get("role"), role));
                     }
                 }
-                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);
         if (result != null) {
@@ -174,44 +173,7 @@ public class UserServiceImpl implements UserService {
     }
 
     @Override
-    @Transactional
-    public OpenAccount openAccountLogin(Integer schoolId, String account) {
-        OpenAccount oa = openAccountDao.findFirstBySchoolIdAndAccount(schoolId, account);
-        if (oa != null) {
-            oa.refreshAccessToken();
-            return openAccountDao.save(oa);
-        } else {
-            return null;
-        }
-    }
-
-    @Override
-    @Transactional
-    public OpenAccount saveOpenAccount(Integer schoolId, String account, String name, boolean enable) {
-        OpenAccount oa = openAccountDao.findFirstBySchoolIdAndAccount(schoolId, account);
-        if (oa == null) {
-            oa = new OpenAccount();
-            oa.setSchoolId(schoolId);
-            oa.setAccount(account);
-            oa.setCreateTime(new Date());
-        }
-        oa.setName(name);
-        oa.setEnable(enable);
-        return openAccountDao.save(oa);
-    }
-
-    @Override
-    public OpenAccount findOpenAccount(Integer id) {
-        return openAccountDao.findOne(id);
-    }
-
-    @Override
-    public List<OpenAccount> listOpenAccount(Integer schoolId) {
-        return openAccountDao.findBySchoolIdAndEnable(schoolId, true);
-    }
-
-    @Override
-    public List<OpenAccount> listUnbindOpenAccount(Integer schoolId, Integer examId, String subjectCode, Integer groupNumber) {
-        return openAccountDao.findUnbind(schoolId, true, examId, subjectCode, groupNumber);
+    public User findByMarkerId(Integer markerId) {
+        return userDao.findByMarkerId(markerId);
     }
 }

+ 2 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/admin/dto/MarkerInfoDTO.java

@@ -29,8 +29,8 @@ public class MarkerInfoDTO {
         setSubjectCode(subject.getCode());
         setSubjectName(subject.getName());
         setGroupName(group.getNumber() + "_" + group.getTitle());
-        setLoginName(marker.getLoginName());
-        setName(marker.getName());
+        setLoginName(marker.getUser().getLoginName());
+        setName(marker.getUser().getName());
         setMarkedCount(marker.getMarkedCount());
     }
 

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

@@ -87,6 +87,9 @@ public class DataSyncController extends BaseExamController {
     @Value("${qmth.examcloud.subject.uri}")
     private String subjectUri;
 
+    @Value("${qmth.examcloud.subject.paper.uri}")
+    private String subjectPaperUri;
+
     @Value("${qmth.examcloud.student.uri}")
     private String studentUri;
 
@@ -113,6 +116,7 @@ public class DataSyncController extends BaseExamController {
             dataSync.setRootOrgId(rootOrgId);
             dataSync.setStudentUrl(host + ":" + port + studentUri);
             dataSync.setSubjectUrl(host + ":" + port + subjectUri);
+            dataSync.setSubjectPaperUrl(host + ":" + port + subjectPaperUri);
             dataSync.setAppId(appId);
             dataSync.setSecretKey(secretKey);
         }

+ 7 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/InspectedController.java

@@ -42,6 +42,8 @@ import cn.com.qmth.stmms.biz.mark.query.MarkLibrarySearchQuery;
 import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
 import cn.com.qmth.stmms.biz.mark.service.MarkSpecialTagService;
 import cn.com.qmth.stmms.biz.mark.service.MarkTrackService;
+import cn.com.qmth.stmms.biz.user.model.User;
+import cn.com.qmth.stmms.biz.user.service.UserService;
 import cn.com.qmth.stmms.biz.utils.ScoreItem;
 import cn.com.qmth.stmms.common.annotation.Logging;
 import cn.com.qmth.stmms.common.annotation.RoleRequire;
@@ -83,6 +85,9 @@ public class InspectedController extends BaseExamController {
     @Autowired
     private MarkGroupService groupService;
 
+    @Autowired
+    private UserService userService;
+
     // 并发处理互斥锁
     private Map<Integer, Integer> currentTaskMap = new HashMap<Integer, Integer>();
 
@@ -149,7 +154,8 @@ public class InspectedController extends BaseExamController {
             result.accumulate("subjectCode", library.getSubjectCode());
             result.accumulate("subjectName", student.getSubjectName());
             Marker marker = markerService.findById(library.getMarkerId());
-            result.accumulate("markerName", marker.getLoginName());
+            User user = userService.findById(marker.getUserId());
+            result.accumulate("markerName", user.getLoginName());
             result.accumulate("markerScore", library.getMarkerScore());
 
             JSONArray array = new JSONArray();

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

@@ -27,6 +27,7 @@ import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
 import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
 import cn.com.qmth.stmms.biz.exam.service.MarkerService;
 import cn.com.qmth.stmms.biz.exam.service.query.ExamSubjectSearchQuery;
+import cn.com.qmth.stmms.biz.user.service.UserService;
 import cn.com.qmth.stmms.common.annotation.Logging;
 import cn.com.qmth.stmms.common.domain.WebUser;
 import cn.com.qmth.stmms.common.enums.LogType;
@@ -51,6 +52,9 @@ public class MarkController extends BaseExamController {
     @Autowired
     private ExamQuestionService questionService;
 
+    @Autowired
+    private UserService userService;
+
     /**
      * 评卷进度
      * 
@@ -131,6 +135,7 @@ public class MarkController extends BaseExamController {
             MarkGroup group = groupService.findOne(examId, marker.getSubjectCode(), marker.getGroupNumber());
             group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
                     group.getSubjectCode(), false, group.getNumber()));
+            marker.setUser(userService.findById(marker.getUserId()));
             MarkerInfoDTO dto = new MarkerInfoDTO(marker, subjectService.find(marker.getExamId(),
                     marker.getSubjectCode()), group);
             result.add(dto);

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

@@ -42,6 +42,8 @@ import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
 import cn.com.qmth.stmms.biz.mark.service.TaskService;
 import cn.com.qmth.stmms.biz.mark.service.TrialService;
 import cn.com.qmth.stmms.biz.mark.thread.MarkQualityThread;
+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.annotation.RoleRequire;
 import cn.com.qmth.stmms.common.domain.WebUser;
@@ -93,6 +95,9 @@ public class MarkQualityController extends BaseExamController {
     @Autowired
     private ExamService examService;
 
+    @Autowired
+    private UserService userService;
+
     @Value("${slice.image.server}")
     private String sliceServer;
 
@@ -179,10 +184,11 @@ public class MarkQualityController extends BaseExamController {
                     Long count = (Long) array[1];
                     scoreCount.put(score, count);
                 }
+                User user = userService.findById(marker.getUserId());
                 MarkerVO vo = new MarkerVO();
                 vo.setId(marker.getId());
-                vo.setLoginName(marker.getLoginName());
-                vo.setName(marker.getName());
+                vo.setLoginName(user.getLoginName());
+                vo.setName(user.getName());
                 vo.setScoreCount(scoreCount);
                 list.add(vo);
             }
@@ -223,10 +229,11 @@ public class MarkQualityController extends BaseExamController {
                 }
                 scorePercent.put(score, percent);
             }
+            User user = userService.findById(marker.getUserId());
             MarkerVO vo = new MarkerVO();
             vo.setId(marker.getId());
-            vo.setLoginName(marker.getLoginName());
-            vo.setName(marker.getName());
+            vo.setLoginName(user.getLoginName());
+            vo.setName(user.getName());
             vo.setScorePercent(scorePercent);
             list.add(vo);
         }

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

@@ -1,24 +1,15 @@
 package cn.com.qmth.stmms.admin.exam;
 
 import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
-import java.util.Random;
 import java.util.Set;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import cn.com.qmth.stmms.biz.exam.model.*;
-import cn.com.qmth.stmms.biz.exam.service.*;
-import cn.com.qmth.stmms.biz.user.model.OpenAccount;
-import cn.com.qmth.stmms.biz.user.service.UserService;
 import net.sf.json.JSONArray;
 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;
@@ -34,18 +25,29 @@ import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
+import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
+import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
+import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.query.MarkerSearchQuery;
+import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
+import cn.com.qmth.stmms.biz.exam.service.ExamService;
+import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
+import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
+import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
+import cn.com.qmth.stmms.biz.exam.service.MarkerClassService;
+import cn.com.qmth.stmms.biz.exam.service.MarkerService;
 import cn.com.qmth.stmms.biz.lock.LockService;
 import cn.com.qmth.stmms.biz.mark.service.MarkService;
+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.annotation.RoleRequire;
 import cn.com.qmth.stmms.common.domain.WebUser;
 import cn.com.qmth.stmms.common.enums.LockType;
 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.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;
@@ -108,9 +110,6 @@ public class MarkerController extends BaseExamController {
             marker.setGroup(group);
             marker.setMarkedCount(markService.markedCount(marker));
             marker.setCurrentCount(markService.applyCount(marker));
-            if (marker.getOpenAccountId() != null) {
-                marker.setOpenAccount(userService.findOpenAccount(marker.getOpenAccountId()));
-            }
         }
         model.addAttribute("query", query);
         model.addAttribute("subjectList", getExamSubject(examId, wu));
@@ -128,8 +127,8 @@ public class MarkerController extends BaseExamController {
         for (Marker marker : list) {
             JSONObject obj = new JSONObject();
             obj.accumulate("id", marker.getId());
-            obj.accumulate("loginName", marker.getLoginName());
-            obj.accumulate("name", marker.getName());
+            // obj.accumulate("loginName", marker.getLoginName());
+            // obj.accumulate("name", marker.getName());
             array.add(obj);
         }
         return array;
@@ -187,7 +186,7 @@ public class MarkerController extends BaseExamController {
         ExamSubject subject = subjectService.find(examId, subjectCode);
         ModelAndView view = new ModelAndView("redirect:/admin/exam/marker");
         if (subject != null && count > 0) {
-            markerService.batchCreate(subject, groupNumber, count, password);
+            // markerService.batchCreate(subject, groupNumber, count, password);
         }
         view.addObject("subjectCode", subjectCode);
         if (groupNumber > 0) {
@@ -315,10 +314,11 @@ public class MarkerController extends BaseExamController {
     @ResponseBody
     public JSONObject reSetPassword(@RequestParam Integer id, @RequestParam String password) {
         Marker marker = markerService.findById(id);
+        User user = userService.findById(marker.getUserId());
         JSONObject obj = new JSONObject();
-        if (marker != null) {
-            marker.setPassword(password);
-            marker = markerService.save(marker);
+        if (user != null) {
+            user.setPassword(Md5EncryptUtils.md5(password));
+            user = userService.save(user);
             obj.accumulate("success", true);
         } else {
             obj.accumulate("success", false);
@@ -358,194 +358,105 @@ public class MarkerController extends BaseExamController {
         return "redirect:" + "/admin/exam/marker";
     }
 
-    @RequestMapping(value = "/updateLoginNameTemplate")
-    public String updateLoginNameTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
-        try {
-            String fileName = "评卷员账号修改导入模板.xlsx";
-            List<MarkerDTO> list = Lists.newArrayList();
-            list.add(new MarkerDTO());
-            new ExportExcel("评卷员账号修改数据", MarkerDTO.class, 2).setDataList(list).write(response, fileName).dispose();
-            return null;
-        } catch (Exception e) {
-            addMessage(redirectAttributes, "导入模板下载失败!失败信息:" + e.getMessage());
-        }
-        return "redirect:" + "/admin/exam/marker";
-    }
-
     @Logging(menu = "评卷员导入", type = LogType.IMPORT_FILE)
     @RequestMapping(value = "/import", method = RequestMethod.POST)
     public String importFile(HttpServletRequest request, MultipartFile file, RedirectAttributes redirectAttributes,
             @RequestParam String subjectCode) {
-        int examId = getSessionExamId(request);
-        try {
-            int successNum = 0;
-            int failureNum = 0;
-            StringBuilder failureMsg = new StringBuilder();
-            ImportExcel ei = new ImportExcel(file, 1, 0);
-            List<Marker> list = ei.getDataList(Marker.class);
-            List<Marker> saveList = new LinkedList<Marker>();
-            Map<String, Marker> saveMap = new HashMap<String, Marker>();
-            Map<String, ExamSubject> current = null;
-            current = new HashMap<String, ExamSubject>();
-            List<ExamSubject> list2 = subjectService.list(examId);
-            for (ExamSubject s : list2) {
-                current.put(s.getCode(), s);
-            }
-            for (Marker marker : list) {
-                String password = "";
-                if (StringUtils.isBlank(marker.getSubjectCode()) || StringUtils.isBlank(marker.getLoginName())) {
-                    continue;
-                }
-                marker.setExamId(examId);
-                marker.setName(marker.getLoginName());
-                marker.setEnable(true);
-                marker.setClassCount(0);
-                if (StringUtils.isBlank(marker.getPassword())) {
-                    Random random = new Random();
-                    for (int i = 0; i < 6; i++) {
-                        password += random.nextInt(10);
-                    }
-                    marker.setPassword(password);
-                }
-                MarkerExcelError markerExcelError = checkLongNameAndPassword(marker, current, saveMap);
-                if (markerExcelError.equals(MarkerExcelError.MARKER)) {
-                    saveList.add(marker);
-                    saveMap.put(marker.getLoginName(), marker);
-                } else {
-                    failureMsg.append("<br/>评卷员 " + marker.getLoginName() + "," + markerExcelError.getName());
-                    failureNum++;
-                }
-            }
-            successNum = markerService.batchSave(saveList);
-            if (failureNum > 0) {
-                failureMsg.insert(0, ",失败 " + failureNum + " 条记录!");
-            }
-            String message = "已成功导入 " + successNum + " 条评卷员 ";
-            addMessage(redirectAttributes, message + failureMsg);
-            RequestUtils.setLog(request, message);
-        } catch (Exception e) {
-            log.error("Batch import marker error!", e);
-            addMessage(redirectAttributes, "导入评卷员失败!失败信息:" + e.getMessage());
-        }
+        // int examId = getSessionExamId(request);
+        // try {
+        // int successNum = 0;
+        // int failureNum = 0;
+        // StringBuilder failureMsg = new StringBuilder();
+        // ImportExcel ei = new ImportExcel(file, 1, 0);
+        // List<Marker> list = ei.getDataList(Marker.class);
+        // List<Marker> saveList = new LinkedList<Marker>();
+        // Map<String, Marker> saveMap = new HashMap<String, Marker>();
+        // Map<String, ExamSubject> current = null;
+        // current = new HashMap<String, ExamSubject>();
+        // List<ExamSubject> list2 = subjectService.list(examId);
+        // for (ExamSubject s : list2) {
+        // current.put(s.getCode(), s);
+        // }
+        // for (Marker marker : list) {
+        // String password = "";
+        // if (StringUtils.isBlank(marker.getSubjectCode()) ||
+        // StringUtils.isBlank(marker.getLoginName())) {
+        // continue;
+        // }
+        // marker.setExamId(examId);
+        // marker.setName(marker.getLoginName());
+        // marker.setEnable(true);
+        // marker.setClassCount(0);
+        // if (StringUtils.isBlank(marker.getPassword())) {
+        // Random random = new Random();
+        // for (int i = 0; i < 6; i++) {
+        // password += random.nextInt(10);
+        // }
+        // marker.setPassword(password);
+        // }
+        // MarkerExcelError markerExcelError = checkLongNameAndPassword(marker,
+        // current, saveMap);
+        // if (markerExcelError.equals(MarkerExcelError.MARKER)) {
+        // saveList.add(marker);
+        // saveMap.put(marker.getLoginName(), marker);
+        // } else {
+        // failureMsg.append("<br/>评卷员 " + marker.getLoginName() + "," +
+        // markerExcelError.getName());
+        // failureNum++;
+        // }
+        // }
+        // successNum = markerService.batchSave(saveList);
+        // if (failureNum > 0) {
+        // failureMsg.insert(0, ",失败 " + failureNum + " 条记录!");
+        // }
+        // String message = "已成功导入 " + successNum + " 条评卷员 ";
+        // addMessage(redirectAttributes, message + failureMsg);
+        // RequestUtils.setLog(request, message);
+        // } catch (Exception e) {
+        // log.error("Batch import marker error!", e);
+        // addMessage(redirectAttributes, "导入评卷员失败!失败信息:" + e.getMessage());
+        // }
         return "redirect:" + "/admin/exam/marker?subjectCode=" + subjectCode;
     }
 
-    @RequestMapping(value = "/importUpdate", method = RequestMethod.POST)
-    public String importUpdateFile(HttpServletRequest request, MultipartFile file, RedirectAttributes redirectAttributes) {
-        try {
-            int successNum = 0;
-            int failureNum = 0;
-            StringBuilder failureMsg = new StringBuilder();
-            ImportExcel ei = new ImportExcel(file, 1, 0);
-            List<MarkerDTO> list = ei.getDataList(MarkerDTO.class);
-            List<Marker> saveList = new LinkedList<Marker>();
-            Map<String, Marker> current = null;
-            List<Marker> list2 = markerService.findMode("common");
-            if (list2.size() < 10000) {
-                current = new HashMap<String, Marker>();
-                for (Marker s : list2) {
-                    current.put(s.getLoginName(), s);
-                }
-            }
-            for (MarkerDTO markerDTO : list) {
-                if (StringUtils.isBlank(markerDTO.getSubjectCode()) || StringUtils.isBlank(markerDTO.getLoginName())
-                        || StringUtils.isBlank(markerDTO.getNewLoginName())
-                        || StringUtils.isBlank(markerDTO.getPassword())) {
-                    continue;
-                }
-                MarkerExcelError markerExcelError = checkExcelData(markerDTO, current);
-                if (markerExcelError.equals(MarkerExcelError.MARKER)) {
-                    Marker marker = null;
-                    if (current != null) {
-                        marker = current.get(markerDTO.getLoginName());
-                    } else {
-                        marker = markerService.findByLoginName(markerDTO.getLoginName());
-                    }
-                    marker.setLoginName(markerDTO.getNewLoginName());
-                    marker.setPassword(markerDTO.getPassword());
-                    saveList.add(marker);
-                } else {
-                    failureMsg.append("<br/>科目代码(" + markerDTO.getSubjectCode() + ")原评卷员(" + markerDTO.getLoginName()
-                            + ")更换新评卷员为(" + markerDTO.getNewLoginName() + ")失败!");
-                    failureMsg.append("---->失败原因:(" + markerExcelError.getName() + ")");
-                    failureNum++;
-                }
-            }
-            successNum = markerService.batchSave(saveList);
-            if (failureNum > 0) {
-                failureMsg.insert(0, ",失败 " + failureNum + " 条记录!");
-            }
-            addMessage(redirectAttributes, "已成功导入 " + successNum + " 条" + failureMsg);
-        } catch (Exception e) {
-            log.error("Batch import marker error!", e);
-            addMessage(redirectAttributes, "导入修改评卷员账号失败!失败信息:" + e.getMessage());
-        }
-        return "redirect:" + "/admin/exam/marker";
-    }
-
-    private MarkerExcelError checkLongNameAndPassword(Marker marker, Map<String, ExamSubject> current,
-            Map<String, Marker> saveMap) {
-        Marker previous = null;
-
-        if (current != null && current.get(marker.getSubjectCode()) == null) {
-            return MarkerExcelError.MARKERNOTCODE;
-        }
-        MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(),
-                Integer.valueOf(marker.getGroupName()));
-        if (group == null) {
-            return MarkerExcelError.MARKERNOTGROUP;
-        } else {
-            marker.setGroupNumber(Integer.valueOf(marker.getGroupName()));
-        }
-        if (saveMap != null) {
-            previous = saveMap.get(marker.getLoginName());
-        }
-
-        if (previous != null) {
-            return MarkerExcelError.MARKERED;
-        }
-
-        previous = markerService.findByLoginName(marker.getLoginName());
-
-        if (marker.getPassword().length() > 0 && marker.getPassword().length() < 4) {
-            return MarkerExcelError.MARKERPWERROR;
-        }
-
-        if (previous == null) {
-            return MarkerExcelError.MARKER;
-        }
-        return MarkerExcelError.MARKERED;
-    }
+    // private MarkerExcelError checkLongNameAndPassword(Marker marker,
+    // Map<String, ExamSubject> current,
+    // Map<String, Marker> saveMap) {
+    // Marker previous = null;
+    //
+    // if (current != null && current.get(marker.getSubjectCode()) == null) {
+    // return MarkerExcelError.MARKERNOTCODE;
+    // }
+    // MarkGroup group = groupService.findOne(marker.getExamId(),
+    // marker.getSubjectCode(),
+    // Integer.valueOf(marker.getGroupName()));
+    // if (group == null) {
+    // return MarkerExcelError.MARKERNOTGROUP;
+    // } else {
+    // marker.setGroupNumber(Integer.valueOf(marker.getGroupName()));
+    // }
+    // if (saveMap != null) {
+    // previous = saveMap.get(marker.getLoginName());
+    // }
+    //
+    // if (previous != null) {
+    // return MarkerExcelError.MARKERED;
+    // }
+    //
+    // previous = markerService.findByLoginName(marker.getLoginName());
+    //
+    // if (marker.getPassword().length() > 0 && marker.getPassword().length() <
+    // 4) {
+    // return MarkerExcelError.MARKERPWERROR;
+    // }
+    //
+    // if (previous == null) {
+    // return MarkerExcelError.MARKER;
+    // }
+    // return MarkerExcelError.MARKERED;
+    // }
 
     // 校验excel中数据
-    private MarkerExcelError checkExcelData(MarkerDTO markerDTO, Map<String, Marker> current) {
-        if (markerDTO != null) {
-            Marker marker = null;
-            if (current == null) {
-                marker = markerService.findByLoginName(markerDTO.getLoginName());
-            } else {
-                marker = current.get(markerDTO.getLoginName());
-            }
-            if (markerDTO.getPassword().length() < 4) {
-                return MarkerExcelError.MARKERPWERROR;
-            }
-            if (marker != null) {
-                if (marker.getSubjectCode().equals(markerDTO.getSubjectCode())) {
-                    if (markerService.countByLoginName(markerDTO.getNewLoginName()) > 0) {
-                        return MarkerExcelError.MARKERNEWMISS;
-                    } else {
-                        return MarkerExcelError.MARKER;
-                    }
-                } else {
-                    return MarkerExcelError.MARKERCODEMISS;
-                }
-            } else {
-                return MarkerExcelError.MARKERMISS;
-            }
-        } else {
-            return MarkerExcelError.MARKERNOTINFO;
-        }
-    }
 
     @RequestMapping(value = "/class/{markerId}", method = RequestMethod.GET)
     public String classAdd(@PathVariable Integer markerId, Model model, RedirectAttributes redirectAttributes) {
@@ -570,7 +481,7 @@ public class MarkerController extends BaseExamController {
         Marker marker = markerService.findById(markerId);
         if (marker != null) {
             classService.save(marker, classes);
-            addMessage(redirectAttributes, "保存'" + marker.getLoginName() + "'成功");
+            addMessage(redirectAttributes, "保存成功");
             return "redirect:" + "/admin/exam/marker?subjectCode=" + marker.getSubjectCode() + "&groupNumber="
                     + marker.getGroupNumber();
         }
@@ -578,46 +489,52 @@ public class MarkerController extends BaseExamController {
         return "redirect:/admin/exam/marker";
     }
 
-    @RequestMapping(value = "/account/{markerId}")
-    public String editAccount(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
-            @PathVariable Integer markerId) {
-        Exam exam = examService.findById(getSessionExamId(request));
-        Marker marker = markerService.findById(markerId);
-        if (exam != null && marker != null && exam.getId().equals(marker.getExamId())) {
-            model.addAttribute("marker", marker);
-            model.addAttribute("openAccountList", userService.listUnbindOpenAccount(exam.getSchoolId(),
-                    marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber()));
-            return "modules/exam/markerAccount";
-        }
-        addMessage(redirectAttributes, "评卷员不存在");
-        return "redirect:/admin/exam/marker";
-    }
-
-    @RequestMapping(value = "/account/bind", method = RequestMethod.POST)
-    @ResponseBody
-    @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
-    public boolean bindAccount(@RequestParam Integer markerId, @RequestParam Integer accountId) {
-        Marker marker = markerService.findById(markerId);
-        if (marker == null) {
-            return false;
-        }
-        OpenAccount oa = userService.findOpenAccount(accountId);
-        if (oa == null || !oa.isEnable()) {
-            return false;
-        }
-        if (markerService.countByExamAndSubjectAndGroupAndOpenAccount(marker.getExamId(), marker.getSubjectCode(),
-                marker.getGroupNumber(), accountId) == 0) {
-            markerService.updateOpenAccountById(markerId, accountId);
-            return true;
-        }
-        return false;
-    }
-
-    @RequestMapping(value = "/account/unbind", method = RequestMethod.POST)
-    @ResponseBody
-    @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
-    public boolean unbindOpenAccount(@RequestParam Integer markerId) {
-        markerService.updateOpenAccountById(markerId, null);
-        return true;
-    }
+    // @RequestMapping(value = "/account/{markerId}")
+    // public String editAccount(HttpServletRequest request, Model model,
+    // RedirectAttributes redirectAttributes,
+    // @PathVariable Integer markerId) {
+    // Exam exam = examService.findById(getSessionExamId(request));
+    // Marker marker = markerService.findById(markerId);
+    // if (exam != null && marker != null &&
+    // exam.getId().equals(marker.getExamId())) {
+    // model.addAttribute("marker", marker);
+    // model.addAttribute("openAccountList",
+    // userService.listUnbindOpenAccount(exam.getSchoolId(),
+    // marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber()));
+    // return "modules/exam/markerAccount";
+    // }
+    // addMessage(redirectAttributes, "评卷员不存在");
+    // return "redirect:/admin/exam/marker";
+    // }
+
+    // @RequestMapping(value = "/account/bind", method = RequestMethod.POST)
+    // @ResponseBody
+    // @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
+    // public boolean bindAccount(@RequestParam Integer markerId, @RequestParam
+    // Integer accountId) {
+    // Marker marker = markerService.findById(markerId);
+    // if (marker == null) {
+    // return false;
+    // }
+    // OpenAccount oa = userService.findOpenAccount(accountId);
+    // if (oa == null || !oa.isEnable()) {
+    // return false;
+    // }
+    // if
+    // (markerService.countByExamAndSubjectAndGroupAndOpenAccount(marker.getExamId(),
+    // marker.getSubjectCode(),
+    // marker.getGroupNumber(), accountId) == 0) {
+    // markerService.updateOpenAccountById(markerId, accountId);
+    // return true;
+    // }
+    // return false;
+    // }
+
+    // @RequestMapping(value = "/account/unbind", method = RequestMethod.POST)
+    // @ResponseBody
+    // @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
+    // public boolean unbindOpenAccount(@RequestParam Integer markerId) {
+    // markerService.updateOpenAccountById(markerId, null);
+    // return true;
+    // }
 }

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

@@ -6,6 +6,9 @@ import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
 
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -34,6 +37,8 @@ import cn.com.qmth.stmms.biz.mark.model.TrialLibrary;
 import cn.com.qmth.stmms.biz.mark.query.TrialLibrarySearchQuery;
 import cn.com.qmth.stmms.biz.mark.service.MarkService;
 import cn.com.qmth.stmms.biz.mark.service.TrialService;
+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.annotation.RoleRequire;
 import cn.com.qmth.stmms.common.domain.WebUser;
@@ -46,8 +51,6 @@ import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.utils.DateUtils;
 import cn.com.qmth.stmms.common.utils.PictureUrlBuilder;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
-import net.sf.json.JSONArray;
-import net.sf.json.JSONObject;
 
 @Controller("trialController")
 @RequestMapping("/admin/exam/trial")
@@ -79,6 +82,9 @@ public class TrialController extends BaseExamController {
     @Autowired
     private ExamService examService;
 
+    @Autowired
+    private UserService userService;
+
     @Value("${slice.image.server}")
     private String sliceServer;
 
@@ -209,9 +215,10 @@ public class TrialController extends BaseExamController {
                 DecimalFormat format = new DecimalFormat("####.###");
                 for (TrialHistory history : list) {
                     Marker marker = markerService.findById(history.getMarkerId());
+                    User user = userService.findById(marker.getUserId());
                     JSONObject item = new JSONObject();
-                    item.accumulate("loginName", marker != null ? marker.getLoginName() : "");
-                    item.accumulate("name", marker != null ? marker.getName() : "");
+                    item.accumulate("loginName", marker != null ? user.getLoginName() : "");
+                    item.accumulate("name", marker != null ? user.getName() : "");
                     item.accumulate("score", format.format(history.getMarkerScore()));
                     item.accumulate("time", DateUtils.formatDateTime(history.getMarkerTime()));
                     array.add(item);

+ 9 - 7
stmms-web/src/main/java/cn/com/qmth/stmms/admin/interceptor/AdminInterceptor.java

@@ -30,9 +30,11 @@ public class AdminInterceptor extends SessionInterceptor {
         return validateAdminUser(buildWebUser(request), request, response);
     }
 
-    private boolean validateAdminUser(WebUser wu, HttpServletRequest request, HttpServletResponse response) throws Exception {
-        if (wu != null && (wu.getRole() == Role.SYS_ADMIN || wu.getRole() == Role.SCHOOL_ADMIN || wu.getRole() == Role.SUBJECT_HEADER
-                || wu.getRole() == Role.SCHOOL_VIEWER)) {
+    private boolean validateAdminUser(WebUser wu, HttpServletRequest request, HttpServletResponse response)
+            throws Exception {
+        if (wu != null
+                && (wu.getRole() == Role.SYS_ADMIN || wu.getRole() == Role.SCHOOL_ADMIN
+                        || wu.getRole() == Role.SUBJECT_HEADER || wu.getRole() == Role.SCHOOL_VIEWER)) {
             return true;
         }
         return sessionExpire(request, response, "/login");
@@ -44,10 +46,10 @@ public class AdminInterceptor extends SessionInterceptor {
         Role role = session.getWebUserRole();
         if (userId != null && role != null) {
             User user = userService.findById(userId);
-            if (user != null && user.getRole() == role && user.getAccessTokenRefreshTime() != null && StringUtils
-                    .equals(session.getWebUserToken(), user.getAccessToken()) && !AccessControlUtils
-                    .expired(user.getAccessTokenRefreshTime())) {
-                WebUser wu = new WebUser(user);
+            if (user != null && user.getRole() == role && user.getAccessTokenRefreshTime() != null
+                    && StringUtils.equals(session.getWebUserToken(), user.getAccessToken())
+                    && !AccessControlUtils.expired(user.getAccessTokenRefreshTime())) {
+                WebUser wu = new WebUser(user, null, null);
                 RequestUtils.setWebUser(request, wu);
                 return wu;
             }

+ 33 - 10
stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/DataSyncThread.java

@@ -2,8 +2,11 @@ package cn.com.qmth.stmms.admin.thread;
 
 import java.io.BufferedWriter;
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
+import java.io.IOException;
 import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -54,12 +57,16 @@ public class DataSyncThread implements Runnable {
 
     private HttpUtil studentHttp;
 
+    private HttpUtil subjectPaperHttp;
+
     public static final String PAPER_STRUCT = "paperStructList";
 
     public static final String SUBJECT_CODE = "subjectCode";
 
     public static final String SUBJECT_NAME = "subjectName";
 
+    public static final String SUBJECTIVES = "subjectives";
+
     public static final String DATA_LIST = "dataList";
 
     public static final String START_ID = "startId";
@@ -86,6 +93,8 @@ public class DataSyncThread implements Runnable {
                 dataSync.getRootOrgId());
         this.studentHttp = new HttpUtil(dataSync.getStudentUrl(), dataSync.getSecretKey(), dataSync.getAppId(),
                 dataSync.getRootOrgId());
+        this.subjectPaperHttp = new HttpUtil(dataSync.getSubjectPaperUrl(), dataSync.getSecretKey(),
+                dataSync.getAppId(), dataSync.getRootOrgId());
     }
 
     @Override
@@ -110,6 +119,15 @@ public class DataSyncThread implements Runnable {
                 JSONObject subject = subjectArray.getJSONObject(i);
                 String subjectCode = subject.getString(SUBJECT_CODE);
                 String subjectName = subject.getString(SUBJECT_NAME);
+                // 获取试卷内容
+                datas.put(SUBJECT_CODE, subjectCode);
+                String paperResult = subjectPaperHttp.httpAction(null, datas.toString());
+                JSONObject paperJson = JSONObject.fromObject(paperResult);
+                String paper = paperJson.getString("subjectivePaperList");
+                File paperFile = new File(new File(baseDir, config.getMediaBucket()), PictureUrlBuilder.getAnswerJson(
+                        exam.getId(), subjectCode, null, subjectCode));
+                writeFile(paper, paperFile);
+                // 获取考生
                 Long startId = 0L;
                 ExamSubject examSubject = subjectService.find(exam.getId(), subjectCode);
                 if (examSubject != null && !subjectCode.equals(sync.getSubjectCode())) {
@@ -173,19 +191,11 @@ public class DataSyncThread implements Runnable {
                         examStudent.setUploadTime(now);
                         list.add(examStudent);
 
-                        String answerJson = student.getString("subjectives");
+                        String answerJson = student.getString(SUBJECTIVES);
                         File file = new File(new File(baseDir, config.getMediaBucket()),
                                 PictureUrlBuilder.getAnswerJson(exam.getId(), subjectCode, null,
                                         examStudent.getExamNumber()));
-                        if (!file.exists()) {
-                            file.getParentFile().mkdirs();
-                            file.createNewFile();
-                        }
-                        FileOutputStream fos = new FileOutputStream(file);
-                        fos.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF });
-                        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos, "UTF-8"));
-                        bw.write(answerJson);
-                        bw.close();
+                        writeFile(answerJson, file);
                     }
                     int count = studentService.batchSave(list);
                     if (count > 0) {
@@ -207,4 +217,17 @@ public class DataSyncThread implements Runnable {
             log.info("finish data sync for examId=" + dataSync.getExamId());
         }
     }
+
+    private void writeFile(String answerJson, File file) throws IOException, FileNotFoundException,
+            UnsupportedEncodingException {
+        if (!file.exists()) {
+            file.getParentFile().mkdirs();
+            file.createNewFile();
+        }
+        FileOutputStream fos = new FileOutputStream(file);
+        fos.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF });
+        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos, "UTF-8"));
+        bw.write(answerJson);
+        bw.close();
+    }
 }

+ 20 - 14
stmms-web/src/main/java/cn/com/qmth/stmms/admin/utils/HttpUtil.java

@@ -16,7 +16,7 @@ import org.slf4j.LoggerFactory;
 
 public class HttpUtil {
 
-    private static Logger log = LoggerFactory.getLogger(HttpUtil.class);
+    // private static Logger log = LoggerFactory.getLogger(HttpUtil.class);
 
     /** 默认的编码格式 */
     public static final String DEFAULT_CHARSET = "UTF-8";
@@ -110,7 +110,7 @@ public class HttpUtil {
 
             result = getResult(conn);
         } catch (IOException e) {
-            log.error("Http connection error!", e);
+            // log.error("Http connection error!", e);
             e.printStackTrace();
             // 操作失败
             return null;
@@ -125,7 +125,7 @@ public class HttpUtil {
                     is = null;
                 }
             } catch (IOException e) {
-                log.error("Http connection error!", e);
+                // log.error("Http connection error!", e);
             }
 
             if (conn != null) {
@@ -188,7 +188,8 @@ public class HttpUtil {
 
     public static void main(String[] args) {
         JSONObject json = new JSONObject();
-        json.accumulate("examId", 672);
+        json.accumulate("examId", 2);
+        json.accumulate("subjectCode", "ldyCos001");
 
         // HttpUtil subjectHttp = new HttpUtil(
         // "http://iepcc-ps.ecs.qmth.com.cn:80/api/exchange/outer/question/getSubjectivePaperStruct",
@@ -196,15 +197,20 @@ public class HttpUtil {
         // String subjectJson = subjectHttp.httpAction(null, json.toString());
         // System.out.println(subjectJson);
 
-        long start = System.currentTimeMillis();
-        HttpUtil studentHttp = new HttpUtil(
-                "http://iepcc-ps.ecs.qmth.com.cn:80/api/exchange/outer/question/getSubjectiveQuestion",
-                "Fu234234CK!fsd9f0", "EPCC", "16923");
-        json.accumulate("subjectCode", "B149");
-        json.accumulate("startId", 0);
-        json.accumulate("size", 2);
-        String studentJson = studentHttp.httpAction(null, json.toString());
-        long end = System.currentTimeMillis();
-        System.out.println(end - start + ":" + studentJson);
+        HttpUtil paperHttp = new HttpUtil(
+                "http://ecs-dev.qmth.com.cn:80/api/exchange/outer/question/getSubjectivePaper", "123456", "11", "0");
+        String paper = paperHttp.httpAction(null, json.toString());
+        System.out.println(paper);
+
+        // long start = System.currentTimeMillis();
+        // HttpUtil studentHttp = new HttpUtil(
+        // "http://iepcc-ps.ecs.qmth.com.cn:80/api/exchange/outer/question/getSubjectiveQuestion",
+        // "Fu234234CK!fsd9f0", "EPCC", "16923");
+        // json.accumulate("subjectCode", "B149");
+        // json.accumulate("startId", 0);
+        // json.accumulate("size", 2);
+        // String studentJson = studentHttp.httpAction(null, json.toString());
+        // long end = System.currentTimeMillis();
+        // System.out.println(end - start + ":" + studentJson);
     }
 }

+ 9 - 14
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ExamStudentController.java

@@ -6,12 +6,6 @@ import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
 
-import cn.com.qmth.stmms.api.exception.ApiException;
-import cn.com.qmth.stmms.common.annotation.Logging;
-import cn.com.qmth.stmms.common.annotation.RoleRequire;
-import cn.com.qmth.stmms.common.domain.ApiUser;
-import cn.com.qmth.stmms.common.enums.LogType;
-import cn.com.qmth.stmms.common.enums.Role;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
 
@@ -27,6 +21,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 
+import cn.com.qmth.stmms.api.exception.ApiException;
 import cn.com.qmth.stmms.api.utils.AESUtil;
 import cn.com.qmth.stmms.api.utils.MenualAbsentDTO;
 import cn.com.qmth.stmms.biz.campus.model.Campus;
@@ -34,17 +29,20 @@ import cn.com.qmth.stmms.biz.campus.service.CampusService;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
-import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
 import cn.com.qmth.stmms.biz.exam.service.ExamService;
 import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
-import cn.com.qmth.stmms.biz.exam.service.MarkerService;
 import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
 import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
 import cn.com.qmth.stmms.biz.user.model.User;
 import cn.com.qmth.stmms.biz.user.service.UserService;
 import cn.com.qmth.stmms.biz.utils.ScoreItem;
+import cn.com.qmth.stmms.common.annotation.Logging;
+import cn.com.qmth.stmms.common.annotation.RoleRequire;
+import cn.com.qmth.stmms.common.domain.ApiUser;
+import cn.com.qmth.stmms.common.enums.LogType;
+import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
 
 import com.google.common.base.Strings;
@@ -70,9 +68,6 @@ public class ExamStudentController extends BaseApiController {
     @Autowired
     private MarkLibraryService libraryService;
 
-    @Autowired
-    private MarkerService markerService;
-
     @Autowired
     private UserService userService;
 
@@ -341,9 +336,9 @@ public class ExamStudentController extends BaseApiController {
             if (library.getMarkerId() == null) {
                 continue;
             }
-            Marker marker = markerService.findById(library.getMarkerId());
-            if (marker != null) {
-                markerNames.add(marker.getName());
+            User user = userService.findByMarkerId(library.getMarkerId());
+            if (user != null) {
+                markerNames.add(user.getName());
             }
         }
         return StringUtils.join(markerNames, ",");

+ 53 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/card/CardController.java

@@ -0,0 +1,53 @@
+package cn.com.qmth.stmms.card;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+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 cn.com.qmth.stmms.biz.exam.model.ExamStudent;
+import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
+import cn.com.qmth.stmms.biz.school.model.School;
+import cn.com.qmth.stmms.biz.school.service.SchoolService;
+
+@Controller("cardApiController")
+@RequestMapping("/card")
+public class CardController {
+
+    protected static Logger log = LoggerFactory.getLogger(CardController.class);
+
+    @Autowired
+    private SchoolService schoolService;
+
+    @Autowired
+    private ExamStudentService studentService;
+
+    @RequestMapping(value = "/{schoolId}", method = RequestMethod.GET)
+    public String login(Model model, HttpServletRequest request, @PathVariable Integer schoolId) {
+        School school = schoolService.findById(schoolId);
+        if (school == null) {
+            model.addAttribute("message", "...");
+        }
+        model.addAttribute("school", school);
+        return "modules/card/login";
+    }
+
+    @RequestMapping(value = "/{schoolId}/query", method = RequestMethod.POST)
+    public String getSubject(Model model, HttpServletRequest request, @PathVariable Integer schoolId,
+            @RequestParam String studentCode, @RequestParam String name) {
+        List<ExamStudent> list = studentService.findBySchoolIdAndStudentCodeAndName(schoolId, studentCode.trim(),
+                name.trim());
+        model.addAttribute("list", list);
+        return "modules/card/list";
+    }
+
+}

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

@@ -13,8 +13,6 @@ 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.exam.model.MarkGroup;
-import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
 import cn.com.qmth.stmms.biz.exam.service.MarkerService;
 import cn.com.qmth.stmms.biz.user.model.User;
@@ -22,7 +20,6 @@ import cn.com.qmth.stmms.biz.user.service.UserService;
 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.MarkStatus;
 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;
@@ -70,96 +67,55 @@ public class LoginController {
             HttpServletResponse response) {
         StmmsSession session = RequestUtils.getSession(request);
         String loginType = session.getParameter(LOGIN_TYPE_KEY);
+        User u = userService.findByLoginName(user.getLoginName());
+        ModelAndView modelAndView = new ModelAndView("modules/sys/login");
+        modelAndView.addObject("showType", showType);
+        modelAndView.addObject("indexLogo", indexLogo);
+        if (u == null) {
+            modelAndView.addObject("message", "user.login.error.account");
+            return modelAndView;
+        }
+        if (!u.getPassword().equals(Md5EncryptUtils.md5(user.getPassword()))) {
+            modelAndView.addObject("message", "user.login.error.password");
+            return modelAndView;
+        }
+        if (u.isEnable() == false) {
+            modelAndView.addObject("message", "user.login.error.disabled");
+            return modelAndView;
+        }
         if ("admin-login".equals(showType)) {
-            User u = userService.findByLoginName(user.getLoginName());
-            if (u != null) {
-                if (u.getPassword().equals(Md5EncryptUtils.md5(user.getPassword()))) {
-                    u.setLastLoginTime(new Date());
-                    u.setLastLoginIp(request.getRemoteAddr());
-                    u.refreshAccessToken();
-                    u = userService.save(u);
-
-                    session.saveWebUser(new WebUser(u));
-                    sessionService.put(request, response, session);
-
-                    if (u.getRole() == Role.SYS_ADMIN || u.getRole() == Role.SCHOOL_ADMIN
-                            || u.getRole() == Role.SUBJECT_HEADER || u.getRole() == Role.SCHOOL_VIEWER) {
-                        ModelAndView modelAndView = new ModelAndView("redirect:admin/home");
-                        return modelAndView;
-                    } else {
-                        ModelAndView view = new ModelAndView("modules/sys/login");
-                        view.addObject("message", "user.login.error.access");
-                        view.addObject("showType", showType);
-                        view.addObject("indexLogo", indexLogo);
-                        return view;
-                    }
-                } else {
-                    ModelAndView modelAndView = new ModelAndView("modules/sys/login");
-                    modelAndView.addObject("message", "user.login.error.password");
-                    modelAndView.addObject("showType", showType);
-                    modelAndView.addObject("indexLogo", indexLogo);
-                    return modelAndView;
-                }
+            if (u.getRole() == Role.SYS_ADMIN || u.getRole() == Role.SCHOOL_ADMIN || u.getRole() == Role.SUBJECT_HEADER
+                    || u.getRole() == Role.SCHOOL_VIEWER) {
+                u.setLastLoginTime(new Date());
+                u.setLastLoginIp(request.getRemoteAddr());
+                u.refreshAccessToken();
+                u = userService.save(u);
+
+                session.saveWebUser(new WebUser(u, null, ""));
+                sessionService.put(request, response, session);
+
+                modelAndView = new ModelAndView("redirect:admin/home");
+                return modelAndView;
             } else {
-                ModelAndView modelAndView = new ModelAndView("modules/sys/login");
-                modelAndView.addObject("message", "user.login.error.account");
-                modelAndView.addObject("showType", showType);
-                modelAndView.addObject("indexLogo", indexLogo);
+                modelAndView.addObject("message", "user.login.error.access");
                 return modelAndView;
             }
         } else if ("mark-login".equals(showType) || "mark-login".equals(loginType)) {
-            Marker marker = markerService.findByLoginName(user.getLoginName());
-            if (marker != null) {
-                ModelAndView modelAndView = new ModelAndView("modules/sys/login");
-                if (!marker.getPassword().equals(user.getPassword())) {
-                    modelAndView.addObject("message", "user.login.error.password");
-                    modelAndView.addObject("showType", showType);
-                    modelAndView.addObject("indexLogo", indexLogo);
-                    return modelAndView;
-                }
-                if (marker.isEnable() == false) {
-                    modelAndView.addObject("message", "user.login.error.disabled");
-                    modelAndView.addObject("showType", showType);
-                    modelAndView.addObject("indexLogo", indexLogo);
-                    return modelAndView;
-                }
-                MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(),
-                        marker.getGroupNumber());
-                if (group == null) {
-                    modelAndView.addObject("message", "user.login.error.group");
-                    modelAndView.addObject("showType", showType);
-                    modelAndView.addObject("indexLogo", indexLogo);
-                    return modelAndView;
-                }
-                if (group.getStatus() == MarkStatus.FINISH) {
-                    modelAndView.addObject("message", "user.login.error.finish");
-                    modelAndView.addObject("showType", showType);
-                    modelAndView.addObject("indexLogo", indexLogo);
-                    return modelAndView;
-                }
-                marker.refreshAccessToken();
-                marker.setLastLoginIp(request.getRemoteAddr());
-                RequestUtils.getSession(request).saveWebUser(new WebUser(marker));
-                sessionService.put(request, response, session);
-
-                if (marker.getLastLoginTime() == null) {
-                    marker.setLastLoginTime(new Date());
-                    markerService.save(marker);
-                    return new ModelAndView("redirect:/mark/reset");
-                }
-                marker.setLastLoginTime(new Date());
-                marker = markerService.save(marker);
-                return new ModelAndView("redirect:/mark/index");
+            if (u.getLastLoginTime() == null) {
+                u.setLastLoginTime(new Date());
+                userService.save(u);
+                return new ModelAndView("redirect:/mark/reset");
             }
-
-            ModelAndView view = new ModelAndView("modules/sys/login");
-            view.addObject("message", "user.login.error.account");
-            view.addObject("showType", showType);
-            view.addObject("indexLogo", indexLogo);
-            return view;
-        } else {
-            return new ModelAndView("redirect:/login");
+            u.setLastLoginTime(new Date());
+            u.setLastLoginIp(request.getRemoteAddr());
+            u.refreshAccessToken();
+            u = userService.save(u);
+
+            session.saveWebUser(new WebUser(u, null, ""));
+            sessionService.put(request, response, session);
+            return new ModelAndView("redirect:/mark/subject-select");
         }
+        return modelAndView;
     }
 
     @RequestMapping(value = "/mark-login", method = RequestMethod.GET)

+ 0 - 63
stmms-web/src/main/java/cn/com/qmth/stmms/common/domain/OpenUser.java

@@ -1,63 +0,0 @@
-package cn.com.qmth.stmms.common.domain;
-
-import cn.com.qmth.stmms.biz.exam.model.Marker;
-import cn.com.qmth.stmms.biz.user.model.OpenAccount;
-import cn.com.qmth.stmms.biz.user.model.User;
-import cn.com.qmth.stmms.common.enums.Role;
-
-/**
- * 第三方账号访问用户抽象描述类
- *
- * @author luoshi
- */
-public class OpenUser {
-
-    private Integer id;
-
-    private String name;
-
-    private Role role;
-
-    private String returnUrl;
-
-    private String token;
-
-    private OpenAccount userData;
-
-    private OpenUser(Integer id, String name, Role role, String token, String returnUrl, OpenAccount userData) {
-        this.id = id;
-        this.name = name;
-        this.role = role;
-        this.token = token;
-        this.returnUrl = returnUrl;
-        this.userData = userData;
-    }
-
-    public OpenUser(OpenAccount account, String returnUrl) {
-        this(account.getId(), account.getName(), Role.OPEN_ACCOUNT, account.getAccessToken(), returnUrl, account);
-    }
-
-    public OpenAccount getOpenAccount() {
-        return userData;
-    }
-
-    public Integer getId() {
-        return id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public Role getRole() {
-        return role;
-    }
-
-    public String getToken() {
-        return token;
-    }
-
-    public String getReturnUrl() {
-        return returnUrl;
-    }
-}

+ 35 - 12
stmms-web/src/main/java/cn/com/qmth/stmms/common/domain/WebUser.java

@@ -1,5 +1,7 @@
 package cn.com.qmth.stmms.common.domain;
 
+import org.apache.commons.lang.StringUtils;
+
 import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.user.model.User;
 import cn.com.qmth.stmms.common.enums.Role;
@@ -23,34 +25,43 @@ public class WebUser {
 
     private String logoutUrl;
 
-    private WebUser(Integer id, String name, Role role, String token, Object userData, String logoutUrl) {
+    private Integer markerId;
+
+    private Marker marker;
+
+    private WebUser(Integer id, String name, Role role, String token, Object userData, String logoutUrl, String markerId) {
         this.id = id;
         this.name = name;
         this.role = role;
         this.token = token;
         this.userData = userData;
         this.logoutUrl = logoutUrl;
+        if (role.equals(Role.MARKER) && StringUtils.trimToNull(markerId) != null) {
+            this.markerId = Integer.valueOf(markerId);
+        }
     }
 
-    public WebUser(User user) {
-        this(user.getId(), user.getName(), user.getRole(), user.getAccessToken(), user, null);
+    public WebUser(User user, String logoutUrl, String markerId) {
+        this(user.getId(), user.getName(), user.getRole(), user.getAccessToken(), user, logoutUrl, markerId);
     }
 
-    public WebUser(Marker marker, String logoutUrl) {
-        this(marker.getId(), marker.getName(), Role.MARKER, marker.getAccessToken(), marker, logoutUrl);
-    }
+    // public WebUser(Marker marker, String logoutUrl) {
+    // this(marker.getId(), marker.getName(), Role.MARKER,
+    // marker.getAccessToken(), marker, logoutUrl);
+    // }
 
-    public WebUser(Marker marker) {
-        this(marker, null);
-    }
+    // public WebUser(Marker marker) {
+    // this(marker, null);
+    // }
 
     public User getUser() {
         return userData != null && userData instanceof User ? (User) userData : null;
     }
 
-    public Marker getMarker() {
-        return userData != null && userData instanceof Marker ? (Marker) userData : null;
-    }
+    // public Marker getMarker() {
+    // return userData != null && userData instanceof Marker ? (Marker) userData
+    // : null;
+    // }
 
     public Integer getId() {
         return id;
@@ -88,4 +99,16 @@ public class WebUser {
         return role == Role.MARKER;
     }
 
+    public Integer getMarkerId() {
+        return markerId;
+    }
+
+    public Marker getMarker() {
+        return marker;
+    }
+
+    public void setMarker(Marker marker) {
+        this.marker = marker;
+    }
+
 }

+ 12 - 19
stmms-web/src/main/java/cn/com/qmth/stmms/common/interceptor/LogInterceptor.java

@@ -13,7 +13,6 @@ import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
 import cn.com.qmth.stmms.admin.utils.SessionExamUtils;
-import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.model.OperationLog;
 import cn.com.qmth.stmms.biz.exam.service.ExamService;
@@ -90,22 +89,16 @@ public class LogInterceptor extends HandlerInterceptorAdapter {
         log.setMenu(logging.menu());
         log.setType(logging.type());
         log.setMarker(wu.isMarker());
+        log.setOperatorId(wu.getUser().getId());
+        log.setIpAddress(wu.getUser().getLastLoginIp());
+        log.setLoginName(wu.getUser().getLoginName());
+        log.setSchoolId(wu.getUser().getSchoolId());
         if (wu.isMarker()) {
-            log.setMarker(true);
-            log.setOperatorId(wu.getMarker().getId());
-            log.setIpAddress(wu.getMarker().getLastLoginIp());
-            log.setLoginName(wu.getMarker().getLoginName());
-            log.setExamId(wu.getMarker().getExamId());
-            Exam exam = examService.findById(wu.getMarker().getExamId());
-            log.setSchoolId(exam.getSchoolId());
+            Marker marker = markerService.findById(wu.getMarkerId());
+            log.setExamId(marker.getExamId());
         } else {
-            log.setMarker(false);
-            log.setOperatorId(wu.getUser().getId());
-            log.setIpAddress(wu.getUser().getLastLoginIp());
-            log.setLoginName(wu.getUser().getLoginName());
             int examId = SessionExamUtils.getExamId(request);
             log.setExamId(examId > 0 ? examId : null);
-            log.setSchoolId(wu.getUser().getSchoolId());
         }
         log.setDescription(RequestUtils.getLog(request));
         logService.save(log);
@@ -124,11 +117,11 @@ public class LogInterceptor extends HandlerInterceptorAdapter {
         Role role = session.getWebUserRole();
         if (userId != null && role != null) {
             if (Role.MARKER == role) {
-                Marker marker = markerService.findById(userId);
-                if (marker != null && marker.getAccessTokenRefreshTime() != null
-                        && StringUtils.equals(session.getWebUserToken(), marker.getAccessToken())
-                        && !AccessControlUtils.expired(marker.getAccessTokenRefreshTime())) {
-                    WebUser wu = new WebUser(marker, session.getWebUserLogoutUrl());
+                User user = userService.findById(userId);
+                if (user != null && user.getAccessTokenRefreshTime() != null
+                        && StringUtils.equals(session.getWebUserToken(), user.getAccessToken())
+                        && !AccessControlUtils.expired(user.getAccessTokenRefreshTime())) {
+                    WebUser wu = new WebUser(user, session.getWebUserLogoutUrl(), session.getMarkerId().toString());
                     RequestUtils.setWebUser(request, wu);
                     return wu;
                 }
@@ -137,7 +130,7 @@ public class LogInterceptor extends HandlerInterceptorAdapter {
                 if (user != null && user.getRole() == role && user.getAccessTokenRefreshTime() != null
                         && StringUtils.equals(session.getWebUserToken(), user.getAccessToken())
                         && !AccessControlUtils.expired(user.getAccessTokenRefreshTime())) {
-                    WebUser wu = new WebUser(user);
+                    WebUser wu = new WebUser(user, null, null);
                     RequestUtils.setWebUser(request, wu);
                     return wu;
                 }

+ 17 - 11
stmms-web/src/main/java/cn/com/qmth/stmms/common/session/model/StmmsSession.java

@@ -1,10 +1,5 @@
 package cn.com.qmth.stmms.common.session.model;
 
-import cn.com.qmth.stmms.common.domain.OpenUser;
-import cn.com.qmth.stmms.common.domain.WebUser;
-import cn.com.qmth.stmms.common.enums.Role;
-import org.apache.commons.lang.StringUtils;
-
 import java.io.Serializable;
 import java.util.HashMap;
 import java.util.Map;
@@ -13,12 +8,19 @@ import java.util.Set;
 
 import javax.persistence.Transient;
 
+import org.apache.commons.lang.StringUtils;
+
+import cn.com.qmth.stmms.common.domain.WebUser;
+import cn.com.qmth.stmms.common.enums.Role;
+
 public class StmmsSession implements Serializable {
 
     private static final long serialVersionUID = -1004172926154352747L;
 
     private static final String WEB_USER_ID_KEY = "_web_user_id_";
 
+    private static final String WEB_MARKER_ID_KEY = "_web_marker_id_";
+
     private static final String WEB_USER_ROLE_KEY = "_web_user_role_";
 
     private static final String WEB_USER_TOKEN_KEY = "_web_user_token_";
@@ -104,6 +106,15 @@ public class StmmsSession implements Serializable {
         }
     }
 
+    public Integer getMarkerId() {
+        String value = getParameter(WEB_MARKER_ID_KEY);
+        try {
+            return Integer.parseInt(value);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
     public Role getWebUserRole() {
         String value = getParameter(WEB_USER_ROLE_KEY);
         try {
@@ -123,15 +134,10 @@ public class StmmsSession implements Serializable {
 
     public void saveWebUser(WebUser webUser) {
         setParameter(WEB_USER_ID_KEY, String.valueOf(webUser.getId()));
+        setParameter(WEB_MARKER_ID_KEY, webUser.getMarkerId() == null ? "" : String.valueOf(webUser.getMarkerId()));
         setParameter(WEB_USER_ROLE_KEY, String.valueOf(webUser.getRole()));
         setParameter(WEB_USER_TOKEN_KEY, StringUtils.trimToEmpty(webUser.getToken()));
         setParameter(WEB_USER_LOGOUT_URL, StringUtils.trimToEmpty(webUser.getLogoutUrl()));
     }
 
-    public void saveOpenUser(OpenUser openUser) {
-        setParameter(OPEN_USER_ID_KEY, String.valueOf(openUser.getId()));
-        setParameter(OPEN_USER_TOKEN_KEY, StringUtils.trimToEmpty(openUser.getToken()));
-        setParameter(OPEN_USER_RETURN_URL_KEY, StringUtils.trimToEmpty(openUser.getReturnUrl()));
-    }
-
 }

+ 0 - 16
stmms-web/src/main/java/cn/com/qmth/stmms/common/utils/RequestUtils.java

@@ -9,7 +9,6 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import cn.com.qmth.stmms.common.domain.ApiUser;
-import cn.com.qmth.stmms.common.domain.OpenUser;
 import cn.com.qmth.stmms.common.domain.WebUser;
 import cn.com.qmth.stmms.common.session.model.StmmsSession;
 
@@ -24,8 +23,6 @@ public class RequestUtils {
 
     private static final String REQUEST_API_USER_KEY = "api_user";
 
-    private static final String REQUEST_OPEN_USER_KEY = "open_user";
-
     private static final String REQUEST_OPERATION_LOG_KEY = "operation_log";
 
     public static StmmsSession getSession(HttpServletRequest request) {
@@ -69,19 +66,6 @@ public class RequestUtils {
         request.setAttribute(REQUEST_API_USER_KEY, user);
     }
 
-    public static OpenUser getOpenUser(HttpServletRequest request) {
-        Object obj = request.getAttribute(REQUEST_OPEN_USER_KEY);
-        if (obj != null && obj instanceof OpenUser) {
-            return (OpenUser) obj;
-        } else {
-            return null;
-        }
-    }
-
-    public static void setOpenUser(HttpServletRequest request, OpenUser user) {
-        request.setAttribute(REQUEST_OPEN_USER_KEY, user);
-    }
-
     /**
      * 设置 Cookie
      *

+ 72 - 15
stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkController.java

@@ -1,12 +1,13 @@
 package cn.com.qmth.stmms.mark;
 
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
-import cn.com.qmth.stmms.common.domain.WebUser;
 import net.sf.json.JSONObject;
 
 import org.apache.commons.lang.StringEscapeUtils;
@@ -47,14 +48,20 @@ import cn.com.qmth.stmms.biz.mark.service.MarkService;
 import cn.com.qmth.stmms.biz.mark.service.ProblemTypeService;
 import cn.com.qmth.stmms.biz.mark.service.TaskService;
 import cn.com.qmth.stmms.biz.mark.service.TrialService;
+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.controller.BaseController;
+import cn.com.qmth.stmms.common.domain.WebUser;
 import cn.com.qmth.stmms.common.enums.ExamType;
 import cn.com.qmth.stmms.common.enums.LibraryStatus;
 import cn.com.qmth.stmms.common.enums.LockType;
 import cn.com.qmth.stmms.common.enums.LogType;
 import cn.com.qmth.stmms.common.enums.MarkMode;
 import cn.com.qmth.stmms.common.enums.MarkStatus;
+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.RequestUtils;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -96,6 +103,12 @@ public class MarkController extends BaseController {
     @Autowired
     private ProblemTypeService problemTypeService;
 
+    @Autowired
+    private UserService userService;
+
+    @Autowired
+    private SessionService sessionService;
+
     @Value("${slice.image.server}")
     private String sliceServer;
 
@@ -113,21 +126,62 @@ public class MarkController extends BaseController {
 
     @RequestMapping(value = "/reset", method = RequestMethod.GET)
     public ModelAndView reset(HttpServletRequest request) {
-        Marker marker = RequestUtils.getWebUser(request).getMarker();
+        User user = RequestUtils.getWebUser(request).getUser();
         ModelAndView modelAndView = new ModelAndView("modules/mark/reset");
-        modelAndView.addObject("marker", marker);
+        modelAndView.addObject("user", user);
         return modelAndView;
     }
 
     @Logging(menu = "修改姓名密码", type = LogType.UPDATE)
     @RequestMapping(value = "/reset", method = RequestMethod.POST)
-    public ModelAndView reset(HttpServletRequest request, Marker marker) {
-        Marker current = RequestUtils.getWebUser(request).getMarker();
-        current.setName(marker.getName());
-        current.setPassword(marker.getPassword());
+    public ModelAndView reset(HttpServletRequest request, User user) {
+        User current = RequestUtils.getWebUser(request).getUser();
+        current.setName(user.getName());
+        current.setPassword(Md5EncryptUtils.md5(user.getPassword()));
         current.setLastLoginIp(request.getRemoteAddr());
         current.setLastLoginTime(new Date());
-        markerService.save(current);
+        userService.save(current);
+        return new ModelAndView("redirect:/mark/subject-select");
+    }
+
+    @RequestMapping(value = "/subject-select", method = RequestMethod.GET)
+    public ModelAndView select(HttpServletRequest request) {
+        ModelAndView modelAndView = new ModelAndView("modules/mark/subjectSelect");
+        User user = RequestUtils.getWebUser(request).getUser();
+        Calendar rightNow = Calendar.getInstance();
+        rightNow.setTime(new Date());
+        rightNow.add(Calendar.YEAR, -1);
+        List<Exam> examList = examService.findByUserId(user.getId(), rightNow.getTime());
+        modelAndView.addObject("examList", examList);
+        return modelAndView;
+    }
+
+    @RequestMapping(value = "/subject-select", method = RequestMethod.POST)
+    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();
+        rightNow.setTime(new Date());
+        rightNow.add(Calendar.YEAR, -1);
+        List<Exam> examList = examService.findByUserId(user.getId(), rightNow.getTime());
+        modelAndView.addObject("examList", examList);
+
+        Marker marker = markerService.findById(markerId);
+        Exam exam = examService.findById(marker.getExamId());
+        modelAndView.addObject("exam", exam);
+        MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
+        if (group == null) {
+            modelAndView.addObject("message", "user.login.error.group");
+            return modelAndView;
+        }
+        if (group.getStatus() == MarkStatus.FINISH) {
+            modelAndView.addObject("message", "user.login.error.finish");
+            return modelAndView;
+        }
+
+        StmmsSession session = RequestUtils.getSession(request);
+        session.saveWebUser(new WebUser(user, null, markerId.toString()));
+        sessionService.put(request, response, session);
         return new ModelAndView("redirect:/mark/index");
     }
 
@@ -471,16 +525,19 @@ public class MarkController extends BaseController {
     @ResponseBody
     public JSONObject changeName(HttpServletRequest request, @RequestParam String name,
             @RequestParam(required = false) String password) {
-        Marker marker = RequestUtils.getWebUser(request).getMarker();
+        User user = userService.findById(RequestUtils.getWebUser(request).getId());
         JSONObject result = new JSONObject();
-        marker.setName(name);
+        user.setName(name);
         if (StringUtils.isNotEmpty(password)) {
-            marker.setPassword(password);
+            user.setPassword(Md5EncryptUtils.md5(password));
         }
-        marker = markerService.save(marker);
-        result.accumulate("success", marker != null);
-        if (marker != null) {
-            result.accumulate("name", marker.getName());
+        try {
+            user = userService.save(user);
+            result.accumulate("success", true);
+            result.accumulate("name", user.getName());
+        } catch (Exception e) {
+            result.accumulate("success", false);
+            log.error("MarkController-修改名字出错", e);
         }
         return result;
     }

+ 0 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkLeaderController.java

@@ -56,7 +56,6 @@ public class MarkLeaderController extends BaseController {
         WebUser user = RequestUtils.getWebUser(request);
         Marker marker = new Marker();
         marker.setId(user.getId());
-        marker.setName(user.getName());
         marker.setExamId(student.getExamId());
         marker.setSubjectCode(student.getSubjectCode());
         ModelAndView modelAndView = new ModelAndView("modules/mark/markLeader");

+ 25 - 14
stmms-web/src/main/java/cn/com/qmth/stmms/mark/interceptor/MarkInterceptor.java

@@ -3,16 +3,17 @@ package cn.com.qmth.stmms.mark.interceptor;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import cn.com.qmth.stmms.common.enums.Role;
-import cn.com.qmth.stmms.common.session.model.StmmsSession;
-import cn.com.qmth.stmms.common.utils.AccessControlUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.service.MarkerService;
+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.Role;
 import cn.com.qmth.stmms.common.interceptor.SessionInterceptor;
+import cn.com.qmth.stmms.common.session.model.StmmsSession;
+import cn.com.qmth.stmms.common.utils.AccessControlUtils;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
 
 /**
@@ -22,34 +23,44 @@ import cn.com.qmth.stmms.common.utils.RequestUtils;
  */
 public class MarkInterceptor extends SessionInterceptor {
 
+    @Autowired
+    private UserService userService;
+
     @Autowired
     private MarkerService markerService;
 
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-        WebUser wu = buildWebUser(request);
-        if (wu != null) {
-            if (!request.getServletPath().endsWith("mark/reset") && wu.getMarker().getLastLoginTime() == null) {
+        WebUser wu = RequestUtils.getWebUser(request);
+        User user = buildUser(request);
+        if (user != null) {
+            if (user.getLastLoginTime() == null) {
                 // 首次登录,强制重置密码及姓名
                 return redirect(request, response, "/mark/reset");
+            } else if (wu.getMarkerId() == null) {
+                // 通用帐号未选择科目,首先选择强制选择评卷科目
+                return redirect(request, response, "/mark/subject-select");
             }
             return true;
         }
         return sessionExpire(request, response, "/login");
     }
 
-    private WebUser buildWebUser(HttpServletRequest request) {
+    private User buildUser(HttpServletRequest request) {
+        WebUser wu = RequestUtils.getWebUser(request);
         StmmsSession session = RequestUtils.getSession(request);
         Integer userId = session.getWebUserId();
         Role role = session.getWebUserRole();
         if (userId != null && Role.MARKER == role) {
-            Marker marker = markerService.findById(userId);
-            if (marker != null && marker.getAccessTokenRefreshTime() != null && StringUtils
-                    .equals(session.getWebUserToken(), marker.getAccessToken()) && !AccessControlUtils
-                    .expired(marker.getAccessTokenRefreshTime())) {
-                WebUser wu = new WebUser(marker, session.getWebUserLogoutUrl());
+            User user = userService.findById(userId);
+            if (user != null && user.getAccessTokenRefreshTime() != null
+                    && StringUtils.equals(session.getWebUserToken(), user.getAccessToken())
+                    && !AccessControlUtils.expired(user.getAccessTokenRefreshTime())) {
+                if (wu.getMarkerId() != null && wu.getMarker() == null) {
+                    wu.setMarker(markerService.findById(wu.getMarkerId()));
+                }
                 RequestUtils.setWebUser(request, wu);
-                return wu;
+                return user;
             }
         }
         return null;

+ 111 - 97
stmms-web/src/main/java/cn/com/qmth/stmms/open/controller/OpenAccountController.java

@@ -1,32 +1,32 @@
 package cn.com.qmth.stmms.open.controller;
 
+import java.util.List;
+
+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 org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
 import cn.com.qmth.stmms.biz.exam.service.MarkerService;
 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.OpenAccount;
+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.domain.OpenUser;
 import cn.com.qmth.stmms.common.domain.WebUser;
 import cn.com.qmth.stmms.common.enums.MarkStatus;
 import cn.com.qmth.stmms.common.signature.SignatureInfo;
 import cn.com.qmth.stmms.common.signature.SignatureType;
 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.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 org.springframework.web.servlet.mvc.support.RedirectAttributes;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.Date;
-import java.util.List;
 
 @Controller("openAccountController")
 @RequestMapping("/open")
@@ -46,87 +46,101 @@ public class OpenAccountController {
 
     @Autowired
     private MarkGroupService groupService;
-
-    @RequestMapping(value = "/marker/login", method = RequestMethod.POST)
-    public String markerLogin(HttpServletRequest request, RedirectAttributes redirect, @RequestParam String time,
-            @RequestParam String authorization, @RequestParam String account, @RequestParam String returnUrl) {
-        // 请求参数验证
-        account = StringUtils.trimToEmpty(account);
-        returnUrl = StringUtils.trimToEmpty(returnUrl);
-        if (returnUrl.length() == 0) {
-            return errorRedirect(redirect, null, "returnUrl不能为空");
-        }
-        if (account.length() == 0) {
-            return errorRedirect(redirect, returnUrl, "account不能为空");
-        }
-        // 签名验证,获取访问学校
-        School school = null;
-        SignatureInfo info = authorizationService.buildSignature(request, time, authorization);
-        if (info != null && info.getType() == SignatureType.SECRET) {
-            school = schoolService.findByAccessKey(info.getInvoker());
-        }
-        if (school == null || !school.isEnable() || !info.validate(school.getAccessSecret())) {
-            return errorRedirect(redirect, returnUrl, "接口鉴权失败");
-        }
-        // 查找第三方账号并登陆
-        OpenAccount oa = userService.openAccountLogin(school.getId(), account);
-        if (oa == null || !oa.isEnable()) {
-            return errorRedirect(redirect, returnUrl, "第三方账号不存在");
-        }
-        // 保存第三方账号到session
-        RequestUtils.getSession(request).saveOpenUser(new OpenUser(oa, returnUrl));
-
-        return "redirect:/open/marker/list";
-    }
-
-    @RequestMapping(value = "/marker/list", method = RequestMethod.GET)
-    public ModelAndView markerList(HttpServletRequest request) {
-        OpenAccount account = RequestUtils.getOpenUser(request).getOpenAccount();
-        ModelAndView modelAndView = new ModelAndView("modules/open/marker-list");
-        // TODO - 增加评卷员列表,构造考试、科目、分组联动数据集合
-        List<Marker> markerList = markerService.findByOpenAccountAndMarkStatus(account.getId(), MarkStatus.TRIAL,
-                MarkStatus.FORMAL);
-        modelAndView.addObject("markerList", markerList);
-        return modelAndView;
-    }
-
-    @RequestMapping(value = "/marker/select", method = RequestMethod.POST)
-    public ModelAndView markerSelect(HttpServletRequest request, @RequestParam Integer markerId) {
-        // 评卷员与评卷分组校验
-        OpenAccount account = RequestUtils.getOpenUser(request).getOpenAccount();
-        Marker marker = markerService.findById(markerId);
-        if (marker == null || !marker.isEnable() || marker.getOpenAccountId() == null
-                || !marker.getOpenAccountId().equals(account.getId())) {
-            return new ModelAndView("redirect:/open/marker/list");
-        }
-        MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
-        if (group == null || group.getStatus() == MarkStatus.FINISH) {
-            return new ModelAndView("redirect:/open/marker/list");
-        }
-        // 完成评卷员登陆并保存session
-        marker.refreshAccessToken();
-        marker.setLastLoginIp(request.getRemoteAddr());
-        marker.setLastLoginTime(new Date());
-        RequestUtils.getSession(request).saveWebUser(new WebUser(markerService.save(marker), "/open/marker/list"));
-        return new ModelAndView("redirect:/mark/index");
-    }
-
-    @RequestMapping(value = "/error")
-    public ModelAndView error(HttpServletRequest request, @RequestParam(required = false) String message,
-            @RequestParam(required = false) String returnUrl) {
-        ModelAndView modelAndView = new ModelAndView("modules/open/error");
-        modelAndView.addObject("message", StringUtils.trimToNull(message));
-        modelAndView.addObject("returnUrl", StringUtils.trimToNull(returnUrl));
-        return modelAndView;
-    }
-
-    private String errorRedirect(RedirectAttributes redirect, String returnUrl, String... errors) {
-        if (errors != null && errors.length > 0) {
-            redirect.addFlashAttribute("message", StringUtils.join(errors, "\n"));
-        }
-        if (returnUrl != null && returnUrl.length() > 0) {
-            redirect.addFlashAttribute("returnUrl", returnUrl);
-        }
-        return "redirect:/open/error";
-    }
+    //
+    // @RequestMapping(value = "/marker/login", method = RequestMethod.POST)
+    // public String markerLogin(HttpServletRequest request, RedirectAttributes
+    // redirect, @RequestParam String time,
+    // @RequestParam String authorization, @RequestParam String account,
+    // @RequestParam String returnUrl) {
+    // // 请求参数验证
+    // account = StringUtils.trimToEmpty(account);
+    // returnUrl = StringUtils.trimToEmpty(returnUrl);
+    // if (returnUrl.length() == 0) {
+    // return errorRedirect(redirect, null, "returnUrl不能为空");
+    // }
+    // if (account.length() == 0) {
+    // return errorRedirect(redirect, returnUrl, "account不能为空");
+    // }
+    // // 签名验证,获取访问学校
+    // School school = null;
+    // SignatureInfo info = authorizationService.buildSignature(request, time,
+    // authorization);
+    // if (info != null && info.getType() == SignatureType.SECRET) {
+    // school = schoolService.findByAccessKey(info.getInvoker());
+    // }
+    // if (school == null || !school.isEnable() ||
+    // !info.validate(school.getAccessSecret())) {
+    // return errorRedirect(redirect, returnUrl, "接口鉴权失败");
+    // }
+    // // 查找第三方账号并登陆
+    // User user = userService.findBySchoolIdAndAccount(school.getId(),
+    // account);
+    // if (user == null || !user.isEnable()) {
+    // return errorRedirect(redirect, returnUrl, "第三方账号不存在");
+    // }
+    // // 保存第三方账号到session
+    // RequestUtils.getSession(request).saveWebUser(new WebUser(user,
+    // returnUrl));
+    //
+    // return "redirect:/open/marker/list";
+    // }
+    //
+    // @RequestMapping(value = "/marker/list", method = RequestMethod.GET)
+    // public ModelAndView markerList(HttpServletRequest request) {
+    // OpenAccount account = RequestUtils.getOpenUser(request).getOpenAccount();
+    // ModelAndView modelAndView = new ModelAndView("modules/open/marker-list");
+    // // TODO - 增加评卷员列表,构造考试、科目、分组联动数据集合
+    // List<Marker> markerList =
+    // markerService.findByOpenAccountAndMarkStatus(account.getId(),
+    // MarkStatus.TRIAL,
+    // MarkStatus.FORMAL);
+    // modelAndView.addObject("markerList", markerList);
+    // return modelAndView;
+    // }
+    //
+    // @RequestMapping(value = "/marker/select", method = RequestMethod.POST)
+    // public ModelAndView markerSelect(HttpServletRequest request,
+    // @RequestParam Integer markerId) {
+    // // 评卷员与评卷分组校验
+    // OpenAccount account = RequestUtils.getOpenUser(request).getOpenAccount();
+    // Marker marker = markerService.findById(markerId);
+    // if (marker == null || !marker.isEnable() || marker.getOpenAccountId() ==
+    // null
+    // || !marker.getOpenAccountId().equals(account.getId())) {
+    // return new ModelAndView("redirect:/open/marker/list");
+    // }
+    // MarkGroup group = groupService.findOne(marker.getExamId(),
+    // marker.getSubjectCode(), marker.getGroupNumber());
+    // if (group == null || group.getStatus() == MarkStatus.FINISH) {
+    // return new ModelAndView("redirect:/open/marker/list");
+    // }
+    // // 完成评卷员登陆并保存session
+    // // marker.refreshAccessToken();
+    // // marker.setLastLoginIp(request.getRemoteAddr());
+    // // marker.setLastLoginTime(new Date());
+    // // RequestUtils.getSession(request).saveWebUser(new
+    // // WebUser(markerService.save(marker), "/open/marker/list"));
+    // return new ModelAndView("redirect:/mark/index");
+    // }
+    //
+    // @RequestMapping(value = "/error")
+    // public ModelAndView error(HttpServletRequest request,
+    // @RequestParam(required = false) String message,
+    // @RequestParam(required = false) String returnUrl) {
+    // ModelAndView modelAndView = new ModelAndView("modules/open/error");
+    // modelAndView.addObject("message", StringUtils.trimToNull(message));
+    // modelAndView.addObject("returnUrl", StringUtils.trimToNull(returnUrl));
+    // return modelAndView;
+    // }
+    //
+    // private String errorRedirect(RedirectAttributes redirect, String
+    // returnUrl, String... errors) {
+    // if (errors != null && errors.length > 0) {
+    // redirect.addFlashAttribute("message", StringUtils.join(errors, "\n"));
+    // }
+    // if (returnUrl != null && returnUrl.length() > 0) {
+    // redirect.addFlashAttribute("returnUrl", returnUrl);
+    // }
+    // return "redirect:/open/error";
+    // }
 }

+ 27 - 30
stmms-web/src/main/java/cn/com/qmth/stmms/open/interceptor/OpenInterceptor.java

@@ -1,18 +1,13 @@
 package cn.com.qmth.stmms.open.interceptor;
 
-import cn.com.qmth.stmms.biz.user.model.OpenAccount;
-import cn.com.qmth.stmms.biz.user.service.UserService;
-import cn.com.qmth.stmms.common.domain.OpenUser;
-import cn.com.qmth.stmms.common.interceptor.SessionInterceptor;
-import cn.com.qmth.stmms.common.session.model.StmmsSession;
-import cn.com.qmth.stmms.common.utils.AccessControlUtils;
-import cn.com.qmth.stmms.common.utils.RequestUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.springframework.beans.factory.annotation.Autowired;
+
+import cn.com.qmth.stmms.biz.user.service.UserService;
+import cn.com.qmth.stmms.common.interceptor.SessionInterceptor;
+
 /**
  * Mark模块操作拦截器
  *
@@ -25,26 +20,28 @@ public class OpenInterceptor extends SessionInterceptor {
 
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-        OpenUser ou = buildOpenUser(request);
-        if (ou != null) {
-            return true;
-        }
+        // OpenUser ou = buildOpenUser(request);
+        // if (ou != null) {
+        // return true;
+        // }
         return redirect(request, response, "/open/error");
     }
-
-    private OpenUser buildOpenUser(HttpServletRequest request) {
-        StmmsSession session = RequestUtils.getSession(request);
-        Integer userId = session.getOpenUserId();
-        if (userId != null) {
-            OpenAccount oa = userService.findOpenAccount(userId);
-            if (oa != null && oa.isEnable() && oa.getAccessTokenRefreshTime() != null && StringUtils
-                    .equals(session.getOpenUserToken(), oa.getAccessToken()) && !AccessControlUtils
-                    .expired(oa.getAccessTokenRefreshTime())) {
-                OpenUser ou = new OpenUser(oa, session.getOpenUserReturnUrl());
-                RequestUtils.setOpenUser(request, ou);
-                return ou;
-            }
-        }
-        return null;
-    }
+    //
+    // private OpenUser buildOpenUser(HttpServletRequest request) {
+    // StmmsSession session = RequestUtils.getSession(request);
+    // Integer userId = session.getOpenUserId();
+    // if (userId != null) {
+    // OpenAccount oa = userService.findOpenAccount(userId);
+    // if (oa != null && oa.isEnable() && oa.getAccessTokenRefreshTime() != null
+    // && StringUtils
+    // .equals(session.getOpenUserToken(), oa.getAccessToken()) &&
+    // !AccessControlUtils
+    // .expired(oa.getAccessTokenRefreshTime())) {
+    // OpenUser ou = new OpenUser(oa, session.getOpenUserReturnUrl());
+    // RequestUtils.setOpenUser(request, ou);
+    // return ou;
+    // }
+    // }
+    // return null;
+    // }
 }

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

@@ -54,5 +54,6 @@ qmth.examcloud.appId=EPCC
 qmth.examcloud.secretKey=Fu234234CK!fsd9f0
 qmth.examcloud.pageSize=10
 qmth.examcloud.subject.uri=/api/exchange/outer/question/getSubjectivePaperStruct
+qmth.examcloud.subject.paper.uri=/api/exchange/outer/question/getSubjectivePaper
 qmth.examcloud.student.uri=/api/exchange/outer/question/getSubjectiveQuestion
 

+ 2 - 1
stmms-web/src/main/webapp/WEB-INF/spring-mvc.xml

@@ -29,7 +29,8 @@
 					  cn.com.qmth.stmms.mark,
 					  cn.com.qmth.stmms.monitor,
 					  cn.com.qmth.stmms.report,
-					  cn.com.qmth.stmms.open">
+					  cn.com.qmth.stmms.open,
+					  cn.com.qmth.stmms.card">
         <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
         <context:include-filter type="annotation" expression="org.springframework.stereotype.Component"/>
     </context:component-scan>

+ 72 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/card/login.jsp

@@ -0,0 +1,72 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
+<html>
+<head>
+    <title><spring:message code="user.login.submit"/></title>
+    <meta name="decorator" content="default"/>
+    <%@include file="/WEB-INF/views/include/head.jsp" %>
+    <link rel="stylesheet" href="${ctxStatic}/common/login.css">
+    <script type="text/javascript">
+        $(document).ready(function () {
+            $("#showType").hide();
+            $("#adminLogin").click(function () {
+                $("#adminLogin").addClass("on");
+                $("#markLogin").removeClass("on");
+                $("#showType").attr("value", "admin-login");
+            });
+            $("#markLogin").click(function () {
+                $("#markLogin").addClass("on");
+                $("#adminLogin").removeClass("on");
+                $("#showType").attr("value", "mark-login");
+            });
+            if (self.frameElement && self.frameElement.tagName == "IFRAME") {
+                parent.location.reload();
+            }
+            load();
+        });
+    </script>
+</head>
+<body>
+<div class="container">
+    <div class="middle cl">
+        <div class="left">
+            <div class="logo"><img
+                    src="${ctxStatic}/images/<c:if test="${indexLogo ==null||indexLogo =='' }">logo@2x.png</c:if><c:if test="${indexLogo !=null }">${indexLogo }</c:if>"/>
+            </div>
+            <p>Copyright &#169武汉启明软件 2012-2014</p>
+        </div>
+        <div class="right">
+            <div class="title">
+                <h1 data-i18n-text="user.login.title">高校考试管理平台</h1>
+                <c:if test="${loginType == 'admin-login' }"><p data-i18n-text="user.login.admin">管理员登录</p></c:if>
+                <c:if test="${loginType == 'mark-login' }"><p data-i18n-text="user.login.marker">评卷员登录</p></c:if>
+                <c:if test="${loginType == null || loginType == '' }">
+                    <p><span><a href="#" class="<c:if test="${showType == 'admin-login' ||showType==null}">on</c:if>"
+                                id="adminLogin" data-i18n-text="user.login.admin">管理员登录</a></span>
+                        <span><a href="#" class="<c:if test="${showType == 'mark-login' }">on</c:if>" id="markLogin" data-i18n-text="user.login.marker">评卷员登录</a></span></p>
+                </c:if>
+            </div>
+            <div class="loginbox">
+                <form action="${ctx}/login" method="post" role="form" id="loginForm">
+                    <input id="showType" name="showType" value="${showType}"/>
+                    <div class="input-group">
+                        <input type="text" class="form-control required" id="loginName" name="loginName" placeholder="请输入用户名"
+                               autocomplete="off" value="${loginName }" data-i18n-placeholder="user.login.name"/>
+                    </div>
+                    <div class="input-group">
+                        <input type="password" class="form-control required" id="password" name="password" placeholder="请输入密码"
+                               autocomplete="off" data-i18n-placeholder="user.login.password"/>
+                    </div>
+                    <c:if test="${message != null }">
+                    <div class="point <c:if test="${message != null }"></c:if><c:if test="${message == null }">hide</c:if>">
+                        <em class="error"><spring:message code="${message }"/></em>
+                    </div>
+                    </c:if>
+                    <div class="login-btn"><input class="opacity" type="submit" value="登 录" data-i18n-value="user.login.submit"/></div>
+                </form>
+            </div>
+        </div>
+    </div>
+</div>
+</body>
+</html>

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

@@ -95,7 +95,7 @@
 											<li><a href="${ctx}/admin/exam/scan" target="mainFrame" ><i class="icon-print"></i>扫描进度</a></li>
 											<li><a href="${ctx}/admin/exam/mark" target="mainFrame" ><i class="icon-pencil"></i>评卷管理</a></li>
 											<li><a href="${ctx}/admin/exam/score" target="mainFrame" ><i class="icon-search"></i>成绩查询</a></li>
-											<li><a href="${ctx}/admin/exam/reportSubjectRange" target="mainFrame" ><i class="icon-search"></i>成绩分析</a></li>
+											<li><a href="${ctx}/admin/exam/reportSubjectRange" target="mainFrame" ><i class="icon-signal"></i>成绩分析</a></li>
 											<li><a href="${ctx}/admin/exam/problem/history" target="mainFrame" ><i class="icon-tag"></i>问题试卷</a></li>	
 											<li><a href="${ctx}/admin/exam/check/answer" target="mainFrame" ><i class="icon-check"></i>数据检查</a></li>			
 											<li><a href="${ctx}/admin/operation/log" target="mainFrame" ><i class="icon-check"></i>操作日志</a></li>			
@@ -107,7 +107,7 @@
                                             <li><a href="${ctx}/admin/exam/mark" target="mainFrame" ><i class="icon-pencil"></i>评卷管理</a></li>
                                             <li><a href="${ctx}/admin/exam/score" target="mainFrame" ><i class="icon-search"></i>成绩查询</a></li> 
                                             <li><a href="${ctx}/admin/exam/problem/history" target="mainFrame" ><i class="icon-tag"></i>问题试卷</a></li>	
-                                            <li><a href="${ctx}/admin/exam/reportSubjectRange" target="mainFrame" ><i class="icon-search"></i>成绩分析</a></li>     
+                                            <li><a href="${ctx}/admin/exam/reportSubjectRange" target="mainFrame" ><i class="icon-signal"></i>成绩分析</a></li>     
                                             </c:if>
                                             
                                             <c:if test="${web_user.schoolViewer==true}">

+ 2 - 2
stmms-web/src/main/webapp/WEB-INF/views/modules/mark/markNew.jsp

@@ -103,8 +103,8 @@
 					},
 					'view-sidebar':{
 						list: [
-							{title:'试卷',  url:'<c:if test="${subject.hasPaper==true}">${cardServer}${subject.paperUrl}</c:if>'},
-							{title:'答案',  url:'<c:if test="${subject.hasAnswer==true}">${cardServer}${subject.answerUrl}</c:if>'}
+							{title:getMessage('mark.sidebar.paper'),  url:'<c:if test="${subject.hasPaper==true}">${cardServer}${subject.paperUrl}</c:if>'},
+							{title:getMessage('mark.sidebar.answer'),  url:'<c:if test="${subject.hasAnswer==true}">${cardServer}${subject.answerUrl}</c:if>'}
 						]
 					},
                     'specialTag':{

+ 2 - 2
stmms-web/src/main/webapp/WEB-INF/views/modules/mark/markTrack.jsp

@@ -95,8 +95,8 @@
                     </c:if>
 					'object-view':{
 					    list: [
-					           {title:'试卷',  url:'<c:if test="${subject.hasPaper==true}">${cardServer}${subject.paperUrl}</c:if>'},
-					           {title:'答案',  url:'<c:if test="${subject.hasAnswer==true}">${cardServer}${subject.answerUrl}</c:if>'}
+					           {title:getMessage('mark.sidebar.paper'),  url:'<c:if test="${subject.hasPaper==true}">${cardServer}${subject.paperUrl}</c:if>'},
+					           {title:getMessage('mark.sidebar.answer'),  url:'<c:if test="${subject.hasAnswer==true}">${cardServer}${subject.answerUrl}</c:if>'}
 	                    ]
 					}
 				}

+ 2 - 6
stmms-web/src/main/webapp/sql/stmms_ft.sql

@@ -77,7 +77,8 @@ CREATE TABLE `b_user`
     `access_token_refresh_time` datetime    DEFAULT NULL COMMENT '访问令牌刷新时间',
     PRIMARY KEY (`id`),
     KEY `index1` (`login_name`),
-    KEY `index2` (`school_id`, `enable`)
+    KEY `index2` (`school_id`, `enable`),
+    UNIQUE KEY `index3` (`login_name`),
 ) ENGINE = InnoDB
   DEFAULT CHARSET = utf8mb4 COMMENT ='用户表';
 
@@ -336,9 +337,6 @@ CREATE TABLE `eb_marker`
     `exam_id`                   int(11)     NOT NULL COMMENT '考试ID',
     `subject_code`              varchar(32) NOT NULL COMMENT '科目代码',
     `group_number`              int(11)     NOT NULL COMMENT '分组编号',
-    `login_name`                varchar(64) NOT NULL COMMENT '登录名',
-    `name`                      varchar(64) NOT NULL COMMENT '姓名',
-    `password`                  varchar(64) NOT NULL COMMENT '密码',
     `enable`                    tinyint(1)  NOT NULL COMMENT '是否启用',
     `open_account_id`           int(11)     DEFAULT NULL COMMENT '绑定外部账号ID',
     `mode`                      varchar(16) DEFAULT NULL COMMENT '评卷模式',
@@ -352,8 +350,6 @@ CREATE TABLE `eb_marker`
     `mark_setting`              text        DEFAULT NULL COMMENT '个性化评卷参数设置',
     `access_token`              varchar(64) DEFAULT NULL COMMENT '访问令牌',
     `access_token_refresh_time` datetime    DEFAULT NULL COMMENT '访问令牌刷新时间',
-    `last_login_ip`             varchar(64) DEFAULT NULL COMMENT '上次登录IP',
-    `last_login_time`           datetime    DEFAULT NULL COMMENT '上次登录时间',
     PRIMARY KEY (`id`),
     UNIQUE KEY `index1` (`login_name`),
     KEY `index2` (`exam_id`, `subject_code`, `group_number`)

+ 2 - 0
stmms-web/src/main/webapp/static/i18n/messages.properties

@@ -80,6 +80,8 @@ mark.thumbnail.open=\u6253\u5f00
 mark.thumbnail.close=\u5173\u95ed
 #view-sidebar
 mark.sidebar=\u4fa7\u8fb9\u680f
+mark.sidebar.paper=\u8bd5\u5377
+mark.sidebar.answer=\u7b54\u6848
 #mark-history
 mark.history.title=\u56de\u8bc4
 mark.history.time=\u65f6\u95f4

+ 2 - 0
stmms-web/src/main/webapp/static/i18n/messages_en.properties

@@ -80,6 +80,8 @@ mark.thumbnail.open=open
 mark.thumbnail.close=close
 #view-sidebar
 mark.sidebar=sidebar
+mark.sidebar.paper=paper
+mark.sidebar.answer=answer
 #mark-history
 mark.history.title=history
 mark.history.time=time

+ 2 - 0
stmms-web/src/main/webapp/static/i18n/messages_ja.properties

@@ -80,6 +80,8 @@ mark.thumbnail.open=\u958b\u304f
 mark.thumbnail.close=\u9589\u3058\u308b
 #view-sidebar
 mark.sidebar=\u30b5\u30a4\u30c9\u30d0\u30fc
+mark.sidebar.paper=\u554f\u984c\u7528\u7d19
+mark.sidebar.answer=\u6a19\u6e96\u89e3\u7b54
 #mark-history
 mark.history.title=\u518d\u63a1\u70b9
 mark.history.time=\u6642\u9593

+ 2 - 0
stmms-web/src/main/webapp/static/i18n/messages_zh.properties

@@ -80,6 +80,8 @@ mark.thumbnail.open=\u6253\u5f00
 mark.thumbnail.close=\u5173\u95ed
 #view-sidebar
 mark.sidebar=\u4fa7\u8fb9\u680f
+mark.sidebar.paper=\u8bd5\u5377
+mark.sidebar.answer=\u7b54\u6848
 #mark-history
 mark.history.title=\u56de\u8bc4
 mark.history.time=\u65f6\u95f4

BIN
stmms-web/src/main/webapp/static/images/logo@2x_1.png


+ 2 - 2
stmms-web/src/main/webapp/static/mark-new/js/modules/mark-board.js

@@ -423,12 +423,12 @@ MarkBoard.prototype.validateScore = function (step, scoreString) {
     }
     var score = new Number(scoreString);
     if (score < step.min) {
-        this.togglePopover(true, getMessage("mark.board.lt") +" " + step.min, stepDom);
+        this.togglePopover(true, step.min +" " + getMessage("mark.board.lt"), stepDom);
         //alert('当前分数不应小于' + step.min);
         return false;
     }
     if (score > step.max) {
-        this.togglePopover(true, getMessage("mark.board.gt") +" " + step.max, stepDom);
+        this.togglePopover(true, step.max +" " + getMessage("mark.board.gt"), stepDom);
         //alert('当前分数不应大于' + step.max);
         return false;
     }