ting.yin 4 年 前
コミット
8cbfa1cd1e
47 ファイル変更1023 行追加360 行削除
  1. 6 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/MarkerDao.java
  2. 18 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/SubjectUserDao.java
  3. 13 4
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/Marker.java
  4. 116 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/SubjectUser.java
  5. 10 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/ExamStudentSearchQuery.java
  6. 10 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/MarkerSearchQuery.java
  7. 9 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/MarkerService.java
  8. 23 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/SubjectUserService.java
  9. 13 1
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamStudentServiceImpl.java
  10. 39 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/MarkerServiceImpl.java
  11. 72 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/SubjectUserServiceImpl.java
  12. 2 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/user/dao/UserDao.java
  13. 0 14
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/user/model/User.java
  14. 2 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/user/service/UserService.java
  15. 5 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/user/service/impl/UserServiceImpl.java
  16. 6 10
      stmms-common/src/main/java/cn/com/qmth/stmms/common/enums/MarkerExcelError.java
  17. 2 1
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/AnswerCheckController.java
  18. 40 23
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/BaseExamController.java
  19. 10 4
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkController.java
  20. 4 3
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkGroupController.java
  21. 251 197
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkerController.java
  22. 4 3
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/PaperController.java
  23. 6 6
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/report/ReportSubjectClassController.java
  24. 6 7
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/report/ReportSubjectCollegeController.java
  25. 6 6
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/report/ReportSubjectController.java
  26. 6 6
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/report/ReportSubjectGroupController.java
  27. 6 6
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/report/ReportSubjectQuestionController.java
  28. 6 7
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/report/ReportSubjectRangeController.java
  29. 6 6
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/report/ReportSubjectTeacherClassController.java
  30. 6 6
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/report/ReportSubjectTeacherController.java
  31. 218 0
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/user/SubjectUserController.java
  32. 7 9
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/user/UserController.java
  33. 5 5
      stmms-web/src/main/java/cn/com/qmth/stmms/student/StudentScoreController.java
  34. 16 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/checkAnswer.jsp
  35. 18 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/checkAnswerEdit.jsp
  36. 5 3
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/examIndex.jsp
  37. 4 17
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/markerList.jsp
  38. 7 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/scoreList.jsp
  39. 0 1
      stmms-web/src/main/webapp/WEB-INF/views/modules/report/reportSubject.jsp
  40. 4 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/report/reportSubjectCollege.jsp
  41. 13 2
      stmms-web/src/main/webapp/WEB-INF/views/modules/report/reportSubjectRange.jsp
  42. 4 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/report/reportSubjectTeacher.jsp
  43. 4 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/report/reportSubjectTeacherClass.jsp
  44. 6 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/sys/userInfo.jsp
  45. 3 9
      stmms-web/src/main/webapp/WEB-INF/views/modules/user/userEdit.jsp
  46. 1 1
      stmms-web/src/main/webapp/WEB-INF/views/modules/user/userList.jsp
  47. 5 3
      stmms-web/src/main/webapp/static/answer-check/css/style.css

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

@@ -66,6 +66,12 @@ public interface MarkerDao extends PagingAndSortingRepository<Marker, Integer>,
 
     public List<Marker> findByMode(String common);
 
+    public Marker findByExamIdAndSubjectCodeAndGroupNumberAndUserId(int examId, String subjectCode, Integer number,
+            Integer userId);
+
+    @Query("select count(m) from Marker m where m.userId=?1")
+    public long countByUserId(Integer userId);
+
     // @Query(value =
     // "select m from Marker m, MarkGroup g where m.openAccountId=?1 and m.enable=?2 "
     // +

+ 18 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/SubjectUserDao.java

@@ -0,0 +1,18 @@
+package cn.com.qmth.stmms.biz.exam.dao;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import cn.com.qmth.stmms.biz.exam.model.SubjectUser;
+
+public interface SubjectUserDao extends PagingAndSortingRepository<SubjectUser, Integer>,
+        JpaSpecificationExecutor<SubjectUser> {
+
+    List<SubjectUser> findByUserId(Integer userId);
+
+    List<SubjectUser> findBySubjectCode(String subjectCode);
+
+    SubjectUser findBySubjectCodeAndUserId(String subjectCode, Integer userId);
+}

+ 13 - 4
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/Marker.java

@@ -19,8 +19,6 @@ import cn.com.qmth.stmms.common.enums.MarkMode;
 @Table(name = "eb_marker")
 public class Marker implements Serializable {
 
-    public static final String LOGINNAME_SPLITE = "-";
-
     private static final long serialVersionUID = -5728058071677581938L;
 
     @Id
@@ -38,7 +36,6 @@ public class Marker implements Serializable {
     private Integer groupNumber;
 
     @Column(name = "user_id", nullable = false)
-    @ExcelField(title = "登录名", align = 2, sort = 30)
     private Integer userId;
 
     @Column(name = "enable", nullable = false)
@@ -83,12 +80,16 @@ public class Marker implements Serializable {
     private String subjectName;
 
     @Transient
-    @ExcelField(title = "大题", align = 2, sort = 20)
     private String groupName;
 
     @Transient
+    @ExcelField(title = "分组号", align = 2, sort = 30)
     private int number;
 
+    @Transient
+    @ExcelField(title = "登录名", align = 2, sort = 40)
+    private String loginName;
+
     @Transient
     private ExamSubject subject;
 
@@ -291,4 +292,12 @@ public class Marker implements Serializable {
         this.user = user;
     }
 
+    public String getLoginName() {
+        return loginName;
+    }
+
+    public void setLoginName(String loginName) {
+        this.loginName = loginName;
+    }
+
 }

+ 116 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/SubjectUser.java

@@ -0,0 +1,116 @@
+package cn.com.qmth.stmms.biz.exam.model;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import cn.com.qmth.stmms.biz.user.model.User;
+import cn.com.qmth.stmms.common.annotation.ExcelField;
+
+@Entity
+@Table(name = "eb_subject_user")
+public class SubjectUser implements Serializable {
+
+    private static final long serialVersionUID = -304051934270195206L;
+
+    @Id
+    @GeneratedValue
+    private Integer id;
+
+    @Column(name = "subject_code", nullable = false)
+    @ExcelField(title = "科目代码", align = 2, sort = 20)
+    private String subjectCode;
+
+    @Column(name = "user_id", nullable = false)
+    private Integer userId;
+
+    @Column(name = "enable", nullable = false)
+    private boolean enable;
+
+    @Transient
+    @ExcelField(title = "科目(导入时可为空)", align = 2, sort = 30)
+    private String subjectName;
+
+    @Transient
+    @ExcelField(title = "登录名", align = 2, sort = 40)
+    private String loginName;
+
+    @Transient
+    private ExamSubject subject;
+
+    @Transient
+    private User user;
+
+    public SubjectUser() {
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getSubjectCode() {
+        return subjectCode;
+    }
+
+    public void setSubjectCode(String subjectCode) {
+        this.subjectCode = subjectCode;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public boolean isEnable() {
+        return enable;
+    }
+
+    public void setEnable(boolean enable) {
+        this.enable = enable;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public String getLoginName() {
+        return loginName;
+    }
+
+    public void setLoginName(String loginName) {
+        this.loginName = loginName;
+    }
+
+    public ExamSubject getSubject() {
+        return subject;
+    }
+
+    public void setSubject(ExamSubject subject) {
+        this.subject = subject;
+    }
+
+    public User getUser() {
+        return user;
+    }
+
+    public void setUser(User user) {
+        this.user = user;
+    }
+
+}

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

@@ -80,6 +80,8 @@ public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
 
     private String teacher;
 
+    private String paperType;
+
     public void orderByExamNumber() {
         setSort(new Sort(Direction.ASC, "examNumber"));
     }
@@ -364,4 +366,12 @@ public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
         this.teacher = teacher;
     }
 
+    public String getPaperType() {
+        return paperType;
+    }
+
+    public void setPaperType(String paperType) {
+        this.paperType = paperType;
+    }
+
 }

+ 10 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/MarkerSearchQuery.java

@@ -18,6 +18,8 @@ public class MarkerSearchQuery extends BaseQuery<Marker> {
 
     private Integer userId;
 
+    private String loginName;
+
     public void orderByUserId() {
         setSort(new Sort(Direction.ASC, "userId"));
     }
@@ -66,4 +68,12 @@ public class MarkerSearchQuery extends BaseQuery<Marker> {
         this.userId = userId;
     }
 
+    public String getLoginName() {
+        return loginName;
+    }
+
+    public void setLoginName(String loginName) {
+        this.loginName = loginName;
+    }
+
 }

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

@@ -2,6 +2,7 @@ package cn.com.qmth.stmms.biz.exam.service;
 
 import java.util.List;
 
+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;
 
@@ -36,6 +37,14 @@ public interface MarkerService {
 
     void updateMarkSetting(Integer id, String setting);
 
+    Marker findByExamAndSubjectAndNumberAndUserId(int examId, String subjectCode, Integer number, Integer userId);
+
+    long countByUserId(Integer userId);
+
+    void deleteById(Integer markerId);
+
+    void save(MarkGroup group, Integer[] userIds);
+
     // void updateOpenAccountById(Integer id, Integer openAccountId);
 
     // List<Marker> findByOpenAccountAndMarkStatus(Integer openAccountId,

+ 23 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/SubjectUserService.java

@@ -0,0 +1,23 @@
+package cn.com.qmth.stmms.biz.exam.service;
+
+import java.util.List;
+
+import cn.com.qmth.stmms.biz.exam.model.SubjectUser;
+
+public interface SubjectUserService {
+
+    SubjectUser save(SubjectUser u);
+
+    List<SubjectUser> findByUserId(Integer userId);
+
+    List<SubjectUser> findBySubjectCode(String subjectCode);
+
+    int batchSave(List<SubjectUser> saveList);
+
+    SubjectUser findBySubjectCodeAndUserId(String subjectCode, Integer userId);
+
+    SubjectUser findById(Integer id);
+
+    void save(String subjectCode, Integer[] userIds);
+
+}

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

@@ -611,6 +611,18 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
                         predicates.add(cb.and(sub));
                     }
                 }
+                if (StringUtils.isNotBlank(query.getPaperType())) {
+                    predicates.add(cb.equal(root.get("paperType"), query.getPaperType()));
+                }
+                if (StringUtils.isNotBlank(query.getCollege())) {
+                    predicates.add(cb.equal(root.get("college"), query.getCollege()));
+                }
+                if (StringUtils.isNotBlank(query.getClassName())) {
+                    predicates.add(cb.equal(root.get("className"), query.getClassName()));
+                }
+                if (StringUtils.isNotBlank(query.getTeacher())) {
+                    predicates.add(cb.equal(root.get("teacher"), query.getTeacher()));
+                }
                 return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates
                         .size()]));
             }
@@ -675,7 +687,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     public ExamStudent randomUnTrialStudent(Integer examId, String subjectCode, Integer groupNumber) {
         ExamStudentSearchQuery query = new ExamStudentSearchQuery();
         query.setPageNumber(1);
-        query.setPageSize(10);
+        query.setPageSize(200);
         query.setSort(new Sort(Direction.ASC, "uploadTime", "id"));
         List<ExamStudent> list = studentDao.findUnTrialStudent(examId, subjectCode, groupNumber, query);
         if (list.isEmpty()) {

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

@@ -1,5 +1,6 @@
 package cn.com.qmth.stmms.biz.exam.service.impl;
 
+import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -17,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 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.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;
@@ -239,6 +241,43 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
         return markerDao.findByMode(commo);
     }
 
+    @Override
+    public Marker findByExamAndSubjectAndNumberAndUserId(int examId, String subjectCode, Integer number, Integer userId) {
+        return markerDao.findByExamIdAndSubjectCodeAndGroupNumberAndUserId(examId, subjectCode, number, userId);
+    }
+
+    @Override
+    public long countByUserId(Integer userId) {
+        return markerDao.countByUserId(userId);
+    }
+
+    @Transactional
+    @Override
+    public void deleteById(Integer markerId) {
+        markerDao.delete(markerId);
+    }
+
+    @Override
+    public void save(MarkGroup group, Integer[] userIds) {
+        List<Marker> list = new ArrayList<Marker>();
+        if (userIds != null && userIds.length > 0) {
+            for (Integer userId : userIds) {
+                Marker marker = this.findByExamAndSubjectAndNumberAndUserId(group.getExamId(), group.getSubjectCode(),
+                        group.getNumber(), userId);
+                if (marker == null) {
+                    marker = new Marker();
+                    marker.setExamId(group.getExamId());
+                    marker.setSubjectCode(group.getSubjectCode());
+                    marker.setGroupNumber(group.getNumber());
+                    marker.setUserId(userId);
+                    marker.setEnable(true);
+                    list.add(marker);
+                }
+            }
+        }
+        this.batchSave(list);
+    }
+
     // @Override
     // public List<Marker> findByOpenAccountAndMarkStatus(Integer accountId,
     // MarkStatus... status) {

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

@@ -0,0 +1,72 @@
+package cn.com.qmth.stmms.biz.exam.service.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import cn.com.qmth.stmms.biz.common.BaseQueryService;
+import cn.com.qmth.stmms.biz.exam.dao.SubjectUserDao;
+import cn.com.qmth.stmms.biz.exam.model.SubjectUser;
+import cn.com.qmth.stmms.biz.exam.service.SubjectUserService;
+
+@Service("subjectUserService")
+public class SubjectUserServiceImpl extends BaseQueryService<SubjectUser> implements SubjectUserService {
+
+    @Autowired
+    private SubjectUserDao subjectUserDao;
+
+    @Transactional
+    @Override
+    public SubjectUser save(SubjectUser u) {
+        return subjectUserDao.save(u);
+    }
+
+    @Override
+    public List<SubjectUser> findByUserId(Integer userId) {
+        return subjectUserDao.findByUserId(userId);
+    }
+
+    @Override
+    public List<SubjectUser> findBySubjectCode(String subjectCode) {
+        return subjectUserDao.findBySubjectCode(subjectCode);
+    }
+
+    @Override
+    public int batchSave(List<SubjectUser> list) {
+        subjectUserDao.save(list);
+        return list.size();
+    }
+
+    @Override
+    public SubjectUser findBySubjectCodeAndUserId(String subjectCode, Integer userId) {
+        return subjectUserDao.findBySubjectCodeAndUserId(subjectCode, userId);
+    }
+
+    @Override
+    public SubjectUser findById(Integer id) {
+        return subjectUserDao.findOne(id);
+    }
+
+    @Override
+    public void save(String subjectCode, Integer[] userIds) {
+        List<SubjectUser> list = new ArrayList<SubjectUser>();
+        if (userIds != null && userIds.length > 0) {
+            for (Integer userId : userIds) {
+                SubjectUser subjectUser = this.findBySubjectCodeAndUserId(subjectCode, userId);
+                if (subjectUser == null) {
+                    subjectUser = new SubjectUser();
+                    subjectUser.setSubjectCode(subjectCode);
+                    subjectUser.setUserId(userId);
+                    subjectUser.setEnable(true);
+                    list.add(subjectUser);
+                }
+            }
+        }
+        subjectUserDao.save(list);
+
+    }
+
+}

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

@@ -24,4 +24,6 @@ public interface UserDao extends PagingAndSortingRepository<User, Integer>, JpaS
 
     @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);
+
+    public User findByLoginNameAndSchoolId(String loginName, Integer schoolId);
 }

+ 0 - 14
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/user/model/User.java

@@ -66,12 +66,6 @@ public class User implements Serializable {
     @Column(name = "school_id")
     private Integer schoolId;
 
-    /**
-     * 绑定科目代码
-     */
-    @Column(name = "subject_code")
-    private String subjectCode;
-
     /**
      * 最后一次登录时间
      */
@@ -182,14 +176,6 @@ public class User implements Serializable {
         this.updatedTime = updatedTime;
     }
 
-    public String getSubjectCode() {
-        return subjectCode;
-    }
-
-    public void setSubjectCode(String subjectCode) {
-        this.subjectCode = subjectCode;
-    }
-
     public boolean isEnable() {
         return enable;
     }

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

@@ -35,4 +35,6 @@ public interface UserService {
 
     User findByMarkerId(Integer markerId);
 
+    User findByLoginNameAndSchoolId(String loginName, Integer schoolId);
+
 }

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

@@ -176,4 +176,9 @@ public class UserServiceImpl implements UserService {
     public User findByMarkerId(Integer markerId) {
         return userDao.findByMarkerId(markerId);
     }
+
+    @Override
+    public User findByLoginNameAndSchoolId(String loginName, Integer schoolId) {
+        return userDao.findByLoginNameAndSchoolId(loginName, schoolId);
+    }
 }

+ 6 - 10
stmms-common/src/main/java/cn/com/qmth/stmms/common/enums/MarkerExcelError.java

@@ -1,17 +1,13 @@
 package cn.com.qmth.stmms.common.enums;
 
 public enum MarkerExcelError {
-     MARKERED("评卷员已存在",0)
-    ,MARKERPWERROR("密码最少4位",1)
-    ,MARKERCODEMISS("课程代码不存在或该课程与原评卷员不匹配",2)
-    ,MARKER("通过",3)
-    ,MARKERNOTINFO("EXCEL为空",4)
-    ,MARKERNEWMISS("新评卷员已存在",5)
-    ,MARKERMISS("原评卷员不存在",6)
-    ,MARKERNOTCODE("课程代码不存在",7)
-    ,MARKERNOTGROUP("大题号不存在",8)
-    ;
+    MARKERNOTCODE("课程代码不存在", 0), 
+    MARKERNAMENULL("用户名为空", 1), 
+    MARKERNAMEUSED("用户名已被其他学校占用", 2), 
+    MARKERNOTGROUP("大题号不存在", 3);
+
     private String name;
+
     private int value;
 
     MarkerExcelError(String name, int value) {

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

@@ -113,13 +113,14 @@ public class AnswerCheckController extends BaseExamController {
     @RequestMapping("/save")
     @ResponseBody
     public Object save(HttpServletRequest request, @RequestParam Integer studentId, @RequestParam String answers,
-            @RequestParam(required = false) Boolean absent) {
+            @RequestParam(required = false) Boolean absent, @RequestParam String paperType) {
         ExamStudent student = studentService.findById(studentId);
         if (student != null) {
             if (absent != null) {
                 student.setAbsent(absent);
             }
             student.setAnswers(answers);
+            student.setPaperType(paperType);
             return saveUploadStudent(student);
         } else {
             return false;

+ 40 - 23
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/BaseExamController.java

@@ -5,29 +5,29 @@ import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
 
-import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
 import cn.com.qmth.stmms.admin.utils.SessionExamUtils;
 import cn.com.qmth.stmms.biz.common.BaseQuery;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
+import cn.com.qmth.stmms.biz.exam.model.SubjectUser;
 import cn.com.qmth.stmms.biz.exam.service.ExamService;
 import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
-import cn.com.qmth.stmms.biz.exam.service.query.ExamSubjectSearchQuery;
+import cn.com.qmth.stmms.biz.exam.service.SubjectUserService;
 import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
 import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
 import cn.com.qmth.stmms.common.controller.BaseController;
 import cn.com.qmth.stmms.common.domain.WebUser;
 import cn.com.qmth.stmms.common.enums.ExamStatus;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 public class BaseExamController extends BaseController {
 
     public static final int EXAM_SELECT_COUNT = 5;
@@ -43,6 +43,9 @@ public class BaseExamController extends BaseController {
     @Autowired
     private ExamService examService;
 
+    @Autowired
+    private SubjectUserService subjectUserService;
+
     protected int getSessionExamId(HttpServletRequest request) {
         return SessionExamUtils.getExamId(request);
     }
@@ -71,9 +74,12 @@ public class BaseExamController extends BaseController {
         if (wu.isSchoolAdmin() || wu.isSchoolViewer()) {
             list = subjectService.list(examId);
         } else if (wu.isSubjectHeader()) {
-            ExamSubject subject = subjectService.find(examId, wu.getUser().getSubjectCode());
-            if (subject != null) {
-                list.add(subject);
+            List<SubjectUser> subjectUsers = subjectUserService.findByUserId(wu.getId());
+            for (SubjectUser subjectUser : subjectUsers) {
+                ExamSubject subject = subjectService.find(examId, subjectUser.getSubjectCode());
+                if (subject != null) {
+                    list.add(subject);
+                }
             }
         }
         return list;
@@ -84,9 +90,12 @@ public class BaseExamController extends BaseController {
         if (wu.isSchoolAdmin()) {
             list = subjectService.list(examId, 0);
         } else if (wu.isSubjectHeader()) {
-            ExamSubject subject = subjectService.find(examId, wu.getUser().getSubjectCode());
-            if (subject != null && subject.getUploadCount() > 0) {
-                list.add(subject);
+            List<SubjectUser> subjectUsers = subjectUserService.findByUserId(wu.getId());
+            for (SubjectUser subjectUser : subjectUsers) {
+                ExamSubject subject = subjectService.find(examId, subjectUser.getSubjectCode());
+                if (subject != null) {
+                    list.add(subject);
+                }
             }
         }
         return list;
@@ -94,23 +103,31 @@ public class BaseExamController extends BaseController {
 
     @SuppressWarnings("rawtypes")
     protected BaseQuery subjectFilter(BaseQuery query, WebUser wu) {
-        if (wu.isSubjectHeader()) {
-            if (query instanceof ExamSubjectSearchQuery) {
-                ((ExamSubjectSearchQuery) query).setCode(wu.getUser().getSubjectCode());
-            } else {
-                try {
-                    BeanUtils.setProperty(query, "subjectCode", wu.getUser().getSubjectCode());
-                } catch (Exception e) {
-
-                }
-            }
-        }
+        // if (wu.isSubjectHeader()) {
+        // if (query instanceof ExamSubjectSearchQuery) {
+        // ((ExamSubjectSearchQuery)
+        // query).setCode(wu.getUser().getSubjectCode());
+        // } else {
+        // try {
+        // BeanUtils.setProperty(query, "subjectCode",
+        // wu.getUser().getSubjectCode());
+        // } catch (Exception e) {
+        //
+        // }
+        // }
+        // }
         return query;
     }
 
     protected boolean subjectCheck(String subjectCode, WebUser wu) {
         if (wu.isSubjectHeader()) {
-            return subjectCode.equals(wu.getUser().getSubjectCode());
+            List<SubjectUser> list = subjectUserService.findByUserId(wu.getId());
+            for (SubjectUser subjectUser : list) {
+                if (subjectUser.getSubjectCode().equals(subjectCode)) {
+                    return true;
+                }
+            }
+            return false;
         } else {
             return true;
         }

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

@@ -101,8 +101,11 @@ public class MarkController extends BaseExamController {
         WebUser wu = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
         List<MarkGroupDTO> result = new LinkedList<MarkGroupDTO>();
-        List<MarkGroup> list = wu.isSubjectHeader() ? groupService.findByExamAndSubject(examId, wu.getUser()
-                .getSubjectCode()) : groupService.findByExam(examId);
+        // FIXME
+        // List<MarkGroup> list = wu.isSubjectHeader() ?
+        // groupService.findByExamAndSubject(examId, wu.getUser()
+        // .getSubjectCode()) : groupService.findByExam(examId);
+        List<MarkGroup> list = groupService.findByExam(examId);
         for (MarkGroup group : list) {
             group.setMarkerCount(markerService.countByExamAndSubjectAndGroup(examId, group.getSubjectCode(),
                     group.getNumber()));
@@ -129,8 +132,11 @@ public class MarkController extends BaseExamController {
         WebUser wu = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
         List<MarkerInfoDTO> result = new LinkedList<MarkerInfoDTO>();
-        List<Marker> list = wu.isSubjectHeader() ? markerService.getMarkCount(examId, wu.getUser().getSubjectCode())
-                : markerService.getMarkCount(examId);
+        // FIXME
+        // List<Marker> list = wu.isSubjectHeader() ?
+        // markerService.getMarkCount(examId, wu.getUser().getSubjectCode())
+        // : markerService.getMarkCount(examId);
+        List<Marker> list = markerService.getMarkCount(examId);
         for (Marker marker : list) {
             MarkGroup group = groupService.findOne(examId, marker.getSubjectCode(), marker.getGroupNumber());
             group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,

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

@@ -107,9 +107,10 @@ public class MarkGroupController extends BaseExamController {
         if (subject == null) {
             return "redirect:/admin/exam/mark";
         }
-        if (wu.isSubjectHeader() && !subjectCode.equals(wu.getUser().getSubjectCode())) {
-            return "redirect:/admin/exam/mark";
-        }
+        // if (wu.isSubjectHeader() &&
+        // !subjectCode.equals(wu.getUser().getSubjectCode())) {
+        // return "redirect:/admin/exam/mark";
+        // }
         List<MarkGroup> list = groupService.findByExamAndSubject(examId, subjectCode);
         for (MarkGroup group : list) {
             group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode,

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

@@ -1,7 +1,10 @@
 package cn.com.qmth.stmms.admin.exam;
 
 import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import javax.servlet.http.HttpServletRequest;
@@ -10,10 +13,10 @@ import javax.servlet.http.HttpServletResponse;
 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;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -22,9 +25,9 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
+import cn.com.qmth.stmms.biz.exam.model.Exam;
 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;
@@ -37,16 +40,20 @@ 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.MarkLibraryService;
 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.biz.user.service.query.UserSearchQuery;
 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;
 
@@ -90,8 +97,8 @@ public class MarkerController extends BaseExamController {
     @Autowired
     private ExamQuestionService questionService;
 
-    @Value("${marker.showBtnImportAndBtnUpdateImport}")
-    private String showBtnImport;
+    @Autowired
+    private MarkLibraryService libraryService;
 
     @Logging(menu = "评卷员查询", type = LogType.QUERY)
     @RequestMapping
@@ -101,6 +108,10 @@ public class MarkerController extends BaseExamController {
         query.setExamId(examId);
         query.orderById();
         subjectFilter(query, wu);
+        if (StringUtils.isNotBlank(query.getLoginName())) {
+            User user = userService.findByLoginNameAndSchoolId(query.getLoginName(), wu.getUser().getSchoolId());
+            query.setUserId(user == null ? null : user.getId());
+        }
         query = markerService.findByQuery(query);
         for (Marker marker : query.getResult()) {
             marker.setSubject(subjectService.find(marker.getExamId(), marker.getSubjectCode()));
@@ -110,10 +121,10 @@ public class MarkerController extends BaseExamController {
             marker.setGroup(group);
             marker.setMarkedCount(markService.markedCount(marker));
             marker.setCurrentCount(markService.applyCount(marker));
+            marker.setUser(userService.findById(marker.getUserId()));
         }
         model.addAttribute("query", query);
         model.addAttribute("subjectList", getExamSubject(examId, wu));
-        model.addAttribute("showBtnImport", showBtnImport);
         return "modules/exam/markerList";
     }
 
@@ -127,8 +138,9 @@ 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());
+            User user = userService.findById(marker.getUserId());
+            obj.accumulate("loginName", user.getLoginName());
+            obj.accumulate("name", user.getName());
             array.add(obj);
         }
         return array;
@@ -158,68 +170,46 @@ public class MarkerController extends BaseExamController {
         return result;
     }
 
-    @RequestMapping("/batch-create")
-    @RoleRequire(Role.SCHOOL_ADMIN)
-    public String createInit(Model model, HttpServletRequest request,
-            @RequestParam(required = false) String subjectCode, @RequestParam(required = false) Integer groupNumber) {
-        int examId = getSessionExamId(request);
-        model.addAttribute("subjectList", getExamSubject(examId, RequestUtils.getWebUser(request)));
-        if (subjectCode != null) {
-            model.addAttribute("subjectCode", subjectCode);
-            model.addAttribute("groupList", groupService.findByExamAndSubject(examId, subjectCode));
-            if (groupNumber != null) {
-                model.addAttribute("groupNumber", groupNumber);
-            }
-        } else {
-            model.addAttribute("groupList", new ArrayList<MarkGroup>());
-        }
-        return "modules/exam/markerCreate";
-    }
-
-    @Logging(menu = "创建评卷员", type = LogType.ADD)
-    @RequestMapping(value = "/batch-create", method = RequestMethod.POST)
-    @RoleRequire(Role.SCHOOL_ADMIN)
-    public ModelAndView create(HttpServletRequest request, @RequestParam String subjectCode,
-            @RequestParam Integer groupNumber, @RequestParam Integer count,
-            @RequestParam(required = false) String password) {
-        int examId = getSessionExamId(request);
-        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);
-        }
-        view.addObject("subjectCode", subjectCode);
-        if (groupNumber > 0) {
-            view.addObject("groupNumber", groupNumber);
-        }
-        return view;
-    }
-
-    @Logging(menu = "评卷员重置", type = LogType.UPDATE)
-    @RequestMapping(value = "/reset")
-    @RoleRequire(Role.SCHOOL_ADMIN)
-    public String resetMarker(@RequestParam Integer id, Model model, RedirectAttributes redirectAttributes) {
-        Marker marker = markerService.findById(id);
-        if (marker != null) {
-            try {
-                lockService.waitlock(LockType.GROUP, marker.getExamId(), marker.getSubjectCode(),
-                        marker.getGroupNumber());
-                lockService.waitlock(LockType.MARKER, marker.getId());
+    // @RequestMapping("/batch-create")
+    // @RoleRequire(Role.SCHOOL_ADMIN)
+    // public String createInit(Model model, HttpServletRequest request,
+    // @RequestParam(required = false) String subjectCode,
+    // @RequestParam(required = false) Integer groupNumber) {
+    // int examId = getSessionExamId(request);
+    // model.addAttribute("subjectList", getExamSubject(examId,
+    // RequestUtils.getWebUser(request)));
+    // if (subjectCode != null) {
+    // model.addAttribute("subjectCode", subjectCode);
+    // model.addAttribute("groupList", groupService.findByExamAndSubject(examId,
+    // subjectCode));
+    // if (groupNumber != null) {
+    // model.addAttribute("groupNumber", groupNumber);
+    // }
+    // } else {
+    // model.addAttribute("groupList", new ArrayList<MarkGroup>());
+    // }
+    // return "modules/exam/markerCreate";
+    // }
 
-                markService.resetMarker(marker);
-            } catch (Exception e) {
-                log.error("reset marker error", e);
-                throw new RuntimeException("重置评卷员失败", e);
-            } finally {
-                lockService.unlock(LockType.MARKER, marker.getId());
-                lockService
-                        .unlock(LockType.GROUP, marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
-            }
-        }
-        redirectAttributes.addAttribute("subjectCode", marker.getSubjectCode());
-        redirectAttributes.addAttribute("groupNumber", marker.getGroupNumber());
-        return "redirect:/admin/exam/marker";
-    }
+    // @Logging(menu = "创建评卷员", type = LogType.ADD)
+    // @RequestMapping(value = "/batch-create", method = RequestMethod.POST)
+    // @RoleRequire(Role.SCHOOL_ADMIN)
+    // public ModelAndView create(HttpServletRequest request, @RequestParam
+    // String subjectCode,
+    // @RequestParam Integer groupNumber, @RequestParam Integer count,
+    // @RequestParam(required = false) String password) {
+    // int examId = getSessionExamId(request);
+    // 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);
+    // }
+    // view.addObject("subjectCode", subjectCode);
+    // if (groupNumber > 0) {
+    // view.addObject("groupNumber", groupNumber);
+    // }
+    // return view;
+    // }
 
     @Logging(menu = "评卷员重置", type = LogType.UPDATE)
     @RequestMapping(value = "/reset", method = RequestMethod.POST)
@@ -270,44 +260,49 @@ public class MarkerController extends BaseExamController {
         return obj;
     }
 
-    @Logging(menu = "评卷员导出", type = LogType.EXPORT)
-    @RequestMapping(value = "/export", method = RequestMethod.POST)
-    public String exportFile(MarkerSearchQuery query, HttpServletRequest request, HttpServletResponse response,
-            RedirectAttributes redirectAttributes) {
-        WebUser wu = RequestUtils.getWebUser(request);
-        int examId = getSessionExamId(request);
-        query.setExamId(examId);
-        try {
-            query.setPageNumber(1);
-            query.setPageSize(Integer.MAX_VALUE);
-            query.setExamId(examId);
-            query.orderById();
-            subjectFilter(query, wu);
-            String fileName = "评卷员账号.xlsx";
-            query = markerService.findByQuery(query);
-            for (Marker marker : query.getResult()) {
-                ExamSubject subject = subjectService.find(examId, marker.getSubjectCode());
-                if (subject != null) {
-                    marker.setSubjectName(subject.getCode() + "-" + subject.getName());
-                } else {
-                    marker.setSubjectName("");
-                }
-                MarkGroup group = groupService.findOne(examId, marker.getSubjectCode(), marker.getGroupNumber());
-                if (group != null) {
-                    group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
-                            group.getSubjectCode(), false, group.getNumber()));
-                    marker.setGroupName(group.getNumber() + "-" + group.getTitle());
-                } else {
-                    marker.setGroupName("");
-                }
-            }
-            new ExportExcel("评卷员数据", Marker.class).setDataList(query.getResult()).write(response, fileName).dispose();
-            return null;
-        } catch (Exception e) {
-            addMessage(redirectAttributes, "导出评卷员失败!" + e.getMessage());
-        }
-        return "redirect:/admin/exam/marker?repage";
-    }
+    // @Logging(menu = "评卷员导出", type = LogType.EXPORT)
+    // @RequestMapping(value = "/export", method = RequestMethod.POST)
+    // public String exportFile(MarkerSearchQuery query, HttpServletRequest
+    // request, HttpServletResponse response,
+    // RedirectAttributes redirectAttributes) {
+    // WebUser wu = RequestUtils.getWebUser(request);
+    // int examId = getSessionExamId(request);
+    // query.setExamId(examId);
+    // try {
+    // query.setPageNumber(1);
+    // query.setPageSize(Integer.MAX_VALUE);
+    // query.setExamId(examId);
+    // query.orderById();
+    // subjectFilter(query, wu);
+    // String fileName = "评卷员账号.xlsx";
+    // query = markerService.findByQuery(query);
+    // for (Marker marker : query.getResult()) {
+    // ExamSubject subject = subjectService.find(examId,
+    // marker.getSubjectCode());
+    // if (subject != null) {
+    // marker.setSubjectName(subject.getCode() + "-" + subject.getName());
+    // } else {
+    // marker.setSubjectName("");
+    // }
+    // MarkGroup group = groupService.findOne(examId, marker.getSubjectCode(),
+    // marker.getGroupNumber());
+    // if (group != null) {
+    // group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
+    // group.getSubjectCode(), false, group.getNumber()));
+    // marker.setGroupName(group.getNumber() + "-" + group.getTitle());
+    // } else {
+    // marker.setGroupName("");
+    // }
+    // }
+    // new ExportExcel("评卷员数据",
+    // Marker.class).setDataList(query.getResult()).write(response,
+    // fileName).dispose();
+    // return null;
+    // } catch (Exception e) {
+    // addMessage(redirectAttributes, "导出评卷员失败!" + e.getMessage());
+    // }
+    // return "redirect:/admin/exam/marker?repage";
+    // }
 
     @Logging(menu = "评卷员重置密码", type = LogType.UPDATE)
     @RequestMapping(value = "/reSetPassword", method = RequestMethod.POST)
@@ -362,101 +357,160 @@ public class MarkerController extends BaseExamController {
     @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);
+        WebUser wu = RequestUtils.getWebUser(request);
+        Integer schoolId = wu.getUser().getSchoolId();
+        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);
+
+            Map<String, User> userMap = new HashMap<String, User>();
+            Map<String, ExamSubject> subjectMap = new HashMap<String, ExamSubject>();
+            Map<String, MarkGroup> groupMap = new HashMap<String, MarkGroup>();
+            List<Marker> saveList = new ArrayList<Marker>();
+
+            for (Marker marker : list) {
+                if (StringUtils.isBlank(marker.getLoginName())) {
+                    failureMsg.append("<br/>评卷员 " + marker.getLoginName() + "," + marker.getSubjectCode()
+                            + MarkerExcelError.MARKERNAMENULL.getName());
+                    failureNum++;
+                    continue;
+                }
+                ExamSubject examSubject = subjectMap.get(marker.getSubjectCode());
+                if (examSubject == null) {
+                    examSubject = subjectService.find(examId, marker.getSubjectCode());
+                    if (examSubject == null) {
+                        failureMsg.append("<br/>评卷员 " + marker.getLoginName() + "," + marker.getSubjectCode()
+                                + MarkerExcelError.MARKERNOTCODE.getName());
+                        failureNum++;
+                        continue;
+                    }
+                }
+                MarkGroup markGroup = groupMap.get(marker.getSubjectCode() + "-" + marker.getNumber());
+                if (markGroup == null) {
+                    markGroup = groupService.findOne(examId, marker.getSubjectCode(), marker.getNumber());
+                    if (markGroup == null) {
+                        failureMsg.append("<br/>评卷员 " + marker.getLoginName() + "," + marker.getSubjectCode() + ","
+                                + marker.getNumber() + MarkerExcelError.MARKERNOTGROUP.getName());
+                        failureNum++;
+                        continue;
+                    }
+                }
+                User user = userMap.get(marker.getLoginName().trim());
+                if (user == null) {
+                    user = userService.findByLoginName(marker.getLoginName().trim());
+                    if (user != null && !schoolId.equals(user.getSchoolId())) {
+                        failureMsg.append("<br/>评卷员 " + marker.getLoginName() + "," + marker.getSubjectCode()
+                                + MarkerExcelError.MARKERNAMEUSED.getName());
+                        failureNum++;
+                        continue;
+                    }
+                    if (user == null) {
+                        user = getUser(userMap, marker.getLoginName().trim(), schoolId);
+                    }
+                }
+                subjectMap.put(examSubject.getCode(), examSubject);
+                groupMap.put(markGroup.getSubjectCode() + "-" + markGroup.getNumber(), markGroup);
+                marker = getMarker(examId, examSubject.getCode(), markGroup.getNumber(), user.getId());
+                saveList.add(marker);
+            }
+            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;
     }
 
-    // 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 Marker getMarker(int examId, String subjectCode, Integer number, Integer userId) {
+        Marker marker = markerService.findByExamAndSubjectAndNumberAndUserId(examId, subjectCode, number, userId);
+        if (marker == null) {
+            marker = new Marker();
+            marker.setExamId(examId);
+            marker.setSubjectCode(subjectCode);
+            marker.setUserId(userId);
+            marker.setEnable(true);
+        }
+        return marker;
+    }
 
-    // 校验excel中数据
+    private User getUser(Map<String, User> saveMap, String loginName, Integer schoolId) {
+        User user = saveMap.get(loginName);
+        if (user == null) {
+            user = new User();
+            user.setLoginName(loginName);
+            user.setName(loginName);
+            user.setPassword(Md5EncryptUtils.md5(USER_PASSWORD));
+            user.setRole(Role.MARKER);
+            user.setSchoolId(schoolId);
+            user.setEnable(true);
+            user.setCreatedTime(new Date());
+            userService.save(user);
+            saveMap.put(loginName, user);
+        }
+        return user;
+    }
+
+    @RequestMapping("/save")
+    public String add(Model model, HttpServletRequest request, UserSearchQuery query, @RequestParam String subjectCode) {
+        int examId = getSessionExamId(request);
+        if (examId > 0) {
+            Exam exam = examService.findById(examId);
+            query.setSchoolId(exam.getSchoolId());
+            query.setRole(Role.MARKER);
+            query = userService.findByQuery(query);
+            model.addAttribute("query", query);
+            model.addAttribute("subject", subjectService.find(examId, subjectCode));
+            return "modules/exam/markerSubject";
+        } else {
+            return "redirect:/admin/exam/list";
+        }
+    }
+
+    @Logging(menu = "评卷员绑定", type = LogType.ADD)
+    @RequestMapping(value = "/add", method = RequestMethod.POST)
+    public String save(@RequestParam String subjectCode, @RequestParam Integer groupNumber,
+            @RequestParam Integer[] userIds, HttpServletRequest request, RedirectAttributes redirectAttributes) {
+        int examId = getSessionExamId(request);
+        if (examId > 0) {
+            MarkGroup group = groupService.findOne(examId, subjectCode, groupNumber);
+            if (group != null) {
+                markerService.save(group, userIds);
+                addMessage(redirectAttributes, subjectCode + "设置成功");
+                return "redirect:/admin/exam/marker?subjectCode=" + subjectCode + "&groupNumber=" + groupNumber;
+            }
+            addMessage(redirectAttributes, "科目不存在");
+            return "redirect:/admin/exam/marker";
+        } else {
+            return "redirect:/admin/exam/list";
+        }
+    }
+
+    @RequestMapping("/delete")
+    public String delete(@RequestParam Integer markerId, RedirectAttributes redirectAttributes) {
+        Marker marker = markerService.findById(markerId);
+        if (marker == null) {
+            return "redirect:/admin/exam/marker";
+        }
+        long count = libraryService.countByMarker(markerId);
+        String subjectCode = marker.getSubjectCode();
+        Integer groupNumber = marker.getGroupNumber();
+        if (count > 0) {
+            addMessage(redirectAttributes, "删除评卷员失败,该评卷员已开始评卷");
+        } else {
+            markerService.deleteById(markerId);
+        }
+        return "redirect:/admin/exam/marker?subjectCode=" + subjectCode + "&groupNumber=" + groupNumber;
+    }
 
     @RequestMapping(value = "/class/{markerId}", method = RequestMethod.GET)
     public String classAdd(@PathVariable Integer markerId, Model model, RedirectAttributes redirectAttributes) {

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

@@ -103,9 +103,10 @@ public class PaperController extends BaseExamController {
             @RequestParam(required = false) Boolean objective) {
         WebUser wu = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
-        if (wu.isSubjectHeader() && !subjectCode.equals(wu.getUser().getSubjectCode())) {
-            return "redirect:/admin/exam/paper";
-        }
+        // if (wu.isSubjectHeader() &&
+        // !subjectCode.equals(wu.getUser().getSubjectCode())) {
+        // return "redirect:/admin/exam/paper";
+        // }
         ExamSubject subject = subjectService.find(examId, subjectCode);
         if (subject != null) {
             List<ExamQuestion> list = new LinkedList<ExamQuestion>();

+ 6 - 6
stmms-web/src/main/java/cn/com/qmth/stmms/admin/report/ReportSubjectClassController.java

@@ -46,9 +46,9 @@ public class ReportSubjectClassController extends BaseExamController {
     public String list(Model model, HttpServletRequest request, ReportSubjectQuery query) {
         WebUser webuser = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
-        if (webuser.isSubjectHeader()) {
-            query.setSubjectCode(webuser.getUser().getSubjectCode());
-        }
+        // if (webuser.isSubjectHeader()) {
+        // query.setSubjectCode(webuser.getUser().getSubjectCode());
+        // }
         query.setExamId(examId);
         query.setPageNumber(1);
         query.setPageSize(Integer.MAX_VALUE);
@@ -67,9 +67,9 @@ public class ReportSubjectClassController extends BaseExamController {
             RedirectAttributes redirectAttributes) {
         WebUser webuser = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
-        if (webuser.isSubjectHeader()) {
-            query.setSubjectCode(webuser.getUser().getSubjectCode());
-        }
+        // if (webuser.isSubjectHeader()) {
+        // query.setSubjectCode(webuser.getUser().getSubjectCode());
+        // }
         query.setExamId(examId);
         query.setPageNumber(1);
         query.setPageSize(Integer.MAX_VALUE);

+ 6 - 7
stmms-web/src/main/java/cn/com/qmth/stmms/admin/report/ReportSubjectCollegeController.java

@@ -46,9 +46,9 @@ public class ReportSubjectCollegeController extends BaseExamController {
     public String list(Model model, HttpServletRequest request, ReportSubjectQuery query) {
         WebUser webuser = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
-        if (webuser.isSubjectHeader()) {
-            query.setSubjectCode(webuser.getUser().getSubjectCode());
-        }
+        // if (webuser.isSubjectHeader()) {
+        // query.setSubjectCode(webuser.getUser().getSubjectCode());
+        // }
         query.setExamId(examId);
         query.setPageNumber(1);
         query.setPageSize(Integer.MAX_VALUE);
@@ -67,10 +67,9 @@ public class ReportSubjectCollegeController extends BaseExamController {
             RedirectAttributes redirectAttributes) {
         WebUser webuser = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
-        if (webuser.isSubjectHeader()) {
-            query.setSubjectCode(webuser.getUser().getSubjectCode());
-        }
-        query.setExamId(examId);
+        // if (webuser.isSubjectHeader()) {
+        // query.setSubjectCode(webuser.getUser().getSubjectCode());
+        // }
         query.setPageNumber(1);
         query.setPageSize(Integer.MAX_VALUE);
         List<ReportSubjectCollege> list = reportSubjectCollegeService.findByQuery(query);

+ 6 - 6
stmms-web/src/main/java/cn/com/qmth/stmms/admin/report/ReportSubjectController.java

@@ -46,9 +46,9 @@ public class ReportSubjectController extends BaseExamController {
         WebUser webuser = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
         query.setExamId(examId);
-        if (webuser.isSubjectHeader()) {
-            query.setSubjectCode(webuser.getUser().getSubjectCode());
-        }
+//        if (webuser.isSubjectHeader()) {
+//            query.setSubjectCode(webuser.getUser().getSubjectCode());
+//        }
         query = reportSubjectService.findByQuery(query);
         if (query.getCurrentCount() > 0) {
             model.addAttribute("list", query.getResult());
@@ -64,9 +64,9 @@ public class ReportSubjectController extends BaseExamController {
             RedirectAttributes redirectAttributes) {
         WebUser webuser = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
-        if (webuser.isSubjectHeader()) {
-            query.setSubjectCode(webuser.getUser().getSubjectCode());
-        }
+//        if (webuser.isSubjectHeader()) {
+//            query.setSubjectCode(webuser.getUser().getSubjectCode());
+//        }
         query.setExamId(examId);
         query.setPageNumber(1);
         query.setPageSize(Integer.MAX_VALUE);

+ 6 - 6
stmms-web/src/main/java/cn/com/qmth/stmms/admin/report/ReportSubjectGroupController.java

@@ -51,9 +51,9 @@ public class ReportSubjectGroupController extends BaseExamController {
     public String list(Model model, HttpServletRequest request, ReportSubjectQuery query) {
         WebUser webuser = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
-        if (webuser.isSubjectHeader()) {
-            query.setSubjectCode(webuser.getUser().getSubjectCode());
-        }
+        // if (webuser.isSubjectHeader()) {
+        // query.setSubjectCode(webuser.getUser().getSubjectCode());
+        // }
         query.setExamId(examId);
         query.setPageNumber(1);
         query.setPageSize(Integer.MAX_VALUE);
@@ -74,9 +74,9 @@ public class ReportSubjectGroupController extends BaseExamController {
             RedirectAttributes redirectAttributes) {
         WebUser webuser = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
-        if (webuser.isSubjectHeader()) {
-            query.setSubjectCode(webuser.getUser().getSubjectCode());
-        }
+        // if (webuser.isSubjectHeader()) {
+        // query.setSubjectCode(webuser.getUser().getSubjectCode());
+        // }
         query.setExamId(examId);
         query.setPageNumber(1);
         query.setPageSize(Integer.MAX_VALUE);

+ 6 - 6
stmms-web/src/main/java/cn/com/qmth/stmms/admin/report/ReportSubjectQuestionController.java

@@ -50,9 +50,9 @@ public class ReportSubjectQuestionController extends BaseExamController {
     public String list(Model model, HttpServletRequest request, ReportSubjectQuery query) {
         WebUser webuser = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
-        if (webuser.isSubjectHeader()) {
-            query.setSubjectCode(webuser.getUser().getSubjectCode());
-        }
+        // if (webuser.isSubjectHeader()) {
+        // query.setSubjectCode(webuser.getUser().getSubjectCode());
+        // }
         query.setExamId(examId);
         query.setPageNumber(1);
         query.setPageSize(Integer.MAX_VALUE);
@@ -72,9 +72,9 @@ public class ReportSubjectQuestionController extends BaseExamController {
             RedirectAttributes redirectAttributes) {
         WebUser webuser = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
-        if (webuser.isSubjectHeader()) {
-            query.setSubjectCode(webuser.getUser().getSubjectCode());
-        }
+        // if (webuser.isSubjectHeader()) {
+        // query.setSubjectCode(webuser.getUser().getSubjectCode());
+        // }
         query.setExamId(examId);
         query.setPageNumber(1);
         query.setPageSize(Integer.MAX_VALUE);

+ 6 - 7
stmms-web/src/main/java/cn/com/qmth/stmms/admin/report/ReportSubjectRangeController.java

@@ -45,11 +45,10 @@ public class ReportSubjectRangeController extends BaseExamController {
     public String list(Model model, HttpServletRequest request, ReportSubjectRangeQuery query) {
         WebUser webuser = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
-        // reportSubjectRangeService.saveReportRangeSubjectData(1);
         query.setExamId(examId);
-        if (webuser.isSubjectHeader()) {
-            query.setSubjectCode(webuser.getUser().getSubjectCode());
-        }
+        // if (webuser.isSubjectHeader()) {
+        // query.setSubjectCode(webuser.getUser().getSubjectCode());
+        // }
         query = reportSubjectRangeService.findByQuery(query);
         if (query.getCurrentCount() > 0) {
             model.addAttribute("list", query.getResult());
@@ -65,9 +64,9 @@ public class ReportSubjectRangeController extends BaseExamController {
             RedirectAttributes redirectAttributes) {
         WebUser webuser = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
-        if (webuser.isSubjectHeader()) {
-            query.setSubjectCode(webuser.getUser().getSubjectCode());
-        }
+        // if (webuser.isSubjectHeader()) {
+        // query.setSubjectCode(webuser.getUser().getSubjectCode());
+        // }
         query.setExamId(examId);
         query.setPageNumber(1);
         query.setPageSize(Integer.MAX_VALUE);

+ 6 - 6
stmms-web/src/main/java/cn/com/qmth/stmms/admin/report/ReportSubjectTeacherClassController.java

@@ -51,9 +51,9 @@ public class ReportSubjectTeacherClassController extends BaseExamController {
     public String list(Model model, HttpServletRequest request, ReportSubjectQuery query) {
         WebUser webuser = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
-        if (webuser.isSubjectHeader()) {
-            query.setSubjectCode(webuser.getUser().getSubjectCode());
-        }
+        // if (webuser.isSubjectHeader()) {
+        // query.setSubjectCode(webuser.getUser().getSubjectCode());
+        // }
         query.setExamId(examId);
         query.setPageNumber(1);
         query.setPageSize(Integer.MAX_VALUE);
@@ -76,9 +76,9 @@ public class ReportSubjectTeacherClassController extends BaseExamController {
             RedirectAttributes redirectAttributes) {
         WebUser webuser = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
-        if (webuser.isSubjectHeader()) {
-            query.setSubjectCode(webuser.getUser().getSubjectCode());
-        }
+        // if (webuser.isSubjectHeader()) {
+        // query.setSubjectCode(webuser.getUser().getSubjectCode());
+        // }
         query.setExamId(examId);
         query.setPageNumber(1);
         query.setPageSize(Integer.MAX_VALUE);

+ 6 - 6
stmms-web/src/main/java/cn/com/qmth/stmms/admin/report/ReportSubjectTeacherController.java

@@ -46,9 +46,9 @@ public class ReportSubjectTeacherController extends BaseExamController {
     public String list(Model model, HttpServletRequest request, ReportSubjectQuery query) {
         WebUser webuser = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
-        if (webuser.isSubjectHeader()) {
-            query.setSubjectCode(webuser.getUser().getSubjectCode());
-        }
+        // if (webuser.isSubjectHeader()) {
+        // query.setSubjectCode(webuser.getUser().getSubjectCode());
+        // }
         query.setExamId(examId);
         query.setPageNumber(1);
         query.setPageSize(Integer.MAX_VALUE);
@@ -67,9 +67,9 @@ public class ReportSubjectTeacherController extends BaseExamController {
             RedirectAttributes redirectAttributes) {
         WebUser webuser = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
-        if (webuser.isSubjectHeader()) {
-            query.setSubjectCode(webuser.getUser().getSubjectCode());
-        }
+        // if (webuser.isSubjectHeader()) {
+        // query.setSubjectCode(webuser.getUser().getSubjectCode());
+        // }
         query.setExamId(examId);
         query.setPageNumber(1);
         query.setPageSize(Integer.MAX_VALUE);

+ 218 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/admin/user/SubjectUserController.java

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

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

@@ -14,6 +14,7 @@ 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.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.biz.user.service.query.UserSearchQuery;
@@ -29,11 +30,14 @@ import cn.com.qmth.stmms.common.utils.RequestUtils;
 @RequestMapping("/admin/user")
 public class UserController extends BaseController {
 
-    public static Role[] roleList = { Role.SCANNER, Role.SUBJECT_HEADER };
+    public static Role[] roleList = { Role.SCANNER, Role.SUBJECT_HEADER, Role.MARKER };
 
     @Autowired
     private UserService userService;
 
+    @Autowired
+    private MarkerService markerService;
+
     @Logging(menu = "查询用户", type = LogType.QUERY)
     @RequestMapping("/list")
     @RoleRequire(Role.SCHOOL_ADMIN)
@@ -57,7 +61,8 @@ public class UserController extends BaseController {
         String message = null;
         if (user == null) {
             message = "找不到指定用户";
-        } else if (!user.getSchoolId().equals(current.getSchoolId()) || user.getId().equals(current.getId())) {
+        } else if (!user.getSchoolId().equals(current.getSchoolId()) || user.getId().equals(current.getId())
+                || markerService.countByUserId(id) > 0) {
             message = "不能删除指定用户";
         } else {
             userService.delete(user);
@@ -123,11 +128,6 @@ public class UserController extends BaseController {
             if (StringUtils.isNotBlank(user.getPassword())) {
                 previous.setPassword(Md5EncryptUtils.md5(user.getPassword()));
             }
-            if (previous.getRole() != Role.SUBJECT_HEADER) {
-                previous.setSubjectCode(null);
-            } else {
-                previous.setSubjectCode(user.getSubjectCode());
-            }
             previous.setEnable(user.isEnable());
             String message = validate(previous);
             if (message == null) {
@@ -153,8 +153,6 @@ public class UserController extends BaseController {
             message = "名称不能为空";
         } else if (StringUtils.isBlank(user.getPassword())) {
             message = "密码不能为空";
-        } else if (user.getRole() == Role.SUBJECT_HEADER && StringUtils.isBlank(user.getSubjectCode())) {
-            message = "科组长必须绑定科目代码";
         }
         return message;
     }

+ 5 - 5
stmms-web/src/main/java/cn/com/qmth/stmms/card/CardController.java → stmms-web/src/main/java/cn/com/qmth/stmms/student/StudentScoreController.java

@@ -1,4 +1,4 @@
-package cn.com.qmth.stmms.card;
+package cn.com.qmth.stmms.student;
 
 import java.util.List;
 
@@ -19,11 +19,11 @@ 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 {
+@Controller("studentScoreController")
+@RequestMapping("/student")
+public class StudentScoreController {
 
-    protected static Logger log = LoggerFactory.getLogger(CardController.class);
+    protected static Logger log = LoggerFactory.getLogger(StudentScoreController.class);
 
     @Autowired
     private SchoolService schoolService;

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

@@ -86,6 +86,12 @@
                 </select>
                 <input id="subjectiveScoreInput" class="input-large"/>
             </div>
+        </div>
+		<div class="control-group">
+            <label class="control-label">试卷类型</label>
+            <div class="controls">
+                <input id="paperType" name="paperType" class="input-large" maxlength="1"/>
+            </div>
         </div>
         <div class="control-group">
             <label class="control-label">查询结果</label>
@@ -106,6 +112,16 @@ $('#count-button').click(function(){
     check('campusName');
     check('objectiveScore');
     check('subjectiveScore');
+    var paperType = $('#paperType').val();
+    if(paperType.length>1){
+    	return;
+    }
+    var re = new RegExp("^[a-zA-Z#]+$"); 
+    if(paperType.length!=0 && !re.test(paperType)){
+    	alert("试卷类型仅支持英文或#!");
+    	return;
+    }
+    
     
     //alert($("#searchForm").serialize());
     $.post('${ctx}/admin/exam/check/answer/count', $("#searchForm").serialize(), function(result){

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

@@ -50,6 +50,10 @@
                                 <label>
                                 <span class="radio"><input type="button" class="absent-select" data-absent="false"></span><span>否</span>
                                 </label>
+                                <span class="b">试卷类型:</span>
+                                <label>
+                                <input id="paperType" name="paperType" class="input-large" maxlength="1"/>
+                                </label>
                             </div>
                             <div id="answer-content">
                             </div>
@@ -168,6 +172,7 @@ function render(){
     }else{
         $('.absent-select[data-absent="false"]').addClass('on');
     }
+    $('.form-t').find('input').on('input', onPaperTypeInput);
     
     var count = {};
     for(var i=0;i<student.answers.length;i++){
@@ -265,5 +270,18 @@ function onAnswerInput(){
     }
     $(this).val(value);
 }
+function onPaperTypeInput(){
+    var value = $(this).val();
+    if(value.length>1){
+        value = value.substring(value.length-1);
+    }
+    var re = new RegExp("^[a-zA-Z#]+$"); 
+    if(value.length==0 || re.test(value)==false){
+        value='';
+    }else{
+        value = value.toUpperCase();
+    }
+    $(this).val(value);
+}
 </script>
 </html>

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

@@ -95,10 +95,11 @@
 											<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-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/reportSubject" target="mainFrame" ><i class="icon-signal"></i>总量分析</a></li>
+                                            <li><a href="${ctx}/admin/exam/reportSubjectCollege" target="mainFrame" ><i class="icon-asterisk"></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>			
+											<li><a href="${ctx}/admin/operation/log" target="mainFrame" ><i class="icon-tasks"></i>操作日志</a></li>			
 											</c:if>
 											
 											<c:if test="${web_user.subjectHeader==true}">
@@ -107,7 +108,8 @@
                                             <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-signal"></i>成绩分析</a></li>     
+                                            <li><a href="${ctx}/admin/exam/reportSubject" target="mainFrame" ><i class="icon-signal"></i>总量分析</a></li> 
+                                            <li><a href="${ctx}/admin/exam/reportSubjectCollege" target="mainFrame" ><i class="icon-asterisk"></i>科目分析</a></li>         
                                             </c:if>
                                             
                                             <c:if test="${web_user.schoolViewer==true}">

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

@@ -139,14 +139,10 @@
         <input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
         <c:if test="${web_user.schoolAdmin==true}">
             &nbsp;
-            <a href="${ctx}/admin/exam/marker/batch-create" class="btn btn-success">新增</a>
+            <a href="${ctx}/admin/exam/marker/add" class="btn btn-success">新增</a>
         </c:if>
-        &nbsp;
-        <c:if test="${showBtnImport}">
             &nbsp;<input id="btnImport" class="btn" type="button" value="导入"/>
-            <!-- &nbsp;<input id="btnUpdateImport" class="btn" type="button" value="批量修改评卷员账号"/> -->
-        </c:if>
-        <input id="btnExport" class="btn" type="button" value="导出"/>
+    <!--     <input id="btnExport" class="btn" type="button" value="导出"/> -->
     </div>
 </form>
 <tags:message content="${message}"/>
@@ -157,13 +153,11 @@
         <th>大题</th>
         <th>登录名</th>
         <th>姓名</th>
-        <th>密码</th>
         <th>状态</th>
         <th>已评数量</th>
         <th>正在评卷</th>
         <th>任务数</th>
         <th>绑定班级</th>
-        <th>绑定账号</th>
         <th>操作</th>
     </tr>
     </thead>
@@ -180,21 +174,14 @@
                     ${marker.group.number}-${marker.group.title}
                 </c:if>
             </td>
-            <td>${marker.loginName}</td>
-            <td>${marker.name}</td>
-            <td>${marker.password}</td>
+            <td>${marker.user.loginName}</td>
+            <td>${marker.user.name}</td>
             <td>${marker.enable eq true ? "启用" : "禁用"}</td>
             <td>${marker.markedCount}</td>
             <td>${marker.currentCount}</td>
             <td>${marker.topCount}</td>
             <td><a href="${ctx}/admin/exam/marker/class/${marker.id}"><c:if test="${marker.classCount == null}">0</c:if>
                     ${marker.classCount}</a></td>
-            <td>
-                <a href="${ctx}/admin/exam/marker/account/${marker.id}">
-                    <c:if test="${marker.openAccountId == null}">#</c:if>
-                    <c:if test="${marker.openAccount != null}">${marker.openAccount.name}</c:if>
-                </a>
-            </td>
             <td>
                 <c:if test="${web_user.schoolAdmin==true}">
                     <a href="javascript:void(0)" class="reset-button" data-id="${marker.id}">重置</a>

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

@@ -56,6 +56,13 @@
 			<label> 到&nbsp;&nbsp;&nbsp;</label>
 			<input type="text"  number="true" id="endScroe" name="endScroe"  value="${query.endScroe}"  class="input-mini"/>
 			
+			<label>学院</label>
+			<input type="text" name="college" value="${query.college}"  maxlength="10" class="input-mini"/>
+			<label>班级</label>
+			<input type="text" name="className" value="${query.className}"  maxlength="10" class="input-mini"/>
+			<label>任课老师</label>
+			<input type="text" name="teacher" value="${query.teacher}"  maxlength="10" class="input-mini"/>
+			
 			<input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
 			&nbsp;
 			<c:if test="${!web_user.schoolViewer }">

+ 0 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/report/reportSubject.jsp

@@ -11,7 +11,6 @@
 </head>
 <body>
 	<ul class="nav nav-tabs">
-		<li><a href="${ctx}/admin/exam/reportSubjectRange">课程分段统计</a></li>
 		<li class="active"><a href="${ctx}/admin/exam/reportSubject">课程总量统计</a></li>
 	</ul>
 	<form id="searchForm" action="${ctx}/admin/exam/reportSubject" method="post" class="breadcrumb form-search">

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

@@ -80,6 +80,10 @@
 </table>
 <script type="text/javascript">
 $("#export-button").click(function(){
+	if ($("#subjectCode").val() == null || $("#subjectCode").val() == '') {
+        alert('请选择科目');
+        return;
+    }
 	$("#searchForm").attr("action","${ctx}/admin/exam/reportSubjectCollege/export");
 	$("#searchForm").submit();
 });

+ 13 - 2
stmms-web/src/main/webapp/WEB-INF/views/modules/report/reportSubjectRange.jsp

@@ -17,8 +17,15 @@
 </head>
 <body>
 <ul class="nav nav-tabs">
-    <li class="active"><a href="${ctx}/admin/exam/reportSubjectRange">课程分段统计</a></li>
-    <li><a href="${ctx}/admin/exam/reportSubject">课程总量统计</a></li>
+    <li><a href="${ctx}/admin/exam/reportSubjectCollege?subjectCode=${query.subjectCode}">学院分析</a></li>
+    <li><a href="${ctx}/admin/exam/reportSubjectTeacher?subjectCode=${query.subjectCode}">任课老师分析</a></li>
+    <li><a href="${ctx}/admin/exam/reportSubjectClass?subjectCode=${query.subjectCode}">班级分析</a></li>
+    <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=true">客观题分析</a>
+    </li>
+    <li><a href="${ctx}/admin/exam/reportSubjectQuestion?subjectCode=${query.subjectCode}&objective=false">主观题分析</a>
+    </li>
+    <li><a href="${ctx}/admin/exam/reportSubjectGroup?subjectCode=${query.subjectCode}">大题统计分析</a></li>
+    <li class="active"><a href="${ctx}/admin/exam/reportSubjectRange">分段统计</a></li>
 </ul>
 <form id="searchForm" action="${ctx}/admin/exam/reportSubjectRange" method="post" class="breadcrumb form-search">
     <input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>
@@ -97,6 +104,10 @@
 <div class="pagination">${query}</div>
 <script type="text/javascript">
 $("#export-button").click(function(){
+	if ($("#subjectCode").val() == null || $("#subjectCode").val() == '') {
+        alert('请选择科目');
+        return;
+    }
 	$("#searchForm").attr("action","${ctx}/admin/exam/reportSubjectRange/export");
 	$("#searchForm").submit();
 });

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

@@ -87,6 +87,10 @@
 </table>
 <script type="text/javascript">
 $("#export-button").click(function(){
+	if ($("#subjectCode").val() == null || $("#subjectCode").val() == '') {
+        alert('请选择科目');
+        return;
+    }
 	$("#searchForm").attr("action","${ctx}/admin/exam/reportSubjectTeacher/export");
 	$("#searchForm").submit();
 });

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

@@ -62,6 +62,10 @@
 </table>
 <script type="text/javascript">
 $("#export-button").click(function(){
+	if ($("#subjectCode").val() == null || $("#subjectCode").val() == '') {
+        alert('请选择科目');
+        return;
+    }
 	$("#searchForm").attr("action","${ctx}/admin/exam/reportSubjectTeacherClass/export");
 	$("#searchForm").submit();
 });

+ 6 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/sys/userInfo.jsp

@@ -39,6 +39,12 @@
 				<label class="lbl">${school.name}</label>
 			</div>
 		</div>
+		<div class="control-group">
+			<label class="control-label">学校Id:</label>
+			<div class="controls">
+				<label class="lbl">${school.id}</label>
+			</div>
+		</div>
 		<div class="control-group">
 			<label class="control-label">姓名:</label>
 			<div class="controls">

+ 3 - 9
stmms-web/src/main/webapp/WEB-INF/views/modules/user/userEdit.jsp

@@ -61,22 +61,16 @@
 				<form:password path="password" htmlEscape="false" maxlength="20"/>
 			</div>
 		</div>
-		<div class="control-group">
+		<div class="control-group"><c:if test="${user.id!=null }">disable</c:if>
 			<label class="control-label">角色</label>
 			<div class="controls">
-			    <select name="role" id="role-select">
-			        <c:forEach items="${roleList}" var="role">
+			    <select name="role" id="role-select" >
+			        <c:forEach items="${roleList}" var="role" <c:if test="${user.id!=null }">disable</c:if>>
 			        <option value="${role.value}" <c:if test="${role.value==user.role.value}">selected</c:if>>${role.name}</option>
 			        </c:forEach>
 			    </select>
 			</div>
 		</div>
-		<div class="control-group" id="subject-code-div">
-            <label class="control-label">绑定科目</label>
-            <div class="controls">
-                <form:input path="subjectCode" htmlEscape="false" maxlength="30"/>
-            </div>
-        </div>
 		<div class="control-group">
 			<label class="control-label">状态</label>
 			<div class="controls">

+ 1 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/user/userList.jsp

@@ -72,7 +72,7 @@
 				    <c:if test="${web_user.id!=user.id && web_user.schoolAdmin==true && user.role.value!= 6}">
 					<a href="${ctx}/admin/user/edit?id=${user.id}">修改</a>
 					&nbsp;
-					<a href="${ctx}/admin/user/delete?id=${user.id}" data-name="${user.loginName}" class="delete-link">删除</a>
+<%-- 					<a href="${ctx}/admin/user/delete?id=${user.id}" data-name="${user.loginName}" class="delete-link">删除</a> --%>
 					</c:if>
 				</td>
 			</tr>

+ 5 - 3
stmms-web/src/main/webapp/static/answer-check/css/style.css

@@ -208,7 +208,6 @@ input[type="text"]:focus {
 .form-t span.b {
 	font-size: 15px;
 	font-weight: bold;
-	padding-right: 40px;
 }
 .form-t span.radio {
 	-webkit-box-sizing: border-box;
@@ -224,14 +223,14 @@ input[type="text"]:focus {
 	vertical-align: text-bottom;
 	cursor: pointer;
 }
-.form-t input {
+.form-t span input {
 	width: 16px;
 	height: 16px;
 	background: url(../img/radio.png) no-repeat 0 0;
 	border: 0;
 	cursor: pointer;
 }
-.form-t input.on {
+.form-t span input.on {
 	background: url(../img/radio_on.png) no-repeat 0 0;
 }
 .form-t span.radio + * {
@@ -239,6 +238,9 @@ input[type="text"]:focus {
 	padding-left: 8px;
 	padding-right: 8px;
 }
+.form-t input {
+	width: 40px;
+}
 /*======form-m======*/
 .form-m {
 	padding-bottom: 15px;