浏览代码

Merge remote-tracking branch 'origin/release_1.3.14' into release_1.3.14

luoshi 1 年之前
父节点
当前提交
005af9be96
共有 53 个文件被更改,包括 345 次插入199 次删除
  1. 2 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/dao/PrivilegeDao.java
  2. 2 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/service/PrivilegeService.java
  3. 5 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/service/impl/PrivilegeServiceImpl.java
  4. 24 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/bean/AddStudentInfo.java
  5. 4 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamSubjectDao.java
  6. 2 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/InspectHistoryDao.java
  7. 2 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamStudentService.java
  8. 2 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamSubjectService.java
  9. 2 1
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/UserStudentService.java
  10. 6 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamStudentServiceImpl.java
  11. 6 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamSubjectServiceImpl.java
  12. 11 2
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/InspectHistoryServiceImpl.java
  13. 6 2
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/UserStudentServiceImpl.java
  14. 7 1
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkServiceImpl.java
  15. 6 6
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/school/model/School.java
  16. 2 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/school/service/impl/SchoolServiceImpl.java
  17. 13 8
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/utils/SolarHttpUtil.java
  18. 1 1
      stmms-common/src/main/java/cn/com/qmth/stmms/common/enums/PrivilegeType.java
  19. 12 0
      stmms-common/src/main/java/cn/com/qmth/stmms/common/utils/JspUtil.java
  20. 26 0
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/basic/RoleInfoController.java
  21. 2 2
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/InspectedController.java
  22. 1 4
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkController.java
  23. 7 3
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkGroupController.java
  24. 3 7
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/RejectController.java
  25. 1 1
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/school/SchoolController.java
  26. 4 3
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/user/UserController.java
  27. 1 0
      stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/CoreController.java
  28. 2 0
      stmms-web/src/main/webapp/WEB-INF/application.properties
  29. 21 0
      stmms-web/src/main/webapp/WEB-INF/tlds/fnx.tld
  30. 1 0
      stmms-web/src/main/webapp/WEB-INF/views/include/taglib.jsp
  31. 16 21
      stmms-web/src/main/webapp/WEB-INF/views/modules/basic/rolePrivilege.jsp
  32. 6 6
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/arbitrateList.jsp
  33. 3 3
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/examIndex.jsp
  34. 1 1
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/groupEditFull.jsp
  35. 1 1
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/groupEditSimple.jsp
  36. 11 11
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/groupList.jsp
  37. 2 2
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/inspectedInfo.jsp
  38. 3 3
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/inspectedList.jsp
  39. 13 16
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/libraryList.jsp
  40. 8 8
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/markInfo.jsp
  41. 7 7
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/markerList.jsp
  42. 9 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/paperList.jsp
  43. 2 2
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/problemHistory.jsp
  44. 6 6
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/qualityList.jsp
  45. 1 1
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/rejectHistory.jsp
  46. 1 1
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/rejectList.jsp
  47. 1 1
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/scoreList.jsp
  48. 2 2
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/scoreVerifyPage.jsp
  49. 2 2
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/scoreVerifyQuery.jsp
  50. 6 6
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/trialList.jsp
  51. 1 1
      stmms-web/src/main/webapp/WEB-INF/views/modules/sys/schoolEdit.jsp
  52. 28 28
      stmms-web/src/main/webapp/sql/stmms_ft.sql
  53. 31 29
      stmms-web/src/main/webapp/sql/upgrade/1.3.14.sql

+ 2 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/dao/PrivilegeDao.java

@@ -14,4 +14,6 @@ public interface PrivilegeDao extends PagingAndSortingRepository<Privilege, Inte
 
 	List<Privilege> findByPrivilegeTypeOrderByLevelAscSeqAsc(PrivilegeType menu);
 
+	List<Privilege> findByPrivilegeTypeAndParentCodeOrderBySeqAsc(PrivilegeType page, String parentCode);
+
 }

+ 2 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/service/PrivilegeService.java

@@ -10,5 +10,7 @@ public interface PrivilegeService {
 
 	void initRoleAndPrivilege(Integer schoolId);
 
+	List<Privilege> getPagePrivilegesByParentCode(String parentCode);
+
 
 }

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

@@ -125,4 +125,9 @@ public class PrivilegeServiceImpl extends BaseQueryService<Privilege> implements
 		Query query = entityManager.createNativeQuery(sql.toString());
 		query.executeUpdate();
 	}
+	
+	@Override
+	public List<Privilege> getPagePrivilegesByParentCode(String parentCode) {
+		return privilegeDao.findByPrivilegeTypeAndParentCodeOrderBySeqAsc(PrivilegeType.PAGE,parentCode);
+	}
 }

+ 24 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/bean/AddStudentInfo.java

@@ -0,0 +1,24 @@
+package cn.com.qmth.stmms.biz.exam.bean;
+
+public class AddStudentInfo {
+	private Integer success;
+	private Integer failed;
+	public Integer getSuccess() {
+		return success;
+	}
+	public void setSuccess(Integer success) {
+		this.success = success;
+	}
+	public Integer getFailed() {
+		return failed;
+	}
+	public void setFailed(Integer failed) {
+		this.failed = failed;
+	}
+	public AddStudentInfo(Integer success, Integer failed) {
+		super();
+		this.success = success;
+		this.failed = failed;
+	}
+	
+}

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

@@ -81,4 +81,8 @@ public interface ExamSubjectDao extends PagingAndSortingRepository<ExamSubject,
     @Query("select DISTINCT(s.totalScore) from ExamSubject s where s.pk.examId=?1 order by s.totalScore")
     public List<Double> distinctTotalScore(int examId);
 
+    @Modifying
+    @Query("update ExamSubject s set s.inspectRound=1 where s.pk.examId=?1 and s.pk.code=?2")
+	public void resetInspect(int examId, String subjectCode);
+
 }

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

@@ -28,6 +28,8 @@ public interface InspectHistoryDao extends PagingAndSortingRepository<InspectHis
 
 	InspectHistory findByStudentIdAndInspectRound(Integer studentId, Integer inspectRound);
 
+	@Modifying
+	@Query("delete from InspectHistory m where m.studentId=?1 and m.inspectRound=?2")
 	void deleteByStudentIdAndInspectRound(Integer studentId, Integer inspectRound);
 
 }

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

@@ -192,4 +192,6 @@ public interface ExamStudentService {
 
     public void resetTrial(Integer examId, String subjectCode, boolean trial);
 
+	public void cancelInspect(int examId, String subjectCode);
+
 }

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

@@ -56,4 +56,6 @@ public interface ExamSubjectService {
 
     List<Double> distinctTotalScore(int examId);
 
+	void resetInspect(int examId, String subjectCode);
+
 }

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

@@ -2,11 +2,12 @@ package cn.com.qmth.stmms.biz.exam.service;
 
 import java.util.List;
 
+import cn.com.qmth.stmms.biz.exam.bean.AddStudentInfo;
 import cn.com.qmth.stmms.biz.exam.bean.UserStudentVo;
 
 public interface UserStudentService {
 
-	public int addStudent(List<UserStudentVo> list,Integer schoolId,Integer userId);
+	public AddStudentInfo addStudent(List<UserStudentVo> list,Integer schoolId,Integer userId);
 
 	public int countByUserId(Integer id);
 

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

@@ -1535,4 +1535,10 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     public void scoreVerifyView(Integer userId, Integer studentId) {
         studentDao.scoreVerifyTag(userId, new Date(), studentId);
     }
+
+    @Transactional
+	@Override
+	public void cancelInspect(int examId, String subjectCode) {
+    	studentDao.cancelInspect(examId, subjectCode);
+	}
 }

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

@@ -321,4 +321,10 @@ public class ExamSubjectServiceImpl extends BaseQueryService<ExamSubject> implem
         return subjectDao.distinctTotalScore(examId);
     }
 
+    @Transactional
+	@Override
+	public void resetInspect(int examId, String subjectCode) {
+		subjectDao.resetInspect(examId,subjectCode);
+	}
+
 }

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

@@ -17,6 +17,8 @@ import cn.com.qmth.stmms.biz.common.BaseQueryService;
 import cn.com.qmth.stmms.biz.exam.bean.InspectWorkVo;
 import cn.com.qmth.stmms.biz.exam.dao.InspectHistoryDao;
 import cn.com.qmth.stmms.biz.exam.model.InspectHistory;
+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.InspectHistoryService;
 
 @Service("inspectHistoryService")
@@ -25,8 +27,12 @@ public class InspectHistoryServiceImpl extends BaseQueryService<InspectHistory>
 	private EntityManager entityManager;
     @Autowired
     private InspectHistoryDao inspectHistoryDao;
-
-
+    @Autowired
+    private ExamStudentService examStudentService;
+    @Autowired
+    private ExamSubjectService examSubjectService;
+    
+    
     @Override
     public InspectHistory save(InspectHistory i) {
         return inspectHistoryDao.saveAndFlush(i);
@@ -51,6 +57,8 @@ public class InspectHistoryServiceImpl extends BaseQueryService<InspectHistory>
     @Override
     public void deleteByExamIdAndSubjectCode(int examId, String subjectCode) {
         inspectHistoryDao.deleteByExamIdAndSubjectCode(examId, subjectCode);
+        examStudentService.cancelInspect(examId,subjectCode);
+        examSubjectService.resetInspect(examId,subjectCode);
     }
 
     @Transactional
@@ -109,4 +117,5 @@ public class InspectHistoryServiceImpl extends BaseQueryService<InspectHistory>
 		}
 		return false;
 	}
+	
 }

+ 6 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/UserStudentServiceImpl.java

@@ -13,6 +13,7 @@ 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.bean.AddStudentInfo;
 import cn.com.qmth.stmms.biz.exam.bean.UserStudentVo;
 import cn.com.qmth.stmms.biz.exam.dao.UserStudentDao;
 import cn.com.qmth.stmms.biz.exam.model.UserStudent;
@@ -30,9 +31,11 @@ public class UserStudentServiceImpl extends BaseQueryService<UserStudent> implem
 	
 	@Transactional
 	@Override
-	public int addStudent(List<UserStudentVo> list,Integer schoolId, Integer userId) {
+	public AddStudentInfo addStudent(List<UserStudentVo> list,Integer schoolId, Integer userId) {
 		int suc=0;
+		int total=0;
 		if(list!=null&&list.size()>0) {
+			total=list.size();
 			suc=new BatchUpdateDataUtil<UserStudentVo>() {
 				@Override
 				protected int updateData(List<UserStudentVo> dataList) {
@@ -47,7 +50,8 @@ public class UserStudentServiceImpl extends BaseQueryService<UserStudent> implem
 				}
 			}.setDataForBatch(list, 500);
 		}
-		return suc;
+		AddStudentInfo info=new AddStudentInfo(suc, total-suc);
+		return info;
 	}
 
 	@Override

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

@@ -38,6 +38,7 @@ 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.InspectHistoryService;
+import cn.com.qmth.stmms.biz.exam.service.InspectedService;
 import cn.com.qmth.stmms.biz.exam.service.MarkerService;
 import cn.com.qmth.stmms.biz.exam.service.SelectiveGroupService;
 import cn.com.qmth.stmms.biz.exam.service.SubjectiveScoreService;
@@ -166,6 +167,9 @@ public class MarkServiceImpl implements MarkService {
     private LockService lockService;
 
     private Map<Integer, Long> markerLastUpdateTime = new ConcurrentHashMap<>();
+    
+    @Autowired
+    private InspectedService inspectedService;
 
     /**
      * 某个评卷分组已申请的评卷任务数量
@@ -538,6 +542,7 @@ public class MarkServiceImpl implements MarkService {
         }
         updateMarkedCount(group);
         releaseByMarker(marker);
+        inspectHistoryService.deleteByExamIdAndSubjectCode(marker.getExamId(), marker.getSubjectCode());
     }
 
     /**
@@ -590,11 +595,11 @@ public class MarkServiceImpl implements MarkService {
                 || !group.getStatus().toString().equals(result.getStatusValue())) {
             return SubmitResult.faile();
         }
-
         Date now = new Date();
         // 根据评卷状态选择读取不同的评卷任务
         if (group.getStatus() == MarkStatus.FORMAL) {
             MarkLibrary library = libraryDao.findOne(result.getLibraryId());
+            inspectedService.cancel(library.getStudentId());
             if (library != null && library.getExamId().equals(group.getExamId())
                     && library.getSubjectCode().equals(group.getSubjectCode())
                     && library.getGroupNumber().equals(group.getNumber())) {
@@ -623,6 +628,7 @@ public class MarkServiceImpl implements MarkService {
             }
         } else if (group.getStatus() == MarkStatus.TRIAL) {
             TrialLibrary library = trialLibraryDao.findOne(result.getLibraryId());
+            inspectedService.cancel(library.getStudentId());
             if (library != null && library.getExamId().equals(group.getExamId())
                     && library.getSubjectCode().equals(group.getSubjectCode())
                     && library.getGroupNumber().equals(group.getNumber())

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

@@ -91,8 +91,8 @@ public class School implements Serializable {
     @Column(name = "sub_code", nullable = true)
     private String subCode;
 
-    @Column(name = "group_delete_code", nullable = true, length = 64)
-    private String groupDeleteCode;
+    @Column(name = "group_delete_check", nullable = false)
+    private boolean groupDeleteCheck;
 
     public Integer getId() {
         return id;
@@ -235,12 +235,12 @@ public class School implements Serializable {
         this.doubleTrack = doubleTrack;
     }
 
-    public String getGroupDeleteCode() {
-        return groupDeleteCode;
+    public boolean isGroupDeleteCheck() {
+        return groupDeleteCheck;
     }
 
-    public void setGroupDeleteCode(String groupDeleteCode) {
-        this.groupDeleteCode = groupDeleteCode;
+    public void setGroupDeleteCheck(boolean groupDeleteCheck) {
+        this.groupDeleteCheck = groupDeleteCheck;
     }
 
 }

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

@@ -146,6 +146,7 @@ public class SchoolServiceImpl extends BaseQueryService<School> implements Schoo
                 school.setCity("");
                 school.setCode(s.getCode());
                 school.setEnable(true);
+                school.setGroupDeleteCheck(false);
                 school.setDoubleTrack(false);
             }
             school.setName(s.getName());
@@ -170,6 +171,7 @@ public class SchoolServiceImpl extends BaseQueryService<School> implements Schoo
             school.setName(org.getString("name"));
             school.setLogoUrl(org.getString("logo"));
             school.setEnable(true);
+            school.setGroupDeleteCheck(false);
             school.setDoubleTrack(false);
             schools.add(school);
         }

+ 13 - 8
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/utils/SolarHttpUtil.java

@@ -54,8 +54,10 @@ public class SolarHttpUtil {
     }
 
     /**
-     * @param params headers参数
-     * @param datas  requestParams参数
+     * @param params
+     *            headers参数
+     * @param datas
+     *            requestParams参数
      * @return
      */
     public String httpAction(Map<String, String> params, Map<String, Object> datas) {
@@ -74,8 +76,8 @@ public class SolarHttpUtil {
             conn.setRequestProperty(CONTENT_TYPE, APPLICATION_JSON);
             // 设置鉴权
             long time = System.currentTimeMillis();
-            String signature = SignatureInfo
-                    .build(SignatureType.SECRET, METHOD_POST, uri, time, accessKey, accessSecret);
+            String signature = SignatureInfo.build(SignatureType.SECRET, METHOD_POST, uri, time, accessKey,
+                    accessSecret);
             conn.setRequestProperty(AUTH, signature);
             conn.setRequestProperty("time", String.valueOf(time));
             // ssl
@@ -239,6 +241,7 @@ public class SolarHttpUtil {
                 school.setLogoUrl(org.getString("logo"));
                 school.setEnable(true);
                 school.setDoubleTrack(false);
+                school.setGroupDeleteCheck(false);
                 schools.add(school);
             }
         }
@@ -247,11 +250,13 @@ public class SolarHttpUtil {
     }
 
     public static void main(String[] args) throws Exception {
-        //        SolarHttpUtil orgUtil = new SolarHttpUtil("7bbdc11570bc474dbf50e0d4a5dff328",
-        //                "IOodRvbp2LspJTHOScgB7Yx8MRloMpyl", "https://solar.qmth.com.cn", "/api/open/org/query");
+        // SolarHttpUtil orgUtil = new
+        // SolarHttpUtil("7bbdc11570bc474dbf50e0d4a5dff328",
+        // "IOodRvbp2LspJTHOScgB7Yx8MRloMpyl", "https://solar.qmth.com.cn",
+        // "/api/open/org/query");
         //
-        //        String str = orgUtil.httpAction(null, null);
-        //        System.out.println(str);
+        // String str = orgUtil.httpAction(null, null);
+        // System.out.println(str);
         // int pageNumber = 1;
         // int pageSize = 1;
         //

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

@@ -3,7 +3,7 @@ package cn.com.qmth.stmms.common.enums;
 public enum PrivilegeType {
 
     MENU("菜单"),
-
+    PAGE("页面"),
     BUTTON("按钮"),
 
     ;

+ 12 - 0
stmms-common/src/main/java/cn/com/qmth/stmms/common/utils/JspUtil.java

@@ -0,0 +1,12 @@
+package cn.com.qmth.stmms.common.utils;
+
+import java.util.Set;
+
+public class JspUtil {
+	public static boolean hasPrivilegeCode(Set<String> codes,String code) {
+		if(codes==null||code==null) {
+			return false;
+		}
+		return codes.contains(code);
+	}
+}

+ 26 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/admin/basic/RoleInfoController.java

@@ -2,6 +2,7 @@ package cn.com.qmth.stmms.admin.basic;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -9,11 +10,14 @@ 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.RequestParam;
 
 import cn.com.qmth.stmms.biz.basic.bean.RoleInfoQuery;
 import cn.com.qmth.stmms.biz.basic.bean.RoleInfoVo;
 import cn.com.qmth.stmms.biz.basic.bean.RolePrivilegeDomain;
 import cn.com.qmth.stmms.biz.basic.bean.RolePrivilegeVo;
+import cn.com.qmth.stmms.biz.basic.model.Privilege;
+import cn.com.qmth.stmms.biz.basic.service.PrivilegeService;
 import cn.com.qmth.stmms.biz.basic.service.RoleInfoService;
 import cn.com.qmth.stmms.biz.basic.service.RolePrivilegeService;
 import cn.com.qmth.stmms.common.controller.BaseController;
@@ -30,6 +34,9 @@ public class RoleInfoController extends BaseController {
 	
 	@Autowired
 	private RolePrivilegeService rolePrivilegeService;
+	
+	@Autowired
+	private PrivilegeService privilegeService;
 
 	@RequestMapping(value = "list")
 	public String roleLise(Model model, HttpServletRequest request, RoleInfoQuery query) {
@@ -68,4 +75,23 @@ public class RoleInfoController extends BaseController {
 		rolePrivilegeService.save(domain);
 		return "redirect:/admin/basic/role/info/list?schoolId="+domain.getSchoolId();
 	}
+	
+	@RequestMapping(value = "sub/page")
+    public String subPage(HttpServletRequest request,@RequestParam String privilegeCode) {
+        WebUser wu = RequestUtils.getWebUser(request);
+        Set<String> codes=rolePrivilegeService.getRoleCodes(wu.getUser().getSchoolId(), wu.getRole());
+        if(codes==null||codes.size()==0) {
+        	return null;
+        }
+        List<Privilege> ps=privilegeService.getPagePrivilegesByParentCode(privilegeCode);
+        if(ps==null||ps.size()==0) {
+        	return null;
+        }
+        for(Privilege p:ps) {
+        	if(codes.contains(p.getCode())) {
+        		return "redirect:"+p.getPrivilegeUri();
+        	}
+        }
+        return null;
+    }
 }

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

@@ -10,8 +10,6 @@ import java.util.stream.Collectors;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import net.sf.json.JSONObject;
-
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -62,6 +60,7 @@ import cn.com.qmth.stmms.common.enums.SelectiveStatus;
 import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
 import cn.com.qmth.stmms.common.utils.ExportExcel;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
+import net.sf.json.JSONObject;
 
 @Controller("inspectedController")
 @RequestMapping("/admin/exam/inspected")
@@ -666,4 +665,5 @@ public class InspectedController extends BaseExamController {
         }
         return "redirect:/admin/exam/inspected/list";
     }
+    
 }

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

@@ -26,7 +26,6 @@ import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
-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.MarkGroupService;
 import cn.com.qmth.stmms.biz.exam.service.MarkerService;
@@ -67,9 +66,6 @@ public class MarkController extends BaseExamController {
     @Autowired
     private UserService userService;
 
-    @Autowired
-    private ExamService examService;
-
     @Autowired
     private MarkLibraryService libraryService;
 
@@ -259,5 +255,6 @@ public class MarkController extends BaseExamController {
         }
         return "redirect:/admin/exam/mark";
     }
+    
 
 }

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

@@ -20,6 +20,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.task.AsyncTaskExecutor;
 import org.springframework.stereotype.Controller;
 import org.springframework.transaction.annotation.Transactional;
@@ -119,6 +120,9 @@ public class MarkGroupController extends BaseExamController {
     @Autowired
     private AsyncTaskExecutor taskExecutor;
 
+    @Value("${mark.group.delete}")
+    private String markDeleteCode;
+
     @Logging(menu = "大题管理查询", type = LogType.QUERY)
     @RequestMapping
     public String list(HttpServletRequest request, Model model, @RequestParam(required = false) String subjectCode) {
@@ -403,7 +407,7 @@ public class MarkGroupController extends BaseExamController {
             model.addAttribute("exam", examService.findById(examId));
             Exam exam = examService.findById(examId);
             School school = schoolService.findById(exam.getSchoolId());
-            model.addAttribute("deleteCheck", StringUtils.isNotBlank(school.getGroupDeleteCode()));
+            model.addAttribute("deleteCheck", school.isGroupDeleteCheck());
             return "modules/exam/groupEditFull";
         } else {
             redirectAttributes.addAttribute("subjectCode", subjectCode);
@@ -425,8 +429,8 @@ public class MarkGroupController extends BaseExamController {
         }
         Exam exam = examService.findById(examId);
         School school = schoolService.findById(exam.getSchoolId());
-        if (StringUtils.isNotBlank(school.getGroupDeleteCode()) && group.getLibraryCount() != 0
-                && group.getLeftCount() == 0 && !school.getGroupDeleteCode().equals(deleteCode)) {
+        if (school.isGroupDeleteCheck() && group.getLibraryCount() != 0 && group.getLeftCount() == 0
+                && !markDeleteCode.equals(deleteCode)) {
             addMessage(redirectAttributes, "删除分组授权码不正确");
             redirectAttributes.addAttribute("subjectCode", subjectCode);
             return "redirect:/admin/exam/group";

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

@@ -5,9 +5,6 @@ import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
 
-import net.sf.json.JSONArray;
-import net.sf.json.JSONObject;
-
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -22,7 +19,6 @@ import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.query.MarkerSearchQuery;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
-import cn.com.qmth.stmms.biz.exam.service.ExamService;
 import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
 import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
 import cn.com.qmth.stmms.biz.exam.service.MarkerService;
@@ -39,6 +35,8 @@ import cn.com.qmth.stmms.common.domain.WebUser;
 import cn.com.qmth.stmms.common.enums.LibraryStatus;
 import cn.com.qmth.stmms.common.enums.LogType;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
 
 @Controller
 @RequestMapping("/admin/exam/reject")
@@ -55,9 +53,6 @@ public class RejectController extends BaseExamController {
     @Autowired
     private ExamSubjectService subjectService;
 
-    @Autowired
-    private ExamService examService;
-
     @Autowired
     private MarkGroupService groupService;
 
@@ -192,4 +187,5 @@ public class RejectController extends BaseExamController {
         }
         return array;
     }
+    
 }

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

@@ -108,7 +108,7 @@ public class SchoolController extends BaseController {
             previous.setProvince(school.getProvince());
             previous.setCity(school.getCity());
             previous.setAddress(school.getAddress());
-            previous.setGroupDeleteCode(school.getGroupDeleteCode());
+            previous.setGroupDeleteCheck(school.isGroupDeleteCheck());
             previous.setDescription(school.getDescription());
             if (StringUtils.isBlank(previous.getAccessKey()) || StringUtils.isBlank(previous.getAccessSecret())) {
                 previous.resetAccessKeyAndSecret();

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

@@ -28,6 +28,7 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 import cn.com.qmth.stmms.admin.dto.MarkerDTO;
 import cn.com.qmth.stmms.admin.dto.SubjectUserDTO;
 import cn.com.qmth.stmms.admin.exam.BaseExamController;
+import cn.com.qmth.stmms.biz.exam.bean.AddStudentInfo;
 import cn.com.qmth.stmms.biz.exam.bean.UserStudentVo;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
@@ -164,7 +165,7 @@ public class UserController extends BaseExamController {
         if (user.getId() != null) {
             previous = userService.findById(user.getId());
         }
-        Integer suc=null;
+        AddStudentInfo suc=null;
         if (previous == null) {
             String message = validate(user, subjectCodeString, examIdString);
             if (message == null) {
@@ -276,13 +277,13 @@ public class UserController extends BaseExamController {
         String role = queryRole == null ? "" : String.valueOf(queryRole.getValue());
         String source = querySource == null ? "" : String.valueOf(querySource.getValue());
         if(suc!=null) {
-        	addMessage(redirectAttributes, "成功绑定考生"+suc+"条");
+        	addMessage(redirectAttributes, "成功绑定考生"+suc.getSuccess()+"条,失败"+suc.getFailed()+"条(已绑定或无效的准考证号)");
         }
         return "redirect:/admin/user/list?pageNumber=" + pageNumber + "&source=" + source + "&role=" + role
                 + "&loginName=" + queryLoginName + "&name=" + queryName + "&enable=" + enable;
     }
     
-    private int addStudent(MultipartFile file,Integer schoolId,Integer userId) {
+    private AddStudentInfo addStudent(MultipartFile file,Integer schoolId,Integer userId) {
 		try {
 			ImportExcel ei = new ImportExcel(file, 1, 0);
 			List<UserStudentVo> list = ei.getDataList(UserStudentVo.class);

+ 1 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/CoreController.java

@@ -978,6 +978,7 @@ public class CoreController extends BaseApiController {
             school.setSubCode(subCode);
             school.setEnable(true);
             school.setDoubleTrack(false);
+            school.setGroupDeleteCheck(false);
             school.setProvince(parent.getProvince());
             school.setCity(parent.getCity());
             school.setAddress(parent.getAddress());

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

@@ -19,6 +19,8 @@ exam.problem.type2=\u8bd5\u5377\u6a21\u7cca
 mark.activeExpireMinute=30
 mark.cleanTaskSchedule=0 0/10 6-23 * * ?
 mark.cleanLockSchedule=0 0 3 * * ?
+##\u5220\u9664\u5206\u7ec4\u6388\u6743\u7801
+mark.group.delete=hu8RabY3rd
 ##\u8bc4\u5377\u5458\u63a7\u5236
 marker.showBtnImportAndBtnUpdateImport=false
 marker.forceMode=

+ 21 - 0
stmms-web/src/main/webapp/WEB-INF/tlds/fnx.tld

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
+  version="2.0">
+    
+  <description>JSTL 1.1 functions library</description>
+  <display-name>JSTL functions sys</display-name>
+  <tlib-version>1.1</tlib-version>
+  <short-name>fnx</short-name>
+  <uri>http://java.sun.com/jsp/jstl/functionss</uri>
+
+  <function>
+    <description>判断是否有权限编码</description>
+    <name>hasPrivilegeCode</name>
+    <function-class>cn.com.qmth.stmms.common.utils.JspUtil</function-class>
+    <function-signature>boolean hasPrivilegeCode(java.util.Set,java.lang.String)</function-signature>
+    <example>${fnx:hasPrivilegeCode(codes,code)}</example>  
+  </function>
+</taglib>

+ 1 - 0
stmms-web/src/main/webapp/WEB-INF/views/include/taglib.jsp

@@ -6,6 +6,7 @@
 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
 <%@ taglib prefix="fns" uri="/WEB-INF/tlds/fns.tld" %>
 <%@ taglib prefix="fnc" uri="/WEB-INF/tlds/fnc.tld" %>
+<%@ taglib prefix="fnx" uri="/WEB-INF/tlds/fnx.tld" %>
 <%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
 <c:set var="ctx" value="<%=request.getContextPath()%>"/>
 <c:set var="ctxStatic" value="${ctx}/resources"/>

+ 16 - 21
stmms-web/src/main/webapp/WEB-INF/views/modules/basic/rolePrivilege.jsp

@@ -27,29 +27,14 @@
 				},
 				callback:{
 					onCheck:function(ev,id, node){
-						/* if('exam_mark'==node.code&&node.enable){
-							var node = tree.getNodeByParam("code", "exam_mark-mark");
-							tree.checkNode(node, true, true, true);
-						} */
-						if('exam_mark-mark'==node.code&&!node.enable){
-							var node = tree.getNodeByParam("code", "exam_mark");
-							tree.checkNode(node, false, true, true);
+						if('exam_mark'==node.parentCode&&!node.enable){
+							checkChildAllDisable(node.parentCode)
 						}
-						/* if('exam_reject_list'==node.code&&node.enable){
-							var node = tree.getNodeByParam("code", "exam_reject_list-paper");
-							tree.checkNode(node, true, true, true);
-						} */
-						if('exam_reject_list-paper'==node.code&&!node.enable){
-							var node = tree.getNodeByParam("code", "exam_reject_list");
-							tree.checkNode(node, false, true, true);
+						if('exam_reject_list'==node.parentCode&&!node.enable){
+							checkChildAllDisable(node.parentCode)
 						}
-						/* if('exam_inspected_info'==node.code&&node.enable){
-							var node = tree.getNodeByParam("code", "exam_inspected_info-info");
-							tree.checkNode(node, true, true, true);
-						} */
-						if('exam_inspected_info-info'==node.code&&!node.enable){
-							var node = tree.getNodeByParam("code", "exam_inspected_info");
-							tree.checkNode(node, false, true, true);
+						if('exam_inspected_info'==node.parentCode&&!node.enable){
+							checkChildAllDisable(node.parentCode)
 						}
 					}
 				}
@@ -62,6 +47,16 @@
 				tree.expandNode(nodes[i], true, false, false);
 			}
 		});
+		function checkChildAllDisable(pcode){
+			var nodes = tree.getNodesByParam("parentCode", pcode);
+			for(var i=0; i<nodes.length; i++) {
+				if(nodes[i].enable){
+					return;
+				}
+			}
+			var pnode = tree.getNodeByParam("code", pcode);
+			tree.checkNode(pnode, false, true, true);
+		}
 		function save() {
 			var checkedNodes = tree.getCheckedNodes();
 			if(checkedNodes&&checkedNodes.length>0){

+ 6 - 6
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/arbitrateList.jsp

@@ -9,23 +9,23 @@
 </head>
 <body>
     <ul class="nav nav-tabs">
-    <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-mark')}">
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-mark')}">
     	<li><a href="${ctx}/admin/exam/mark?subjectCode=${subject.code}">评卷进度</a></li>
     	</c:if>
-    	<c:if test="${fn:contains(role_privilege_codes, 'exam_mark-group')}">
+    	<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-group')}">
         <li><a href="${ctx}/admin/exam/group?subjectCode=${query.subjectCode}">分组管理</a></li>
         </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-marker')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-marker')}">
         <li><a href="${ctx}/admin/exam/marker?subjectCode=${query.subjectCode}">评卷员管理</a></li>
         </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-trial')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-trial')}">
         <li><a href="${ctx}/admin/exam/trial?subjectCode=${query.subjectCode}">试评管理</a></li>
         </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-library')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-library')}">
         <li><a href="${ctx}/admin/exam/library?subjectCode=${query.subjectCode}">任务管理</a></li>
         </c:if>
         <li class="active"><a href="##">仲裁管理</a></li>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-quality')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-quality')}">
         <li><a href="${ctx}/admin/exam/quality?subjectCode=${query.subjectCode}">质量监控</a></li>
         </c:if>
     </ul>

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

@@ -127,14 +127,14 @@
                             <div class="accordion-inner">
                                 <ul class="nav nav-list">
                                 <c:forEach items="${privileges}" var="privilege">
-                                <c:if test="${fn:contains(role_privilege_codes, privilege.code)}">
+                                <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, privilege.code)}">
                                 	<c:if test="${privilege.code=='exam_score'}">
                                 		<c:if test="${forbiddenScore!=true}">
-	                                		<li><a href="${ctx}${privilege.privilegeUri}" target="mainFrame"><i class="${privilege.icon}"></i><span data-i18n-text="${privilege.i18n}">${privilege.name}</span></a></li>
+	                                		<li><a href="${ctx}${privilege.privilegeUri}?privilegeCode=${privilege.code}" target="mainFrame"><i class="${privilege.icon}"></i><span data-i18n-text="${privilege.i18n}">${privilege.name}</span></a></li>
 	                                	</c:if>
                                 	</c:if>
                                 	<c:if test="${privilege.code!='exam_score'}">
-                                		<li><a href="${ctx}${privilege.privilegeUri}" target="mainFrame"><i class="${privilege.icon}"></i><span data-i18n-text="${privilege.i18n}">${privilege.name}</span></a></li>
+                                		<li><a href="${ctx}${privilege.privilegeUri}?privilegeCode=${privilege.code}" target="mainFrame"><i class="${privilege.icon}"></i><span data-i18n-text="${privilege.i18n}">${privilege.name}</span></a></li>
                                 	</c:if>
                                 </c:if>
                                 </c:forEach>

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

@@ -310,7 +310,7 @@
     </div>
     <div class="form-actions">
         <a id="btnSubmit" href="##" class="btn btn-primary">保 存</a>&nbsp;
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-group-delete')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-group-delete')}">
         <a href="#" class="delete-button btn btn-danger">删除</a>&nbsp;
         </c:if>
         <a id="btnPre" class="btn">上一步</a>

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

@@ -158,7 +158,7 @@
             </div>
         </div>
     <div class="form-actions">
-    	<c:if test="${fn:contains(role_privilege_codes, 'exam_mark-group-reset_edit')}">
+    	<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-group-reset_edit')}">
     	<a class="btn" href="${ctx}/admin/exam/group/edit-full?subjectCode=${group.subjectCode}&number=${group.number}">重置修改</a>&nbsp;
         </c:if>
         <a id="btnSubmit" href="##" class="btn btn-primary">保 存</a>

+ 11 - 11
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/groupList.jsp

@@ -12,23 +12,23 @@
 </head>
 <body>
 <ul class="nav nav-tabs">
-<c:if test="${fn:contains(role_privilege_codes, 'exam_mark-mark')}">
+<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-mark')}">
     <li><a href="${ctx}/admin/exam/mark?subjectCode=${subject.code}">评卷进度</a></li>
     </c:if>
     <li class="active"><a href="##">分组管理</a></li>
-    <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-marker')}">
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-marker')}">
     <li><a href="${ctx}/admin/exam/marker?subjectCode=${subject.code}">评卷员管理</a></li>
     </c:if>
-    <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-trial')}">
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-trial')}">
     <li><a href="${ctx}/admin/exam/trial?subjectCode=${subject.code}">试评管理</a></li>
     </c:if>
-    <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-library')}">
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-library')}">
     <li><a href="${ctx}/admin/exam/library?subjectCode=${subject.code}">任务管理</a></li>
     </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-arbitrate')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-arbitrate')}">
     <li><a href="${ctx}/admin/exam/arbitrate?subjectCode=${subject.code}">仲裁管理</a></li>
     </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-quality')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-quality')}">
     <li><a href="${ctx}/admin/exam/quality?subjectCode=${subject.code}">质量监控</a></li>
     </c:if>
 </ul>
@@ -43,7 +43,7 @@
         &nbsp;
         <input id="btnSubmit" class="btn btn-primary" type="submit" value="查询"/>
 
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-group-add')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-group-add')}">
 	            &nbsp;
 	 			<a href="${ctx}/admin/exam/group/add?subjectCode=${subject.code}" class="btn">新增</a>
         </c:if>
@@ -86,10 +86,10 @@
             <td>${result.scoreList}</td>
             <td>${result.selectiveIndex}</td>
             <td>
-            <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-marker')}">
+            <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-marker')}">
                 <a href="${ctx}/admin/exam/marker?subjectCode=${result.subjectCode}&groupNumber=${result.number}">${result.markerCount}</a>
             </c:if>
-            <c:if test="${!fn:contains(role_privilege_codes, 'exam_mark-marker')}">
+            <c:if test="${!fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-marker')}">
             ${result.markerCount}
             </c:if>
             </td>
@@ -126,11 +126,11 @@
                             <a href="${ctx}/admin/exam/group/reset?subjectCode=${result.subjectCode}&number=${result.number}" data-number="${result.number}" class="reset-button">重置</a>
                         </c:if> --%>
                         &nbsp;
-                        <c:if test="${examType!='MULTI_MEDIA' && fn:contains(role_privilege_codes, 'exam_mark-group-edit')}">
+                        <c:if test="${examType!='MULTI_MEDIA' && fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-group-edit')}">
                             <a href="${ctx}/admin/exam/group/edit-simple?subjectCode=${result.subjectCode}&number=${result.number}" data-number="${result.number}" class="edit-button">修改</a>
                             &nbsp;
                         </c:if>
-                        <c:if test="${examType=='MULTI_MEDIA' && fn:contains(role_privilege_codes, 'exam_mark-group-delete')}">
+                        <c:if test="${examType=='MULTI_MEDIA' && fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-group-delete')}">
                             <a href="${ctx}/admin/exam/group/delete?subjectCode=${result.subjectCode}&number=${result.number}" data-number="${result.number}" class="delete-button">删除</a>
                             &nbsp;
                         </c:if>

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

@@ -11,10 +11,10 @@
 <body>
     <ul class="nav nav-tabs">
         <li class="active"><a href="##">成绩复核进度</a></li>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_inspected_info-list')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_inspected_info-list')}">
         <li><a href="${ctx}/admin/exam/inspected/list">全卷复核</a></li>
         </c:if>
-        <c:if test="${examFinish && fn:contains(role_privilege_codes, 'exam_inspected_info-score_verify')}">
+        <c:if test="${examFinish && fnx:hasPrivilegeCode(role_privilege_codes, 'exam_inspected_info-score_verify')}">
         <li><a href="${ctx}/admin/exam/score/verify/init">成绩校验</a></li>
         </c:if>
     </ul>

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

@@ -20,11 +20,11 @@
     </form>
 </div>
 <ul class="nav nav-tabs">
-<c:if test="${fn:contains(role_privilege_codes, 'exam_inspected_info-info')}">
+<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_inspected_info-info')}">
         <li><a href="${ctx}/admin/exam/inspected/info">成绩复核进度</a></li>
         </c:if>
         <li class="active"><a href="##">全卷复核</a></li>
-        <c:if test="${examFinish && fn:contains(role_privilege_codes, 'exam_inspected_info-score_verify')}">
+        <c:if test="${examFinish && fnx:hasPrivilegeCode(role_privilege_codes, 'exam_inspected_info-score_verify')}">
         <li><a href="${ctx}/admin/exam/score/verify/init">成绩校验</a></li>
         </c:if>
 </ul>
@@ -101,7 +101,7 @@
         <input id="btnStart" class="btn" type="button" value="批量复核:${inspectCount }" onclick="goStart()"/>
         </c:if>
         &nbsp;
-        <c:if test="${!empty showNextInspect &&fn:contains(role_privilege_codes, 'exam_inspected_info-next_round')}">
+        <c:if test="${!empty showNextInspect &&fnx:hasPrivilegeCode(role_privilege_codes, 'exam_inspected_info-next_round')}">
         <input id="btnNextRound" class="btn" type="button" value="再次复核" onclick="nextRound()"/>
         &nbsp;
         </c:if>

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

@@ -88,23 +88,23 @@
 </head>
 <body>
 <ul class="nav nav-tabs">
-<c:if test="${fn:contains(role_privilege_codes, 'exam_mark-mark')}">
+<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-mark')}">
 	<li><a href="${ctx}/admin/exam/mark?subjectCode=${query.subjectCode}">评卷进度</a></li>
 	</c:if>
-	<c:if test="${fn:contains(role_privilege_codes, 'exam_mark-group')}">
+	<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-group')}">
     <li><a href="${ctx}/admin/exam/group?subjectCode=${query.subjectCode}">分组管理</a></li>
     </c:if>
-    <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-marker')}">
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-marker')}">
     <li><a href="${ctx}/admin/exam/marker?subjectCode=${query.subjectCode}">评卷员管理</a></li>
     </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-trial')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-trial')}">
     <li><a href="${ctx}/admin/exam/trial?subjectCode=${query.subjectCode}">试评管理</a></li>
     </c:if>
     <li class="active"><a href="##">任务管理</a></li>
-    <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-arbitrate')}">
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-arbitrate')}">
     <li><a href="${ctx}/admin/exam/arbitrate?subjectCode=${query.subjectCode}">仲裁管理</a></li>
     </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-quality')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-quality')}">
     <li><a href="${ctx}/admin/exam/quality?subjectCode=${query.subjectCode}">质量监控</a></li>
     </c:if>
 </ul>
@@ -174,7 +174,7 @@
         &nbsp;
         <input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
         &nbsp;
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-library-inspect') && examType!='MULTI_MEDIA' && inspectedCount!=null && inspectedCount>0}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-library-inspect') && examType!='MULTI_MEDIA' && inspectedCount!=null && inspectedCount>0}">
             <a id="btnInspected" target="_blank" href="${ctx}/web/admin/exam/library/inspected/start?subjectCode=${query.subjectCode}&groupNumber=${query.groupNumber}&markerId=${query.markerId}&examNumber=${query.examNumber}&secretNumber=${query.secretNumber}&startScore=${query.startScore}&endScore=${query.endScore}&questionScore=${query.questionScore}&unselective=${query.unselective}"
              class="btn">待复核:${inspectedCount }</a>
         </c:if>
@@ -246,14 +246,11 @@
                 </c:if>
             </td>
             <td> ${result.headerLoginName} </td>
-	            		<td>
-			            	<c:if test="${result.headerTime!=null}">
-			                    <fmt:formatDate value="${result.headerTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
-			                </c:if>
-			                <c:if test="${result.headerTime==null}">
-			                    &nbsp;
-			                </c:if>
-			            </td>
+			<td>
+				<c:if test="${result.headerLoginName!=null && result.headerTime!=null}">
+					<fmt:formatDate value="${result.headerTime}" pattern="yyyy-MM-dd HH:mm:ss"/>
+				</c:if>
+			</td>
             <td>
                 <c:if test="${result.status.value==1 || result.status.value==3 ||result.status.value==5 ||result.status.value==6}">
                    <%--  <c:if test="${examType=='MULTI_MEDIA'}">
@@ -296,7 +293,7 @@
                 </div>
             </div>
             <div style="text-align:center;">
-            <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-library-reject')}">
+            <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-library-reject')}">
                 <a class="btn btn-primary task-btn">打回</a>
                 </c:if>
                 &nbsp;

+ 8 - 8
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/markInfo.jsp

@@ -11,22 +11,22 @@
 <body>
     <ul class="nav nav-tabs">
         <li class="active"><a href="##">评卷进度</a></li>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-group')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-group')}">
         	<li><a href="${ctx}/admin/exam/group?subjectCode=${query.code}">分组管理</a></li>
         </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-marker')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-marker')}">
         	<li><a href="${ctx}/admin/exam/marker?subjectCode=${query.code}">评卷员管理</a></li>
         </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-trial')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-trial')}">
         	<li><a href="${ctx}/admin/exam/trial?subjectCode=${query.code}">试评管理</a></li>
         </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-library')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-library')}">
         	<li><a href="${ctx}/admin/exam/library?subjectCode=${query.code}">任务管理</a></li>
         </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-arbitrate')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-arbitrate')}">
         	<li><a href="${ctx}/admin/exam/arbitrate?subjectCode=${query.code}">仲裁管理</a></li>
         </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-quality')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-quality')}">
         	<li><a href="${ctx}/admin/exam/quality?subjectCode=${query.code}">质量监控</a></li>
         </c:if>
     </ul>
@@ -93,11 +93,11 @@
 				    <fmt:formatNumber type="number" value="${result.subject.subjectiveScore}" pattern="###.###"/>
 				</td>
 				<td>
-				<c:if test="${fn:contains(role_privilege_codes, 'exam_mark-group')}">
+				<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-group')}">
 				<a href="${ctx}/admin/exam/group?subjectCode=${result.subject.code}">
 					${result.groupCount}</a>
 					</c:if>
-					<c:if test="${!fn:contains(role_privilege_codes, 'exam_mark-group')}">
+					<c:if test="${!fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-group')}">
 					${result.groupCount}
 					</c:if>
 				</td>

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

@@ -93,23 +93,23 @@
 </head>
 <body>
 <ul class="nav nav-tabs">
-<c:if test="${fn:contains(role_privilege_codes, 'exam_mark-mark')}">
+<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-mark')}">
     <li><a href="${ctx}/admin/exam/mark?subjectCode=${subject.code}">评卷进度</a></li>
     </c:if>
-    <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-group')}">
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-group')}">
     <li><a href="${ctx}/admin/exam/group?subjectCode=${query.subjectCode}">分组管理</a></li>
     </c:if>
     <li class="active"><a href="##">评卷员管理</a></li>
-    <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-trial')}">
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-trial')}">
     <li><a href="${ctx}/admin/exam/trial?subjectCode=${query.subjectCode}">试评管理</a></li>
     </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-library')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-library')}">
     <li><a href="${ctx}/admin/exam/library?subjectCode=${query.subjectCode}">任务管理</a></li>
     </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-arbitrate')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-arbitrate')}">
     <li><a href="${ctx}/admin/exam/arbitrate?subjectCode=${query.subjectCode}">仲裁管理</a></li>
     </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-quality')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-quality')}">
     <li><a href="${ctx}/admin/exam/quality?subjectCode=${query.subjectCode}">质量监控</a></li>
     </c:if>
 </ul>
@@ -207,7 +207,7 @@
             	<c:if test="${marker.reseting==true}">
                     正在重置
                 </c:if>
-                <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-marker-reset') && marker.reseting==false}">
+                <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-marker-reset') && marker.reseting==false}">
                  &nbsp;<a href="javascript:void(0)" class="reset-button" data-id="${marker.id}">重置</a>
                 </c:if>
             </td>

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

@@ -249,6 +249,8 @@
     var subjectData = subjectString.split(","); 
     var scoreString = "${totalScoreList}";
     var scoreData = scoreString.split(",");
+    var colorList = ['#7cb5ec', '#90ed7d', '#f7a35c', '#8085e9', '#f15c80', '#e4d354', '#2b908f', '#f45b5b', '#91e8e1', '#058DC7', '#50B432', '#ED561B', '#DDDF00', '#24CBE5', '#64E572', '#FF9655', '#FFF263', '#6AF9C4', '#D47F00', '#00FFFF', '#D4FF55', '#4572A7', '#AA4643', '#89A54E', '#80699B', '#3D96AE', '#DB843D', '#92A8CD', '#A47D7C', '#7FBF55',
+                     '#a5c2d5', '#cbab4f', '#76a871', '#a56f8f', '#c12c44', '#9f7961', '#76a871', '#6f83a5', '0f4fb8', '106dcf', '#b3d74c', '#74aae3', '#5cdec6', '#3526de', '#9d65ee', '#a8b3e3', '#6bc1b7', '549ee2', '#6e98d6'];
     myChart.setOption({
     	title: {
             text: '科目总分统计'
@@ -285,6 +287,13 @@
 				  label: {
     		            show: true,
     		            position: 'top',
+    		          },
+    		      itemStyle:{
+    		            normal:{
+    		              color:function(params){
+    		                return colorList[params.dataIndex%colorList.length]
+    		              }
+    		            }
     		          }
     		    }
     		  ]

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

@@ -52,7 +52,7 @@
         &nbsp;
         <input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
         
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_problem_history-batch_reset') && query.status=='WAITING'}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_problem_history-batch_reset') && query.status=='WAITING'}">
         <input id="btnRest" class="btn" type="button" value="批量重置" onclick="goRest()"/>
         </c:if>
     </div>
@@ -117,7 +117,7 @@
                 <%--  <a class="json-link" href="${ctx}/admin/exam/library/getJson?studentId=${result.id}&groupNumber=${result.number}" target="_blank">原图</a>--%>
                	<a href="${ctx}/web/admin/exam/track/library?libraryId=${result.libraryId}&subjectCode=${result.subjectCode}" target="_blank">试卷详情</a>
                 &nbsp;
-                <c:if test="${fn:contains(role_privilege_codes, 'exam_problem_history-reset') && result.problemUserName==null}">
+                <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_problem_history-reset') && result.problemUserName==null}">
 	                <a href="##" data-id="${result.libraryId}" class="back-link">重置</a>
                 </c:if>
             </td>

+ 6 - 6
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/qualityList.jsp

@@ -9,22 +9,22 @@
 </head>
 <body>
     <ul class="nav nav-tabs">
-    <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-mark')}">
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-mark')}">
 		<li><a href="${ctx}/admin/exam/mark?subjectCode=${subject.code}">评卷进度</a></li>
 		</c:if>
-		<c:if test="${fn:contains(role_privilege_codes, 'exam_mark-group')}">
+		<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-group')}">
         <li><a href="${ctx}/admin/exam/group?subjectCode=${query.subjectCode}">分组管理</a></li>
         </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-marker')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-marker')}">
         <li><a href="${ctx}/admin/exam/marker?subjectCode=${query.subjectCode}">评卷员管理</a></li>
         </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-trial')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-trial')}">
         <li><a href="${ctx}/admin/exam/trial?subjectCode=${query.subjectCode}">试评管理</a></li>
         </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-library')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-library')}">
         <li><a href="${ctx}/admin/exam/library?subjectCode=${query.subjectCode}">任务管理</a></li>
         </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-arbitrate')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-arbitrate')}">
         <li><a href="${ctx}/admin/exam/arbitrate?subjectCode=${query.subjectCode}">仲裁管理</a></li>
         </c:if>
         <li class="active"><a href="##">质量监控</a></li>

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

@@ -12,7 +12,7 @@
 </head>
 <body>
 <ul class="nav nav-tabs">
- <c:if test="${fn:contains(role_privilege_codes, 'exam_reject_list-paper')}">
+ <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_reject_list-paper')}">
     <li><a href="${ctx}/admin/exam/reject/list">打回卷</a></li>
     </c:if>
     <li class="active"><a href="##">打回记录</a></li>

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

@@ -13,7 +13,7 @@
 <body>
 <ul class="nav nav-tabs">
     <li class="active"><a href="##">打回卷</a></li>
-    <c:if test="${fn:contains(role_privilege_codes, 'exam_reject_list-history')}">
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_reject_list-history')}">
     <li><a href="${ctx}/admin/exam/reject/history">打回记录</a></li>
     </c:if>
 </ul>

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

@@ -72,7 +72,7 @@
         &nbsp;
         <input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
         &nbsp;
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_score-export')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_score-export')}">
             <input id="export-button" class="btn" type="button" value="导出" onclick="goExport()"
                    <c:if test="${!enableExport}">disabled</c:if> title="${exportMessage}"/>
         </c:if>

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

@@ -14,10 +14,10 @@
 </head>
 <body>
 	<ul class="nav nav-tabs">
-	<c:if test="${fn:contains(role_privilege_codes, 'exam_inspected_info-info')}">
+	<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_inspected_info-info')}">
 		<li><a href="${ctx}/admin/exam/inspected/info">成绩复核进度</a></li>
 		</c:if>
-		<c:if test="${fn:contains(role_privilege_codes, 'exam_inspected_info-list')}">
+		<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_inspected_info-list')}">
 		<li><a href="${ctx}/admin/exam/inspected/list">全卷复核</a></li>
 		</c:if>
 		<li class="active"><a href="##">成绩校验</a></li>

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

@@ -14,10 +14,10 @@
 </head>
 <body>
 	<ul class="nav nav-tabs">
-	<c:if test="${fn:contains(role_privilege_codes, 'exam_inspected_info-info')}">
+	<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_inspected_info-info')}">
 		<li><a href="${ctx}/admin/exam/inspected/info">成绩复核进度</a></li>
 		</c:if>
-		<c:if test="${fn:contains(role_privilege_codes, 'exam_inspected_info-list')}">
+		<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_inspected_info-list')}">
 		<li><a href="${ctx}/admin/exam/inspected/list">全卷复核</a></li>
 		</c:if>
 		<li class="active"><a href="##">成绩校验</a></li>

+ 6 - 6
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/trialList.jsp

@@ -12,23 +12,23 @@
 </head>
 <body>
 <ul class="nav nav-tabs">
-<c:if test="${fn:contains(role_privilege_codes, 'exam_mark-mark')}">
+<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-mark')}">
 	<li><a href="${ctx}/admin/exam/mark?subjectCode=${subject.code}">评卷进度</a></li>
 	</c:if>
-	<c:if test="${fn:contains(role_privilege_codes, 'exam_mark-group')}">
+	<c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-group')}">
     <li><a href="${ctx}/admin/exam/group?subjectCode=${query.subjectCode}">分组管理</a></li>
     </c:if>
-    <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-marker')}">
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-marker')}">
     <li><a href="${ctx}/admin/exam/marker?subjectCode=${query.subjectCode}">评卷员管理</a></li>
     </c:if>
     <li class="active"><a href="##">试评管理</a></li>
-    <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-library')}">
+    <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-library')}">
     <li><a href="${ctx}/admin/exam/library?subjectCode=${query.subjectCode}">任务管理</a></li>
      </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-arbitrate')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-arbitrate')}">
     <li><a href="${ctx}/admin/exam/arbitrate?subjectCode=${query.subjectCode}">仲裁管理</a></li>
     </c:if>
-        <c:if test="${fn:contains(role_privilege_codes, 'exam_mark-quality')}">
+        <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-quality')}">
     <li><a href="${ctx}/admin/exam/quality?subjectCode=${query.subjectCode}">质量监控</a></li>
     </c:if>
 </ul>

+ 1 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/sys/schoolEdit.jsp

@@ -63,7 +63,7 @@
 	<div class="control-group">
         <label class="control-label">删除分组授权码</label>
         <div class="controls">
-            <input name="groupDeleteCode" value="${school. groupDeleteCode}"/>
+            <input name="groupDeleteCode" type="checkbox" <c:if test="${school.groupDeleteCode}">checked</c:if>/>
         </div>
     </div>
     <div class="control-group">

+ 28 - 28
stmms-web/src/main/webapp/sql/stmms_ft.sql

@@ -26,7 +26,7 @@ CREATE TABLE `b_school`
 	`double_track`  tinyint(1)  NOT NULL COMMENT '双评轨迹',
     `access_key`    varchar(64)  DEFAULT NULL COMMENT 'AccessKey',
     `access_secret` varchar(64)  DEFAULT NULL COMMENT 'AccessSecret',
-    `group_delete_code` varchar(64)  DEFAULT NULL COMMENT '删除分组授权码',
+    `group_delete_check` tinyint(1)  NOT NULL COMMENT '开启删除分组授权码',
     `create_time`   datetime    NOT NULL COMMENT '创建时间',
     `update_time`   datetime     DEFAULT NULL COMMENT '修改时间',
     PRIMARY KEY (`id`),
@@ -1288,11 +1288,11 @@ VALUES ('exam_paper', '科目管理', 'root_code', 'MENU', '/admin/exam/paper',
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
 VALUES ('exam_scan', '扫描进度', 'root_code', 'MENU', '/admin/exam/scan', 50,1,'icon-print','index.scan');
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
-VALUES ('exam_mark', '评卷管理', 'root_code', 'MENU', '/admin/exam/mark', 60,1,'icon-pencil','index.mark');
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_mark-mark', '评卷进度', 'exam_mark', 'BUTTON', 2,1);
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_mark-group', '分组管理', 'exam_mark', 'BUTTON', 2,2);
+VALUES ('exam_mark', '评卷管理', 'root_code', 'MENU', '/admin/basic/role/info/sub/page', 60,1,'icon-pencil','index.mark');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_mark-mark', '评卷进度', 'exam_mark', 'PAGE','/admin/exam/mark', 2,1);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_mark-group', '分组管理', 'exam_mark', 'PAGE','/admin/exam/group', 2,2);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
 VALUES ('exam_mark-group-add', '新增', 'exam_mark-group', 'BUTTON', 3,1);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
@@ -1301,28 +1301,28 @@ INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`lev
 VALUES ('exam_mark-group-reset_edit', '重置修改', 'exam_mark-group', 'BUTTON', 3,3);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
 VALUES ('exam_mark-group-delete', '删除', 'exam_mark-group', 'BUTTON', 3,4);
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_mark-marker', '评卷员管理', 'exam_mark', 'BUTTON', 2,3);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_mark-marker', '评卷员管理', 'exam_mark', 'PAGE','/admin/exam/marker', 2,3);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
 VALUES ('exam_mark-marker-reset', '重置', 'exam_mark-marker', 'BUTTON', 3,1);
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_mark-trial', '试评管理', 'exam_mark', 'BUTTON', 2,4);
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_mark-library', '任务管理', 'exam_mark', 'BUTTON', 2,5);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_mark-trial', '试评管理', 'exam_mark', 'PAGE','/admin/exam/trial', 2,4);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_mark-library', '任务管理', 'exam_mark', 'PAGE','/admin/exam/library', 2,5);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
 VALUES ('exam_mark-library-inspect', '复核', 'exam_mark-library', 'BUTTON', 3,1);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
 VALUES ('exam_mark-library-reject', '打回', 'exam_mark-library', 'BUTTON', 3,2);
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_mark-arbitrate', '仲裁管理', 'exam_mark', 'BUTTON', 2,6);
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_mark-quality', '质量监控', 'exam_mark', 'BUTTON', 2,7);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_mark-arbitrate', '仲裁管理', 'exam_mark', 'PAGE','/admin/exam/arbitrate', 2,6);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_mark-quality', '质量监控', 'exam_mark', 'PAGE','/admin/exam/quality', 2,7);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
-VALUES ('exam_reject_list', '打回试卷', 'root_code', 'MENU', '/admin/exam/reject/list', 70,1,'icon-bookmark','index.reject');
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_reject_list-paper', '打回卷', 'exam_reject_list', 'BUTTON', 2,1);
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_reject_list-history', '打回记录', 'exam_reject_list', 'BUTTON', 2,2);
+VALUES ('exam_reject_list', '打回试卷', 'root_code', 'MENU', '/admin/basic/role/info/sub/page', 70,1,'icon-bookmark','index.reject');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_reject_list-paper', '打回卷', 'exam_reject_list', 'PAGE','/admin/exam/reject/list', 2,1);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_reject_list-history', '打回记录', 'exam_reject_list', 'PAGE','/admin/exam/reject/history', 2,2);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
 VALUES ('exam_problem_history', '问题试卷', 'root_code', 'MENU', '/admin/exam/problem/history', 80,1,'icon-tag','index.problem');
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
@@ -1330,15 +1330,15 @@ VALUES ('exam_problem_history-reset', '重置', 'exam_problem_history', 'BUTTON'
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
 VALUES ('exam_problem_history-batch_reset', '批量重置', 'exam_problem_history', 'BUTTON', 2,2);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
-VALUES ('exam_inspected_info', '成绩复核', 'root_code', 'MENU', '/admin/exam/inspected/info', 90,1,'icon-flag','index.inspected');
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_inspected_info-info', '成绩复核进度', 'exam_inspected_info', 'BUTTON', 2,1);
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_inspected_info-list', '全卷复核', 'exam_inspected_info', 'BUTTON', 2,2);
+VALUES ('exam_inspected_info', '成绩复核', 'root_code', 'MENU', '/admin/basic/role/info/sub/page', 90,1,'icon-flag','index.inspected');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_inspected_info-info', '成绩复核进度', 'exam_inspected_info', 'PAGE','/admin/exam/inspected/info', 2,1);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_inspected_info-list', '全卷复核', 'exam_inspected_info', 'PAGE','/admin/exam/inspected/list', 2,2);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
 VALUES ('exam_inspected_info-next_round', '再次复核', 'exam_inspected_info-list', 'BUTTON', 3,1);
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_inspected_info-score_verify', '成绩校验', 'exam_inspected_info', 'BUTTON', 2,3);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_inspected_info-score_verify', '成绩校验', 'exam_inspected_info', 'PAGE','/admin/exam/score/verify/init', 2,3);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
 VALUES ('exam_score', '成绩查询', 'root_code', 'MENU', '/admin/exam/score', 100,1,'icon-search','index.score');
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)

+ 31 - 29
stmms-web/src/main/webapp/sql/upgrade/1.3.14.sql

@@ -13,7 +13,7 @@ ALTER TABLE eb_inspect_history ADD COLUMN `inspect_round` 	int(11) NOT NULL COMM
 ALTER TABLE eb_exam_subject ADD COLUMN `selective` 	tinyint(1) NOT NULL DEFAULT 0 COMMENT '选做题科目';
 
 ALTER TABLE b_school ADD COLUMN `double_track`  tinyint(1)  NOT NULL DEFAULT 0 COMMENT '双评轨迹';
-ALTER TABLE b_school ADD COLUMN `group_delete_code` varchar(64)  DEFAULT NULL COMMENT '删除分组授权码';
+ALTER TABLE b_school ADD COLUMN `group_delete_check` tinyint(1)  NOT NULL COMMENT '开启删除分组授权码';
 
 -- 更新选做题科目数据
 UPDATE eb_exam_subject o,
@@ -177,7 +177,8 @@ CREATE TABLE `eb_user_student`
     UNIQUE KEY `index1` (`user_id`, `exam_number`)
 ) ENGINE = InnoDB
   DEFAULT CHARSET = utf8mb4 COMMENT ='用户考生关联表';
-  
+
+--菜单权限  
 DROP TABLE IF EXISTS `b_privilege`;
 CREATE TABLE `b_privilege`
 (
@@ -222,11 +223,11 @@ VALUES ('exam_paper', '科目管理', 'root_code', 'MENU', '/admin/exam/paper',
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
 VALUES ('exam_scan', '扫描进度', 'root_code', 'MENU', '/admin/exam/scan', 50,1,'icon-print','index.scan');
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
-VALUES ('exam_mark', '评卷管理', 'root_code', 'MENU', '/admin/exam/mark', 60,1,'icon-pencil','index.mark');
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_mark-mark', '评卷进度', 'exam_mark', 'BUTTON', 2,1);
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_mark-group', '分组管理', 'exam_mark', 'BUTTON', 2,2);
+VALUES ('exam_mark', '评卷管理', 'root_code', 'MENU', '/admin/basic/role/info/sub/page', 60,1,'icon-pencil','index.mark');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_mark-mark', '评卷进度', 'exam_mark', 'PAGE','/admin/exam/mark', 2,1);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_mark-group', '分组管理', 'exam_mark', 'PAGE','/admin/exam/group', 2,2);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
 VALUES ('exam_mark-group-add', '新增', 'exam_mark-group', 'BUTTON', 3,1);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
@@ -235,28 +236,28 @@ INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`lev
 VALUES ('exam_mark-group-reset_edit', '重置修改', 'exam_mark-group', 'BUTTON', 3,3);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
 VALUES ('exam_mark-group-delete', '删除', 'exam_mark-group', 'BUTTON', 3,4);
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_mark-marker', '评卷员管理', 'exam_mark', 'BUTTON', 2,3);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_mark-marker', '评卷员管理', 'exam_mark', 'PAGE','/admin/exam/marker', 2,3);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
 VALUES ('exam_mark-marker-reset', '重置', 'exam_mark-marker', 'BUTTON', 3,1);
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_mark-trial', '试评管理', 'exam_mark', 'BUTTON', 2,4);
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_mark-library', '任务管理', 'exam_mark', 'BUTTON', 2,5);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_mark-trial', '试评管理', 'exam_mark', 'PAGE','/admin/exam/trial', 2,4);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_mark-library', '任务管理', 'exam_mark', 'PAGE','/admin/exam/library', 2,5);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
 VALUES ('exam_mark-library-inspect', '复核', 'exam_mark-library', 'BUTTON', 3,1);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
 VALUES ('exam_mark-library-reject', '打回', 'exam_mark-library', 'BUTTON', 3,2);
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_mark-arbitrate', '仲裁管理', 'exam_mark', 'BUTTON', 2,6);
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_mark-quality', '质量监控', 'exam_mark', 'BUTTON', 2,7);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_mark-arbitrate', '仲裁管理', 'exam_mark', 'PAGE','/admin/exam/arbitrate', 2,6);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_mark-quality', '质量监控', 'exam_mark', 'PAGE','/admin/exam/quality', 2,7);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
-VALUES ('exam_reject_list', '打回试卷', 'root_code', 'MENU', '/admin/exam/reject/list', 70,1,'icon-bookmark','index.reject');
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_reject_list-paper', '打回卷', 'exam_reject_list', 'BUTTON', 2,1);
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_reject_list-history', '打回记录', 'exam_reject_list', 'BUTTON', 2,2);
+VALUES ('exam_reject_list', '打回试卷', 'root_code', 'MENU', '/admin/basic/role/info/sub/page', 70,1,'icon-bookmark','index.reject');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_reject_list-paper', '打回卷', 'exam_reject_list', 'PAGE','/admin/exam/reject/list', 2,1);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_reject_list-history', '打回记录', 'exam_reject_list', 'PAGE','/admin/exam/reject/history', 2,2);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
 VALUES ('exam_problem_history', '问题试卷', 'root_code', 'MENU', '/admin/exam/problem/history', 80,1,'icon-tag','index.problem');
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
@@ -264,15 +265,15 @@ VALUES ('exam_problem_history-reset', '重置', 'exam_problem_history', 'BUTTON'
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
 VALUES ('exam_problem_history-batch_reset', '批量重置', 'exam_problem_history', 'BUTTON', 2,2);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
-VALUES ('exam_inspected_info', '成绩复核', 'root_code', 'MENU', '/admin/exam/inspected/info', 90,1,'icon-flag','index.inspected');
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_inspected_info-info', '成绩复核进度', 'exam_inspected_info', 'BUTTON', 2,1);
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_inspected_info-list', '全卷复核', 'exam_inspected_info', 'BUTTON', 2,2);
+VALUES ('exam_inspected_info', '成绩复核', 'root_code', 'MENU', '/admin/basic/role/info/sub/page', 90,1,'icon-flag','index.inspected');
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_inspected_info-info', '成绩复核进度', 'exam_inspected_info', 'PAGE','/admin/exam/inspected/info', 2,1);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_inspected_info-list', '全卷复核', 'exam_inspected_info', 'PAGE','/admin/exam/inspected/list', 2,2);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
 VALUES ('exam_inspected_info-next_round', '再次复核', 'exam_inspected_info-list', 'BUTTON', 3,1);
-INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
-VALUES ('exam_inspected_info-score_verify', '成绩校验', 'exam_inspected_info', 'BUTTON', 2,3);
+INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`privilege_uri`,`level`, `seq`)
+VALUES ('exam_inspected_info-score_verify', '成绩校验', 'exam_inspected_info', 'PAGE','/admin/exam/score/verify/init', 2,3);
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
 VALUES ('exam_score', '成绩查询', 'root_code', 'MENU', '/admin/exam/score', 100,1,'icon-search','index.score');
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`,`level`, `seq`)
@@ -285,6 +286,7 @@ INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `pr
 VALUES ('exam_check_answer', '数据检查', 'root_code', 'MENU', '/admin/exam/check/answer', 130,1,'icon-check','index.check');
 INSERT INTO `b_privilege` ( `code`, `name`, `parent_code`, `privilege_type`, `privilege_uri`, `seq`,`level`,`icon`,`i18n`)
 VALUES ('operation_log', '操作日志', 'root_code', 'MENU', '/admin/operation/log', 140,1,'icon-tasks','index.log');
+
   
 INSERT INTO b_role_privilege (`school_id`, `role_code`, `privilege_code`,`enable`)
 SELECT s.id,'SCHOOL_ADMIN',p.`code`,1 from b_privilege p join b_school s;