Переглянути джерело

查询员新增绑定考试和科目

ting.yin 2 роки тому
батько
коміт
76b353b889

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

@@ -50,4 +50,8 @@ public interface ExamDao extends PagingAndSortingRepository<Exam, Integer>, JpaS
     @Query("update Exam e set e.objectiveStatus=?2 where e.id=?1")
     public int updateObjectiveStatus(int examId, ObjectiveStatus status);
 
+    @Query(value = "select * from eb_exam e where e.school_id = ?1 and e.id in (select s.exam_id from eb_user_exam s where s.user_id=?2 )"
+            + "order by e.id desc", nativeQuery = true)
+    public List<Exam> findBySchoolViewUserId(Integer schoolId, Integer userId);
+
 }

+ 21 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/UserExamDao.java

@@ -0,0 +1,21 @@
+package cn.com.qmth.stmms.biz.exam.dao;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import cn.com.qmth.stmms.biz.exam.model.UserExam;
+
+public interface UserExamDao extends PagingAndSortingRepository<UserExam, Integer>, JpaSpecificationExecutor<UserExam> {
+
+    List<UserExam> findByUserId(Integer userId);
+
+    UserExam findBySubjectCodeAndUserId(Integer examId, Integer userId);
+
+    @Modifying
+    @Query("delete from UserExam su where su.userId=?1")
+    void deleteByUserId(Integer userId);
+}

+ 52 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/UserExam.java

@@ -0,0 +1,52 @@
+package cn.com.qmth.stmms.biz.exam.model;
+
+import cn.com.qmth.stmms.common.annotation.ExcelField;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Entity
+@Table(name = "eb_user_exam")
+public class UserExam implements Serializable {
+
+    private static final long serialVersionUID = -2682887025138655950L;
+
+    @Id
+    @GeneratedValue
+    private Integer id;
+
+    @Column(name = "user_id", nullable = false)
+    private Integer userId;
+
+    @Column(name = "exam_id", nullable = false)
+    @ExcelField(title = "考试ID", align = 2, sort = 20)
+    private Integer examId;
+
+    public UserExam() {
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+}

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

@@ -33,4 +33,6 @@ public interface ExamService {
     int updateObjectiveStatus(int examId, ObjectiveStatus calculate);
 
     void updateStatus(Integer id, ExamStatus status);
+
+    List<Exam> findBySchoolViewUserId(Integer schoolId, Integer userId);
 }

+ 22 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/UserExamService.java

@@ -0,0 +1,22 @@
+package cn.com.qmth.stmms.biz.exam.service;
+
+import java.util.Set;
+
+public interface UserExamService {
+
+    // UserExam save(UserExam u);
+    //
+    // List<UserExam> findByUserId(Integer userId);
+    //
+    // int batchSave(List<UserExam> saveList);
+    //
+    // UserExam findByExamIdAndUserId(Integer examId, Integer userId);
+    //
+    // UserExam findById(Integer id);
+    //
+    // void save(String subjectCode, Integer[] userIds);
+    Set<Integer> findExamIds(Integer userId);
+
+    void updateByUserId(Integer userId, Set<Integer> examIdSet);
+
+}

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

@@ -150,4 +150,9 @@ public class ExamServiceImpl extends BaseQueryService<Exam> implements ExamServi
         return examDao.updateObjectiveStatus(examId, status);
     }
 
+    @Override
+    public List<Exam> findBySchoolViewUserId(Integer schoolId, Integer userId) {
+        return examDao.findBySchoolViewUserId(schoolId, userId);
+    }
+
 }

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

@@ -0,0 +1,45 @@
+package cn.com.qmth.stmms.biz.exam.service.impl;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+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.UserExamDao;
+import cn.com.qmth.stmms.biz.exam.model.UserExam;
+import cn.com.qmth.stmms.biz.exam.service.UserExamService;
+
+@Service("userExamService")
+public class UserExamServiceImpl extends BaseQueryService<UserExam> implements UserExamService {
+
+    @Autowired
+    private UserExamDao userExamDao;
+
+    @Override
+    public Set<Integer> findExamIds(Integer userId) {
+        Set<Integer> set = new HashSet<>();
+        List<UserExam> list = userExamDao.findByUserId(userId);
+        for (UserExam u : list) {
+            set.add(u.getExamId());
+        }
+        return set;
+    }
+
+    @Transactional
+    @Override
+    public void updateByUserId(Integer userId, Set<Integer> examIdSet) {
+        userExamDao.deleteByUserId(userId);
+        for (Integer examId : examIdSet) {
+            UserExam userExam = new UserExam();
+            userExam.setExamId(examId);
+            userExam.setUserId(userId);
+            userExamDao.save(userExam);
+        }
+
+    }
+
+}

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

@@ -38,7 +38,8 @@ public class BaseExamController extends BaseController {
     /**
      * 添加Flash消息
      *
-     * @param messages 消息
+     * @param messages
+     *            消息
      */
     protected void addMessage(RedirectAttributes redirectAttributes, String... messages) {
         StringBuilder sb = new StringBuilder();
@@ -58,16 +59,16 @@ public class BaseExamController extends BaseController {
 
     protected List<ExamSubject> getExamSubject(Integer examId, WebUser wu) {
         List<ExamSubject> list = new LinkedList<ExamSubject>();
-        if (wu.isSchoolAdmin() || wu.isSchoolViewer()) {
+        if (wu.isSchoolAdmin()) {
             list = subjectService.list(examId);
-        } else if (wu.isSubjectHeader() || wu.isInspector()) {
+        } else if (wu.isSubjectHeader() || wu.isInspector() || wu.isSchoolViewer()) {
             list.addAll(subjectService.list(examId, wu.getSubjectCodeSet()));
         }
         return list;
     }
 
     protected boolean subjectCheck(String subjectCode, WebUser wu) {
-        if (wu.isSubjectHeader() || wu.isInspector()) {
+        if (wu.isSubjectHeader() || wu.isInspector() || wu.isSchoolViewer()) {
             for (String code : wu.getSubjectCodeSet()) {
                 if (code.equalsIgnoreCase(subjectCode)) {
                     return true;

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

@@ -266,6 +266,8 @@ public class ExamController extends BaseExamController {
         List<Exam> examList = new ArrayList<Exam>();
         if (wu.isSubjectHeader() || wu.isInspector()) {
             examList = examService.findBySubjectHeaderUserId(user.getSchoolId(), user.getId());
+        } else if (wu.isSchoolViewer()) {
+            examList = examService.findBySchoolViewUserId(user.getSchoolId(), user.getId());
         } else {
             examList = examService.findBySchoolId(user.getSchoolId());
         }

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

@@ -101,7 +101,7 @@ public class ScoreController extends BaseExamController {
             query.setObjectiveScoreGt(0d);
             query.setSubjectiveScore(0d);
         }
-        if (wu.isSubjectHeader() && StringUtils.isBlank(query.getSubjectCode())) {
+        if ((wu.isSubjectHeader() || wu.isSchoolViewer()) && StringUtils.isBlank(query.getSubjectCode())) {
             String subjectCodeIn = StringUtils.join(wu.getSubjectCodeSet(), ",");
             query.setSubjectCodeIn(subjectCodeIn);
         }
@@ -262,7 +262,7 @@ public class ScoreController extends BaseExamController {
         // 全体科目导出
         else {
             List<ExamSubject> list = subjectService.list(exam.getId());
-            if (wu.isSubjectHeader()) {
+            if (wu.isSubjectHeader() || wu.isSchoolViewer()) {
                 list = getExamSubject(exam.getId(), wu);
             }
             for (ExamSubject subject : list) {

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

@@ -54,7 +54,7 @@ public class AdminInterceptor extends SessionInterceptor {
         WebUser wu = WebUser.buildFromSession(RequestUtils.getSession(request), userService);
         if (wu != null) {
             if (wu.getRole() == Role.SUBJECT_HEADER || wu.getRole() == Role.INSPECTOR
-                    || wu.getRole() == Role.COLLEGE_ADMIN) {
+                    || wu.getRole() == Role.COLLEGE_ADMIN || wu.getRole() == Role.SCHOOL_VIEWER) {
                 wu.setSubjectCodeSet(subjectUserService.findSubjectCode(wu.getId()));
             }
             RequestUtils.setWebUser(request, wu);

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

@@ -47,7 +47,7 @@ public class ReportSubjectController extends BaseExamController {
         WebUser wu = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
         query.setExamId(examId);
-        if (wu.isSubjectHeader() && StringUtils.isBlank(query.getSubjectCode())) {
+        if ((wu.isSubjectHeader() || wu.isSchoolViewer()) && StringUtils.isBlank(query.getSubjectCode())) {
             String subjectCodeIn = StringUtils.join(wu.getSubjectCodeSet(), ",");
             query.setSubjectCodeIn(subjectCodeIn);
         }
@@ -66,7 +66,7 @@ public class ReportSubjectController extends BaseExamController {
             RedirectAttributes redirectAttributes) {
         WebUser wu = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
-        if (wu.isSubjectHeader()) {
+        if (wu.isSubjectHeader() || wu.isSchoolViewer()) {
             String subjectCodeIn = StringUtils.join(wu.getSubjectCodeSet(), ",");
             query.setSubjectCodeIn(subjectCodeIn);
         }

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

@@ -40,6 +40,7 @@ import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
 import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
 import cn.com.qmth.stmms.biz.exam.service.MarkerService;
 import cn.com.qmth.stmms.biz.exam.service.SubjectUserService;
+import cn.com.qmth.stmms.biz.exam.service.UserExamService;
 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;
@@ -56,7 +57,7 @@ import cn.com.qmth.stmms.common.utils.RequestUtils;
 @RequestMapping("/admin/user")
 public class UserController extends BaseExamController {
 
-    public static final String SUBJECT_CODE_SPLIT = ",";
+    public static final String SPLIT = ",";
 
     public static Role[] ROLE_LIST = { Role.SCANNER, Role.SUBJECT_HEADER, Role.INSPECTOR, Role.MARKER,
             Role.SCHOOL_VIEWER, Role.SCHOOL_ADMIN, Role.COLLEGE_ADMIN };
@@ -67,6 +68,9 @@ public class UserController extends BaseExamController {
     @Autowired
     private SubjectUserService subjectUserService;
 
+    @Autowired
+    private UserExamService userExamService;
+
     @Autowired
     private MarkerService markerService;
 
@@ -122,7 +126,8 @@ public class UserController extends BaseExamController {
             if (user.getRole() == Role.SUBJECT_HEADER || user.getRole() == Role.INSPECTOR
                     || user.getRole() == Role.COLLEGE_ADMIN) {
                 view.addObject("subjectCodeString",
-                        StringUtils.join(subjectUserService.findSubjectCode(user.getId()), SUBJECT_CODE_SPLIT));
+                        StringUtils.join(subjectUserService.findSubjectCode(user.getId()), SPLIT));
+                view.addObject("examIdString", StringUtils.join(userExamService.findExamIds(user.getId()), SPLIT));
             }
             view.addObject("query", query);
             return view;
@@ -136,6 +141,7 @@ public class UserController extends BaseExamController {
     @RoleRequire(Role.SCHOOL_ADMIN)
     public String save(HttpServletRequest request, Model model, User user,
             @RequestParam(required = false) String subjectCodeString,
+            @RequestParam(required = false) String examIdString,
             @RequestParam(required = false, defaultValue = "1") int pageNumber,
             @RequestParam(required = false) UserSource querySource, @RequestParam(required = false) Role queryRole,
             @RequestParam(required = false) String queryLoginName, @RequestParam(required = false) String queryName,
@@ -146,7 +152,7 @@ public class UserController extends BaseExamController {
             previous = userService.findById(user.getId());
         }
         if (previous == null) {
-            String message = validate(user, subjectCodeString);
+            String message = validate(user, subjectCodeString, examIdString);
             if (message == null) {
                 String password = StringEscapeUtils.unescapeHtml(user.getPassword());
                 user.setPassword(EncryptUtils.md5(password));
@@ -158,6 +164,9 @@ public class UserController extends BaseExamController {
                 if (user.getRole() == Role.SUBJECT_HEADER || user.getRole() == Role.INSPECTOR) {
                     subjectUserService.updateByUserId(user.getId(), getSubjectCodeSet(subjectCodeString));
                 }
+                if (user.getRole() == Role.SCHOOL_VIEWER) {
+                    userExamService.updateByUserId(user.getId(), getExamIdSet(examIdString));
+                }
                 if (user.getRole() == Role.COLLEGE_ADMIN) {
                     int examId = getSessionExamId(request);
                     subjectUserService.updateByUserId(user.getId(),
@@ -179,11 +188,14 @@ public class UserController extends BaseExamController {
             }
             previous.setEnable(user.isEnable());
             previous.setDescription(user.getDescription());
-            String message = validate(previous, subjectCodeString);
+            String message = validate(previous, subjectCodeString, examIdString);
             if (message == null) {
                 if (previous.getRole() == Role.SUBJECT_HEADER || user.getRole() == Role.INSPECTOR) {
                     subjectUserService.updateByUserId(previous.getId(), getSubjectCodeSet(subjectCodeString));
                 }
+                if (user.getRole() == Role.SCHOOL_VIEWER) {
+                    userExamService.updateByUserId(user.getId(), getExamIdSet(examIdString));
+                }
                 if (user.getRole() == Role.COLLEGE_ADMIN) {
                     int examId = getSessionExamId(request);
                     subjectUserService.updateByUserId(user.getId(),
@@ -216,7 +228,7 @@ public class UserController extends BaseExamController {
                 + "&loginName=" + queryLoginName + "&name=" + queryName + "&enable=" + enable;
     }
 
-    private String validate(User user, String subjectCodeString) {
+    private String validate(User user, String subjectCodeString, String examIdString) {
         String message = null;
         if (StringUtils.isBlank(user.getLoginName())) {
             message = "登录名不能为空";
@@ -232,6 +244,9 @@ public class UserController extends BaseExamController {
             message = "复核员必须绑定科目代码";
         } else if (user.getRole() == Role.COLLEGE_ADMIN && StringUtils.isBlank(user.getDescription())) {
             message = "学院管理员必须绑定学院";
+        } else if (user.getRole() == Role.SCHOOL_VIEWER
+                && (StringUtils.isBlank(subjectCodeString) || StringUtils.isBlank(examIdString))) {
+            message = "学校查询员必须绑定考试ID和科目代码";
         }
         return message;
     }
@@ -239,7 +254,7 @@ public class UserController extends BaseExamController {
     private Set<String> getSubjectCodeSet(String subjectCodeString) {
         Set<String> set = new HashSet<>();
         try {
-            String[] values = StringUtils.split(subjectCodeString, SUBJECT_CODE_SPLIT);
+            String[] values = StringUtils.split(subjectCodeString, SPLIT);
             for (String value : values) {
                 value = StringUtils.trimToNull(value);
                 if (value != null) {
@@ -252,6 +267,22 @@ public class UserController extends BaseExamController {
         return set;
     }
 
+    private Set<Integer> getExamIdSet(String examIdString) {
+        Set<Integer> set = new HashSet<>();
+        try {
+            String[] values = StringUtils.split(examIdString, SPLIT);
+            for (String value : values) {
+                value = StringUtils.trimToNull(value);
+                if (value != null) {
+                    set.add(Integer.parseInt(value));
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return set;
+    }
+
     private Set<String> getSubjectCodeSetByCollege(int examId, String college) {
         Set<String> set = new HashSet<>();
         try {

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

@@ -25,7 +25,7 @@
             });
             $('#role-select').change(function () {
                 var role = $('#role-select').val();
-                if (role == '4' || role == '8') {
+                if (role == '4' || role == '8' || role == '6') {
                     $('#subject-code-div').show();
                 } else {
                     $('#subject-code-div').hide();
@@ -35,6 +35,11 @@
                 } else {
                     $('#college-div').hide();
                 }
+                if (role == '6') {
+                    $('#exam-id-div').show();
+                } else {
+                    $('#exam-id-div').hide();
+                }
             });
             $('#role-select').trigger('change');
         });
@@ -97,11 +102,20 @@
             </select>
         </div>
     </div>
-    <c:if test="${user.role==null || user.role.value==4|| user.role.value==8}">
+    <c:if test="${user.role==null || user.role.value==6}">
+        <div class="control-group" id="exam-id-div">
+            <label class="control-label">绑定考试ID</label>
+            <div class="controls">
+            <textarea name="examIdString" rows="4" class="input-xxlarge"
+                      >${examIdString}</textarea>
+            </div>
+        </div>
+    </c:if>
+    <c:if test="${user.role==null || user.role.value==4|| user.role.value==6|| user.role.value==8}">
         <div class="control-group" id="subject-code-div">
             <label class="control-label">绑定科目代码</label>
             <div class="controls">
-            <textarea name="subjectCodeString" rows="4" maxlength="200" class="input-xxlarge"
+            <textarea name="subjectCodeString" rows="4" class="input-xxlarge"
                       >${subjectCodeString}</textarea>
             </div>
         </div>
@@ -110,7 +124,7 @@
         <div class="control-group" id="college-div">
             <label class="control-label">绑定学院</label>
             <div class="controls">
-            <textarea name="description" rows="4" maxlength="200" class="input-xxlarge"
+            <textarea name="description" rows="4" class="input-xxlarge"
                       >${user.description}</textarea>
             </div>
         </div>

+ 16 - 0
stmms-web/src/main/webapp/sql/stmms_ft.sql

@@ -115,6 +115,22 @@ VALUES (1, 'admin', '超级管理员', 'd0e915689fc1f1e19e1a036c22bdfeab', 'SYS_
 UNLOCK TABLES;
 
 
+# Dump of table eb_user_exam
+# ------------------------------------------------------------
+
+DROP TABLE IF EXISTS `eb_user_exam`;
+
+CREATE TABLE `eb_user_exam`
+(
+    `id`           int(11)     NOT NULL AUTO_INCREMENT COMMENT '主键',
+    `user_id`      int(11)     NOT NULL COMMENT '用户ID',
+    `exam_id`	   int(11)	   NOT NULL COMMENT '考试ID',
+    PRIMARY KEY (`id`),
+    UNIQUE KEY `index1` (`user_id`, `exam_id`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4 COMMENT ='用户考试关联表';
+
+  
 # Dump of table eb_subject_user
 # ------------------------------------------------------------
 

+ 10 - 0
stmms-web/src/main/webapp/sql/upgrade/1.3.12.sql

@@ -4,3 +4,13 @@ USE `stmms_ft`;
 ALTER TABLE eb_exam_question ADD COLUMN `name`	varchar(128) DEFAULT NULL COMMENT '名称';
 -- 新增eb_exam_subject字段
 ALTER TABLE eb_exam_subject ADD COLUMN `display_question_name`   tinyint(1)	NOT NULL COMMENT '显示题目昵称';
+-- 新增eb_user_exam用户考试关联表
+CREATE TABLE `eb_user_exam`
+(
+    `id`           int(11)     NOT NULL AUTO_INCREMENT COMMENT '主键',
+    `user_id`      int(11)     NOT NULL COMMENT '用户ID',
+    `exam_id`	   int(11)	   NOT NULL COMMENT '考试ID',
+    PRIMARY KEY (`id`),
+    UNIQUE KEY `index1` (`user_id`, `exam_id`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4 COMMENT ='用户考试关联表';