xiatian před 1 rokem
rodič
revize
c358288eb3
19 změnil soubory, kde provedl 706 přidání a 88 odebrání
  1. 27 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/bean/RoleInfoQuery.java
  2. 37 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/bean/RoleInfoVo.java
  3. 33 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/bean/RolePrivilegeDomain.java
  4. 33 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/bean/RolePrivilegeVo.java
  5. 0 48
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/bean/TreeNode.java
  6. 16 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/dao/RoleInfoDao.java
  7. 9 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/dao/RolePrivilegeDao.java
  8. 115 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/model/RoleInfo.java
  9. 16 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/service/RoleInfoService.java
  10. 8 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/service/RolePrivilegeService.java
  11. 71 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/service/impl/RoleInfoServiceImpl.java
  12. 51 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/service/impl/RolePrivilegeServiceImpl.java
  13. 0 37
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/basic/PrivilegeController.java
  14. 71 0
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/basic/RoleInfoController.java
  15. 76 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/basic/roleInfoList.jsp
  16. 70 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/basic/rolePrivilege.jsp
  17. 2 0
      stmms-web/src/main/webapp/WEB-INF/views/modules/sys/schoolList.jsp
  18. 16 0
      stmms-web/src/main/webapp/sql/stmms_ft.sql
  19. 55 3
      stmms-web/src/main/webapp/sql/upgrade/1.3.14.sql

+ 27 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/bean/RoleInfoQuery.java

@@ -0,0 +1,27 @@
+package cn.com.qmth.stmms.biz.basic.bean;
+
+import cn.com.qmth.stmms.biz.common.BaseQuery;
+
+public class RoleInfoQuery extends BaseQuery<RoleInfoVo> {
+
+	private String role;
+
+	private Integer schoolId;
+
+	public String getRole() {
+		return role;
+	}
+
+	public void setRole(String role) {
+		this.role = role;
+	}
+
+	public Integer getSchoolId() {
+		return schoolId;
+	}
+
+	public void setSchoolId(Integer schoolId) {
+		this.schoolId = schoolId;
+	}
+
+}

+ 37 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/bean/RoleInfoVo.java

@@ -0,0 +1,37 @@
+package cn.com.qmth.stmms.biz.basic.bean;
+
+import java.util.Date;
+
+import cn.com.qmth.stmms.common.enums.Role;
+
+public class RoleInfoVo {
+	private String name;
+	private Role code;
+	private String updaterName;
+	private Date updateTime;
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public Role getCode() {
+		return code;
+	}
+	public void setCode(String codestr) {
+		this.code = Role.valueOf(codestr);
+	}
+	public String getUpdaterName() {
+		return updaterName;
+	}
+	public void setUpdaterName(String updaterName) {
+		this.updaterName = updaterName;
+	}
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+	
+}

+ 33 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/bean/RolePrivilegeDomain.java

@@ -0,0 +1,33 @@
+package cn.com.qmth.stmms.biz.basic.bean;
+
+public class RolePrivilegeDomain {
+	private String role;
+	private Integer schoolId;
+	private String selectPrivileges;
+	private Integer userId;
+	public String getRole() {
+		return role;
+	}
+	public void setRole(String role) {
+		this.role = role;
+	}
+	public Integer getSchoolId() {
+		return schoolId;
+	}
+	public void setSchoolId(Integer schoolId) {
+		this.schoolId = schoolId;
+	}
+	public String getSelectPrivileges() {
+		return selectPrivileges;
+	}
+	public void setSelectPrivileges(String selectPrivileges) {
+		this.selectPrivileges = selectPrivileges;
+	}
+	public Integer getUserId() {
+		return userId;
+	}
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
+	
+}

+ 33 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/bean/RolePrivilegeVo.java

@@ -0,0 +1,33 @@
+package cn.com.qmth.stmms.biz.basic.bean;
+
+public class RolePrivilegeVo {
+	private String name;
+	private String code;
+	private String parentCode;
+	private Boolean enable;
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public String getCode() {
+		return code;
+	}
+	public void setCode(String code) {
+		this.code = code;
+	}
+	public String getParentCode() {
+		return parentCode;
+	}
+	public void setParentCode(String parentCode) {
+		this.parentCode = parentCode;
+	}
+	public Boolean getEnable() {
+		return enable;
+	}
+	public void setEnable(Boolean enable) {
+		this.enable = enable;
+	}
+	
+}

+ 0 - 48
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/bean/TreeNode.java

@@ -1,48 +0,0 @@
-package cn.com.qmth.stmms.biz.basic.bean;
-
-public class TreeNode {
-	private String code;
-	private String parentCode;
-	private String name;
-	private Boolean checked;
-	private Integer seq;
-	public String getCode() {
-		return code;
-	}
-	public void setCode(String code) {
-		this.code = code;
-	}
-	public String getParentCode() {
-		return parentCode;
-	}
-	public void setParentCode(String parentCode) {
-		this.parentCode = parentCode;
-	}
-	public String getName() {
-		return name;
-	}
-	public void setName(String name) {
-		this.name = name;
-	}
-	public Boolean getChecked() {
-		return checked;
-	}
-	public void setChecked(Boolean checked) {
-		this.checked = checked;
-	}
-	public Integer getSeq() {
-		return seq;
-	}
-	public void setSeq(Integer seq) {
-		this.seq = seq;
-	}
-	public TreeNode(String code, String parentCode, String name, Boolean checked, Integer seq) {
-		super();
-		this.code = code;
-		this.parentCode = parentCode;
-		this.name = name;
-		this.checked = checked;
-		this.seq = seq;
-	}
-	
-}

+ 16 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/dao/RoleInfoDao.java

@@ -0,0 +1,16 @@
+package cn.com.qmth.stmms.biz.basic.dao;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import cn.com.qmth.stmms.biz.basic.model.RoleInfo;
+import cn.com.qmth.stmms.common.enums.Role;
+
+public interface RoleInfoDao extends PagingAndSortingRepository<RoleInfo, Integer>, JpaSpecificationExecutor<RoleInfo>,
+        JpaRepository<RoleInfo, Integer> {
+
+	RoleInfo findBySchoolIdAndCode(Integer schoolId, Role role);
+
+
+}

+ 9 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/dao/RolePrivilegeDao.java

@@ -4,6 +4,8 @@ import java.util.List;
 
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.PagingAndSortingRepository;
 
 import cn.com.qmth.stmms.biz.basic.model.RolePrivilege;
@@ -14,4 +16,11 @@ public interface RolePrivilegeDao extends PagingAndSortingRepository<RolePrivile
 
 	List<RolePrivilege> findBySchoolIdAndRoleCodeAndEnable(Integer schoolId, Role role, boolean b);
 
+	@Modifying
+    @Query("update RolePrivilege t set t.enable=0 where t.schoolId=?1 and t.roleCode=?2")
+	void disable(Integer schoolId, Role  role);
+
+	@Modifying
+    @Query("update RolePrivilege t set t.enable=1 where t.schoolId=?1 and t.roleCode=?2 and t.privilegeCode in(?3)")
+	void enable(Integer schoolId, Role role,List<String> codes);
 }

+ 115 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/model/RoleInfo.java

@@ -0,0 +1,115 @@
+package cn.com.qmth.stmms.biz.basic.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import cn.com.qmth.stmms.common.enums.Role;
+
+@Entity
+@Table(name = "b_role_info")
+public class RoleInfo implements Serializable {
+
+    private static final long serialVersionUID = -6288949236298877031L;
+    /**
+     * 主键
+     */
+    @Id
+    @GeneratedValue
+    private Integer id;
+    
+    @Column(name = "school_id",nullable = false)
+    private Integer schoolId;
+    
+    @Enumerated(EnumType.STRING)
+    @Column(name = "code",nullable = false)
+    private Role code;
+
+    /**
+     * 权限名称
+     */
+    @Column(name = "name",nullable = false)
+    private String name;
+
+    /**
+     * 排序
+     */
+    @Column(name = "seq",nullable = false)
+    private Integer seq;
+    
+
+    @Temporal(TemporalType.TIMESTAMP)
+    @Column(name = "update_time")
+    private Date updateTime;
+
+    @Column(name = "updater_id")
+    private Integer updaterId;
+
+	public Integer getId() {
+		return id;
+	}
+
+	public void setId(Integer id) {
+		this.id = id;
+	}
+
+	public Role getCode() {
+		return code;
+	}
+
+	public void setCode(Role code) {
+		this.code = code;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Integer getSeq() {
+		return seq;
+	}
+
+	public void setSeq(Integer seq) {
+		this.seq = seq;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public Integer getUpdaterId() {
+		return updaterId;
+	}
+
+	public void setUpdaterId(Integer updaterId) {
+		this.updaterId = updaterId;
+	}
+
+	public Integer getSchoolId() {
+		return schoolId;
+	}
+
+	public void setSchoolId(Integer schoolId) {
+		this.schoolId = schoolId;
+	}
+    
+
+    
+}

+ 16 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/service/RoleInfoService.java

@@ -0,0 +1,16 @@
+package cn.com.qmth.stmms.biz.basic.service;
+
+import java.util.List;
+
+import cn.com.qmth.stmms.biz.basic.bean.RoleInfoQuery;
+import cn.com.qmth.stmms.biz.basic.bean.RoleInfoVo;
+
+public interface RoleInfoService {
+
+	List<RoleInfoVo> findByQuery(RoleInfoQuery query);
+
+	Integer countByQuery(RoleInfoQuery query);
+
+	List<RoleInfoVo> allList(Integer schoolId);
+
+}

+ 8 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/basic/service/RolePrivilegeService.java

@@ -1,12 +1,20 @@
 package cn.com.qmth.stmms.biz.basic.service;
 
+import java.util.List;
 import java.util.Set;
 
+import cn.com.qmth.stmms.biz.basic.bean.RoleInfoQuery;
+import cn.com.qmth.stmms.biz.basic.bean.RolePrivilegeDomain;
+import cn.com.qmth.stmms.biz.basic.bean.RolePrivilegeVo;
 import cn.com.qmth.stmms.common.enums.Role;
 
 public interface RolePrivilegeService {
 
 	Set<String> getRoleCodes(Integer schoolId, Role role);
 
+	List<RolePrivilegeVo> findByQuery(RoleInfoQuery req);
+
+	void save(RolePrivilegeDomain domain);
+
 
 }

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

@@ -0,0 +1,71 @@
+package cn.com.qmth.stmms.biz.basic.service.impl;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+import org.apache.commons.lang3.StringUtils;
+import org.hibernate.SQLQuery;
+import org.hibernate.transform.Transformers;
+import org.springframework.stereotype.Service;
+
+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.model.RoleInfo;
+import cn.com.qmth.stmms.biz.basic.service.RoleInfoService;
+import cn.com.qmth.stmms.biz.common.BaseQueryService;
+
+@Service("roleInfoService")
+public class RoleInfoServiceImpl extends BaseQueryService<RoleInfo> implements RoleInfoService {
+
+	@PersistenceContext
+	private EntityManager entityManager;
+	
+	@SuppressWarnings("unchecked")
+	@Override
+	public List<RoleInfoVo> findByQuery(RoleInfoQuery req) {
+		int offset = (req.getPageNumber() - 1) * req.getPageSize();
+		StringBuilder sql = new StringBuilder();
+		sql.append(" select t.name,t.code, u.name updaterName,t.update_time updateTime ");
+		sql.append(" from b_role_info t left join b_user u on t.updater_id=u.id where t.school_id=" + req.getSchoolId());
+		if(StringUtils.isNotBlank(req.getRole())) {
+			sql.append(" and t.code='"+req.getRole()+"' ");
+		}
+		sql.append(" and t.code in('SCHOOL_ADMIN','SUBJECT_HEADER','SCHOOL_VIEWER','INSPECTOR','COLLEGE_ADMIN')");
+		sql.append(" order by t.update_time desc,t.id ");
+		sql.append(" limit " + offset + "," + req.getPageSize());
+		Query query = entityManager.createNativeQuery(sql.toString());
+		query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(RoleInfoVo.class));
+		List<RoleInfoVo> ret = query.getResultList();
+		return ret;
+	}
+
+	@Override
+	public Integer countByQuery(RoleInfoQuery req) {
+		StringBuilder sql = new StringBuilder();
+		sql.append("select count(1) ");
+		sql.append(" from b_role_info t left join b_user u on t.updater_id=u.id where t.school_id=" + req.getSchoolId());
+		if(StringUtils.isNotBlank(req.getRole())) {
+			sql.append(" and t.code='"+req.getRole()+"' ");
+		}
+		sql.append(" and t.code in('SCHOOL_ADMIN','SUBJECT_HEADER','SCHOOL_VIEWER','INSPECTOR','COLLEGE_ADMIN')");
+		Query query = entityManager.createNativeQuery(sql.toString());
+		return Integer.valueOf(query.getResultList().get(0).toString());
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public List<RoleInfoVo> allList(Integer schoolId) {
+		StringBuilder sql = new StringBuilder();
+		sql.append(" select t.name,t.code ");
+		sql.append(" from b_role_info t  where t.school_id=" + schoolId);
+		sql.append(" and t.code in('SCHOOL_ADMIN','SUBJECT_HEADER','SCHOOL_VIEWER','INSPECTOR','COLLEGE_ADMIN')");
+		sql.append(" order by t.seq ");
+		Query query = entityManager.createNativeQuery(sql.toString());
+		query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(RoleInfoVo.class));
+		List<RoleInfoVo> ret = query.getResultList();
+		return ret;
+	}
+}

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

@@ -1,15 +1,30 @@
 package cn.com.qmth.stmms.biz.basic.service.impl;
 
+import java.util.Arrays;
+import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+import org.apache.commons.lang3.StringUtils;
+import org.hibernate.SQLQuery;
+import org.hibernate.transform.Transformers;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import cn.com.qmth.stmms.biz.basic.bean.RoleInfoQuery;
+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.dao.RoleInfoDao;
 import cn.com.qmth.stmms.biz.basic.dao.RolePrivilegeDao;
+import cn.com.qmth.stmms.biz.basic.model.RoleInfo;
 import cn.com.qmth.stmms.biz.basic.model.RolePrivilege;
 import cn.com.qmth.stmms.biz.basic.service.RolePrivilegeService;
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
@@ -21,6 +36,12 @@ public class RolePrivilegeServiceImpl extends BaseQueryService<RolePrivilege> im
 	private static Object lock = new Object();
 	@Autowired
 	private RolePrivilegeDao rolePrivilegeDao;
+	
+	@Autowired
+	private RoleInfoDao roleInfoDao;
+
+	@PersistenceContext
+	private EntityManager entityManager;
 
 	@Override
 	public Set<String> getRoleCodes(Integer schoolId, Role role) {
@@ -44,4 +65,34 @@ public class RolePrivilegeServiceImpl extends BaseQueryService<RolePrivilege> im
 		}
 		return set;
 	}
+	
+	
+	@SuppressWarnings("unchecked")
+	@Override
+	public List<RolePrivilegeVo> findByQuery(RoleInfoQuery req) {
+		StringBuilder sql = new StringBuilder();
+		sql.append(" select p.name,p.code,p.parent_code parentCode,t.enable ");
+		sql.append(" from b_role_privilege t left join b_privilege p on t.privilege_code=p.code where t.school_id=" 
+		+ req.getSchoolId()+" and t.role_code='"+req.getRole()+"'");
+		sql.append(" order by p.level,p.seq ");
+		Query query = entityManager.createNativeQuery(sql.toString());
+		query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(RolePrivilegeVo.class));
+		List<RolePrivilegeVo> ret = query.getResultList();
+		return ret;
+	}
+
+	@Transactional
+	@Override
+	public void save(RolePrivilegeDomain domain) {
+		Role role=Role.valueOf(domain.getRole());
+		rolePrivilegeDao.disable(domain.getSchoolId(),role);
+		if(StringUtils.isNotBlank(domain.getSelectPrivileges())) {
+			List<String> list = Arrays.asList(domain.getSelectPrivileges().split(",") );
+			rolePrivilegeDao.enable(domain.getSchoolId(),role,list);
+		}
+		RoleInfo ri=roleInfoDao.findBySchoolIdAndCode(domain.getSchoolId(),role);
+		ri.setUpdateTime(new Date());
+		ri.setUpdaterId(domain.getUserId());
+		roleInfoDao.save(ri);
+	}
 }

+ 0 - 37
stmms-web/src/main/java/cn/com/qmth/stmms/admin/basic/PrivilegeController.java

@@ -1,37 +0,0 @@
-package cn.com.qmth.stmms.admin.basic;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import cn.com.qmth.stmms.biz.basic.bean.TreeNode;
-import cn.com.qmth.stmms.common.controller.BaseController;
-
-@Controller
-@RequestMapping("/admin/basic/privilege")
-public class PrivilegeController extends BaseController {
-
-    @RequestMapping(value = "tagTreeselect", method = RequestMethod.GET)
-    public String tagTreeselect(Model model,HttpServletRequest request) {
-    	model.addAttribute("url","/admin/basic/privilege/tree");
-        return "modules/sys/tagTreeselect";
-    }
-    
-    @ResponseBody
-    @RequestMapping(value = "tree", method = RequestMethod.GET)
-    public List<TreeNode> tree(HttpServletRequest request) {
-    	List<TreeNode> ret=new ArrayList<>();
-    	ret.add(new TreeNode("a1", "a", "a1",false,2));
-        ret.add(new TreeNode("a2", "a", "a2",true,3));
-        ret.add(new TreeNode("a", "root_code", "a",true,2));
-        ret.add(new TreeNode("b", "root_code", "b",false,1));
-        return ret;
-    }
-}

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

@@ -0,0 +1,71 @@
+package cn.com.qmth.stmms.admin.basic;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+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 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.service.RoleInfoService;
+import cn.com.qmth.stmms.biz.basic.service.RolePrivilegeService;
+import cn.com.qmth.stmms.common.controller.BaseController;
+import cn.com.qmth.stmms.common.domain.WebUser;
+import cn.com.qmth.stmms.common.enums.Role;
+import cn.com.qmth.stmms.common.utils.RequestUtils;
+import net.sf.json.JSONArray;
+
+@Controller
+@RequestMapping("/admin/basic/role/info")
+public class RoleInfoController extends BaseController {
+	@Autowired
+	private RoleInfoService roleInfoService;
+	
+	@Autowired
+	private RolePrivilegeService rolePrivilegeService;
+
+	@RequestMapping(value = "list")
+	public String roleLise(Model model, HttpServletRequest request, RoleInfoQuery query) {
+		Integer totalCount = roleInfoService.countByQuery(query);
+		if (totalCount > 0) {
+			List<RoleInfoVo> list = roleInfoService.findByQuery(query);
+			query.setResult(list);
+			query.setTotalCount(totalCount);
+		} else {
+			query.setResult(new ArrayList<>());
+			query.setTotalCount(0);
+		}
+		model.addAttribute("roleList", roleInfoService.allList(query.getSchoolId()));
+		model.addAttribute("query", query);
+		return "modules/basic/roleInfoList";
+	}
+	
+	@RequestMapping(value = "privilege")
+	public String privilege(Model model, HttpServletRequest request, RoleInfoQuery query) {
+		List<RolePrivilegeVo> ps=rolePrivilegeService.findByQuery(query);
+		if(ps!=null) {
+			model.addAttribute("privilegeList", JSONArray.fromObject(ps).toString());
+		}else {
+			model.addAttribute("privilegeList", "[]");
+		}
+		model.addAttribute("schoolId", query.getSchoolId());
+		model.addAttribute("roleCode", query.getRole());
+		model.addAttribute("roleName", Role.valueOf(query.getRole()).getName());
+		return "modules/basic/rolePrivilege";
+	}
+
+	@RequestMapping(value = "privilege/save")
+	public String privilegeSave(Model model, HttpServletRequest request, RolePrivilegeDomain domain) {
+		WebUser wu = RequestUtils.getWebUser(request);
+		domain.setUserId(wu.getId());
+		rolePrivilegeService.save(domain);
+		return "redirect:/admin/basic/role/info/list?schoolId="+domain.getSchoolId();
+	}
+}

+ 76 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/basic/roleInfoList.jsp

@@ -0,0 +1,76 @@
+<%@ 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>
+	<form id="searchForm" action="${ctx}/admin/basic/role/info/list?schoolId=${query.schoolId}"
+		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="role" id="role">
+				<option value="">请选择</option>
+				<c:forEach items="${roleList}" var="result">
+					<option value="${result.code}"
+						<c:if test="${result.code==query.role}">selected</c:if>>${result.name}</option>
+				</c:forEach>
+			</select> &nbsp; <input id="btnSubmit" class="btn btn-primary" type="button"
+				value="查询" onclick="goSearch()" />
+		</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>
+			</tr>
+		</thead>
+		<tbody>
+			<c:forEach items="${query.result}" var="item">
+				<tr>
+					<td>${item.name}</td>
+					<td>${item.updaterName}</td>
+					<td><c:if test="${item.updateTime!=null}">
+							<fmt:formatDate value="${item.updateTime}"
+								pattern="yyyy-MM-dd HH:mm:ss" />
+						</c:if> <c:if test="${item.updateTime==null}">
+			                    &nbsp;
+			                </c:if></td>
+					<td><a href="${ctx}/admin/basic/role/info/privilege?schoolId=${query.schoolId}+&role=${item.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;
+		}
+	</script>
+</body>
+</html>

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

@@ -0,0 +1,70 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<!DOCTYPE html>
+<html style="overflow-x:hidden;overflow-y:auto;">
+<head>
+	<title>角色权限</title>
+	<%@include file="/WEB-INF/views/include/head.jsp" %>
+	<%@include file="/WEB-INF/views/include/treeview.jsp" %>
+	<script type="text/javascript">
+		var tree, setting = {
+				check:{
+					enable:true,nocheckInherit:true
+				},
+				data: {
+		            simpleData: {
+		                enable: true,
+		                idKey: "code",
+		                pIdKey: "parentCode",
+		            },
+		            key:{
+		            	checked:"enable"
+		            }
+		        },
+				view:{
+					showIcon:false, 
+				},
+				callback:{
+					beforeClick:function(id, node){
+						tree.checkNode(node, !node.enable, true, true);
+						return false;
+					}
+				}
+			};
+		$(document).ready(function(){
+			//$.get("${ctx}/admin/basic/role/info/privilege/data?schoolId=${schoolId}&role=${roleCode}&t="+new Date().getTime(), function(zNodes){
+				// 初始化树结构
+				tree = $.fn.zTree.init($("#tree"), setting, JSON.parse('${privilegeList}'));
+			//});
+		});
+		function save() {
+			var checkedNodes = tree.getCheckedNodes();
+			if(checkedNodes&&checkedNodes.length>0){
+				var codes=[];
+				checkedNodes.forEach(e => {
+					codes.push(e.code);
+				 });
+				$("#selectPrivileges").val(codes.join(','));
+			}
+			
+			$("#searchForm").submit();
+			return false;
+		}
+	</script>
+</head>
+<body>
+	<form id="searchForm"  action="${ctx}/admin/basic/role/info/privilege/save" method="post" class="breadcrumb form-search">
+		<input type="hidden" id="schoolId" name="schoolId" value="${schoolId}"/>
+		<input type="hidden" id="role" name="role" value="${roleCode}"/>
+		<input type="hidden" id="selectPrivileges" name="selectPrivileges"/>
+		<div>
+			<label>角色</label>
+			<input type="text" disabled="disabled" name="roleName" value="${roleName}"  maxlength="20" class="input-medium"/>
+			&nbsp;
+			<input id="btnSubmit" class="btn btn-primary" type="button" value="保存" onclick="save()"/>
+			&nbsp;
+			<input id="btnCancel" class="btn" type="button" value="返 回" onclick="history.go(-1)"/>
+		</div>
+	</form>
+	<div id="tree" class="ztree" style="padding:15px 20px;"></div>
+</body>

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

@@ -53,6 +53,8 @@
 					<a href="${ctx}/admin/sys/school/edit?id=${school.id}">修改</a>
 					&nbsp;
 					<a href="${ctx}/admin/sys/school/admin?id=${school.id}">编辑管理员</a>
+					&nbsp;
+					<a href="${ctx}/admin/basic/role/info/list?schoolId=${school.id}">角色权限</a>
 				</td>
 			</tr>
 		</c:forEach>

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

@@ -1159,6 +1159,22 @@ CREATE TABLE `eb_answer_card_subject`
 )  ENGINE = InnoDB
   DEFAULT CHARSET = utf8mb4 COMMENT ='卡格式科目关联关系';
   
+DROP TABLE IF EXISTS `b_role_info`;
+CREATE TABLE `b_role_info`
+(
+    `id`             int(11)      NOT NULL AUTO_INCREMENT,
+    `school_id` int(11) NOT NULL,
+    `code`           varchar(50) NOT NULL,
+    `name`           varchar(50) NOT NULL,
+    `seq`            int(11)         NOT NULL,
+    `updater_id` int(11)      DEFAULT NULL,
+    `update_time`  		datetime     DEFAULT NULL, 
+    PRIMARY KEY (`id`),
+    UNIQUE KEY `IDX_ROLE_INFO_01` (`school_id`,`code`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4
+  COLLATE = utf8mb4_bin;
+  
 DROP TABLE IF EXISTS `b_privilege`;
 CREATE TABLE `b_privilege`
 (

+ 55 - 3
stmms-web/src/main/webapp/sql/upgrade/1.3.14.sql

@@ -33,6 +33,7 @@ ALTER TABLE eb_exam ADD COLUMN `inspect_scroll_bottom`	tinyint(1) NOT NULL DEFAU
 ALTER TABLE eb_exam ADD COLUMN `remark_count`	int(11) DEFAULT NULL COMMENT '回评卷数';
 ALTER TABLE eb_exam ADD COLUMN `show_objective_score`	tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否显示客观分';
 
+DROP TABLE IF EXISTS `eb_score_verify`;
 CREATE TABLE `eb_score_verify` 
 (
 	`id`           int(11)     NOT NULL AUTO_INCREMENT COMMENT '主键',
@@ -74,7 +75,8 @@ FROM
 	eb_answer_card b
 WHERE
 	b.subject_code is not  NULL;
-	
+
+DROP TABLE IF EXISTS `b_privilege`;
 CREATE TABLE `b_privilege`
 (
     `id`             int(11)      NOT NULL AUTO_INCREMENT,
@@ -94,7 +96,7 @@ CREATE TABLE `b_privilege`
   DEFAULT CHARSET = utf8mb4
   COLLATE = utf8mb4_bin;
 
-
+DROP TABLE IF EXISTS `b_role_privilege`;
 CREATE TABLE `b_role_privilege`
 (
 	`id`             int(11)      NOT NULL AUTO_INCREMENT,
@@ -145,10 +147,60 @@ SELECT s.id,'SUBJECT_HEADER',p.`code`,1 from b_privilege p join b_school s
 where p.`code` in('exam_mark','exam_reject_list','exam_problem_history'
 ,'exam_inspected_info','exam_score','exam_report_subject','exam_report_subject_range');
 
+INSERT INTO b_role_privilege (`school_id`, `role_code`, `privilege_code`,`enable`)
+SELECT s.id,'COLLEGE_ADMIN',p.`code`,1 from b_privilege p join b_school s   
+where p.`code` in('exam_mark','exam_reject_list','exam_problem_history'
+,'exam_inspected_info','exam_score','exam_report_subject','exam_report_subject_range');
+
 INSERT INTO b_role_privilege (`school_id`, `role_code`, `privilege_code`,`enable`)
 SELECT s.id,'INSPECTOR',p.`code`,1 from b_privilege p join b_school s   
 where p.`code` in('exam_inspected_info');
 
 INSERT INTO b_role_privilege (`school_id`, `role_code`, `privilege_code`,`enable`)
 SELECT s.id,'SCHOOL_VIEWER',p.`code`,1 from b_privilege p join b_school s   
-where p.`code` in('exam_score','exam_report_subject','operation_log');
+where p.`code` in('exam_score','exam_report_subject','operation_log');
+
+DROP TABLE IF EXISTS `b_role_info`;
+CREATE TABLE `b_role_info`
+(
+    `id`             int(11)      NOT NULL AUTO_INCREMENT,
+    `school_id` int(11) NOT NULL,
+    `code`           varchar(50) NOT NULL,
+    `name`           varchar(50) NOT NULL,
+    `seq`            int(11)         NOT NULL,
+    `updater_id` int(11)      DEFAULT NULL,
+    `update_time`  		datetime     DEFAULT NULL, 
+    PRIMARY KEY (`id`),
+    UNIQUE KEY `IDX_ROLE_INFO_01` (`school_id`,`code`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4
+  COLLATE = utf8mb4_bin;
+
+DROP TABLE IF EXISTS `b_role_temp`;
+CREATE TABLE `b_role_temp`
+(
+    `id`             int(11)      NOT NULL AUTO_INCREMENT,
+    `code`           varchar(50) NOT NULL,
+    `name`           varchar(50) NOT NULL,
+    `seq`            int(11)         NOT NULL,
+    PRIMARY KEY (`id`),
+    UNIQUE KEY `IDX_ROLE_TEMP_01` (`code`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4
+  COLLATE = utf8mb4_bin;
+INSERT INTO `b_role_temp` (`code`, `name`, `seq`) VALUES ('SYS_ADMIN', '系统管理员', 1);
+INSERT INTO `b_role_temp` (`code`, `name`, `seq`) VALUES ('SCHOOL_ADMIN', '学校管理员', 2);
+INSERT INTO `b_role_temp` (`code`, `name`, `seq`) VALUES ('SCANNER', '扫描员', 3);
+INSERT INTO `b_role_temp` (`code`, `name`, `seq`) VALUES ('SUBJECT_HEADER', '科组长', 4);
+INSERT INTO `b_role_temp` (`code`, `name`, `seq`) VALUES ('MARKER', '评卷员', 5);
+INSERT INTO `b_role_temp` (`code`, `name`, `seq`) VALUES ('SCHOOL_VIEWER', '学校查询员', 6);
+INSERT INTO `b_role_temp` (`code`, `name`, `seq`) VALUES ('SCHOOL_DEV', '学校接口调用', 7);
+INSERT INTO `b_role_temp` (`code`, `name`, `seq`) VALUES ('INSPECTOR', '复核员', 8);
+INSERT INTO `b_role_temp` (`code`, `name`, `seq`) VALUES ('SCAN_ADMIN', '扫描管理员', 9);
+INSERT INTO `b_role_temp` (`code`, `name`, `seq`) VALUES ('COLLEGE_ADMIN', '学院管理员', 10);
+
+  
+INSERT INTO `b_role_info` (`school_id`,`code`, `name`, `seq`)
+SELECT s.id,p.`code`,p.name,p.seq from b_role_temp p join b_school s;
+
+DROP TABLE IF EXISTS `b_role_temp`;