Prechádzať zdrojové kódy

添加角色管理相关功能

songxinlu 3 rokov pred
rodič
commit
3640805816
42 zmenil súbory, kde vykonal 1153 pridanie a 717 odobranie
  1. 1 8
      common/src/main/java/com/lantone/common/dto/DataAuthDetailDTO.java
  2. 39 0
      common/src/main/java/com/lantone/common/dto/GetRoleDTO.java
  3. 31 0
      common/src/main/java/com/lantone/common/dto/GetRolePageDTO.java
  4. 23 0
      common/src/main/java/com/lantone/common/dto/GetSoftwareMenuDTO.java
  5. 17 0
      common/src/main/java/com/lantone/common/dto/SoftwareDTO.java
  6. 31 0
      common/src/main/java/com/lantone/common/dto/SoftwareMenuRelationDTO.java
  7. 38 0
      common/src/main/java/com/lantone/common/dto/UserMenuResourceTreeDTO.java
  8. 24 0
      common/src/main/java/com/lantone/common/dto/UserPermissionDTO.java
  9. 19 0
      common/src/main/java/com/lantone/common/vo/AddAuthRoleVO.java
  10. 2 9
      common/src/main/java/com/lantone/common/vo/SysSoftwareVO.java
  11. 4 1
      common/src/main/java/com/lantone/common/vo/AddAuthVO.java
  12. 4 11
      common/src/main/java/com/lantone/common/vo/AddDataAuthVO.java
  13. 1 0
      common/src/main/java/com/lantone/common/vo/AddMenuVO.java
  14. 32 0
      common/src/main/java/com/lantone/common/vo/AddRoleSoftwareVO.java
  15. 41 0
      common/src/main/java/com/lantone/common/vo/AddRoleVO.java
  16. 0 55
      common/src/main/java/com/lantone/common/vo/DeptVO.java
  17. 0 64
      common/src/main/java/com/lantone/common/vo/DoctorVO.java
  18. 36 0
      common/src/main/java/com/lantone/common/vo/GetRolePageVO.java
  19. 0 66
      common/src/main/java/com/lantone/common/vo/HospitalVO.java
  20. 0 82
      common/src/main/java/com/lantone/common/vo/MenuVO.java
  21. 0 52
      common/src/main/java/com/lantone/common/vo/RoleVO.java
  22. 4 1
      common/src/main/java/com/lantone/common/vo/UpdateAuthVO.java
  23. 1 12
      common/src/main/java/com/lantone/common/vo/UpdateDataAuthVO.java
  24. 37 0
      common/src/main/java/com/lantone/common/vo/UpdateRoleVO.java
  25. 0 1
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/MenuMapper.java
  26. 4 6
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/RoleMapper.java
  27. 5 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/RoleSoftwareMenuMapper.java
  28. 5 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/SoftwareMapper.java
  29. 1 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/SoftwareMenuMapper.java
  30. 1 1
      dblayer-mbg/src/main/resources/mapper/MenuMapper.xml
  31. 7 7
      dblayer-mbg/src/main/resources/mapper/RoleMapper.xml
  32. 198 0
      dblayer-mbg/src/main/resources/mapper/RoleSoftwareMenuMapper.xml
  33. 22 1
      dblayer-mbg/src/main/resources/mapper/SoftwareMapper.xml
  34. 1 0
      dblayer-mbg/src/main/resources/mapper/SoftwareMenuMapper.xml
  35. 20 13
      gateway-service/src/main/resources/bootstrap.yml
  36. 42 0
      security-center/src/main/java/com/lantone/security/enums/RelationEnum.java
  37. 5 5
      security-center/src/main/java/com/lantone/security/facade/DataAuthManagementFacade.java
  38. 129 102
      security-center/src/main/java/com/lantone/security/facade/FuncManagementFacade.java
  39. 266 158
      security-center/src/main/java/com/lantone/security/facade/RoleManagementFacade.java
  40. 9 7
      security-center/src/main/java/com/lantone/security/web/DataAuthManagementController.java
  41. 8 9
      security-center/src/main/java/com/lantone/security/web/FuncManagementController.java
  42. 45 46
      security-center/src/main/java/com/lantone/security/web/RoleManagementController.java

+ 1 - 8
common/src/main/java/com/lantone/common/dto/DataAuthDetailDTO.java

@@ -5,7 +5,6 @@ import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
-import java.util.List;
 
 /**
  * @ClassName: DataAuthDetailDTO
@@ -42,12 +41,6 @@ public class DataAuthDetailDTO implements Serializable {
     @ApiModelProperty(value = "是否删除,N:未删除,Y:删除")
     private String isDeleted;
 
-    /**
-     * 可看组织
-     */
-
+    @ApiModelProperty(value = "可看组织")
     private HospitalDTO hospitalDTOS;
-    /**
-     * 可看医生列表
-     */
 }

+ 39 - 0
common/src/main/java/com/lantone/common/dto/GetRoleDTO.java

@@ -0,0 +1,39 @@
+package com.lantone.common.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import sun.util.resources.ga.LocaleNames_ga;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 角色输出对象
+ */
+@Data
+public class GetRoleDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "编号")
+    private Long id;
+
+    @ApiModelProperty(value = "角色名称")
+    private String name;
+
+    @ApiModelProperty(value = "角色描述")
+    private String remark;
+
+    @ApiModelProperty(value = "状态 0:禁用,1:启用")
+    private String status;
+
+
+    @ApiModelProperty(value = "排序")
+    private String orderNo;
+
+    @ApiModelProperty(value = "登录用户的系统列表")
+    private List<SoftwareDTO> loginSoftwares;
+
+    @ApiModelProperty(value = "当前登录对象系统服务菜单功能权限树")
+    private Map<Long,List<UserMenuResourceTreeDTO>> loginUserMenuResourceTree;
+}

+ 31 - 0
common/src/main/java/com/lantone/common/dto/GetRolePageDTO.java

@@ -0,0 +1,31 @@
+package com.lantone.common.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: 角色输出对象
+ * @Author songxl
+ * @Date 2021/7/22
+ */
+@Data
+public class GetRolePageDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "编号")
+    private Long id;
+
+    @ApiModelProperty(value = "角色名称")
+    private String name;
+
+    @ApiModelProperty(value = "角色描述")
+    private String remark;
+
+    @ApiModelProperty(value = "状态 0:禁用,1:启用")
+    private String status;
+
+}

+ 23 - 0
common/src/main/java/com/lantone/common/dto/GetSoftwareMenuDTO.java

@@ -0,0 +1,23 @@
+package com.lantone.common.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 系统服务菜单返回对象
+ */
+@Data
+public class GetSoftwareMenuDTO {
+    @ApiModelProperty(value = "编号")
+    private Long softwareId;
+
+    @ApiModelProperty(value = "服务名称")
+    private String softwareName;
+    @ApiModelProperty(value = "已关联或未关联")
+    private String softwareRelation;
+
+    @ApiModelProperty(value = "服务菜单列表")
+    private List<SoftwareMenuRelationDTO> menus;
+}

+ 17 - 0
common/src/main/java/com/lantone/common/dto/SoftwareDTO.java

@@ -0,0 +1,17 @@
+package com.lantone.common.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 系统服务返回对象
+ */
+@Data
+public class SoftwareDTO {
+    @ApiModelProperty(value = "编号")
+    private Long id;
+    @ApiModelProperty(value = "服务名称")
+    private String name;
+    @ApiModelProperty(value = "是否关联")
+    private String relation ;
+}

+ 31 - 0
common/src/main/java/com/lantone/common/dto/SoftwareMenuRelationDTO.java

@@ -0,0 +1,31 @@
+package com.lantone.common.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 系统服务菜单关联关系对象
+ */
+@Data
+public class SoftwareMenuRelationDTO {
+    @ApiModelProperty(value = "编号")
+    private Long softwareId;
+
+    @ApiModelProperty(value = "服务名称")
+    private String softwareName;
+
+    @ApiModelProperty(value = "编号")
+    private Long menuId;
+    @ApiModelProperty(value = "父级编号")
+    private Long parentId;
+
+    @ApiModelProperty(value = "功能名称")
+    private String menuName;
+
+    @ApiModelProperty(value = "菜单已关联或未关联")
+    private String menuRelation;
+    @ApiModelProperty(value = "子系统服务菜单关联关系对象")
+    private  List<SoftwareMenuRelationDTO> sonMenu;
+}

+ 38 - 0
common/src/main/java/com/lantone/common/dto/UserMenuResourceTreeDTO.java

@@ -0,0 +1,38 @@
+package com.lantone.common.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * <p>
+ * 菜单功能DTO
+ * </p>
+ */
+@Data
+public class UserMenuResourceTreeDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "系统编号编号")
+    private Long softwareId;
+    @ApiModelProperty(value = "菜单编号")
+    private Long menuId;
+    @ApiModelProperty(value = "父级菜单编号")
+    private Long parentId;
+    @ApiModelProperty(value = "系统菜单编号")
+    private Long softwareMenuId;
+    @ApiModelProperty(value = "系统功能权限编号")
+    private Long softwareResourceId;
+
+    @ApiModelProperty(value = "菜单名称")
+    private String menuName;
+
+    @ApiModelProperty(value = "是否关联")
+    private String relation ;
+
+    @ApiModelProperty(value = "子集")
+    private List<UserMenuResourceTreeDTO> sonMenuResource;
+}

+ 24 - 0
common/src/main/java/com/lantone/common/dto/UserPermissionDTO.java

@@ -0,0 +1,24 @@
+package com.lantone.common.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 菜单功能DTO
+ * </p>
+ */
+@Data
+public class UserPermissionDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "编号")
+    private Long id;
+
+    @ApiModelProperty(value = "资源权限")
+    private String permission;
+
+}

+ 19 - 0
common/src/main/java/com/lantone/common/vo/AddAuthRoleVO.java

@@ -0,0 +1,19 @@
+package com.lantone.common.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Data
+public class AddAuthRoleVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "角色名称" ,required = true)
+    @NotNull(message = "角色名称不能为空")
+    private Long id;
+
+    @ApiModelProperty(value = "角色名称" ,required = true)
+    private String name;
+}

+ 2 - 9
common/src/main/java/com/lantone/common/vo/SysSoftwareVO.java

@@ -6,18 +6,13 @@ import lombok.Data;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
-import java.util.Date;
 import java.util.List;
 
 /**
- * @ClassName: SysServiceVO
- * @Description: 系统服务对象
- * @Author songxl
- * @Date 2021/7/21
- * @Version 1.0
+ * 系统服务对象
  */
 @Data
-public class SysSoftwareVO implements Serializable {
+public class AddAuthSoftwareVO implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "编号",required = true)
@@ -30,6 +25,4 @@ public class SysSoftwareVO implements Serializable {
     @ApiModelProperty(value = "数据权限详情列表",required = true)
     @NotEmpty(message = "数据权限详情列表为空")
     private List<DataAuthDetailVO> dataAuthDetailVOS;
-    @ApiModelProperty(value = "功能菜单列表")
-    private List<MenuVO> menus;
 }

+ 4 - 1
common/src/main/java/com/lantone/common/vo/AddAuthVO.java

@@ -3,6 +3,7 @@ package com.lantone.common.vo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.Valid;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import java.util.List;
@@ -17,10 +18,12 @@ import java.util.List;
 @Data
 public class AddAuthVO {
     @ApiModelProperty(value = "数据权限对象", required = true)
+    @Valid
     @NotNull(message = "数据权限对象为空")
     private AddDataAuthVO addDataAuthVO;
 
     @ApiModelProperty(value = "角色列表", required = true)
+    @Valid
     @NotEmpty(message = "角色列表为空")
-    private List<RoleVO> roles;
+    private List<AddAuthRoleVO> roles;
 }

+ 4 - 11
common/src/main/java/com/lantone/common/vo/AddDataAuthVO.java

@@ -3,9 +3,9 @@ package com.lantone.common.vo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.Valid;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.List;
@@ -23,6 +23,7 @@ public class AddDataAuthVO implements Serializable {
 
 
     @ApiModelProperty(value = "数据权限名称", required = true)
+    @Valid
     @NotBlank(message = ("数据权限名称为空"))
     private String name;
 
@@ -30,20 +31,12 @@ public class AddDataAuthVO implements Serializable {
     @NotBlank(message = ("数据权限状态为空"))
     private String status;
 
-    @ApiModelProperty(value = "排序")
-    private String orderNo;
 
-    @ApiModelProperty(value = "医院ID")
-    private String hospitalId;
-
-    @ApiModelProperty(value = "创建用户编号")
-    private Long creator;
-
-    @ApiModelProperty(value = "创建时间")
+    @ApiModelProperty(value = "创建时间",hidden = true)
     private Date createTime;
 
     @ApiModelProperty(value = "系统列表", required = true)
     @NotEmpty(message = "系统列表为空")
-    private List<SysSoftwareVO> softwareVOS;
+    private List<AddAuthSoftwareVO> softwareVOS;
 
 }

+ 1 - 0
common/src/main/java/com/lantone/common/vo/AddMenuVO.java

@@ -31,6 +31,7 @@ public class AddMenuVO implements Serializable {
     private List<Long> softwares;
 
     @ApiModelProperty(value = "功能名称",required = true)
+    @NotBlank(message = "功能名称为空")
     private String name;
 
     @ApiModelProperty(value = "权限标识")

+ 32 - 0
common/src/main/java/com/lantone/common/vo/AddRoleSoftwareVO.java

@@ -0,0 +1,32 @@
+package com.lantone.common.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 系统服务对象
+ */
+@Data
+public class AddRoleSoftwareVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "编号",required = true)
+    @NotNull(message = "系统服务编号为空")
+    private Long id;
+
+    @ApiModelProperty(value = "服务名称")
+    private String name;
+
+    @ApiModelProperty(value = "系统菜单列表")
+    @NotEmpty(message = "系统菜单列表")
+    private List<Long> softwareMenuIds;
+
+    @ApiModelProperty(value = "系统功能权限列表")
+    @NotEmpty(message = "系统功能权限列表")
+    private List<Long> softwareResourceIds;
+}

+ 41 - 0
common/src/main/java/com/lantone/common/vo/AddRoleVO.java

@@ -0,0 +1,41 @@
+package com.lantone.common.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class AddRoleVO  implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "角色名称" ,required = true)
+    @NotBlank(message = "角色名称不能为空")
+    private String name;
+
+    @ApiModelProperty(value = "角色描述")
+    private String remark;
+
+    @ApiModelProperty(value = "状态 0:禁用,1:启用",required = true)
+    @NotBlank(message = "启用禁用状态不能为空")
+    private String status;
+
+    @ApiModelProperty(value = "排序")
+    private String orderNo;
+
+    @ApiModelProperty(value = "医院id",hidden = true)
+    private Long hospitalId;
+
+    @ApiModelProperty(value = "创建用户id",hidden = true)
+    private String creator;
+
+    @ApiModelProperty(value = "创建时间",hidden = true)
+    private Date createTime;
+
+
+    @ApiModelProperty(value = "系统服务对象")
+    private List<AddRoleSoftwareVO> softwares;
+}

+ 0 - 55
common/src/main/java/com/lantone/common/vo/DeptVO.java

@@ -1,55 +0,0 @@
-package com.lantone.common.vo;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * @ClassName: DeptVO
- * @Description: 科室返回对象
- * @Author songxl
- * @Date 2021/7/27
- * @Version 1.0
- */
-@Data
-public class DeptVO implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private Long id;
-
-    @ApiModelProperty(value = "医院ID")
-    private Long hospitalId;
-
-    @ApiModelProperty(value = "医院科室编码")
-    private String code;
-
-    @ApiModelProperty(value = "科室名称")
-    private String name;
-
-    @ApiModelProperty(value = "类别")
-    private String type;
-
-    @ApiModelProperty(value = "首字母拼音")
-    private String spell;
-
-    @ApiModelProperty(value = "区域类别")
-    private String station;
-
-    @ApiModelProperty(value = "排序")
-    private String orderNo;
-
-    @ApiModelProperty(value = "创建用户编号")
-    private Long creator;
-
-    @ApiModelProperty(value = "创建时间")
-    private Date createTime;
-
-    @ApiModelProperty(value = "是否删除,N:未删除,Y:删除")
-    private String isDeleted;
-    /**
-     * 关联标志位 true 关联
-     */
-    private boolean relationStatus;
-}

+ 0 - 64
common/src/main/java/com/lantone/common/vo/DoctorVO.java

@@ -1,64 +0,0 @@
-package com.lantone.common.vo;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.List;
-
-/**
- * <p>
- * 医生表
- * </p>
- */
-@Data
-public class DoctorVO extends Page implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "编号")
-    private Long id;
-
-    @ApiModelProperty(value = "医生编码")
-    private String code;
-
-    @ApiModelProperty(value = "医生姓名")
-    private String name;
-
-    @ApiModelProperty(value = "手机号")
-    private String mobilePhone;
-
-    @ApiModelProperty(value = "职称")
-    private String professor;
-
-    @ApiModelProperty(value = "职业医师资格(0:无,1:有)")
-    private String occup;
-
-    @ApiModelProperty(value = "是否删除,N:未删除,Y:删除")
-    private String isDeleted;
-
-    @ApiModelProperty(value = "记录创建时间")
-    private Date gmtCreate;
-
-    @ApiModelProperty(value = "记录修改时间,如果时间是1970年则表示纪录未修改")
-    private Date gmtModified;
-
-    @ApiModelProperty(value = "创建人,0表示无创建人值")
-    private String creator;
-
-    @ApiModelProperty(value = "修改人,如果为0则表示纪录未修改")
-    private String modifier;
-
-    @ApiModelProperty(value = "备注")
-    private String remark;
-
-    @ApiModelProperty(value = "科室id集合")
-    private List<Long> depts;
-
-    @ApiModelProperty(value = "医院id集合")
-    private List<Long> hospitals;
-    @ApiModelProperty(value = "已关联,未关联")
-    private String relation;
-}

+ 36 - 0
common/src/main/java/com/lantone/common/vo/GetRolePageVO.java

@@ -0,0 +1,36 @@
+package com.lantone.common.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @ClassName: RoleVO
+ * @Description: 角色对象
+ * @Author songxl
+ * @Date 2021/7/22
+ * @Version 1.0
+ */
+@Data
+public class GetRolePageVO extends Page implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+
+    @ApiModelProperty(value = "角色名称")
+    private String name;
+
+    @ApiModelProperty(value = "状态 0:禁用,1:启用")
+    private String status;
+
+    @ApiModelProperty(value = "医院id",hidden = true)
+    private Long hospitalId;
+
+    @ApiModelProperty(value = "创建用户id",hidden = true)
+    private String creator;
+
+}

+ 0 - 66
common/src/main/java/com/lantone/common/vo/HospitalVO.java

@@ -1,66 +0,0 @@
-package com.lantone.common.vo;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.List;
-
-/**
- * @ClassName: HospitalVO
- * @Description: 用户组织对象
- * @Author songxl
- * @Date 2021/7/27
- * @Version 1.0
- */
-@Data
-public class HospitalVO implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "编号")
-    private Long id;
-
-    private Long parentId;
-
-    @ApiModelProperty(value = "医院编码")
-    private String orgCode;
-
-    @ApiModelProperty(value = "父级编码")
-    private String parentCode;
-
-    @ApiModelProperty(value = "名称")
-    private String name;
-
-    @ApiModelProperty(value = "归属区域")
-    private String region;
-
-    @ApiModelProperty(value = "组织类型(0:AI病案质控平台 1:集团医院 2:医共 3:医联 4:医院)")
-    private String type;
-
-    @ApiModelProperty(value = "排序")
-    private String orderNo;
-
-    @ApiModelProperty(value = "状态 0:禁用,1:启用")
-    private String status;
-
-    @ApiModelProperty(value = "创建者编号")
-    private Long creator;
-
-    @ApiModelProperty(value = "创建时间")
-    private Date createTime;
-
-    @ApiModelProperty(value = "是否删除,N:未删除,Y:删除")
-    private String isDeleted;
-
-
-    @ApiModelProperty(value = "用户在该组织下的角色列表")
-    private List<RoleVO> roles;
-    @ApiModelProperty(value = "该医院的科室列表")
-    private List<DeptVO> depts;
-
-    @ApiModelProperty(value = "该虚拟医院的医院列表")
-    private List<HospitalVO> hospitalDTOS;
-    @ApiModelProperty(value = "关联标志位 true 关联")
-    private boolean relationStatus;
-}

+ 0 - 82
common/src/main/java/com/lantone/common/vo/MenuVO.java

@@ -1,82 +0,0 @@
-package com.lantone.common.vo;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.List;
-
-/**
- * <p>
- * 菜单功能VO
- * </p>
- */
-@Data
-@ApiModel(value="MenuVO对象", description="菜单功能VO")
-public class MenuVO implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "编号")
-    private Long id;
-
-    @ApiModelProperty(value = "父级编号")
-    private Long parentId;
-    @ApiModelProperty(value = "服务编号")
-    private Long softwareId;
-
-    @ApiModelProperty(value = "服务id列表")
-    private List<Long> softwares;
-
-    @ApiModelProperty(value = "功能名称")
-    private String name;
-
-    @ApiModelProperty(value = "权限标识")
-    private List<String> permissions;
-
-    @ApiModelProperty(value = "类型:0:目录,1菜单,2按钮,3:超链接")
-    private String type;
-
-    @ApiModelProperty(value = "页面路由")
-    private String url;
-
-    @ApiModelProperty(value = "图标")
-    private String icon;
-
-    @ApiModelProperty(value = "排序")
-    private String orderNo;
-
-    @ApiModelProperty(value = "状态 0:禁用,1:启用")
-    private String status;
-
-    @ApiModelProperty(value = "描述")
-    private String menuDescribe;
-
-    @ApiModelProperty(value = "是否删除,N:未删除,Y:删除")
-    private String isDeleted;
-
-    @ApiModelProperty(value = "记录创建时间")
-    private Date gmtCreate;
-
-    @ApiModelProperty(value = "记录修改时间,如果时间是1970年则表示纪录未修改")
-    private Date gmtModified;
-
-    @ApiModelProperty(value = "创建人,0表示无创建人值")
-    private String creator;
-
-    @ApiModelProperty(value = "修改人,如果为0则表示纪录未修改")
-    private String modifier;
-
-    @ApiModelProperty(value = "备注")
-    private String remark;
-
-    @ApiModelProperty("操作码 1:新增;2:修改 ;3:删除;5:启用禁用")
-    private int  opeType;
-
-}

+ 0 - 52
common/src/main/java/com/lantone/common/vo/RoleVO.java

@@ -1,52 +0,0 @@
-package com.lantone.common.vo;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.List;
-
-/**
- * @ClassName: RoleVO
- * @Description: 角色对象
- * @Author songxl
- * @Date 2021/7/22
- * @Version 1.0
- */
-@Data
-public class RoleVO extends Page implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "编号")
-    private Long id;
-
-    @ApiModelProperty(value = "角色名称")
-    private String name;
-
-    @ApiModelProperty(value = "角色描述")
-    private String remark;
-
-    @ApiModelProperty(value = "状态 0:禁用,1:启用")
-    private String status;
-
-    @ApiModelProperty(value = "医院id")
-    private Long hospitalId;
-
-    @ApiModelProperty(value = "创建用户id")
-    private String creator;
-
-    @ApiModelProperty(value = "创建时间")
-    private Date createTime;
-
-    @ApiModelProperty(value = "排序")
-    private String orderNo;
-
-    @ApiModelProperty(value = "是否删除,N:未删除,Y:删除")
-    private String isDeleted;
-    @ApiModelProperty(value = "系统服务对象")
-    private List<SysSoftwareVO> softwares;
-    @ApiModelProperty("操作码 1:新增;2:修改 ;3:删除;5:启用禁用")
-    private int opeType;
-}

+ 4 - 1
common/src/main/java/com/lantone/common/vo/UpdateAuthVO.java

@@ -3,6 +3,7 @@ package com.lantone.common.vo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.Valid;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import java.util.List;
@@ -17,10 +18,12 @@ import java.util.List;
 @Data
 public class UpdateAuthVO {
     @ApiModelProperty(value = "数据权限对象", required = true)
+    @Valid
     @NotNull(message = "数据权限对象为空")
     private UpdateDataAuthVO updateDataAuthVO;
 
     @ApiModelProperty(value = "角色列表", required = true)
+    @Valid
     @NotEmpty(message = "角色列表为空")
-    private List<RoleVO> roles;
+    private List<AddAuthRoleVO> roles;
 }

+ 1 - 12
common/src/main/java/com/lantone/common/vo/UpdateDataAuthVO.java

@@ -33,20 +33,9 @@ public class UpdateDataAuthVO implements Serializable {
     @NotBlank(message = "数据权限状态为空")
     private String status;
 
-    @ApiModelProperty(value = "排序")
-    private String orderNo;
-
-    @ApiModelProperty(value = "医院ID")
-    private String hospitalId;
-
-    @ApiModelProperty(value = "创建用户编号")
-    private Long creator;
-
-    @ApiModelProperty(value = "创建时间")
-    private Date createTime;
 
     @ApiModelProperty(value = "系统列表", required = true)
     @NotEmpty(message = "系统列表为空")
-    private List<SysSoftwareVO> softwareVOS;
+    private List<AddAuthSoftwareVO> softwareVOS;
 
 }

+ 37 - 0
common/src/main/java/com/lantone/common/vo/UpdateRoleVO.java

@@ -0,0 +1,37 @@
+package com.lantone.common.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 角色对象
+ */
+@Data
+public class UpdateRoleVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "编号", required = true)
+    @NotNull(message = "角色编号不能为空")
+    private Long id;
+
+    @ApiModelProperty(value = "角色名称", required = true)
+    @NotBlank(message = "角色名称不能为空")
+    private String name;
+
+    @ApiModelProperty(value = "角色描述")
+    private String remark;
+
+    @ApiModelProperty(value = "状态 0:禁用,1:启用", required = true)
+    @NotBlank(message = "启用禁用状态不能为空")
+    private String status;
+
+    @ApiModelProperty(value = "排序")
+    private String orderNo;
+
+    @ApiModelProperty(value = "系统服务对象")
+    private List<AddRoleSoftwareVO> softwares;
+}

+ 0 - 1
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/MenuMapper.java

@@ -2,7 +2,6 @@ package com.lantone.dblayermbg.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.lantone.common.dto.GetMenuByIdDTO;
-import com.lantone.common.vo.MenuVO;
 import com.lantone.dblayermbg.entity.Menu;
 import org.apache.ibatis.annotations.Param;
 

+ 4 - 6
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/RoleMapper.java

@@ -1,7 +1,8 @@
 package com.lantone.dblayermbg.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.lantone.common.vo.RoleVO;
+import com.lantone.common.dto.GetRolePageDTO;
+import com.lantone.common.vo.GetRolePageVO;
 import com.lantone.dblayermbg.entity.Role;
 import org.apache.ibatis.annotations.Param;
 
@@ -14,14 +15,11 @@ import java.util.List;
  */
 public interface RoleMapper extends BaseMapper<Role> {
     /**
-     * @Method getRolePage
-     * @Author songxl
-     * @Version  1.0
+     * @param getRolePageVO
      * @Description获取角色列表
-     * @param roleVO
      * @Return java.util.List<com.lantone.dblayermbg.entity.Role>
      * @Date 2021/7/30
      */
-    List<Role> getRolePage(@Param("roleVO") RoleVO roleVO);
+    List<GetRolePageDTO> getRolePage(@Param("getRolePageVO") GetRolePageVO getRolePageVO);
 
 }

+ 5 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/RoleSoftwareMenuMapper.java

@@ -2,6 +2,7 @@ package com.lantone.dblayermbg.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.lantone.common.dto.GetMenusTreeDTO;
+import com.lantone.common.dto.UserMenuResourceTreeDTO;
 import com.lantone.common.vo.GetMenusTreeVo;
 import com.lantone.dblayermbg.entity.RoleSoftwareMenu;
 import org.apache.ibatis.annotations.Param;
@@ -20,4 +21,8 @@ public interface RoleSoftwareMenuMapper extends BaseMapper<RoleSoftwareMenu> {
      * @Return java.util.List<com.lantone.common.dto.MenuDTO>
      */
     List<GetMenusTreeDTO> getMenus(@Param("roleSoftwareMenuVos") GetMenusTreeVo getMenusTreeVo);
+
+    List<UserMenuResourceTreeDTO> getUserMenuResourceTree(@Param("roles") List<Long> roles);
+
+    List<UserMenuResourceTreeDTO> getMenuResourceRelation(@Param("loginRoles")List<Long> loginRoles,@Param("selectRoles") List<Long> selectRoles);
 }

+ 5 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/SoftwareMapper.java

@@ -1,7 +1,11 @@
 package com.lantone.dblayermbg.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lantone.common.dto.SoftwareDTO;
 import com.lantone.dblayermbg.entity.Software;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -10,4 +14,5 @@ import com.lantone.dblayermbg.entity.Software;
  */
 public interface SoftwareMapper extends BaseMapper<Software> {
 
+    List<SoftwareDTO> getUserSoftware(@Param("roles") List<Long> loginRoles);
 }

+ 1 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/SoftwareMenuMapper.java

@@ -1,6 +1,7 @@
 package com.lantone.dblayermbg.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lantone.common.dto.SoftwareMenuRelationDTO;
 import com.lantone.dblayermbg.entity.SoftwareMenu;
 import org.apache.ibatis.annotations.Param;
 

+ 1 - 1
dblayer-mbg/src/main/resources/mapper/MenuMapper.xml

@@ -33,7 +33,7 @@
         <if test="softwareId != null ">
             AND sm.software_id = #{softwareId}
         </if>
-        <if test="menuVO.id != null ">
+        <if test="id != null ">
             AND m.id = #{id}
         </if>
     </select>

+ 7 - 7
dblayer-mbg/src/main/resources/mapper/RoleMapper.xml

@@ -1,20 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.lantone.dblayermbg.mapper.RoleMapper">
-    <select id="getRolePage" resultType="com.lantone.common.vo.RoleVO">
+    <select id="getRolePage" resultType="com.lantone.common.dto.GetRolePageDTO">
         SELECT
             *
         FROM
             sys_role r
         WHERE
             r.is_deleted = 'N'
-        AND r.creator = #{roleVO.creator}
-        AND r.hospital_id = #{roleVO.hospitalId}
-        <if test="roleVo.name!=null and roleVo.name!=''">
-            AND r.`name` LIKE concat('%',#{roleVo.name},'%')
+        AND r.creator = #{getRolePageVO.creator}
+        AND r.hospital_id = #{getRolePageVO.hospitalId}
+        <if test="getRolePageVO.name!=null and getRolePageVO.name!=''">
+            AND r.`name` LIKE concat('%',#{getRolePageVO.name},'%')
         </if>
-        <if test="roleVo.status!=null and roleVo.status!=''">
-            AND r.`status` = #{roleVO.status}
+        <if test="getRolePageVO.status!=null and getRolePageVO.status!=''">
+            AND r.`status` = #{getRolePageVO.status}
         </if>
     </select>
 </mapper>

+ 198 - 0
dblayer-mbg/src/main/resources/mapper/RoleSoftwareMenuMapper.xml

@@ -37,4 +37,202 @@
         m.gmt_create,
         m.order_no DESC
     </select>
+
+    <select id="getUserMenuResourceTree" resultType="com.lantone.common.dto.UserMenuResourceTreeDTO">
+        SELECT
+            t1.menuId,
+            t1.parentId,
+            t1.softwareId,
+            t1.softwareMenuId,
+            t1.menuType,
+            t1.menuName,
+            t2.softwareResourceId
+        FROM
+            (
+                SELECT
+                    r.id roleId,
+                    m.id menuId,
+                    m.parent_id parentId,
+                    sm.software_id softwareId,
+                    sm.id softwareMenuId,
+                    m.type menuType,
+                    m.`name` menuName
+                FROM
+                    sys_role r
+                JOIN sys_role_software_menu rsm ON r.id = rsm.role_id
+                JOIN sys_software_menu sm ON rsm.software_menu_id = sm.id
+                JOIN sys_menu m ON sm.menu_id = m.id
+                WHERE
+                    r.is_deleted = 'N'
+                AND rsm.is_deleted = 'N'
+                AND sm.is_deleted = 'N'
+                AND m.is_deleted = 'N'
+                AND r.`status` = '1'
+                AND m.`status` = '1'
+                <if test="roles !=null and roles.size!=0">
+                    AND r.id IN
+                    <foreach collection="roles" item="id" open="(" close=")" separator=",">
+                        #{id}
+                    </foreach>
+                </if>
+            ) t1
+        LEFT JOIN (
+            SELECT
+                r.id roleId,
+                mr.menu_id menuId,
+                sr.software_id softwareId,
+                sr.id softwareResourceId
+            FROM
+                sys_role r
+            JOIN sys_role_software_resource rsr ON r.id = rsr.role_id
+            JOIN sys_software_resource sr ON rsr.software_resource_id = sr.id
+            JOIN sys_resource re ON sr.resource_id = re.id
+            JOIN sys_menu_resource mr ON mr.resource_id = re.id
+            WHERE
+                r.is_deleted = 'N'
+            AND rsr.is_deleted = 'N'
+            AND mr.is_deleted = 'N'
+            AND sr.is_deleted = 'N'
+            AND re.is_deleted = 'N'
+            AND r.`status` = '1'
+            AND re.`status` = '1'
+        ) t2 ON t1.roleId = t2.roleId
+        AND t1.softwareId = t2.softwareId
+        AND t1.menuId = t2.menuId
+    </select>
+    <select id="getMenuResourceRelation" resultType="com.lantone.common.dto.UserMenuResourceTreeDTO">
+        SELECT
+            t1.*,
+        IF (
+            t2.menuId IS NULL,
+            "未关联",
+            "已关联"
+        ) relation
+        FROM
+            (
+                SELECT
+                    t1.menuId,
+                    t1.parentId,
+                    t1.softwareId,
+                    t1.softwareMenuId,
+                    t1.menuType,
+                    t1.menuName,
+                    t2.softwareResourceId
+                FROM
+                    (
+                        SELECT
+                            r.id roleId,
+                            m.id menuId,
+                            m.parent_id parentId,
+                            sm.software_id softwareId,
+                            sm.id softwareMenuId,
+                            m.type menuType,
+                            m.`name` menuName
+                        FROM
+                            sys_role r
+                        JOIN sys_role_software_menu rsm ON r.id = rsm.role_id
+                        JOIN sys_software_menu sm ON rsm.software_menu_id = sm.id
+                        JOIN sys_menu m ON sm.menu_id = m.id
+                        WHERE
+                            r.is_deleted = 'N'
+                        AND rsm.is_deleted = 'N'
+                        AND sm.is_deleted = 'N'
+                        AND m.is_deleted = 'N'
+                        AND r.`status` = '1'
+                        AND m.`status` = '1'
+                        <if test="loginRoles !=null and loginRoles.size!=0">
+                            AND r.id IN
+                            <foreach collection="loginRoles" item="id" open="(" close=")" separator=",">
+                                #{id}
+                            </foreach>
+                        </if>
+                    ) t1
+                LEFT JOIN (
+                    SELECT
+                        r.id roleId,
+                        mr.menu_id menuId,
+                        sr.software_id softwareId,
+                        sr.id softwareResourceId
+                    FROM
+                        sys_role r
+                    JOIN sys_role_software_resource rsr ON r.id = rsr.role_id
+                    JOIN sys_software_resource sr ON rsr.software_resource_id = sr.id
+                    JOIN sys_resource re ON sr.resource_id = re.id
+                    JOIN sys_menu_resource mr ON mr.resource_id = re.id
+                    WHERE
+                        r.is_deleted = 'N'
+                    AND rsr.is_deleted = 'N'
+                    AND mr.is_deleted = 'N'
+                    AND sr.is_deleted = 'N'
+                    AND re.is_deleted = 'N'
+                    AND r.`status` = '1'
+                    AND re.`status` = '1'
+                ) t2 ON t1.roleId = t2.roleId
+                AND t1.softwareId = t2.softwareId
+                AND t1.menuId = t2.menuId
+            ) t1
+        LEFT JOIN (
+            SELECT
+                t1.menuId,
+                t1.parentId,
+                t1.softwareId,
+                t1.softwareMenuId,
+                t1.menuType,
+                t1.menuName,
+                t2.softwareResourceId
+            FROM
+                (
+                    SELECT
+                        r.id roleId,
+                        m.id menuId,
+                        m.parent_id parentId,
+                        sm.software_id softwareId,
+                        sm.id softwareMenuId,
+                        m.type menuType,
+                        m.`name` menuName
+                    FROM
+                        sys_role r
+                    JOIN sys_role_software_menu rsm ON r.id = rsm.role_id
+                    JOIN sys_software_menu sm ON rsm.software_menu_id = sm.id
+                    JOIN sys_menu m ON sm.menu_id = m.id
+                    WHERE
+                        r.is_deleted = 'N'
+                    AND rsm.is_deleted = 'N'
+                    AND sm.is_deleted = 'N'
+                    AND m.is_deleted = 'N'
+                    AND r.`status` = '1'
+                    AND m.`status` = '1'
+                    <if test="selectRoles !=null and selectRoles.size!=0">
+                        AND r.id IN
+                        <foreach collection="selectRoles" item="id" open="(" close=")" separator=",">
+                            #{id}
+                        </foreach>
+                    </if>
+                ) t1
+            LEFT JOIN (
+                SELECT
+                    r.id roleId,
+                    mr.menu_id menuId,
+                    sr.software_id softwareId,
+                    sr.id softwareResourceId
+                FROM
+                    sys_role r
+                JOIN sys_role_software_resource rsr ON r.id = rsr.role_id
+                JOIN sys_software_resource sr ON rsr.software_resource_id = sr.id
+                JOIN sys_resource re ON sr.resource_id = re.id
+                JOIN sys_menu_resource mr ON mr.resource_id = re.id
+                WHERE
+                    r.is_deleted = 'N'
+                AND rsr.is_deleted = 'N'
+                AND mr.is_deleted = 'N'
+                AND sr.is_deleted = 'N'
+                AND re.is_deleted = 'N'
+                AND r.`status` = '1'
+                AND re.`status` = '1'
+            ) t2 ON t1.roleId = t2.roleId
+            AND t1.softwareId = t2.softwareId
+            AND t1.menuId = t2.menuId
+        ) t2 ON t1.menuId = t2.menuId
+        AND t1.softwareId = t2.softwareId
+    </select>
 </mapper>

+ 22 - 1
dblayer-mbg/src/main/resources/mapper/SoftwareMapper.xml

@@ -1,5 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.lantone.dblayermbg.mapper.SoftwareMapper">
-
+    <select id="getUserSoftware" resultType="com.lantone.common.dto.SoftwareDTO">
+        SELECT DISTINCT
+            s.id,
+            s.`name`
+        FROM
+            sys_role r
+        JOIN sys_role_software_menu rsm ON r.id = rsm.role_id
+        JOIN sys_software_menu sm ON rsm.software_menu_id = sm.id
+        JOIN sys_software s ON s.id = sm.software_id
+        WHERE
+            r.is_deleted = 'N'
+        AND rsm.is_deleted = 'N'
+        AND sm.is_deleted = 'N'
+        AND s.is_deleted = 'N'
+        AND r.`status` = '1'
+        <if test="roles !=null and roles.size!=0">
+            AND r.id IN
+            <foreach collection="roles" item="id" open="(" close=")" separator=",">
+                #{id}
+            </foreach>
+        </if>
+    </select>
 </mapper>

+ 1 - 0
dblayer-mbg/src/main/resources/mapper/SoftwareMenuMapper.xml

@@ -17,4 +17,5 @@
             </foreach>
         </if>
     </select>
+
 </mapper>

+ 20 - 13
gateway-service/src/main/resources/bootstrap.yml

@@ -85,16 +85,23 @@ secure:
       - "/user-auth/oauth/token"
       - "/user-auth/rsa/publicKey"
       - "/security-center/userAdmin/login"
-      - "/security-center/data/auth/getDataAuthById"
-      - "/security-center/data/auth/addAuth"
-      - "/security-center/data/auth/updateAuth"
-      - "/security-center/data/auth/disableAuth"
-      - "/security-center/data/auth/deleteAuth"
-      - "/security-center/data/auth/getDoctorPage"
-      - "/security-center/data/auth/getDataAuthPage"
-      - "/security-center/func/management/getMenus"
-      - "/security-center/func/management/addMenu"
-      - "/security-center/func/management/updateMenu"
-      - "/security-center/func/management/deleteMenu"
-      - "/security-center/func/management/disableMenu"
-      - "/security-center/func/management/getMenuById"
+      - "/security-center/dataAuthManage/getDataAuthById"
+      - "/security-center/dataAuthManage/addAuth"
+      - "/security-center/dataAuthManage/updateAuth"
+      - "/security-center/dataAuthManage/disableAuth"
+      - "/security-center/dataAuthManage/deleteAuth"
+      - "/security-center/dataAuthManage/getDoctorPage"
+      - "/security-center/dataAuthManage/getDataAuthPage"
+      - "/security-center/funcManage/getMenus"
+      - "/security-center/funcManage/addMenu"
+      - "/security-center/funcManage/updateMenu"
+      - "/security-center/funcManage/deleteMenu"
+      - "/security-center/funcManage/disableMenu"
+      - "/security-center/funcManage/getMenuById"
+      - "/security-center/roleManage/addRole"
+      - "/security-center/roleManage/deleteRole"
+      - "/security-center/roleManage/disableRole"
+      - "/security-center/roleManage/getRoleById"
+      - "/security-center/roleManage/getRolePage"
+      - "/security-center/roleManage/updateRole"
+      - "/security-center/roleManage/getUserMenuResourceTree"

+ 42 - 0
security-center/src/main/java/com/lantone/security/enums/RelationEnum.java

@@ -0,0 +1,42 @@
+package com.lantone.security.enums;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 是否,例如:是否关联
+ * @author: gaodm
+ * @time: 2018/9/3 16:01
+ */
+public enum RelationEnum {
+
+    Y("Y", "已关联"),
+    N("N", "未关联");
+
+    @Getter
+    @Setter
+    private String key;
+
+    @Getter
+    @Setter
+    private String name;
+
+    RelationEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static RelationEnum getEnum(String key) {
+        for (RelationEnum item : RelationEnum.values()) {
+            if (item.key.equals(key)) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        RelationEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+}

+ 5 - 5
security-center/src/main/java/com/lantone/security/facade/DataAuthManagementFacade.java

@@ -15,12 +15,12 @@ import com.lantone.common.dto.SysServiceDTO;
 import com.lantone.common.exception.Asserts;
 import com.lantone.common.util.DateUtil;
 import com.lantone.common.util.ListUtil;
+import com.lantone.common.vo.AddAuthRoleVO;
+import com.lantone.common.vo.AddAuthSoftwareVO;
 import com.lantone.common.vo.AddAuthVO;
 import com.lantone.common.vo.DataAuthDetailVO;
 import com.lantone.common.vo.GetDataAuthPageVO;
 import com.lantone.common.vo.GetDoctorPageVO;
-import com.lantone.common.vo.RoleVO;
-import com.lantone.common.vo.SysSoftwareVO;
 import com.lantone.common.vo.UpdateAuthVO;
 import com.lantone.dblayermbg.entity.DataAuth;
 import com.lantone.dblayermbg.entity.DataAuthDetail;
@@ -210,9 +210,9 @@ public class DataAuthManagementFacade {
      * @param dataAuthId
      * @Return void
      */
-    private void saveServiceDataAuth(List<SysSoftwareVO> softwareVOS, List<RoleVO> roles, Long dataAuthId) {
+    private void saveServiceDataAuth(List<AddAuthSoftwareVO> softwareVOS, List<AddAuthRoleVO> roles, Long dataAuthId) {
 
-        for (SysSoftwareVO sysServiceVO : softwareVOS) {
+        for (AddAuthSoftwareVO sysServiceVO : softwareVOS) {
             SoftwareDataAuth serviceDataAuth = new SoftwareDataAuth();
             serviceDataAuth.setSoftwareId(sysServiceVO.getId());
             serviceDataAuth.setDataAuthId(dataAuthId);
@@ -228,7 +228,7 @@ public class DataAuthManagementFacade {
                         .eq("is_deleted", IsDeleteEnum.N.getKey())).get(0).getId();
 
                 //2.插入数据权限系统关联表与角色管理sys_role_service_data_auth
-                for (RoleVO role : roles) {
+                for (AddAuthRoleVO role : roles) {
                     RoleSoftwareDataAuth roleServiceDataAuth = new RoleSoftwareDataAuth();
                     roleServiceDataAuth.setRoleId(role.getId());
                     roleServiceDataAuth.setSoftwareDataAuthId(serviceDataAuthId);

+ 129 - 102
security-center/src/main/java/com/lantone/security/facade/FuncManagementFacade.java

@@ -4,28 +4,24 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.lantone.common.dto.GetMenuByIdDTO;
 import com.lantone.common.dto.GetMenusTreeDTO;
-import com.lantone.common.dto.MenuDTO;
 import com.lantone.common.exception.Asserts;
 import com.lantone.common.util.DateUtil;
 import com.lantone.common.util.EntityUtil;
 import com.lantone.common.util.ListUtil;
-import com.lantone.common.util.StringUtil;
 import com.lantone.common.vo.AddMenuVO;
 import com.lantone.common.vo.GetMenusTreeVo;
-import com.lantone.common.vo.MenuVO;
-import com.lantone.common.vo.RoleSoftwareMenuVo;
 import com.lantone.common.vo.UpdateMenuVO;
 import com.lantone.dblayermbg.entity.Menu;
 import com.lantone.dblayermbg.entity.MenuResource;
 import com.lantone.dblayermbg.entity.Resource;
-import com.lantone.dblayermbg.entity.RoleSoftwareMenu;
 import com.lantone.dblayermbg.entity.SoftwareMenu;
+import com.lantone.dblayermbg.entity.SoftwareResource;
 import com.lantone.dblayermbg.facade.MenuFacade;
 import com.lantone.dblayermbg.facade.MenuResourceFacade;
 import com.lantone.dblayermbg.facade.ResourceFacade;
 import com.lantone.dblayermbg.facade.RoleSoftwareMenuFacade;
 import com.lantone.dblayermbg.facade.SoftwareMenuFacade;
-import com.lantone.security.enums.CRUDEnum;
+import com.lantone.dblayermbg.facade.SoftwareResourceFacade;
 import com.lantone.security.enums.IsDeleteEnum;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -55,6 +51,8 @@ public class FuncManagementFacade {
     private MenuResourceFacade menuResourceFacade;
     @Autowired
     private SoftwareMenuFacade softwareMenuFacade;
+    @Autowired
+    private SoftwareResourceFacade softwareResourceFacade;
 
     /**
      * @param getMenusTreeVo
@@ -80,8 +78,6 @@ public class FuncManagementFacade {
     }
 
 
-
-
     /**
      * 递归获取菜单结构
      *
@@ -119,8 +115,11 @@ public class FuncManagementFacade {
                     .eq("name", addMenuVO.getName())
                     .eq("type", addMenuVO.getType())
                     .eq("is_deleted", IsDeleteEnum.N.getKey())).get(0).getId();
-            //插入sys_resource、sys_menu_resource
-            return saveMenuResource(addMenuVO.getPermissions(),addMenuVO.getSoftwares(), menuID);
+            //2.插入功能菜单对应系统对应系统 sys_software_menu和sys_role_software_menu
+            if (savaRoleSoftwareMenu(menuID, addMenuVO.getSoftwares(), 1l)) {
+                //插入sys_resource、sys_menu_resource、sys_software_resource
+                return saveMenuResource(addMenuVO.getPermissions(), addMenuVO.getSoftwares(), menuID);
+            }
         } else {
             Asserts.fail("菜单详情插入失败");
         }
@@ -128,13 +127,13 @@ public class FuncManagementFacade {
     }
 
     /**
-     * @Description插入sys_resource、sys_menu_resource
      * @param permissions
      * @param softwares
      * @param menuID
+     * @Description插入sys_resource、sys_menu_resource
      * @Return boolean
      */
-    private boolean saveMenuResource(List<String> permissions,List<Long> softwares, Long menuID) {
+    private boolean saveMenuResource(List<String> permissions, List<Long> softwares, Long menuID) {
         //2.3 判断该功能菜单是否有对应权限
         if (ListUtil.isNotEmpty(permissions)) {
             permissions.stream().forEach(permission -> {
@@ -148,11 +147,18 @@ public class FuncManagementFacade {
                             .select("id")
                             .eq("url", resource.getUrl())
                             .eq("is_deleted", IsDeleteEnum.N.getKey())).get(0).getId();
-                    //2.6 插入菜单和功能对应关系
+                    //2.6 插入菜单和功能权限对应关系
                     MenuResource menuResource = new MenuResource();
                     menuResource.setMenuId(menuID);
                     menuResource.setResourceId(resourceID);
                     if (menuResourceFacade.save(menuResource)) {
+                        //2.7 插入系统与功能权限的对应关系
+                        softwares.stream().forEach(softwareId -> {
+                            SoftwareResource softwareResource = new SoftwareResource();
+                            softwareResource.setSoftwareId(softwareId);
+                            softwareResource.setResourceId(resourceID);
+                            softwareResourceFacade.save(softwareResource);
+                        });
                     } else {
                         Asserts.fail("菜单与资源权限插入失败");
                     }
@@ -160,45 +166,44 @@ public class FuncManagementFacade {
                     Asserts.fail("资源权限插入失败");
                 }
             });
+            return true;
         }
-        softwares.stream().forEach(softwareId -> {
-            //3.插入超级管理员对应系统 sys_software_menu和sys_role_software_menu
-            savaRoleSoftwareMenu(menuID, softwareId, 1l);
-        });
-        return true;
+        return false;
     }
 
     /**
      * @param menuID
-     * @param softwareId
+     * @param softwares
      * @param roleID
-     * @Method savaRoleSoftwareMenu
-     * @Author songxl
-     * @Version 1.0
      * @Description插入超级管理员对应系统 sys_software_menu和sys_role_software_menu
-     * @Return void
-     * @Date 2021/7/28
      */
-    private void savaRoleSoftwareMenu(Long menuID, Long softwareId, Long roleID) {
-        SoftwareMenu softwareMenu = new SoftwareMenu();
-        softwareMenu.setMenuId(menuID);
-        softwareMenu.setSoftwareId(softwareId);
-        if (softwareMenuFacade.save(softwareMenu)) {
-            Long softwareMenuId = softwareMenuFacade.list(new QueryWrapper<SoftwareMenu>()
-                    .eq("software_id", softwareMenu.getSoftwareId())
-                    .eq("menu_id", softwareMenu.getMenuId())
-                    .eq("is_deleted", IsDeleteEnum.N.getKey())).get(0).getId();
-            RoleSoftwareMenu roleSoftwareMenu = new RoleSoftwareMenu();
-            roleSoftwareMenu.setRoleId(roleID);
-            roleSoftwareMenu.setSoftwareMenuId(softwareMenuId);
-            if (roleSoftwareMenuFacade.save(roleSoftwareMenu)) {
-
-            } else {
-                Asserts.fail("角色与服务菜单关系插入失败");
-            }
-        } else {
-            Asserts.fail("服务与菜单对应关系插入失败");
+    private boolean savaRoleSoftwareMenu(Long menuID, List<Long> softwares, Long roleID) {
+        if (ListUtil.isNotEmpty(softwares)) {
+            softwares.stream().forEach(softwareId -> {
+                SoftwareMenu softwareMenu = new SoftwareMenu();
+                softwareMenu.setMenuId(menuID);
+                softwareMenu.setSoftwareId(softwareId);
+                if (softwareMenuFacade.save(softwareMenu)) {
+//                    Long softwareMenuId = softwareMenuFacade.list(new QueryWrapper<SoftwareMenu>()
+//                            .eq("software_id", softwareMenu.getSoftwareId())
+//                            .eq("menu_id", softwareMenu.getMenuId())
+//                            .eq("is_deleted", IsDeleteEnum.N.getKey())).get(0).getId();
+//                    RoleSoftwareMenu roleSoftwareMenu = new RoleSoftwareMenu();
+//                    roleSoftwareMenu.setRoleId(roleID);
+//                    roleSoftwareMenu.setSoftwareMenuId(softwareMenuId);
+//                    if (roleSoftwareMenuFacade.save(roleSoftwareMenu)) {
+//
+//                    } else {
+//                        Asserts.fail("角色与服务菜单关系插入失败");
+//                    }
+                } else {
+                    Asserts.fail("服务与菜单对应关系插入失败");
+                }
+            });
+            return true;
         }
+        return false;
+
     }
 
 
@@ -208,10 +213,10 @@ public class FuncManagementFacade {
      * @Description启用禁用功能菜单
      * @Return java.lang.Boolean
      */
-    public Boolean disableMenu(Long id,String status) {
+    public Boolean disableMenu(Long id, String status) {
         return menuFacade.update(new UpdateWrapper<Menu>()
-                .set("status",status)
-                .eq("id",id)
+                .set("status", status)
+                .eq("id", id)
                 .eq("is_deleted", IsDeleteEnum.N.getKey()));
     }
 
@@ -222,11 +227,11 @@ public class FuncManagementFacade {
      */
     public Boolean deleteMenu(Long id) {
         //1.删除原来menu关联插入的数据
-        if(menuFacade.remove(new UpdateWrapper<Menu>()
-                .eq("id",id)
-                .eq("is_deleted", IsDeleteEnum.N.getKey()))){
+        if (menuFacade.remove(new UpdateWrapper<Menu>()
+                .eq("id", id)
+                .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
             return deleteMenuJoinDate(id, 1l);
-        }else {
+        } else {
             Asserts.fail("菜单详情删除失败");
         }
         return false;
@@ -239,86 +244,108 @@ public class FuncManagementFacade {
      */
     public Boolean updateMenu(UpdateMenuVO updateMenuVO) {
         //1.删除原来menu关联插入的数据
-        if(deleteMenuJoinDate(updateMenuVO.getId(), 1l)){
+        if (deleteMenuJoinDate(updateMenuVO.getId(), 1l)) {
             //2.修改sys_menu 菜单表
             Menu menu = new Menu();
             BeanUtils.copyProperties(updateMenuVO, menu);
-           if( menuFacade.update(new UpdateWrapper<Menu>()
-                   .set("name",menu.getName())
-                   .set("type",menu.getType())
-                   .set("url",menu.getUrl())
-                   .set("order_no",menu.getOrderNo())
-                   .set("menu_describe",menu.getMenuDescribe())
-                   .set("remark",menu.getRemark())
-                   .set("status",menu.getStatus())
-                   .eq("id", menu.getId()))){
-               //3.重新插入上面删除的数据
-               return saveMenuResource(updateMenuVO.getPermissions(),updateMenuVO.getSoftwares(),updateMenuVO.getId());
-           }
+            if (menuFacade.update(new UpdateWrapper<Menu>()
+                    .set("name", menu.getName())
+                    .set("type", menu.getType())
+                    .set("url", menu.getUrl())
+                    .set("order_no", menu.getOrderNo())
+                    .set("menu_describe", menu.getMenuDescribe())
+                    .set("remark", menu.getRemark())
+                    .set("status", menu.getStatus())
+                    .eq("id", menu.getId()))) {
+                //3.重新插入上面删除的数据
+                //3.1插入功能菜单对应系统对应系统 sys_software_menu和sys_role_software_menu
+                if (savaRoleSoftwareMenu(updateMenuVO.getId(), updateMenuVO.getSoftwares(), 1l)) {
+                    //3.2插入sys_resource、sys_menu_resource、sys_software_resource
+                    return saveMenuResource(updateMenuVO.getPermissions(), updateMenuVO.getSoftwares(), updateMenuVO.getId());
+                }
+            }
         }
         return false;
     }
+
     /**
-     * @Description清除原菜单关联的数据
-     * @param id
+     * @param menuId
      * @param roleId
+     * @Description清除原菜单关联的数据
      * @Return boolean
      */
-    private boolean deleteMenuJoinDate(Long id, Long roleId) {
+    private boolean deleteMenuJoinDate(Long menuId, Long roleId) {
 
         //2.1删除sys_resource、sys_menu_resource原先对应menu的资源权限
         List<MenuResource> menuResources = menuResourceFacade.list(new QueryWrapper<MenuResource>()
-                .eq("menu_id", id)
+                .eq("menu_id", menuId)
                 .eq("is_deleted", IsDeleteEnum.N.getKey()));
-        //2.1有对应的资源权限
-        if (ListUtil.isNotEmpty(menuResources) && menuResources.get(0).getResourceId() != null) {
-            if (menuResourceFacade.remove(new UpdateWrapper<MenuResource>()
-                    .eq("id", menuResources.get(0).getId())
-                    .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
-                if (resourceFacade.remove(new UpdateWrapper<Resource>()
-                        .eq("id", menuResources.get(0).getResourceId())
+        //2.1.1有对应的资源权限
+        if (ListUtil.isNotEmpty(menuResources)) {
+            List<Long> menuResourceIds = menuResources.stream().map(MenuResource::getId).collect(Collectors.toList());
+            if (ListUtil.isNotEmpty(menuResourceIds)) {
+                //删除 sys_menu_resource
+                if (menuResourceFacade.remove(new UpdateWrapper<MenuResource>()
+                        .in("id", menuResourceIds)
                         .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
+                    List<Long> resourceIds = menuResources.stream().map(MenuResource::getResourceId).collect(Collectors.toList());
+                    if (ListUtil.isNotEmpty(resourceIds)) {
+                        //删除sys_resource
+                        if (resourceFacade.remove(new UpdateWrapper<Resource>()
+                                .in("id", resourceIds)
+                                .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
+                            //删除sys_software_resource
+                            if (softwareResourceFacade.remove(new UpdateWrapper<SoftwareResource>()
+                                    .in("resource_id", resourceIds)
+                                    .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
+
+                            } else {
+                                Asserts.fail("系统与功能权限对应关系删除失败");
+                            }
+                        } else {
+                            Asserts.fail("原菜单对应资源详情删除失败");
+                        }
+                    }
                 } else {
-                    Asserts.fail("原菜单对应资源详情删除失败");
+                    Asserts.fail("原菜单对应资源关联关系删除失败");
                 }
-
-            } else {
-                Asserts.fail("原菜单对应资源关联关系删除失败");
             }
         }
-        //2.2删除超级管理员该菜单的管理sys_software_menu、sys_role_software_menu
-        List<Long> softwareMenuIds = roleSoftwareMenuFacade.list(new QueryWrapper<RoleSoftwareMenu>()
-                .eq("role_id", roleId)
-                .eq("is_deleted", IsDeleteEnum.N.getKey())).stream().map(RoleSoftwareMenu::getSoftwareMenuId).collect(Collectors.toList());
-        List<SoftwareMenu> softwareMenus = softwareMenuFacade.getBaseMapper().getSoftwareMenu(id, softwareMenuIds);
-        //如果改菜单没有超级管理员对应关系
-        if(ListUtil.isEmpty(softwareMenus)){
-            return true;
-        }
-        //有删除
-        if (roleSoftwareMenuFacade.remove(new UpdateWrapper<RoleSoftwareMenu>()
-                .in("software_menu_id", softwareMenus.stream().map(SoftwareMenu::getId).collect(Collectors.toList()))
+        //2.2删除sys_software_menu
+        if (softwareMenuFacade.remove(new UpdateWrapper<SoftwareMenu>()
+                .eq("menu_id", menuId)
                 .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
-            if (softwareMenuFacade.remove(new UpdateWrapper<SoftwareMenu>()
-                    .in("id", softwareMenus.stream().map(SoftwareMenu::getId).collect(Collectors.toList()))
-                    .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
-                return true;
-            }else {
-                Asserts.fail("服务菜单关系清除失败");
-            }
-        }else {
-            Asserts.fail("角色对应服务菜单关系清除失败");
+            return true;
+        } else {
+            Asserts.fail("服务菜单关系清除失败");
         }
+        //2.2删除超级管理员该菜单的管理sys_software_menu、sys_role_software_menu
+//        List<Long> softwareMenuIds = softwareMenuFacade.list(new QueryWrapper<SoftwareMenu>()
+//                .eq("menu_id", menuId)
+//                .eq("is_deleted", IsDeleteEnum.N.getKey())).stream().map(SoftwareMenu::getId).collect(Collectors.toList());
+//        if (roleSoftwareMenuFacade.remove(new UpdateWrapper<RoleSoftwareMenu>()
+//                .in("software_menu_id", softwareMenuIds)
+//                .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
+//            if (softwareMenuFacade.remove(new UpdateWrapper<SoftwareMenu>()
+//                    .eq("menu_id", menuId)
+//                    .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
+//                return true;
+//            } else {
+//                Asserts.fail("服务菜单关系清除失败");
+//            }
+//        } else {
+//            Asserts.fail("角色对应服务菜单关系清除失败");
+//        }
         return false;
     }
 
     /**
-     * @Description获取菜单详情
      * @param id
+     * @Description获取菜单详情
      * @Return com.lantone.common.dto.MenuDTO
      * @Date 2021/7/29
      */
-    public GetMenuByIdDTO getMenuById(Long id,Long softwareId) {
-        return menuFacade.getBaseMapper().getMenuById(id,softwareId);
+    public GetMenuByIdDTO getMenuById(Long id, Long softwareId) {
+        return menuFacade.getBaseMapper().getMenuById(id, softwareId);
     }
 }

+ 266 - 158
security-center/src/main/java/com/lantone/security/facade/RoleManagementFacade.java

@@ -1,21 +1,43 @@
 package com.lantone.security.facade;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.lantone.common.dto.RoleDTO;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.lantone.common.dto.GetRoleDTO;
+import com.lantone.common.dto.GetRolePageDTO;
+import com.lantone.common.dto.SoftwareDTO;
+import com.lantone.common.dto.SoftwareMenuRelationDTO;
+import com.lantone.common.dto.UserMenuResourceTreeDTO;
 import com.lantone.common.exception.Asserts;
 import com.lantone.common.util.DateUtil;
+import com.lantone.common.util.EntityUtil;
 import com.lantone.common.util.ListUtil;
 import com.lantone.common.util.StringUtil;
-import com.lantone.common.vo.RoleSoftwareMenuVo;
-import com.lantone.common.vo.RoleVO;
+import com.lantone.common.vo.AddRoleSoftwareVO;
+import com.lantone.common.vo.AddRoleVO;
+import com.lantone.common.vo.GetRolePageVO;
+import com.lantone.common.vo.UpdateRoleVO;
 import com.lantone.dblayermbg.entity.Role;
+import com.lantone.dblayermbg.entity.RoleSoftwareMenu;
+import com.lantone.dblayermbg.entity.RoleSoftwareResource;
 import com.lantone.dblayermbg.facade.RoleFacade;
-import com.lantone.security.enums.CRUDEnum;
+import com.lantone.dblayermbg.facade.RoleSoftwareMenuFacade;
+import com.lantone.dblayermbg.facade.RoleSoftwareResourceFacade;
+import com.lantone.dblayermbg.facade.SoftwareFacade;
+import com.lantone.dblayermbg.facade.SoftwareMenuFacade;
+import com.lantone.dblayermbg.service.impl.RoleSoftwareMenuServiceImpl;
+import com.lantone.dblayermbg.service.impl.RoleSoftwareResourceServiceImpl;
 import com.lantone.security.enums.IsDeleteEnum;
+import com.lantone.security.enums.RelationEnum;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
 
 /**
  * @ClassName: FuncManagementFacade
@@ -28,201 +50,287 @@ import java.util.List;
 public class RoleManagementFacade {
     @Autowired
     private RoleFacade roleFacade;
+    @Autowired
+    private RoleSoftwareMenuFacade roleSoftwareMenuFacade;
+    @Autowired
+    private RoleSoftwareResourceFacade roleSoftwareResourceFacade;
+    @Autowired
+    private SoftwareMenuFacade softwareMenuFacade;
+    @Autowired
+    private SoftwareFacade softwareFacade;
 
-    /**
-     * @param roleSoftwareMenuVo
-     * @Method inputParamCheck
-     * @Author songxl
-     * @Version 1.0
-     * @Description入参校验
-     * @Return void
-     * @Date 2021/7/28
-     */
-    private void inputParamCheck(RoleSoftwareMenuVo roleSoftwareMenuVo) {
-        if (roleSoftwareMenuVo == null) {
-            Asserts.fail("入参为空");
-        }
-        if (ListUtil.isEmpty(roleSoftwareMenuVo.getRoles())) {
-            Asserts.fail("角色列表为空");
-        }
-        if (roleSoftwareMenuVo.getSoftwareId() == null) {
-            Asserts.fail("服务id为空");
-        }
-    }
 
     /**
-     * @param roleVO
-     * @Method inputParamCheck
-     * @Author songxl
-     * @Version 1.0
-     * @Description入参校验
-     * @Return void
-     * @Date 2021/7/28
+     * @param roleId
+     * @Description删除角色
+     * @Return java.lang.Boolean
      */
-    private void inputParamCheck(RoleVO roleVO) {
-        if (roleVO == null) {
-            Asserts.fail("入参为空");
-        }
-        if (roleVO.getOpeType() == 0) {
-            Asserts.fail("操作码为空");
-        }
-        switch (roleVO.getOpeType()) {
-            case 1:
-                if (StringUtil.isEmpty(roleVO.getName())) {
-                    Asserts.fail("角色名称为空");
-                }
-                if (ListUtil.isEmpty(roleVO.getSoftwares())){
-                    Asserts.fail("角色开放系统至少要选择一个");
-                }
-                roleVO.getSoftwares().stream().forEach(sysSoftwareVO -> {
-                    if (ListUtil.isEmpty(sysSoftwareVO.getMenus())){
-                        Asserts.fail("角色开放系统对应的菜单列表为空");
-                    }
-                });
-                if(StringUtil.isEmpty(roleVO.getStatus())){
-                    Asserts.fail("角色启用禁用状态为空");
-                }
-
-                break;
-            case 2:
-                if (roleVO.getId() == null) {
-                    Asserts.fail("角色ID为空");
-                }
-                if (StringUtil.isEmpty(roleVO.getName())) {
-                    Asserts.fail("角色名称为空");
-                }
-                if (ListUtil.isEmpty(roleVO.getSoftwares())){
-                    Asserts.fail("角色开放系统至少要选择一个");
-                }
-                roleVO.getSoftwares().stream().forEach(sysSoftwareVO -> {
-                    if (ListUtil.isEmpty(sysSoftwareVO.getMenus())){
-                        Asserts.fail("角色开放系统对应的菜单列表为空");
-                    }
-                });
-                if(StringUtil.isEmpty(roleVO.getStatus())){
-                    Asserts.fail("角色启用禁用状态为空");
-                }
-                break;
-            case 3:
-                if (roleVO.getId() == null) {
-                    Asserts.fail("角色ID为空");
-                }
-                break;
-            case 5:
-                if (roleVO.getId() == null) {
-                    Asserts.fail("角色ID为空");
-                }
-                if (roleVO.getStatus() == null) {
-                    Asserts.fail("status为空");
-                }
-                break;
-            default:
-                break;
+    public Boolean deleteRole(Long roleId) {
+        if (roleFacade.remove(new UpdateWrapper<Role>()
+                .eq("id", roleId)
+                .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
+            return deleteRoleSoftwareMenu(roleId);
+        } else {
+            Asserts.fail("角色删除失败");
         }
+        return false;
     }
 
-
-
     /**
-     * @param roleVO
-     * @Method CRUDOperation
-     * @Author songxl
-     * @Version 1.0
-     * @Description角色CRUD方法
+     * @param roleId
+     * @param status
+     * @Description
      * @Return java.lang.Boolean
-     * @Date 2021/7/28
      */
-    public Boolean CRUDOperation(RoleVO roleVO) {
-
-        try {
-            //1.入参校验
-            inputParamCheck(roleVO);
-            //2.执行操作
-            if (CRUDEnum.ADD.getKey() == roleVO.getOpeType()) {                 //添加
-                return addRole(roleVO);
-            } else if (CRUDEnum.UPDATE.getKey() == roleVO.getOpeType()) {       //修改
-                return updateRole(roleVO);
-            } else if (CRUDEnum.DELETE.getKey() == roleVO.getOpeType()) {       //删除
-                return deleteRole(roleVO);
-            } else if (CRUDEnum.DISBALE.getKey() == roleVO.getOpeType()) {       //启用禁用
-                return disableRole(roleVO);
-            } else {
-                Asserts.fail("操作码错误");
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            Asserts.fail(e.toString());
-        }
-        return false;
-    }
-
-    private Boolean deleteRole(RoleVO roleVO) {
-        return false;
-    }
-
-    private Boolean disableRole(RoleVO roleVO) {
-        return false;
+    public Boolean disableRole(Long roleId, String status) {
+        return roleFacade.update(new UpdateWrapper<Role>()
+                .set("status", status)
+                .eq("id", roleId)
+                .eq("is_deleted", IsDeleteEnum.N.getKey()));
     }
 
     /**
-     * @Method addRole
-     * @Author songxl
-     * @Version  1.0
+     * @param addRoleVO
      * @Description添加角色
-     * @param roleVO
      * @Return java.lang.Boolean
-     * @Date 2021/7/30
      */
-    private Boolean addRole(RoleVO roleVO) {
+    public Boolean addRole(AddRoleVO addRoleVO) {
         //1.角色表插入角色信息
-        roleVO.setCreator("0");//###当前登录人
-        roleVO.setHospitalId(2l);//###当前登录人的组织
+        addRoleVO.setCreator("0");//###当前登录人
+        addRoleVO.setHospitalId(2l);//###当前登录人的组织
         Role role = new Role();
-        BeanUtils.copyProperties(roleVO,role);
+        BeanUtils.copyProperties(addRoleVO, role);
         role.setGmtCreate(DateUtil.now());
-        if(roleFacade.save(role)){
-            Long roleId =  roleFacade.list(new QueryWrapper<Role>()
-                    .eq("hospital_id",role.getHospitalId())
-                    .eq("name",role.getName())
+        if (roleFacade.save(role)) {
+            Long roleId = roleFacade.list(new QueryWrapper<Role>()
+                    .eq("hospital_id", role.getHospitalId())
+                    .eq("name", role.getName())
                     .eq("is_deleted", IsDeleteEnum.N.getKey())).get(0).getId();
-            //2.插入角色与系统菜单的对应关系
-            return saveRoleSoftwareMenu(roleVO,roleId);
-        }else {
+            //2.插入角色与系统菜单的对应关系以及角色与功能权限的对应关系sys_role_software_menu,sys_role_software_resource
+            return saveRoleSoftwareMenu(addRoleVO.getSoftwares(), roleId);
+        } else {
             Asserts.fail("角色插入失败");
         }
         return false;
     }
+
     /**
-     * @Description插入角色与系统、菜单的对应关系
-     * @param roleVO
+     * @param softwares
      * @param roleId
+     * @Description插入角色与系统、菜单的对应关系
      * @Return void
      */
-    private Boolean saveRoleSoftwareMenu(RoleVO roleVO, Long roleId) {
+    public Boolean saveRoleSoftwareMenu(List<AddRoleSoftwareVO> softwares, Long roleId) {
+        //插入sys_role_software_menu,sys_role_software_resource
+        AtomicReference<Boolean> out = new AtomicReference<>(false);
+        softwares.stream().forEach(addRoleSoftwareVO -> {
+            if (ListUtil.isNotEmpty(addRoleSoftwareVO.getSoftwareMenuIds())) {
+                //1.添加该角色对应的系统功能菜单关系sys_role_software_menu
+                List<RoleSoftwareMenu> roleSoftwareMenus = new ArrayList<>();
+                addRoleSoftwareVO.getSoftwareMenuIds().stream().forEach(softwareMenuId -> {
+                    RoleSoftwareMenu roleSoftwareMenu = new RoleSoftwareMenu();
+                    roleSoftwareMenu.setRoleId(roleId);
+                    roleSoftwareMenu.setSoftwareMenuId(softwareMenuId);
+                    roleSoftwareMenus.add(roleSoftwareMenu);
+                });
+                out.set(new RoleSoftwareMenuServiceImpl().saveBatch(roleSoftwareMenus));
+            }
+            if (ListUtil.isNotEmpty(addRoleSoftwareVO.getSoftwareResourceIds())) {
+                //2.添加该角色对应的系统功能权限关系sys_role_software_resource
+                List<RoleSoftwareResource> roleSoftwareResources = new ArrayList<>();
+                addRoleSoftwareVO.getSoftwareResourceIds().stream().forEach(softwareResourceId -> {
+                    RoleSoftwareResource roleSoftwareResource = new RoleSoftwareResource();
+                    roleSoftwareResource.setRoleId(roleId);
+                    roleSoftwareResource.setSoftwareResourceId(softwareResourceId);
+                    roleSoftwareResources.add(roleSoftwareResource);
+                });
+                out.set(new RoleSoftwareResourceServiceImpl().saveBatch(roleSoftwareResources));
+            }
+        });
+        return out.get();
+    }
+
+    /**
+     * @param updateRoleVO
+     * @Description修改角色
+     * @Return java.lang.Boolean
+     */
+    public Boolean updateRole(UpdateRoleVO updateRoleVO) {
+        //1.删除原来角色系统菜单关联关系、角色系统功能权限关联关系
+        if (deleteRoleSoftwareMenu(updateRoleVO.getId())) {
+            //2.修改角色基本信息
+            if (roleFacade.update(new UpdateWrapper<Role>()
+                    .set("name", updateRoleVO.getName())
+                    .set("status", updateRoleVO.getStatus())
+                    .set(StringUtil.isNotEmpty(updateRoleVO.getRemark()), "remark", updateRoleVO.getRemark())
+                    .set(StringUtil.isNotEmpty(updateRoleVO.getOrderNo()), "order_no", updateRoleVO.getOrderNo())
+                    .eq("id", updateRoleVO.getId())
+                    .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
+
+                return saveRoleSoftwareMenu(updateRoleVO.getSoftwares(), updateRoleVO.getId());
+            } else {
+                Asserts.fail("角色基本信息修改失败");
+            }
+        } else {
+            Asserts.fail("原来角色与系统菜单关联关系删除失败");
+        }
         return false;
     }
 
-    private Boolean updateRole(RoleVO roleVO) {
+    /**
+     * @param id
+     * @Description删除原来角色系统菜单关联关系、角色系统功能权限关联关系
+     * @Return boolean
+     */
+    private boolean deleteRoleSoftwareMenu(Long id) {
+        if (roleSoftwareMenuFacade.remove(new UpdateWrapper<RoleSoftwareMenu>()
+                .eq("role_id", id)
+                .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
+            return roleSoftwareResourceFacade.remove(new UpdateWrapper<RoleSoftwareResource>()
+                    .eq("role_id", id)
+                    .eq("is_deleted", IsDeleteEnum.N.getKey()));
+        }
         return false;
     }
 
     /**
-     * @Method getRolePage
-     * @Author songxl
-     * @Version  1.0
+     * @param getRolePageVO
      * @Description获取角色列表
-     * @param roleVO
      * @Return java.util.List<com.lantone.common.dto.RoleDTO>
-     * @Date 2021/7/30
      */
-    public List<Role> getRolePage(RoleVO roleVO) {
+    public List<GetRolePageDTO> getRolePage(GetRolePageVO getRolePageVO) {
         //1.获取当前登录人id和组织id
-        roleVO.setCreator("0");//###当前登录人
-        roleVO.setHospitalId(2l);//###当前登录人的组织
-        return roleFacade.getBaseMapper().getRolePage(roleVO);
+        getRolePageVO.setCreator("0");//###当前登录人
+        getRolePageVO.setHospitalId(2l);//###当前登录人的组织
+        return roleFacade.getBaseMapper().getRolePage(getRolePageVO);
     }
 
-    public RoleDTO getRoleById(RoleVO roleVO) {
+    /**
+     * @param roleId
+     * @Description通过角色id获取角色详情
+     * @Return com.lantone.common.dto.GetRoleDTO
+     */
+    public GetRoleDTO getRoleById(Long roleId) {
+        GetRoleDTO getRoleDTO = new GetRoleDTO();
+        //1.获取角色基本信息
+        List<Role> roles = roleFacade.list(new QueryWrapper<Role>()
+                .eq("id", roleId)
+                .eq("is_deleted", IsDeleteEnum.N.getKey()));
+        if (ListUtil.isNotEmpty(roles)) {
+            BeanUtils.copyProperties(roles.get(0), getRoleDTO);
+            //2.获取当前登录用户的功能菜单树
+            //获取当前用户的角色列表
+            List<Long> loginRoles = new ArrayList<>();//###获取当前用户id再获取该用户的角色
+            loginRoles.add(1l);
+            //获取用户服务
+            List<SoftwareDTO> loginSoftwares = softwareFacade.getBaseMapper().getUserSoftware(loginRoles);
+            List<SoftwareDTO> hasSoftwares = softwareFacade.getBaseMapper().getUserSoftware(roles.stream().map(Role::getId).collect(Collectors.toList()));
+            loginSoftwares.stream().forEach(softwareDTO -> {
+                hasSoftwares.stream().forEach(hasSoftwareDto->{
+                    if(softwareDTO.getId().equals(hasSoftwareDto.getId())){
+                        softwareDTO.setRelation(RelationEnum.Y.getName());
+                    }else {
+                        softwareDTO.setRelation(RelationEnum.N.getName());
+                    }
+                });
+            });
+            getRoleDTO.setLoginSoftwares(loginSoftwares);
+            getRoleDTO.setLoginUserMenuResourceTree(getUserMenuResourceTreeByRoles(loginRoles,roles.stream().map(Role::getId).collect(Collectors.toList())));
+            return getRoleDTO;
+        } else {
+            Asserts.fail("角色的基本信息不存在");
+        }
         return null;
     }
+
+    /**
+     * 递归获取菜单结构
+     *
+     * @param menu    当前菜单
+     * @param menuMap 菜单集
+     * @return 菜单结构
+     */
+    public List<SoftwareMenuRelationDTO> getSonMenu(SoftwareMenuRelationDTO menu, Map<Long, List<SoftwareMenuRelationDTO>> menuMap) {
+        List<SoftwareMenuRelationDTO> sonMenu = new ArrayList<>();
+        List<SoftwareMenuRelationDTO> menuList = menuMap.get(menu.getMenuId());
+        if (ListUtil.isNotEmpty(menuList)) {
+            menu.setSonMenu(menuList);
+            for (SoftwareMenuRelationDTO bean : menuList) {
+                getSonMenu(bean, menuMap);
+            }
+        }
+        return sonMenu;
+    }
+
+    /**
+     * 递归获取菜单结构
+     *
+     * @param menu    当前菜单
+     * @param menuMap 菜单集
+     * @return 菜单结构
+     */
+    public List<UserMenuResourceTreeDTO> getSonMenu(UserMenuResourceTreeDTO menu, Map<Long, List<UserMenuResourceTreeDTO>> menuMap) {
+        List<UserMenuResourceTreeDTO> sonMenu = new ArrayList<>();
+        List<UserMenuResourceTreeDTO> menuList = menuMap.get(menu.getMenuId());
+        if (ListUtil.isNotEmpty(menuList)) {
+            menu.setSonMenuResource(menuList);
+            for (UserMenuResourceTreeDTO bean : menuList) {
+                getSonMenu(bean, menuMap);
+            }
+        }
+        return sonMenu;
+    }
+
+    /**
+     * @Description
+     * @param获取用户功能菜单树
+     * @Return java.util.Map<java.lang.Long, java.util.List < com.lantone.common.dto.UserMenuResourceTreeDTO>>
+     */
+    public Map<Long, List<UserMenuResourceTreeDTO>> getUserMenuResourceTree() {
+        //1.获取当前用户的角色列表
+        List<Long> roles = new ArrayList<>();//###获取当前用户id再获取该用户的角色
+        roles.add(1l);
+        return getUserMenuResourceTreeByRoles(roles);
+    }
+
+    /**
+     * @param roles
+     * @Description通过角色列表获取用户功能菜单树
+     * @Return java.util.Map<java.lang.Long, java.util.List < com.lantone.common.dto.UserMenuResourceTreeDTO>>
+     */
+    private Map<Long, List<UserMenuResourceTreeDTO>> getUserMenuResourceTreeByRoles(List<Long> roles) {
+        List<UserMenuResourceTreeDTO> userMenuResourceTree = roleSoftwareMenuFacade.getBaseMapper().getUserMenuResourceTree(roles);
+        return getTree(userMenuResourceTree);
+    }
+
+    /**
+     * @param loginRoles 当前登录用户的角色列表
+     * @param selectRoles 要查询用户的角色列表
+     * @Description通过角色列表获取用户功能菜单树
+     * @Return java.util.Map<java.lang.Long, java.util.List < com.lantone.common.dto.UserMenuResourceTreeDTO>>
+     */
+    private Map<Long, List<UserMenuResourceTreeDTO>> getUserMenuResourceTreeByRoles(List<Long> loginRoles,List<Long> selectRoles) {
+        List<UserMenuResourceTreeDTO> userMenuResourceTree = roleSoftwareMenuFacade.getBaseMapper().getMenuResourceRelation(loginRoles,selectRoles);
+        return getTree(userMenuResourceTree);
+    }
+
+    private Map<Long, List<UserMenuResourceTreeDTO>> getTree(List<UserMenuResourceTreeDTO> userMenuResourceTree) {
+        Map<Long, List<UserMenuResourceTreeDTO>> resUserMenuResourceTree = new HashMap<>();
+        //2.获取每个系统下的菜单、功能权限
+        Map<Long, List<UserMenuResourceTreeDTO>> userMenuResourceMap = EntityUtil
+                .makeEntityListMap(userMenuResourceTree, "softwareId");
+        //3.获取每个系统下的功能菜单树
+        if (!userMenuResourceMap.keySet().isEmpty()) {
+            userMenuResourceMap.keySet().stream().forEach(softwareId -> {
+                Map<Long, List<UserMenuResourceTreeDTO>> menuResourceMap = EntityUtil
+                        .makeEntityListMap(userMenuResourceMap.get(softwareId), "parentId");
+                List<UserMenuResourceTreeDTO> menuRes = menuResourceMap.get(0L);
+                for (UserMenuResourceTreeDTO bean : menuRes) {
+                    getSonMenu(bean, menuResourceMap);
+                }
+                resUserMenuResourceTree.put(softwareId, menuRes);
+            });
+        }
+        return resUserMenuResourceTree;
+    }
 }

+ 9 - 7
security-center/src/main/java/com/lantone/security/web/DataAuthManagementController.java

@@ -17,8 +17,10 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.validation.Valid;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 
@@ -39,46 +41,46 @@ public class DataAuthManagementController {
     @ApiOperation(value = "新增数据权限[by:songxl]")
     @PostMapping("/addAuth")
     @Transactional
-    public CommonResult<Boolean> addAuth(@RequestBody AddAuthVO addAuthVO) {
+    public CommonResult<Boolean> addAuth(@RequestBody @Valid AddAuthVO addAuthVO) {
         return CommonResult.success(dataAuthHandleFacade.addDataAuth(addAuthVO));
     }
 
     @ApiOperation(value = "修改数据权限[by:songxl]")
     @PostMapping("/updateAuth")
     @Transactional
-    public CommonResult<Boolean> updateAuth(@RequestBody UpdateAuthVO updateAuthVO) {
+    public CommonResult<Boolean> updateAuth(@RequestBody @Valid UpdateAuthVO updateAuthVO) {
         return CommonResult.success(dataAuthHandleFacade.updateDataAuth(updateAuthVO));
     }
 
     @ApiOperation(value = "启用禁用数据权限[by:songxl]")
     @PostMapping("/disableAuth")
     @Transactional
-    public CommonResult<Boolean> disableAuth(@RequestBody @NotNull(message = "数据权限id为空") Long id, @NotBlank(message = "启用禁用status为空") String status) {
+    public CommonResult<Boolean> disableAuth(@RequestParam @Valid @NotNull(message = "数据权限id为空") Long id,@RequestParam @Valid @NotBlank(message = "启用禁用status为空") String status) {
         return CommonResult.success(dataAuthHandleFacade.disableDataAuth(id, status));
     }
 
     @ApiOperation(value = "删除数据权限[by:songxl]")
     @PostMapping("/deleteAuth")
     @Transactional
-    public CommonResult<Boolean> deleteAuth(@RequestBody @NotNull(message = "数据权限id为空") Long Id) {
+    public CommonResult<Boolean> deleteAuth(@RequestParam @Valid @NotNull(message = "数据权限id为空") Long Id) {
         return CommonResult.success(dataAuthHandleFacade.deleteDataAuth(Id));
     }
 
     @ApiOperation(value = "通过数据权限id和角色id获取数据权限详情[by:songxl]")
     @PostMapping("/getDataAuthById")
-    public CommonResult<GetDataAuthByIdDTO> getDataAuthById(@RequestBody @NotNull(message = "数据权限id为空") Long Id) {
+    public CommonResult<GetDataAuthByIdDTO> getDataAuthById(@RequestParam @Valid @NotNull(message = "数据权限id为空") Long Id) {
         return CommonResult.success(dataAuthHandleFacade.getDataAuthById(Id));
     }
 
     @ApiOperation(value = "获取医生列表[by:songxl]")
     @PostMapping("/getDoctorPage")
-    public CommonResult<IPage<GetDoctorPageDTO>> getDoctorPage(@RequestBody GetDoctorPageVO getDoctorPageVO) {
+    public CommonResult<IPage<GetDoctorPageDTO>> getDoctorPage(@RequestBody @Valid GetDoctorPageVO getDoctorPageVO) {
         return CommonResult.success(dataAuthHandleFacade.getDoctorPage(getDoctorPageVO));
     }
 
     @ApiOperation(value = "获取数据权限列表[by:songxl]")
     @PostMapping("/getDataAuthPage")
-    public CommonResult<IPage<GetDataAuthPageDTO>> getDataAuthPage(@RequestBody GetDataAuthPageVO getDataAuthPageVO) {
+    public CommonResult<IPage<GetDataAuthPageDTO>> getDataAuthPage(@RequestBody @Valid GetDataAuthPageVO getDataAuthPageVO) {
         return CommonResult.success(dataAuthHandleFacade.getDataAuthPage(getDataAuthPageVO));
     }
 }

+ 8 - 9
security-center/src/main/java/com/lantone/security/web/FuncManagementController.java

@@ -3,11 +3,8 @@ package com.lantone.security.web;
 import com.lantone.common.api.CommonResult;
 import com.lantone.common.dto.GetMenuByIdDTO;
 import com.lantone.common.dto.GetMenusTreeDTO;
-import com.lantone.common.dto.MenuDTO;
 import com.lantone.common.vo.AddMenuVO;
 import com.lantone.common.vo.GetMenusTreeVo;
-import com.lantone.common.vo.MenuVO;
-import com.lantone.common.vo.RoleSoftwareMenuVo;
 import com.lantone.common.vo.UpdateMenuVO;
 import com.lantone.security.facade.FuncManagementFacade;
 import io.swagger.annotations.Api;
@@ -17,8 +14,10 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.validation.Valid;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import java.util.List;
@@ -39,41 +38,41 @@ public class FuncManagementController {
 
     @ApiOperation(value = "获取功能菜单列表 [by:songxl]")
     @PostMapping("/getMenusTree")
-    public CommonResult<List<GetMenusTreeDTO>> getMenusTree(@RequestBody GetMenusTreeVo getMenusTreeVo) {
+    public CommonResult<List<GetMenusTreeDTO>> getMenusTree(@RequestBody @Valid GetMenusTreeVo getMenusTreeVo) {
         return CommonResult.success(funcManagementFacade.getMenusTree(getMenusTreeVo));
     }
 
     @ApiOperation(value = "添加功能菜单 [by:songxl]")
     @PostMapping("/addMenu")
     @Transactional
-    public CommonResult<Boolean> addMenu(@RequestBody AddMenuVO addMenuVO) {
+    public CommonResult<Boolean> addMenu(@RequestBody @Valid AddMenuVO addMenuVO) {
         return CommonResult.success(funcManagementFacade.addMenu(addMenuVO));
     }
 
     @ApiOperation(value = "修改功能菜单 [by:songxl]")
     @PostMapping("/updateMenu")
     @Transactional
-    public CommonResult<Boolean> updateMenu(@RequestBody UpdateMenuVO updateMenuVO) {
+    public CommonResult<Boolean> updateMenu(@RequestBody  @Valid UpdateMenuVO updateMenuVO) {
         return CommonResult.success(funcManagementFacade.updateMenu(updateMenuVO));
     }
 
     @ApiOperation(value = "获取菜单详情 [by:songxl]")
     @PostMapping("/getMenuById")
-    public CommonResult<GetMenuByIdDTO> getMenuById(@RequestBody @NotNull(message = "功能菜单编号为空") Long id,@NotNull(message = "系统编号为空") Long softwareId) {
+    public CommonResult<GetMenuByIdDTO> getMenuById(@RequestParam @Valid @NotNull(message = "功能菜单编号为空") Long id, @RequestParam @Valid @NotNull(message = "系统编号为空") Long softwareId) {
         return CommonResult.success(funcManagementFacade.getMenuById(id,softwareId));
     }
 
     @ApiOperation(value = "删除功能菜单 [by:songxl]")
     @PostMapping("/deleteMenu")
     @Transactional
-    public CommonResult<Boolean> deleteMenu(@RequestBody @NotNull(message = "功能菜单编号为空") Long id) {
+    public CommonResult<Boolean> deleteMenu(@RequestParam @Valid @NotNull(message = "功能菜单编号为空") Long id) {
         return CommonResult.success(funcManagementFacade.deleteMenu(id));
     }
 
     @ApiOperation(value = "启用禁用功能菜单 [by:songxl]")
     @PostMapping("/disableMenu")
     @Transactional
-    public CommonResult<Boolean> disableMenu(@RequestBody @NotNull(message = "功能菜单id为空") Long id, @NotBlank(message = "启用禁用status为空") String status) {
+    public CommonResult<Boolean> disableMenu(@RequestParam @Valid @NotNull(message = "功能菜单id为空") Long id,@RequestParam @Valid @NotBlank(message = "启用禁用status为空") String status) {
         return CommonResult.success(funcManagementFacade.disableMenu(id, status));
     }
 

+ 45 - 46
security-center/src/main/java/com/lantone/security/web/RoleManagementController.java

@@ -1,12 +1,12 @@
 package com.lantone.security.web;
 
 import com.lantone.common.api.CommonResult;
-import com.lantone.common.dto.MenuDTO;
-import com.lantone.common.dto.RoleDTO;
-import com.lantone.common.vo.MenuVO;
-import com.lantone.common.vo.RoleSoftwareMenuVo;
-import com.lantone.common.vo.RoleVO;
-import com.lantone.dblayermbg.entity.Role;
+import com.lantone.common.dto.GetRoleDTO;
+import com.lantone.common.dto.GetRolePageDTO;
+import com.lantone.common.dto.UserMenuResourceTreeDTO;
+import com.lantone.common.vo.AddRoleVO;
+import com.lantone.common.vo.GetRolePageVO;
+import com.lantone.common.vo.UpdateRoleVO;
 import com.lantone.security.facade.RoleManagementFacade;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -15,9 +15,14 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @ClassName: RoleManagementController
@@ -28,7 +33,7 @@ import java.util.List;
  */
 @RestController
 @Api(value = "角色管理API", tags = "RoleManagementController")
-@RequestMapping("/role/management")
+@RequestMapping("/roleManage")
 public class RoleManagementController {
     @Autowired
     private RoleManagementFacade roleManagementFacade;
@@ -36,53 +41,47 @@ public class RoleManagementController {
     @ApiOperation(value = "获取角色列表 [by:songxl]",
             notes = "")
     @PostMapping("/getRolePage")
-    public CommonResult<List<Role>> getRolePage(@RequestBody RoleVO roleVO) {
-        return CommonResult.success(roleManagementFacade.getRolePage(roleVO));
+    public CommonResult<List<GetRolePageDTO>> getRolePage(@RequestBody @Valid GetRolePageVO getRolePageVO) {
+        return CommonResult.success(roleManagementFacade.getRolePage(getRolePageVO));
     }
-    @ApiOperation(value = "添加角色 [by:songxl]",
-            notes = "name:角色名称,必填<br>" +
-                    "softwares:系统服务对象,必填<br>" +
-                    "id:系统服务对象-id,必填<br>" +
-                    "menus:功能菜单列表,必填<br>" +
-                    "id:功能菜单列表-id,必填<br>" +
-                    "status:状态 0:禁用,1:启用,必填<br>" +
-                    "opeType:操作码 1:新增;2:修改 ;3:删除;5:启用禁用")
+
+    @ApiOperation(value = "添加角色 [by:songxl]")
     @PostMapping("/addRole")
-    public CommonResult<Boolean> addRole(@RequestBody RoleVO roleVO) {
-        return CommonResult.success(roleManagementFacade.CRUDOperation(roleVO));
+    @Transactional
+    public CommonResult<Boolean> addRole(@RequestBody @Valid AddRoleVO addRoleVO) {
+        return CommonResult.success(roleManagementFacade.addRole(addRoleVO));
     }
-    @ApiOperation(value = "修改角色 [by:songxl]",
-            notes = "id:角色id,必填<br>" +
-                    "name:角色名称,必填<br>" +
-                    "softwares:系统服务对象,必填<br>" +
-                    "id:系统服务对象-id,必填<br>" +
-                    "menus:功能菜单列表,必填<br>" +
-                    "id:功能菜单列表-id,必填<br>" +
-                    "status:状态 0:禁用,1:启用,必填<br>" +
-                    "opeType:操作码 1:新增;2:修改 ;3:删除;5:启用禁用")
+
+    @ApiOperation(value = "修改角色 [by:songxl]")
     @PostMapping("/updateRole")
-    public CommonResult<Boolean> updateRole(@RequestBody RoleVO roleVO) {
-        return CommonResult.success(roleManagementFacade.CRUDOperation(roleVO));
+    @Transactional
+    public CommonResult<Boolean> updateRole(@RequestBody @Valid UpdateRoleVO updateRoleVO) {
+        return CommonResult.success(roleManagementFacade.updateRole(updateRoleVO));
     }
-    @ApiOperation(value = "删除角色 [by:songxl]",
-            notes = "id:角色id,必填<br>" +
-                    "opeType:操作码 1:新增;2:修改 ;3:删除;5:启用禁用")
+
+    @ApiOperation(value = "删除角色 [by:songxl]")
     @PostMapping("/deleteRole")
-    public CommonResult<Boolean> deleteRole(@RequestBody RoleVO roleVO) {
-        return CommonResult.success(roleManagementFacade.CRUDOperation(roleVO));
+    @Transactional
+    public CommonResult<Boolean> deleteRole(@RequestParam @Valid @NotNull(message = "角色编号为空") Long roleId) {
+        return CommonResult.success(roleManagementFacade.deleteRole(roleId));
     }
-    @ApiOperation(value = "禁用|启用角色 [by:songxl]",
-            notes = "id:角色id,必填<br>" +
-                    "status:状态 0:禁用,1:启用,必填<br>" +
-                    "opeType:操作码 1:新增;2:修改 ;3:删除;5:启用禁用")
-    @PostMapping("/deleteRole")
-    public CommonResult<Boolean> disableRole(@RequestBody RoleVO roleVO) {
-        return CommonResult.success(roleManagementFacade.CRUDOperation(roleVO));
+
+
+    @ApiOperation(value = "禁用|启用角色 [by:songxl]")
+    @PostMapping("/disableRole")
+    @Transactional
+    public CommonResult<Boolean> disableRole(@RequestParam @Valid @NotNull(message = "角色编号为空") Long roleId,@RequestParam @Valid @NotBlank(message = "启用禁用status为空") String status) {
+        return CommonResult.success(roleManagementFacade.disableRole(roleId,status));
     }
-    @ApiOperation(value = "通过角色id获取角色详情 [by:songxl]",
-            notes = "id:角色id,必填<br>")
+
+    @ApiOperation(value = "通过角色id获取角色详情 [by:songxl]")
     @PostMapping("/getRoleById")
-    public CommonResult<RoleDTO> getRoleById(@RequestBody RoleVO roleVO) {
-        return CommonResult.success(roleManagementFacade.getRoleById(roleVO));
+    public CommonResult<GetRoleDTO> getRoleById(@RequestParam @Valid @NotNull(message = "角色编号为空") Long roleId) {
+        return CommonResult.success(roleManagementFacade.getRoleById(roleId));
+    }
+    @ApiOperation(value = "获取当前登录用户的功能权限树 [by:songxl]")
+    @PostMapping("/getUserMenuResourceTree")
+    public CommonResult<Map<Long,List<UserMenuResourceTreeDTO>>> getUserMenuResourceTree() {
+        return CommonResult.success(roleManagementFacade.getUserMenuResourceTree());
     }
 }