Bladeren bron

权限管理模块-数据权限相关功能

songxinlu 4 jaren geleden
bovenliggende
commit
02063c07d1
34 gewijzigde bestanden met toevoegingen van 1004 en 385 verwijderingen
  1. 49 0
      common/src/main/java/com/lantone/common/dto/DataAuthDTO.java
  2. 53 0
      common/src/main/java/com/lantone/common/dto/DataAuthDetailDTO.java
  3. 55 0
      common/src/main/java/com/lantone/common/dto/DeptDTO.java
  4. 72 0
      common/src/main/java/com/lantone/common/dto/HospitalDTO.java
  5. 1 1
      security-center/src/main/java/com/lantone/security/dto/MenuInfoDTO.java
  6. 46 0
      common/src/main/java/com/lantone/common/dto/RoleDTO.java
  7. 68 0
      common/src/main/java/com/lantone/common/dto/ServiceRoleDataAuthDetailDTO.java
  8. 45 0
      common/src/main/java/com/lantone/common/dto/SysServiceDTO.java
  9. 43 0
      common/src/main/java/com/lantone/common/vo/DataAuthDetailVO.java
  10. 46 0
      common/src/main/java/com/lantone/common/vo/DataAuthVO.java
  11. 46 0
      common/src/main/java/com/lantone/common/vo/RoleVO.java
  12. 2 3
      security-center/src/main/java/com/lantone/security/vo/ServiceDataAuthVO.java
  13. 45 0
      common/src/main/java/com/lantone/common/vo/SysServiceVO.java
  14. 4 4
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/entity/DataAuthDetail.java
  15. 1 1
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/entity/Hospital.java
  16. 14 1
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/DataAuthMapper.java
  17. 2 2
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/UserMapper.java
  18. 43 1
      dblayer-mbg/src/main/resources/mapper/DataAuthMapper.xml
  19. 1 1
      dblayer-mbg/src/main/resources/mapper/UserMapper.xml
  20. 1 1
      dblayer-mbg/src/test/java/com/lantone/dblayermbg/CodeAutoGenerator.java
  21. 2 0
      gateway-service/src/main/resources/application.yml
  22. 1 201
      security-center/src/main/java/com/lantone/security/config/ResourceServerConfigurer.java
  23. 0 81
      security-center/src/main/java/com/lantone/security/dto/HospitalDTO.java
  24. 1 0
      security-center/src/main/java/com/lantone/security/dto/JwtDTO.java
  25. 1 1
      security-center/src/main/java/com/lantone/security/enums/CRUDEnum.java
  26. 56 0
      security-center/src/main/java/com/lantone/security/enums/DataAuthDataTypeEnum.java
  27. 54 0
      security-center/src/main/java/com/lantone/security/enums/HospitalTypeEnum.java
  28. 51 0
      security-center/src/main/java/com/lantone/security/enums/ServiceEnum.java
  29. 168 19
      security-center/src/main/java/com/lantone/security/facade/DataAuthHandleFacade.java
  30. 4 4
      security-center/src/main/java/com/lantone/security/facade/UserLoginFacade.java
  31. 0 11
      security-center/src/main/java/com/lantone/security/facade/UserMenuInfoFacade.java
  32. 0 23
      security-center/src/main/java/com/lantone/security/vo/DataAuthVO.java
  33. 0 24
      security-center/src/main/java/com/lantone/security/vo/SysServiceVO.java
  34. 29 6
      security-center/src/main/java/com/lantone/security/web/DataAuthController.java

+ 49 - 0
common/src/main/java/com/lantone/common/dto/DataAuthDTO.java

@@ -0,0 +1,49 @@
+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;
+
+/**
+ * @ClassName: DataAuthDTO
+ * @Description: 数据权限返回对象
+ * @Author songxl
+ * @Date 2021/7/22
+ * @Version 1.0
+ */
+@Data
+public class DataAuthDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "编号")
+    private Long id;
+
+    @ApiModelProperty(value = "数据权限名称")
+    private String authName;
+
+    @ApiModelProperty(value = "状态 0:禁用,1:启用")
+    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 = "是否删除,N:未删除,Y:删除")
+    private String isDeleted;
+    /**
+     * 系统列表
+     */
+    private List<SysServiceDTO> sysServiceDTOS;
+
+}

+ 53 - 0
common/src/main/java/com/lantone/common/dto/DataAuthDetailDTO.java

@@ -0,0 +1,53 @@
+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;
+
+/**
+ * @ClassName: DataAuthDetailDTO
+ * @Description:
+ * @Author songxl
+ * @Date 2021/7/22
+ * @Version 1.0
+ */
+@Data
+public class DataAuthDetailDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "编号")
+    private Long id;
+
+    @ApiModelProperty(value = "数据权限编号")
+    private Long serviceDataAuthId;
+
+    @ApiModelProperty(value = "数据范围类型::1:全部组织,2:全部科室,3:全部科室除本科室外,4:本科室,5:本医疗组,6:本人,7:自定义")
+    private Integer dataType;
+
+    @ApiModelProperty(value = "detail_id的类型 1:detail_id为医院id 2:为科室id3:为医生id")
+    private Integer detailType;
+
+    @ApiModelProperty(value = "医院、科室、医生id")
+    private Long detailId;
+
+    @ApiModelProperty(value = "创建用户编号")
+    private Long creator;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "是否删除,N:未删除,Y:删除")
+    private String isDeleted;
+
+    /**
+     * 可看组织
+     */
+
+    private HospitalDTO hospitalDTOS;
+    /**
+     * 可看医生列表
+     */
+}

+ 55 - 0
common/src/main/java/com/lantone/common/dto/DeptDTO.java

@@ -0,0 +1,55 @@
+package com.lantone.common.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @ClassName: DeptDTO
+ * @Description: 科室返回对象
+ * @Author songxl
+ * @Date 2021/7/22
+ * @Version 1.0
+ */
+@Data
+public class DeptDTO 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;
+}

+ 72 - 0
common/src/main/java/com/lantone/common/dto/HospitalDTO.java

@@ -0,0 +1,72 @@
+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;
+
+/**
+ * <p>
+ * 用户组织对象
+ * </p>
+ */
+@Data
+public class HospitalDTO 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;
+
+
+    /**
+     * 用户在该组织下的角色列表
+     */
+    private List<RoleDTO> roles;
+    /**
+     * 该医院的科室列表
+     */
+    private List<DeptDTO> depts;
+
+    /**
+     * 该虚拟医院的医院列表
+     */
+    private List<HospitalDTO> hospitalDTOS;
+    /**
+     * 关联标志位 true 关联
+     */
+    private boolean relationStatus;
+}

+ 1 - 1
security-center/src/main/java/com/lantone/security/dto/MenuInfoDTO.java

@@ -1,4 +1,4 @@
-package com.lantone.security.dto;
+package com.lantone.common.dto;
 
 
 

+ 46 - 0
common/src/main/java/com/lantone/common/dto/RoleDTO.java

@@ -0,0 +1,46 @@
+package com.lantone.common.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @ClassName: RoleDTO
+ * @Description: 角色输出对象
+ * @Author songxl
+ * @Date 2021/7/22
+ * @Version 1.0
+ */
+@Data
+public class RoleDTO 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;
+}

+ 68 - 0
common/src/main/java/com/lantone/common/dto/ServiceRoleDataAuthDetailDTO.java

@@ -0,0 +1,68 @@
+package com.lantone.common.dto;
+
+import lombok.Data;
+
+/**
+ * @ClassName: ServiceRoleDataAuthDetailDTO
+ * @Description: 服务、角色、数据权限明细关联对象
+ * @Author songxl
+ * @Date 2021/7/22
+ * @Version 1.0
+ */
+@Data
+public class ServiceRoleDataAuthDetailDTO {
+    /**
+     * 服务、角色、数据权限关联id
+     */
+    private Long serviceRoleDataAuthDetailId;
+    /**
+     * 系统数据权限id
+     */
+    private Long serviceDataAuthId;
+    /**
+     * 数据权限详情id
+     */
+    private Long detail;
+    /**
+     * 数据权限id
+     */
+    private Long dataAuthId;
+    /**
+     * 数据权限名称
+     */
+    private String dataAuthName;
+    /**
+     * 数据权限启用禁用状态
+     */
+    private String status;
+    /**
+     * 数据范围类型::1:全部组织,2:全部科室,3:全部科室除本科室外,4:本科室,5:本医疗组,6:本人,7:自定义
+     */
+    private Integer dataType;
+    /**
+     * detail_id的类型 1:detail_id为医院id 2:为科室id3:为医生id
+     */
+    private Integer detailType;
+    /**
+     * 医院、科室、医生id
+     */
+    private Long detailId;
+    /**
+     * 系统id
+     */
+    private Long serviceId;
+
+    /**
+     * 系统名称
+     */
+    private String serviceName;
+    /**
+     * 角色id
+     */
+    private Long roleId;
+    /**
+     * 角色名称
+     */
+    private String roleName;
+
+}

+ 45 - 0
common/src/main/java/com/lantone/common/dto/SysServiceDTO.java

@@ -0,0 +1,45 @@
+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;
+
+/**
+ * @ClassName: SysServiceVO
+ * @Description: 系统服务对象
+ * @Author songxl
+ * @Date 2021/7/21
+ * @Version 1.0
+ */
+@Data
+public class SysServiceDTO 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 = "创建用户编号")
+    private Long creator;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "排序")
+    private String orderNo;
+
+    @ApiModelProperty(value = "是否删除,N:未删除,Y:删除")
+    private String isDeleted;
+    @ApiModelProperty(value = "数据权限详情列表")
+    private List<DataAuthDetailDTO> dataAuthDetailDTOS;
+    @ApiModelProperty(value = "角色列表")
+    private List<RoleDTO> roles;
+}

+ 43 - 0
common/src/main/java/com/lantone/common/vo/DataAuthDetailVO.java

@@ -0,0 +1,43 @@
+package com.lantone.common.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @ClassName: DataAuthDetailVO
+ * @Description: 数据权限详情
+ * @Author songxl
+ * @Date 2021/7/22
+ * @Version 1.0
+ */
+@Data
+public class DataAuthDetailVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "编号")
+    private Long id;
+
+    @ApiModelProperty(value = "数据权限编号")
+    private Long serviceDataAuthId;
+
+    @ApiModelProperty(value = "数据范围类型::1:全部组织,2:全部科室,3:全部科室除本科室外,4:本科室,5:本医疗组,6:本人,7:自定义")
+    private Integer dataType;
+
+    @ApiModelProperty(value = "detail_id的类型 1:detail_id为医院id 2:为科室id3:为医生id")
+    private Integer detailType;
+
+    @ApiModelProperty(value = "医院、科室、医生id")
+    private Long detailId;
+
+    @ApiModelProperty(value = "创建用户编号")
+    private Long creator;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "是否删除,N:未删除,Y:删除")
+    private String isDeleted;
+}

+ 46 - 0
common/src/main/java/com/lantone/common/vo/DataAuthVO.java

@@ -0,0 +1,46 @@
+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: DataAuthVO
+ * @Description: 数据权限对象
+ * @Author songxl
+ * @Date 2021/7/21
+ * @Version 1.0
+ */
+@Data
+public class DataAuthVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "编号")
+    private Long id;
+
+    @ApiModelProperty(value = "数据权限名称")
+    private String authName;
+
+    @ApiModelProperty(value = "状态 0:禁用,1:启用")
+    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 = "是否删除,N:未删除,Y:删除")
+    private String isDeleted;
+    @ApiModelProperty("系统列表")
+    private List<SysServiceVO> serviceVOS;
+}

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

@@ -0,0 +1,46 @@
+package com.lantone.common.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @ClassName: RoleVO
+ * @Description: 角色对象
+ * @Author songxl
+ * @Date 2021/7/22
+ * @Version 1.0
+ */
+@Data
+public class RoleVO 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;
+}

+ 2 - 3
security-center/src/main/java/com/lantone/security/vo/ServiceDataAuthVO.java

@@ -1,6 +1,5 @@
-package com.lantone.security.vo;
+package com.lantone.common.vo;
 
-import com.lantone.dblayermbg.entity.Role;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -24,7 +23,7 @@ public class ServiceDataAuthVO {
      * 角色列表
      */
     @ApiModelProperty("角色列表")
-    private List<Role> roles;
+    private List<RoleVO> roles;
     /**
      * 操作码 1:新增;2:修改
      */

+ 45 - 0
common/src/main/java/com/lantone/common/vo/SysServiceVO.java

@@ -0,0 +1,45 @@
+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: SysServiceVO
+ * @Description: 系统服务对象
+ * @Author songxl
+ * @Date 2021/7/21
+ * @Version 1.0
+ */
+@Data
+public class SysServiceVO 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 = "创建用户编号")
+    private Long creator;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @ApiModelProperty(value = "排序")
+    private String orderNo;
+
+    @ApiModelProperty(value = "是否删除,N:未删除,Y:删除")
+    private String isDeleted;
+    @ApiModelProperty(value = "数据权限详情列表")
+    private List<DataAuthDetailVO> dataAuthDetailVOS;
+    @ApiModelProperty(value = "角色列表")
+    private List<RoleVO> roles;
+}

+ 4 - 4
dblayer-mbg/src/main/java/com/lantone/dblayermbg/entity/DataAuthDetail.java

@@ -4,9 +4,9 @@ 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 lombok.Data;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -33,15 +33,15 @@ public class DataAuthDetail implements Serializable {
 
     @ApiModelProperty(value = "数据范围类型::1:全部组织,2:全部科室,3:全部科室除本科室外,4:本科室,5:本医疗组,6:本人,7:自定义")
     @TableField("data_type")
-    private String dataType;
+    private Integer dataType;
 
     @ApiModelProperty(value = "detail_id的类型 1:detail_id为医院id 2:为科室id3:为医生id")
     @TableField("detail_type")
-    private String detailType;
+    private Integer detailType;
 
     @ApiModelProperty(value = "医院、科室、医生id")
     @TableField("detail_id")
-    private String detailId;
+    private Long detailId;
 
     @ApiModelProperty(value = "创建用户编号")
     @TableField("creator")

+ 1 - 1
dblayer-mbg/src/main/java/com/lantone/dblayermbg/entity/Hospital.java

@@ -46,7 +46,7 @@ public class Hospital implements Serializable {
     @TableField("region")
     private String region;
 
-    @ApiModelProperty(value = "组织类型(集团医院、医共、医联、医院)")
+    @ApiModelProperty(value = "组织类型(0:AI病案质控平台 1:集团医院 2:医共 3:医联 4:医院)")
     @TableField("type")
     private String type;
 

+ 14 - 1
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/DataAuthMapper.java

@@ -1,7 +1,12 @@
 package com.lantone.dblayermbg.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lantone.common.dto.ServiceRoleDataAuthDetailDTO;
+import com.lantone.common.vo.ServiceDataAuthVO;
 import com.lantone.dblayermbg.entity.DataAuth;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -9,6 +14,14 @@ import com.lantone.dblayermbg.entity.DataAuth;
  * </p>
  */
 public interface DataAuthMapper extends BaseMapper<DataAuth> {
-
+    /**
+     * @Author songxl
+     * @Description 通过数据权限id和角色id获取数据权限详情
+     * @Date  2021/7/22
+     * @Param [serviceDataAuthVO]
+     * @Return com.lantone.security.dto.ServiceRoleDataAuthDetailDTO
+     * @MethodName getDataAuthById
+     */
+    List<ServiceRoleDataAuthDetailDTO> getDataAuthById(@Param("serviceDataAuthVO") ServiceDataAuthVO serviceDataAuthVO);
 }
 

+ 2 - 2
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/UserMapper.java

@@ -1,8 +1,8 @@
 package com.lantone.dblayermbg.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lantone.common.dto.RoleDTO;
 import com.lantone.dblayermbg.entity.Hospital;
-import com.lantone.dblayermbg.entity.Role;
 import com.lantone.dblayermbg.entity.User;
 import org.apache.ibatis.annotations.Param;
 
@@ -17,6 +17,6 @@ public interface UserMapper extends BaseMapper<User> {
     List<User> getalle();
     List<Hospital> getUserOrganizeByUserID(Long userID);
 
-    List<Role> getUserRoleByUserID(@Param("userID") Long userID, @Param("organizeId")Long organizeId);
+    List<RoleDTO> getUserRoleByUserID(@Param("userID") Long userID, @Param("organizeId")Long organizeId);
 }
 

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

@@ -1,5 +1,47 @@
 <?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.DataAuthMapper">
-
+    <select id="getDataAuthById"  resultType="com.lantone.common.dto.ServiceRoleDataAuthDetailDTO">
+        SELECT
+            rsd.id serviceRoleDataAuthDetailId,
+            sd.id serviceDataAuthId,
+            sd.service_id serviceId,
+            s.`name` serviceName,
+            r.id roleId,
+            r.`name` roleName,
+            sd.data_auth_id dataAuthId,
+            d.auth_name dataAuthName,
+            d.`status`,
+            detail.data_type dataType,
+            detail.detail_type detailType,
+            detail.detail_id detailId
+        FROM
+            sys_role r,
+            sys_service s,
+            sys_role_service_data_auth rsd,
+            sys_data_auth d,
+            sys_service_data_auth sd
+        LEFT JOIN sys_data_auth_detail detail ON sd.id = detail.service_data_auth_id
+        WHERE
+            r.id = rsd.role_id
+            AND r.`status` = '1'
+            AND d.`status` = '1'
+            AND s.id = sd.service_id
+            AND rsd.service_data_auth_id = sd.id
+            AND sd.data_auth_id = d.id
+            AND r.is_deleted = 'N'
+            AND s.is_deleted = 'N'
+            AND rsd.is_deleted = 'N'
+            AND d.is_deleted = 'N'
+            AND sd.is_deleted = 'N'
+        <if test="serviceDataAuthVO.roles !=null and serviceDataAuthVO.roles.size!=0">
+            AND rsd.role_id in
+            <foreach collection="serviceDataAuthVO.roles" item="role" open="(" close=")" separator=",">
+                #{role.id}
+            </foreach>
+        </if>
+        <if test="serviceDataAuthVO.dataAuthVO.id != null ">
+            AND d.id = #{serviceDataAuthVO.dataAuthVO.id}
+        </if>
+    </select>
 </mapper>

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

@@ -24,7 +24,7 @@
             AND u.id = #{userID}
         </if>
     </select>
-    <select id="getUserRoleByUserID" resultType="com.lantone.dblayermbg.entity.Role">
+    <select id="getUserRoleByUserID" resultType="com.lantone.common.dto.RoleDTO">
         SELECT
         r.*
         FROM

+ 1 - 1
dblayer-mbg/src/test/java/com/lantone/dblayermbg/CodeAutoGenerator.java

@@ -20,7 +20,7 @@ public class CodeAutoGenerator {
      * 表名
      */
     private static String[] TABLES = {
-            "sys_service"
+            "sys_data_auth_detail"
     };
     /**
      * 生成的实体类忽略表前缀: 不需要则置空

+ 2 - 0
gateway-service/src/main/resources/application.yml

@@ -9,4 +9,6 @@ exclusion:
     - /oauth/token
     - /oauth/check_token
     - /cache/clear
+    - /data/auth/getDataAuthById
+    - /data/auth/addAuth
 

+ 1 - 201
security-center/src/main/java/com/lantone/security/config/ResourceServerConfigurer.java

@@ -37,207 +37,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .csrf().disable()
                 .authorizeRequests()
                 .regexMatchers(".*swagger.*", ".*v2.*", ".*webjars.*", "/druid.*", "/actuator.*", "/hystrix.*").permitAll()
-                .antMatchers("/sys/user/getJwt").permitAll()
-                .antMatchers("/sys/user/getJwtNoPass").permitAll()
-                .antMatchers("/sys/user/refreshJwt").permitAll()
-                .antMatchers("/sys/user/checkToken").permitAll()
-                .antMatchers("/sys/dictionaryInfo/getDictionary").permitAll()
-                .antMatchers("/oauth/token").permitAll()
-                .antMatchers("/oauth/check_token").permitAll()
-                .antMatchers("/cache/clear").permitAll()
-                .antMatchers("/qc/behospitalInfo/execule").permitAll()
-                .antMatchers("/qc/behospitalInfo/analyze_rpc").permitAll()
-                .antMatchers("/qc/behospitalInfo/analyze_api").permitAll()
-                .antMatchers("/qc/behospitalInfo/analyze_run").permitAll()
-                .antMatchers("/qc/module/getById").permitAll()
-                .antMatchers("/qc/module/getModuleMap").permitAll()
-                .antMatchers("/qc/cases/getQcCases").permitAll()
-                .antMatchers("/qc/behospitalInfo/page").permitAll()
-                .antMatchers("/qc/casesEntryHospital/getQcCasesEntryAll").permitAll()
-                .antMatchers("/qc/casesEntryHospital/getQcCasesAll").permitAll()
-                .antMatchers("/qc/behospitalInfo/getByBehospitalCode").permitAll()
-                .antMatchers("/bas/dept/getList").permitAll()
-                .antMatchers("/bas/dept/getListUser").permitAll()
-                .antMatchers("/qc/behospitalInfo/page_dept").permitAll()
-                .antMatchers("/qc/behospitalInfo/page_person").permitAll()
-                .antMatchers("/qc/behospitalInfo/page_group").permitAll()
-                .antMatchers("/qc/casesEntryHospital/findQcCasesEntry").permitAll()
-                .antMatchers("/qc/dataimport/import").permitAll()
-                .antMatchers("/qc/dataimport/test").permitAll()
-                .antMatchers("/qc/behospitalInfo/exportExcel").permitAll()
-                .antMatchers("/qc/behospitalInfo/exportQcresult").permitAll()
-                .antMatchers("/qc/behospitalInfo/exportQcresultByDept").permitAll()
-                .antMatchers("/qc/behospitalInfo/exportQcresultByGroup").permitAll()
-                .antMatchers("/qc/abnormal/getQcAnnormalMode").permitAll()
-                .antMatchers("/qc/dataimport/import").permitAll()
-                .antMatchers("/qc/dataimport/dataimportPrepare").permitAll()
-                .antMatchers("/qc/dataimport/test").permitAll()
-                .antMatchers("/sys/user/pageset/getPageSet").permitAll()
-                .antMatchers("/sys/user/pageset/savePageSet").permitAll()
-                .antMatchers("/sys/user/pageset/getDefultPageSet").permitAll()
-                .antMatchers("/consoleByDept/getDept").permitAll()
-                .antMatchers("/console/entryRejectPercent").permitAll()
-                .antMatchers("/console/qcResultLevelPercent").permitAll()
-                .antMatchers("/console/averageStatistics").permitAll()
-                .antMatchers("/console/entryByDept").permitAll()
-                .antMatchers("/console/entryCountGroupByCase").permitAll()
-                .antMatchers("/console/entryCountGroupByCasePage").permitAll()
-                .antMatchers("/console/entryCountGroupByEntry").permitAll()
-                .antMatchers("/console/entryCountGroupByEntryPage").permitAll()
-                .antMatchers("/console/entryGroupByEntryInnerPage").permitAll()
-                .antMatchers("/console/getAverageDayNum").permitAll()
-                .antMatchers("/console/getAverageDayNumPage").permitAll()
-                .antMatchers("/console/getAverageFee").permitAll()
-                .antMatchers("/console/getAverageFeePage").permitAll()
-                .antMatchers("/console/getAverageScore").permitAll()
-                .antMatchers("/console/getAverageScoreByDeptClass").permitAll()
-                .antMatchers("/console/getAverageScoreByDeptPage").permitAll()
-                .antMatchers("/console/getLevelResultDept").permitAll()
-                .antMatchers("/console/homePageLevelLimit").permitAll()
-                .antMatchers("/console/homePageLevelStatistics").permitAll()
-                .antMatchers("/console/leaveHosCount").permitAll()
-                .antMatchers("/console/medicalRecordIndicator").permitAll()
-                .antMatchers("/console/codingMonthly").permitAll()
-                .antMatchers("/console/levelPercentGroupByDeptPage").permitAll()
-                .antMatchers("/console/levelStatistics").permitAll()
-                .antMatchers("/console/levelStatisticsByDeptClass").permitAll()
-                .antMatchers("/console/mrCount").permitAll()
-                .antMatchers("/console/mrStatistics").permitAll()
-                .antMatchers("/console/qcResultShortPage").permitAll()
-                .antMatchers("/console/resultStatistics").permitAll()
-                .antMatchers("/console/resultStatisticsByDeptPage").permitAll()
-                .antMatchers("/console/homePageMRCount").permitAll()
-                .antMatchers("/console/qcCheckStatistics").permitAll()
-                .antMatchers("/console/unModifyMRStatistics").permitAll()
-                .antMatchers("/console/unModifyMRPage").permitAll()
-                .antMatchers("/console/reHos31DaysPage").permitAll()
-                .antMatchers("/console/beHosCount").permitAll()
-                .antMatchers("/console/casesEntryStatisticsById").permitAll()
-                .antMatchers("/console/hmImproveMRPage").permitAll()
-                .antMatchers("/console/qcCheckMRPage").permitAll()
-                .antMatchers("/consoleByDept/entryCountGroupByCaseAndDept").permitAll()
-                .antMatchers("/consoleByDept/entryCountGroupByCaseAndDeptPage").permitAll()
-                .antMatchers("/consoleByDept/entryCountGroupByEntryAndDept").permitAll()
-                .antMatchers("/consoleByDept/entryCountGroupByEntryAndDeptPage").permitAll()
-                .antMatchers("/consoleByDept/entryGroupByEntryAndDeptInnerPage").permitAll()
-                .antMatchers("/consoleByDept/homePageLevelByDeptLimit").permitAll()
-                .antMatchers("/consoleByDept/homePageLevelStatisticsByDept").permitAll()
-                .antMatchers("/consoleByDept/leaveHosCountByDept").permitAll()
-                .antMatchers("/consoleByDept/levelStatisticsByDept").permitAll()
-                .antMatchers("/consoleByDept/mrCountByDept").permitAll()
-                .antMatchers("/consoleByDept/qcResultShortByDeptPage").permitAll()
-                .antMatchers("/consoleByDept/resultStatisticsByDeptAndDoctorPage").permitAll()
-                .antMatchers("/console/export/homePageLevelExport").permitAll()
-                .antMatchers("/console/export/entryGroupByEntryExport").permitAll()
-                .antMatchers("/console/export/levelExport").permitAll()
-                .antMatchers("/console/entryStatistics").permitAll()
-                .antMatchers("/console/export/levelExport_TZ").permitAll()
-                .antMatchers("/console/export/getAverageDayNumExport").permitAll()
-                .antMatchers("/console/export/getAverageFeeExport").permitAll()
-                .antMatchers("/console/export/levelPercentGroupByDeptExport").permitAll()
-                .antMatchers("/console/export/entryCountGroupByEntryExport").permitAll()
-                .antMatchers("/console/export/entryCountGroupByCaseExport").permitAll()
-                .antMatchers("/console/export/entryStatisticsExport").permitAll()
-                .antMatchers("/console/export/qcResultShortPageExport").permitAll()
-                .antMatchers("/console/export/leaveHosMrPageExport").permitAll()
-                .antMatchers("/console/export/qcCheckStatisticsExport").permitAll()
-                .antMatchers("/console/export/unModifyMRPageExport").permitAll()
-                .antMatchers("/console/export/unModifyMRStatisticsExport").permitAll()
-                .antMatchers("/console/export/reHos31DaysPageExport").permitAll()
-                .antMatchers("/console/export/hmImproveMRPageExport").permitAll()
-                .antMatchers("/console/export/qcCheckMRPageExport").permitAll()
-                .antMatchers("/qc/data/sendDoctorInfos").permitAll()
-                .antMatchers("/qc/data/sendDeptInfos").permitAll()
-                .antMatchers("/qc/data/sendRecordTypes").permitAll()
-                .antMatchers("/qc/data/sendMrRecordIng").permitAll()
-                .antMatchers("/qc/data/sendMrContent").permitAll()
-                .antMatchers("/qc/data/sendMrRecord").permitAll()
-                .antMatchers("/qc/data/sendPatientInfo").permitAll()
-                .antMatchers("/qc/data/sendDoctorAdvice").permitAll()
-                .antMatchers("/qc/data/sendHomePageIng").permitAll()
-                .antMatchers("/qc/data/sendHomePage").permitAll()
-                .antMatchers("/qc/data/sendHomeDiagnose").permitAll()
-                .antMatchers("/qc/data/sendHomeOperation").permitAll()
-                .antMatchers("/qc/data/sendCrisis").permitAll()
-                .antMatchers("/qc/data/deleteFlag").permitAll()
-                .antMatchers("/qc/data/placeFile").permitAll()
-                .antMatchers("/qc/data/sendLisResults").permitAll()
-                .antMatchers("/qc/data/sendPacsResults").permitAll()
-                .antMatchers("/qc/data/getColumnZhAndCh").permitAll()
-                .antMatchers("/qc/data/analyseRec").permitAll()
-                .antMatchers("/qc/data/hisDataDeal").permitAll()
-                .antMatchers("/qc/data_str/sendAdmissionNote").permitAll()
-                .antMatchers("/qc/data_str/sendBloodResult").permitAll()
-                .antMatchers("/qc/data_str/sendBloodTransfusion").permitAll()
-                .antMatchers("/qc/data_str/sendConsultationApply").permitAll()
-                .antMatchers("/qc/data_str/sendConsultationNote").permitAll()
-                .antMatchers("/qc/data_str/sendConsultationRecord").permitAll()
-                .antMatchers("/qc/data_str/sendConsultationResult").permitAll()
-                .antMatchers("/qc/data_str/sendCrisisNote").permitAll()
-                .antMatchers("/qc/data_str/sendDeathDiscussion").permitAll()
-                .antMatchers("/qc/data_str/sendDeathNote").permitAll()
-                .antMatchers("/qc/data_str/sendDifficultCase").permitAll()
-                .antMatchers("/qc/data_str/sendFirstRecord").permitAll()
-                .antMatchers("/qc/data_str/sendIllCritically").permitAll()
-                .antMatchers("/qc/data_str/sendIllSeriousl").permitAll()
-                .antMatchers("/qc/data_str/sendLeaveHospital").permitAll()
-                .antMatchers("/qc/data_str/sendOperativeFirstRecord").permitAll()
-                .antMatchers("/qc/data_str/sendOperativeNote").permitAll()
-                .antMatchers("/qc/data_str/sendWardRecord").permitAll()
-                .antMatchers("/qc/data_str/sendTransferOutNote").permitAll()
-                .antMatchers("/qc/data_str/sendTransferInNote").permitAll()
-                .antMatchers("/qc/data_str/sendRescueNote").permitAll()
-                .antMatchers("/qc/data_str/sendPeriodConclusion").permitAll()
-                .antMatchers("/qc/data_str/sendPreoperativeDiscussion").permitAll()
-                .antMatchers("/qc/data_str/sendTalkInform").permitAll()
-                .antMatchers("/qc/data_str/sendInformedConsent").permitAll()
-                .antMatchers("/qc/data_str/sendContent").permitAll()
-                .antMatchers("/qc/doctoradvice/getPage").permitAll()
-                .antMatchers("/qc/medPacsInfo/getCheckPage").permitAll()
-                .antMatchers("/qc/medLisInfo/getExaminePage").permitAll()
-                .antMatchers("/qc/medLisInfo/getExamineSonPage").permitAll()
-                .antMatchers("/console/medicalCheckForm").permitAll()
-                .antMatchers("/qc/behospitalInfo/analyzeCds").permitAll()
-                .antMatchers("/console/medicalCheckTitle").permitAll()
-                .antMatchers("/console/export/medicalCheckExport").permitAll()
-                .antMatchers("/console/export/medicalCheckInnerExport").permitAll()
-                .antMatchers("/console/badLevelPage").permitAll()
-                .antMatchers("/console/export/badLevelPagePageExport").permitAll()
-                .antMatchers("/qc/medNurse/getMedNursePage").permitAll()
-                .antMatchers("/qc/behospitalInfo/exportQcresultByPerson").permitAll()
-                .antMatchers("/consoleByDept/beHosCountByDept").permitAll()
-                .antMatchers("/consoleByDept/casesEntryStatisticsByDept").permitAll()
-                .antMatchers("/bas/doctor/getList").permitAll()
-                .antMatchers("/consoleByDept/homePageOrGoodLevelByDept").permitAll()
-                .antMatchers("/print/export/homePageLevelExportByDept").permitAll()
-                .antMatchers("/print/export/homePageOrLevelExportByDept").permitAll()
-                .antMatchers("/print/export/entryGroupExportByDeptPage").permitAll()
-                .antMatchers("/print/export/entryGroupExportByDeptCase").permitAll()
-                .antMatchers("/print/export/entryGroupExportByDeptEntry").permitAll()
-                .antMatchers("/print/export/qcResultShortExportByDeptPage").permitAll()
-                .antMatchers("/print/export/levelExportByDept").permitAll()
-                .antMatchers("/consoleByDept/entryStatisticsByDept").permitAll()
-                .antMatchers("/print/export/entryStatisticsExportByDept").permitAll()
-                .antMatchers("/consoleByDept/leaveHosMRPageByDept").permitAll()
-                .antMatchers("/print/export/leaveHosMrPageExportByDept").permitAll()
-                .antMatchers("/consoleByDept/qcCheckStatisticsByDept").permitAll()
-                .antMatchers("/print/export/qcCheckStaExportByDept").permitAll()
-                .antMatchers("/consoleByDept/qcCheckMRPageByDept").permitAll()
-                .antMatchers("/print/export/qcCheckMRPageExportByDept").permitAll()
-                .antMatchers("/consoleByDept/hmImproveMRPageByDept").permitAll()
-                .antMatchers("/print/export/improveMRExportByDept").permitAll()
-                .antMatchers("/consoleByDept/reHos31DaysPageByDept").permitAll()
-                .antMatchers("/print/export/reHos31DaysPageExportByDept").permitAll()
-                .antMatchers("/consoleByDept/unModifyMRSByDept").permitAll()
-                .antMatchers("/print/export/unModifyMRSExportByDept").permitAll()
-                .antMatchers("/consoleByDept/unModifyMRPageByDept").permitAll()
-                .antMatchers("/print/export/unModifyMRPageExportByDept").permitAll()
-                .antMatchers("/consoleByDept/medicalCheckFormKs").permitAll()
-                .antMatchers("/print/export/medicalCheckExportByDept").permitAll()
-                .antMatchers("/consoleByDept/medicalCheckTitleKs").permitAll()
-                .antMatchers("/qc/medCheckInfo/createMedBeHospitalInfoType").permitAll()
-                .antMatchers("/**").authenticated();
-        //                .antMatchers("/**").permitAll();
+                .antMatchers("/**").permitAll();
     }
     @Override
     public void configure(ResourceServerSecurityConfigurer resources) throws Exception {

+ 0 - 81
security-center/src/main/java/com/lantone/security/dto/HospitalDTO.java

@@ -1,81 +0,0 @@
-package com.lantone.security.dto;
-
-import com.lantone.dblayermbg.entity.Role;
-import lombok.Data;
-import java.util.Date;
-import java.util.List;
-
-/**
- * <p>
- * 用户组织对象
- * </p>
- */
-@Data
-public class HospitalDTO {
-
-
-    /**
-     * 编号
-     */
-    private Long id;
-
-    /**
-     * 组织编号
-     */
-    private String organizeId;
-
-    /**
-     * 父级编号
-     */
-    private String parentId;
-
-    /**
-     * 名称
-     */
-    private String name;
-
-    /**
-     * 归属区域
-     */
-    private String region;
-
-    /**
-     * 组织编码
-     */
-    private String code;
-
-    /**
-     * 组织类型(集团医院、医共、医联、医院)
-     */
-    private String type;
-
-    /**
-     * 排序
-     */
-    private String orderNo;
-
-    /**
-     * 状态 0:禁用,1:启用
-     */
-    private String status;
-
-    /**
-     * 创建者编号
-     */
-    private Long creator;
-
-    /**
-     * 创建时间
-     */
-    private Date createTime;
-
-    /**
-     * 是否删除,N:未删除,Y:删除
-     */
-    private String isDeleted;
-
-    /**
-     * 用户在该组织下的角色列表
-     */
-    private List<Role> roles;
-}

+ 1 - 0
security-center/src/main/java/com/lantone/security/dto/JwtDTO.java

@@ -1,5 +1,6 @@
 package com.lantone.security.dto;
 
+import com.lantone.common.dto.HospitalDTO;
 import lombok.Getter;
 import lombok.Setter;
 

+ 1 - 1
security-center/src/main/java/com/lantone/security/enums/CRUDEnum.java

@@ -43,7 +43,7 @@ public enum CRUDEnum implements KeyedNamed {
 
     @Override
     public int getKey() {
-        return 0;
+        return key;
     }
 
     @Override

+ 56 - 0
security-center/src/main/java/com/lantone/security/enums/DataAuthDataTypeEnum.java

@@ -0,0 +1,56 @@
+package com.lantone.security.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @ClassName: DataAuthDataTypeEnum
+ * @Description: 数据权限数据范围类型注解
+ * @Author songxl
+ * @Date 2021/7/21
+ * @Version 1.0
+ */
+public enum DataAuthDataTypeEnum implements KeyedNamed {
+    ALL_HOSPITAL(1, "全部组织"),
+    ALL_DEPT(2, "全部科室"),
+    ALL_DEPT_NOT_SELF(3, "全部科室除本科室外"),
+    ALL_SELF_DEPT(4, "本科室"),
+    SELF_MEDOUP(5, "本医疗组"),
+    SELF(6, "本人"),
+    CUSTOMIZE(7, "自定义");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    DataAuthDataTypeEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static DataAuthDataTypeEnum getEnum(int key) {
+        for (DataAuthDataTypeEnum item : DataAuthDataTypeEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        DataAuthDataTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return null;
+    }
+}

+ 54 - 0
security-center/src/main/java/com/lantone/security/enums/HospitalTypeEnum.java

@@ -0,0 +1,54 @@
+package com.lantone.security.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @ClassName: CRUDEnum
+ * @Description: 组织类型注解
+ * @Author songxl
+ * @Date 2021/7/21
+ * @Version 1.0
+ */
+public enum HospitalTypeEnum implements KeyedNamed {
+    AI_PLATFORM(0, "AI病案质控平台"),
+    GROUP_HOSPITAL(1, "集团医院"),
+    COMMON_HOSPITAL(2, "医共体"),
+    UNION_HOSPITAL(3, "医联体"),
+    SINGLE_HOSPITAL(4, "单家医院");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    HospitalTypeEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static HospitalTypeEnum getEnum(int key) {
+        for (HospitalTypeEnum item : HospitalTypeEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        HospitalTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return null;
+    }
+}

+ 51 - 0
security-center/src/main/java/com/lantone/security/enums/ServiceEnum.java

@@ -0,0 +1,51 @@
+package com.lantone.security.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @ClassName: CRUDEnum
+ * @Description: 服务注解
+ * @Author songxl
+ * @Date 2021/7/21
+ * @Version 1.0
+ */
+public enum ServiceEnum implements KeyedNamed {
+    AI_END_SERVICE(1, "AI终末质控系统"),
+    AI_RUN_SERVICE(2, "AI运行质控系统");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    ServiceEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static ServiceEnum getEnum(int key) {
+        for (ServiceEnum item : ServiceEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(int key) {
+        ServiceEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return null;
+    }
+}

+ 168 - 19
security-center/src/main/java/com/lantone/security/facade/DataAuthHandleFacade.java

@@ -4,28 +4,46 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
+import com.lantone.common.dto.DataAuthDTO;
+import com.lantone.common.dto.DataAuthDetailDTO;
+import com.lantone.common.dto.HospitalDTO;
+import com.lantone.common.dto.RoleDTO;
+import com.lantone.common.dto.ServiceRoleDataAuthDetailDTO;
+import com.lantone.common.dto.SysServiceDTO;
 import com.lantone.common.util.DateUtil;
 import com.lantone.common.util.ListUtil;
 import com.lantone.common.util.StringUtil;
+import com.lantone.common.vo.DataAuthDetailVO;
+import com.lantone.common.vo.RoleVO;
+import com.lantone.common.vo.ServiceDataAuthVO;
+import com.lantone.common.vo.SysServiceVO;
 import com.lantone.dblayermbg.entity.DataAuth;
 import com.lantone.dblayermbg.entity.DataAuthDetail;
-import com.lantone.dblayermbg.entity.Role;
+import com.lantone.dblayermbg.entity.Hospital;
 import com.lantone.dblayermbg.entity.RoleServiceDataAuth;
 import com.lantone.dblayermbg.entity.ServiceDataAuth;
 import com.lantone.dblayermbg.facade.DataAuthDetailFacade;
 import com.lantone.dblayermbg.facade.DataAuthFacade;
+import com.lantone.dblayermbg.facade.DeptFacade;
+import com.lantone.dblayermbg.facade.HospitalFacade;
 import com.lantone.dblayermbg.facade.RoleServiceDataAuthFacade;
 import com.lantone.dblayermbg.facade.ServiceDataAuthFacade;
 import com.lantone.dblayermbg.service.impl.DataAuthServiceImpl;
 import com.lantone.security.enums.CRUDEnum;
-import com.lantone.security.util.SysUserUtils;
-import com.lantone.security.vo.ServiceDataAuthVO;
-import com.lantone.security.vo.SysServiceVO;
+import com.lantone.security.enums.DataAuthDataTypeEnum;
+import com.lantone.security.enums.HospitalTypeEnum;
+import com.lantone.security.enums.ServiceEnum;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
+
 
 /**
  * @ClassName: DataAuthHandleFacade
@@ -44,6 +62,10 @@ public class DataAuthHandleFacade extends DataAuthServiceImpl {
     private RoleServiceDataAuthFacade roleServiceDataAuthFacade;
     @Autowired
     private DataAuthDetailFacade dataAuthDetailFacade;
+    @Autowired
+    private HospitalFacade hospitalFacade;
+    @Autowired
+    private DeptFacade deptFacade;
 
     /**
      * @Author songxl
@@ -54,23 +76,23 @@ public class DataAuthHandleFacade extends DataAuthServiceImpl {
      * @MethodName addOrUpdate
      */
     @Transactional
-    public void addOrUpdate(ServiceDataAuthVO serviceDataAuthVO) {
+    public boolean addOrUpdate(ServiceDataAuthVO serviceDataAuthVO) {
         //1.入参校验
         inputParamCheck(serviceDataAuthVO);
         //2.执行增加、修改操作
         if (CRUDEnum.ADD.getKey() == serviceDataAuthVO.getType()) {
             try {
-                addDataAuth(serviceDataAuthVO);
-            }catch (Exception e)
-            {
+                return addDataAuth(serviceDataAuthVO);
+            } catch (Exception e) {
                 e.printStackTrace();
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, e.toString());
             }
         } else if (CRUDEnum.UPDATE.getKey() == serviceDataAuthVO.getType()) {
 
         } else {
             throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "操作码错误");
         }
-
+        return false;
     }
 
     /**
@@ -81,12 +103,13 @@ public class DataAuthHandleFacade extends DataAuthServiceImpl {
      * @Return void
      * @MethodName addDataAuth
      */
-    private void addDataAuth(ServiceDataAuthVO serviceDataAuthVO) {
+    private boolean addDataAuth(ServiceDataAuthVO serviceDataAuthVO) {
         //1.插入新建数据权限
         DataAuth dataAuth = new DataAuth();
+        //        dataAuth.setCreator(Long.parseLong(SysUserUtils.getCurrentPrincipleID()));
+        BeanUtils.copyProperties(serviceDataAuthVO.getDataAuthVO(), dataAuth);
         dataAuth.setCreateTime(DateUtil.now());
-        dataAuth.setCreator(Long.parseLong(SysUserUtils.getCurrentPrincipleID()));
-        BeanUtils.copyProperties(dataAuth, serviceDataAuthVO.getDataAuthVO());
+        dataAuth.setCreator(1l);
         boolean dataAuthInsert = dataAuthFacade.save(dataAuth);
         if (dataAuthInsert) {
             //2.插入成功获取新生成的数据权限名称编号data_auth_id
@@ -100,7 +123,8 @@ public class DataAuthHandleFacade extends DataAuthServiceImpl {
                 serviceDataAuth.setServiceId(sysServiceVO.getId());
                 serviceDataAuth.setDataAuthId(dataAuthId);
                 serviceDataAuth.setCreateTime(DateUtil.now());
-                serviceDataAuth.setCreator(Long.parseLong(SysUserUtils.getCurrentPrincipleID()));
+                serviceDataAuth.setCreator(1l);
+                //                serviceDataAuth.setCreator(Long.parseLong(SysUserUtils.getCurrentPrincipleID()));
                 boolean serviceDataAuthInsert = serviceDataAuthFacade.save(serviceDataAuth);
                 if (serviceDataAuthInsert) {
                     //4.获取上一步插入时新生成的数据权限名称与系统关联编号service_data_auth _id
@@ -110,23 +134,27 @@ public class DataAuthHandleFacade extends DataAuthServiceImpl {
                             .eq("is_deleted", IsDeleteEnum.N.getKey())).get(0).getId();
 
                     //5.插入数据权限系统关联表与角色管理sys_role_service_data_auth
-                    for(Role role:serviceDataAuthVO.getRoles()){
+                    for (RoleVO role : serviceDataAuthVO.getRoles()) {
                         RoleServiceDataAuth roleServiceDataAuth = new RoleServiceDataAuth();
                         roleServiceDataAuth.setRoleId(role.getId());
                         roleServiceDataAuth.setServiceDataAuthId(serviceDataAuthId);
                         roleServiceDataAuth.setCreateTime(DateUtil.now());
-                        roleServiceDataAuth.setCreator(Long.parseLong(SysUserUtils.getCurrentPrincipleID()));
-                        if(!roleServiceDataAuthFacade.save(roleServiceDataAuth)){
+                        roleServiceDataAuth.setCreator(1l);
+                        //                        roleServiceDataAuth.setCreator(Long.parseLong(SysUserUtils.getCurrentPrincipleID()));
+                        if (!roleServiceDataAuthFacade.save(roleServiceDataAuth)) {
                             throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "角色对应服务数据权限关系插入失败");
                         }
                     }
 
                     //6.插入数据权限详细信息。sys_data_auth_detail
-                    for(DataAuthDetail dataAuthDetail:sysServiceVO.getDataAuthDetailVOS()){
-                        dataAuthDetail.setCreator(Long.parseLong(SysUserUtils.getCurrentPrincipleID()));
+                    for (DataAuthDetailVO dataAuthDetailVO : sysServiceVO.getDataAuthDetailVOS()) {
+                        DataAuthDetail dataAuthDetail = new DataAuthDetail();
+                        BeanUtils.copyProperties(dataAuthDetailVO, dataAuthDetail);
+                        //                        dataAuthDetail.setCreator(Long.parseLong(SysUserUtils.getCurrentPrincipleID()));
+                        dataAuthDetail.setCreator(1l);
                         dataAuthDetail.setCreateTime(DateUtil.now());
                         dataAuthDetail.setServiceDataAuthId(serviceDataAuthId);
-                        if(!dataAuthDetailFacade.save(dataAuthDetail)){
+                        if (!dataAuthDetailFacade.save(dataAuthDetail)) {
                             throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "数据权限明细插入失败");
                         }
                     }
@@ -139,6 +167,7 @@ public class DataAuthHandleFacade extends DataAuthServiceImpl {
         } else {
             throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "数据权限插入失败");
         }
+        return true;
 
     }
 
@@ -167,4 +196,124 @@ public class DataAuthHandleFacade extends DataAuthServiceImpl {
             throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "系统对应数据权限明细未选择");
         }
     }
+
+    /**
+     * @Author songxl
+     * @Description通过数据权限id和角色id获取数据权限详情
+     * @Date 2021/7/22
+     * @Param [serviceDataAuthVO]
+     * @Return com.lantone.security.dto.DataAuthDTO
+     * @MethodName getDataAuthById
+     */
+    public DataAuthDTO getDataAuthById(ServiceDataAuthVO serviceDataAuthVO) {
+        DataAuthDTO dataAuthDTO = new DataAuthDTO();
+        List<ServiceRoleDataAuthDetailDTO> serviceRoleDataAuthDetailDTOS = this.baseMapper.getDataAuthById(serviceDataAuthVO);
+        if (ListUtil.isNotEmpty(serviceRoleDataAuthDetailDTOS)) {
+            //1.添加数据权限信息
+            dataAuthDTO.setId(serviceRoleDataAuthDetailDTOS.get(0).getDataAuthId());
+            dataAuthDTO.setAuthName(serviceRoleDataAuthDetailDTOS.get(0).getDataAuthName());
+            dataAuthDTO.setStatus(serviceRoleDataAuthDetailDTOS.get(0).getStatus());
+            //2.获取系统信息
+            Set<Long> serviceSet = serviceRoleDataAuthDetailDTOS.stream().map(ServiceRoleDataAuthDetailDTO::getServiceId).collect(Collectors.toSet());
+            List<SysServiceDTO> sysServiceDTOS = new ArrayList<>();
+            serviceSet.stream().forEach(id -> {
+                //3.添加服务信息
+                SysServiceDTO sysServiceDTO = new SysServiceDTO();
+                sysServiceDTO.setId(id);
+                sysServiceDTO.setName(ServiceEnum.getName(id.intValue()));
+                //4.1添加数据权限详情列表
+                List<ServiceRoleDataAuthDetailDTO> oneServiceRoleDataAuthDetailDTOS = serviceRoleDataAuthDetailDTOS.stream()
+                        .filter(serviceRoleDataAuthDetailDTO -> serviceRoleDataAuthDetailDTO.getServiceId() == id).collect(Collectors.toList());
+
+                List<DataAuthDetailDTO> dataAuthDetailDTOS = new ArrayList<>();
+                //4.2.1是否获取当前组织-科室信息
+                AtomicBoolean selectFalg = new AtomicBoolean(false);
+                oneServiceRoleDataAuthDetailDTOS.stream().forEach(serviceRoleDataAuthDetailDTO -> {
+                    DataAuthDetailDTO dataAuthDetailDTO = new DataAuthDetailDTO();
+                    dataAuthDetailDTO.setId(serviceRoleDataAuthDetailDTO.getDetail());
+                    dataAuthDetailDTO.setDataType(serviceRoleDataAuthDetailDTO.getDataType());
+                    dataAuthDetailDTO.setDetailType(serviceRoleDataAuthDetailDTO.getDetailType());
+                    dataAuthDetailDTO.setDetailId(serviceRoleDataAuthDetailDTO.getDetailId());
+                    if (DataAuthDataTypeEnum.CUSTOMIZE.getKey() == serviceRoleDataAuthDetailDTO.getDataType()) {
+                        selectFalg.set(true);
+                    }
+                    dataAuthDetailDTOS.add(dataAuthDetailDTO);
+                });
+                //4.2.3selectFalg为true时查询组织-科室信息
+                getDeptDetial(dataAuthDetailDTOS);
+                sysServiceDTO.setDataAuthDetailDTOS(dataAuthDetailDTOS);
+
+
+                //5.添加角色列表
+                List<RoleDTO> roleDTOS = new ArrayList<>();
+                RoleDTO role = new RoleDTO();
+                role.setId(serviceRoleDataAuthDetailDTOS.get(0).getRoleId());
+                role.setName(serviceRoleDataAuthDetailDTOS.get(0).getRoleName());
+                roleDTOS.add(role);
+                sysServiceDTO.setRoles(roleDTOS);
+                sysServiceDTOS.add(sysServiceDTO);
+            });
+            dataAuthDTO.setSysServiceDTOS(sysServiceDTOS);
+        } else {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "请检查角色id或数据权限id");
+        }
+
+        return dataAuthDTO;
+    }
+
+    /**
+     * @Author songxl
+     * @Description 获取组织-科室信息以及自定义科室
+     * @Date 2021/7/22
+     * @Param [dataAuthDetailDTO]
+     * @Return void
+     * @MethodName getDeptDetial
+     */
+    public void getDeptDetial(List<DataAuthDetailDTO> dataAuthDetailDTOS) {
+        //1.获取医院信息
+        HospitalDTO hospitalDTO = new HospitalDTO();
+        Hospital hospital = hospitalFacade.list(new QueryWrapper<Hospital>()
+                .eq("id", 2l)//###
+                .eq("type", "1")//###
+                .eq("is_deleted", IsDeleteEnum.N.getKey())).get(0);
+        BeanUtils.copyProperties(hospital,hospitalDTO);
+        //获取当前登录用户的组织信息
+        List<HospitalDTO> hospitalDTOS = getHospitalInfo(hospitalDTO);
+        getAllHospitalDTO(hospitalDTOS);
+        //2.获取科室信息
+
+
+    }
+
+    private void getAllHospitalDTO(List<HospitalDTO> hospitalDTOS) {
+        if(ListUtil.isNotEmpty(hospitalDTOS)){
+            for(HospitalDTO tempHospitalDTO:hospitalDTOS){
+                getAllHospitalDTO(getHospitalInfo(tempHospitalDTO));
+            }
+        }
+    }
+
+    /**
+     * @Author songxl
+     * @Description获取医院信息
+     * @Date  2021/7/22
+     * @Param [parentId]
+     * @Return java.util.List<com.lantone.common.dto.HospitalDTO>
+     * @MethodName getHospitalInfo
+     */
+    private List<HospitalDTO> getHospitalInfo(HospitalDTO hospitalDTO) {
+        List<HospitalDTO> hospitalDTOS = new ArrayList<>();
+        if(hospitalDTO.getId()!=null){
+            List<Hospital> hospitals = hospitalFacade.list(new QueryWrapper<Hospital>()
+                    .eq("parent_id",hospitalDTO.getId())
+                    .eq("is_deleted", IsDeleteEnum.N.getKey()));
+            hospitals.stream().forEach(hospital -> {
+                HospitalDTO tempHospitalDTO = new HospitalDTO();
+                BeanUtils.copyProperties(hospital,tempHospitalDTO);
+                hospitalDTOS.add(tempHospitalDTO);
+            });
+            hospitalDTO.setHospitalDTOS(hospitalDTOS);
+        }
+        return hospitalDTOS;
+    }
 }

+ 4 - 4
security-center/src/main/java/com/lantone/security/facade/UserLoginFacade.java

@@ -6,8 +6,10 @@ import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
+import com.lantone.common.dto.HospitalDTO;
+import com.lantone.common.dto.MenuInfoDTO;
+import com.lantone.common.dto.RoleDTO;
 import com.lantone.dblayermbg.entity.Hospital;
-import com.lantone.dblayermbg.entity.Role;
 import com.lantone.dblayermbg.entity.User;
 import com.lantone.dblayermbg.entity.UserRole;
 import com.lantone.dblayermbg.facade.UserRoleFacade;
@@ -16,8 +18,6 @@ import com.lantone.security.client.AuthServiceClient;
 import com.lantone.security.dto.JWT;
 import com.lantone.security.dto.JwtDTO;
 import com.lantone.security.dto.JwtStore;
-import com.lantone.security.dto.MenuInfoDTO;
-import com.lantone.security.dto.HospitalDTO;
 import com.lantone.security.enums.StatusEnum;
 import com.lantone.security.exception.ServiceErrorCode;
 import com.lantone.security.util.SysUserUtils;
@@ -96,7 +96,7 @@ public class UserLoginFacade extends UserServiceImpl {
                 HospitalDTO hospitalDTO = new HospitalDTO();
                 BeanUtils.copyProperties(hospital,hospitalDTO);
                 if(hospital.getId()!=null){
-                    List<Role> roles= this.baseMapper.getUserRoleByUserID(id,hospital.getId());
+                    List<RoleDTO> roles= this.baseMapper.getUserRoleByUserID(id,hospital.getId());
                     hospitalDTO.setRoles(roles);
                 }
                 organizeDTOS.add(hospitalDTO);

+ 0 - 11
security-center/src/main/java/com/lantone/security/facade/UserMenuInfoFacade.java

@@ -1,16 +1,5 @@
 package com.lantone.security.facade;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.diagbot.enums.IsDeleteEnum;
-import com.lantone.common.util.ListUtil;
-import com.lantone.security.dto.MenuInfoDTO;
-import com.lantone.security.enums.ConstantEnum;
-import com.lantone.security.enums.StatusEnum;
-import org.springframework.beans.BeanUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * @ClassName: SysMenuInfoDTOFacade
  * @Description: 菜单管理facade

+ 0 - 23
security-center/src/main/java/com/lantone/security/vo/DataAuthVO.java

@@ -1,23 +0,0 @@
-package com.lantone.security.vo;
-
-import com.lantone.dblayermbg.entity.DataAuth;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * @ClassName: DataAuthVO
- * @Description: 数据权限对象
- * @Author songxl
- * @Date 2021/7/21
- * @Version 1.0
- */
-@Data
-public class DataAuthVO extends DataAuth {
-    /**
-     * 系统列表
-     */
-    @ApiModelProperty("系统列表")
-    private List<SysServiceVO> serviceVOS;
-}

+ 0 - 24
security-center/src/main/java/com/lantone/security/vo/SysServiceVO.java

@@ -1,24 +0,0 @@
-package com.lantone.security.vo;
-
-import com.lantone.dblayermbg.entity.DataAuthDetail;
-import com.lantone.dblayermbg.entity.SysService;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * @ClassName: SysServiceVO
- * @Description: 系统服务对象
- * @Author songxl
- * @Date 2021/7/21
- * @Version 1.0
- */
-@Data
-public class SysServiceVO extends SysService {
-    /**
-     * 数据权限详情列表
-     */
-    @ApiModelProperty("数据权限详情列表")
-    private List<DataAuthDetail> dataAuthDetailVOS;
-}

+ 29 - 6
security-center/src/main/java/com/lantone/security/web/DataAuthController.java

@@ -2,8 +2,9 @@ package com.lantone.security.web;
 
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.RespDTO;
+import com.lantone.common.dto.DataAuthDTO;
+import com.lantone.common.vo.ServiceDataAuthVO;
 import com.lantone.security.facade.DataAuthHandleFacade;
-import com.lantone.security.vo.ServiceDataAuthVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -29,15 +30,37 @@ public class DataAuthController {
     private DataAuthHandleFacade dataAuthHandleFacade;
 
     @ApiOperation(value = "新增数据权限[by:songxl]",
-            notes = "dataAuthVO数据权限对象,必填<br>" +
-                    "roles角色列表,必填<br>" +
-                    "操作码 1:新增;2:修改")
+            notes = "dataAuthVO:数据权限对象,必填<br>" +
+                    "roles:角色列表,必填<br>" +
+                    "type:操作码 1:新增;2:修改")
     @PostMapping("/addAuth")
     @SysLogger("addAuth")
     @ApiIgnore
     @Transactional
     public RespDTO<Boolean> addAuth(@RequestBody ServiceDataAuthVO serviceDataAuthVO) {
-        dataAuthHandleFacade.addOrUpdate(serviceDataAuthVO);
-        return RespDTO.onSuc(null);
+        return RespDTO.onSuc(dataAuthHandleFacade.addOrUpdate(serviceDataAuthVO));
+    }
+
+    @ApiOperation(value = "新增数据权限[by:songxl]",
+            notes = "dataAuthVO:数据权限对象,必填<br>" +
+                    "roles:角色列表,必填<br>" +
+                    "type:操作码 1:新增;2:修改")
+    @PostMapping("/updateAuth")
+    @SysLogger("updateAuth")
+    @ApiIgnore
+    @Transactional
+    public RespDTO<Boolean> updateAuth(@RequestBody ServiceDataAuthVO serviceDataAuthVO) {
+        return RespDTO.onSuc(dataAuthHandleFacade.addOrUpdate(serviceDataAuthVO));
+    }
+
+    @ApiOperation(value = "通过数据权限id和角色id获取数据权限详情[by:songxl]",
+            notes = "dataAuthVO:数据权限对象,必填<br>" +
+                    "roles:角色列表,必填<br>" +
+                    "type:操作码 1:新增;2:修改")
+    @PostMapping("/getDataAuthById")
+    @SysLogger("getDataAuthById")
+    @ApiIgnore
+    public RespDTO<DataAuthDTO> getDataAuthById(@RequestBody ServiceDataAuthVO serviceDataAuthVO) {
+        return RespDTO.onSuc(dataAuthHandleFacade.getDataAuthById(serviceDataAuthVO));
     }
 }