ting.yin 2 år sedan
förälder
incheckning
a450fd7bc6

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

@@ -11,10 +11,7 @@ import cn.com.qmth.stmms.biz.exam.model.InspectHistory;
 public interface InspectHistoryDao extends PagingAndSortingRepository<InspectHistory, Integer>,
 public interface InspectHistoryDao extends PagingAndSortingRepository<InspectHistory, Integer>,
         JpaSpecificationExecutor<InspectHistory> {
         JpaSpecificationExecutor<InspectHistory> {
 
 
-    @Query("select s from InspectHistory s where s.studentId=?1 order by s.inspectTime desc limit 3")
-    List<InspectHistory> findByStudentIdLimit3(int studentId);
-
-    @Query("select s from InspectHistory s where s.studentId=?1 and s.inspectorId=?2 order by s.inspectTime desc limit 1")
-    InspectHistory findByStudentIdAndInspectorId(Integer studentId, Integer inspectorId);
+    @Query(value = "select * from eb_inspect_history s where s.student_id=?1 order by s.inspect_time desc limit ?2 ", nativeQuery = true)
+    List<InspectHistory> findByStudentIdLimit3(int studentId, int count);
 
 
 }
 }

+ 0 - 4
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/InspectHistoryService.java

@@ -10,8 +10,4 @@ public interface InspectHistoryService {
 
 
     List<InspectHistory> findByStudentIdLimit3(Integer studentId);
     List<InspectHistory> findByStudentIdLimit3(Integer studentId);
 
 
-    InspectHistory findByStudentIdAndInspectorId(Integer studentId, Integer inspectorId);
-
-    void delete(InspectHistory inspectHistory);
-
 }
 }

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

@@ -4,7 +4,6 @@ import java.util.List;
 
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 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.common.BaseQueryService;
 import cn.com.qmth.stmms.biz.exam.dao.InspectHistoryDao;
 import cn.com.qmth.stmms.biz.exam.dao.InspectHistoryDao;
@@ -29,7 +28,7 @@ public class InspectHistoryServiceImpl extends BaseQueryService<InspectHistory>
 
 
     @Override
     @Override
     public List<InspectHistory> findByStudentIdLimit3(Integer studentId) {
     public List<InspectHistory> findByStudentIdLimit3(Integer studentId) {
-        List<InspectHistory> list = inspectHistoryDao.findByStudentIdLimit3(studentId);
+        List<InspectHistory> list = inspectHistoryDao.findByStudentIdLimit3(studentId, 3);
         for (InspectHistory inspectHistory : list) {
         for (InspectHistory inspectHistory : list) {
             User user = userDao.findOne(inspectHistory.getInspectorId());
             User user = userDao.findOne(inspectHistory.getInspectorId());
             inspectHistory.setInspectorName(user.getLoginName() + "/" + user.getName());
             inspectHistory.setInspectorName(user.getLoginName() + "/" + user.getName());
@@ -37,15 +36,4 @@ public class InspectHistoryServiceImpl extends BaseQueryService<InspectHistory>
         return list;
         return list;
     }
     }
 
 
-    @Override
-    public InspectHistory findByStudentIdAndInspectorId(Integer studentId, Integer inspectorId) {
-        return inspectHistoryDao.findByStudentIdAndInspectorId(studentId, inspectorId);
-    }
-
-    @Transactional
-    @Override
-    public void delete(InspectHistory inspectHistory) {
-        inspectHistoryDao.delete(inspectHistory);
-    }
-
 }
 }

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

@@ -256,9 +256,6 @@ public class InspectedServiceImpl extends BaseQueryService<ExamStudent> implemen
     public boolean cancel(Integer studentId) {
     public boolean cancel(Integer studentId) {
         ExamStudent student = studentService.findById(studentId);
         ExamStudent student = studentService.findById(studentId);
         if (student.getSubjectiveStatus().equals(SubjectiveStatus.INSPECTED)) {
         if (student.getSubjectiveStatus().equals(SubjectiveStatus.INSPECTED)) {
-            InspectHistory inspectHistory = inspectHistoryService.findByStudentIdAndInspectorId(studentId,
-                    student.getInspectorId());
-            inspectHistoryService.delete(inspectHistory);
             studentService.updateSubjectiveStatusAndTimeAndInspectorId(student.getId(), SubjectiveStatus.MARKED, null,
             studentService.updateSubjectiveStatusAndTimeAndInspectorId(student.getId(), SubjectiveStatus.MARKED, null,
                     null);
                     null);
             return true;
             return true;

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

@@ -273,4 +273,12 @@ public class User implements Serializable {
         this.scanTokenInvalidTime = rightNow.getTime();
         this.scanTokenInvalidTime = rightNow.getTime();
     }
     }
 
 
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
 }
 }

+ 2 - 1
stmms-common/src/main/java/cn/com/qmth/stmms/common/enums/Role.java

@@ -3,7 +3,8 @@ package cn.com.qmth.stmms.common.enums;
 public enum Role {
 public enum Role {
 
 
     SYS_ADMIN("系统管理员", 1), SCHOOL_ADMIN("学校管理员", 2), SCANNER("扫描员", 3), SUBJECT_HEADER("科组长", 4), MARKER("评卷员", 5), SCHOOL_VIEWER(
     SYS_ADMIN("系统管理员", 1), SCHOOL_ADMIN("学校管理员", 2), SCANNER("扫描员", 3), SUBJECT_HEADER("科组长", 4), MARKER("评卷员", 5), SCHOOL_VIEWER(
-            "学校查询员", 6), SCHOOL_DEV("学校接口调用", 7), INSPECTOR("复核员", 8), SCAN_ADMIN("扫描管理员", 9), COLLEGE_ADMIN("扫描管理员", 10);
+            "学校查询员", 6), SCHOOL_DEV("学校接口调用", 7), INSPECTOR("复核员", 8), SCAN_ADMIN("扫描管理员", 9), COLLEGE_ADMIN("学院管理员",
+            10);
 
 
     private String name;
     private String name;
 
 

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

@@ -28,13 +28,17 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 import cn.com.qmth.stmms.admin.dto.MarkerDTO;
 import cn.com.qmth.stmms.admin.dto.MarkerDTO;
 import cn.com.qmth.stmms.admin.dto.SubjectUserDTO;
 import cn.com.qmth.stmms.admin.dto.SubjectUserDTO;
 import cn.com.qmth.stmms.admin.exam.BaseExamController;
 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.ExamStudent;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 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.MarkGroup;
 import cn.com.qmth.stmms.biz.exam.model.Marker;
 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.model.SubjectUser;
+import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
 import cn.com.qmth.stmms.biz.exam.query.MarkerSearchQuery;
 import cn.com.qmth.stmms.biz.exam.query.MarkerSearchQuery;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
 import cn.com.qmth.stmms.biz.exam.service.ExamService;
 import cn.com.qmth.stmms.biz.exam.service.ExamService;
+import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
 import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
 import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
 import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
 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.MarkerService;
@@ -81,6 +85,9 @@ public class UserController extends BaseExamController {
     @Autowired
     @Autowired
     private ExamService examService;
     private ExamService examService;
 
 
+    @Autowired
+    private ExamStudentService studentService;
+
     @Logging(menu = "查询用户", type = LogType.QUERY)
     @Logging(menu = "查询用户", type = LogType.QUERY)
     @RequestMapping("/list")
     @RequestMapping("/list")
     @RoleRequire(Role.SCHOOL_ADMIN)
     @RoleRequire(Role.SCHOOL_ADMIN)
@@ -146,10 +153,16 @@ public class UserController extends BaseExamController {
                 user.setCreatedTime(new Date());
                 user.setCreatedTime(new Date());
                 user.setUpdatedTime(new Date());
                 user.setUpdatedTime(new Date());
                 userService.save(user);
                 userService.save(user);
-                if (user.getRole() == Role.SUBJECT_HEADER || user.getRole() == Role.INSPECTOR
-                        || user.getRole() == Role.COLLEGE_ADMIN) {
+                if (user.getRole() == Role.SUBJECT_HEADER || user.getRole() == Role.INSPECTOR) {
                     subjectUserService.updateByUserId(user.getId(), getSubjectCodeSet(subjectCodeString));
                     subjectUserService.updateByUserId(user.getId(), getSubjectCodeSet(subjectCodeString));
                 }
                 }
+                if (user.getRole() == Role.COLLEGE_ADMIN) {
+                    int examId = getSessionExamId(request);
+                    subjectUserService.updateByUserId(user.getId(),
+                            getSubjectCodeSetByCollege(examId, subjectCodeString));
+                    user.setDescription(subjectCodeString);
+                    userService.save(user);
+                }
             } else {
             } else {
                 model.addAttribute("user", user);
                 model.addAttribute("user", user);
                 model.addAttribute("roleList", ROLE_LIST);
                 model.addAttribute("roleList", ROLE_LIST);
@@ -169,6 +182,12 @@ public class UserController extends BaseExamController {
                 if (previous.getRole() == Role.SUBJECT_HEADER || user.getRole() == Role.INSPECTOR) {
                 if (previous.getRole() == Role.SUBJECT_HEADER || user.getRole() == Role.INSPECTOR) {
                     subjectUserService.updateByUserId(previous.getId(), getSubjectCodeSet(subjectCodeString));
                     subjectUserService.updateByUserId(previous.getId(), getSubjectCodeSet(subjectCodeString));
                 }
                 }
+                if (user.getRole() == Role.COLLEGE_ADMIN) {
+                    int examId = getSessionExamId(request);
+                    subjectUserService.updateByUserId(user.getId(),
+                            getSubjectCodeSetByCollege(examId, subjectCodeString));
+                    user.setDescription(subjectCodeString);
+                }
                 previous.setUpdatedTime(new Date());
                 previous.setUpdatedTime(new Date());
                 userService.save(previous);
                 userService.save(previous);
             } else {
             } else {
@@ -196,7 +215,7 @@ public class UserController extends BaseExamController {
         } else if (user.getRole() == Role.INSPECTOR && StringUtils.isBlank(subjectCodeString)) {
         } else if (user.getRole() == Role.INSPECTOR && StringUtils.isBlank(subjectCodeString)) {
             message = "复核员必须绑定科目代码";
             message = "复核员必须绑定科目代码";
         } else if (user.getRole() == Role.COLLEGE_ADMIN && StringUtils.isBlank(subjectCodeString)) {
         } else if (user.getRole() == Role.COLLEGE_ADMIN && StringUtils.isBlank(subjectCodeString)) {
-            message = "学院管理员必须绑定科目代码";
+            message = "学院管理员必须绑定学院";
         }
         }
         return message;
         return message;
     }
     }
@@ -217,6 +236,22 @@ public class UserController extends BaseExamController {
         return set;
         return set;
     }
     }
 
 
+    private Set<String> getSubjectCodeSetByCollege(int examId, String college) {
+        Set<String> set = new HashSet<>();
+        try {
+            List<String> subject = studentService.findDistinctSubjectCodeByCollege(examId, college);
+            for (String value : subject) {
+                value = StringUtils.trimToNull(value);
+                if (value != null) {
+                    set.add(value);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return set;
+    }
+
     @Logging(menu = "导出用户", type = LogType.EXPORT)
     @Logging(menu = "导出用户", type = LogType.EXPORT)
     @RequestMapping(value = "/export", method = RequestMethod.POST)
     @RequestMapping(value = "/export", method = RequestMethod.POST)
     public String exportFile(UserSearchQuery query, HttpServletRequest request, HttpServletResponse response,
     public String exportFile(UserSearchQuery query, HttpServletRequest request, HttpServletResponse response,
@@ -347,7 +382,7 @@ public class UserController extends BaseExamController {
     @RoleRequire(Role.SCHOOL_ADMIN)
     @RoleRequire(Role.SCHOOL_ADMIN)
     public ModelAndView batchAdd(HttpServletRequest request) {
     public ModelAndView batchAdd(HttpServletRequest request) {
         ModelAndView view = new ModelAndView("modules/user/userAdd");
         ModelAndView view = new ModelAndView("modules/user/userAdd");
-        Role[] roleList = { Role.SUBJECT_HEADER, Role.INSPECTOR, Role.MARKER, Role.COLLEGE_ADMIN };
+        Role[] roleList = { Role.SUBJECT_HEADER, Role.INSPECTOR, Role.MARKER };
         view.addObject("roleList", roleList);
         view.addObject("roleList", roleList);
         int examId = getSessionExamId(request);
         int examId = getSessionExamId(request);
         view.addObject("exam", examService.findById(examId));
         view.addObject("exam", examService.findById(examId));
@@ -368,4 +403,18 @@ public class UserController extends BaseExamController {
         }
         }
         return "redirect:/admin/user/list";
         return "redirect:/admin/user/list";
     }
     }
+
+    @RequestMapping("/getSubjectCode")
+    @RoleRequire(Role.SCHOOL_ADMIN)
+    public String get(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes) {
+        int examId = getSessionExamId(request);
+        List<ExamSubject> list = subjectService.list(examId);
+        if (list.size() > 0) {
+            model.addAttribute("list", list);
+            return "modules/exam/subjectSelect";
+        } else {
+            model.addAttribute("message", "没有科目");
+            return "modules/exam/subjectSelect";
+        }
+    }
 }
 }

+ 1 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/examEdit.jsp

@@ -163,7 +163,7 @@
                 <label class="control-label">原图遮盖</label>
                 <label class="control-label">原图遮盖</label>
                 <div class="controls">
                 <div class="controls">
                     <input name="picList" id="picList" type="hidden"/>
                     <input name="picList" id="picList" type="hidden"/>
-                    <a href="${ctx}/admin/exam/getSheetConfig?examId=${exam.id}" target="_blank" class="required"
+                    <a href="${ctx}/admin/exam/getSheetConfig" target="_blank" class="required"
                        id="configuration" rel="opener">设置</a>
                        id="configuration" rel="opener">设置</a>
                 </div>
                 </div>
             </div>
             </div>

+ 37 - 14
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/inspectedList.jsp

@@ -100,8 +100,12 @@
         <th>主观分</th>
         <th>主观分</th>
         <th>试卷总分</th>
         <th>试卷总分</th>
         <th>得分明细</th>
         <th>得分明细</th>
-        <th>复核人</th>
-        <th>复核时间</th>
+        <th>复核人1</th>
+        <th>复核时间1</th>
+        <th>复核人2</th>
+        <th>复核时间2</th>
+        <th>复核人3</th>
+        <th>复核时间3</th>
         <th>操作</th>
         <th>操作</th>
     </tr>
     </tr>
     </thead>
     </thead>
@@ -115,18 +119,37 @@
             <td>${result.subjectiveScoreString}</td>
             <td>${result.subjectiveScoreString}</td>
             <td><fmt:formatNumber pattern="###.###" value="${result.totalScore}"/></td>
             <td><fmt:formatNumber pattern="###.###" value="${result.totalScore}"/></td>
             <td>${result.subjectiveScoreList}</td>
             <td>${result.subjectiveScoreList}</td>
-            <td><c:if test="${result.inspectorId!=null }">
-            ${result.inspector.loginName}
-            	</c:if>
-            </td>
-            <td>
-            	<c:if test="${result.inspectTime!=null}">
-                    <fmt:formatDate value="${result.inspectTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
-                </c:if>
-                <c:if test="${result.inspectTime==null}">
-                    &nbsp;
-                </c:if>
-            </td>
+            <c:if test="${result.inspectHistoryList!=null}">
+            <c:forEach items="${result.inspectHistoryList}" var="history">
+	            <td> ${history.inspectorName} </td>
+	            <td>
+	            	<c:if test="${history.inspectTime!=null}">
+	                    <fmt:formatDate value="${history.inspectTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
+	                </c:if>
+	                <c:if test="${history.inspectTime==null}">
+	                    &nbsp;
+	                </c:if>
+	            </td>
+            </c:forEach>
+            </c:if>
+            <c:if test="${result.inspectHistoryList!=null && result.inspectHistoryList.size()==2}">
+            	<td></td>
+             	<td></td>
+            </c:if>
+            <c:if test="${result.inspectHistoryList!=null && result.inspectHistoryList.size()==1}">
+            	<td></td>
+             	<td></td>
+             	<td></td>
+             	<td></td>
+            </c:if>
+            <c:if test="${result.inspectHistoryList==null || result.inspectHistoryList.size()==0}">
+            	<td></td>
+             	<td></td>
+              	<td></td>
+           		<td></td>
+          		<td></td>
+      			<td></td>
+            </c:if>
             <td>
             <td>
             	 <a href="${ctx}/web/admin/exam/track/student?studentId=${result.id}&subjectCode=${result.subjectCode}" target="_blank">轨迹图</a>
             	 <a href="${ctx}/web/admin/exam/track/student?studentId=${result.id}&subjectCode=${result.subjectCode}" target="_blank">轨迹图</a>
                 <c:if test="${result.subjectiveStatus=='MARKED'}">
                 <c:if test="${result.subjectiveStatus=='MARKED'}">

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

@@ -0,0 +1,220 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp" %>
+<html>
+<head>
+    <title>试卷管理</title>
+    <meta name="decorator" content="default"/>
+    <%@include file="/WEB-INF/views/include/head.jsp" %>
+    <style type="text/css">.sort {
+        color: #0663A2;
+        cursor: pointer;
+    }</style>
+</head>
+<body>
+<div id="objImportBox" class="hide">
+    <form id="objImportForm" action="${ctx}/admin/exam/paper/import" method="post" enctype="multipart/form-data"
+          style="padding-left:20px;text-align:center;" class="form-search" onsubmit="loading('正在导入,请稍等...');"><br/>
+        <input name="objective" type="hidden" value="true"/>
+        <input name="file" type="file" style="width:330px"/><br/><br/>  
+        <input class="btn btn-primary" type="submit" value="导入" onclick="goObjImport()"/>
+        <a href="${ctx}/admin/exam/paper/template?objective=true">下载模板</a>
+    </form>
+</div>
+<div id="subImportBox" class="hide">
+    <form id="subImportForm" action="${ctx}/admin/exam/paper/import" method="post" enctype="multipart/form-data"
+          style="padding-left:20px;text-align:center;" class="form-search" onsubmit="loading('正在导入,请稍等...');"><br/>
+        <input name="objective" type="hidden" value="false"/>
+        <input name="file" type="file" style="width:330px"/><br/><br/>  
+        <input class="btn btn-primary" type="submit" value="导入" onclick="goSubImport()"/>
+        <a href="${ctx}/admin/exam/paper/template?objective=false">下载模板</a>
+    </form>
+</div>
+<div id="groupImportBox" class="hide">
+    <form id="subImportForm" action="${ctx}/admin/exam/paper/importGroup" method="post" enctype="multipart/form-data"
+          style="padding-left:20px;text-align:center;" class="form-search" onsubmit="loading('正在导入,请稍等...');"><br/>
+        <input name="objective" type="hidden" value="false"/>
+        <input name="file" type="file" style="width:330px"/><br/><br/>  
+        <input class="btn btn-primary" type="submit" value="导入" onclick="goGroupImport()"/>
+        <a href="${ctx}/admin/exam/paper/template?objective=false">下载模板</a>
+    </form>
+</div>
+<%-- <%@include file="/WEB-INF/views/include/examInfoNavTabs.jsp" %> --%>
+<form id="searchForm" action="${ctx}/admin/exam/paper" method="post" class="breadcrumb form-search">
+    <input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>
+    <input type="hidden" id="pageSize" name="pageSize" value="${query.pageSize }"/>
+    <div>
+        <label>科目</label>
+        <select class="input-large" name="code" id="subject-select">
+            <option value="">请选择</option>
+            <c:forEach items="${subjectList}" var="subject">
+                <option value="${subject.code}" data-level="${subject.level}" <c:if test="${subject.code==query.code}">selected</c:if>>${subject.code}-${subject.name}</option>
+            </c:forEach>
+        </select>
+        <label>层次</label>
+        <select class="input-small" name="level" id="level-select">
+            <option value="">请选择</option>
+            <c:forEach items="${levelList}" var="level">
+                <option value="${level}" data-level="${level}" <c:if test="${level==query.level}">selected</c:if>>${level}</option>
+            </c:forEach>
+        </select>
+        <label>专业类型</label>
+        <select class="input-small" name="category" id="category-select">
+            <option value="">请选择</option>
+            <c:forEach items="${categoryList}" var="category">
+                <option value="${category}" <c:if test="${category==query.category}">selected</c:if>>${category}</option>
+            </c:forEach>
+        </select>
+        &nbsp;
+        <label>状态</label>
+        <select class="input-small" name="upload">
+            <option value="">不限</option>
+            <option value="1" <c:if test="${upload!=null && upload==true}">selected</c:if>>已扫描</option>
+            <option value="0" <c:if test="${upload!=null && upload==false}">selected</c:if>>未扫描</option>
+        </select>
+        &nbsp;
+        <label>总分不等于</label>
+        <input type="number" name="totalScoreNotEqual" value="${query.totalScoreNotEqual}" maxlength="10" class="input-mini"/>
+        <br/><br/>
+        &nbsp;
+        <input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
+        <c:if test="${web_user.schoolAdmin==true}">
+            &nbsp;
+            <div class="btn-group">
+                <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
+                    导入<span class="caret"></span>
+                </a>
+                <ul class="dropdown-menu">
+                    <li><a href="##" id="obj-import">客观题</a></li>
+                    <li><a href="##" id="sub-import">主观题结构</a></li>
+                    <li><a href="##" id="group-import">主观题分组</a></li>
+                </ul>
+            </div>
+        </c:if>
+        &nbsp;
+        <div class="btn-group">
+            <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
+                导出<span class="caret"></span>
+            </a>
+            <ul class="dropdown-menu">
+                <li><a href="${ctx}/admin/exam/paper/export?objective=true">客观题</a></li>
+                <li><a href="${ctx}/admin/exam/paper/export?objective=false">主观题</a></li>
+            </ul>
+        </div>
+        <c:if test="${!examLock}">
+            &nbsp;
+            <a href="${ctx}/admin/exam/paper/calculate" class="btn">客观题统分</a>
+            &nbsp;
+            <a href="${ctx}/admin/exam/paper/report" class="btn">分析计算</a>
+        </c:if>
+        <c:if test="${examLock}"
+        >&nbsp;
+            <a href="#" class="btn" disabled="disabled">正在计算</a>
+        </c:if>
+    </div>
+</form>
+<tags:message content="${message}"/>
+<table id="contentTable" class="table table-striped table-bordered table-condensed">
+    <thead>
+    <tr>
+        <th>科目名称</th>
+        <th>层次</th>
+        <th>专业类型</th>
+        <th>试卷</th>
+        <th>答案</th>
+        <th>试卷类型</th>
+        <th>卡格式</th>
+        <th>客观总分</th>
+        <th>主观总分</th>
+        <th>试卷总分</th>
+        <th>状态</th>
+        <th>操作</th>
+    </tr>
+    </thead>
+    <tbody>
+    <c:forEach items="${query.result}" var="subject">
+        <tr>
+            <td>
+                <a href="${ctx}/admin/exam/paper/detail?subjectCode=${subject.code}&pageNumber=${query.pageNumber}&code=${query.code }&category=${ query.category}&level=${query.level }&upload=${ upload}&totalScoreNotEqual=${  query.totalScoreNotEqual}"">
+                ${subject.code}-${subject.name}&nbsp;${subject.remark}</a>
+            </td>
+            <td>${subject.level}</td>
+            <td>${subject.category}</td>
+            <td>
+                <c:if test="${subject.paperUrl != null && examType!='MULTI_MEDIA'}">
+                    <a href="${fileServer}${subject.paperUrl}" target="_blank">已上传</a>
+                </c:if>
+            </td>
+            <td>
+                <c:if test="${subject.answerUrl != null && examType!='MULTI_MEDIA'}">
+                    <a href="${fileServer}${subject.answerUrl}" target="_blank">已上传</a>
+                </c:if>
+            </td>
+            <td>
+                ${subject.paperType}
+            </td>
+            <td>
+                <c:if test="${subject.cardType == 'JSON'}">电子题卡</c:if>
+                <c:if test="${subject.cardType == 'ZIP'}">扫描题卡</c:if>
+            </td>
+            <td><fmt:formatNumber pattern="###.###" value="${subject.objectiveScore}"/></td>
+            <td><fmt:formatNumber pattern="###.###" value="${subject.subjectiveScore}"/></td>
+            <td><fmt:formatNumber pattern="###.###" value="${subject.totalScore}"/></td>
+            <td>
+                <c:if test="${examLock || subject.locked}">正在计算</c:if>
+                <c:if test="${!examLock && !subject.locked}">正常</c:if>
+            </td>
+            <td>
+                <c:if test="${!examLock && !subject.locked}">
+                    <a href="${ctx}/admin/exam/subject/edit?code=${subject.code}">编辑</a>
+                    <a href="${ctx}/admin/exam/paper/report?subjectCode=${subject.code}">分析计算</a>
+                </c:if>
+                <a href="${ctx}/admin/exam/selectiveGroup?subjectCode=${subject.code}">设置选做题</a>
+            </td>
+        </tr>
+    </c:forEach>
+    </tbody>
+</table>
+<div class="pagination">${query}</div>
+<script type="text/javascript">
+    function page(n, s) {
+        $("#pageNumber").val(n);
+        $("#pageSize").val(s);
+        $("#searchForm").submit();
+        return false;
+    }
+
+    function goSearch() {
+        $("#pageNumber").val(1);
+        $("#pageSize").val('${query.pageSize}');
+        $("#searchForm").submit();
+        return false;
+    }
+
+    $("#obj-import").click(function () {
+        $.jBox($("#objImportBox").html(), {
+            title: "导入客观题", buttons: {"关闭": true},
+            bottomText: "导入文件不能超过5M,仅允许导入“xls”或“xlsx”格式文件!"
+        });
+    });
+    $("#sub-import").click(function () {
+        $.jBox($("#subImportBox").html(), {
+            title: "导入主观题结构", buttons: {"关闭": true},
+            bottomText: "导入文件不能超过5M,仅允许导入“xls”或“xlsx”格式文件!"
+        });
+    });
+    $("#group-import").click(function () {
+        $.jBox($("#groupImportBox").html(), {
+            title: "导入主观题分组", buttons: {"关闭": true},
+            bottomText: "导入文件不能超过5M,仅允许导入“xls”或“xlsx”格式文件!"
+        });
+    });
+    function goObjImport() {
+        alert("导入后请务必重新统分");
+    };
+
+    function goSubImport() {
+        alert("导入后请务必重新统分");
+    };
+</script>
+</body>
+</html>

+ 28 - 21
stmms-web/src/main/webapp/WEB-INF/views/modules/user/userAdd.jsp

@@ -25,10 +25,20 @@
             });
             });
             $('#role-select').change(function () {
             $('#role-select').change(function () {
                 var role = $('#role-select').val();
                 var role = $('#role-select').val();
-                if (role == '4' || role == '8') {
-                    $('#subject-code-div').show();
+                if (role == '4') {
+                    $('#subject-div').show();
                 } else {
                 } else {
-                    $('#subject-code-div').hide();
+                    $('#subject-div').hide();
+                }
+                if (role == '5') {
+                    $('#marker-div').show();
+                } else {
+                    $('#marker-div').hide();
+                }
+                if (role == '8') {
+                    $('#inspector-div').show();
+                } else {
+                    $('#inspector-div').hide();
                 }
                 }
             });
             });
             $('#role-select').trigger('change');
             $('#role-select').trigger('change');
@@ -40,8 +50,7 @@
     <li><a href="${ctx}/admin/user/list">用户列表</a></li>
     <li><a href="${ctx}/admin/user/list">用户列表</a></li>
     <li class="active"><a href="##">用户新增</a></li>
     <li class="active"><a href="##">用户新增</a></li>
 </ul>
 </ul>
-<form:form id="inputForm" modelAttribute="user" action="${ctx}/admin/user/batchSave" method="post" class="form-horizontal">
-    <form:hidden path="id"/>
+<form:form id="inputForm" action="${ctx}/admin/user/batchSave" method="post" class="form-horizontal">
     <tags:message content="${message}"/>
     <tags:message content="${message}"/>
     <div class="control-group">
     <div class="control-group">
         <label class="control-label">考试名称</label>
         <label class="control-label">考试名称</label>
@@ -55,37 +64,35 @@
             <select name="role" id="role-select">
             <select name="role" id="role-select">
                 <c:if test="${roleList != null}">
                 <c:if test="${roleList != null}">
                     <c:forEach items="${roleList}" var="role">
                     <c:forEach items="${roleList}" var="role">
-                        <option value="${role.value}"
-                                <c:if test="${role.value==user.role.value}">selected</c:if>>${role.name}</option>
+                        <option value="${role.value}" >${role.name}</option>
                     </c:forEach>
                     </c:forEach>
                 </c:if>
                 </c:if>
-                <c:if test="${user.role!=null && roleList==null}">
-                    <option value="${user.role.value}" selected>${user.role.name}</option>
-                </c:if>
             </select>
             </select>
         </div>
         </div>
     </div>
     </div>
+	<div class="control-group">
+            <label class="control-label">命名规则</label>
+            <div class="controls"  id="subject-div">机构ID+科目代码+流水号</div>
+            <div class="controls"  id="marker-div">机构ID+科目代码+分组号+流水号</div>
+            <div class="controls"  id="inspector-div">机构ID+FH+科目代码+流水号</div>
+	</div>
     <div class="control-group">
     <div class="control-group">
         <label class="control-label">每分组账号数</label>
         <label class="control-label">每分组账号数</label>
         <div class="controls">
         <div class="controls">
-            <form:password path="number" htmlEscape="false" maxlength="20"/>
+            <input name="number" type="number" htmlEscape="false" max="100" min="1" class="required digits"/>
         </div>
         </div>
     </div>
     </div>
     <div class="control-group">
     <div class="control-group">
         <label class="control-label">密码</label>
         <label class="control-label">密码</label>
         <div class="controls">
         <div class="controls">
-            <form:password path="password" htmlEscape="false" maxlength="20"/>
+            <input name="password" type="text" class="required"/>
         </div>
         </div>
     </div>
     </div>
-    <c:if test="${user.role==null || user.role.value==4|| 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"
-                      >${subjectCodeString}</textarea>
-            </div>
-        </div>
-    </c:if>
+	<div class="control-group" id="subject-code-div">
+          <input name="subjectCode" id="subjectCode" type="hidden"/>
+                    <a href="${ctx}/admin/user/getSubjectCode?examId=${exam.id}" target="_blank" class="required"
+                       id="configuration" rel="opener">设置</a>
+	 </div>
     <div class="form-actions">
     <div class="form-actions">
         <input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>
         <input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>
         &nbsp;
         &nbsp;

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

@@ -30,6 +30,11 @@
                 } else {
                 } else {
                     $('#subject-code-div').hide();
                     $('#subject-code-div').hide();
                 }
                 }
+                if (role == '10') {
+                    $('#college-div').show();
+                } else {
+                    $('#college-div').hide();
+                }
             });
             });
             $('#role-select').trigger('change');
             $('#role-select').trigger('change');
         });
         });
@@ -95,6 +100,15 @@
             </div>
             </div>
         </div>
         </div>
     </c:if>
     </c:if>
+    <c:if test="${user.role.value==10}">
+        <div class="control-group" id="college-div">
+            <label class="control-label">绑定学院</label>
+            <div class="controls">
+            <textarea name="subjectCodeString" rows="4" maxlength="200" class="input-xxlarge"
+                      >${subjectCodeString}</textarea>
+            </div>
+        </div>
+     </c:if>
     <div class="form-actions">
     <div class="form-actions">
         <input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>
         <input id="btnSubmit" class="btn btn-primary" type="submit" value="保 存"/>
         &nbsp;
         &nbsp;