From 1c361deef3d25b1ed8ffeef57ff4c1bf537a75d0 Mon Sep 17 00:00:00 2001 From: WenG <450292408@qq.com> Date: Tue, 2 Feb 2021 08:30:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=9F=BA=E7=A1=80=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...RoleService.java => IRoleBaseService.java} | 2 +- .../dtos/department/DepartmentUserDTO.java | 176 +++++++ .../pojo/dtos/permission/PermissionDTO.java | 108 ++++ .../ink/wgink/pojo/dtos/role/RoleDTO.java | 135 +++++ .../pojo/dtos/role/RoleDataAuthorityDTO.java | 65 +++ .../dtos/role/RoleDataAuthorityTypeDTO.java | 50 ++ .../pojo/dtos/role/RolePermissionDTO.java | 36 ++ .../wgink/common/base/DefaultBaseService.java | 7 +- module-permission/pom.xml | 23 + .../controller/api/PermissionController.java | 118 +++++ .../permission/dao/IPermissionDao.java | 82 +++ .../permission/pojo/vos/PermissionVO.java | 88 ++++ .../service/IPermissionService.java | 105 ++++ .../service/impl/PermissionServiceImpl.java | 103 ++++ .../mybatis/mapper/permission-mapper.xml | 183 +++++++ .../permission/list-permission-role.html | 247 +++++++++ .../resources/templates/permission/list.html | 263 ++++++++++ .../resources/templates/permission/save.html | 158 ++++++ .../templates/permission/update.html | 183 +++++++ pom.xml | 1 + .../controller/api/DepartmentController.java | 3 +- .../service/impl/DepartmentServiceImpl.java | 12 +- service-role/pom.xml | 7 +- .../role/controller/api/RoleController.java | 212 +++++++- .../ink/wgink/service/role/dao/IRoleDao.java | 194 +++++++ .../service/role/dao/IRolePermissionDao.java | 49 ++ .../role/pojo/vos/RoleDataAuthorityVO.java | 56 ++ .../role/pojo/vos/RolePermissionVO.java | 53 ++ .../role/pojo/vos/RoleUserAuthorityVO.java | 50 ++ .../pojo/vos/RoleUserAuthorizationVO.java | 35 ++ .../wgink/service/role/pojo/vos/RoleVO.java | 59 +++ .../role/service/IRolePermissionService.java | 58 +++ .../service/role/service/IRoleService.java | 299 +++++++++++ .../impl/RolePermissionServiceImpl.java | 78 +++ .../role/service/impl/RoleServiceImpl.java | 477 ++++++++++++++++++ .../mybatis/mapper/role-permission-mapper.xml | 46 ++ 36 files changed, 3806 insertions(+), 15 deletions(-) rename basic-interface/src/main/java/ink/wgink/interfaces/role/{IRoleService.java => IRoleBaseService.java} (88%) create mode 100644 basic-pojo/src/main/java/ink/wgink/pojo/dtos/department/DepartmentUserDTO.java create mode 100644 basic-pojo/src/main/java/ink/wgink/pojo/dtos/permission/PermissionDTO.java create mode 100644 basic-pojo/src/main/java/ink/wgink/pojo/dtos/role/RoleDTO.java create mode 100644 basic-pojo/src/main/java/ink/wgink/pojo/dtos/role/RoleDataAuthorityDTO.java create mode 100644 basic-pojo/src/main/java/ink/wgink/pojo/dtos/role/RoleDataAuthorityTypeDTO.java create mode 100644 basic-pojo/src/main/java/ink/wgink/pojo/dtos/role/RolePermissionDTO.java create mode 100644 module-permission/pom.xml create mode 100644 module-permission/src/main/java/ink/wgink/service/permission/controller/api/PermissionController.java create mode 100644 module-permission/src/main/java/ink/wgink/service/permission/dao/IPermissionDao.java create mode 100644 module-permission/src/main/java/ink/wgink/service/permission/pojo/vos/PermissionVO.java create mode 100644 module-permission/src/main/java/ink/wgink/service/permission/service/IPermissionService.java create mode 100644 module-permission/src/main/java/ink/wgink/service/permission/service/impl/PermissionServiceImpl.java create mode 100644 module-permission/src/main/resources/mybatis/mapper/permission-mapper.xml create mode 100644 module-permission/src/main/resources/templates/permission/list-permission-role.html create mode 100644 module-permission/src/main/resources/templates/permission/list.html create mode 100644 module-permission/src/main/resources/templates/permission/save.html create mode 100644 module-permission/src/main/resources/templates/permission/update.html create mode 100644 service-role/src/main/java/ink/wgink/service/role/dao/IRoleDao.java create mode 100644 service-role/src/main/java/ink/wgink/service/role/dao/IRolePermissionDao.java create mode 100644 service-role/src/main/java/ink/wgink/service/role/pojo/vos/RoleDataAuthorityVO.java create mode 100644 service-role/src/main/java/ink/wgink/service/role/pojo/vos/RolePermissionVO.java create mode 100644 service-role/src/main/java/ink/wgink/service/role/pojo/vos/RoleUserAuthorityVO.java create mode 100644 service-role/src/main/java/ink/wgink/service/role/pojo/vos/RoleUserAuthorizationVO.java create mode 100644 service-role/src/main/java/ink/wgink/service/role/pojo/vos/RoleVO.java create mode 100644 service-role/src/main/java/ink/wgink/service/role/service/IRolePermissionService.java create mode 100644 service-role/src/main/java/ink/wgink/service/role/service/IRoleService.java create mode 100644 service-role/src/main/java/ink/wgink/service/role/service/impl/RolePermissionServiceImpl.java create mode 100644 service-role/src/main/java/ink/wgink/service/role/service/impl/RoleServiceImpl.java create mode 100644 service-role/src/main/resources/mybatis/mapper/role-permission-mapper.xml diff --git a/basic-interface/src/main/java/ink/wgink/interfaces/role/IRoleService.java b/basic-interface/src/main/java/ink/wgink/interfaces/role/IRoleBaseService.java similarity index 88% rename from basic-interface/src/main/java/ink/wgink/interfaces/role/IRoleService.java rename to basic-interface/src/main/java/ink/wgink/interfaces/role/IRoleBaseService.java index e76e72fc..ffefbbbc 100644 --- a/basic-interface/src/main/java/ink/wgink/interfaces/role/IRoleService.java +++ b/basic-interface/src/main/java/ink/wgink/interfaces/role/IRoleBaseService.java @@ -10,5 +10,5 @@ package ink.wgink.interfaces.role; * @Date: 2021/1/24 12:57 * @Version: 1.0 **/ -public interface IRoleService { +public interface IRoleBaseService { } diff --git a/basic-pojo/src/main/java/ink/wgink/pojo/dtos/department/DepartmentUserDTO.java b/basic-pojo/src/main/java/ink/wgink/pojo/dtos/department/DepartmentUserDTO.java new file mode 100644 index 00000000..cba12368 --- /dev/null +++ b/basic-pojo/src/main/java/ink/wgink/pojo/dtos/department/DepartmentUserDTO.java @@ -0,0 +1,176 @@ +package ink.wgink.pojo.dtos.department; + +import java.io.Serializable; + +/** + * @ClassName: DepartmentUserDTO + * @Description: 部门用户 + * @Author: wenc + * @Date: 2019/1/10 10:39 PM + * @Version: 1.0 + **/ +public class DepartmentUserDTO implements Serializable { + + private static final long serialVersionUID = -2899875759045646539L; + private String userId; + private String departmentId; + private String userUsername; + private String userName; + private String userPhone; + private String userEmail; + private String userUKey; + private String userUKeyElectronicSecretKey; + private Integer loginType; + private String departmentName; + private Integer userType; + private Integer userState; + private String userAvatar; + private String userSort; + + public String getUserId() { + return userId == null ? "" : userId.trim(); + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getDepartmentId() { + return departmentId == null ? "" : departmentId.trim(); + } + + public void setDepartmentId(String departmentId) { + this.departmentId = departmentId; + } + + public String getUserUsername() { + return userUsername == null ? "" : userUsername.trim(); + } + + public void setUserUsername(String userUsername) { + this.userUsername = userUsername; + } + + public String getUserName() { + return userName == null ? "" : userName.trim(); + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getUserPhone() { + return userPhone == null ? "" : userPhone.trim(); + } + + public void setUserPhone(String userPhone) { + this.userPhone = userPhone; + } + + public String getUserEmail() { + return userEmail == null ? "" : userEmail.trim(); + } + + public void setUserEmail(String userEmail) { + this.userEmail = userEmail; + } + + public String getUserUKey() { + return userUKey == null ? "" : userUKey; + } + + public void setUserUKey(String userUKey) { + this.userUKey = userUKey; + } + + public String getUserUKeyElectronicSecretKey() { + return userUKeyElectronicSecretKey == null ? "" : userUKeyElectronicSecretKey.trim(); + } + + public void setUserUKeyElectronicSecretKey(String userUKeyElectronicSecretKey) { + this.userUKeyElectronicSecretKey = userUKeyElectronicSecretKey; + } + + public Integer getLoginType() { + return loginType; + } + + public void setLoginType(Integer loginType) { + this.loginType = loginType; + } + + public String getDepartmentName() { + return departmentName == null ? "" : departmentName.trim(); + } + + public void setDepartmentName(String departmentName) { + this.departmentName = departmentName; + } + + public Integer getUserType() { + return userType; + } + + public void setUserType(Integer userType) { + this.userType = userType; + } + + public Integer getUserState() { + return userState; + } + + public void setUserState(Integer userState) { + this.userState = userState; + } + + public String getUserAvatar() { + return userAvatar == null ? "" : userAvatar.trim(); + } + + public void setUserAvatar(String userAvatar) { + this.userAvatar = userAvatar; + } + + public String getUserSort() { + return userSort == null ? "" : userSort.trim(); + } + + public void setUserSort(String userSort) { + this.userSort = userSort; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("{"); + sb.append("\"userId\":") + .append("\"").append(userId).append("\""); + sb.append(",\"departmentId\":") + .append("\"").append(departmentId).append("\""); + sb.append(",\"userUsername\":") + .append("\"").append(userUsername).append("\""); + sb.append(",\"userName\":") + .append("\"").append(userName).append("\""); + sb.append(",\"userPhone\":") + .append("\"").append(userPhone).append("\""); + sb.append(",\"userEmail\":") + .append("\"").append(userEmail).append("\""); + sb.append(",\"userUKey\":") + .append("\"").append(userUKey).append("\""); + sb.append(",\"userUKeyElectronicSecretKey\":") + .append("\"").append(userUKeyElectronicSecretKey).append("\""); + sb.append(",\"loginType\":") + .append(loginType); + sb.append(",\"departmentName\":") + .append("\"").append(departmentName).append("\""); + sb.append(",\"userType\":") + .append(userType); + sb.append(",\"userState\":") + .append(userState); + sb.append(",\"userAvatar\":") + .append("\"").append(userAvatar).append("\""); + sb.append(",\"userSort\":") + .append("\"").append(userSort).append("\""); + sb.append('}'); + return sb.toString(); + } +} diff --git a/basic-pojo/src/main/java/ink/wgink/pojo/dtos/permission/PermissionDTO.java b/basic-pojo/src/main/java/ink/wgink/pojo/dtos/permission/PermissionDTO.java new file mode 100644 index 00000000..7932cd87 --- /dev/null +++ b/basic-pojo/src/main/java/ink/wgink/pojo/dtos/permission/PermissionDTO.java @@ -0,0 +1,108 @@ +package ink.wgink.pojo.dtos.permission; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * + * @ClassName: PermissionDTO + * @Description: 权限 + * @Author: WenG + * @Date: 2020-05-27 15:58 + * @Version: 1.0 + **/ +@ApiModel +public class PermissionDTO { + + @ApiModelProperty(name = "permissionId", value = "主键") + private String permissionId; + @ApiModelProperty(name = "permissionTitle", value = "权限名称") + private String permissionTitle; + @ApiModelProperty(name = "permissionType", value = "权限类型") + private String permissionType; + @ApiModelProperty(name = "permissionUrl", value = "权限路径") + private String permissionUrl; + @ApiModelProperty(name = "permissionClientId", value = "客户端") + private String permissionClientId; + @ApiModelProperty(name = "permissionClientName", value = "客户端字典名称") + private String permissionClientName; + @ApiModelProperty(name = "isPublic", value = "是否公共") + private Integer isPublic; + + public String getPermissionId() { + return permissionId == null ? "" : permissionId; + } + + public void setPermissionId(String permissionId) { + this.permissionId = permissionId; + } + + public String getPermissionTitle() { + return permissionTitle == null ? "" : permissionTitle.trim(); + } + + public void setPermissionTitle(String permissionTitle) { + this.permissionTitle = permissionTitle; + } + + public String getPermissionType() { + return permissionType == null ? "" : permissionType; + } + + public void setPermissionType(String permissionType) { + this.permissionType = permissionType; + } + + public String getPermissionUrl() { + return permissionUrl == null ? "" : permissionUrl; + } + + public void setPermissionUrl(String permissionUrl) { + this.permissionUrl = permissionUrl; + } + + public String getPermissionClientId() { + return permissionClientId == null ? "" : permissionClientId; + } + + public void setPermissionClientId(String permissionClientId) { + this.permissionClientId = permissionClientId; + } + + public String getPermissionClientName() { + return permissionClientName == null ? "" : permissionClientName.trim(); + } + + public void setPermissionClientName(String permissionClientName) { + this.permissionClientName = permissionClientName; + } + + public Integer getIsPublic() { + return isPublic == null ? 0 : isPublic; + } + + public void setIsPublic(Integer isPublic) { + this.isPublic = isPublic; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("{"); + sb.append("\"permissionId\":") + .append("\"").append(permissionId).append("\""); + sb.append(",\"permissionTitle\":") + .append("\"").append(permissionTitle).append("\""); + sb.append(",\"permissionType\":") + .append("\"").append(permissionType).append("\""); + sb.append(",\"permissionUrl\":") + .append("\"").append(permissionUrl).append("\""); + sb.append(",\"permissionClientId\":") + .append("\"").append(permissionClientId).append("\""); + sb.append(",\"permissionClientName\":") + .append("\"").append(permissionClientName).append("\""); + sb.append(",\"isPublic\":") + .append(isPublic); + sb.append('}'); + return sb.toString(); + } +} diff --git a/basic-pojo/src/main/java/ink/wgink/pojo/dtos/role/RoleDTO.java b/basic-pojo/src/main/java/ink/wgink/pojo/dtos/role/RoleDTO.java new file mode 100644 index 00000000..3d588ace --- /dev/null +++ b/basic-pojo/src/main/java/ink/wgink/pojo/dtos/role/RoleDTO.java @@ -0,0 +1,135 @@ +package ink.wgink.pojo.dtos.role; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.io.Serializable; +import java.util.List; + +/** + * @ClassName: RoleDTO + * @Description: 角色 + * @Author: wenc + * @Date: 2019/1/6 3:50 PM + * @Version: 1.0 + **/ +@ApiModel +public class RoleDTO implements Serializable { + + private static final long serialVersionUID = -7751365464386221023L; + @ApiModelProperty(name = "departmentId", value = "角色ID") + private String roleId; + @ApiModelProperty(name = "roleParentId", value = "上级角色ID") + private String roleParentId; + @ApiModelProperty(name = "roleParentName", value = "上级角色名称") + private String roleParentName; + @ApiModelProperty(name = "isParent", value = "是否是上级") + private Boolean isParent; + @ApiModelProperty(name = "roleName", value = "角色名称") + private String roleName; + @ApiModelProperty(name = "roleSummary", value = "角色说明") + private String roleSummary; + @ApiModelProperty(name = "roleCode", value = "角色编码") + private String roleCode; + @ApiModelProperty(name = "roleDataAuthority", value = "角色数据类型") + private String roleDataAuthority; + @ApiModelProperty(name = "subRoles", value = "子角色列表") + private List subRoles; + + public String getRoleId() { + return roleId == null ? "" : roleId.trim(); + } + + public void setRoleId(String roleId) { + this.roleId = roleId; + } + + public String getRoleParentId() { + return roleParentId == null ? "" : roleParentId.trim(); + } + + public void setRoleParentId(String roleParentId) { + this.roleParentId = roleParentId; + } + + public String getRoleParentName() { + return roleParentName == null ? "" : roleParentName.trim(); + } + + public void setRoleParentName(String roleParentName) { + this.roleParentName = roleParentName; + } + + public Boolean getParent() { + return isParent; + } + + public void setParent(Boolean parent) { + isParent = parent; + } + + public String getRoleName() { + return roleName == null ? "" : roleName.trim(); + } + + public void setRoleName(String roleName) { + this.roleName = roleName; + } + + public String getRoleSummary() { + return roleSummary == null ? "" : roleSummary.trim(); + } + + public void setRoleSummary(String roleSummary) { + this.roleSummary = roleSummary; + } + + public String getRoleCode() { + return roleCode == null ? "" : roleCode.trim(); + } + + public void setRoleCode(String roleCode) { + this.roleCode = roleCode; + } + + public String getRoleDataAuthority() { + return roleDataAuthority == null ? "" : roleDataAuthority.trim(); + } + + public void setRoleDataAuthority(String roleDataAuthority) { + this.roleDataAuthority = roleDataAuthority; + } + + public List getSubRoles() { + return subRoles; + } + + public void setSubRoles(List subRoles) { + this.subRoles = subRoles; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("{"); + sb.append("\"roleId\":") + .append("\"").append(roleId).append("\""); + sb.append(",\"roleParentId\":") + .append("\"").append(roleParentId).append("\""); + sb.append(",\"roleParentName\":") + .append("\"").append(roleParentName).append("\""); + sb.append(",\"isParent\":") + .append(isParent); + sb.append(",\"roleName\":") + .append("\"").append(roleName).append("\""); + sb.append(",\"roleSummary\":") + .append("\"").append(roleSummary).append("\""); + sb.append(",\"roleCode\":") + .append("\"").append(roleCode).append("\""); + sb.append(",\"roleDataAuthority\":") + .append("\"").append(roleDataAuthority).append("\""); + sb.append(",\"subRoles\":") + .append(subRoles); + sb.append('}'); + return sb.toString(); + } +} \ No newline at end of file diff --git a/basic-pojo/src/main/java/ink/wgink/pojo/dtos/role/RoleDataAuthorityDTO.java b/basic-pojo/src/main/java/ink/wgink/pojo/dtos/role/RoleDataAuthorityDTO.java new file mode 100644 index 00000000..468c7ebf --- /dev/null +++ b/basic-pojo/src/main/java/ink/wgink/pojo/dtos/role/RoleDataAuthorityDTO.java @@ -0,0 +1,65 @@ +package ink.wgink.pojo.dtos.role; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.io.Serializable; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: RoleDataAuthority + * @Description: 角色数据权限 + * @Author: WangGeng + * @Date: 2019/11/25 5:42 下午 + * @Version: 1.0 + **/ +@ApiModel +public class RoleDataAuthorityDTO implements Serializable { + + private static final long serialVersionUID = -537349124664914120L; + @ApiModelProperty(name = "roleId", value = "角色ID") + private String roleId; + @ApiModelProperty(name = "departmentId", value = "部门ID") + private String departmentId; + @ApiModelProperty(name = "userId", value = "人员ID") + private String userId; + + public String getRoleId() { + return roleId == null ? "" : roleId.trim(); + } + + public void setRoleId(String roleId) { + this.roleId = roleId; + } + + public String getDepartmentId() { + return departmentId == null ? "" : departmentId.trim(); + } + + public void setDepartmentId(String departmentId) { + this.departmentId = departmentId; + } + + public String getUserId() { + return userId == null ? "" : userId.trim(); + } + + public void setUserId(String userId) { + this.userId = userId; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("{"); + sb.append("\"roleId\":") + .append("\"").append(roleId).append("\""); + sb.append(",\"departmentId\":") + .append("\"").append(departmentId).append("\""); + sb.append(",\"userId\":") + .append("\"").append(userId).append("\""); + sb.append('}'); + return sb.toString(); + } +} diff --git a/basic-pojo/src/main/java/ink/wgink/pojo/dtos/role/RoleDataAuthorityTypeDTO.java b/basic-pojo/src/main/java/ink/wgink/pojo/dtos/role/RoleDataAuthorityTypeDTO.java new file mode 100644 index 00000000..fb8bd4b3 --- /dev/null +++ b/basic-pojo/src/main/java/ink/wgink/pojo/dtos/role/RoleDataAuthorityTypeDTO.java @@ -0,0 +1,50 @@ +package ink.wgink.pojo.dtos.role; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: RoleDataAuthorityTypeDTO + * @Description: 权限类型 + * @Author: WangGeng + * @Date: 2019/11/25 6:02 下午 + * @Version: 1.0 + **/ +@ApiModel +public class RoleDataAuthorityTypeDTO { + + @ApiModelProperty(name = "roleDataAuthorityType", value = "数据权限类型") + private String roleDataAuthorityType; + @ApiModelProperty(name = "roleDataAuthority", value = "数据权限") + private String roleDataAuthority; + + public String getRoleDataAuthorityType() { + return roleDataAuthorityType == null ? "" : roleDataAuthorityType.trim(); + } + + public void setRoleDataAuthorityType(String roleDataAuthorityType) { + this.roleDataAuthorityType = roleDataAuthorityType; + } + + public String getRoleDataAuthority() { + return roleDataAuthority == null ? "" : roleDataAuthority.trim(); + } + + public void setRoleDataAuthority(String roleDataAuthority) { + this.roleDataAuthority = roleDataAuthority; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("{"); + sb.append("\"roleDataAuthorityType\":") + .append("\"").append(roleDataAuthorityType).append("\""); + sb.append(",\"roleDataAuthority\":") + .append("\"").append(roleDataAuthority).append("\""); + sb.append('}'); + return sb.toString(); + } +} diff --git a/basic-pojo/src/main/java/ink/wgink/pojo/dtos/role/RolePermissionDTO.java b/basic-pojo/src/main/java/ink/wgink/pojo/dtos/role/RolePermissionDTO.java new file mode 100644 index 00000000..8c63355b --- /dev/null +++ b/basic-pojo/src/main/java/ink/wgink/pojo/dtos/role/RolePermissionDTO.java @@ -0,0 +1,36 @@ +package ink.wgink.pojo.dtos.role; + +import ink.wgink.pojo.dtos.permission.PermissionDTO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @ClassName: PermissionDTO + * @Description: 权限 + * @Author: WenG + * @Date: 2020-05-27 15:58 + * @Version: 1.0 + **/ +@ApiModel +public class RolePermissionDTO extends PermissionDTO { + + @ApiModelProperty(name = "roleId", value = "角色ID") + private String roleId; + + public String getRoleId() { + return roleId == null ? "" : roleId.trim(); + } + + public void setRoleId(String roleId) { + this.roleId = roleId; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("{"); + sb.append("\"roleId\":") + .append("\"").append(roleId).append("\""); + sb.append('}'); + return sb.toString(); + } +} diff --git a/common/src/main/java/ink/wgink/common/base/DefaultBaseService.java b/common/src/main/java/ink/wgink/common/base/DefaultBaseService.java index 64f137a0..23a34f07 100644 --- a/common/src/main/java/ink/wgink/common/base/DefaultBaseService.java +++ b/common/src/main/java/ink/wgink/common/base/DefaultBaseService.java @@ -9,8 +9,7 @@ import ink.wgink.interfaces.consts.ISystemConstant; import ink.wgink.pojo.bos.UserInfoBO; import ink.wgink.pojo.dtos.ZTreeDTO; import ink.wgink.util.date.DateUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; @@ -26,9 +25,9 @@ import java.util.*; * @Version: 1.0 **/ @Component +@Slf4j public class DefaultBaseService { - protected static Logger LOG = LoggerFactory.getLogger(DefaultBaseService.class); @Autowired protected SecurityComponent securityComponent; @Autowired @@ -254,7 +253,7 @@ public class DefaultBaseService { } else if (org.apache.commons.lang3.StringUtils.equals(RoleDataAuthorityEnum.DEPARTMENT.getDataAuthorityType(), dataAuthority) || org.apache.commons.lang3.StringUtils.equals(RoleDataAuthorityEnum.CUSTOM.getDataAuthorityType(), dataAuthority)) { if (Objects.isNull(dataAuthorityUserIds) || dataAuthorityUserIds.isEmpty()) { - LOG.debug("权限列表为空,设置查看个人"); + log.debug("权限列表为空,设置查看个人"); params.put(ISystemConstant.DATA_AUTHORITY, RoleDataAuthorityEnum.SELF.getDataAuthorityType()); params.put(ISystemConstant.DATA_CREATOR, currentUser.getUserId()); } else { diff --git a/module-permission/pom.xml b/module-permission/pom.xml new file mode 100644 index 00000000..a4ee66d8 --- /dev/null +++ b/module-permission/pom.xml @@ -0,0 +1,23 @@ + + + + wg-basic + ink.wgink + 1.0-SNAPSHOT + + 4.0.0 + + module-permission + 权限模块 + + + + ink.wgink + common + 1.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/module-permission/src/main/java/ink/wgink/service/permission/controller/api/PermissionController.java b/module-permission/src/main/java/ink/wgink/service/permission/controller/api/PermissionController.java new file mode 100644 index 00000000..01695542 --- /dev/null +++ b/module-permission/src/main/java/ink/wgink/service/permission/controller/api/PermissionController.java @@ -0,0 +1,118 @@ +package ink.wgink.service.permission.controller.api; + +import ink.wgink.annotation.CheckRequestBodyAnnotation; +import ink.wgink.common.base.DefaultBaseController; +import ink.wgink.common.component.SecurityComponent; +import ink.wgink.interfaces.consts.ISystemConstant; +import ink.wgink.pojo.ListPage; +import ink.wgink.pojo.dtos.CurrentUserIdInfoDTO; +import ink.wgink.pojo.dtos.permission.PermissionDTO; +import ink.wgink.pojo.result.ErrorResult; +import ink.wgink.pojo.result.SuccessResult; +import ink.wgink.pojo.result.SuccessResultData; +import ink.wgink.pojo.result.SuccessResultList; +import ink.wgink.service.permission.pojo.vos.PermissionVO; +import ink.wgink.service.permission.service.IPermissionService; +import io.swagger.annotations.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.AntPathMatcher; +import org.springframework.web.bind.annotation.*; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * @ClassName: PermissionController + * @Description: 权限 + * @Author: WenG + * @Date: 2020-05-27 15:58 + * @Version: 1.0 + **/ +@Api(tags = ISystemConstant.API_TAGS_SYSTEM_PREFIX + "权限接口") +@RestController +@RequestMapping(ISystemConstant.API_PREFIX + "/permission") +public class PermissionController extends DefaultBaseController { + + @Autowired + private IPermissionService permissionService; + @Autowired + private SecurityComponent securityComponent; + private AntPathMatcher antPathMatcher = new AntPathMatcher(); + + @ApiOperation(value = "新增权限", notes = "新增权限接口") + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @PostMapping("save") + @CheckRequestBodyAnnotation + public SuccessResult save(@RequestBody PermissionVO permissionVO) { + permissionService.save(permissionVO); + return new SuccessResult(); + } + + @ApiOperation(value = "删除权限(id列表)", notes = "删除权限(id列表)接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "ids", value = "ID列表,用下划线分隔", paramType = "path", example = "1_2_3") + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @DeleteMapping("remove/{ids}") + public SuccessResult remove(@PathVariable("ids") String ids) { + permissionService.remove(Arrays.asList(ids.split("\\_"))); + return new SuccessResult(); + } + + @ApiOperation(value = "修改权限", notes = "修改权限接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "permissionId", value = "权限ID", paramType = "path") + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @PutMapping("update/{permissionId}") + @CheckRequestBodyAnnotation + public SuccessResult update(@PathVariable("permissionId") String permissionId, @RequestBody PermissionVO permissionVO) { + permissionService.update(permissionId, permissionVO); + return new SuccessResult(); + } + + @ApiOperation(value = "权限详情(通过ID)", notes = "权限详情(通过ID)接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "permissionId", value = "权限ID", paramType = "path") + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("get/{permissionId}") + public PermissionDTO get(@PathVariable("permissionId") String permissionId) { + return permissionService.get(permissionId); + } + + @ApiOperation(value = "权限列表", notes = "权限列表接口") + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("list") + public List list() { + Map params = requestParams(); + return permissionService.list(params); + } + + @ApiOperation(value = "权限分页列表", notes = "权限分页列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "page", value = "当前页码", paramType = "query", dataType = "int", defaultValue = "1"), + @ApiImplicitParam(name = "rows", value = "显示数量", paramType = "query", dataType = "int", defaultValue = "20"), + @ApiImplicitParam(name = "keywords", value = "关键字", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "permissionType", value = "权限类型", paramType = "query", dataType = "String") + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("listpage") + public SuccessResultList> listPage(ListPage page) { + Map params = requestParams(); + page.setParams(params); + return permissionService.listPage(page); + } + + @ApiOperation(value = "权限统计", notes = "权限统计接口") + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("count") + SuccessResultData count() { + Map params = requestParams(); + return permissionService.count(params); + } + +} \ No newline at end of file diff --git a/module-permission/src/main/java/ink/wgink/service/permission/dao/IPermissionDao.java b/module-permission/src/main/java/ink/wgink/service/permission/dao/IPermissionDao.java new file mode 100644 index 00000000..4956d095 --- /dev/null +++ b/module-permission/src/main/java/ink/wgink/service/permission/dao/IPermissionDao.java @@ -0,0 +1,82 @@ +package ink.wgink.service.permission.dao; + +import ink.wgink.exceptions.RemoveException; +import ink.wgink.exceptions.SaveException; +import ink.wgink.exceptions.SearchException; +import ink.wgink.exceptions.UpdateException; +import ink.wgink.pojo.dtos.permission.PermissionDTO; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Map; + +/** + * @ClassName: IPermissionDao + * @Description: 权限 + * @Author: WenG + * @Date: 2020-05-27 15:58 + * @Version: 1.0 + **/ +@Repository +public interface IPermissionDao { + + /** + * 新增权限 + * + * @param params + * @throws SaveException + */ + void save(Map params) throws SaveException; + + /** + * 删除权限 + * + * @param params + * @throws RemoveException + */ + void remove(Map params) throws RemoveException; + + /** + * 删除权限(物理) + * + * @param params + * @throws RemoveException + */ + void delete(Map params) throws RemoveException; + + /** + * 修改权限 + * + * @param params + * @throws UpdateException + */ + void update(Map params) throws UpdateException; + + /** + * 权限详情 + * + * @param params + * @return + * @throws SearchException + */ + PermissionDTO get(Map params) throws SearchException; + + /** + * 权限列表 + * + * @param params + * @return + * @throws SearchException + */ + List list(Map params) throws SearchException; + + /** + * 权限统计 + * + * @param params + * @return + * @throws SearchException + */ + Integer count(Map params) throws SearchException; + +} \ No newline at end of file diff --git a/module-permission/src/main/java/ink/wgink/service/permission/pojo/vos/PermissionVO.java b/module-permission/src/main/java/ink/wgink/service/permission/pojo/vos/PermissionVO.java new file mode 100644 index 00000000..b46e1d9b --- /dev/null +++ b/module-permission/src/main/java/ink/wgink/service/permission/pojo/vos/PermissionVO.java @@ -0,0 +1,88 @@ +package ink.wgink.service.permission.pojo.vos; + +import ink.wgink.annotation.CheckEmptyAnnotation; +import ink.wgink.annotation.CheckNumberAnnotation; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @ClassName: PermissionVO + * @Description: 权限 + * @Author: WenG + * @Date: 2020-05-27 15:58 + * @Version: 1.0 + **/ +@ApiModel +public class PermissionVO { + + @ApiModelProperty(name = "permissionTitle", value = "权限名称") + @CheckEmptyAnnotation(name = "权限名称") + private String permissionTitle; + @ApiModelProperty(name = "permissionType", value = "权限类型") + @CheckEmptyAnnotation(name = "权限类型", types = {"permissionInsert", "permissionDelete", "permissionUpdate", "permissionQuery"}) + private String permissionType; + @ApiModelProperty(name = "permissionUrl", value = "权限路径") + private String permissionUrl; + @ApiModelProperty(name = "permissionClientId", value = "客户端") + private String permissionClientId; + @ApiModelProperty(name = "isPublic", value = "是否公共") + @CheckNumberAnnotation(name = "是否公共", types = {"0", "1"}) + private Integer isPublic; + + public String getPermissionTitle() { + return permissionTitle == null ? "" : permissionTitle; + } + + public void setPermissionTitle(String permissionTitle) { + this.permissionTitle = permissionTitle; + } + + public String getPermissionType() { + return permissionType == null ? "" : permissionType; + } + + public void setPermissionType(String permissionType) { + this.permissionType = permissionType; + } + + public String getPermissionUrl() { + return permissionUrl == null ? "" : permissionUrl; + } + + public void setPermissionUrl(String permissionUrl) { + this.permissionUrl = permissionUrl; + } + + public String getPermissionClientId() { + return permissionClientId == null ? "" : permissionClientId; + } + + public void setPermissionClientId(String permissionClientId) { + this.permissionClientId = permissionClientId; + } + + public Integer getIsPublic() { + return isPublic == null ? 0 : isPublic; + } + + public void setIsPublic(Integer isPublic) { + this.isPublic = isPublic; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("{"); + sb.append("\"permissionTitle\":\"") + .append(permissionTitle).append('\"'); + sb.append(",\"permissionType\":\"") + .append(permissionType).append('\"'); + sb.append(",\"permissionUrl\":\"") + .append(permissionUrl).append('\"'); + sb.append(",\"permissionClientId\":\"") + .append(permissionClientId).append('\"'); + sb.append(",\"isPublic\":") + .append(isPublic); + sb.append('}'); + return sb.toString(); + } +} diff --git a/module-permission/src/main/java/ink/wgink/service/permission/service/IPermissionService.java b/module-permission/src/main/java/ink/wgink/service/permission/service/IPermissionService.java new file mode 100644 index 00000000..b00429df --- /dev/null +++ b/module-permission/src/main/java/ink/wgink/service/permission/service/IPermissionService.java @@ -0,0 +1,105 @@ +package ink.wgink.service.permission.service; + +import ink.wgink.exceptions.RemoveException; +import ink.wgink.exceptions.SearchException; +import ink.wgink.pojo.ListPage; +import ink.wgink.pojo.dtos.permission.PermissionDTO; +import ink.wgink.pojo.result.SuccessResult; +import ink.wgink.pojo.result.SuccessResultData; +import ink.wgink.pojo.result.SuccessResultList; +import ink.wgink.service.permission.pojo.vos.PermissionVO; + +import java.util.List; +import java.util.Map; + +/** + * @ClassName: IPermissionService + * @Description: 权限 + * @Author: WenG + * @Date: 2020-05-27 15:58 + * @Version: 1.0 + **/ +public interface IPermissionService { + + /** + * 新增权限 + * + * @param permissionVO + * @return + * @throws Exception + */ + void save(PermissionVO permissionVO); + + /** + * 新增权限 + * + * @param permissionVO + * @return permissionId + */ + String savePermissionReturnId(PermissionVO permissionVO); + + /** + * 删除权限 + * + * @param ids + * @return + */ + void remove(List ids); + + /** + * 删除权限(物理删除) + * + * @param ids + */ + void deletePermission(List ids); + + /** + * 修改权限 + * + * @param permissionId + * @param permissionVO + * @return + */ + void update(String permissionId, PermissionVO permissionVO); + + /** + * 权限详情(通过ID) + * + * @param permissionId + * @return + */ + PermissionDTO get(String permissionId); + + /** + * 权限列表 + * + * @param params + * @return + */ + List list(Map params); + + /** + * 权限分页列表 + * + * @param page + * @return + */ + SuccessResultList> listPage(ListPage page); + + /** + * 权限统计 + * + * @param params + * @return + */ + Integer countNumberPermission(Map params); + + /** + * 权限统计 + * + * @param params + * @return + */ + SuccessResultData count(Map params); + +} \ No newline at end of file diff --git a/module-permission/src/main/java/ink/wgink/service/permission/service/impl/PermissionServiceImpl.java b/module-permission/src/main/java/ink/wgink/service/permission/service/impl/PermissionServiceImpl.java new file mode 100644 index 00000000..08bd4aea --- /dev/null +++ b/module-permission/src/main/java/ink/wgink/service/permission/service/impl/PermissionServiceImpl.java @@ -0,0 +1,103 @@ +package ink.wgink.service.permission.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import ink.wgink.common.base.DefaultBaseService; +import ink.wgink.pojo.ListPage; +import ink.wgink.pojo.dtos.permission.PermissionDTO; +import ink.wgink.pojo.result.SuccessResultData; +import ink.wgink.pojo.result.SuccessResultList; +import ink.wgink.service.permission.dao.IPermissionDao; +import ink.wgink.service.permission.pojo.vos.PermissionVO; +import ink.wgink.service.permission.service.IPermissionService; +import ink.wgink.util.UUIDUtil; +import ink.wgink.util.map.HashMapUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * @ClassName: PermissionServiceImpl + * @Description: 权限 + * @Author: WenG + * @Date: 2020-05-27 15:58 + * @Version: 1.0 + **/ +@Service +public class PermissionServiceImpl extends DefaultBaseService implements IPermissionService { + + @Autowired + private IPermissionDao permissionDao; + + @Override + public void save(PermissionVO permissionVO) { + savePermissionReturnId(permissionVO); + } + + @Override + public String savePermissionReturnId(PermissionVO permissionVO) { + String permissionId = UUIDUtil.getUUID(); + Map params = HashMapUtil.beanToMap(permissionVO); + params.put("permissionId", permissionId); + setSaveInfo(params); + permissionDao.save(params); + return permissionId; + } + + @Override + public void remove(List ids) { + Map params = getHashMap(3); + params.put("permissionIds", ids); + setUpdateInfo(params); + permissionDao.remove(params); + } + + @Override + public void deletePermission(List ids) { + Map params = getHashMap(3); + params.put("permissionIds", ids); + permissionDao.delete(params); + } + + @Override + public void update(String permissionId, PermissionVO permissionVO) { + Map params = HashMapUtil.beanToMap(permissionVO); + params.put("permissionId", permissionId); + setUpdateInfo(params); + permissionDao.update(params); + } + + @Override + public PermissionDTO get(String permissionId) { + Map params = super.getHashMap(1); + params.put("permissionId", permissionId); + return permissionDao.get(params); + } + + @Override + public List list(Map params) { + return permissionDao.list(params); + } + + @Override + public SuccessResultList> listPage(ListPage page) { + PageHelper.startPage(page.getPage(), page.getRows()); + List permissionDTOs = permissionDao.list(page.getParams()); + PageInfo pageInfo = new PageInfo<>(permissionDTOs); + return new SuccessResultList<>(permissionDTOs, pageInfo.getPageNum(), pageInfo.getTotal()); + } + + @Override + public Integer countNumberPermission(Map params) { + Integer count = permissionDao.count(params); + return count == null ? 0 : count; + } + + @Override + public SuccessResultData count(Map params) { + return new SuccessResultData<>(countNumberPermission(params)); + } + +} \ No newline at end of file diff --git a/module-permission/src/main/resources/mybatis/mapper/permission-mapper.xml b/module-permission/src/main/resources/mybatis/mapper/permission-mapper.xml new file mode 100644 index 00000000..d36fdcd3 --- /dev/null +++ b/module-permission/src/main/resources/mybatis/mapper/permission-mapper.xml @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + INSERT INTO sys_permission( + permission_id, + permission_title, + permission_type, + permission_url, + permission_client_id, + is_public, + creator, + gmt_create, + modifier, + gmt_modified, + is_delete + ) VALUES( + #{permissionId}, + #{permissionTitle}, + #{permissionType}, + #{permissionUrl}, + #{permissionClientId}, + #{isPublic}, + #{creator}, + #{gmtCreate}, + #{modifier}, + #{gmtModified}, + #{isDelete} + ) + + + + + UPDATE + sys_permission + SET + is_delete = 1, + modifier = #{modifier}, + gmt_modified = #{gmtModified} + WHERE + permission_id IN + + #{permissionIds[${index}]} + + + + + + DELETE FROM + sys_permission + WHERE + permission_id IN + + #{permissionIds[${index}]} + + + + + + UPDATE + sys_permission + SET + + permission_title = #{permissionTitle}, + + + permission_type = #{permissionType}, + + + permission_url = #{permissionUrl}, + + + permission_client_id = #{permissionClientId}, + + + is_public = #{isPublic}, + + modifier = #{modifier}, + gmt_modified = #{gmtModified} + WHERE + permission_id = #{permissionId} + + + + + + + + + + + + \ No newline at end of file diff --git a/module-permission/src/main/resources/templates/permission/list-permission-role.html b/module-permission/src/main/resources/templates/permission/list-permission-role.html new file mode 100644 index 00000000..80eccc94 --- /dev/null +++ b/module-permission/src/main/resources/templates/permission/list-permission-role.html @@ -0,0 +1,247 @@ + + + + + + + + + + + + + +
+
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+ + +
+
+
+
+
+
+
+ + + + + \ No newline at end of file diff --git a/module-permission/src/main/resources/templates/permission/list.html b/module-permission/src/main/resources/templates/permission/list.html new file mode 100644 index 00000000..d2468dfc --- /dev/null +++ b/module-permission/src/main/resources/templates/permission/list.html @@ -0,0 +1,263 @@ + + + + + + + + + + + + + +
+
+
+
+
+
+
+ +
+ +
+
+ + +
+
+
+
+
+ + + + + \ No newline at end of file diff --git a/module-permission/src/main/resources/templates/permission/save.html b/module-permission/src/main/resources/templates/permission/save.html new file mode 100644 index 00000000..9947d412 --- /dev/null +++ b/module-permission/src/main/resources/templates/permission/save.html @@ -0,0 +1,158 @@ + + + + + + + + + + + + + +
+
+ +
+
+ + +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/module-permission/src/main/resources/templates/permission/update.html b/module-permission/src/main/resources/templates/permission/update.html new file mode 100644 index 00000000..c2d6c044 --- /dev/null +++ b/module-permission/src/main/resources/templates/permission/update.html @@ -0,0 +1,183 @@ + + + + + + + + + + + + + +
+
+ +
+
+ + +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+ + +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 1411f48f..9ea77768 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,7 @@ service-role module-file module-dictionary + module-permission pom diff --git a/service-department/src/main/java/ink/wgink/service/department/controller/api/DepartmentController.java b/service-department/src/main/java/ink/wgink/service/department/controller/api/DepartmentController.java index eeaf6020..c2dac7d6 100644 --- a/service-department/src/main/java/ink/wgink/service/department/controller/api/DepartmentController.java +++ b/service-department/src/main/java/ink/wgink/service/department/controller/api/DepartmentController.java @@ -19,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.*; @@ -174,7 +175,7 @@ public class DepartmentController extends DefaultBaseController { }) @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @PostMapping("uploadexcel") - public UploadExcelResultDTO uploadExcel(MultipartFile excel) { + public UploadExcelResultDTO uploadExcel(MultipartFile excel) throws IOException { if (Objects.isNull(excel)) { throw new ParamsException("Excel不能为空"); } diff --git a/service-department/src/main/java/ink/wgink/service/department/service/impl/DepartmentServiceImpl.java b/service-department/src/main/java/ink/wgink/service/department/service/impl/DepartmentServiceImpl.java index dc31f6d8..0aa7439b 100644 --- a/service-department/src/main/java/ink/wgink/service/department/service/impl/DepartmentServiceImpl.java +++ b/service-department/src/main/java/ink/wgink/service/department/service/impl/DepartmentServiceImpl.java @@ -31,6 +31,7 @@ import ink.wgink.service.department.service.IDepartmentService; import ink.wgink.service.department.service.IDepartmentUserService; import ink.wgink.util.UUIDUtil; import ink.wgink.util.map.HashMapUtil; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -49,6 +50,7 @@ import java.util.*; * @Date: 2021/1/27 3:53 下午 * @Version: 1.0 */ +@Slf4j @Service public class DepartmentServiceImpl extends DefaultBaseService implements IDepartmentService { @@ -142,9 +144,9 @@ public class DepartmentServiceImpl extends DefaultBaseService implements IDepart if (departmentDTO == null) { throw new SearchException("机构组织不存在"); } - LOG.debug("删除已经拆分的组织"); + log.debug("删除已经拆分的组织"); removeByIdReturnDeletedUserIds(departmentId, departmentDTO.getDepartmentName()); - LOG.debug("新建拆分的组织"); + log.debug("新建拆分的组织"); for (SplitDepartmentInfoVO splitDepartmentInfoVO : splitDepartmentVO.getSplitDepartments()) { String userIds = splitDepartmentInfoVO.getUserIds(); String newDepartmentId = saveReturnId(splitDepartmentInfoVO); @@ -431,13 +433,13 @@ public class DepartmentServiceImpl extends DefaultBaseService implements IDepart if (mergeDepartmentDTO == null) { throw new SearchException("合并部门不存在"); } - LOG.debug("新增合并日志"); + log.debug("新增合并日志"); saveAdjustment(mergeDepartmentId, mergeDepartmentDTO.getDepartmentName(), departmentId, departmentDTO.getDepartmentName(), DepartmentAdjustmentTypeEnum.MERGE); - LOG.debug("删除需要合并的组织人员"); + log.debug("删除需要合并的组织人员"); List oldDepartmentUserIds = removeByIdReturnDeletedUserIds(mergeDepartmentId, mergeDepartmentDTO.getDepartmentName()); departmentUserIds.addAll(oldDepartmentUserIds); } - LOG.debug("将合并组织的人员添加到新组织"); + log.debug("将合并组织的人员添加到新组织"); departmentUserService.saveUserIdByDepartmentId(departmentId, departmentName, departmentUserIds); } diff --git a/service-role/pom.xml b/service-role/pom.xml index ed6baef3..e992e449 100644 --- a/service-role/pom.xml +++ b/service-role/pom.xml @@ -15,7 +15,12 @@ ink.wgink - service-user + module-permission + 1.0-SNAPSHOT + + + ink.wgink + service-department 1.0-SNAPSHOT diff --git a/service-role/src/main/java/ink/wgink/service/role/controller/api/RoleController.java b/service-role/src/main/java/ink/wgink/service/role/controller/api/RoleController.java index 355a8631..593d6a70 100644 --- a/service-role/src/main/java/ink/wgink/service/role/controller/api/RoleController.java +++ b/service-role/src/main/java/ink/wgink/service/role/controller/api/RoleController.java @@ -1,10 +1,27 @@ package ink.wgink.service.role.controller.api; +import ink.wgink.annotation.CheckRequestBodyAnnotation; import ink.wgink.common.base.DefaultBaseController; +import ink.wgink.exceptions.*; import ink.wgink.interfaces.consts.ISystemConstant; -import io.swagger.annotations.Api; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import ink.wgink.pojo.ListPage; +import ink.wgink.pojo.dtos.ZTreeDTO; +import ink.wgink.pojo.dtos.role.RoleDTO; +import ink.wgink.pojo.dtos.role.RoleDataAuthorityTypeDTO; +import ink.wgink.pojo.result.ErrorResult; +import ink.wgink.pojo.result.SuccessResult; +import ink.wgink.pojo.result.SuccessResultList; +import ink.wgink.service.role.pojo.vos.RoleDataAuthorityVO; +import ink.wgink.service.role.pojo.vos.RoleUserAuthorizationVO; +import ink.wgink.service.role.pojo.vos.RoleVO; +import ink.wgink.service.role.service.IRoleService; +import io.swagger.annotations.*; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; /** * @ClassName: RoleController @@ -19,4 +36,193 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping(ISystemConstant.API_PREFIX + "/role") public class RoleController extends DefaultBaseController { + @Autowired + private IRoleService roleService; + @Autowired + private IMenuService menuService; + + @ApiOperation(value = "角色新增", notes = "角色新增接口") + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @PostMapping("saverole") + public SuccessResult saveRole(@RequestBody RoleVO roleVO) { + Map params = getParams(); + checkParams(roleVO, params); + return roleService.saveRole(params); + } + + @ApiOperation(value = "角色删除", notes = "通过id列表批量删除角色接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "ids", value = "角色ID列表,用下划线分隔", paramType = "path") + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @DeleteMapping("removerole/{ids}") + public SuccessResult removeRole(@PathVariable("ids") String ids) throws RemoveException { + Map params = getParams(); + params.put("roleIds", ids); + return roleService.removeRole(params); + } + + @ApiOperation(value = "角色修改", notes = "角色修改接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "roleId", value = "角色ID", paramType = "path"), + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @PutMapping("updaterole/{roleId}") + public SuccessResult updateRole(@PathVariable("roleId") String roleId, @RequestBody RoleVO roleVO) { + Map params = getParams(); + params.put("roleId", roleId); + checkParams(roleVO, params); + return roleService.updateRole(params); + } + + /** + * 参数校验 + * + * @param roleVO + * @param params + * @throws ParamsException + */ + private void checkParams(RoleVO roleVO, Map params) { + if (StringUtils.isBlank(roleVO.getRoleParentId())) { + throw new ParamsException("上级ID不能为空"); + } + params.put("roleParentId", roleVO.getRoleParentId()); + + if (StringUtils.isBlank(roleVO.getRoleName())) { + throw new ParamsException("角色名称不能为空"); + } + params.put("roleName", roleVO.getRoleName()); + + params.put("roleSummary", roleVO.getRoleSummary()); + } + + @ApiOperation(value = "角色列表", notes = "角色列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "roleParentId", value = "角色上级ID", paramType = "path") + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("listrolesalljson/{roleParentId}") + public List listRoles(@PathVariable("roleParentId") String roleParentId) { + Map params = getParams(); + params.put("roleParentId", roleParentId); + return roleService.listRolesAllJson(params); + } + + @ApiOperation(value = "角色详情", notes = "角色详情接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "roleId", value = "角色ID", paramType = "path") + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("getrole/{roleId}") + public RoleDTO getRole(@PathVariable("roleId") String roleId) { + Map params = getParams(); + params.put("roleId", roleId); + return roleService.getRole(params); + } + + @ApiOperation(value = "zTree列表", notes = "zTree列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "上级ID", paramType = "query", dataType = "String") + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("listztreerole") + public List listZTreeRole() throws SearchException { + Map params = requestParams(); + String roleParentId = "0"; + if (!StringUtils.isBlank(params.get("id") == null ? null : params.get("id").toString())) { + roleParentId = params.get("id").toString(); + } + params.put("roleParentId", roleParentId); + return roleService.listZTreeRole(params); + } + + @ApiOperation(value = "easyui角色列表", notes = "easyui角色列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "parentId", value = "上级ID", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "page", value = "当前页码", paramType = "query", dataType = "int", defaultValue = "1"), + @ApiImplicitParam(name = "rows", value = "显示数量", paramType = "query", dataType = "int", defaultValue = "20"), + @ApiImplicitParam(name = "keywords", value = "关键字", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "String") + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("listpagerole") + public SuccessResultList> listPageRole(ListPage page) throws SearchException { + Map params = requestParams(); + String roleParentId = "0"; + if (!StringUtils.isBlank(params.get("parentId") == null ? null : params.get("parentId").toString())) { + roleParentId = params.get("parentId").toString(); + } + params.put("roleParentId", roleParentId); + page.setParams(params); + return roleService.listPageRole(page); + } + + @ApiOperation(value = "角色菜单列表", notes = "角色菜单列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "menuParentId", value = "上级菜单ID", paramType = "path", dataType = "String"), + @ApiImplicitParam(name = "roleId", value = "角色ID", paramType = "path", dataType = "String"), + @ApiImplicitParam(name = "type", value = "类型", paramType = "path", dataType = "String") + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("listmenu/{menuParentId}/{roleId}/{type}") + public List listMenu(@PathVariable("menuParentId") String menuParentId, + @PathVariable("roleId") String roleId, + @PathVariable("type") String type) throws SearchException, ParamsException { + Map params = requestParams(); + params.put("menuParentId", menuParentId); + params.put("roleId", roleId); + if (!IRoleService.AUTH_TYPE_INSERT.equals(type) && + !IRoleService.AUTH_TYPE_DELETE.equals(type) && + !IRoleService.AUTH_TYPE_UPDATE.equals(type) && + !IRoleService.AUTH_TYPE_QUERY.equals(type) && + !IRoleService.AUTH_TYPE_MENU.equals(type)) { + throw new ParamsException("授权类型错误"); + } + params.put("type", type); + if (IRoleService.AUTH_TYPE_MENU.equals(type)) { + params.put("menuType", 1); + } + return menuService.listMenuAllJson(params); + } + + @ApiOperation(value = "执行授权", notes = "执行授权接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "roleId", value = "角色ID", paramType = "path", dataType = "String"), + @ApiImplicitParam(name = "type", value = "类型", paramType = "path", dataType = "String") + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @PutMapping("authorization/{roleId}/{type}") + public SuccessResult authorization(@PathVariable("roleId") String roleId, + @PathVariable("type") String type, + @RequestBody RoleUserAuthorizationVO roleUserAuthorizationVO) { + Map params = getParams(); + params.put("roleId", roleId); + if (!IRoleService.AUTH_TYPE_INSERT.equals(type) && + !IRoleService.AUTH_TYPE_DELETE.equals(type) && + !IRoleService.AUTH_TYPE_UPDATE.equals(type) && + !IRoleService.AUTH_TYPE_QUERY.equals(type) && + !IRoleService.AUTH_TYPE_MENU.equals(type)) { + throw new ParamsException("授权类型错误"); + } + params.put("type", type); + params.put("menuIds", roleUserAuthorizationVO.getMenuIds()); + return roleService.authorization(params); + } + + @ApiOperation(value = "更新角色数据权限", notes = "更新角色数据权限接口") + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @PutMapping("updateroledataauthority/{roleId}") + @CheckRequestBodyAnnotation + public SuccessResult updateRoleDataAuthority(@PathVariable("roleId") String roleId, @RequestBody RoleDataAuthorityVO roleDataAuthorityVO) { + return roleService.updateRoleDataAuthority(roleId, roleDataAuthorityVO); + } + + @ApiOperation(value = "获取角色数据权限类型", notes = "获取角色数据权限类型接口") + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("getroledataauthoritytype/{roleId}") + public RoleDataAuthorityTypeDTO getRoleDataAuthorityType(@PathVariable("roleId") String roleId) { + return roleService.getRoleDataAuthorityType(roleId); + } + } diff --git a/service-role/src/main/java/ink/wgink/service/role/dao/IRoleDao.java b/service-role/src/main/java/ink/wgink/service/role/dao/IRoleDao.java new file mode 100644 index 00000000..e394eef2 --- /dev/null +++ b/service-role/src/main/java/ink/wgink/service/role/dao/IRoleDao.java @@ -0,0 +1,194 @@ +package ink.wgink.service.role.dao; + +import ink.wgink.exceptions.RemoveException; +import ink.wgink.exceptions.SaveException; +import ink.wgink.exceptions.SearchException; +import ink.wgink.exceptions.UpdateException; +import ink.wgink.pojo.bos.RoleBO; +import ink.wgink.pojo.bos.RoleMenuBO; +import ink.wgink.pojo.dtos.ZTreeDTO; +import ink.wgink.pojo.dtos.role.RoleDTO; +import ink.wgink.pojo.dtos.role.RoleDataAuthorityDTO; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Map; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: IRoleDao + * @Description: 角色 + * @Author: WangGeng + * @Date: 2021/1/31 18:52 + * @Version: 1.0 + **/ +@Repository +public interface IRoleDao { + + /** + * 新增角色 + * + * @param params + * @throws SaveException + */ + void saveRole(Map params) throws SaveException; + + /** + * 删除角色 + * + * @param params + * @throws RemoveException + */ + void removeRole(Map params) throws RemoveException; + + /** + * 修改角色 + * + * @param params + * @throws UpdateException + */ + void updateRole(Map params) throws UpdateException; + + /** + * 角色列表 + * + * @param params + * @return + * @throws SearchException + */ + List listRole(Map params) throws SearchException; + + /** + * 角色详情 + * + * @param params + * @return + * @throws SearchException + */ + RoleDTO getRole(Map params) throws SearchException; + + /** + * 角色详情 + * + * @param params + * @return + * @throws SearchException + */ + RolePO getRolePO(Map params) throws SearchException; + + /** + * 获取最后一个字角色 + * + * @param parentId + * @return + * @throws SearchException + */ + RoleDTO getLastByParentId(String parentId) throws SearchException; + + /** + * 角色ZTree列表 + * + * @param params + * @return + * @throws SearchException + */ + List listZTreeRoles(Map params) throws SearchException; + + /** + * 子列表个数 + * + * @param id + * @return + * @throws SearchException + */ + Integer countByParentId(String id) throws SearchException; + + /** + * 通过用户获取角色 + * + * @param params + * @return + * @throws SearchException + */ + List listRoleBOByUser(Map params) throws SearchException; + + /** + * 通过用户组获取角色 + * + * @param params + * @return + * @throws SearchException + */ + List listRoleBOByGroup(Map params) throws SearchException; + + /** + * 删除角色菜单信息 + * + * @param params + * @throws RemoveException + */ + void removeRoleMenuInfo(Map params) throws RemoveException; + + /** + * 保存角色菜单信息 + * + * @param params + * @throws SaveException + */ + void saveRoleMenuInfo(Map params) throws SaveException; + + /** + * 角色菜单列表 + * + * @param params + * @return + * @throws SearchException + */ + List listRoleMenuInfo(Map params) throws SearchException; + + /** + * 角色菜单列表详情 + * + * @param params + * @return + * @throws SearchException + */ + List listRoleMenuDetail(Map params) throws SearchException; + + /** + * 新增自定义角色数据权限 + * + * @param params + * @throws SaveException + */ + void saveRoleDataAuthority(Map params) throws SaveException; + + /** + * 删除自定义角色数据权限 + * + * @param params + * @throws RemoveException + */ + void deleteRoleDataAuthority(Map params) throws RemoveException; + + /** + * 角色权限列表 + * + * @param params + * @return + * @throws SearchException + */ + List listRoleDataAuthority(Map params) throws SearchException; + + /** + * 统计角色 + * + * @param params + * @return + * @throws SearchException + */ + Integer countRole(Map params) throws SearchException; + +} diff --git a/service-role/src/main/java/ink/wgink/service/role/dao/IRolePermissionDao.java b/service-role/src/main/java/ink/wgink/service/role/dao/IRolePermissionDao.java new file mode 100644 index 00000000..30476cdf --- /dev/null +++ b/service-role/src/main/java/ink/wgink/service/role/dao/IRolePermissionDao.java @@ -0,0 +1,49 @@ +package ink.wgink.service.role.dao; + +import ink.wgink.exceptions.RemoveException; +import ink.wgink.exceptions.SaveException; +import ink.wgink.exceptions.SearchException; +import ink.wgink.pojo.dtos.role.RolePermissionDTO; +import org.springframework.stereotype.Repository; + +import java.util.Map; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: IRolePermissionDao + * @Description: 角色权限 + * @Author: WangGeng + * @Date: 2021/1/31 21:24 + * @Version: 1.0 + **/ +@Repository +public interface IRolePermissionDao { + + /** + * 新增权限角色 + * + * @param params + * @throws SaveException + */ + void save(Map params) throws SaveException; + + /** + * 删除权限角色 + * + * @param params + * @throws RemoveException + */ + void delete(Map params) throws RemoveException; + + /** + * 权限详情 + * + * @param params + * @return + * @throws SearchException + */ + RolePermissionDTO get(Map params) throws SearchException; + +} diff --git a/service-role/src/main/java/ink/wgink/service/role/pojo/vos/RoleDataAuthorityVO.java b/service-role/src/main/java/ink/wgink/service/role/pojo/vos/RoleDataAuthorityVO.java new file mode 100644 index 00000000..76f2d263 --- /dev/null +++ b/service-role/src/main/java/ink/wgink/service/role/pojo/vos/RoleDataAuthorityVO.java @@ -0,0 +1,56 @@ +package ink.wgink.service.role.pojo.vos; + +import com.cm.common.annotation.CheckEmptyAnnotation; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.util.ArrayList; +import java.util.List; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: RoleDataAuthorityVO + * @Description: 角色数据权限 + * @Author: WangGeng + * @Date: 2019/11/23 8:10 下午 + * @Version: 1.0 + **/ +@ApiModel +public class RoleDataAuthorityVO { + + @ApiModelProperty(name = "dataAuthorityType", value = "数据权限类型") + @CheckEmptyAnnotation(name = "数据权限类型", types = {"all", "department", "custom", "self"}) + private String dataAuthorityType; + + @ApiModelProperty(name = "roleUserAuthorityList", value = "角色数据权限列表") + private List roleUserAuthorityList; + + public String getDataAuthorityType() { + return dataAuthorityType == null ? "" : dataAuthorityType.trim(); + } + + public void setDataAuthorityType(String dataAuthorityType) { + this.dataAuthorityType = dataAuthorityType; + } + + public List getRoleUserAuthorityList() { + return roleUserAuthorityList == null ? new ArrayList<>(0) : roleUserAuthorityList; + } + + public void setRoleUserAuthorityList(List roleUserAuthorityList) { + this.roleUserAuthorityList = roleUserAuthorityList; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("{"); + sb.append("\"dataAuthorityType\":") + .append("\"").append(dataAuthorityType).append("\""); + sb.append(",\"roleUserAuthorityList\":") + .append(roleUserAuthorityList); + sb.append('}'); + return sb.toString(); + } +} diff --git a/service-role/src/main/java/ink/wgink/service/role/pojo/vos/RolePermissionVO.java b/service-role/src/main/java/ink/wgink/service/role/pojo/vos/RolePermissionVO.java new file mode 100644 index 00000000..134fdfdd --- /dev/null +++ b/service-role/src/main/java/ink/wgink/service/role/pojo/vos/RolePermissionVO.java @@ -0,0 +1,53 @@ +package ink.wgink.service.role.pojo.vos; + +import ink.wgink.annotation.CheckBooleanAnnotation; +import ink.wgink.annotation.CheckListAnnotation; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.util.List; + +/** + * @ClassName: PermissionVO + * @Description: 权限 + * @Author: WenG + * @Date: 2020-05-27 15:58 + * @Version: 1.0 + **/ +@ApiModel +public class RolePermissionVO { + + @ApiModelProperty(name = "isChecked", value = "是否选中") + @CheckBooleanAnnotation(name = "是否选中") + private Boolean isChecked; + @ApiModelProperty(name = "permissionIdArray", value = "权限ID列表") + @CheckListAnnotation(name = "权限ID列表") + private List permissionIdArray; + + public Boolean getChecked() { + return isChecked; + } + + public void setChecked(Boolean checked) { + isChecked = checked; + } + + public List getPermissionIdArray() { + return permissionIdArray; + } + + public void setPermissionIdArray(List permissionIdArray) { + this.permissionIdArray = permissionIdArray; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("{"); + sb.append("\"isChecked\":") + .append(isChecked); + sb.append(",\"permissionIdArray\":") + .append(permissionIdArray); + sb.append('}'); + return sb.toString(); + } +} diff --git a/service-role/src/main/java/ink/wgink/service/role/pojo/vos/RoleUserAuthorityVO.java b/service-role/src/main/java/ink/wgink/service/role/pojo/vos/RoleUserAuthorityVO.java new file mode 100644 index 00000000..dd837baa --- /dev/null +++ b/service-role/src/main/java/ink/wgink/service/role/pojo/vos/RoleUserAuthorityVO.java @@ -0,0 +1,50 @@ +package ink.wgink.service.role.pojo.vos; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: RoleUserAuthorityVO + * @Description: 角色用户 + * @Author: WangGeng + * @Date: 2019/11/23 8:14 下午 + * @Version: 1.0 + **/ +@ApiModel +public class RoleUserAuthorityVO { + + @ApiModelProperty(name = "departmentId", value = "部门ID") + private String departmentId; + @ApiModelProperty(name = "userId", value = "用户ID") + private String userId; + + public String getDepartmentId() { + return departmentId == null ? "" : departmentId.trim(); + } + + public void setDepartmentId(String departmentId) { + this.departmentId = departmentId; + } + + public String getUserId() { + return userId == null ? "" : userId.trim(); + } + + public void setUserId(String userId) { + this.userId = userId; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("{"); + sb.append("\"departmentId\":") + .append("\"").append(departmentId).append("\""); + sb.append(",\"userId\":") + .append("\"").append(userId).append("\""); + sb.append('}'); + return sb.toString(); + } +} diff --git a/service-role/src/main/java/ink/wgink/service/role/pojo/vos/RoleUserAuthorizationVO.java b/service-role/src/main/java/ink/wgink/service/role/pojo/vos/RoleUserAuthorizationVO.java new file mode 100644 index 00000000..d3b56f94 --- /dev/null +++ b/service-role/src/main/java/ink/wgink/service/role/pojo/vos/RoleUserAuthorizationVO.java @@ -0,0 +1,35 @@ +package ink.wgink.service.role.pojo.vos; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @ClassName: RoleUserAuthorizationVO + * @Description: 角色用户授权 + * @Author: WangGeng + * @Date: 2019/3/2 12:14 AM + * @Version: 1.0 + **/ +@ApiModel +public class RoleUserAuthorizationVO { + + @ApiModelProperty(name = "menuIds", value = "菜单ID列表,下划线分隔", example = "1_2_3") + private String menuIds; + + public String getMenuIds() { + return menuIds; + } + + public void setMenuIds(String menuIds) { + this.menuIds = menuIds; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("{"); + sb.append("\"menuIds\":") + .append("\"").append(menuIds).append("\""); + sb.append('}'); + return sb.toString(); + } +} diff --git a/service-role/src/main/java/ink/wgink/service/role/pojo/vos/RoleVO.java b/service-role/src/main/java/ink/wgink/service/role/pojo/vos/RoleVO.java new file mode 100644 index 00000000..05ce2d0f --- /dev/null +++ b/service-role/src/main/java/ink/wgink/service/role/pojo/vos/RoleVO.java @@ -0,0 +1,59 @@ +package ink.wgink.service.role.pojo.vos; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @ClassName: RoleVO + * @Description: 角色视图 + * @Author: WangGeng + * @Date: 2019/3/1 11:35 PM + * @Version: 1.0 + **/ +@ApiModel +public class RoleVO { + + @ApiModelProperty(name = "roleParentId", value = "上级ID", required = true) + private String roleParentId; + @ApiModelProperty(name = "roleName", value = "角色名称", required = true, example = "角色名称") + private String roleName; + @ApiModelProperty(name = "roleSummary", value = "角色说明", example = "这是说明") + private String roleSummary; + + public String getRoleParentId() { + return roleParentId == null ? null : roleParentId.trim(); + } + + public void setRoleParentId(String roleParentId) { + this.roleParentId = roleParentId; + } + + public String getRoleName() { + return roleName == null ? null : roleName.trim(); + } + + public void setRoleName(String roleName) { + this.roleName = roleName; + } + + public String getRoleSummary() { + return roleSummary == null ? null : roleSummary.trim(); + } + + public void setRoleSummary(String roleSummary) { + this.roleSummary = roleSummary; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("{"); + sb.append("\"roleParentId\":") + .append("\"").append(roleParentId).append("\""); + sb.append(",\"roleName\":") + .append("\"").append(roleName).append("\""); + sb.append(",\"roleSummary\":") + .append("\"").append(roleSummary).append("\""); + sb.append('}'); + return sb.toString(); + } +} diff --git a/service-role/src/main/java/ink/wgink/service/role/service/IRolePermissionService.java b/service-role/src/main/java/ink/wgink/service/role/service/IRolePermissionService.java new file mode 100644 index 00000000..75bca074 --- /dev/null +++ b/service-role/src/main/java/ink/wgink/service/role/service/IRolePermissionService.java @@ -0,0 +1,58 @@ +package ink.wgink.service.role.service; + +import ink.wgink.exceptions.RemoveException; +import ink.wgink.exceptions.SaveException; +import ink.wgink.exceptions.SearchException; +import ink.wgink.exceptions.UpdateException; +import ink.wgink.interfaces.role.IRoleBaseService; +import ink.wgink.pojo.ListPage; +import ink.wgink.pojo.bos.DepartmentBO; +import ink.wgink.pojo.bos.GroupBO; +import ink.wgink.pojo.bos.RoleBO; +import ink.wgink.pojo.bos.RoleMenuBO; +import ink.wgink.pojo.dtos.ZTreeDTO; +import ink.wgink.pojo.dtos.role.RoleDTO; +import ink.wgink.pojo.dtos.role.RoleDataAuthorityDTO; +import ink.wgink.pojo.dtos.role.RoleDataAuthorityTypeDTO; +import ink.wgink.pojo.dtos.role.RolePermissionDTO; +import ink.wgink.pojo.result.SuccessResult; +import ink.wgink.pojo.result.SuccessResultList; +import ink.wgink.service.role.pojo.vos.RoleDataAuthorityVO; +import ink.wgink.service.role.pojo.vos.RolePermissionVO; + +import java.util.List; +import java.util.Map; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: IRoleService + * @Description: 角色 + * @Author: WangGeng + * @Date: 2021/1/31 18:50 + * @Version: 1.0 + **/ +public interface IRolePermissionService { + + /** + * 修改权限(通过角色) + * + * @param roleId + * @param rolePermissionVO + * @return + * @throws UpdateException + */ + void updateByRoleId(String roleId, RolePermissionVO rolePermissionVO); + + /** + * 权限角色 + * + * @param permissionId + * @param roleId + * @return + * @throws SearchException + */ + RolePermissionDTO getByPermissionIdAndRole(String permissionId, String roleId); + +} diff --git a/service-role/src/main/java/ink/wgink/service/role/service/IRoleService.java b/service-role/src/main/java/ink/wgink/service/role/service/IRoleService.java new file mode 100644 index 00000000..12a841ad --- /dev/null +++ b/service-role/src/main/java/ink/wgink/service/role/service/IRoleService.java @@ -0,0 +1,299 @@ +package ink.wgink.service.role.service; + +import ink.wgink.exceptions.RemoveException; +import ink.wgink.exceptions.SaveException; +import ink.wgink.exceptions.SearchException; +import ink.wgink.exceptions.UpdateException; +import ink.wgink.interfaces.role.IRoleBaseService; +import ink.wgink.pojo.ListPage; +import ink.wgink.pojo.bos.DepartmentBO; +import ink.wgink.pojo.bos.GroupBO; +import ink.wgink.pojo.bos.RoleBO; +import ink.wgink.pojo.bos.RoleMenuBO; +import ink.wgink.pojo.dtos.ZTreeDTO; +import ink.wgink.pojo.dtos.role.RoleDTO; +import ink.wgink.pojo.dtos.role.RoleDataAuthorityDTO; +import ink.wgink.pojo.dtos.role.RoleDataAuthorityTypeDTO; +import ink.wgink.pojo.result.SuccessResult; +import ink.wgink.pojo.result.SuccessResultList; +import ink.wgink.service.role.pojo.vos.RoleDataAuthorityVO; + +import java.util.List; +import java.util.Map; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: IRoleService + * @Description: 角色 + * @Author: WangGeng + * @Date: 2021/1/31 18:50 + * @Version: 1.0 + **/ +public interface IRoleService extends IRoleBaseService { + + /** + * 授权新增 + */ + String AUTH_TYPE_INSERT = "1"; + /** + * 授权删除 + */ + String AUTH_TYPE_DELETE = "2"; + /** + * 授权更新 + */ + String AUTH_TYPE_UPDATE = "3"; + /** + * 授权查询 + */ + String AUTH_TYPE_QUERY = "4"; + /** + * 授权菜单 + */ + String AUTH_TYPE_MENU = "5"; + /** + * 角色菜单新增 + */ + String ROLE_INSERT = "roleInsert"; + /** + * 角色菜单删除 + */ + String ROLE_DELETE = "roleDelete"; + /** + * 角色菜单更新 + */ + String ROLE_UPDATE = "roleUpdate"; + /** + * 角色菜单查询 + */ + String ROLE_QUERY = "roleQuery"; + /** + * 角色菜单 + */ + String ROLE_MENU = "roleMenu"; + /** + * 角色类型 + */ + String ROLE_TYPE = "roleType"; + + /** + * 新增角色 + * + * @param params + * @return + * @throws SaveException + * @throws SearchException + */ + SuccessResult saveRole(Map params); + + /** + * 删除角色 + * + * @param params + * @return + * @throws RemoveException + */ + SuccessResult removeRole(Map params); + + /** + * 修改角色 + * + * @param params + * @return + * @throws UpdateException + */ + SuccessResult updateRole(Map params); + + /** + * 全部角色JSON列表 + * + * @param params + * @return + * @throws SearchException + */ + List listRolesAllJson(Map params); + + /** + * 角色详情 + * + * @param params + * @return + */ + RoleDTO getRole(Map params); + + /** + * 角色列表,递归获取全部内容 + * + * @param params + * @return + * @throws SearchException + */ + List listRolesAll(Map params); + + /** + * 角色zTree列表 + * + * @param params + * @return + * @throws SearchException + */ + List listZTreeRole(Map params); + + /** + * 角色EasyUI列表 + * + * @param page + * @return + */ + SuccessResultList> listPageRole(ListPage page); + + /** + * 执行授权 + * + * @param params + * @return + * @throws UpdateException + */ + SuccessResult authorization(Map params); + + /** + * 通过用户获取角色 + * + * @param params + * @return + * @throws SearchException + */ + List listRoleBOByUser(Map params); + + /** + * 通过用户组获取角色 + * + * @param params + * @return + * @throws SearchException + */ + List listRoleBOByGroup(Map params); + + /** + * 角色菜单列表 + * + * @param params + * @return + * @throws SearchException + */ + List listRoleMenuDetail(Map params); + + /** + * 通过roleId获取角色 + * + * @param roleId + * @return + * @throws SearchException + */ + public RoleBO getRoleBOByRoleId(String roleId); + + /** + * 获取角色权限集合 + * + * @param roleIds + * @return + * @throws SearchException + */ + List listRoleBO(String roleIds); + + /** + * 更新角色数据权限 + * + * @param roleId + * @param roleDataAuthorityVO + * @return + * @throws SaveException + * @throws RemoveException + */ + SuccessResult updateRoleDataAuthority(String roleId, RoleDataAuthorityVO roleDataAuthorityVO); + + /** + * 获取角色数据权限类型 + * + * @param roleId + * @return + * @throws SearchException + */ + RoleDataAuthorityTypeDTO getRoleDataAuthorityType(String roleId); + + /** + * 获取角色数据权限列表(通过ID列表) + * + * @param roleIds + * @return + * @throws SearchException + */ + List listRoleDataAuthorityByRoleIdList(List roleIds); + + /** + * 通过角色列表获取数据权限 + * + * @param roleBOs + * @return + */ + List listDataAuthorityUserIdByRole(List roleBOs); + + /** + * 通过部门获取用户数据数据权限 + * + * @param departmentBOs + * @return + */ + List listDataAuthorityUserIdByDepartment(List departmentBOs); + + /** + * 获取角色数据权限 + * + * @param roleBOs + * @return + */ + String getRoleDataAuthority(List roleBOs); + + /** + * 设置角色菜单 + * + * @param roleBO + * @throws SearchException + */ + void setRoleMenu(RoleBO roleBO); + + /** + * 批量设置角色菜单 + * + * @param roleBOs + * @throws SearchException + */ + void setRoleMenus(List roleBOs); + + /** + * 设置组角色列表 + * + * @param groupRoles + * @param roleBOs + */ + void setGroupRoles(List groupRoles, List roleBOs); + + /** + * 去除重复值 + * + * @param roleBOs + */ + void removalDuplicateRole(List roleBOs); + + /** + * 统计角色 + * + * @param params + * @return + * @throws SearchException + */ + Integer countRole(Map params); + +} diff --git a/service-role/src/main/java/ink/wgink/service/role/service/impl/RolePermissionServiceImpl.java b/service-role/src/main/java/ink/wgink/service/role/service/impl/RolePermissionServiceImpl.java new file mode 100644 index 00000000..fce6fc01 --- /dev/null +++ b/service-role/src/main/java/ink/wgink/service/role/service/impl/RolePermissionServiceImpl.java @@ -0,0 +1,78 @@ +package ink.wgink.service.role.service.impl; + +import ink.wgink.common.base.DefaultBaseService; +import ink.wgink.pojo.dtos.permission.PermissionDTO; +import ink.wgink.pojo.dtos.role.RolePermissionDTO; +import ink.wgink.pojo.result.SuccessResult; +import ink.wgink.service.permission.service.IPermissionService; +import ink.wgink.service.role.dao.IRolePermissionDao; +import ink.wgink.service.role.pojo.vos.RolePermissionVO; +import ink.wgink.service.role.service.IRolePermissionService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: RolePermissionServiceImpl + * @Description: 角色权限 + * @Author: WangGeng + * @Date: 2021/1/31 21:23 + * @Version: 1.0 + **/ +@Slf4j +@Service +public class RolePermissionServiceImpl extends DefaultBaseService implements IRolePermissionService { + + @Autowired + private IRolePermissionDao rolePermissionDao; + @Autowired + private IPermissionService permissionService; + + @Override + public void updateByRoleId(String roleId, RolePermissionVO rolePermissionVO) { + Map params = getHashMap(2); + params.put("roleId", roleId); + if (rolePermissionVO.getChecked()) { + log.debug("新增权限角色,roleId: {}", roleId); + for (String permissionId : rolePermissionVO.getPermissionIdArray()) { + if (getByPermissionIdAndRole(permissionId, roleId) != null) { + continue; + } + params.put("permissionId", permissionId); + rolePermissionDao.save(params); + } + } else { + log.debug("删除权限角色,roleId: {}", roleId); + params.put("permissionIds", rolePermissionVO.getPermissionIdArray()); + rolePermissionDao.delete(params); + } + } + + @Override + public RolePermissionDTO getByPermissionIdAndRole(String permissionId, String roleId) { + PermissionDTO permissionDTO = permissionService.get(permissionId); + if (permissionDTO == null) { + return null; + } + Map params = getHashMap(2); + params.put("permissionId", permissionId); + params.put("roleId", roleId); + RolePermissionDTO rolePermissionDTO = rolePermissionDao.get(params); + if (rolePermissionDTO == null) { + return null; + } + rolePermissionDTO.setPermissionTitle(permissionDTO.getPermissionTitle()); + rolePermissionDTO.setPermissionType(permissionDTO.getPermissionType()); + rolePermissionDTO.setPermissionUrl(permissionDTO.getPermissionUrl()); + rolePermissionDTO.setPermissionClientId(permissionDTO.getPermissionClientId()); + rolePermissionDTO.setPermissionClientName(permissionDTO.getPermissionClientName()); + rolePermissionDTO.setIsPublic(permissionDTO.getIsPublic()); + return rolePermissionDTO; + } + +} diff --git a/service-role/src/main/java/ink/wgink/service/role/service/impl/RoleServiceImpl.java b/service-role/src/main/java/ink/wgink/service/role/service/impl/RoleServiceImpl.java new file mode 100644 index 00000000..35a40184 --- /dev/null +++ b/service-role/src/main/java/ink/wgink/service/role/service/impl/RoleServiceImpl.java @@ -0,0 +1,477 @@ +package ink.wgink.service.role.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import ink.wgink.common.base.DefaultBaseService; +import ink.wgink.common.enums.RoleDataAuthorityEnum; +import ink.wgink.exceptions.RemoveException; +import ink.wgink.exceptions.SaveException; +import ink.wgink.exceptions.SearchException; +import ink.wgink.exceptions.UpdateException; +import ink.wgink.pojo.ListPage; +import ink.wgink.pojo.bos.*; +import ink.wgink.pojo.dtos.ZTreeDTO; +import ink.wgink.pojo.dtos.department.DepartmentUserDTO; +import ink.wgink.pojo.dtos.role.RoleDTO; +import ink.wgink.pojo.dtos.role.RoleDataAuthorityDTO; +import ink.wgink.pojo.dtos.role.RoleDataAuthorityTypeDTO; +import ink.wgink.pojo.result.SuccessResult; +import ink.wgink.pojo.result.SuccessResultList; +import ink.wgink.service.role.dao.IRoleDao; +import ink.wgink.service.role.pojo.vos.RoleDataAuthorityVO; +import ink.wgink.service.role.pojo.vos.RoleUserAuthorityVO; +import ink.wgink.service.role.service.IRoleService; +import ink.wgink.service.user.service.IUserService; +import ink.wgink.util.UUIDUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: RoleServiceImpl + * @Description: 角色 + * @Author: WangGeng + * @Date: 2021/1/31 18:51 + * @Version: 1.0 + **/ +@Slf4j +@Service +public class RoleServiceImpl extends DefaultBaseService implements IRoleService { + + @Autowired + private IRoleDao roleDao; + @Autowired + private IUserService userService; + @Autowired + private IPermissionService permissionService; + + @Override + public SuccessResult saveRole(Map params) throws SaveException, SearchException { + String parentCode = null; + String roleParentId = params.get("roleParentId").toString(); + if (!"0".equals(roleParentId)) { + params.put("roleId", roleParentId); + RoleDTO roleDTO = roleDao.getRole(params); + parentCode = roleDTO.getRoleCode(); + } + String roleCode = getCode(parentCode, roleParentId); + params.put("roleCode", roleCode); + params.put("roleId", UUIDUtil.getUUID()); + setSaveInfo(params); + roleDao.saveRole(params); + return new SuccessResult(); + } + + @Override + public SuccessResult removeRole(Map params) throws RemoveException { + params.put("roleIds", Arrays.asList(params.get("roleIds").toString().split("_"))); + setUpdateInfo(params); + roleDao.removeRole(params); + return new SuccessResult(); + } + + @Override + public SuccessResult updateRole(Map params) throws UpdateException { + setUpdateInfo(params); + roleDao.updateRole(params); + return new SuccessResult(); + } + + @Override + public List listRolesAllJson(Map params) throws SearchException { + return listRolesAll(params); + } + + @Override + public RoleDTO getRole(Map params) throws SearchException { + return roleDao.getRole(params); + } + + @Override + public List listRolesAll(Map params) throws SearchException { + List roleDTOs = roleDao.listRole(params); + listSubRoles(roleDTOs, params); + return roleDTOs; + } + + @Override + public List listZTreeRole(Map params) throws SearchException { + List zTreeDTOs = roleDao.listZTreeRoles(params); + for (ZTreeDTO zTreeDTO : zTreeDTOs) { + Integer subCount = roleDao.countByParentId(zTreeDTO.getId()); + setZTreeInfo(zTreeDTO, subCount); + } + return zTreeDTOs; + } + + @Override + public SuccessResultList> listPageRole(ListPage page) throws SearchException { + PageHelper.startPage(page.getPage(), page.getRows()); + List roleDTOs = roleDao.listRole(page.getParams()); + PageInfo pageInfo = new PageInfo<>(roleDTOs); + return new SuccessResultList<>(roleDTOs, pageInfo.getPageNum(), pageInfo.getTotal()); + } + + @Override + public SuccessResult authorization(Map params) throws UpdateException, RemoveException, SaveException { + List menuIds = new ArrayList<>(); + if (!StringUtils.isBlank(params.get("menuIds") == null ? null : params.get("menuIds").toString())) { + menuIds.addAll(Arrays.asList(params.get("menuIds").toString().trim().split("_"))); + } + String type = params.get("type").toString(); + if (IRoleService.AUTH_TYPE_INSERT.equals(type)) { + params.put(IRoleService.ROLE_TYPE, IRoleService.ROLE_INSERT); + } else if (IRoleService.AUTH_TYPE_DELETE.equals(type)) { + params.put(IRoleService.ROLE_TYPE, IRoleService.ROLE_DELETE); + } else if (IRoleService.AUTH_TYPE_UPDATE.equals(type)) { + params.put(IRoleService.ROLE_TYPE, IRoleService.ROLE_UPDATE); + } else if (IRoleService.AUTH_TYPE_QUERY.equals(type)) { + params.put(IRoleService.ROLE_TYPE, IRoleService.ROLE_QUERY); + } else { + params.put(IRoleService.ROLE_TYPE, IRoleService.ROLE_MENU); + } + log.debug("删除原有角色和菜单信息"); + roleDao.removeRoleMenuInfo(params); + log.debug("新增角色菜单信息"); + for (String menuId : menuIds) { + params.put("menuId", menuId); + roleDao.saveRoleMenuInfo(params); + } + return new SuccessResult(); + } + + @Override + public List listRoleBOByUser(Map params) throws SearchException { + return roleDao.listRoleBOByUser(params); + } + + @Override + public List listRoleBOByGroup(Map params) throws SearchException { + return roleDao.listRoleBOByGroup(params); + } + + @Override + public List listRoleMenuDetail(Map params) throws SearchException { + return roleDao.listRoleMenuDetail(params); + } + + @Override + public RoleBO getRoleBOByRoleId(String roleId) throws SearchException { + Map params = new HashMap<>(0); + params.put("roleId", roleId); + List roleMenuBOs = listRoleMenuDetail(params); + + List apiSaveMenu = new ArrayList<>(0); + List apiDeleteMenu = new ArrayList<>(0); + List apiUpdateMenu = new ArrayList<>(0); + List apiQueryMenu = new ArrayList<>(0); + + List resourceSaveMenu = new ArrayList<>(0); + List resourceDeleteMenu = new ArrayList<>(0); + List resourceUpdateMenu = new ArrayList<>(0); + List resourceQueryMenu = new ArrayList<>(0); + + List routeSaveMenu = new ArrayList<>(0); + List routeUpdateMenu = new ArrayList<>(0); + List routeQueryMenu = new ArrayList<>(0); + + List permissionInsert = new ArrayList<>(0); + List permissionDelete = new ArrayList<>(0); + List permissionUpdate = new ArrayList<>(0); + List permissionQuery = new ArrayList<>(0); + + log.debug("角色菜单权限"); + for (RoleMenuBO roleMenuBO : roleMenuBOs) { + roleMenuBO.setApiPrefix(roleMenuBO.getApiPrefix()); + roleMenuBO.setResourcePrefix(roleMenuBO.getResourcePrefix()); + roleMenuBO.setRoutePrefix(roleMenuBO.getRoutePrefix()); + if (IRoleService.ROLE_INSERT.equals(roleMenuBO.getRoleType())) { + apiSaveMenu.add(roleMenuBO); + resourceSaveMenu.add(roleMenuBO); + routeSaveMenu.add(roleMenuBO); + } else if (IRoleService.ROLE_DELETE.equals(roleMenuBO.getRoleType())) { + apiDeleteMenu.add(roleMenuBO); + resourceDeleteMenu.add(roleMenuBO); + } else if (IRoleService.ROLE_UPDATE.equals(roleMenuBO.getRoleType())) { + apiUpdateMenu.add(roleMenuBO); + resourceUpdateMenu.add(roleMenuBO); + routeUpdateMenu.add(roleMenuBO); + } else if (IRoleService.ROLE_QUERY.equals(roleMenuBO.getRoleType())) { + apiQueryMenu.add(roleMenuBO); + resourceQueryMenu.add(roleMenuBO); + routeQueryMenu.add(roleMenuBO); + } + } + log.debug("角色接口权限"); + setApiPermission(roleId, permissionInsert, permissionDelete, permissionUpdate, permissionQuery); + RoleBO roleBO = new RoleBO(); + roleBO.setRoleId(roleId); + roleBO.setApiSaveMenu(apiSaveMenu); + roleBO.setApiDeleteMenu(apiDeleteMenu); + roleBO.setApiUpdateMenu(apiUpdateMenu); + roleBO.setApiQueryMenu(apiQueryMenu); + roleBO.setResourceSaveMenu(resourceSaveMenu); + roleBO.setResourceDeleteMenu(resourceDeleteMenu); + roleBO.setResourceUpdateMenu(resourceUpdateMenu); + roleBO.setResourceQueryMenu(resourceQueryMenu); + roleBO.setRouteSaveMenu(routeSaveMenu); + roleBO.setRouteUpdateMenu(routeUpdateMenu); + roleBO.setRouteQueryMenu(routeQueryMenu); + roleBO.setPermissionInsert(permissionInsert); + roleBO.setPermissionDelete(permissionDelete); + roleBO.setPermissionUpdate(permissionUpdate); + roleBO.setPermissionQuery(permissionQuery); + return roleBO; + } + + /** + * 设置API权限 + * + * @param roleId + * @param permissionInsert + * @param permissionDelete + * @param permissionUpdate + * @param permissionQuery + */ + private void setApiPermission(String roleId, + List permissionInsert, + List permissionDelete, + List permissionUpdate, + List permissionQuery) { + List permissionRoleDTOs = permissionService.listPermissionByRoleId(roleId); + for (PermissionRoleDTO permissionRoleDTO : permissionRoleDTOs) { + if (StringUtils.equals(PermissionTypeEnum.PERMISSION_INSERT.getValue(), permissionRoleDTO.getPermissionType())) { + PermissionBO permissionBO = new PermissionBO(); + permissionBO.setPermissionType(permissionRoleDTO.getPermissionType()); + permissionBO.setPermissionUrl(permissionRoleDTO.getPermissionUrl()); + permissionInsert.add(permissionBO); + } else if (StringUtils.equals(PermissionTypeEnum.PERMISSION_DELETE.getValue(), permissionRoleDTO.getPermissionType())) { + PermissionBO permissionBO = new PermissionBO(); + permissionBO.setPermissionType(permissionRoleDTO.getPermissionType()); + permissionBO.setPermissionUrl(permissionRoleDTO.getPermissionUrl()); + permissionDelete.add(permissionBO); + } else if (StringUtils.equals(PermissionTypeEnum.PERMISSION_UPDATE.getValue(), permissionRoleDTO.getPermissionType())) { + PermissionBO permissionBO = new PermissionBO(); + permissionBO.setPermissionType(permissionRoleDTO.getPermissionType()); + permissionBO.setPermissionUrl(permissionRoleDTO.getPermissionUrl()); + permissionUpdate.add(permissionBO); + } else if (StringUtils.equals(PermissionTypeEnum.PERMISSION_QUERY.getValue(), permissionRoleDTO.getPermissionType())) { + PermissionBO permissionBO = new PermissionBO(); + permissionBO.setPermissionType(permissionRoleDTO.getPermissionType()); + permissionBO.setPermissionUrl(permissionRoleDTO.getPermissionUrl()); + permissionQuery.add(permissionBO); + } + } + } + + @Override + public List listRoleBO(String roleIds) throws SearchException { + String[] roleIdArray = roleIds.split("_"); + List roleBOs = new ArrayList<>(); + for (String roleId : roleIdArray) { + RoleBO roleBO = getRoleBOByRoleId(roleId); + roleBOs.add(roleBO); + } + return roleBOs; + } + + @Override + public SuccessResult updateRoleDataAuthority(String roleId, RoleDataAuthorityVO roleDataAuthorityVO) throws SaveException, RemoveException { + log.debug("更新角色数据权限"); + Map params = getHashMap(2); + params.put("roleId", roleId); + params.put("roleDataAuthority", roleDataAuthorityVO.getDataAuthorityType()); + roleDao.updateRole(params); + if (StringUtils.equals(roleDataAuthorityVO.getDataAuthorityType(), RoleDataAuthorityEnum.CUSTOM.getDataAuthorityType())) { + params.remove("roleDataAuthority"); + log.debug("删除原有的自定义权限列表"); + roleDao.deleteRoleDataAuthority(params); + log.debug("更新自定义权限列表"); + for (RoleUserAuthorityVO roleUserAuthorityVO : roleDataAuthorityVO.getRoleUserAuthorityList()) { + params.put("departmentId", roleUserAuthorityVO.getDepartmentId()); + params.put("userId", roleUserAuthorityVO.getUserId()); + roleDao.saveRoleDataAuthority(params); + } + } + return new SuccessResult(); + } + + @Override + public void setRoleMenu(RoleBO roleBO) throws SearchException { + RoleBO role = getRoleBOByRoleId(roleBO.getRoleId()); + roleBO.setApiSaveMenu(role.getApiSaveMenu()); + roleBO.setApiDeleteMenu(role.getApiDeleteMenu()); + roleBO.setApiUpdateMenu(role.getApiUpdateMenu()); + roleBO.setApiQueryMenu(role.getApiQueryMenu()); + roleBO.setResourceSaveMenu(role.getResourceSaveMenu()); + roleBO.setResourceDeleteMenu(role.getResourceDeleteMenu()); + roleBO.setResourceUpdateMenu(role.getResourceUpdateMenu()); + roleBO.setResourceQueryMenu(role.getResourceQueryMenu()); + roleBO.setRouteSaveMenu(role.getRouteSaveMenu()); + roleBO.setRouteUpdateMenu(role.getRouteUpdateMenu()); + roleBO.setRouteQueryMenu(role.getRouteQueryMenu()); + roleBO.setPermissionInsert(role.getPermissionInsert()); + roleBO.setPermissionDelete(role.getPermissionDelete()); + roleBO.setPermissionUpdate(role.getPermissionUpdate()); + roleBO.setPermissionQuery(role.getPermissionQuery()); + } + + @Override + public void setRoleMenus(List roleBOs) throws SearchException { + for (RoleBO roleBO : roleBOs) { + setRoleMenu(roleBO); + } + } + + @Override + public RoleDataAuthorityTypeDTO getRoleDataAuthorityType(String roleId) throws SearchException { + Map params = getHashMap(1); + params.put("roleId", roleId); + RoleDTO roleDTO = roleDao.getRole(params); + StringBuilder roleDataAuthority = new StringBuilder(); + if (StringUtils.equals(roleDTO.getRoleDataAuthority(), RoleDataAuthorityEnum.CUSTOM.getDataAuthorityType())) { + List roleDataAuthorityDTOs = roleDao.listRoleDataAuthority(params); + for (RoleDataAuthorityDTO roleDataAuthorityDTO : roleDataAuthorityDTOs) { + if (roleDataAuthority.length() > 0) { + roleDataAuthority.append("_"); + } + roleDataAuthority.append(roleDataAuthorityDTO.getUserId()); + } + } + RoleDataAuthorityTypeDTO roleDataAuthorityTypeDTO = new RoleDataAuthorityTypeDTO(); + roleDataAuthorityTypeDTO.setRoleDataAuthorityType(roleDTO.getRoleDataAuthority()); + roleDataAuthorityTypeDTO.setRoleDataAuthority(roleDataAuthority.toString()); + return roleDataAuthorityTypeDTO; + } + + @Override + public List listRoleDataAuthorityByRoleIdList(List roleIds) throws SearchException { + Map params = getHashMap(1); + params.put("roleIds", roleIds); + return roleDao.listRoleDataAuthority(params); + } + + @Override + public List listDataAuthorityUserIdByRole(List roleBOs) { + List userIds = new ArrayList<>(); + List roleIds = new ArrayList<>(); + for (RoleBO roleBO : roleBOs) { + roleIds.add(roleBO.getRoleId()); + } + List roleDataAuthorityDTOs = listRoleDataAuthorityByRoleIdList(roleIds); + for (RoleDataAuthorityDTO roleDataAuthorityDTO : roleDataAuthorityDTOs) { + userIds.add(roleDataAuthorityDTO.getUserId()); + } + return userIds; + } + + @Override + public List listDataAuthorityUserIdByDepartment(List departmentBOs) { + List userIds = new ArrayList<>(); + if (departmentBOs.isEmpty()) { + return userIds; + } + List departmentIds = new ArrayList<>(); + for (DepartmentBO departmentBO : departmentBOs) { + departmentIds.add(departmentBO.getDepartmentId()); + } + Map params = new HashMap<>(1); + params.put("departmentIds", departmentIds); + List departmentUserDTOs = userService.listDepartmentUsers(params); + for (DepartmentUserDTO departmentUserDTO : departmentUserDTOs) { + userIds.add(departmentUserDTO.getUserId()); + } + return userIds; + } + + @Override + public String getRoleDataAuthority(List roleBOs) { + String roleDataAuthority = RoleDataAuthorityEnum.SELF.getDataAuthorityType(); + for (RoleBO roleBO : roleBOs) { + if (StringUtils.equals(RoleDataAuthorityEnum.ALL.getDataAuthorityType(), roleBO.getRoleDataAuthority())) { + roleDataAuthority = RoleDataAuthorityEnum.ALL.getDataAuthorityType(); + break; + } + if (StringUtils.equals(RoleDataAuthorityEnum.DEPARTMENT.getDataAuthorityType(), roleBO.getRoleDataAuthority())) { + roleDataAuthority = RoleDataAuthorityEnum.DEPARTMENT.getDataAuthorityType(); + break; + } + if (StringUtils.equals(RoleDataAuthorityEnum.CUSTOM.getDataAuthorityType(), roleBO.getRoleDataAuthority())) { + roleDataAuthority = RoleDataAuthorityEnum.CUSTOM.getDataAuthorityType(); + break; + } + } + return roleDataAuthority; + } + + @Override + public void setGroupRoles(List groupRoles, List roleBOs) { + Map params = getHashMap(1); + groupRoles.forEach(groupBO -> { + params.put("groupId", groupBO.getGroupId()); + roleBOs.addAll(listRoleBOByGroup(params)); + }); + } + + @Override + public void removalDuplicateRole(List roleBOs) { + for (int i = 0; i < roleBOs.size(); i++) { + RoleBO roleBO = roleBOs.get(i); + boolean isExist = false; + for (int j = i + 1; j < roleBOs.size(); j++) { + if (StringUtils.equals(roleBO.getRoleId(), roleBOs.get(j).getRoleId())) { + isExist = true; + break; + } + } + if (isExist) { + roleBOs.remove(i); + i--; + break; + } + } + } + + @Override + public Integer countRole(Map params) throws SearchException { + Integer roleCount = roleDao.countRole(params); + return roleCount == null ? 0 : roleCount; + } + + /** + * 递归查询子角色 + * + * @param roleDTOs + * @param params + * @throws SearchException + */ + private void listSubRoles(List roleDTOs, Map params) throws SearchException { + for (RoleDTO roleDTO : roleDTOs) { + params.put("roleParentId", roleDTO.getRoleId()); + List subRoleDTOs = roleDao.listRole(params); + roleDTO.setSubRoles(subRoleDTOs); + listSubRoles(subRoleDTOs, params); + } + } + + /** + * 获取code + * + * @param parentCode + * @param parentId + * @return + * @throws SearchException + */ + private String getCode(String parentCode, String parentId) throws SearchException { + RoleDTO roleDTO = roleDao.getLastByParentId(parentId); + String code = roleDTO != null ? roleDTO.getRoleCode() : "0000"; + return super.getNewCode(code, parentCode); + } + +} diff --git a/service-role/src/main/resources/mybatis/mapper/role-permission-mapper.xml b/service-role/src/main/resources/mybatis/mapper/role-permission-mapper.xml new file mode 100644 index 00000000..999c4ac5 --- /dev/null +++ b/service-role/src/main/resources/mybatis/mapper/role-permission-mapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + INSERT INTO sys_permission_role( + permission_id, + role_id + ) VALUES( + #{permissionId}, + #{roleId} + ) + + + + + DELETE FROM + sys_permission_role + WHERE + role_id = #{roleId} + AND + permission_id IN + + #{permissionIds[${index}]} + + + + + + + \ No newline at end of file