From 2aa5038eef36458b6952f90e650681634f9909b2 Mon Sep 17 00:00:00 2001 From: thinkgem Date: Mon, 12 Jun 2023 16:25:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=B2=97=E4=BD=8D=E5=85=B3?= =?UTF-8?q?=E8=81=94=E8=A7=92=E8=89=B2=EF=BC=8C=E5=9C=A8=E7=89=B9=E6=AE=8A?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E5=9C=BA=E6=99=AF=E4=B8=8B=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E8=AF=A5=E5=85=B3=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeesite/modules/sys/dao/PostRoleDao.java | 21 ++++++ .../com/jeesite/modules/sys/entity/Post.java | 22 +++++- .../jeesite/modules/sys/entity/PostRole.java | 70 +++++++++++++++++++ .../modules/sys/service/PostService.java | 8 +++ .../service/support/PostServiceSupport.java | 38 +++++++++- .../modules/sys/web/PostController.java | 65 ++++++++++------- .../resources/views/modules/sys/postForm.html | 15 ++++ 7 files changed, 209 insertions(+), 30 deletions(-) create mode 100644 modules/core/src/main/java/com/jeesite/modules/sys/dao/PostRoleDao.java create mode 100644 modules/core/src/main/java/com/jeesite/modules/sys/entity/PostRole.java diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/dao/PostRoleDao.java b/modules/core/src/main/java/com/jeesite/modules/sys/dao/PostRoleDao.java new file mode 100644 index 00000000..ed54471a --- /dev/null +++ b/modules/core/src/main/java/com/jeesite/modules/sys/dao/PostRoleDao.java @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2013-Now http://jeesite.com All rights reserved. + * No deletion without permission, or be held responsible to law. + */ +package com.jeesite.modules.sys.dao; + +import com.jeesite.common.dao.CrudDao; +import com.jeesite.common.mybatis.annotation.MyBatisDao; +import com.jeesite.modules.sys.entity.PostRole; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; + +/** + * 岗位角色DAO接口 + * @author ThinkGem + * @version 2023-6-8 + */ +@MyBatisDao +@ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true) +public interface PostRoleDao extends CrudDao { + +} \ No newline at end of file diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/entity/Post.java b/modules/core/src/main/java/com/jeesite/modules/sys/entity/Post.java index e2fc9e9d..58e84130 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/entity/Post.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/entity/Post.java @@ -35,7 +35,10 @@ public class Post extends DataEntity { private Integer postSort; // 岗位排序(升序) private String empCode; // 根据用户查询岗位 - + + private String roleCodes; // 关联的角色编号 + private String roleNames; // 关联的角色名称 + public Post() { this(null); } @@ -106,5 +109,20 @@ public class Post extends DataEntity { public void setEmpCode(String empCode) { this.empCode = empCode; } - + + public String getRoleCodes() { + return roleCodes; + } + + public void setRoleCodes(String roleCodes) { + this.roleCodes = roleCodes; + } + + public String getRoleNames() { + return roleNames; + } + + public void setRoleNames(String roleNames) { + this.roleNames = roleNames; + } } \ No newline at end of file diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/entity/PostRole.java b/modules/core/src/main/java/com/jeesite/modules/sys/entity/PostRole.java new file mode 100644 index 00000000..74ea21fa --- /dev/null +++ b/modules/core/src/main/java/com/jeesite/modules/sys/entity/PostRole.java @@ -0,0 +1,70 @@ +/** + * Copyright (c) 2013-Now http://jeesite.com All rights reserved. + * No deletion without permission, or be held responsible to law. + */ +package com.jeesite.modules.sys.entity; + +import com.jeesite.common.entity.DataEntity; +import com.jeesite.common.mybatis.annotation.Column; +import com.jeesite.common.mybatis.annotation.JoinTable; +import com.jeesite.common.mybatis.annotation.Table; + +/** + * 岗位角色Entity + * @author ThinkGem + * @version 2023-6-8 + */ +@Table(name="${_prefix}sys_post_role", alias="a", columns={ + @Column(name="role_code", attrName="roleCode", label="角色编码", isPK=true), + @Column(name="post_code", attrName="postCode", label="岗位编码", isPK=true), + }, + joinTable = { + @JoinTable(type=JoinTable.Type.LEFT_JOIN, entity=Role.class, alias="r", lazy = true, + on="a.role_code = r.role_code", attrName="role", + columns={ + @Column(name="role_code", attrName="roleCode", label="角色编码", isPK=true), + @Column(name="role_name", attrName="roleName", label="角色名称"), + }) + }, orderBy="" +) +public class PostRole extends DataEntity { + + private static final long serialVersionUID = 1L; + private String postCode; // 岗位编码 + private String roleCode; // 角色编码 + + private Role role; // sqlMap().loadJoinTableAlias("r")的时候返回数据 + + public PostRole() { + this(null, null); + } + + public PostRole(String postCode, String roleCode){ + this.postCode = postCode; + this.roleCode = roleCode; + } + + public String getPostCode() { + return postCode; + } + + public void setPostCode(String postCode) { + this.postCode = postCode; + } + + public String getRoleCode() { + return roleCode; + } + + public void setRoleCode(String roleCode) { + this.roleCode = roleCode; + } + + public Role getRole() { + return role; + } + + public void setRole(Role role) { + this.role = role; + } +} \ No newline at end of file diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/service/PostService.java b/modules/core/src/main/java/com/jeesite/modules/sys/service/PostService.java index 5c63d657..804bdfb4 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/service/PostService.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/service/PostService.java @@ -7,6 +7,9 @@ package com.jeesite.modules.sys.service; import com.jeesite.common.entity.Page; import com.jeesite.common.service.api.CrudServiceApi; import com.jeesite.modules.sys.entity.Post; +import com.jeesite.modules.sys.entity.PostRole; + +import java.util.List; /** * 岗位管理Service @@ -32,6 +35,11 @@ public interface PostService extends CrudServiceApi { @Override Page findPage(Post post); + /** + * 查询岗位角色列表 + */ + List findPostRoleList(PostRole postRole); + /** * 保存岗位 */ diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/service/support/PostServiceSupport.java b/modules/core/src/main/java/com/jeesite/modules/sys/service/support/PostServiceSupport.java index 042ed3dc..d6eb10d5 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/service/support/PostServiceSupport.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/service/support/PostServiceSupport.java @@ -4,17 +4,22 @@ */ package com.jeesite.modules.sys.service.support; -import org.apache.commons.lang3.StringUtils; -import org.springframework.transaction.annotation.Transactional; - +import com.jeesite.common.collect.ListUtils; import com.jeesite.common.config.Global; import com.jeesite.common.entity.Page; +import com.jeesite.common.lang.StringUtils; import com.jeesite.common.service.CrudService; import com.jeesite.modules.sys.dao.PostDao; +import com.jeesite.modules.sys.dao.PostRoleDao; import com.jeesite.modules.sys.entity.Post; +import com.jeesite.modules.sys.entity.PostRole; import com.jeesite.modules.sys.entity.Role; import com.jeesite.modules.sys.service.PostService; import com.jeesite.modules.sys.utils.CorpUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; /** * 岗位管理Service @@ -24,6 +29,9 @@ import com.jeesite.modules.sys.utils.CorpUtils; public class PostServiceSupport extends CrudService implements PostService{ + @Autowired + private PostRoleDao postRoleDao; + /** * 查询岗位 */ @@ -50,6 +58,13 @@ public class PostServiceSupport extends CrudService return super.findPage(post); } + /** + * 查询岗位角色关系 + */ + public List findPostRoleList(PostRole postRole) { + return postRoleDao.findList(postRole); + } + /** * 保存岗位 */ @@ -61,6 +76,23 @@ public class PostServiceSupport extends CrudService genIdAndValid(post, post.getViewCode()); } super.save(post); + // 重新绑定岗位和角色之间的关系 + if (StringUtils.isNotBlank(post.getPostCode()) && post.getRoleCodes() != null) { + PostRole where = new PostRole(); + where.setPostCode(post.getPostCode()); + postRoleDao.deleteByEntity(where); + List list = ListUtils.newArrayList(); + for (String code : StringUtils.splitComma(post.getRoleCodes())) { + PostRole e = new PostRole(); + e.setPostCode(post.getPostCode()); + e.setRoleCode(code); + e.setIsNewRecord(true); + list.add(e); + } + if (ListUtils.isNotEmpty(list)) { + postRoleDao.insertBatch(list, null); + } + } } /** diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/web/PostController.java b/modules/core/src/main/java/com/jeesite/modules/sys/web/PostController.java index c2cbc22c..2459f2f2 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/web/PostController.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/web/PostController.java @@ -4,12 +4,15 @@ */ package com.jeesite.modules.sys.web; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import com.jeesite.common.collect.ListUtils; +import com.jeesite.common.collect.MapUtils; +import com.jeesite.common.config.Global; +import com.jeesite.common.entity.Page; +import com.jeesite.common.lang.StringUtils; +import com.jeesite.common.web.BaseController; +import com.jeesite.modules.sys.entity.Post; +import com.jeesite.modules.sys.entity.PostRole; +import com.jeesite.modules.sys.service.PostService; import io.swagger.annotations.Api; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; @@ -22,14 +25,10 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; -import com.jeesite.common.collect.ListUtils; -import com.jeesite.common.collect.MapUtils; -import com.jeesite.common.config.Global; -import com.jeesite.common.entity.Page; -import com.jeesite.common.lang.StringUtils; -import com.jeesite.common.web.BaseController; -import com.jeesite.modules.sys.entity.Post; -import com.jeesite.modules.sys.service.PostService; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; +import java.util.Map; /** * 岗位管理Controller @@ -44,25 +43,25 @@ public class PostController extends BaseController { @Autowired private PostService postService; - + @ModelAttribute public Post get(String postCode, boolean isNewRecord) { return postService.get(postCode, isNewRecord); } - + @RequiresPermissions("sys:post:view") @RequestMapping(value = "list") public String list(Post post, Model model) { model.addAttribute("post", post); return "modules/sys/postList"; } - + @RequiresPermissions("sys:post:view") @RequestMapping(value = {"listData"}) @ResponseBody public Page listData(Post post, HttpServletRequest request, HttpServletResponse response) { post.setPage(new Page<>(request, response)); - Page page = postService.findPage(post); + Page page = postService.findPage(post); return page; } @@ -72,6 +71,22 @@ public class PostController extends BaseController { if(post.getIsNewRecord()){ post.setPostSort((int)postService.findCount(post) * 10); } + // 查询岗位所关联的角色信息 + if (StringUtils.isNotBlank(post.getPostCode())){ + PostRole where = new PostRole(); + where.setPostCode(post.getPostCode()); + where.sqlMap().loadJoinTableAlias("r"); + List roleCodes = ListUtils.newArrayList(); + List roleNames = ListUtils.newArrayList(); + postService.findPostRoleList(where).forEach(e -> { + if (e.getRole() != null) { + roleCodes.add(e.getRoleCode()); + roleNames.add(e.getRole().getRoleName()); + } + }); + model.addAttribute("roleCodes", StringUtils.joinComma(roleCodes)); + model.addAttribute("roleNames", StringUtils.joinComma(roleNames)); + } model.addAttribute("post", post); return "modules/sys/postForm"; } @@ -86,7 +101,7 @@ public class PostController extends BaseController { postService.save(post); return renderResult(Global.TRUE, text("保存岗位''{0}''成功", post.getPostName())); } - + @RequiresPermissions("sys:post:edit") @RequestMapping(value = "disable") @ResponseBody @@ -95,7 +110,7 @@ public class PostController extends BaseController { postService.updateStatus(post); return renderResult(Global.TRUE, text("停用岗位''{0}''成功", post.getPostName())); } - + @RequiresPermissions("sys:post:edit") @RequestMapping(value = "enable") @ResponseBody @@ -104,7 +119,7 @@ public class PostController extends BaseController { postService.updateStatus(post); return renderResult(Global.TRUE, text("启用岗位''{0}''成功", post.getPostName())); } - + @RequiresPermissions("sys:post:edit") @RequestMapping(value = "delete") @ResponseBody @@ -112,11 +127,11 @@ public class PostController extends BaseController { postService.delete(post); return renderResult(Global.TRUE, text("删除岗位''{0}''成功", post.getPostName())); } - + /** * 验证岗位名是否有效 * @param oldPostName - * @param name + * @param postName * @return */ @RequiresPermissions("user") @@ -135,7 +150,7 @@ public class PostController extends BaseController { /** * 获取岗位树结构数据 - * @param isShowCode 是否显示编码(true or 1:显示在左侧;2:显示在右侧;false or null:不显示) + * @param isShowCode 是否显示编码(true or 1:显示在左侧;2:显示在右侧;false or null:不显示) * @return */ @RequiresPermissions("user") @@ -156,5 +171,5 @@ public class PostController extends BaseController { }); return mapList; } - + } \ No newline at end of file diff --git a/modules/core/src/main/resources/views/modules/sys/postForm.html b/modules/core/src/main/resources/views/modules/sys/postForm.html index 787599cb..61e2f520 100644 --- a/modules/core/src/main/resources/views/modules/sys/postForm.html +++ b/modules/core/src/main/resources/views/modules/sys/postForm.html @@ -57,6 +57,21 @@ +
+
+
+ +
+ <#form:treeselect id="postRole" title="${text('角色选择')}" + name="roleCodes" value="${roleCodes!}" + labelName="roleNames" labelValue="${roleNames!}" + url="${ctx}/sys/role/treeData?userType=__all" checkbox="true" + class="" allowClear="true"/> +
+
+
+