新增岗位关联角色,在特殊业务场景下使用该关系

This commit is contained in:
thinkgem
2023-06-12 16:25:02 +08:00
parent c3f4c7f701
commit 2aa5038eef
7 changed files with 209 additions and 30 deletions

View File

@@ -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<PostRole> {
}

View File

@@ -35,7 +35,10 @@ public class Post extends DataEntity<Post> {
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<Post> {
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;
}
}

View File

@@ -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<PostRole> {
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;
}
}

View File

@@ -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<Post> {
@Override
Page<Post> findPage(Post post);
/**
* 查询岗位角色列表
*/
List<PostRole> findPostRoleList(PostRole postRole);
/**
* 保存岗位
*/

View File

@@ -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<PostDao, Post>
implements PostService{
@Autowired
private PostRoleDao postRoleDao;
/**
* 查询岗位
*/
@@ -50,6 +58,13 @@ public class PostServiceSupport extends CrudService<PostDao, Post>
return super.findPage(post);
}
/**
* 查询岗位角色关系
*/
public List<PostRole> findPostRoleList(PostRole postRole) {
return postRoleDao.findList(postRole);
}
/**
* 保存岗位
*/
@@ -61,6 +76,23 @@ public class PostServiceSupport extends CrudService<PostDao, Post>
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<PostRole> 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);
}
}
}
/**

View File

@@ -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<Post> listData(Post post, HttpServletRequest request, HttpServletResponse response) {
post.setPage(new Page<>(request, response));
Page<Post> page = postService.findPage(post);
Page<Post> 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<String> roleCodes = ListUtils.newArrayList();
List<String> 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;
}
}

View File

@@ -57,6 +57,21 @@
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<div class="form-group">
<label class="control-label col-sm-2" title="">
<span class="required hide">*</span> ${text('关联角色')}<i class="fa icon-question hide"></i></label>
<div class="col-sm-10">
<#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"/>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<div class="form-group">