From 5db09f18835e26c3f89d25cfdfbd6b11858327ad Mon Sep 17 00:00:00 2001 From: zhansihu Date: Wed, 6 Sep 2023 11:36:43 +0800 Subject: [PATCH 001/186] =?UTF-8?q?feature(=E6=9D=83=E9=99=90=E7=82=B9)?= =?UTF-8?q?=EF=BC=9A=E6=96=B0=E5=A2=9ECRUD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 + .../tyr/client/model/enums/DelegatedType.java | 36 ++++ .../model/permission/PermissionPointDTO.java | 143 +++++++++++++ .../permission/PermissionPointTreeNode.java | 27 +++ .../PermissionPointTreeQueryReq.java | 23 +++ tyr-server/pom.xml | 6 + .../server/repository/entity/SaasFeature.java | 191 ++++++++++++++++++ .../repository/mapper/SaasFeatureMapper.java | 16 ++ .../repository/service/SaasFeatureDao.java | 16 ++ .../service/impl/SaasFeatureDaoImpl.java | 20 ++ 10 files changed, 480 insertions(+) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DelegatedType.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasFeatureMapper.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasFeatureDao.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java diff --git a/README.md b/README.md index 67fd2d26..23c731de 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,4 @@ # 项目介绍 +提尔(Týr),是北欧神话中的战争与勇气之神,同时也是契约的保证人,誓言的守护者和荣耀的代表。阿萨神族主神奥丁之子。 + 权限服务 \ No newline at end of file diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DelegatedType.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DelegatedType.java new file mode 100644 index 00000000..cc9bf3bd --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DelegatedType.java @@ -0,0 +1,36 @@ +package cn.axzo.tyr.client.model.enums; + +import lombok.AllArgsConstructor; + +import java.util.HashMap; +import java.util.Map; + +/** + * 权限点授权策略类型 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/6 11:05 + */ +@AllArgsConstructor +public enum DelegatedType { + + PLAT(1, "平台授权型"), + CUSTOM(2, "客户授权型"), + NO_NEED(3, "免授权型"), + ; + + private Integer code; + private String desc; + + private static final Map MAPPING = new HashMap<>(); + static { + for (DelegatedType type : DelegatedType.values()) { + MAPPING.put(type.code, type); + } + } + + public DelegatedType apply(Integer code) { + return code == null ? null :MAPPING.get(code); + } +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java new file mode 100644 index 00000000..d4b8f613 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java @@ -0,0 +1,143 @@ +package cn.axzo.tyr.client.model.permission; + +import java.time.LocalDateTime; + +/** + * 权限点对象 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/5 15:50 + */ +public class PermissionPointDTO { + + /** + * 权限点id + */ + private Long id; + + /** + * 权限点名称 + */ + private String featureName; + + /** + * 元素code + */ + private String featureCode; + + /** + * 菜单icon + */ + private String icon; + + /** + * 上级权限点id + */ + private Long parentId; + + + /** + * 页面路由 + */ + private String linkUrl; + + /** + * 适用终端 1:PC 2:UNI 4:APP + */ + private Integer linkType; + + /** + * 扩展字段 - APP适配参数 + */ + private String linkExt; + + /** + * 小程序AppID + */ + private String microAppItemId; + + /** + * 权限点层级path + */ + private String path; + + /** + * 排序 + */ + private Integer sort; + + /** + * 菜单适用于平台 0:企业工作台 1:项目工作台 + */ + private String terminal; + + /** + * 元素类别 0.模块 1.菜单 2页面 3按钮 + */ + private Integer featureType; + + + /** + * 创建人id + */ + private Long createBy; + + /** + * 创建时间 + */ + private LocalDateTime createAt; + + /** + * 更新时间 + */ + private LocalDateTime updateAt; + + /** + * 修改人id + */ + private Long updateBy; + + + /** + * 0:查看 1:操作 + */ + private Integer operateType; + + + /** + * 适用单位类型-65535:所有 1:总包 2:建设单位 4:监理单位 8:劳务分包 16:专业分包 + */ + private Long fitOuTypeBit; + + /** + * 适用节点类型 65535:所有 1:部门 2:班组 4:小组 + */ + private Long fitOuNodeTypeBit; + + /** + * 所属应用 + */ + private String appName; + + /** + * 功能URL + */ + private String featureUrl; + + /** + * 是否认证 0:无需要认证 1:需要认证 + */ + private Boolean needCert; + + /** + * 是否授权 0:无需要授权 1:需要授权 + */ + private Boolean needAuth; + + /** + * 授权策略类型,允许为空 1-平台授权型 2-客户授权型 3-免授权型 + */ + private Integer delegatedType; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java new file mode 100644 index 00000000..312b79e3 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java @@ -0,0 +1,27 @@ +package cn.axzo.tyr.client.model.permission; + +import java.util.List; + +/** + * 权限点树形节点 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/5 15:20 + */ +public class PermissionPointTreeNode { + /** 权限点ID **/ + private Long permissionPointId; + + /** 父级节点ID **/ + private Long parentId; + + /** 权限点名称 **/ + private String permissionName; + + /** 所属端 **/ + private String terminal; + + /** 下级节点 **/ + private List children; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java new file mode 100644 index 00000000..66a994cd --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java @@ -0,0 +1,23 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +/** + * 权限点树形查询请求参数 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/5 15:12 + */ +@Data +public class PermissionPointTreeQueryReq { + + /** 授权策略 1-平台授权型 2-客户授权型 免授权型, 为空查全部**/ + private Integer delegateType; + + /** 搜索关键字 - 名称模糊搜索 **/ + private String keyword; + + /** 权限点父级ID - 用于查询子节点 **/ + private Long parentId; +} diff --git a/tyr-server/pom.xml b/tyr-server/pom.xml index 27a641c1..a416ea86 100644 --- a/tyr-server/pom.xml +++ b/tyr-server/pom.xml @@ -13,6 +13,12 @@ tyr-server + + + true + true + + cn.axzo.framework diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java new file mode 100644 index 00000000..d532ba51 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java @@ -0,0 +1,191 @@ +package cn.axzo.tyr.server.repository.entity; + +import cn.axzo.framework.data.mybatisplus.model.BaseEntity; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * + *

+ * + * @author ZhanSiHu + * @since 2023-09-06 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName("saas_feature") +public class SaasFeature extends BaseEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 名称 + */ + private String featureName; + + /** + * code + */ + private String featureCode; + + /** + * 图标地址 + */ + private String icon; + + /** + * 菜单上级id + */ + private Long parentId; + + /** + * 产品板块Id + */ + private Long parentModuleId; + + /** + * 链接地址 + */ + private String linkUrl; + + /** + * 1:CMS 2:小程序 4:原生 + */ + private Integer linkType; + + /** + * 扩展字段 + */ + private String linkExt; + + /** + * 小程序id 关联micro_app_item id + */ + private String microAppItemId; + + /** + * 路径 + */ + private String path; + + /** + * 描述 + */ + private String description; + + /** + * 排序 + */ + private Integer sort; + + /** + * 菜单适用于平台 0:企业工作台 1:项目工作台 + */ + private String terminal; + + /** + * 类型 0.模块 1.菜单 2页面 3功能 + */ + private Integer featureType; + + /** + * 是否删除 + */ + private Long isDelete; + + /** + * 创建人id + */ + private Long createBy; + + /** + * 创建时间 + */ + private LocalDateTime createAt; + + /** + * 更新时间 + */ + private LocalDateTime updateAt; + + /** + * 修改人id + */ + private Long updateBy; + + private String legacyLayout; + + /** + * 0:查看 1:操作 + */ + private Integer operateType; + + /** + * 为了迁移菜单用的,迁移后将废弃 + */ + private Long oldId; + + /** + * 适用单位类型-65535:所有 1:总包 2:建设单位 4:监理单位 8:劳务分包 16:专业分包 + */ + private Long fitOuTypeBit; + + /** + * 适用节点类型65535:所有 1:部门 2:班组 4:小组 + */ + private Long fitOuNodeTypeBit; + + /** + * 网关专属字段,所属应用 + */ + private String appName; + + /** + * 网关专属字段 ,功能URL,对应后端接口url + */ + private String featureUrl; + + /** + * 网关专属字段,是否认证 0:无需要认证 1:需要认证 + */ + private Boolean needCert; + + /** + * 网关专属字段,是否授权 0:无需要授权 1:需要授权 + */ + private Boolean needAuth; + + /** + * 业务id,用于环境同步作为唯一键 + */ + private String businessNo; + + /** + * 父级业务id + */ + private String parentBusinessNo; + + /** + * 授权策略类型,允许为空 1-平台授权型 2-客户授权型 3-免授权型 + */ + private Integer delegatedType; + + +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasFeatureMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasFeatureMapper.java new file mode 100644 index 00000000..baa19539 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasFeatureMapper.java @@ -0,0 +1,16 @@ +package cn.axzo.tyr.server.repository.mapper; + +import cn.axzo.tyr.server.repository.entity.SaasFeature; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * Mapper 接口 + *

+ * + * @author ZhanSiHu + * @since 2023-09-06 + */ +public interface SaasFeatureMapper extends BaseMapper { + +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasFeatureDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasFeatureDao.java new file mode 100644 index 00000000..7af70bac --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasFeatureDao.java @@ -0,0 +1,16 @@ +package cn.axzo.tyr.server.repository.service; + +import cn.axzo.tyr.server.repository.entity.SaasFeature; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 服务类 + *

+ * + * @author ZhanSiHu + * @since 2023-09-06 + */ +public interface SaasFeatureDao extends IService { + +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java new file mode 100644 index 00000000..9b7c67e2 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java @@ -0,0 +1,20 @@ +package cn.axzo.tyr.server.repository.service.impl; + +import cn.axzo.tyr.server.repository.entity.SaasFeature; +import cn.axzo.tyr.server.repository.mapper.SaasFeatureMapper; +import cn.axzo.tyr.server.repository.service.SaasFeatureDao; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author ZhanSiHu + * @since 2023-09-06 + */ +@Service +public class SaasFeatureDaoImpl extends ServiceImpl implements SaasFeatureDao { + +} From cfc3aa9e4e9da9a2fa18ab3987740fcbb56062dd Mon Sep 17 00:00:00 2001 From: zhansihu Date: Wed, 6 Sep 2023 11:39:04 +0800 Subject: [PATCH 002/186] =?UTF-8?q?fix(=E6=9D=83=E9=99=90=E7=82=B9)?= =?UTF-8?q?=EF=BC=9A=E5=88=A0=E9=99=A4=E9=87=8D=E5=A4=8D=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/repository/entity/SaasFeature.java | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java index d532ba51..afcc8786 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java @@ -29,11 +29,6 @@ public class SaasFeature extends BaseEntity implements Serializable private static final long serialVersionUID = 1L; - /** - * id - */ - @TableId(value = "id", type = IdType.AUTO) - private Long id; /** * 名称 @@ -105,26 +100,12 @@ public class SaasFeature extends BaseEntity implements Serializable */ private Integer featureType; - /** - * 是否删除 - */ - private Long isDelete; /** * 创建人id */ private Long createBy; - /** - * 创建时间 - */ - private LocalDateTime createAt; - - /** - * 更新时间 - */ - private LocalDateTime updateAt; - /** * 修改人id */ From b8b51e148345a5fc13972e44014cf557f581210d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Wed, 6 Sep 2023 15:54:46 +0800 Subject: [PATCH 003/186] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=A7=92=E8=89=B2/?= =?UTF-8?q?=E5=88=86=E7=BB=84/=E6=9D=83=E9=99=90=E7=BB=84=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E5=9F=BA=E7=A1=80=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tyr-api/pom.xml | 4 + .../client/feign/SaasPermissionGroupApi.java | 44 ++++++++ .../feign/SaasPermissionGroupScopeApi.java | 23 ++++ .../cn/axzo/tyr/client/feign/SaasRoleApi.java | 44 ++++++++ .../tyr/client/feign/SaasRoleGoupApi.java | 39 +++++++ .../cn/axzo/tyr/client/model/NewUserReq.java | 29 ----- .../axzo/tyr/client/model/QueryUserReq.java | 22 ---- .../axzo/tyr/client/model/UpdateUserReq.java | 19 ---- .../cn/axzo/tyr/client/model/UserRes.java | 21 ---- .../req/QuerySaasPermissionGroupReq.java | 43 ++++++++ .../model/req/QuerySaasRoleGroupReq.java | 38 +++++++ .../client/model/req/QuerySaasRoleReq.java | 57 ++++++++++ .../model/vo/SaasPermissionGroupVO.java | 52 +++++++++ .../tyr/client/model/vo/SaasRoleGroupVO.java | 45 ++++++++ .../model/vo/SaasRolePermissionScopeVO.java | 32 ++++++ .../axzo/tyr/client/model/vo/SaasRoleVO.java | 61 +++++++++++ tyr-server/pom.xml | 9 ++ .../entity/SaasPermissionGroup.java | 97 +++++++++++++++++ .../entity/SaasPermissionGroupScope.java | 54 ++++++++++ .../entity/SaasPgroupRoleRelation.java | 55 ++++++++++ .../server/repository/entity/SaasRole.java | 101 ++++++++++++++++++ .../repository/entity/SaasRoleGroup.java | 72 +++++++++++++ .../entity/SaasRoleGroupRelation.java | 48 +++++++++ .../mapper/SaasPermissionGroupMapper.java | 10 ++ .../SaasPermissionGroupScopeMapper.java | 11 ++ .../mapper/SaasPgroupRoleRelationMapper.java | 11 ++ .../mapper/SaasRoleGroupMapper.java | 11 ++ .../mapper/SaasRoleGroupRelationMapper.java | 11 ++ .../repository/mapper/SaasRoleMapper.java | 11 ++ .../service/SaasPermissionGroupDao.java | 12 +++ .../service/SaasPermissionGroupScopeDao.java | 14 +++ .../service/SaasPgroupRoleRelationDao.java | 14 +++ .../repository/service/SaasRoleDao.java | 14 +++ .../repository/service/SaasRoleGroupDao.java | 14 +++ .../service/SaasRoleGroupRelationDao.java | 14 +++ 35 files changed, 1065 insertions(+), 91 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGoupApi.java delete mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/NewUserReq.java delete mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/QueryUserReq.java delete mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/UpdateUserReq.java delete mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/UserRes.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRolePermissionScopeVO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupRoleRelation.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroupRelation.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPermissionGroupMapper.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPermissionGroupScopeMapper.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPgroupRoleRelationMapper.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleGroupMapper.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleGroupRelationMapper.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleMapper.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupDao.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupScopeDao.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupRoleRelationDao.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleDao.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupRelationDao.java diff --git a/tyr-api/pom.xml b/tyr-api/pom.xml index 298ff057..21d578ea 100644 --- a/tyr-api/pom.xml +++ b/tyr-api/pom.xml @@ -18,5 +18,9 @@ cn.axzo.framework axzo-consumer-spring-cloud-starter
+ + cn.axzo.basics + basics-common +
diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java new file mode 100644 index 00000000..1a5221c8 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java @@ -0,0 +1,44 @@ +package cn.axzo.tyr.client.feign; + +import cn.axzo.framework.domain.web.result.ApiPageResult; +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; +import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * 权限集 + */ +@FeignClient(name = "tyr", url = "${axzo.service.maokai:http://tyr:8080/api/saasPermissionGoup}") +public interface SaasPermissionGroupApi { + + /** + * 保存/更新 + */ + @PostMapping("saveOrUpdate") + ApiResult saveOrUpdate(@RequestBody SaasPermissionGroupVO req); + + /** + * 根据id查询详情 + * @param id + * @return + */ + @PostMapping("getById") + ApiResult getById(@RequestParam("id") Long id); + + /** + * 查询 + */ + @PostMapping("query") + ApiPageResult query(@RequestBody QuerySaasPermissionGroupReq req); + + /** + * 删除 + */ + @PostMapping("delete") + ApiResult delete(@RequestParam(required = true) Long id); + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java new file mode 100644 index 00000000..0f6b5567 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java @@ -0,0 +1,23 @@ +package cn.axzo.tyr.client.feign; + +import cn.axzo.framework.domain.web.result.ApiResult; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * 权限集作用范围 + */ +@FeignClient(name = "tyr", url = "${axzo.service.maokai:http://tyr:8080/api/saasPermissionGroup}") +public interface SaasPermissionGroupScopeApi { + + /** + * 删除单位联系人 + * @param id + * @return + */ + @PostMapping("api/organizational/unit/contact/delete") + ApiResult deleteUnitContact(@RequestParam("id") Long id); + + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java new file mode 100644 index 00000000..0c8d4d4c --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java @@ -0,0 +1,44 @@ +package cn.axzo.tyr.client.feign; + +import cn.axzo.framework.domain.web.result.ApiListResult; +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; +import cn.axzo.tyr.client.model.vo.SaasRoleVO; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * 角色 + */ +@FeignClient(name = "tyr", url = "${axzo.service.maokai:http://tyr:8080/api/saasRole}") +public interface SaasRoleApi { + + /** + * 保存/更新 + * 标准角worksaceId ouId = -1,自定义跟随自定义分组赋值 + * 如果权限列表不为空则创建通用权限 + */ + @PostMapping("saveOrUpdate") + ApiResult saveOrUpdate(@RequestBody SaasRoleVO req); + + /** + * 根据id查询详情 + */ + @PostMapping("getById") + ApiResult getById(@RequestParam(required = true) Long id); + + /** + * 获取角色列表 + */ + @PostMapping("query") + ApiListResult query(@RequestBody QuerySaasRoleReq req); + + /** + * 删除 + */ + @PostMapping("delete") + ApiResult delete(@RequestParam(required = true) Long id); + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGoupApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGoupApi.java new file mode 100644 index 00000000..ba7c016e --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGoupApi.java @@ -0,0 +1,39 @@ +package cn.axzo.tyr.client.feign; + +import cn.axzo.framework.domain.web.result.ApiListResult; +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; +import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * 角色分组 + */ +@FeignClient(name = "tyr", url = "${axzo.service.maokai:http://tyr:8080/api/saasRoleGroup}") +public interface SaasRoleGoupApi { + + /** + * 保存/更新 + * @return + */ + @PostMapping("save") + ApiResult saveOrUpdate(@RequestBody SaasRoleGroupVO req); + + /** + * 获取权限分组列表 + * @return + */ + @PostMapping("getList") + ApiListResult getList(@RequestBody QuerySaasRoleGroupReq req); + + /** + * 删除分组 + */ + @PostMapping("delete") + ApiResult delete(@RequestParam(required = true) Long id); + + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/NewUserReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/NewUserReq.java deleted file mode 100644 index 21f5c7ad..00000000 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/NewUserReq.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.axzo.tyr.client.model; - -import lombok.Data; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; - -/** - * @Author: liyong.tian - * @Date: 2022/9/2 - * @Description: - */ -@Data -public class NewUserReq { - - @NotBlank(message = "名称不能为空") - private String name; - - @NotNull - private Integer sex; - - private Integer age; - - private String phone; - - private String email; - - private String address; -} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/QueryUserReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/QueryUserReq.java deleted file mode 100644 index 8d88889b..00000000 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/QueryUserReq.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.axzo.tyr.client.model; - -import cn.axzo.framework.context.client.IQueryMap; -import cn.axzo.framework.context.client.QueryMap; -import lombok.Data; - -@Data -public class QueryUserReq implements IQueryMap { - - private Long id; - - private String name; - - private String phone; - - private String email; - - @Override - public void append(QueryMap.Builder builder) { - builder.put("id", id).put("name", name).put("phone", phone).put("email", email); - } -} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/UpdateUserReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/UpdateUserReq.java deleted file mode 100644 index acb268a6..00000000 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/UpdateUserReq.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.axzo.tyr.client.model; - -import lombok.Data; - -@Data -public class UpdateUserReq { - - private String name; - - private Integer sex; - - private Integer age; - - private String phone; - - private String email; - - private String address; -} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/UserRes.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/UserRes.java deleted file mode 100644 index 7508a5f6..00000000 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/UserRes.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.axzo.tyr.client.model; - -import lombok.Data; - -@Data -public class UserRes { - - private Long id; - - private String name; - - private Integer sex; - - private Integer age; - - private String phone; - - private String email; - - private String address; -} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java new file mode 100644 index 00000000..2ae36a69 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java @@ -0,0 +1,43 @@ +package cn.axzo.tyr.client.model.req; + + +import cn.axzo.basics.common.page.PageRequest; +import lombok.Data; + +import java.util.List; + +@Data +public class QuerySaasPermissionGroupReq extends PageRequest { + + private List ids; + + /** + * 权限集名称 + */ + private String name; + /** + * 创建者 + */ + private Long createBy; + /** + * 更新者 + */ + private Long updateBy; + + /** + * 工作台Id + */ + private Long customSpaceId; + + /** + * 单位ID + */ + private Long ouId; + + /** + * 权限集类型:feature data + */ + private String type; + + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java new file mode 100644 index 00000000..dc70174d --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java @@ -0,0 +1,38 @@ +package cn.axzo.tyr.client.model.req; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class QuerySaasRoleGroupReq { + + private List ids; + + /** + * 项目部id(不传或者传-1查询的是标准分组) + */ + private Long workspaceId; + + /** + * 单位id(不传或者传-1查询的是标准分组) + */ + private Long ouId; + + /** + * 系统域编码(不传所有) + */ + private List topSysCode; + + /** + * 二级字典编码(不传查所有) + */ + private List dictSysCode; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java new file mode 100644 index 00000000..63c402d4 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java @@ -0,0 +1,57 @@ +package cn.axzo.tyr.client.model.req; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class QuerySaasRoleReq { + + private List id; + + /** + * 角色名称 + */ + private String name; + + /** + * 角色类型:common 普通角色 admin管理员 + */ + private String roleType; + + /** + * 创建者 + */ + private Long createBy; + /** + * 更新者 + */ + private Long updateBy; + + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 角色owner单位Id 实际角色和用户的所属关系 具体查询relation的ouId + */ + private Long ownerOuId; + + /** + * 分组id + */ + private List sassRoleGroupIds; + + /** + * 权限组id + */ + private List saasPermissionGroupIds; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java new file mode 100644 index 00000000..1fd5c482 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java @@ -0,0 +1,52 @@ +package cn.axzo.tyr.client.model.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class SaasPermissionGroupVO { + + private Long id; + + /** + * 权限集名称 + */ + private String name; + + /** + * 创建者 + */ + private Long createBy; + /** + * 更新者 + */ + private Long updateBy; + + /** + * 工作台Id + */ + private Long customSpaceId; + + /** + * 单位ID + */ + private Long ouId; + + /** + * 权限集类型:feature data + */ + private String type; + + /** + * 权限id + */ + private List featureIds; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java new file mode 100644 index 00000000..70527498 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java @@ -0,0 +1,45 @@ +package cn.axzo.tyr.client.model.vo; + +import lombok.Data; + +import java.util.Date; + +@Data +public class SaasRoleGroupVO { + + private Long id; + + private Date createAt; + + private Date updateAt; + + /** + * 系统域编码 + */ + private String topSysCode; + + /** + * 二级字典编码(单位类型) + */ + private String dictSysCode; + + /** + * 名称 + */ + private String name; + + /** + * 项目部id + */ + private Long workspaceId; + + /** + * 单位id + */ + private Long ouId; + + /** + * 排序 + */ + private Integer sort; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRolePermissionScopeVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRolePermissionScopeVO.java new file mode 100644 index 00000000..5923b3d7 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRolePermissionScopeVO.java @@ -0,0 +1,32 @@ +package cn.axzo.tyr.client.model.vo; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class SaasRolePermissionScopeVO { + + private Long id; + + /** + * 选择类型: 1.正选 2.反选 + */ + private Integer type; + + /** + * 作用范围类型: workspace ou + */ + private String scopeType; + + /** + * 作用范围id(workspace_id/ou_id) + */ + private Long scopeId; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java new file mode 100644 index 00000000..c24b4a1d --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java @@ -0,0 +1,61 @@ +package cn.axzo.tyr.client.model.vo; + +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +public class SaasRoleVO { + + private Long id; + + private Date createAt; + + private Date updateAt; + + /** + * 角色名称 + */ + private String name; + + /** + * 角色类型:common 普通角色 admin管理员 + */ + private String roleType; + + /** + * 创建者 + */ + private Long createBy; + /** + * 更新者 + */ + private Long updateBy; + + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 角色owner单位Id 实际角色和用户的所属关系 具体查询relation的ouId + */ + private Long ownerOuId; + + /** + * 分组id + */ + private List sassRoleGroupIds; + + /** + * 权限组id + */ + private List saasPermissionGroupIds; + + /** + * 权限id(用于创建权限集) + */ + private List featureIds; + +} diff --git a/tyr-server/pom.xml b/tyr-server/pom.xml index a416ea86..d130ac6c 100644 --- a/tyr-server/pom.xml +++ b/tyr-server/pom.xml @@ -56,5 +56,14 @@ cn.axzo.framework axzo-logger-spring-boot-starter + + cn.axzo.pokonyan + pokonyan + + + cn.axzo.basics + basics-common + + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java new file mode 100644 index 00000000..e1f6dabe --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java @@ -0,0 +1,97 @@ +package cn.axzo.tyr.server.repository.entity; + +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + * 权限集(SaasPermissionGroup)表实体类 + * + * @author makejava + * @since 2022-05-24 11:18:41 + */ +@Getter +@Setter +@ToString +@EqualsAndHashCode(callSuper = true) +@TableName("saas_permission_group") +public class SaasPermissionGroup extends BaseEntity { + + + /** + * 权限集名称 + */ + private String name; + /** + * 权限集描述 + */ + private String description; + + /** + * 1:总包企业产品 2:总包项目产品 3:政企产品 4:分包企业产品 5:班组产品 + */ + private Integer productType; + + /** + * 权限集类型 1查看 2操作管理 + */ + private Integer legacyType; + + /** + * 创建者 + */ + private Long createBy; + /** + * 更新者 + */ + private Long updateBy; + /** + * 是否自定义 0:不是 1:是 如果为1 custom_space_id 不能为空 + */ + private Integer isCustom; + /** + * 工作台Id + */ + private Long customSpaceId; + + /** + * 适用单位类型 1:总包 2:建设单位 3:监理单位 4:劳务分包 5:专业分包 6:班组 0都可以用 + */ + private Long fitOuTypeBit; + + /** + * 适用节点类型 1:部门 2:班组 3:小组 + */ + private Long fitOuNodeTypeBit; + + /** + * 单位ID + */ + private Long ouId; + + /** + * 功能分组ID + */ + private Long productCategoryId; + + /** + * 权限集类型:feature data + */ + private String type; + + /** + * 获取主键值 + * + * @return 主键值 + */ + @Override + protected Serializable pkVal() { + return this.id; + } +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java new file mode 100644 index 00000000..32ebafaa --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java @@ -0,0 +1,54 @@ +package cn.axzo.tyr.server.repository.entity; + +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 权限集作用范围 + * + * @author makejava + * @since 2022-06-05 10:59:29 + */ +@TableName("saas_permission_group_scope") +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +public class SaasPermissionGroupScope extends BaseEntity implements Serializable { + + private static final long serialVersionUID = 972205950455439772L; + + /** + * 选择类型: 1.正选 2.反选 + */ + @TableField("type") + private Integer type; + + /** + * 作用范围类型: workspace ou + */ + @TableField("scope_type") + private String scopeType; + + /** + * 作用范围id(workspace_id/ou_id) + */ + @TableField("scope_id") + private Long scopeId; + + /** + * 获取主键值 + * + * @return 主键值 + */ + @Override + protected Serializable pkVal() { + return this.id; + } +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupRoleRelation.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupRoleRelation.java new file mode 100644 index 00000000..7f840a7e --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupRoleRelation.java @@ -0,0 +1,55 @@ +package cn.axzo.tyr.server.repository.entity; + +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + * 角色权限集中间表(SaasPgroupRoleRelation)表实体类 + * + * @author makejava + * @since 2022-05-24 11:18:41 + */ +@Getter +@Setter +@ToString +@EqualsAndHashCode(callSuper = true) +@TableName("saas_pgroup_role_relation") +public class SaasPgroupRoleRelation extends BaseEntity { + + + /** + * 角色id + */ + private Long roleId; + /** + * 权限集id + */ + private Long groupId; + + /** + * 创建者 + */ + private Long createBy; + /** + * 更新者 + */ + private Long updateBy; + + + /** + * 获取主键值 + * + * @return 主键值 + */ + @Override + protected Serializable pkVal() { + return this.id; + } +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java new file mode 100644 index 00000000..b279a87e --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java @@ -0,0 +1,101 @@ +package cn.axzo.tyr.server.repository.entity; + +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + * saas-角色(SaasRole)表实体类 + * + * @author makejava + * @since 2022-05-24 11:18:41 + */ +@Getter +@Setter +@ToString +@EqualsAndHashCode(callSuper = true) +@TableName("saas_role") +public class SaasRole extends BaseEntity { + + /** + * 角色名称 + */ + private String name; + /** + * 来源的模版角色id + */ + private Long fromPreRoleId; + /** + * 角色描述 + */ + private String description; + /** + * 角色类型:common 普通角色 super_admin超级管理员(禁止删除) admin子管理员(禁止删除) init初始化内置角色 + */ + private String roleType; + + /** + * 创建者 + */ + private Long createBy; + /** + * 更新者 + */ + private Long updateBy; + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 角色owner单位Id 实际角色和用户的所属关系 具体查询relation的ouId + */ + private Long ownerOuId; + + /** + * 这个字段的解释工具= {@link cn.axzo.basics.auth.dto.consts.SaasRoleFits } + * 适用单位类型 1:总包 2:建设单位 4:监理单位 8:劳务分包 16:专业分包 0都可以用 只会挂在最末级 + *

+ * 业务层,这个字段不要直接用。有变种的getter、setter,或者直接用解释工具。 + */ +// @Deprecated //有些位运算会使用 + private Long fitOuTypeBit; + + /** + * + * 这个字段的解释工具= {@link cn.axzo.basics.auth.dto.consts.SaasRoleFits } + * + * 适用节点类型 1:部门 2:班组 4:小组 只会挂在最末级 + * + * 业务层,这个字段不要直接用 + */ +// @Deprecated //有些位运算会使用 + private Long fitOuNodeTypeBit; + + /** + * 职位ID, 若此字段不为0则为专属角色,该角色专属于某个职位 + */ + private Long positionTemplateId; + + /** + * 岗位字典中的编码 + */ + private String jobCode; + + + /** + * 获取主键值 + * + * @return 主键值 + */ + @Override + protected Serializable pkVal() { + return this.id; + } +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java new file mode 100644 index 00000000..e616043d --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java @@ -0,0 +1,72 @@ +package cn.axzo.tyr.server.repository.entity; + +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 角色分组 + * + * @author makejava + * @since 2022-06-05 10:59:29 + */ +@TableName("saas_role_group") +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +public class SaasRoleGroup extends BaseEntity implements Serializable { + + private static final long serialVersionUID = 972205950455439772L; + + /** + * 系统域编码 + */ + @TableField("top_sys_code") + private String topSysCode; + + /** + * 二级字典编码(单位类型) + */ + @TableField("dict_sys_code") + private String dictSysCode; + + /** + * 名称 + */ + @TableField("name") + private String name; + + /** + * 项目部id + */ + @TableField("workspace_id") + private Long workspaceId; + + /** + * 单位id + */ + @TableField("ou_id") + private Long ouId; + + /** + * 排序 + */ + @TableField("sort") + private Integer sort; + + /** + * 获取主键值 + * + * @return 主键值 + */ + @Override + protected Serializable pkVal() { + return this.id; + } +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroupRelation.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroupRelation.java new file mode 100644 index 00000000..e3a1acb7 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroupRelation.java @@ -0,0 +1,48 @@ +package cn.axzo.tyr.server.repository.entity; + +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 角色分组关联表 + * + * @author makejava + * @since 2022-06-05 10:59:29 + */ +@TableName("saas_role_group_relation") +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +public class SaasRoleGroupRelation extends BaseEntity implements Serializable { + + private static final long serialVersionUID = 972205950455439772L; + + /** + * 角色id + */ + @TableField("role_id") + private Long roleId; + + /** + * 角色分组id + */ + @TableField("saas_role_group_id") + private Long saasRoleGroupId; + + /** + * 获取主键值 + * + * @return 主键值 + */ + @Override + protected Serializable pkVal() { + return this.id; + } +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPermissionGroupMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPermissionGroupMapper.java new file mode 100644 index 00000000..4ad68967 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPermissionGroupMapper.java @@ -0,0 +1,10 @@ +package cn.axzo.tyr.server.repository.mapper; + +import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +@Mapper +public interface SaasPermissionGroupMapper extends BaseMapper { + +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPermissionGroupScopeMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPermissionGroupScopeMapper.java new file mode 100644 index 00000000..9a6ce08e --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPermissionGroupScopeMapper.java @@ -0,0 +1,11 @@ +package cn.axzo.tyr.server.repository.mapper; + +import cn.axzo.tyr.server.repository.entity.SaasPermissionGroupScope; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SaasPermissionGroupScopeMapper extends BaseMapper { + +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPgroupRoleRelationMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPgroupRoleRelationMapper.java new file mode 100644 index 00000000..061aca58 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPgroupRoleRelationMapper.java @@ -0,0 +1,11 @@ +package cn.axzo.tyr.server.repository.mapper; + +import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SaasPgroupRoleRelationMapper extends BaseMapper { + +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleGroupMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleGroupMapper.java new file mode 100644 index 00000000..e6c7c56d --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleGroupMapper.java @@ -0,0 +1,11 @@ +package cn.axzo.tyr.server.repository.mapper; + +import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SaasRoleGroupMapper extends BaseMapper { + +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleGroupRelationMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleGroupRelationMapper.java new file mode 100644 index 00000000..bdc39ded --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleGroupRelationMapper.java @@ -0,0 +1,11 @@ +package cn.axzo.tyr.server.repository.mapper; + +import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SaasRoleGroupRelationMapper extends BaseMapper { + +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleMapper.java new file mode 100644 index 00000000..2ceeb2d8 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleMapper.java @@ -0,0 +1,11 @@ +package cn.axzo.tyr.server.repository.mapper; + +import cn.axzo.tyr.server.repository.entity.SaasRole; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SaasRoleMapper extends BaseMapper { + +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupDao.java new file mode 100644 index 00000000..bb29335d --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupDao.java @@ -0,0 +1,12 @@ +package cn.axzo.tyr.server.repository.service; + +import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup; +import cn.axzo.tyr.server.repository.mapper.SaasPermissionGroupMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Repository; + +@Repository +public class SaasPermissionGroupDao extends ServiceImpl { + +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupScopeDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupScopeDao.java new file mode 100644 index 00000000..00587ebd --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupScopeDao.java @@ -0,0 +1,14 @@ +package cn.axzo.tyr.server.repository.service; + +import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup; +import cn.axzo.tyr.server.repository.entity.SaasPermissionGroupScope; +import cn.axzo.tyr.server.repository.mapper.SaasPermissionGroupMapper; +import cn.axzo.tyr.server.repository.mapper.SaasPermissionGroupScopeMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Repository; + +@Repository +public class SaasPermissionGroupScopeDao extends ServiceImpl { + +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupRoleRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupRoleRelationDao.java new file mode 100644 index 00000000..624e7e5d --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupRoleRelationDao.java @@ -0,0 +1,14 @@ +package cn.axzo.tyr.server.repository.service; + +import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup; +import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; +import cn.axzo.tyr.server.repository.mapper.SaasPermissionGroupMapper; +import cn.axzo.tyr.server.repository.mapper.SaasPgroupRoleRelationMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Repository; + +@Repository +public class SaasPgroupRoleRelationDao extends ServiceImpl { + +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleDao.java new file mode 100644 index 00000000..3d413049 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleDao.java @@ -0,0 +1,14 @@ +package cn.axzo.tyr.server.repository.service; + +import cn.axzo.tyr.server.repository.entity.SaasRole; +import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; +import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupMapper; +import cn.axzo.tyr.server.repository.mapper.SaasRoleMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Repository; + +@Repository +public class SaasRoleDao extends ServiceImpl { + +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java new file mode 100644 index 00000000..f7207a8c --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java @@ -0,0 +1,14 @@ +package cn.axzo.tyr.server.repository.service; + +import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; +import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; +import cn.axzo.tyr.server.repository.mapper.SaasPgroupRoleRelationMapper; +import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Repository; + +@Repository +public class SaasRoleGroupDao extends ServiceImpl { + +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupRelationDao.java new file mode 100644 index 00000000..f8a24f9f --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupRelationDao.java @@ -0,0 +1,14 @@ +package cn.axzo.tyr.server.repository.service; + +import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; +import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation; +import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupMapper; +import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupRelationMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Repository; + +@Repository +public class SaasRoleGroupRelationDao extends ServiceImpl { + +} + From 55b62390dd334b05d4fad946a8138c60522a16b3 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Wed, 6 Sep 2023 15:56:17 +0800 Subject: [PATCH 004/186] =?UTF-8?q?add=20-=20=E5=AE=9A=E4=B9=89=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tyr-api/pom.xml | 4 ++ .../cn/axzo/tyr/client/feign/ProductApi.java | 54 ++++++++++++++++ .../client/model/product/ProductAddReq.java | 46 ++++++++++++++ .../ProductFeatureRelationSearchReq.java | 29 +++++++++ .../product/ProductFeatureRelationVO.java | 39 ++++++++++++ .../model/product/ProductSearchListReq.java | 36 +++++++++++ .../model/product/ProductSearchPageReq.java | 39 ++++++++++++ .../model/product/ProductUpdateReq.java | 29 +++++++++ .../tyr/client/model/product/ProductVO.java | 61 +++++++++++++++++++ 9 files changed, 337 insertions(+) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationVO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java diff --git a/tyr-api/pom.xml b/tyr-api/pom.xml index 298ff057..2b900765 100644 --- a/tyr-api/pom.xml +++ b/tyr-api/pom.xml @@ -18,5 +18,9 @@ cn.axzo.framework axzo-consumer-spring-cloud-starter + + cn.axzo.framework + axzo-core + diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java new file mode 100644 index 00000000..27faff5e --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java @@ -0,0 +1,54 @@ +package cn.axzo.tyr.client.feign; + +import cn.axzo.framework.domain.web.result.ApiPageResult; +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.product.ProductAddReq; +import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq; +import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO; +import cn.axzo.tyr.client.model.product.ProductSearchListReq; +import cn.axzo.tyr.client.model.product.ProductSearchPageReq; +import cn.axzo.tyr.client.model.product.ProductUpdateReq; +import cn.axzo.tyr.client.model.product.ProductVO; +import com.sun.tools.javac.util.DefinedBy; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; +import java.util.Map; + +/** + * 产品相关 API + * + * @author wangli + * @since 2023/9/6 14:47 + */ +@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080}") +public interface ProductApi { + + @PostMapping("api/auth/product/list") + ApiResult> list(@RequestBody ProductSearchListReq req); + @PostMapping("api/auth/product/page") + ApiPageResult page(@RequestBody ProductSearchPageReq req); + + @GetMapping("api/auth/product/get/id") + ApiResult getById(Long id); + + @PostMapping("api/auth/product/add") + ApiResult add(@RequestBody ProductAddReq req); + + @PutMapping("api/auth/product/update") + ApiResult update(@RequestBody ProductUpdateReq req); + + @DeleteMapping("api/auth/product/delete/id") + ApiResult delete(Long id); + + @PostMapping("api/auth/product/feature/relation/list") + ApiResult> featureList(@RequestBody ProductFeatureRelationSearchReq req); + + @PostMapping("api/auth/products/feature/relation/map") + ApiResult>> featureMap(@RequestBody List req); +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java new file mode 100644 index 00000000..01e5f8aa --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java @@ -0,0 +1,46 @@ +package cn.axzo.tyr.client.model.product; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; + +/** + * 产品新增模型 + * + * @author wangli + * @since 2023/9/6 15:13 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ProductAddReq { + + /** + * 产品名称 + */ + @NotBlank(message = "产品名称不能为空") + @Length(max = 35, message = "产品名称长度不能超过 35 个字符") + private String name; + + /** + * 产品图标 + */ + @NotBlank(message = "产品图标不能为空") + private String icon; + + /** + * 产品所属系统域 Code + */ + @NotBlank(message = "系统不能为空") + private String dictSysCode; + + /** + * 上下架状态 1:上架, 0:下架 + */ + private Integer status; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java new file mode 100644 index 00000000..babd3322 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.client.model.product; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 产品与权限点搜索入参模型 + * + * @author wangli + * @since 2023/9/6 15:48 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ProductFeatureRelationSearchReq { + + /** + * 产品 ID + */ + private Long productModuleId; + + /** + * 企业字典 Code + */ + private String dictSysCode; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationVO.java new file mode 100644 index 00000000..ffe275d3 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationVO.java @@ -0,0 +1,39 @@ +package cn.axzo.tyr.client.model.product; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 产品与权限点的关联关系响应模型 + * + * @author wangli + * @since 2023/9/6 15:44 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ProductFeatureRelationVO { + + /** + * 关系表主键 ID + */ + private Long id; + + /** + * 所属产品 ID + */ + private Long productModuleId; + + /** + * 所属企业字典 Code + */ + private String dictSysCode; + + /** + * 权限点 ID + */ + private Long featureId; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java new file mode 100644 index 00000000..0924dbf8 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java @@ -0,0 +1,36 @@ +package cn.axzo.tyr.client.model.product; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 产品分页搜索 + * + * @author wangli + * @since 2023/9/6 14:58 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ProductSearchListReq{ + + /** + * 产品名称 + */ + private String name; + + /** + * 企业字典系统域 Code + */ + private String dictSysCode; + + /** + * 状态 + */ + private Integer status; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java new file mode 100644 index 00000000..18909813 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java @@ -0,0 +1,39 @@ +package cn.axzo.tyr.client.model.product; + + +import cn.axzo.core.domain.PageRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +/** + * 产品分页搜索 + * + * @author wangli + * @since 2023/9/6 14:58 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ProductSearchPageReq extends PageRequest { + + /** + * 产品名称 + */ + private String name; + + /** + * 企业字典系统域 Code + */ + private String dictSysCode; + + /** + * 状态 + */ + private Integer status; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java new file mode 100644 index 00000000..33f737b5 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.client.model.product; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; + +/** + * 产品更新模型 + * + * @author wangli + * @since 2023/9/6 15:13 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ProductUpdateReq extends ProductAddReq { + /** + * 产品 ID + */ + @NotNull(message = "产品 ID 不能为空") + private String id; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java new file mode 100644 index 00000000..8b014de3 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java @@ -0,0 +1,61 @@ +package cn.axzo.tyr.client.model.product; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * 产品模型 + * + * @author wangli + * @since 2023/9/6 14:51 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ProductVO { + + /** + * 产品 ID + */ + private String id; + + /** + * 产品名称 + */ + private String name; + + /** + * 产品图标 + */ + private String icon; + + /** + * 产品所属系统域 Code + */ + private String dictSysCode; + + /** + * 产品所属系统域 Desc + */ + private String dictSysCodeDesc; + + /** + * 上下架状态 1:上架, 0:下架 + */ + private Integer status; + + /** + * 创建时间 + */ + private Date createAt; + + /** + * 更新时间 + */ + private Date updateAt; +} From c95bc10fdc54a2b97fe07dade2c69a89bcbb9a66 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Wed, 6 Sep 2023 16:04:11 +0800 Subject: [PATCH 005/186] =?UTF-8?q?fix=20-=20=E5=A4=84=E7=90=86=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/tyr/client/TyrClient.java | 57 ------------------- .../config/TyrClientAutoConfiguration.java | 13 ----- .../cn/axzo/tyr/client/feign/ProductApi.java | 1 - .../java/cn/axzo/tyr/client/feign/TyrApi.java | 33 ----------- .../axzo/tyr/client/feign/TyrApiFallback.java | 52 ----------------- .../tyr/client/feign/TyrFallbackFactory.java | 19 ------- .../model/product/ProductUpdateReq.java | 24 +++++++- 7 files changed, 21 insertions(+), 178 deletions(-) delete mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/TyrClient.java delete mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrApi.java delete mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrApiFallback.java delete mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrFallbackFactory.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/TyrClient.java b/tyr-api/src/main/java/cn/axzo/tyr/client/TyrClient.java deleted file mode 100644 index deaf693d..00000000 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/TyrClient.java +++ /dev/null @@ -1,57 +0,0 @@ -package cn.axzo.tyr.client; - -import cn.axzo.framework.domain.page.PageQO; -import cn.axzo.framework.domain.page.PageResp; -import cn.axzo.framework.domain.web.ApiException; -import cn.axzo.framework.domain.web.result.ApiPageResult; -import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.tyr.client.feign.TyrApi; -import cn.axzo.tyr.client.model.NewUserReq; -import cn.axzo.tyr.client.model.QueryUserReq; -import cn.axzo.tyr.client.model.UpdateUserReq; -import cn.axzo.tyr.client.model.UserRes; -import cn.azxo.framework.common.model.CommonResponse; -import lombok.RequiredArgsConstructor; - -import javax.validation.Valid; - -/** - * @Author: liyong.tian - * @Date: 2022/9/17 - * @Description: - */ -@RequiredArgsConstructor -public class TyrClient { - - private final TyrApi api; - - /** - * 老项目迁移使用 - */ - public UserRes createUser(@Valid NewUserReq req) { - CommonResponse apiResult = api.createUser(req); - if (apiResult.getCode() == 200) { - return apiResult.getData(); - } - throw new RuntimeException(apiResult.getMsg()); - } - - /** - * 新项目使用 - */ - public UserRes updateUser(Long id, @Valid UpdateUserReq req) { - ApiResult apiResult = api.updateUser(id, req); - if (apiResult.isSuccess()) { - return apiResult.getData(); - } - throw new ApiException(apiResult.getRespCode()); - } - - public PageResp fetchUsers(QueryUserReq req, PageQO page) { - ApiPageResult apiPageResult = api.fetchUsers(req.toQueryMap(), page); - if (apiPageResult.isSuccess()) { - return apiPageResult.toPage(); - } - throw new ApiException(apiPageResult.getRespCode()); - } -} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/config/TyrClientAutoConfiguration.java b/tyr-api/src/main/java/cn/axzo/tyr/client/config/TyrClientAutoConfiguration.java index bb8bf3b7..e26a0238 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/config/TyrClientAutoConfiguration.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/config/TyrClientAutoConfiguration.java @@ -1,10 +1,6 @@ package cn.axzo.tyr.client.config; -import cn.axzo.tyr.client.TyrClient; -import cn.axzo.tyr.client.feign.TyrApi; -import cn.axzo.tyr.client.feign.TyrFallbackFactory; import org.springframework.cloud.openfeign.EnableFeignClients; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** @@ -16,13 +12,4 @@ import org.springframework.context.annotation.Configuration; @Configuration public class TyrClientAutoConfiguration { - @Bean - public TyrFallbackFactory tyrFallbackFactory() { - return new TyrFallbackFactory(); - } - - @Bean - public TyrClient tyrClient(TyrApi tyrApi) { - return new TyrClient(tyrApi); - } } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java index 27faff5e..325ccd85 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java @@ -9,7 +9,6 @@ import cn.axzo.tyr.client.model.product.ProductSearchListReq; import cn.axzo.tyr.client.model.product.ProductSearchPageReq; import cn.axzo.tyr.client.model.product.ProductUpdateReq; import cn.axzo.tyr.client.model.product.ProductVO; -import com.sun.tools.javac.util.DefinedBy; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrApi.java deleted file mode 100644 index 11e90458..00000000 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrApi.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.axzo.tyr.client.feign; - -import cn.axzo.framework.domain.page.PageQO; -import cn.axzo.framework.domain.web.result.ApiPageResult; -import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.tyr.client.model.NewUserReq; -import cn.axzo.tyr.client.model.UpdateUserReq; -import cn.axzo.tyr.client.model.UserRes; -import cn.azxo.framework.common.model.CommonResponse; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.*; - -import java.util.Map; - -import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; - -/** - * @Author: liyong.tian - * @Date: 2022/9/17 - * @Description: - */ -@FeignClient(name = "tyr", url = "http://localhost:8899", fallbackFactory = TyrFallbackFactory.class) -public interface TyrApi { - - @PostMapping(value = "/api/v1/users", consumes = APPLICATION_JSON_VALUE) - CommonResponse createUser(@RequestBody NewUserReq req); - - @PutMapping(value = "/api/v2/users/{id}", consumes = APPLICATION_JSON_VALUE) - ApiResult updateUser(@PathVariable("id") Long id, @RequestBody UpdateUserReq req); - - @GetMapping(value = "/api/v2/users") - ApiPageResult fetchUsers(@RequestParam Map query, PageQO page); -} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrApiFallback.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrApiFallback.java deleted file mode 100644 index eab606a0..00000000 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrApiFallback.java +++ /dev/null @@ -1,52 +0,0 @@ -package cn.axzo.tyr.client.feign; - -import cn.axzo.framework.client.feign.FeignFallback; -import cn.axzo.framework.domain.page.PageQO; -import cn.axzo.framework.domain.web.result.ApiPageResult; -import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.tyr.client.model.NewUserReq; -import cn.axzo.tyr.client.model.UpdateUserReq; -import cn.axzo.tyr.client.model.UserRes; -import cn.azxo.framework.common.model.CommonResponse; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; - -import java.util.Map; - -/** - * @Author: liyong.tian - * @Date: 2022/9/17 - * @Description: - */ -@Slf4j -@RequiredArgsConstructor -public class TyrApiFallback implements TyrApi { - - private final FeignFallback fallback; - - /** - * 老项目迁移使用 - * @param req - * @return - */ - @Override - public CommonResponse createUser(NewUserReq req) { - log.error("[tyr-api] createUser fallback", fallback.getCause()); - return CommonResponse.error("创建用户失败"); - } - - /** - * 新项目推荐使用 - */ - @Override - public ApiResult updateUser(Long id, UpdateUserReq req) { - log.error("[tyr-api] updateUser fallback", fallback.getCause()); - return fallback.resp(); - } - - @Override - public ApiPageResult fetchUsers(Map query, PageQO page) { - log.error("[tyr-api] fetchUsers fallback", fallback.getCause()); - return fallback.pageResp(); - } -} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrFallbackFactory.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrFallbackFactory.java deleted file mode 100644 index d15c7c57..00000000 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrFallbackFactory.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.axzo.tyr.client.feign; - -import cn.axzo.framework.client.feign.FeignFallback; -import cn.axzo.framework.domain.web.code.IRespCode; -import cn.axzo.framework.domain.web.code.RespCode; -import feign.hystrix.FallbackFactory; -import org.springframework.stereotype.Component; - -@Component -public class TyrFallbackFactory implements FallbackFactory { - - // TODO: 2022/11/3 100-调整为具体的项目编号,XXX-调整为项目名 - private final IRespCode respCode = new RespCode("100" + "91001", "XXX服务不可用"); - - @Override - public TyrApiFallback create(Throwable cause) { - return new TyrApiFallback(new FeignFallback(cause, respCode)); - } -} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java index 33f737b5..38571156 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java @@ -3,7 +3,6 @@ package cn.axzo.tyr.client.model.product; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; -import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import javax.validation.constraints.NotNull; @@ -14,16 +13,35 @@ import javax.validation.constraints.NotNull; * @author wangli * @since 2023/9/6 15:13 */ -@EqualsAndHashCode(callSuper = true) @Data @Builder @AllArgsConstructor @NoArgsConstructor -public class ProductUpdateReq extends ProductAddReq { +public class ProductUpdateReq { /** * 产品 ID */ @NotNull(message = "产品 ID 不能为空") private String id; + /** + * 产品名称 + */ + private String name; + + /** + * 产品图标 + */ + private String icon; + + /** + * 产品所属系统域 Code + */ + private String dictSysCode; + + /** + * 上下架状态 1:上架, 0:下架 + */ + private Integer status; + } From cb88f99a24351fd1c9ba61ec37701f46feb6726f Mon Sep 17 00:00:00 2001 From: zhansihu Date: Wed, 6 Sep 2023 16:29:17 +0800 Subject: [PATCH 006/186] =?UTF-8?q?feature(=E6=9D=83=E9=99=90=E7=82=B9)?= =?UTF-8?q?=EF=BC=9A=E5=A2=9E=E5=8A=A0=E6=9D=83=E9=99=90=E7=82=B9API?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=9B=20refactor(init):=20=E8=A1=A5?= =?UTF-8?q?=E5=85=85=E4=BE=9D=E8=B5=96=EF=BC=8C=E5=88=A0=E9=99=A4=E7=A4=BA?= =?UTF-8?q?=E4=BE=8B=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/feign/PermissionPointApi.java | 24 ++++++ .../model/permission/PermissionPointDTO.java | 5 +- .../permission/PermissionPointTreeNode.java | 3 + .../PermissionPointTreeQueryReq.java | 5 ++ tyr-server/pom.xml | 22 +++-- .../cn/axzo/tyr/server/TyrApplication.java | 37 ++++++++- .../server/controller/app/package-info.java | 1 - .../permission/PermissionPointController.java | 33 ++++++++ .../server/controller/web/UserController.java | 76 ----------------- .../server/controller/web/UserResource.java | 78 ------------------ .../axzo/tyr/server/repository/UserDao.java | 55 ------------- .../server/repository/entity/SaasFeature.java | 3 - .../server/repository/entity/user/User.java | 27 ------ .../server/repository/mapper/UserMapper.java | 14 ---- .../service/PermissionPointService.java | 17 ++++ .../service/converter/UserConverter.java | 26 ------ .../service/dto/request/user/NewUserDTO.java | 44 ---------- .../dto/request/user/UpdateUserDTO.java | 47 ----------- .../service/dto/request/user/UserQO.java | 26 ------ .../service/dto/request/user/UserQO1.java | 26 ------ .../service/dto/response/user/UserVO.java | 34 -------- .../impl/PermissionPointServiceImpl.java | 53 ++++++++++++ .../tyr/server/service/user/UserService.java | 29 ------- .../service/user/impl/UserServiceImpl.java | 82 ------------------- .../permission/PermissionPointTest.java | 33 ++++++++ 25 files changed, 223 insertions(+), 577 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/controller/web/UserController.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/controller/web/UserResource.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/UserDao.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/user/User.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/UserMapper.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/converter/UserConverter.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/NewUserDTO.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UpdateUserDTO.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UserQO.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UserQO1.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/response/user/UserVO.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/user/UserService.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/user/impl/UserServiceImpl.java create mode 100644 tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java new file mode 100644 index 00000000..c39772f4 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java @@ -0,0 +1,24 @@ +package cn.axzo.tyr.client.feign; + +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; +import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + +import java.util.List; + +/** + * 权限点API接口 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/6 14:48 + */ +@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://localhost:8899}") +public interface PermissionPointApi { + + /** 查询权限点树形节点 **/ + @PostMapping(value = "/api/v1/permissionPoint/listTreeNodes") + ApiResult> listTreeNodes(PermissionPointTreeQueryReq request); +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java index d4b8f613..bec51d28 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java @@ -1,5 +1,7 @@ package cn.axzo.tyr.client.model.permission; +import lombok.Data; + import java.time.LocalDateTime; /** @@ -9,6 +11,7 @@ import java.time.LocalDateTime; * @author: ZhanSiHu * @date: 2023/9/5 15:50 */ +@Data public class PermissionPointDTO { /** @@ -68,7 +71,7 @@ public class PermissionPointDTO { private Integer sort; /** - * 菜单适用于平台 0:企业工作台 1:项目工作台 + * 菜单适用工作台 */ private String terminal; diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java index 312b79e3..469123e1 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java @@ -1,5 +1,7 @@ package cn.axzo.tyr.client.model.permission; +import lombok.Data; + import java.util.List; /** @@ -9,6 +11,7 @@ import java.util.List; * @author: ZhanSiHu * @date: 2023/9/5 15:20 */ +@Data public class PermissionPointTreeNode { /** 权限点ID **/ private Long permissionPointId; diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java index 66a994cd..f1f01d56 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java @@ -2,6 +2,8 @@ package cn.axzo.tyr.client.model.permission; import lombok.Data; +import java.util.List; + /** * 权限点树形查询请求参数 * @@ -20,4 +22,7 @@ public class PermissionPointTreeQueryReq { /** 权限点父级ID - 用于查询子节点 **/ private Long parentId; + + /** 权限点所属工作台 **/ + private List terminalList; } diff --git a/tyr-server/pom.xml b/tyr-server/pom.xml index a416ea86..8ea77f14 100644 --- a/tyr-server/pom.xml +++ b/tyr-server/pom.xml @@ -20,6 +20,13 @@ + + + cn.axzo.tyr + tyr-api + ${project.version} + + cn.axzo.framework axzo-web-spring-boot-starter @@ -36,16 +43,21 @@ cn.axzo.framework axzo-processor-spring-boot-starter + + cn.axzo.basics + basics-common + + + + + mysql + mysql-connector-java + cn.axzo.framework axzo-mybatisplus-spring-boot-starter - - - cn.axzo.framework - axzo-swagger-yapi-spring-boot-starter - com.alibaba diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/TyrApplication.java b/tyr-server/src/main/java/cn/axzo/tyr/server/TyrApplication.java index dd5073f9..e0449744 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/TyrApplication.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/TyrApplication.java @@ -1,13 +1,44 @@ package cn.axzo.tyr.server; +import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.core.env.Environment; +import org.springframework.scheduling.annotation.EnableAsync; -@MapperScan(value = {"cn.axzo.**.mapper"}) -@SpringBootApplication +@Slf4j +@EnableAsync +@EnableDiscoveryClient +@EnableFeignClients(basePackages = { + "cn.axzo.data.collection.api", +}) +@MapperScan(value = {"cn.axzo.tyr.server.repository.mapper"}) +@SpringBootApplication(scanBasePackages = "cn.axzo") public class TyrApplication { public static void main(String[] args) { - SpringApplication.run(TyrApplication.class, args); + ConfigurableApplicationContext run = SpringApplication.run(TyrApplication.class, args); + Environment env = run.getEnvironment(); + log.info( + "--------------------------------------------------------------------------------------------------------------------\n" + + "Application 【{}】 is running on 【{}】 environment!\n" + + "Api Local: \thttp://127.0.0.1:{}\n" + + "Mysql: \t{}\t username:{}\n" + + "Redis: \t{}:{}\t database:{}\n" + + "RabbitMQ: \t{}\t username:{}", + env.getProperty("spring.application.name"), + env.getProperty("spring.profiles.active"), + env.getProperty("server.port"), + env.getProperty("spring.datasource.url"), + env.getProperty("spring.datasource.username"), + env.getProperty("spring.redis.host"), + env.getProperty("spring.redis.port"), + env.getProperty("spring.redis.database"), + env.getProperty("spring.rabbitmq.addresses"), + env.getProperty("spring.rabbitmq.username") + + "\n----------------------------------------------------------"); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/app/package-info.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/app/package-info.java index 49e38f03..e69de29b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/app/package-info.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/app/package-info.java @@ -1 +0,0 @@ -package cn.axzo.tyr.server.controller.app; \ No newline at end of file diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java new file mode 100644 index 00000000..c1cc1252 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java @@ -0,0 +1,33 @@ +package cn.axzo.tyr.server.controller.permission; + +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.feign.PermissionPointApi; +import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; +import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; +import cn.axzo.tyr.server.service.PermissionPointService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 权限点接口实现 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/6 14:55 + */ +@Slf4j +@RestController +@RequiredArgsConstructor +public class PermissionPointController implements PermissionPointApi { + + private final PermissionPointService permissionPointService; + + @Override + public ApiResult> listTreeNodes(PermissionPointTreeQueryReq request) { + + return ApiResult.ok(permissionPointService.listTreeNodes(request)); + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/web/UserController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/web/UserController.java deleted file mode 100644 index 7ce449bd..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/web/UserController.java +++ /dev/null @@ -1,76 +0,0 @@ -package cn.axzo.tyr.server.controller.web; - -import cn.axzo.tyr.server.service.user.UserService; -import cn.axzo.tyr.server.service.dto.request.user.NewUserDTO; -import cn.axzo.tyr.server.service.dto.request.user.UpdateUserDTO; -import cn.axzo.tyr.server.service.dto.request.user.UserQO; -import cn.axzo.tyr.server.service.dto.response.user.UserVO; -import cn.azxo.framework.common.model.CommonPageResponse; -import cn.azxo.framework.common.model.CommonResponse; -import com.github.xiaoymin.knife4j.annotations.ApiSupport; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; - -/** - * @Author: liyong.tian - * @Date: 2022/9/2 - * @Description: - */ -@Slf4j -@Api(tags = "web-用户信息接口") -@ApiSupport(author = "田立勇") -@RequestMapping("/api/v1") -@RestController -@RequiredArgsConstructor -public class UserController { - - private final UserService userService; - - @ApiOperation(value = "创建用户") - @PostMapping("/users") - public CommonResponse createUser(@Valid @RequestBody NewUserDTO dto) { - log.info("REST request to save user : {}", dto); - // 校验入参 - dto.valid(); - UserVO result = userService.create(dto); - return CommonResponse.success(result); - } - - @ApiOperation(value = "修改用户") - @PutMapping("/users/{id}") - public CommonResponse updateUser(@ApiParam("用户ID") @PathVariable Long id, - @Valid @RequestBody UpdateUserDTO dto) { - log.info("REST request to update user : {}", dto); - // 校验入参 - dto.valid(); - UserVO result = userService.update(id, dto); - return CommonResponse.success(result); - } - - @ApiOperation("获取用户列表") - @GetMapping("/users") - public CommonResponse> getUsers(@Valid UserQO userQO) { - CommonPageResponse results = userService.queryByPage(userQO); - return CommonResponse.success(results); - } - - @ApiOperation("获取用户详情") - @GetMapping("/users/{id}") - public CommonResponse getUser(@ApiParam("用户ID") @PathVariable Long id) { - UserVO result = userService.getOne(id); - return CommonResponse.success(result); - } - - @ApiOperation("删除用户") - @DeleteMapping("/users/{id}") - public CommonResponse deleteUser(@ApiParam("用户ID") @PathVariable Long id) { - userService.delete(id); - return CommonResponse.success(); - } -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/web/UserResource.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/web/UserResource.java deleted file mode 100644 index 73607e7f..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/web/UserResource.java +++ /dev/null @@ -1,78 +0,0 @@ -package cn.axzo.tyr.server.controller.web; - -import cn.axzo.framework.domain.page.PageQO; -import cn.axzo.framework.domain.page.PageResp; -import cn.axzo.framework.web.http.ApiResponse; -import cn.axzo.framework.web.http.ApiPageResponse; -import cn.axzo.tyr.server.service.dto.request.user.NewUserDTO; -import cn.axzo.tyr.server.service.dto.request.user.UpdateUserDTO; -import cn.axzo.tyr.server.service.dto.request.user.UserQO1; -import cn.axzo.tyr.server.service.dto.response.user.UserVO; -import cn.axzo.tyr.server.service.user.UserService; -import com.github.xiaoymin.knife4j.annotations.ApiSupport; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; - -/** - * @Author: liyong.tian - * @Date: 2022/10/28 - * @Description: 新项目搭建推荐方式 - */ -@Slf4j -@Api(tags = "web-用户信息接口") -@ApiSupport(author = "田立勇") -@RequestMapping("/api/v2") -@RestController -@RequiredArgsConstructor -public class UserResource { - - private final UserService userService; - - @ApiOperation(value = "创建用户") - @PostMapping("/users") - public ApiResponse createUser(@Valid @RequestBody NewUserDTO dto) { - log.info("REST request to save user : {}", dto); - // 校验入参 - dto.valid(); - UserVO result = userService.create(dto); - return ApiResponse.ok(result); - } - - @ApiOperation(value = "修改用户") - @PutMapping("/users/{id}") - public ApiResponse updateUser(@ApiParam("用户ID") @PathVariable Long id, - @Valid @RequestBody UpdateUserDTO dto) { - log.info("REST request to update user : {}", dto); - // 校验入参 - dto.valid(); - UserVO result = userService.update(id, dto); - return ApiResponse.ok(result); - } - - @ApiOperation("获取用户列表") - @GetMapping("/users") - public ApiPageResponse getUsers(@ModelAttribute UserQO1 userQo, PageQO page) { - PageResp results = userService.find(userQo, page); - return ApiPageResponse.ok(results); - } - - @ApiOperation("获取用户详情") - @GetMapping("/users/{id}") - public ApiResponse getUser(@ApiParam("用户ID") @PathVariable Long id) { - UserVO result = userService.getOne(id); - return ApiResponse.ok(result); - } - - @ApiOperation("删除用户") - @DeleteMapping("/users/{id}") - public ApiResponse deleteUser(@ApiParam("用户ID") @PathVariable Long id) { - userService.delete(id); - return ApiResponse.ok(); - } -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/UserDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/UserDao.java deleted file mode 100644 index b0909277..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/UserDao.java +++ /dev/null @@ -1,55 +0,0 @@ -package cn.axzo.tyr.server.repository; - -import cn.axzo.framework.domain.page.PageQO; -import cn.axzo.tyr.server.repository.mapper.UserMapper; -import cn.axzo.tyr.server.service.dto.request.user.UserQO; -import cn.axzo.tyr.server.service.dto.request.user.UserQO1; -import cn.axzo.tyr.server.repository.entity.user.User; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Repository; - -/** - * @Author: liyong.tian - * @Date: 2022/9/5 - * @Description: - */ -@Repository -@RequiredArgsConstructor -public class UserDao extends ServiceImpl { - - private final UserMapper userMapper; - - public User findById(Long id) { - return userMapper.selectById(id); - } - - public void delete(Long id) { - userMapper.deleteById(id); - } - - public IPage queryByPage(UserQO userQO) { - return userMapper.selectPage(userQO.toPage(), - Wrappers.lambdaQuery(User.class) - .eq(userQO.getId() != null, User::getId, userQO.getId()) - .like(StringUtils.isNotBlank(userQO.getName()), User::getName, userQO.getName()) - .like(StringUtils.isNotBlank(userQO.getPhone()), User::getPhone, userQO.getPhone()) - .like(StringUtils.isNotBlank(userQO.getEmail()), User::getEmail, userQO.getEmail()) - .orderByDesc(User::getCreateAt) - ); - } - - public IPage find(UserQO1 userQO, PageQO page) { - return userMapper.selectPage(page.toPage(), - Wrappers.lambdaQuery(User.class) - .eq(userQO.getId() != null, User::getId, userQO.getId()) - .like(StringUtils.isNotBlank(userQO.getName()), User::getName, userQO.getName()) - .like(StringUtils.isNotBlank(userQO.getPhone()), User::getPhone, userQO.getPhone()) - .like(StringUtils.isNotBlank(userQO.getEmail()), User::getEmail, userQO.getEmail()) - .orderByDesc(User::getCreateAt) - ); - } -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java index afcc8786..174de7cc 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java @@ -1,8 +1,6 @@ package cn.axzo.tyr.server.repository.entity; import cn.axzo.framework.data.mybatisplus.model.BaseEntity; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Builder; @@ -10,7 +8,6 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; -import java.time.LocalDateTime; /** *

diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/user/User.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/user/User.java deleted file mode 100644 index 3ceee26d..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/user/User.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.axzo.tyr.server.repository.entity.user; - -import cn.axzo.framework.data.mybatisplus.model.BaseEntity; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; - -/** - * @Author: liyong.tian - * @Date: 2022/9/5 - * @Description: - */ -@Data -@TableName("b_user") -public class User extends BaseEntity { - - private String name; - - private Integer sex; - - private Integer age; - - private String phone; - - private String email; - - private String address; -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/UserMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/UserMapper.java deleted file mode 100644 index 0f0704f9..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/UserMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.axzo.tyr.server.repository.mapper; - -import cn.axzo.tyr.server.repository.entity.user.User; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @Author: liyong.tian - * @Date: 2022/9/5 - * @Description: - */ -@Mapper -public interface UserMapper extends BaseMapper { -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java new file mode 100644 index 00000000..52bcf517 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java @@ -0,0 +1,17 @@ +package cn.axzo.tyr.server.service; + +import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; +import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; + +import java.util.List; + +/** + * 权限点服务 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/6 15:51 + */ +public interface PermissionPointService { + List listTreeNodes(PermissionPointTreeQueryReq request); +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/converter/UserConverter.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/converter/UserConverter.java deleted file mode 100644 index af7010d8..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/converter/UserConverter.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.axzo.tyr.server.service.converter; - -import cn.axzo.tyr.server.service.dto.request.user.NewUserDTO; -import cn.axzo.tyr.server.service.dto.request.user.UpdateUserDTO; -import cn.axzo.tyr.server.service.dto.response.user.UserVO; -import cn.axzo.tyr.server.repository.entity.user.User; -import org.mapstruct.Mapper; -import org.mapstruct.MappingTarget; - -import static org.mapstruct.NullValueCheckStrategy.ALWAYS; - -/** - * @Author: liyong.tian - * @Date: 2022/9/2 - * @Description: - */ -@Mapper( - componentModel = "spring", - nullValueCheckStrategy = ALWAYS -) -public interface UserConverter extends EntityConverter { - - User toEntity(NewUserDTO dto); - - void updateEntity(UpdateUserDTO dto, @MappingTarget User user); -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/NewUserDTO.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/NewUserDTO.java deleted file mode 100644 index 732aefe6..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/NewUserDTO.java +++ /dev/null @@ -1,44 +0,0 @@ -package cn.axzo.tyr.server.service.dto.request.user; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.apache.commons.lang3.StringUtils; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; - -/** - * @Author: liyong.tian - * @Date: 2022/9/2 - * @Description: - */ -@Data -public class NewUserDTO { - - @ApiModelProperty(value = "名称", position = 1) - @NotBlank(message = "名称不能为空") - private String name; - - @ApiModelProperty(value = "性别", position = 2) - @NotNull - private Integer sex; - - @ApiModelProperty(value = "年龄", position = 3) - private Integer age; - - @ApiModelProperty(value = "电话", position = 4) - private String phone; - - @ApiModelProperty(value = "邮箱", position = 5) - private String email; - - @ApiModelProperty(value = "地址", position = 6) - private String address; - - public void valid() { - // 电话和邮箱不能都为空 - if (StringUtils.isEmpty(phone) && StringUtils.isEmpty(email)) { - throw new RuntimeException("电话和邮箱不能都为空"); - } - } -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UpdateUserDTO.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UpdateUserDTO.java deleted file mode 100644 index bec543a7..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UpdateUserDTO.java +++ /dev/null @@ -1,47 +0,0 @@ -package cn.axzo.tyr.server.service.dto.request.user; - -import cn.axzo.framework.domain.web.ApiException; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.apache.commons.lang3.StringUtils; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; - -import static cn.axzo.tyr.server.common.enums.ErrorCode.USER_PHONE_EMAIL_IS_NULL; - -/** - * @Author: liyong.tian - * @Date: 2022/9/5 - * @Description: - */ -@Data -public class UpdateUserDTO { - - @ApiModelProperty(value = "名称", position = 1) - @NotBlank(message = "名称不能为空") - private String name; - - @ApiModelProperty(value = "性别", position = 2) - @NotNull - private Integer sex; - - @ApiModelProperty(value = "年龄", position = 3) - private Integer age; - - @ApiModelProperty(value = "电话", position = 4) - private String phone; - - @ApiModelProperty(value = "邮箱", position = 5) - private String email; - - @ApiModelProperty(value = "地址", position = 6) - private String address; - - public void valid() { - // 电话和邮箱不能都为空 - if (StringUtils.isEmpty(phone) && StringUtils.isEmpty(email)) { - throw new ApiException(USER_PHONE_EMAIL_IS_NULL); - } - } -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UserQO.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UserQO.java deleted file mode 100644 index 090a549b..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UserQO.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.axzo.tyr.server.service.dto.request.user; - -import cn.axzo.framework.domain.page.PageQO; -import io.swagger.annotations.ApiParam; -import lombok.Data; - -/** - * @Author: liyong.tian - * @Date: 2022/9/5 - * @Description: - */ -@Data -public class UserQO extends PageQO { - - @ApiParam("主键") - private Long id; - - @ApiParam("姓名") - private String name; - - @ApiParam("手机") - private String phone; - - @ApiParam("邮箱") - private String email; -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UserQO1.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UserQO1.java deleted file mode 100644 index 09c4dac5..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UserQO1.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.axzo.tyr.server.service.dto.request.user; - -import cn.axzo.framework.domain.page.PageQO; -import io.swagger.annotations.ApiParam; -import lombok.Data; - -/** - * @Author: liyong.tian - * @Date: 2022/9/5 - * @Description: - */ -@Data -public class UserQO1 { - - @ApiParam("主键") - private Long id; - - @ApiParam("姓名") - private String name; - - @ApiParam("手机") - private String phone; - - @ApiParam("邮箱") - private String email; -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/response/user/UserVO.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/response/user/UserVO.java deleted file mode 100644 index 8317e4cd..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/response/user/UserVO.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.axzo.tyr.server.service.dto.response.user; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @Author: liyong.tian - * @Date: 2022/9/2 - * @Description: - */ -@Data -public class UserVO { - - @ApiModelProperty(value = "id", position = 1) - private Long id; - - @ApiModelProperty(value = "名称", position = 2) - private String name; - - @ApiModelProperty(value = "性别", position = 3) - private Integer sex; - - @ApiModelProperty(value = "年龄", position = 4) - private Integer age; - - @ApiModelProperty(value = "电话", position = 5) - private String phone; - - @ApiModelProperty(value = "邮箱", position = 6) - private String email; - - @ApiModelProperty(value = "地址", position = 7) - private String address; -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java new file mode 100644 index 00000000..fc1ead2d --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -0,0 +1,53 @@ +package cn.axzo.tyr.server.service.impl; + +import cn.axzo.basics.common.BeanMapper; +import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; +import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; +import cn.axzo.tyr.server.repository.entity.SaasFeature; +import cn.axzo.tyr.server.repository.service.SaasFeatureDao; +import cn.axzo.tyr.server.service.PermissionPointService; +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 权限点服务实现 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/6 15:51 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class PermissionPointServiceImpl implements PermissionPointService { + private final SaasFeatureDao saasFeatureDao; + + @Override + public List listTreeNodes(PermissionPointTreeQueryReq request) { + List list = saasFeatureDao.list(new LambdaQueryWrapper() + .eq(Objects.isNull(request.getDelegateType()), SaasFeature::getDelegatedType, request.getDelegateType()) + .eq(Objects.isNull(request.getParentId()), SaasFeature::getParentId, request.getParentId()) + .in(CollectionUtil.isEmpty(request.getTerminalList()), SaasFeature::getTerminal, request.getTerminalList()) + ); + return list.stream().map(this::feature2Node).collect(Collectors.toList()); + } + + private PermissionPointTreeNode feature2Node(SaasFeature feature) { + PermissionPointTreeNode node = new PermissionPointTreeNode(); + node.setPermissionPointId(feature.getId()); + node.setPermissionName(feature.getFeatureName()); + node.setParentId(feature.getParentId()); + node.setTerminal(feature.getTerminal()); + return node; + } + + +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/user/UserService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/user/UserService.java deleted file mode 100644 index 1cffffb4..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/user/UserService.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.axzo.tyr.server.service.user; - -import cn.axzo.framework.domain.page.PageQO; -import cn.axzo.framework.domain.page.PageResp; -import cn.axzo.tyr.server.service.dto.request.user.NewUserDTO; -import cn.axzo.tyr.server.service.dto.request.user.UpdateUserDTO; -import cn.axzo.tyr.server.service.dto.request.user.UserQO; -import cn.axzo.tyr.server.service.dto.request.user.UserQO1; -import cn.axzo.tyr.server.service.dto.response.user.UserVO; -import cn.azxo.framework.common.model.CommonPageResponse; - -/** - * @Author: liyong.tian - * @Date: 2022/9/2 - * @Description: - */ -public interface UserService { - UserVO create(NewUserDTO dto); - - UserVO update(Long id, UpdateUserDTO dto); - - UserVO getOne(Long id); - - void delete(Long id); - - CommonPageResponse queryByPage(UserQO userQO); - - PageResp find(UserQO1 userQo, PageQO page); -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/user/impl/UserServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/user/impl/UserServiceImpl.java deleted file mode 100644 index 56fae11d..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/user/impl/UserServiceImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -package cn.axzo.tyr.server.service.user.impl; - -import cn.axzo.framework.domain.page.PageQO; -import cn.axzo.framework.domain.page.PageResp; -import cn.axzo.framework.domain.web.ApiException; -import cn.axzo.tyr.server.common.enums.ErrorCode; -import cn.axzo.tyr.server.service.dto.request.user.NewUserDTO; -import cn.axzo.tyr.server.service.dto.request.user.UpdateUserDTO; -import cn.axzo.tyr.server.service.dto.request.user.UserQO; -import cn.axzo.tyr.server.service.dto.request.user.UserQO1; -import cn.axzo.tyr.server.service.dto.response.user.UserVO; -import cn.axzo.tyr.server.repository.entity.user.User; -import cn.axzo.tyr.server.repository.UserDao; -import cn.axzo.tyr.server.service.user.UserService; -import cn.axzo.tyr.server.service.converter.UserConverter; -import cn.azxo.framework.common.model.CommonPageResponse; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * @Author: liyong.tian - * @Date: 2022/9/2 - * @Description: - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class UserServiceImpl implements UserService { - - private final UserConverter userConverter; - - private final UserDao userDao; - - @Override - public UserVO create(NewUserDTO dto) { - User user = userConverter.toEntity(dto); - userDao.save(user); - return userConverter.toVo(user); - } - - @Override - public UserVO update(Long id, UpdateUserDTO dto) { - User user = userDao.findById(id); - if (user == null) { - throw new ApiException(ErrorCode.USER_NOT_EXISTS, id); - } - userConverter.updateEntity(dto, user); - return userConverter.toVo(user); - } - - @Override - public UserVO getOne(Long id) { - User user = userDao.findById(id); - return userConverter.toVo(user); - } - - @Override - public void delete(Long id) { - userDao.delete(id); - } - - @Override - public CommonPageResponse queryByPage(UserQO userQo) { - IPage page = userDao.queryByPage(userQo); - List userList = page.getRecords(); - if (CollectionUtils.isEmpty(userList)) { - return CommonPageResponse.zero(userQo.getPage(), userQo.getPageSize()); - } - return new CommonPageResponse<>(page.getCurrent(), page.getSize(), page.getTotal(), userConverter.toVo(page.getRecords())); - } - - @Override - public PageResp find(UserQO1 userQo, PageQO page) { - IPage userPage = userDao.find(userQo, page); - return PageResp.list(userPage, userConverter.toVo(userPage.getRecords())); - } -} diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java new file mode 100644 index 00000000..1a4ba03b --- /dev/null +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java @@ -0,0 +1,33 @@ +package cn.axzo.tyr.server.permission; + +import cn.axzo.tyr.server.controller.permission.PermissionPointController; +import cn.axzo.tyr.server.repository.entity.SaasFeature; +import cn.axzo.tyr.server.repository.service.SaasFeatureDao; +import com.alibaba.fastjson.JSON; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.Arrays; +import java.util.List; + +/** + * 权限点测试 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/6 14:59 + */ +@SpringBootTest +public class PermissionPointTest { + @Autowired + private PermissionPointController controller; + @Autowired + private SaasFeatureDao saasFeatureDao; + + @Test + public void testList() { + List saasFeatures = saasFeatureDao.listByIds(Arrays.asList(206L, 207L, 208L)); + System.out.println(JSON.toJSONString(saasFeatures)); + } +} From d1c89b7e4d56b94067cb3b2211755dcfaaee27f1 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Wed, 6 Sep 2023 20:06:43 +0800 Subject: [PATCH 007/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):D?= =?UTF-8?q?TO=E8=B0=83=E6=95=B4=EF=BC=9B=E5=A2=9E=E5=8A=A0=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../permission/PermissionPointTreeNode.java | 30 ++++++++++++++++++- .../PermissionPointTreeQueryReq.java | 2 +- .../service/PermissionPointService.java | 9 ++++++ .../impl/PermissionPointServiceImpl.java | 5 ++++ 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java index 469123e1..31266848 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java @@ -1,5 +1,6 @@ package cn.axzo.tyr.client.model.permission; +import cn.axzo.basics.common.model.IBaseTree; import lombok.Data; import java.util.List; @@ -12,7 +13,7 @@ import java.util.List; * @date: 2023/9/5 15:20 */ @Data -public class PermissionPointTreeNode { +public class PermissionPointTreeNode implements IBaseTree { /** 权限点ID **/ private Long permissionPointId; @@ -22,9 +23,36 @@ public class PermissionPointTreeNode { /** 权限点名称 **/ private String permissionName; + /** 排序 **/ + private Integer sort; + /** 所属端 **/ private String terminal; + /** 权限点层级path **/ + private String path; + /** 下级节点 **/ private List children; + + + @Override + public Long getNodeCode() { + return permissionPointId; + } + + @Override + public Long getParentNodeCode() { + return parentId; + } + + @Override + public List getNodeChildren() { + return children; + } + + @Override + public void setNodeChildren(List nodeChildren) { + this.children = nodeChildren; + } } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java index f1f01d56..9a1bb818 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java @@ -14,7 +14,7 @@ import java.util.List; @Data public class PermissionPointTreeQueryReq { - /** 授权策略 1-平台授权型 2-客户授权型 免授权型, 为空查全部**/ + /** 授权策略 1-平台授权型 2-客户授权型 3-免授权型, 为空查全部**/ private Integer delegateType; /** 搜索关键字 - 名称模糊搜索 **/ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java index 52bcf517..c4764aa8 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java @@ -13,5 +13,14 @@ import java.util.List; * @date: 2023/9/6 15:51 */ public interface PermissionPointService { + + /** + * 权限点条件查询 - 未组装为树形 + * **/ List listTreeNodes(PermissionPointTreeQueryReq request); + + /** + * 根据权限点ID查询基本信息 + * **/ + List listNodesByIds(List permissionIds); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index fc1ead2d..5041aed9 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -40,6 +40,11 @@ public class PermissionPointServiceImpl implements PermissionPointService { return list.stream().map(this::feature2Node).collect(Collectors.toList()); } + @Override + public List listNodesByIds(List permissionIds) { + return null; + } + private PermissionPointTreeNode feature2Node(SaasFeature feature) { PermissionPointTreeNode node = new PermissionPointTreeNode(); node.setPermissionPointId(feature.getId()); From 657ec88c7f712018a9a220542d243eafc78da8e3 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Wed, 6 Sep 2023 20:24:22 +0800 Subject: [PATCH 008/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):D?= =?UTF-8?q?TO=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/model/permission/PermissionPointTreeNode.java | 5 +++++ .../client/model/permission/PermissionPointTreeQueryReq.java | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java index 31266848..0cb92992 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java @@ -32,6 +32,11 @@ public class PermissionPointTreeNode implements IBaseTree children; diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java index 9a1bb818..6c5bf761 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java @@ -14,7 +14,7 @@ import java.util.List; @Data public class PermissionPointTreeQueryReq { - /** 授权策略 1-平台授权型 2-客户授权型 3-免授权型, 为空查全部**/ + /** 授权策略 0-全部 1-平台授权型 2-客户授权型 3-免授权型**/ private Integer delegateType; /** 搜索关键字 - 名称模糊搜索 **/ From 7b712f599f5bc3028902df62853adee54a10d297 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Wed, 6 Sep 2023 20:27:13 +0800 Subject: [PATCH 009/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):D?= =?UTF-8?q?TO=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/model/permission/PermissionPointTreeNode.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java index 0cb92992..76658990 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java @@ -37,6 +37,9 @@ public class PermissionPointTreeNode implements IBaseTree children; From f96e44493b994090e9d462cd87d283abf8d3393f Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Wed, 6 Sep 2023 20:37:31 +0800 Subject: [PATCH 010/186] =?UTF-8?q?update=20-=20=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=B0=83=E6=95=B4=E4=BA=A7=E5=93=81=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=8E=A5=E5=8F=A3=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/model/product/ProductAddReq.java | 6 +++--- .../model/product/ProductFeatureRelationSearchReq.java | 9 +++++++-- .../client/model/product/ProductFeatureRelationVO.java | 9 +++++++-- .../tyr/client/model/product/ProductSearchListReq.java | 4 ++-- .../tyr/client/model/product/ProductSearchPageReq.java | 4 ++-- .../axzo/tyr/client/model/product/ProductUpdateReq.java | 4 ++-- .../java/cn/axzo/tyr/client/model/product/ProductVO.java | 7 +------ 7 files changed, 24 insertions(+), 19 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java index 01e5f8aa..7a269b20 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java @@ -34,10 +34,10 @@ public class ProductAddReq { private String icon; /** - * 产品所属系统域 Code + * 产品所属工作台类型 */ - @NotBlank(message = "系统不能为空") - private String dictSysCode; + @NotBlank(message = "工作台类型不能为空") + private String workspaceType; /** * 上下架状态 1:上架, 0:下架 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java index babd3322..7e30dd25 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java @@ -23,7 +23,12 @@ public class ProductFeatureRelationSearchReq { private Long productModuleId; /** - * 企业字典 Code + * 工作台类型 */ - private String dictSysCode; + private String workspaceType; + + /** + * 单位类型 + */ + private String ouType; } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationVO.java index ffe275d3..3251124b 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationVO.java @@ -28,9 +28,14 @@ public class ProductFeatureRelationVO { private Long productModuleId; /** - * 所属企业字典 Code + * 工作台类型 */ - private String dictSysCode; + private String workspaceType; + + /** + * 单位类型 + */ + private String ouType; /** * 权限点 ID diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java index 0924dbf8..7b99248e 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java @@ -24,9 +24,9 @@ public class ProductSearchListReq{ private String name; /** - * 企业字典系统域 Code + * 工作台类型 */ - private String dictSysCode; + private String workspaceType; /** * 状态 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java index 18909813..b516a3ec 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java @@ -27,9 +27,9 @@ public class ProductSearchPageReq extends PageRequest { private String name; /** - * 企业字典系统域 Code + * 工作台类型 */ - private String dictSysCode; + private String workspaceType; /** * 状态 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java index 38571156..540996fe 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java @@ -35,9 +35,9 @@ public class ProductUpdateReq { private String icon; /** - * 产品所属系统域 Code + * 产品所属工作台类型 */ - private String dictSysCode; + private String workspaceType; /** * 上下架状态 1:上架, 0:下架 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java index 8b014de3..1e1e7ba1 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java @@ -35,15 +35,10 @@ public class ProductVO { private String icon; /** - * 产品所属系统域 Code + * 产品所属工作台类型 */ private String dictSysCode; - /** - * 产品所属系统域 Desc - */ - private String dictSysCodeDesc; - /** * 上下架状态 1:上架, 0:下架 */ From 49992df2a033bbb338eb3ffc4704fd95a3882689 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Thu, 7 Sep 2023 11:30:28 +0800 Subject: [PATCH 011/186] =?UTF-8?q?update=20-=20=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E8=B0=83=E6=95=B4=E4=BA=A7=E5=93=81=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=8E=A5=E5=8F=A3=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/model/product/ProductAddReq.java | 5 +++-- .../model/product/ProductFeatureRelationSearchReq.java | 8 ++------ .../client/model/product/ProductFeatureRelationVO.java | 9 ++------- .../tyr/client/model/product/ProductSearchListReq.java | 2 +- .../tyr/client/model/product/ProductSearchPageReq.java | 2 +- .../axzo/tyr/client/model/product/ProductUpdateReq.java | 2 +- .../java/cn/axzo/tyr/client/model/product/ProductVO.java | 2 +- 7 files changed, 11 insertions(+), 19 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java index 7a269b20..6b95d557 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; /** * 产品新增模型 @@ -36,8 +37,8 @@ public class ProductAddReq { /** * 产品所属工作台类型 */ - @NotBlank(message = "工作台类型不能为空") - private String workspaceType; + @NotNull(message = "工作台类型不能为空") + private Long dictWorkspaceTypeId; /** * 上下架状态 1:上架, 0:下架 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java index 7e30dd25..4668ebb3 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java @@ -23,12 +23,8 @@ public class ProductFeatureRelationSearchReq { private Long productModuleId; /** - * 工作台类型 + * 字典第三级 Code ID */ - private String workspaceType; + private Long dictCodeId; - /** - * 单位类型 - */ - private String ouType; } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationVO.java index 3251124b..ea2d114e 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationVO.java @@ -28,14 +28,9 @@ public class ProductFeatureRelationVO { private Long productModuleId; /** - * 工作台类型 + * 企业字典 ID */ - private String workspaceType; - - /** - * 单位类型 - */ - private String ouType; + private Long dictCodeId; /** * 权限点 ID diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java index 7b99248e..3c69a8af 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java @@ -26,7 +26,7 @@ public class ProductSearchListReq{ /** * 工作台类型 */ - private String workspaceType; + private Long dictWorkspaceTypeId; /** * 状态 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java index b516a3ec..3033dcba 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java @@ -29,7 +29,7 @@ public class ProductSearchPageReq extends PageRequest { /** * 工作台类型 */ - private String workspaceType; + private Long dictWorkspaceTypeId; /** * 状态 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java index 540996fe..7be464a1 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java @@ -37,7 +37,7 @@ public class ProductUpdateReq { /** * 产品所属工作台类型 */ - private String workspaceType; + private Long dictWorkspaceTypeId; /** * 上下架状态 1:上架, 0:下架 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java index 1e1e7ba1..b64ba074 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java @@ -37,7 +37,7 @@ public class ProductVO { /** * 产品所属工作台类型 */ - private String dictSysCode; + private Long dictWorkspaceTypeId; /** * 上下架状态 1:上架, 0:下架 From b6614036440b1c0a2627f3305e3fee4a88dfad59 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Thu, 7 Sep 2023 14:04:15 +0800 Subject: [PATCH 012/186] =?UTF-8?q?add=20-=20=E6=B7=BB=E5=8A=A0=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E7=9B=B8=E5=85=B3=20ORM=20=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/entity/ProductModule.java | 60 +++++++++++++++++++ .../SaasProductModuleFeatureRelation.java | 51 ++++++++++++++++ .../mapper/ProductModuleMapper.java | 15 +++++ ...aasProductModuleFeatureRelationMapper.java | 15 +++++ .../repository/service/ProductModuleDao.java | 18 ++++++ .../SaasProductModuleFeatureRelationDao.java | 18 ++++++ 6 files changed, 177 insertions(+) create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/ProductModule.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasProductModuleFeatureRelation.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/ProductModuleMapper.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasProductModuleFeatureRelationMapper.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/ProductModuleDao.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasProductModuleFeatureRelationDao.java diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/ProductModule.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/ProductModule.java new file mode 100644 index 00000000..caa174a1 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/ProductModule.java @@ -0,0 +1,60 @@ +package cn.axzo.tyr.server.repository.entity; + +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + * saas-产品表(SaasProduct)表实体类 + * + * @author makejava + * @since 2022-05-24 11:15:03 + */ +@Getter +@Setter +@ToString +@EqualsAndHashCode(callSuper = true) +@TableName("product_module") +public class ProductModule extends BaseEntity { + + /** + * 产品 icon + */ + private String icon; + + /** + * 产品板块名字 + */ + private String productName; + + /** + * 产品所属工作台字典 ID + */ + private Long dictWorkspaceTypeId; + + /** + * 产品状态 + */ + private Integer status; + + /** + * 产品板块备注 + */ + private String remark; + + /** + * 获取主键值 + * + * @return 主键值 + */ + @Override + protected Serializable pkVal() { + return this.id; + } +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasProductModuleFeatureRelation.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasProductModuleFeatureRelation.java new file mode 100644 index 00000000..698d783a --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasProductModuleFeatureRelation.java @@ -0,0 +1,51 @@ +package cn.axzo.tyr.server.repository.entity; + +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + * saas-账户表(SaasAccount)表实体类 + * + * @author makejava + * @since 2022-05-24 11:18:42 + */ +@Getter +@Setter +@ToString +@EqualsAndHashCode(callSuper = true) +@TableName("saas_product_module_feature_relation") +public class SaasProductModuleFeatureRelation extends BaseEntity { + + /** + * 产品 ID + */ + private Long productModuleId; + + /** + * 产品关联企业字典三级(ouType)的 ID + */ + private Long dictCodeId; + + /** + * 权限点 ID + */ + private Long featureId; + + + /** + * 获取主键值 + * + * @return 主键值 + */ + @Override + protected Serializable pkVal() { + return this.id; + } +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/ProductModuleMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/ProductModuleMapper.java new file mode 100644 index 00000000..f5158c8f --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/ProductModuleMapper.java @@ -0,0 +1,15 @@ +package cn.axzo.tyr.server.repository.mapper; + +import cn.axzo.tyr.server.repository.entity.ProductModule; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * saas-产品表(SaasProduct)表数据库访问层 + * + * @author makejava + * @since 2022-05-24 11:15:00 + */ +public interface ProductModuleMapper extends BaseMapper { + +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasProductModuleFeatureRelationMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasProductModuleFeatureRelationMapper.java new file mode 100644 index 00000000..74a17178 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasProductModuleFeatureRelationMapper.java @@ -0,0 +1,15 @@ +package cn.axzo.tyr.server.repository.mapper; + +import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 产品-菜单关联关系(SaasProductModuleFeatureRelation)表数据库访问层 + * + * @author makejava + * @since 2022-05-24 11:18:41 + */ +public interface SaasProductModuleFeatureRelationMapper extends BaseMapper { + +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/ProductModuleDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/ProductModuleDao.java new file mode 100644 index 00000000..ea020fad --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/ProductModuleDao.java @@ -0,0 +1,18 @@ +package cn.axzo.tyr.server.repository.service; + +import cn.axzo.tyr.server.repository.entity.ProductModule; +import cn.axzo.tyr.server.repository.mapper.ProductModuleMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Repository; + +/** + * saas-产品表(SaasProduct)表服务实现类 + * + * @author makejava + * @since 2022-05-24 11:15:04 + */ +@Repository +public class ProductModuleDao extends ServiceImpl { + +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasProductModuleFeatureRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasProductModuleFeatureRelationDao.java new file mode 100644 index 00000000..844bce5e --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasProductModuleFeatureRelationDao.java @@ -0,0 +1,18 @@ +package cn.axzo.tyr.server.repository.service; + +import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation; +import cn.axzo.tyr.server.repository.mapper.SaasProductModuleFeatureRelationMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Repository; + +/** + * 产品-菜单关联关系(SaasProductModuleFeatureRelation)表服务实现类 + * + * @author makejava + * @since 2022-05-24 11:18:41 + */ +@Repository +public class SaasProductModuleFeatureRelationDao extends ServiceImpl { + +} + From a3506509c3854faa2ac6f50fa333b0d61c1d687d Mon Sep 17 00:00:00 2001 From: zhansihu Date: Thu, 7 Sep 2023 16:02:00 +0800 Subject: [PATCH 013/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E5=AD=97=E6=AE=B5=E6=89=A9=E5=85=85=EF=BC=9B?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=A0=91=E5=BD=A2=E6=9F=A5=E8=AF=A2=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/model/enums/DelegatedType.java | 4 +- .../tyr/client/model/enums/FeatureType.java | 39 ++++++++ .../model/permission/PermissionPointDTO.java | 9 +- .../permission/PermissionPointTreeNode.java | 4 + .../PermissionPointTreeQueryReq.java | 2 +- .../permission/PermissionPointController.java | 1 + .../impl/PermissionPointServiceImpl.java | 96 +++++++++++++++++-- .../permission/PermissionPointTest.java | 14 +++ 8 files changed, 160 insertions(+), 9 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/FeatureType.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DelegatedType.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DelegatedType.java index cc9bf3bd..85c54168 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DelegatedType.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DelegatedType.java @@ -1,6 +1,7 @@ package cn.axzo.tyr.client.model.enums; import lombok.AllArgsConstructor; +import lombok.Getter; import java.util.HashMap; import java.util.Map; @@ -12,6 +13,7 @@ import java.util.Map; * @author: ZhanSiHu * @date: 2023/9/6 11:05 */ +@Getter @AllArgsConstructor public enum DelegatedType { @@ -30,7 +32,7 @@ public enum DelegatedType { } } - public DelegatedType apply(Integer code) { + public static DelegatedType apply(Integer code) { return code == null ? null :MAPPING.get(code); } } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/FeatureType.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/FeatureType.java new file mode 100644 index 00000000..63e1b2ea --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/FeatureType.java @@ -0,0 +1,39 @@ +package cn.axzo.tyr.client.model.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +/** + * 权限点元素类型 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/6 21:03 + */ +@Getter +@AllArgsConstructor +public enum FeatureType { + + MODULE(0, "模块"), + MENU(1, "菜单"), + PAGE(2, "页面"), + BUTTON(3, "按钮"), + ; + + private Integer code; + private String desc; + + private static final Map MAPPING = new HashMap<>(); + static { + for (FeatureType type : FeatureType.values()) { + MAPPING.put(type.code, type); + } + } + + public static FeatureType apply(Integer code) { + return code == null ? null :MAPPING.get(code); + } +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java index bec51d28..d76d2277 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java @@ -3,6 +3,7 @@ package cn.axzo.tyr.client.model.permission; import lombok.Data; import java.time.LocalDateTime; +import java.util.List; /** * 权限点对象 @@ -35,10 +36,13 @@ public class PermissionPointDTO { private String icon; /** - * 上级权限点id + * 父级权限点id */ private Long parentId; + /** 父级权限点名称 **/ + private String parentName; + /** * 页面路由 @@ -65,6 +69,9 @@ public class PermissionPointDTO { */ private String path; + /** 上级节点层级名称 **/ + private List parentPath; + /** * 排序 */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java index 76658990..e3f6b053 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java @@ -40,6 +40,10 @@ public class PermissionPointTreeNode implements IBaseTree children; diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java index 6c5bf761..0a0b5f5e 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java @@ -15,7 +15,7 @@ import java.util.List; public class PermissionPointTreeQueryReq { /** 授权策略 0-全部 1-平台授权型 2-客户授权型 3-免授权型**/ - private Integer delegateType; + private Integer delegateType = 0; /** 搜索关键字 - 名称模糊搜索 **/ private String keyword; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java index c1cc1252..b90c1a09 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java @@ -28,6 +28,7 @@ public class PermissionPointController implements PermissionPointApi { @Override public ApiResult> listTreeNodes(PermissionPointTreeQueryReq request) { + //查询数据 return ApiResult.ok(permissionPointService.listTreeNodes(request)); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 5041aed9..f7ffd5cf 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -1,21 +1,32 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.BeanMapper; +import cn.axzo.basics.common.util.TreeUtil; +import cn.axzo.framework.domain.web.BizException; +import cn.axzo.framework.domain.web.code.BaseCode; +import cn.axzo.tyr.client.model.enums.FeatureType; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.server.repository.entity.SaasFeature; import cn.axzo.tyr.server.repository.service.SaasFeatureDao; import cn.axzo.tyr.server.service.PermissionPointService; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Comparator; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * 权限点服务实现 @@ -32,12 +43,81 @@ public class PermissionPointServiceImpl implements PermissionPointService { @Override public List listTreeNodes(PermissionPointTreeQueryReq request) { - List list = saasFeatureDao.list(new LambdaQueryWrapper() - .eq(Objects.isNull(request.getDelegateType()), SaasFeature::getDelegatedType, request.getDelegateType()) - .eq(Objects.isNull(request.getParentId()), SaasFeature::getParentId, request.getParentId()) - .in(CollectionUtil.isEmpty(request.getTerminalList()), SaasFeature::getTerminal, request.getTerminalList()) - ); - return list.stream().map(this::feature2Node).collect(Collectors.toList()); + //查询条件构建 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .in(CollectionUtil.isNotEmpty(request.getTerminalList()), SaasFeature::getTerminal, request.getTerminalList()); + //查指定节点子级处理条件 + if (request.getParentId() != null && request.getParentId() != 0) { + SaasFeature parent = this.saasFeatureDao.getById(request.getParentId()); + if (parent == null) { + log.error("指定的父级节点不存在:{}", request.getParentId()); + throw new BizException(BaseCode.BAD_REQUEST); + } + //追加条件path左匹配 + queryWrapper.likeRight(SaasFeature::getPath, parent.getPath() + parent.getId() + "/"); + } + List list = saasFeatureDao.list(queryWrapper); + + //构建树形结构, 整体排序保证层级内的有序 - 优化点:构建树形结构时进行过滤 + List treeList = TreeUtil.buildTree(list.stream() + .map(this::feature2Node) + .sorted(Comparator.comparing(PermissionPointTreeNode::getSort)) + .collect(Collectors.toList())); + list = null; //for GC + + //搜索或需要按授权策略过滤 - 有额外的过滤条件 + List result = filterTreeNode(request, treeList); + + //指定parent后不需要顶级的工作台 + if (request.getParentId() != null) { + return result; + } + + //按terminal分组 + Map> mappingNode = treeList.stream() + .collect(Collectors.groupingBy(PermissionPointTreeNode::getTerminal)); + //构建terminal工作台层级 + + return result; + } + + private List filterTreeNode(PermissionPointTreeQueryReq request, List treeList) { + //过滤条件 + boolean needFilter = StrUtil.isNotBlank(request.getKeyword()) + || request.getDelegateType() != 0; + + if (needFilter) { + return treeList.stream().filter(x -> this.recursionFilter(request, x)).collect(Collectors.toList()); + } + return treeList; + } + + private boolean recursionFilter(PermissionPointTreeQueryReq request, PermissionPointTreeNode node) { + + //条件匹配 - 关键字 + boolean matchKeyword = request.getKeyword() == null || node.getPermissionName().contains(request.getKeyword()); + + //条件匹配 - 授权策略类型 + boolean matchDelegateType = request.getDelegateType() == 0 || Objects.equals(request.getDelegateType(), node.getDelegatedType()); + + if (matchKeyword && matchDelegateType) { + //如果匹配直接返回,否则过滤子节点 + return true; + } + + if (CollectionUtil.isEmpty(node.getChildren())) { + return false; + } + //过滤子节点 - 递归 - 必要时改为循环 + List filterChildren = node.getChildren().stream() + .filter(x -> recursionFilter(request, x)) + .collect(Collectors.toList()); + + if (CollectionUtil.isEmpty(filterChildren)) { + return false; + } + node.setChildren(filterChildren); + return true; } @Override @@ -51,6 +131,10 @@ public class PermissionPointServiceImpl implements PermissionPointService { node.setPermissionName(feature.getFeatureName()); node.setParentId(feature.getParentId()); node.setTerminal(feature.getTerminal()); + node.setFeatureType(feature.getFeatureType()); + node.setFeatureTypeDesc(FeatureType.apply(feature.getFeatureType()).getDesc()); + node.setPath(feature.getPath()); + node.setSort(feature.getSort()); return node; } diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java index 1a4ba03b..38ea49e2 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java @@ -1,9 +1,13 @@ package cn.axzo.tyr.server.permission; +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; +import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.server.controller.permission.PermissionPointController; import cn.axzo.tyr.server.repository.entity.SaasFeature; import cn.axzo.tyr.server.repository.service.SaasFeatureDao; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.serializer.SerializerFeature; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -30,4 +34,14 @@ public class PermissionPointTest { List saasFeatures = saasFeatureDao.listByIds(Arrays.asList(206L, 207L, 208L)); System.out.println(JSON.toJSONString(saasFeatures)); } + + @Test + public void testListTreeNode() { + PermissionPointTreeQueryReq request = new PermissionPointTreeQueryReq(); + request.setParentId(354L); + request.setKeyword("合同"); + ApiResult> result = controller.listTreeNodes(request); + System.out.println("---------------"); + System.out.println(JSON.toJSONString(result, SerializerFeature.DisableCircularReferenceDetect)); + } } From c3809b7c7b8cfed4bf5cedc71b862726068bc11f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Thu, 7 Sep 2023 16:29:22 +0800 Subject: [PATCH 014/186] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E8=A1=A5=E5=85=85=E7=BC=BA=E5=A4=B1=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feign/SaasPermissionGroupScopeApi.java | 12 +-- .../cn/axzo/tyr/client/feign/SaasRoleApi.java | 4 +- .../req/QuerySaasPermissionGroupReq.java | 20 ++-- .../model/req/QuerySaasRoleGroupReq.java | 8 +- .../model/vo/SaasPermissionGroupVO.java | 15 +-- .../tyr/client/model/vo/SaasRoleGroupVO.java | 36 +++---- .../axzo/tyr/client/model/vo/SaasRoleVO.java | 23 ++--- .../entity/SaasPermissionGroup.java | 43 +------- .../entity/SaasPgroupRoleRelation.java | 50 +++++----- .../server/repository/entity/SaasRole.java | 99 ++++++------------- .../repository/entity/SaasRoleGroup.java | 80 +++++++-------- 11 files changed, 150 insertions(+), 240 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java index 0f6b5567..8152f66c 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java @@ -1,23 +1,13 @@ package cn.axzo.tyr.client.feign; -import cn.axzo.framework.domain.web.result.ApiResult; import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestParam; /** - * 权限集作用范围 + * 权限集作用范围 TODO */ @FeignClient(name = "tyr", url = "${axzo.service.maokai:http://tyr:8080/api/saasPermissionGroup}") public interface SaasPermissionGroupScopeApi { - /** - * 删除单位联系人 - * @param id - * @return - */ - @PostMapping("api/organizational/unit/contact/delete") - ApiResult deleteUnitContact(@RequestParam("id") Long id); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java index 0c8d4d4c..cf62df29 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java @@ -21,7 +21,7 @@ public interface SaasRoleApi { * 如果权限列表不为空则创建通用权限 */ @PostMapping("saveOrUpdate") - ApiResult saveOrUpdate(@RequestBody SaasRoleVO req); + ApiResult saveOrUpdate(@RequestBody SaasRoleVO req); /** * 根据id查询详情 @@ -39,6 +39,6 @@ public interface SaasRoleApi { * 删除 */ @PostMapping("delete") - ApiResult delete(@RequestParam(required = true) Long id); + ApiResult delete(@RequestParam(required = true) Long id); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java index 2ae36a69..ed796986 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java @@ -9,31 +9,31 @@ import java.util.List; @Data public class QuerySaasPermissionGroupReq extends PageRequest { + /** + * 角色id + */ + private Long roleId; + + /** + * 权限组id + */ private List ids; /** * 权限集名称 */ private String name; + /** * 创建者 */ private Long createBy; + /** * 更新者 */ private Long updateBy; - /** - * 工作台Id - */ - private Long customSpaceId; - - /** - * 单位ID - */ - private Long ouId; - /** * 权限集类型:feature data */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java index dc70174d..78dee32d 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java @@ -26,13 +26,13 @@ public class QuerySaasRoleGroupReq { private Long ouId; /** - * 系统域编码(不传所有) + * 工作台类型字典id */ - private List topSysCode; + private List workspaceTypeIds; /** - * 二级字典编码(不传查所有) + * 单位类型字典id */ - private List dictSysCode; + private List ouTypeIds; } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java index 1fd5c482..b2e6622a 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java @@ -24,20 +24,21 @@ public class SaasPermissionGroupVO { * 创建者 */ private Long createBy; + + /** + * 创建者姓名 + */ + private String creatorName; + /** * 更新者 */ private Long updateBy; /** - * 工作台Id + * 更新者姓名 */ - private Long customSpaceId; - - /** - * 单位ID - */ - private Long ouId; + private String updatorName; /** * 权限集类型:feature data diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java index 70527498..873610e8 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java @@ -3,43 +3,45 @@ package cn.axzo.tyr.client.model.vo; import lombok.Data; import java.util.Date; +import java.util.List; @Data public class SaasRoleGroupVO { private Long id; - private Date createAt; - - private Date updateAt; + /** + * 工作台类型字典id + */ + private Long workspaceTypeId; /** - * 系统域编码 + * 单位类型字典id */ - private String topSysCode; + private List ouTypeId; /** - * 二级字典编码(单位类型) + * 所属工作台id */ - private String dictSysCode; + private Long workspaceId; + + /** + * 所属单位id + */ + private Long ouId; /** * 名称 */ private String name; - /** - * 项目部id - */ - private Long workspaceId; - - /** - * 单位id - */ - private Long ouId; - /** * 排序 */ private Integer sort; + + private Date createAt; + + private Date updateAt; + } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java index c24b4a1d..e73366d5 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java @@ -10,10 +10,6 @@ public class SaasRoleVO { private Long id; - private Date createAt; - - private Date updateAt; - /** * 角色名称 */ @@ -33,29 +29,24 @@ public class SaasRoleVO { */ private Long updateBy; - /** - * 工作台Id - */ - private Long workspaceId; - - /** - * 角色owner单位Id 实际角色和用户的所属关系 具体查询relation的ouId - */ - private Long ownerOuId; - /** * 分组id */ - private List sassRoleGroupIds; + private List roleGroupIds; /** * 权限组id */ - private List saasPermissionGroupIds; + private List permissionGroupIds; /** * 权限id(用于创建权限集) */ private List featureIds; + + private Date createAt; + + private Date updateAt; + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java index e1f6dabe..54c87ce8 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java @@ -32,16 +32,6 @@ public class SaasPermissionGroup extends BaseEntity { */ private String description; - /** - * 1:总包企业产品 2:总包项目产品 3:政企产品 4:分包企业产品 5:班组产品 - */ - private Integer productType; - - /** - * 权限集类型 1查看 2操作管理 - */ - private Integer legacyType; - /** * 创建者 */ @@ -50,40 +40,17 @@ public class SaasPermissionGroup extends BaseEntity { * 更新者 */ private Long updateBy; - /** - * 是否自定义 0:不是 1:是 如果为1 custom_space_id 不能为空 - */ - private Integer isCustom; - /** - * 工作台Id - */ - private Long customSpaceId; - - /** - * 适用单位类型 1:总包 2:建设单位 3:监理单位 4:劳务分包 5:专业分包 6:班组 0都可以用 - */ - private Long fitOuTypeBit; - - /** - * 适用节点类型 1:部门 2:班组 3:小组 - */ - private Long fitOuNodeTypeBit; - - /** - * 单位ID - */ - private Long ouId; - - /** - * 功能分组ID - */ - private Long productCategoryId; /** * 权限集类型:feature data */ private String type; + /** + * 是否为通用权限集 1:是 0:否 + */ + private Integer isCommon; + /** * 获取主键值 * diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupRoleRelation.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupRoleRelation.java index 7f840a7e..a69676a3 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupRoleRelation.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupRoleRelation.java @@ -22,34 +22,34 @@ import java.io.Serializable; @TableName("saas_pgroup_role_relation") public class SaasPgroupRoleRelation extends BaseEntity { + /** + * 角色id + */ + private Long roleId; - /** - * 角色id - */ - private Long roleId; - /** - * 权限集id - */ - private Long groupId; + /** + * 权限集id + */ + private Long groupId; - /** - * 创建者 - */ - private Long createBy; - /** - * 更新者 - */ - private Long updateBy; + /** + * 创建者 + */ + private Long createBy; + /** + * 更新者 + */ + private Long updateBy; - /** - * 获取主键值 - * - * @return 主键值 - */ - @Override - protected Serializable pkVal() { - return this.id; - } + /** + * 获取主键值 + * + * @return 主键值 + */ + @Override + protected Serializable pkVal() { + return this.id; + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java index b279a87e..4814caf2 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java @@ -22,80 +22,39 @@ import java.io.Serializable; @TableName("saas_role") public class SaasRole extends BaseEntity { - /** - * 角色名称 - */ - private String name; - /** - * 来源的模版角色id - */ - private Long fromPreRoleId; - /** - * 角色描述 - */ - private String description; - /** - * 角色类型:common 普通角色 super_admin超级管理员(禁止删除) admin子管理员(禁止删除) init初始化内置角色 - */ - private String roleType; + /** + * 角色名称 + */ + private String name; - /** - * 创建者 - */ - private Long createBy; - /** - * 更新者 - */ - private Long updateBy; - /** - * 工作台Id - */ - private Long workspaceId; + /** + * 角色描述 + */ + private String description; - /** - * 角色owner单位Id 实际角色和用户的所属关系 具体查询relation的ouId - */ - private Long ownerOuId; + /** + * 角色类型:common 普通角色 super_admin超级管理员(禁止删除) admin子管理员(禁止删除) init初始化内置角色 + */ + private String roleType; - /** - * 这个字段的解释工具= {@link cn.axzo.basics.auth.dto.consts.SaasRoleFits } - * 适用单位类型 1:总包 2:建设单位 4:监理单位 8:劳务分包 16:专业分包 0都可以用 只会挂在最末级 - *

- * 业务层,这个字段不要直接用。有变种的getter、setter,或者直接用解释工具。 - */ -// @Deprecated //有些位运算会使用 - private Long fitOuTypeBit; + /** + * 创建者 + */ + private Long createBy; - /** - * - * 这个字段的解释工具= {@link cn.axzo.basics.auth.dto.consts.SaasRoleFits } - * - * 适用节点类型 1:部门 2:班组 4:小组 只会挂在最末级 - * - * 业务层,这个字段不要直接用 - */ -// @Deprecated //有些位运算会使用 - private Long fitOuNodeTypeBit; + /** + * 更新者 + */ + private Long updateBy; - /** - * 职位ID, 若此字段不为0则为专属角色,该角色专属于某个职位 - */ - private Long positionTemplateId; - - /** - * 岗位字典中的编码 - */ - private String jobCode; - - - /** - * 获取主键值 - * - * @return 主键值 - */ - @Override - protected Serializable pkVal() { - return this.id; - } + /** + * 获取主键值 + * + * @return 主键值 + */ + @Override + protected Serializable pkVal() { + return this.id; + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java index e616043d..bdb44d51 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java @@ -21,52 +21,52 @@ import java.io.Serializable; @Accessors(chain = true) public class SaasRoleGroup extends BaseEntity implements Serializable { - private static final long serialVersionUID = 972205950455439772L; + private static final long serialVersionUID = 972205950455439772L; - /** - * 系统域编码 - */ - @TableField("top_sys_code") - private String topSysCode; + /** + * 工作台类型字典id + */ + @TableField("workspace_type_id") + private Long workspaceTypeId; - /** - * 二级字典编码(单位类型) - */ - @TableField("dict_sys_code") - private String dictSysCode; + /** + * 单位类型字典id + */ + @TableField("ou_type_id") + private Long ouTypeId; - /** - * 名称 - */ - @TableField("name") - private String name; + /** + * 名称 + */ + @TableField("name") + private String name; - /** - * 项目部id - */ - @TableField("workspace_id") - private Long workspaceId; + /** + * 所属工作台id + */ + @TableField("workspace_id") + private Long workspaceId; - /** - * 单位id - */ - @TableField("ou_id") - private Long ouId; + /** + * 所属单位id + */ + @TableField("ou_id") + private Long ouId; - /** - * 排序 - */ - @TableField("sort") - private Integer sort; + /** + * 排序 + */ + @TableField("sort") + private Integer sort; - /** - * 获取主键值 - * - * @return 主键值 - */ - @Override - protected Serializable pkVal() { - return this.id; - } + /** + * 获取主键值 + * + * @return 主键值 + */ + @Override + protected Serializable pkVal() { + return this.id; + } } From 93bb94b023b74d7e45fa7964d6bbc219104f6447 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Thu, 7 Sep 2023 16:29:59 +0800 Subject: [PATCH 015/186] =?UTF-8?q?=E5=AD=97=E5=85=B8api=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/tyr/client/TyrClient.java | 57 ------ .../config/TyrClientAutoConfiguration.java | 13 -- .../axzo/tyr/client/feign/BasicDictApi.java | 79 ++++++++ .../java/cn/axzo/tyr/client/feign/TyrApi.java | 33 ---- .../axzo/tyr/client/feign/TyrApiFallback.java | 52 ----- .../tyr/client/feign/TyrFallbackFactory.java | 19 -- .../cn/axzo/tyr/client/model/NewUserReq.java | 29 --- .../axzo/tyr/client/model/QueryUserReq.java | 22 --- .../axzo/tyr/client/model/UpdateUserReq.java | 19 -- .../cn/axzo/tyr/client/model/UserRes.java | 21 -- .../dict/request/BasicDictCreateReq.java | 47 +++++ .../model/dict/request/BasicDictNodeReq.java | 29 +++ .../model/dict/request/BasicDictQueryReq.java | 30 +++ .../dict/request/BasicDictUpdateReq.java | 27 +++ .../request/BasicDictUpdateStatusReq.java | 29 +++ .../tyr/client/model/dict/request/pom.xml | 181 ++++++++++++++++++ .../dict/response/BasicDictNodeResp.java | 48 +++++ .../dict/response/BasicDictTreeResp.java | 39 ++++ .../tyr/client/model/enums/package-info.java | 8 + .../axzo/maven/archetype/client/AppTest.java | 14 -- 20 files changed, 517 insertions(+), 279 deletions(-) delete mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/TyrClient.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/feign/BasicDictApi.java delete mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrApi.java delete mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrApiFallback.java delete mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrFallbackFactory.java delete mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/NewUserReq.java delete mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/QueryUserReq.java delete mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/UpdateUserReq.java delete mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/UserRes.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictCreateReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictUpdateReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictUpdateStatusReq.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/pom.xml create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictNodeResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/package-info.java delete mode 100644 tyr-api/src/test/java/cn/axzo/maven/archetype/client/AppTest.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/TyrClient.java b/tyr-api/src/main/java/cn/axzo/tyr/client/TyrClient.java deleted file mode 100644 index deaf693d..00000000 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/TyrClient.java +++ /dev/null @@ -1,57 +0,0 @@ -package cn.axzo.tyr.client; - -import cn.axzo.framework.domain.page.PageQO; -import cn.axzo.framework.domain.page.PageResp; -import cn.axzo.framework.domain.web.ApiException; -import cn.axzo.framework.domain.web.result.ApiPageResult; -import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.tyr.client.feign.TyrApi; -import cn.axzo.tyr.client.model.NewUserReq; -import cn.axzo.tyr.client.model.QueryUserReq; -import cn.axzo.tyr.client.model.UpdateUserReq; -import cn.axzo.tyr.client.model.UserRes; -import cn.azxo.framework.common.model.CommonResponse; -import lombok.RequiredArgsConstructor; - -import javax.validation.Valid; - -/** - * @Author: liyong.tian - * @Date: 2022/9/17 - * @Description: - */ -@RequiredArgsConstructor -public class TyrClient { - - private final TyrApi api; - - /** - * 老项目迁移使用 - */ - public UserRes createUser(@Valid NewUserReq req) { - CommonResponse apiResult = api.createUser(req); - if (apiResult.getCode() == 200) { - return apiResult.getData(); - } - throw new RuntimeException(apiResult.getMsg()); - } - - /** - * 新项目使用 - */ - public UserRes updateUser(Long id, @Valid UpdateUserReq req) { - ApiResult apiResult = api.updateUser(id, req); - if (apiResult.isSuccess()) { - return apiResult.getData(); - } - throw new ApiException(apiResult.getRespCode()); - } - - public PageResp fetchUsers(QueryUserReq req, PageQO page) { - ApiPageResult apiPageResult = api.fetchUsers(req.toQueryMap(), page); - if (apiPageResult.isSuccess()) { - return apiPageResult.toPage(); - } - throw new ApiException(apiPageResult.getRespCode()); - } -} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/config/TyrClientAutoConfiguration.java b/tyr-api/src/main/java/cn/axzo/tyr/client/config/TyrClientAutoConfiguration.java index bb8bf3b7..e26a0238 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/config/TyrClientAutoConfiguration.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/config/TyrClientAutoConfiguration.java @@ -1,10 +1,6 @@ package cn.axzo.tyr.client.config; -import cn.axzo.tyr.client.TyrClient; -import cn.axzo.tyr.client.feign.TyrApi; -import cn.axzo.tyr.client.feign.TyrFallbackFactory; import org.springframework.cloud.openfeign.EnableFeignClients; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** @@ -16,13 +12,4 @@ import org.springframework.context.annotation.Configuration; @Configuration public class TyrClientAutoConfiguration { - @Bean - public TyrFallbackFactory tyrFallbackFactory() { - return new TyrFallbackFactory(); - } - - @Bean - public TyrClient tyrClient(TyrApi tyrApi) { - return new TyrClient(tyrApi); - } } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/BasicDictApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/BasicDictApi.java new file mode 100644 index 00000000..aaca937f --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/BasicDictApi.java @@ -0,0 +1,79 @@ +package cn.axzo.tyr.client.feign; + +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.dict.request.*; +import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; +import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +/** + * @author: chenwenjian + * @date: 2023/9/6 15:33 + * @description: 企业字典api + * @modifiedBy: + * @version: 1.0 + */ +@FeignClient(name = "tyr", url = "http://tyr:8080") +public interface BasicDictApi { + + /** + * 通过workspace和type获取字典节点列表 + * + * @param req 包含workspace和type两个字段 + * @return + */ + @PostMapping("api/dict/get-by-type") + ApiResult> getDictByType(@RequestBody BasicDictNodeReq req); + + + /** + * 获取字典树(树形结构,无需自行组装) + * + * @param req 当不进行筛选时不传 + * @return + */ + @PostMapping("api/dict/get-tree") + ApiResult> getBasicDictTree(@RequestBody BasicDictQueryReq req); + + /** + * 获取字典树所有节点(列表结构,需自行组装成树) + * + * @param req + * @return + */ + @PostMapping("api/dict/node-list") + ApiResult> getBasicDictNodeList(@RequestBody BasicDictQueryReq req); + + /** + * 添加字典 + * + * @param req 其中name同一个父级节点,名称不能重复,codeMap全局唯一 + * @return + */ + @PostMapping("api/dict/create") + ApiResult create(@RequestBody @Validated BasicDictCreateReq req); + + /** + * 编辑字典 + * + * @param req + * @return + */ + @PostMapping("api/dict/update") + ApiResult update(@RequestBody @Validated BasicDictUpdateReq req); + + /** + * 更新字典状态 + * + * @param req + * @return + */ + @PostMapping("/update-status") + ApiResult updateStatus(@RequestBody @Validated BasicDictUpdateStatusReq req); + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrApi.java deleted file mode 100644 index 11e90458..00000000 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrApi.java +++ /dev/null @@ -1,33 +0,0 @@ -package cn.axzo.tyr.client.feign; - -import cn.axzo.framework.domain.page.PageQO; -import cn.axzo.framework.domain.web.result.ApiPageResult; -import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.tyr.client.model.NewUserReq; -import cn.axzo.tyr.client.model.UpdateUserReq; -import cn.axzo.tyr.client.model.UserRes; -import cn.azxo.framework.common.model.CommonResponse; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.*; - -import java.util.Map; - -import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; - -/** - * @Author: liyong.tian - * @Date: 2022/9/17 - * @Description: - */ -@FeignClient(name = "tyr", url = "http://localhost:8899", fallbackFactory = TyrFallbackFactory.class) -public interface TyrApi { - - @PostMapping(value = "/api/v1/users", consumes = APPLICATION_JSON_VALUE) - CommonResponse createUser(@RequestBody NewUserReq req); - - @PutMapping(value = "/api/v2/users/{id}", consumes = APPLICATION_JSON_VALUE) - ApiResult updateUser(@PathVariable("id") Long id, @RequestBody UpdateUserReq req); - - @GetMapping(value = "/api/v2/users") - ApiPageResult fetchUsers(@RequestParam Map query, PageQO page); -} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrApiFallback.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrApiFallback.java deleted file mode 100644 index eab606a0..00000000 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrApiFallback.java +++ /dev/null @@ -1,52 +0,0 @@ -package cn.axzo.tyr.client.feign; - -import cn.axzo.framework.client.feign.FeignFallback; -import cn.axzo.framework.domain.page.PageQO; -import cn.axzo.framework.domain.web.result.ApiPageResult; -import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.tyr.client.model.NewUserReq; -import cn.axzo.tyr.client.model.UpdateUserReq; -import cn.axzo.tyr.client.model.UserRes; -import cn.azxo.framework.common.model.CommonResponse; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; - -import java.util.Map; - -/** - * @Author: liyong.tian - * @Date: 2022/9/17 - * @Description: - */ -@Slf4j -@RequiredArgsConstructor -public class TyrApiFallback implements TyrApi { - - private final FeignFallback fallback; - - /** - * 老项目迁移使用 - * @param req - * @return - */ - @Override - public CommonResponse createUser(NewUserReq req) { - log.error("[tyr-api] createUser fallback", fallback.getCause()); - return CommonResponse.error("创建用户失败"); - } - - /** - * 新项目推荐使用 - */ - @Override - public ApiResult updateUser(Long id, UpdateUserReq req) { - log.error("[tyr-api] updateUser fallback", fallback.getCause()); - return fallback.resp(); - } - - @Override - public ApiPageResult fetchUsers(Map query, PageQO page) { - log.error("[tyr-api] fetchUsers fallback", fallback.getCause()); - return fallback.pageResp(); - } -} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrFallbackFactory.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrFallbackFactory.java deleted file mode 100644 index d15c7c57..00000000 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrFallbackFactory.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.axzo.tyr.client.feign; - -import cn.axzo.framework.client.feign.FeignFallback; -import cn.axzo.framework.domain.web.code.IRespCode; -import cn.axzo.framework.domain.web.code.RespCode; -import feign.hystrix.FallbackFactory; -import org.springframework.stereotype.Component; - -@Component -public class TyrFallbackFactory implements FallbackFactory { - - // TODO: 2022/11/3 100-调整为具体的项目编号,XXX-调整为项目名 - private final IRespCode respCode = new RespCode("100" + "91001", "XXX服务不可用"); - - @Override - public TyrApiFallback create(Throwable cause) { - return new TyrApiFallback(new FeignFallback(cause, respCode)); - } -} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/NewUserReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/NewUserReq.java deleted file mode 100644 index 21f5c7ad..00000000 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/NewUserReq.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.axzo.tyr.client.model; - -import lombok.Data; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; - -/** - * @Author: liyong.tian - * @Date: 2022/9/2 - * @Description: - */ -@Data -public class NewUserReq { - - @NotBlank(message = "名称不能为空") - private String name; - - @NotNull - private Integer sex; - - private Integer age; - - private String phone; - - private String email; - - private String address; -} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/QueryUserReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/QueryUserReq.java deleted file mode 100644 index 8d88889b..00000000 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/QueryUserReq.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.axzo.tyr.client.model; - -import cn.axzo.framework.context.client.IQueryMap; -import cn.axzo.framework.context.client.QueryMap; -import lombok.Data; - -@Data -public class QueryUserReq implements IQueryMap { - - private Long id; - - private String name; - - private String phone; - - private String email; - - @Override - public void append(QueryMap.Builder builder) { - builder.put("id", id).put("name", name).put("phone", phone).put("email", email); - } -} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/UpdateUserReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/UpdateUserReq.java deleted file mode 100644 index acb268a6..00000000 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/UpdateUserReq.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.axzo.tyr.client.model; - -import lombok.Data; - -@Data -public class UpdateUserReq { - - private String name; - - private Integer sex; - - private Integer age; - - private String phone; - - private String email; - - private String address; -} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/UserRes.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/UserRes.java deleted file mode 100644 index 7508a5f6..00000000 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/UserRes.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.axzo.tyr.client.model; - -import lombok.Data; - -@Data -public class UserRes { - - private Long id; - - private String name; - - private Integer sex; - - private Integer age; - - private String phone; - - private String email; - - private String address; -} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictCreateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictCreateReq.java new file mode 100644 index 00000000..2521fcd1 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictCreateReq.java @@ -0,0 +1,47 @@ +package cn.axzo.tyr.client.model.dict.request; + +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; + +/** + * @author: chenwenjian + * @date: 2023/9/6 14:44 + * @description: 添加字典请求入参 + * @modifiedBy: + * @version: 1.0 + */ +@Data +public class BasicDictCreateReq { + + /** + * 工作台类型,"ent", "proj", "oms" + */ + @NotBlank(message = "工作台类型不能为空") + private String workspaceType; + + /** + * 类型,"ouType", "terminal" + */ + private String type; + + /** + * 所属上级节点id + */ + private Long parentId; + + /** + * 字典名称 + */ + @NotBlank(message = "字典名称不能为空") + @Length(max = 35, message = "字典名称长度不能超过35字符") + private String name; + + /** + * 编码code + */ + @NotBlank(message = "code不能为空") + private String code; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java new file mode 100644 index 00000000..7c95901e --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.client.model.dict.request; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @author: chenwenjian + * @date: 2023/9/6 15:46 + * @description: + * @modifiedBy: + * @version: 1.0 + */ +@Data +public class BasicDictNodeReq { + + /** + * 工作台类型 + */ + @NotBlank(message = "工作台类型不能为空") + private String workspaceType; + + /** + * 类型 + */ + @NotBlank(message = "类型不能为空") + private String type; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java new file mode 100644 index 00000000..1ddc991e --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java @@ -0,0 +1,30 @@ +package cn.axzo.tyr.client.model.dict.request; + +import lombok.Data; + +/** + * @author: chenwenjian + * @date: 2023/9/6 14:02 + * @description: 获取企业字典树请求入参 + * @modifiedBy: + * @version: 1.0 + */ +@Data +public class BasicDictQueryReq { + + /** + * 字典名称 + */ + private String name; + + /** + * 字典code + */ + private String code; + + /** + * 状态 + */ + private Boolean status; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictUpdateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictUpdateReq.java new file mode 100644 index 00000000..cadc17fb --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictUpdateReq.java @@ -0,0 +1,27 @@ +package cn.axzo.tyr.client.model.dict.request; + +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; + +/** + * @author: chenwenjian + * @date: 2023/9/6 15:00 + * @description: 编辑请求入参 + * @modifiedBy: + * @version: 1.0 + */ +@Data +public class BasicDictUpdateReq { + + private Long id; + + /** + * 字典名称 + */ + @NotBlank(message = "字典名称不能为空") + @Length(max = 35, message = "字典名称长度不能超过35字符") + private String name; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictUpdateStatusReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictUpdateStatusReq.java new file mode 100644 index 00000000..c3ffe041 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictUpdateStatusReq.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.client.model.dict.request; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author: chenwenjian + * @date: 2023/9/6 15:04 + * @description: 状态更改请求入参 + * @modifiedBy: + * @version: 1.0 + */ +@Data +public class BasicDictUpdateStatusReq { + + /** + * 节点id + */ + @NotNull(message = "节点id不能为空") + private Long id; + + /** + * 状态,true启用,false禁用 + */ + @NotNull(message = "状态不能为空") + private Boolean status; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/pom.xml b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/pom.xml new file mode 100644 index 00000000..ed26a79c --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/pom.xml @@ -0,0 +1,181 @@ + + 4.0.0 + + cn.axzo.yoke + yoke + ${revision} + ../pom.xml + + + yoke-server + jar + + yoke-server + + + 1.18.16 + 1.4.2.Final + 0.2.0 + + + + + + cn.axzo.framework + axzo-web-spring-boot-starter + + + cn.axzo.framework + axzo-auth-spring-boot-starter + + + cn.axzo.framework + axzo-logger-spring-boot-starter + + + cn.axzo.maokai + maokai-api + + + org.hibernate.validator + hibernate-validator + + + cn.axzo.mns + mns-http-api + + + cn.axzo.basics + basics-profiles-api + + + cn.axzo.apollo + apollo-workspace-api + + + cn.axzo.third + third-party-api + + + org.mapstruct + mapstruct + + + cn.axzo.thrones + thrones-client + + + cn.axzo.basics + basics-auth-api + + + cn.axzo.trade + trade-dingtalk + + + cn.axzo.trade + trade-data-security-spring-boot-starter + + + mysql + mysql-connector-java + + + cn.axzo.pokonyan + pokonyan + + + org.springframework.boot + spring-boot-devtools + + + io.github.openfeign + feign-httpclient + + + cn.axzo.outman + outman-http-api + + + cn.axzo.pudge + pudge-api + + + cn.axzo.msgcenter + msgcenter-spring-boot-starter + + + cn.axzo.pluto + pluto-api + + + cn.axzo.nanopart + black-list-api + 2.0.0-SNAPSHOT + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + + + + com.aliyun + alibaba-dingtalk-service-sdk + + + com.aliyun + dingtalk + 2.0.14 + + + + + yoke + + + src/main/java + + **/*.xml + + + + src/main/resources + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + + + org.projectlombok + lombok + ${org.projectlombok.version} + + + + org.projectlombok + lombok-mapstruct-binding + ${lombok-mapstruct-binding.version} + + + + org.mapstruct + mapstruct-processor + ${org.mapstruct.version} + + + + + + + diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictNodeResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictNodeResp.java new file mode 100644 index 00000000..2228a0e9 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictNodeResp.java @@ -0,0 +1,48 @@ +package cn.axzo.tyr.client.model.dict.response; + +import lombok.Data; + +/** + * @author: chenwenjian + * @date: 2023/9/6 15:39 + * @description: + * @modifiedBy: + * @version: 1.0 + */ +@Data +public class BasicDictNodeResp { + + private Long id; + + private Long parentId; + + /** + * 工作台类型,"ent", "proj", "oms" + */ + private String workspaceType; + + /** + * 类型,"ouType", "terminal" + */ + private String type; + + /** + * 字典名称 + */ + private String name; + + /** + * 字典code + */ + private String code; + + /** + * 状态 + */ + private Boolean status; + + /** + * 路径 + */ + private String path; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java new file mode 100644 index 00000000..a5a6f1a5 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java @@ -0,0 +1,39 @@ +package cn.axzo.tyr.client.model.dict.response; + +import lombok.Data; + +import java.util.List; + +/** + * @author: chenwenjian + * @date: 2023/9/6 14:08 + * @description: + * @modifiedBy: + * @version: 1.0 + */ +@Data +public class BasicDictTreeResp { + + private Long id; + + /** + * 字典名称 + */ + private String name; + + /** + * 字典code + */ + private String code; + + /** + * 状态 + */ + private Boolean status; + + /** + * 当前节点下子节点 + */ + private List children; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/package-info.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/package-info.java new file mode 100644 index 00000000..a5c47ea1 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/package-info.java @@ -0,0 +1,8 @@ +/** + * @author: chenwenjian + * @date: 2023/9/6 15:37 + * @description: + * @modifiedBy: + * @version: 1.0 + */ +package cn.axzo.tyr.client.model.enums; \ No newline at end of file diff --git a/tyr-api/src/test/java/cn/axzo/maven/archetype/client/AppTest.java b/tyr-api/src/test/java/cn/axzo/maven/archetype/client/AppTest.java deleted file mode 100644 index 7d836fa0..00000000 --- a/tyr-api/src/test/java/cn/axzo/maven/archetype/client/AppTest.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.axzo.maven.archetype.client; - -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -/** - * Unit test for simple App. - */ -@RunWith(SpringRunner.class) -@SpringBootTest -public class AppTest { - -} From 182c815d9d9b9e516bec04dfec428f31a227dd95 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Thu, 7 Sep 2023 17:13:09 +0800 Subject: [PATCH 016/186] =?UTF-8?q?feature(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E8=AF=A6=E6=83=85=E6=9F=A5=E8=AF=A2=EF=BC=9B?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0ID=E6=89=B9=E9=87=8F=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/feign/PermissionPointApi.java | 14 ++++- .../model/permission/PermissionPointDTO.java | 4 +- .../common/constants/PermissionConstant.java | 17 ++++++ .../permission/PermissionPointController.java | 11 ++++ .../service/PermissionPointService.java | 8 ++- .../impl/PermissionPointServiceImpl.java | 58 +++++++++++++++++-- 6 files changed, 102 insertions(+), 10 deletions(-) create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/common/constants/PermissionConstant.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java index c39772f4..12099f8e 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java @@ -1,10 +1,14 @@ package cn.axzo.tyr.client.feign; import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.permission.PermissionPointDTO; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import java.util.List; @@ -20,5 +24,13 @@ public interface PermissionPointApi { /** 查询权限点树形节点 **/ @PostMapping(value = "/api/v1/permissionPoint/listTreeNodes") - ApiResult> listTreeNodes(PermissionPointTreeQueryReq request); + ApiResult> listTreeNodes(@RequestBody PermissionPointTreeQueryReq request); + + /** 根据权限点ID查询详情 **/ + @GetMapping(value = "/api/v1/permissionPoint/getDetail/{permissionId}") + ApiResult getDetail(@PathVariable Long permissionId); + + /** 根据权限点ID批量查询节点信息 **/ + @PostMapping(value = "/api/v1/permissionPoint/listTreeNodesByIds") + ApiResult> listTreeNodesByIds(@RequestBody List permissionIds); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java index d76d2277..a36bace0 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java @@ -69,8 +69,8 @@ public class PermissionPointDTO { */ private String path; - /** 上级节点层级名称 **/ - private List parentPath; + /** 层级名称 顶级-……-当前节点 **/ + private List pathName; /** * 排序 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/common/constants/PermissionConstant.java b/tyr-server/src/main/java/cn/axzo/tyr/server/common/constants/PermissionConstant.java new file mode 100644 index 00000000..73e0015b --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/common/constants/PermissionConstant.java @@ -0,0 +1,17 @@ +package cn.axzo.tyr.server.common.constants; + +/** + * 权限相关常量 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/7 16:50 + */ +public class PermissionConstant { + + /** 权限点path分隔符 **/ + public static final String FEATURE_PATH_DELIMITER = "/"; + + /** 无父级 **/ + public static final String FEATURE_NO_PARENT = "0"; +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java index b90c1a09..2f0f57eb 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java @@ -2,6 +2,7 @@ package cn.axzo.tyr.server.controller.permission; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.PermissionPointApi; +import cn.axzo.tyr.client.model.permission.PermissionPointDTO; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.server.service.PermissionPointService; @@ -31,4 +32,14 @@ public class PermissionPointController implements PermissionPointApi { //查询数据 return ApiResult.ok(permissionPointService.listTreeNodes(request)); } + + @Override + public ApiResult getDetail(Long permissionId) { + return ApiResult.ok(permissionPointService.getDetail(permissionId)); + } + + @Override + public ApiResult> listTreeNodesByIds(List permissionIds) { + return ApiResult.ok(permissionPointService.listNodesByIds(permissionIds)); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java index c4764aa8..17e42114 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java @@ -1,5 +1,6 @@ package cn.axzo.tyr.server.service; +import cn.axzo.tyr.client.model.permission.PermissionPointDTO; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; @@ -15,7 +16,7 @@ import java.util.List; public interface PermissionPointService { /** - * 权限点条件查询 - 未组装为树形 + * 权限点条件查询 * **/ List listTreeNodes(PermissionPointTreeQueryReq request); @@ -23,4 +24,9 @@ public interface PermissionPointService { * 根据权限点ID查询基本信息 * **/ List listNodesByIds(List permissionIds); + + /** + * 根据权限点ID查询详情 + * **/ + PermissionPointDTO getDetail(Long permissionId); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index f7ffd5cf..98b227de 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -5,28 +5,30 @@ import cn.axzo.basics.common.util.TreeUtil; import cn.axzo.framework.domain.web.BizException; import cn.axzo.framework.domain.web.code.BaseCode; import cn.axzo.tyr.client.model.enums.FeatureType; +import cn.axzo.tyr.client.model.permission.PermissionPointDTO; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.server.repository.entity.SaasFeature; import cn.axzo.tyr.server.repository.service.SaasFeatureDao; import cn.axzo.tyr.server.service.PermissionPointService; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.function.Function; import java.util.stream.Collectors; -import java.util.stream.Stream; + +import static cn.axzo.tyr.server.common.constants.PermissionConstant.FEATURE_NO_PARENT; +import static cn.axzo.tyr.server.common.constants.PermissionConstant.FEATURE_PATH_DELIMITER; /** * 权限点服务实现 @@ -54,7 +56,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { throw new BizException(BaseCode.BAD_REQUEST); } //追加条件path左匹配 - queryWrapper.likeRight(SaasFeature::getPath, parent.getPath() + parent.getId() + "/"); + queryWrapper.likeRight(SaasFeature::getPath, parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER); } List list = saasFeatureDao.list(queryWrapper); @@ -73,6 +75,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { return result; } + //TODO:@Zhan 依赖系统字典接口封装上级 //按terminal分组 Map> mappingNode = treeList.stream() .collect(Collectors.groupingBy(PermissionPointTreeNode::getTerminal)); @@ -122,9 +125,52 @@ public class PermissionPointServiceImpl implements PermissionPointService { @Override public List listNodesByIds(List permissionIds) { - return null; + if (CollectionUtil.isEmpty(permissionIds)) { + return null; + } + return this.saasFeatureDao.listByIds(permissionIds) + .stream() + .map(this::feature2Node) + .collect(Collectors.toList()); } + @Override + public PermissionPointDTO getDetail(Long permissionId) { + SaasFeature feature = this.saasFeatureDao.getById(permissionId); + if (feature == null) { + log.warn("no saasFeature found for:{}", permissionId); + throw new BizException(BaseCode.BAD_REQUEST); + } + PermissionPointDTO dto = BeanMapper.copyBean(feature, PermissionPointDTO.class); + + //补充上级信息 + //TODO:@Zhan 依赖字典接口构建上级 + List pathName = new ArrayList<>(); + if (dto.getParentId() == null || dto.getParentId() == 0) { + //没有parent直接挂在工作台下 + dto.setParentName(""); + dto.setPathName(pathName); + return dto; + } + //所有父级处理 + List split = StrUtil.split(dto.getPath(), FEATURE_PATH_DELIMITER); + List ids = split.stream() + .filter(x -> !StrUtil.equals(FEATURE_NO_PARENT, x)) + .map(Long::valueOf) + .collect(Collectors.toList()); + Map parentsMapping = this.saasFeatureDao.listByIds(ids) + .stream() + .collect(Collectors.toMap(SaasFeature::getId, Function.identity())); + for (Long parentId : ids) { + pathName.add(parentsMapping.get(parentId).getFeatureName()); + } + dto.setPathName(pathName); + dto.setParentName(parentsMapping.get(dto.getParentId()).getFeatureName()); + + return dto; + } + + private PermissionPointTreeNode feature2Node(SaasFeature feature) { PermissionPointTreeNode node = new PermissionPointTreeNode(); node.setPermissionPointId(feature.getId()); From 5473f434d6ac3afd192b07203cd38db91087170e Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Thu, 7 Sep 2023 18:45:59 +0800 Subject: [PATCH 017/186] =?UTF-8?q?add=20-=20=E6=B7=BB=E5=8A=A0=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3=E7=9A=84=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/feign/ProductApi.java | 52 ++++++++- .../ProductFeatureRelationSearchReq.java | 3 + .../model/product/ProductUpdateReq.java | 2 + .../tyr/client/model/product/ProductVO.java | 5 + .../controller/product/ProductController.java | 110 ++++++++++++++++++ .../ProductFeatureRelationService.java | 17 +++ .../tyr/server/service/ProductService.java | 32 +++++ .../ProductFeatureRelationServiceImpl.java | 37 ++++++ .../service/impl/ProductServiceImpl.java | 88 ++++++++++++++ 9 files changed, 341 insertions(+), 5 deletions(-) create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/controller/product/ProductController.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/ProductFeatureRelationService.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/ProductService.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java index 325ccd85..2b55d246 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java @@ -10,6 +10,7 @@ import cn.axzo.tyr.client.model.product.ProductSearchPageReq; import cn.axzo.tyr.client.model.product.ProductUpdateReq; import cn.axzo.tyr.client.model.product.ProductVO; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -28,26 +29,67 @@ import java.util.Map; @FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080}") public interface ProductApi { + /** + * 获取产品基础信息的列表 + * + * @param req {@link ProductSearchListReq} + * @return 如果没有查询到, 返回空集合, 集合内类型: {@link ProductVO} + */ @PostMapping("api/auth/product/list") ApiResult> list(@RequestBody ProductSearchListReq req); + + /** + * 获取产品基础信息的分页列表 + * + * @param req {@link ProductSearchPageReq} + * @return 如果没有查询, 返回 ApiPageResult.empty(), 携带分页信息,集合内类型: {@link ProductVO} + */ @PostMapping("api/auth/product/page") ApiPageResult page(@RequestBody ProductSearchPageReq req); + /** + * 获取指定 ID 的产品基础信息 + * + * @param id 产品 ID + * @return {@link ProductVO} + */ @GetMapping("api/auth/product/get/id") ApiResult getById(Long id); + /** + * 新增产品基础信息 + * + * @param req {@link ProductAddReq} + * @return 返回当前新增产品基础信息 + */ @PostMapping("api/auth/product/add") - ApiResult add(@RequestBody ProductAddReq req); + ApiResult add(@Validated @RequestBody ProductAddReq req); + /** + * 修改产品基础信息 + * + * @param req {@link ProductUpdateReq} + * @return 返回修改后的产品基础信息 + */ @PutMapping("api/auth/product/update") - ApiResult update(@RequestBody ProductUpdateReq req); + ApiResult update(@Validated @RequestBody ProductUpdateReq req); + /** + * 删除指定 ID 的产品 + * + * @param id 产品 ID + * @return 返回被删除的产品信息 + */ @DeleteMapping("api/auth/product/delete/id") ApiResult delete(Long id); + /** + * 返回指定产品和单位类型下所有已有权限点集合 + * + * @param req {@link ProductFeatureRelationSearchReq} + * @return 如果没有查询到, 返回空集合, 集合内类型: {@link ProductFeatureRelationVO} + */ @PostMapping("api/auth/product/feature/relation/list") - ApiResult> featureList(@RequestBody ProductFeatureRelationSearchReq req); + ApiResult> featureList(@Validated @RequestBody ProductFeatureRelationSearchReq req); - @PostMapping("api/auth/products/feature/relation/map") - ApiResult>> featureMap(@RequestBody List req); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java index 4668ebb3..5666260a 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java @@ -5,6 +5,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import javax.validation.constraints.NotNull; + /** * 产品与权限点搜索入参模型 * @@ -20,6 +22,7 @@ public class ProductFeatureRelationSearchReq { /** * 产品 ID */ + @NotNull(message = "产品 ID 不能为空") private Long productModuleId; /** diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java index 7be464a1..83eac658 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java @@ -4,7 +4,9 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; +import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; /** diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java index b64ba074..fef1a6c3 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java @@ -38,6 +38,11 @@ public class ProductVO { * 产品所属工作台类型 */ private Long dictWorkspaceTypeId; + + /** + * 产品所属工作类型名称 + */ + private String dictWorkspaceTypeDesc; /** * 上下架状态 1:上架, 0:下架 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/product/ProductController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/product/ProductController.java new file mode 100644 index 00000000..f6f7495a --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/product/ProductController.java @@ -0,0 +1,110 @@ +package cn.axzo.tyr.server.controller.product; + +import cn.axzo.framework.domain.web.result.ApiPageResult; +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.feign.ProductApi; +import cn.axzo.tyr.client.model.product.ProductAddReq; +import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq; +import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO; +import cn.axzo.tyr.client.model.product.ProductSearchListReq; +import cn.axzo.tyr.client.model.product.ProductSearchPageReq; +import cn.axzo.tyr.client.model.product.ProductUpdateReq; +import cn.axzo.tyr.client.model.product.ProductVO; +import cn.axzo.tyr.server.service.ProductFeatureRelationService; +import cn.axzo.tyr.server.service.ProductService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 产品相关 API 实现 + * + * @author wangli + * @since 2023/9/7 14:05 + */ +@Slf4j +@RestController +@RequiredArgsConstructor +public class ProductController implements ProductApi { + + private final ProductService productService; + private final ProductFeatureRelationService productFeatureRelationService; + /** + * 获取产品基础信息的列表 + * + * @param req {@link ProductSearchListReq} + * @return 如果没有查询到, 返回空集合, 集合内类型: {@link ProductVO} + */ + @Override + public ApiResult> list(ProductSearchListReq req) { + return productService.list(req); + } + + /** + * 获取产品基础信息的分页列表 + * + * @param req {@link ProductSearchPageReq} + * @return 如果没有查询, 返回 ApiPageResult.empty(), 携带分页信息,集合内类型: {@link ProductVO} + */ + @Override + public ApiPageResult page(ProductSearchPageReq req) { + return productService.page(req); + } + + /** + * 获取指定 ID 的产品基础信息 + * + * @param id 产品 ID + * @return {@link ProductVO} + */ + @Override + public ApiResult getById(Long id) { + return productService.getById(id); + } + + /** + * 新增产品基础信息 + * + * @param req {@link ProductAddReq} + * @return 返回当前新增产品基础信息 + */ + @Override + public ApiResult add(ProductAddReq req) { + return productService.add(req); + } + + /** + * 修改产品基础信息 + * + * @param req {@link ProductUpdateReq} + * @return 返回修改后的产品基础信息 + */ + @Override + public ApiResult update(ProductUpdateReq req) { + return productService.update(req); + } + + /** + * 删除指定 ID 的产品 + * + * @param id 产品 ID + * @return 返回被删除的产品信息 + */ + @Override + public ApiResult delete(Long id) { + return productService.delete(id); + } + + /** + * 返回指定产品和单位类型下所有已有权限点集合 + * + * @param req {@link ProductFeatureRelationSearchReq} + * @return 如果没有查询到, 返回空集合, 集合内类型: {@link ProductFeatureRelationVO} + */ + @Override + public ApiResult> featureList(ProductFeatureRelationSearchReq req) { + return productFeatureRelationService.featureList(req); + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/ProductFeatureRelationService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/ProductFeatureRelationService.java new file mode 100644 index 00000000..0113c675 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/ProductFeatureRelationService.java @@ -0,0 +1,17 @@ +package cn.axzo.tyr.server.service; + +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq; +import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO; + +import java.util.List; + +/** + * 产品与权限点的 Service 接口定义 + * + * @author wangli + * @since 2023/9/7 14:26 + */ +public interface ProductFeatureRelationService { + ApiResult> featureList(ProductFeatureRelationSearchReq req); +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/ProductService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/ProductService.java new file mode 100644 index 00000000..df47aaf6 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/ProductService.java @@ -0,0 +1,32 @@ +package cn.axzo.tyr.server.service; + +import cn.axzo.framework.domain.web.result.ApiPageResult; +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.product.ProductAddReq; +import cn.axzo.tyr.client.model.product.ProductSearchListReq; +import cn.axzo.tyr.client.model.product.ProductSearchPageReq; +import cn.axzo.tyr.client.model.product.ProductUpdateReq; +import cn.axzo.tyr.client.model.product.ProductVO; + +import java.util.List; + +/** + * 产品相关 Service 接口定义 + * + * @author wangli + * @since 2023/9/7 14:21 + */ +public interface ProductService { + ApiResult> list(ProductSearchListReq req); + + + ApiPageResult page(ProductSearchPageReq req); + + ApiResult getById(Long id); + + ApiResult add(ProductAddReq req); + + ApiResult update(ProductUpdateReq req); + + ApiResult delete(Long id); +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java new file mode 100644 index 00000000..e145c817 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java @@ -0,0 +1,37 @@ +package cn.axzo.tyr.server.service.impl; + +import cn.axzo.basics.common.BeanMapper; +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq; +import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO; +import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation; +import cn.axzo.tyr.server.repository.service.SaasProductModuleFeatureRelationDao; +import cn.axzo.tyr.server.service.ProductFeatureRelationService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Objects; + +/** + * 产品与权限点的 Service 接口实现 + * + * @author wangli + * @since 2023/9/7 14:27 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class ProductFeatureRelationServiceImpl implements ProductFeatureRelationService { + private final SaasProductModuleFeatureRelationDao saasProductModuleFeatureRelationDao; + + @Override + public ApiResult> featureList(ProductFeatureRelationSearchReq req) { + List list = saasProductModuleFeatureRelationDao.lambdaQuery() + .eq(SaasProductModuleFeatureRelation::getProductModuleId, req.getProductModuleId()) + .eq(Objects.nonNull(req.getDictCodeId()), SaasProductModuleFeatureRelation::getDictCodeId, req.getDictCodeId()) + .list(); + return ApiResult.ok(BeanMapper.copyList(list, ProductFeatureRelationVO.class)); + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java new file mode 100644 index 00000000..5be21a32 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java @@ -0,0 +1,88 @@ +package cn.axzo.tyr.server.service.impl; + +import cn.axzo.basics.common.BeanMapper; +import cn.axzo.basics.common.util.AssertUtil; +import cn.axzo.framework.domain.page.PageResp; +import cn.axzo.framework.domain.web.result.ApiPageResult; +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.product.ProductAddReq; +import cn.axzo.tyr.client.model.product.ProductSearchListReq; +import cn.axzo.tyr.client.model.product.ProductSearchPageReq; +import cn.axzo.tyr.client.model.product.ProductUpdateReq; +import cn.axzo.tyr.client.model.product.ProductVO; +import cn.axzo.tyr.server.repository.entity.ProductModule; +import cn.axzo.tyr.server.repository.service.ProductModuleDao; +import cn.axzo.tyr.server.service.ProductService; +import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.beanutils.BeanMap; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.List; +import java.util.Objects; + +/** + * 产品相关 Service 接口实现 + * + * @author wangli + * @since 2023/9/7 14:22 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class ProductServiceImpl implements ProductService { + private final ProductModuleDao productModuleDao; + + @Override + public ApiResult> list(ProductSearchListReq req) { + List list = productModuleDao.lambdaQuery() + .like(StringUtils.hasLength(req.getName()), ProductModule::getProductName, req.getName()) + .eq(Objects.nonNull(req.getDictWorkspaceTypeId()), ProductModule::getDictWorkspaceTypeId, req.getDictWorkspaceTypeId()) + .eq(Objects.nonNull(req.getStatus()), ProductModule::getStatus, req.getStatus()) + .list(); + return ApiResult.ok(BeanMapper.copyList(list, ProductVO.class)); + } + + @Override + public ApiPageResult page(ProductSearchPageReq req) { + IPage page = productModuleDao.lambdaQuery() + .like(StringUtils.hasLength(req.getName()), ProductModule::getProductName, req.getName()) + .eq(Objects.nonNull(req.getDictWorkspaceTypeId()), ProductModule::getDictWorkspaceTypeId, req.getDictWorkspaceTypeId()) + .eq(Objects.nonNull(req.getStatus()), ProductModule::getStatus, req.getStatus()) + .page(req.toPage()); + List list = BeanMapper.copyList(page.getRecords(), ProductVO.class); + PageResp data = PageResp.list(page.getCurrent(), page.getSize(), page.getTotal(), list); + return ApiPageResult.ok(data); + } + + @Override + public ApiResult getById(Long id) { + return ApiResult.ok(BeanMapper.copyBean(productModuleDao.getById(id), ProductVO.class)); + } + + @Override + public ApiResult add(ProductAddReq req) { + ProductModule productModule = BeanMapper.copyBean(req, ProductModule.class); + productModuleDao.save(productModule); + return ApiResult.ok(BeanMapper.copyBean(productModule, ProductVO.class)); + } + + @Override + public ApiResult update(ProductUpdateReq req) { + ProductModule productModule = productModuleDao.getById(req.getId()); + BeanMapper.copyBeanIgnoreNull(req, ()-> productModule); + productModuleDao.updateById(productModule); + return ApiResult.ok(); + } + + @Override + public ApiResult delete(Long id) { + ProductModule productModule = productModuleDao.getById(id); + AssertUtil.isTrue(Objects.nonNull(productModule), "产品不存在"); + productModule.setIsDelete(id); + productModuleDao.updateById(productModule); + return ApiResult.ok(BeanMapper.copyBean(productModule, ProductVO.class)); + } +} From e099e97f3fa24d970a44a8ba0a11514d9caa4a74 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Thu, 7 Sep 2023 19:07:20 +0800 Subject: [PATCH 018/186] =?UTF-8?q?add=20-=20=E6=B7=BB=E5=8A=A0=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3=E7=9A=84=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/feign/ProductApi.java | 9 ++++- .../ProductFeatureRelationUpdateReq.java | 40 +++++++++++++++++++ .../controller/product/ProductController.java | 16 ++++++++ .../ProductFeatureRelationService.java | 3 ++ .../ProductFeatureRelationServiceImpl.java | 22 ++++++++++ 5 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationUpdateReq.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java index 2b55d246..d3c15f5f 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java @@ -4,6 +4,7 @@ import cn.axzo.framework.domain.web.result.ApiPageResult; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.product.ProductAddReq; import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq; +import cn.axzo.tyr.client.model.product.ProductFeatureRelationUpdateReq; import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO; import cn.axzo.tyr.client.model.product.ProductSearchListReq; import cn.axzo.tyr.client.model.product.ProductSearchPageReq; @@ -18,7 +19,6 @@ import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import java.util.List; -import java.util.Map; /** * 产品相关 API @@ -92,4 +92,11 @@ public interface ProductApi { @PostMapping("api/auth/product/feature/relation/list") ApiResult> featureList(@Validated @RequestBody ProductFeatureRelationSearchReq req); + /** + * 更新产品与权限点的关联关系 + * + * @param req {@link ProductFeatureRelationUpdateReq} + * @return + */ + ApiResult updateFeatureRelation(List req); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationUpdateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationUpdateReq.java new file mode 100644 index 00000000..d1e0b95e --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationUpdateReq.java @@ -0,0 +1,40 @@ +package cn.axzo.tyr.client.model.product; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; +import java.util.ArrayList; +import java.util.List; + +/** + * 产品与权限点关系修改入参模型 + * + * @author wangli + * @since 2023/9/7 18:53 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ProductFeatureRelationUpdateReq { + + /** + * 产品 ID + */ + @NotNull(message = "产品 ID 不能为空") + private Long productModuleId; + + /** + * 字典第三级 Code ID(OuType) + */ + @NotNull(message = "字典 ouType ID 不能为空") + private Long dictCodeId; + + /** + * 权限点 ID + */ + private List featureIds = new ArrayList<>(); +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/product/ProductController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/product/ProductController.java index f6f7495a..a0302790 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/product/ProductController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/product/ProductController.java @@ -5,6 +5,7 @@ import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.ProductApi; import cn.axzo.tyr.client.model.product.ProductAddReq; import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq; +import cn.axzo.tyr.client.model.product.ProductFeatureRelationUpdateReq; import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO; import cn.axzo.tyr.client.model.product.ProductSearchListReq; import cn.axzo.tyr.client.model.product.ProductSearchPageReq; @@ -14,6 +15,7 @@ import cn.axzo.tyr.server.service.ProductFeatureRelationService; import cn.axzo.tyr.server.service.ProductService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.RestController; import java.util.List; @@ -107,4 +109,18 @@ public class ProductController implements ProductApi { public ApiResult> featureList(ProductFeatureRelationSearchReq req) { return productFeatureRelationService.featureList(req); } + + /** + * 更新产品与权限点的关联关系 + * + * @param req {@link ProductFeatureRelationUpdateReq} + * @return + */ + @Override + public ApiResult updateFeatureRelation(List req) { + if(CollectionUtils.isEmpty(req)) { + return ApiResult.ok(false); + } + return productFeatureRelationService.updateFeatureRelation(req); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/ProductFeatureRelationService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/ProductFeatureRelationService.java index 0113c675..df2c25ce 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/ProductFeatureRelationService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/ProductFeatureRelationService.java @@ -2,6 +2,7 @@ package cn.axzo.tyr.server.service; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq; +import cn.axzo.tyr.client.model.product.ProductFeatureRelationUpdateReq; import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO; import java.util.List; @@ -14,4 +15,6 @@ import java.util.List; */ public interface ProductFeatureRelationService { ApiResult> featureList(ProductFeatureRelationSearchReq req); + + ApiResult updateFeatureRelation(List req); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java index e145c817..6a1ef569 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java @@ -3,6 +3,7 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.BeanMapper; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq; +import cn.axzo.tyr.client.model.product.ProductFeatureRelationUpdateReq; import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO; import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation; import cn.axzo.tyr.server.repository.service.SaasProductModuleFeatureRelationDao; @@ -10,9 +11,13 @@ import cn.axzo.tyr.server.service.ProductFeatureRelationService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * 产品与权限点的 Service 接口实现 @@ -34,4 +39,21 @@ public class ProductFeatureRelationServiceImpl implements ProductFeatureRelation .list(); return ApiResult.ok(BeanMapper.copyList(list, ProductFeatureRelationVO.class)); } + + @Override + @Transactional(rollbackFor = Exception.class) + public ApiResult updateFeatureRelation(List req) { + List productIds = req.stream().map(ProductFeatureRelationUpdateReq::getProductModuleId).distinct().collect(Collectors.toList()); + saasProductModuleFeatureRelationDao.removeByIds(productIds); + List saveList = new ArrayList<>(); + req.forEach(i -> i.getFeatureIds().forEach(featureId -> { + SaasProductModuleFeatureRelation relation = new SaasProductModuleFeatureRelation(); + relation.setProductModuleId(i.getProductModuleId()); + relation.setDictCodeId(i.getDictCodeId()); + relation.setFeatureId(featureId); + saveList.add(relation); + })); + saasProductModuleFeatureRelationDao.saveBatch(saveList); + return ApiResult.ok(true); + } } From 4df95854dec96e41d6f964a9ba9c6c4e5ff1c8d9 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Thu, 7 Sep 2023 19:08:49 +0800 Subject: [PATCH 019/186] =?UTF-8?q?add=20-=20=E6=B7=BB=E5=8A=A0=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3=E7=9A=84=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java | 1 + 1 file changed, 1 insertion(+) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java index d3c15f5f..1b293bd4 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java @@ -98,5 +98,6 @@ public interface ProductApi { * @param req {@link ProductFeatureRelationUpdateReq} * @return */ + @PostMapping("api/auth/product/feature/relation/update") ApiResult updateFeatureRelation(List req); } From 794e0dc515d0d129891e6015198bb2d089686e11 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Fri, 8 Sep 2023 10:02:01 +0800 Subject: [PATCH 020/186] =?UTF-8?q?feature(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BF=9D=E5=AD=98=20=E5=88=A0=E9=99=A4=20?= =?UTF-8?q?=E5=8F=98=E6=9B=B4=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/feign/PermissionPointApi.java | 18 ++++ .../permission/PermissionPointController.java | 25 ++++++ .../repository/mapper/SaasFeatureMapper.java | 7 +- .../repository/service/SaasFeatureDao.java | 7 ++ .../service/impl/SaasFeatureDaoImpl.java | 17 ++++ .../service/PermissionPointService.java | 12 +++ .../impl/PermissionPointServiceImpl.java | 84 ++++++++++++++++++- .../permission/PermissionPointTest.java | 16 ++++ 8 files changed, 183 insertions(+), 3 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java index 12099f8e..537a00c3 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java @@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @@ -33,4 +34,21 @@ public interface PermissionPointApi { /** 根据权限点ID批量查询节点信息 **/ @PostMapping(value = "/api/v1/permissionPoint/listTreeNodesByIds") ApiResult> listTreeNodesByIds(@RequestBody List permissionIds); + + /** 保存权限点 - 新增或更新 **/ + @PostMapping(value = "/api/v1/permissionPoint/save") + ApiResult savePermissionPoint(@RequestBody PermissionPointDTO dto); + + /** 删除权限点 - 直接删除 **/ + @PostMapping(value = "/api/v1/permissionPoint/delete/{permissionId}") + ApiResult deletePermissionPoint(@PathVariable Long permissionId); + + + /** 更新父级节点 - 直接更新不校验 **/ + @PostMapping(value = "/api/v1/permissionPoint/change/{permissionId}") + ApiResult changeParent(@RequestParam Long updater, @PathVariable Long permissionId, @RequestParam Long newParentId); + + /** 更改排序 **/ + @PostMapping(value = "/api/v1/permissionPoint/sort/{permissionId}") + ApiResult updateSort(@RequestParam Long updater, @PathVariable Long permissionId, @RequestParam Integer direction); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java index 2f0f57eb..448e6aee 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java @@ -8,6 +8,7 @@ import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.server.service.PermissionPointService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.List; @@ -42,4 +43,28 @@ public class PermissionPointController implements PermissionPointApi { public ApiResult> listTreeNodesByIds(List permissionIds) { return ApiResult.ok(permissionPointService.listNodesByIds(permissionIds)); } + + @Override + public ApiResult savePermissionPoint(PermissionPointDTO dto) { + permissionPointService.save(dto); + return ApiResult.ok(); + } + + @Override + public ApiResult deletePermissionPoint(Long permissionId) { + permissionPointService.delete(permissionId); + return ApiResult.ok(); + } + + @Override + public ApiResult changeParent(Long updater, Long permissionId, Long newParentId) { + permissionPointService.changeParent(updater, permissionId, newParentId); + return ApiResult.ok(); + } + + @Override + public ApiResult updateSort(Long updater, Long permissionId, Integer direction) { + permissionPointService.updateSort(updater, permissionId, direction); + return ApiResult.ok(); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasFeatureMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasFeatureMapper.java index baa19539..5a647c8b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasFeatureMapper.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasFeatureMapper.java @@ -2,6 +2,7 @@ package cn.axzo.tyr.server.repository.mapper; import cn.axzo.tyr.server.repository.entity.SaasFeature; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Update; /** *

@@ -13,4 +14,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface SaasFeatureMapper extends BaseMapper { -} + @Update("UPDATE saas_feature " + + "SET path = REPLACE(path,#{pathPrefix}, #{newPathPrefix}) , update_by = #{updater}" + + "WHERE path LIKE CONCAT(#{pathPrefix},'%') ") + void updateChildrenPath(Long updater, String pathPrefix, String newPathPrefix); +} \ No newline at end of file diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasFeatureDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasFeatureDao.java index 7af70bac..f99acd18 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasFeatureDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasFeatureDao.java @@ -3,6 +3,8 @@ package cn.axzo.tyr.server.repository.service; import cn.axzo.tyr.server.repository.entity.SaasFeature; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** *

* 服务类 @@ -13,4 +15,9 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface SaasFeatureDao extends IService { + void updateChildrenPath(Long updater, String pathPrefix, String newPathPrefix); + + List listByParentId(Long parentId); + + void updateSort(Long permissionId, int switchIndex); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java index 9b7c67e2..778330e5 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java @@ -3,9 +3,12 @@ package cn.axzo.tyr.server.repository.service.impl; import cn.axzo.tyr.server.repository.entity.SaasFeature; import cn.axzo.tyr.server.repository.mapper.SaasFeatureMapper; import cn.axzo.tyr.server.repository.service.SaasFeatureDao; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 服务实现类 @@ -17,4 +20,18 @@ import org.springframework.stereotype.Service; @Service public class SaasFeatureDaoImpl extends ServiceImpl implements SaasFeatureDao { + @Override + public void updateChildrenPath(Long updater, String pathPrefix, String newPathPrefix) { + this.baseMapper.updateChildrenPath(updater, pathPrefix, newPathPrefix); + } + + @Override + public List listByParentId(Long parentId) { + return this.baseMapper.selectList(new LambdaQueryWrapper().eq(SaasFeature::getParentId, parentId)); + } + + @Override + public void updateSort(Long permissionId, int switchIndex) { + + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java index 17e42114..39b5e42f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java @@ -29,4 +29,16 @@ public interface PermissionPointService { * 根据权限点ID查询详情 * **/ PermissionPointDTO getDetail(Long permissionId); + + /** 保存权限点 **/ + void save(PermissionPointDTO dto); + + /** 删除权限点 **/ + void delete(Long permissionId); + + /** 更新父级 **/ + void changeParent(Long updater, Long permissionId,Long newParentId); + + /** 移动排序 **/ + void updateSort(Long updater, Long permissionId, Integer direction); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 98b227de..e4a3f106 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -17,13 +17,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; -import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.function.Function; import java.util.stream.Collectors; @@ -153,7 +154,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { return dto; } //所有父级处理 - List split = StrUtil.split(dto.getPath(), FEATURE_PATH_DELIMITER); + List split = StrUtil.split(dto.getPath(), FEATURE_PATH_DELIMITER, true, true); List ids = split.stream() .filter(x -> !StrUtil.equals(FEATURE_NO_PARENT, x)) .map(Long::valueOf) @@ -170,6 +171,85 @@ public class PermissionPointServiceImpl implements PermissionPointService { return dto; } + @Override + public void save(PermissionPointDTO dto) { + SaasFeature saasFeature = BeanMapper.copyBean(dto, SaasFeature.class); + if (dto.getId() == null) { + this.saasFeatureDao.save(saasFeature); + } else { + this.saasFeatureDao.updateById(saasFeature); + } + } + + @Transactional(rollbackFor = Throwable.class) + @Override + public void delete(Long permissionId) { + this.saasFeatureDao.removeById(permissionId); + //TODO:@Zhan 删除关联数据 - 权限集合 + } + + @Transactional(rollbackFor = Throwable.class) + @Override + public void changeParent(Long updater, Long permissionId, Long newParentId) { + SaasFeature feature = this.saasFeatureDao.getById(permissionId); + if (Objects.equals(feature.getParentId(), newParentId)) { + //父级未变 + return; + } + SaasFeature parent = this.saasFeatureDao.getById(newParentId); + if (StrUtil.equals(feature.getTerminal(), parent.getTerminal())) { + throw new BizException(BaseCode.BAD_REQUEST, "不允许跨工作台"); + } + if (parent.getPath().contains(String.valueOf(permissionId))) { + throw new BizException(BaseCode.BAD_REQUEST, "不允许移到子级"); + } + //当前节点 + SaasFeature entity = new SaasFeature(); + entity.setParentId(feature.getId()); + entity.setParentId(newParentId); + entity.setPath(parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER); + entity.setUpdateBy(updater); + this.saasFeatureDao.updateById(entity); + //更新子级path + this.saasFeatureDao.updateChildrenPath(updater, feature.getPath() + feature.getId() + FEATURE_PATH_DELIMITER, + entity.getPath() + entity.getId() + FEATURE_PATH_DELIMITER); + } + + @Override + public void updateSort(Long updater, Long permissionId, Integer direction) { + //查询当前节点和所有同级节点 + SaasFeature feature = this.saasFeatureDao.getById(permissionId); + List children = this.saasFeatureDao.listByParentId(feature.getParentId()); + List sortedChildren = children.stream() + .sorted(Comparator.comparing(SaasFeature::getSort)) + .collect(Collectors.toList()); + //确认当前节点index + Integer index = sortedChildren.stream() + .filter(x -> x.getId().equals(permissionId)) + .map(sortedChildren::indexOf) + .findFirst().get(); + int switchIndex = 0; + if (direction > 0) { + //向上 + if (index == 0) { + //已经是第一个 + return; + } + switchIndex = ++index; + } else { + //向下 + if (index == sortedChildren.size() - 1) { + //已经最后一个 + return; + } + switchIndex = --index; + } + //更新当前节点 + this.saasFeatureDao.updateSort(permissionId, switchIndex); + //更新交换节点 + this.saasFeatureDao.updateSort(sortedChildren.get(switchIndex).getId(), index); + } + private PermissionPointTreeNode feature2Node(SaasFeature feature) { PermissionPointTreeNode node = new PermissionPointTreeNode(); diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java index 38ea49e2..79c8b405 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java @@ -1,6 +1,7 @@ package cn.axzo.tyr.server.permission; import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.permission.PermissionPointDTO; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.server.controller.permission.PermissionPointController; @@ -44,4 +45,19 @@ public class PermissionPointTest { System.out.println("---------------"); System.out.println(JSON.toJSONString(result, SerializerFeature.DisableCircularReferenceDetect)); } + + @Test + public void testGetDetail() { + Long permissionId = 360L; + ApiResult result = controller.getDetail(permissionId); + System.out.println(JSON.toJSONString(result)); + } + + @Test + public void testListByIds() { + List ids = Arrays.asList(354L, 360L); + ApiResult> result = controller.listTreeNodesByIds(ids); + System.out.println(JSON.toJSONString(result)); + } + } From 32fe3ef7463b71873ec8eb3dcfc5e1b8bc9dd180 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Fri, 8 Sep 2023 10:21:21 +0800 Subject: [PATCH 021/186] =?UTF-8?q?update=20-=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BA=A7=E5=93=81=20ID=20=E6=95=B0=E6=8D=AE=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/axzo/tyr/client/model/product/ProductVO.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java index fef1a6c3..f707cc6c 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java @@ -22,7 +22,7 @@ public class ProductVO { /** * 产品 ID */ - private String id; + private Long id; /** * 产品名称 @@ -38,7 +38,7 @@ public class ProductVO { * 产品所属工作台类型 */ private Long dictWorkspaceTypeId; - + /** * 产品所属工作类型名称 */ From 67932a1a05dac4460eba769d3c2ef6a3ec45b319 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Fri, 8 Sep 2023 11:46:51 +0800 Subject: [PATCH 022/186] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9E=9A=E4=B8=BE?= =?UTF-8?q?=E5=92=8C=E4=BA=BA=E5=91=98=E8=A7=92=E8=89=B2=E5=85=B3=E8=81=94?= =?UTF-8?q?=E5=AE=9E=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/model/enums/IEnum.java | 27 ++++++ .../tyr/client/model/enums/IdentityType.java | 53 ++++++++++++ .../entity/SaasRoleUserRelation.java | 86 +++++++++++++++++++ 3 files changed, 166 insertions(+) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/IEnum.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/IdentityType.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleUserRelation.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/IEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/IEnum.java new file mode 100644 index 00000000..66789b7d --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/IEnum.java @@ -0,0 +1,27 @@ +package cn.axzo.tyr.client.model.enums; + +/** + * 项目名称:pudge + * 类 名 称:AbstractEnum + * 类 描 述:TODO + * 创建时间:2022/7/14 12:26 + * 创 建 人:xuyaozuo + */ +public interface IEnum { + + Integer getCode(); + String getMessage(); + + static & IEnum> T enumFromCode(Class enumType, Integer code) { + T defaultEnum = null; + for (T c : enumType.getEnumConstants()) { + if (c.getCode().equals(code)) { + return c; + } + if (c.getCode().equals(0)) { + defaultEnum = c; + } + } + return defaultEnum; + } +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/IdentityType.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/IdentityType.java new file mode 100644 index 00000000..7e5aa1cb --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/IdentityType.java @@ -0,0 +1,53 @@ +package cn.axzo.tyr.client.model.enums; + +import cn.axzo.basics.common.exception.ServiceException; +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 人员身份类型枚举 + * + * @author xuyaozuo + * @since 2022/5/9 21:59 + */ +@Getter +@AllArgsConstructor +public enum IdentityType implements IEnum{ + + /*人员身份类型*/ + NOT_SUPPORT(0, "NOT_SUPPORT", "无效类型"), + WORKER(1, "WORKER", "工人"), + WORKER_LEADER(2, "WORKER_LEADER", "班组长"), + PRACTITIONER(3, "PRACTITIONER", "从业人员"), + REGULATOR(4, "REGULATOR", "监管人员"), + OPERATOR(5, "OPERATOR", "运营人员"), + ; + @EnumValue + @JsonValue + private final Integer code; + private final String message; + private final String desc; + + + public static IdentityType getIdentityType(Integer code) { + IdentityType[] values = values(); + for (IdentityType item : values) { + if (item.getCode().equals(code)) { + return item; + } + } + throw new ServiceException("档案身份类型不匹配 code:" + code); + } + + public static IdentityType getIdentityType(String message) { + IdentityType[] values = values(); + for (IdentityType item : values) { + if (item.getMessage().equals(message)) { + return item; + } + } + throw new ServiceException("档案身份类型不匹配 message:" + message); + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleUserRelation.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleUserRelation.java new file mode 100644 index 00000000..9db99707 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleUserRelation.java @@ -0,0 +1,86 @@ +package cn.axzo.tyr.server.repository.entity; + +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.model.enums.IdentityType; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + * saas-角色用户关联表(SaasRoleUserRelation)表实体类 + * + * @author makejava + * @since 2022-05-24 11:18:41 + */ +@Getter +@Setter +@ToString +@EqualsAndHashCode(callSuper = true) +@TableName("saas_role_user_relation") +public class SaasRoleUserRelation extends BaseEntity { + + /** + * 身份Id + */ + private Long identityId; + + /** + * 身份类型 1:工人 2:从业人员 3:班组长 4:运营人员 5:政务人员 + */ + private IdentityType identityType; + + /** + * 角色Id + */ + private Long roleId; + + /** + * 自然人Id + */ + private Long naturalPersonId; + + /** + * 创建者 + */ + private Long createBy; + + /** + * 更新者 + */ + private Long updateBy; + + /** + * 所属单位Id 用户在当前工作台的所属单位 + */ + private Long ouId; + + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 资源类型 + */ + private Integer resourceType; + + /** + * 资源Id + */ + private Long resourceId; + + /** + * 获取主键值 + * + * @return 主键值 + */ + @Override + protected Serializable pkVal() { + return this.id; + } +} + From 2df098dd537ff716d3fdedfe1f7e3f07107b3a0a Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Fri, 8 Sep 2023 11:49:23 +0800 Subject: [PATCH 023/186] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/model/enums/package-info.java | 8 -- .../tyr/server/consumer/package-info.java | 1 - .../server/controller/app/package-info.java | 1 - .../server/controller/web/UserController.java | 76 ----------------- .../server/controller/web/UserResource.java | 78 ------------------ .../cn/axzo/tyr/server/job/package-info.java | 1 - .../server/repository/SaasBasicDictDao.java | 17 ++++ .../repository/entity/SaasBasicDict.java | 19 +++++ .../repository/entity/package-info.java | 1 - .../mapper/SaasBasicDictMapper.java | 16 ++++ .../server/service/SaasBasicDictService.java | 11 +++ .../service/converter/EntityConverter.java | 15 ---- .../service/converter/UserConverter.java | 26 ------ .../service/dto/request/package-info.java | 1 - .../service/dto/response/package-info.java | 1 - .../server/service/event/package-info.java | 1 - .../server/service/manager/package-info.java | 1 - .../tyr/server/service/user/UserService.java | 29 ------- .../service/user/impl/UserServiceImpl.java | 82 ------------------- .../service/validator/package-info.java | 1 - .../test/java/cn/axzo/tyr/server/AppTest.java | 14 ---- 21 files changed, 63 insertions(+), 337 deletions(-) delete mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/package-info.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/consumer/package-info.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/controller/app/package-info.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/controller/web/UserController.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/controller/web/UserResource.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/job/package-info.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/package-info.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasBasicDictMapper.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/converter/EntityConverter.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/converter/UserConverter.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/package-info.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/response/package-info.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/event/package-info.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/manager/package-info.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/user/UserService.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/user/impl/UserServiceImpl.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/validator/package-info.java delete mode 100644 tyr-server/src/test/java/cn/axzo/tyr/server/AppTest.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/package-info.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/package-info.java deleted file mode 100644 index a5c47ea1..00000000 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/package-info.java +++ /dev/null @@ -1,8 +0,0 @@ -/** - * @author: chenwenjian - * @date: 2023/9/6 15:37 - * @description: - * @modifiedBy: - * @version: 1.0 - */ -package cn.axzo.tyr.client.model.enums; \ No newline at end of file diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/consumer/package-info.java b/tyr-server/src/main/java/cn/axzo/tyr/server/consumer/package-info.java deleted file mode 100644 index eb001a5e..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/consumer/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.axzo.tyr.server.consumer; \ No newline at end of file diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/app/package-info.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/app/package-info.java deleted file mode 100644 index 49e38f03..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/app/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.axzo.tyr.server.controller.app; \ No newline at end of file diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/web/UserController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/web/UserController.java deleted file mode 100644 index 7ce449bd..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/web/UserController.java +++ /dev/null @@ -1,76 +0,0 @@ -package cn.axzo.tyr.server.controller.web; - -import cn.axzo.tyr.server.service.user.UserService; -import cn.axzo.tyr.server.service.dto.request.user.NewUserDTO; -import cn.axzo.tyr.server.service.dto.request.user.UpdateUserDTO; -import cn.axzo.tyr.server.service.dto.request.user.UserQO; -import cn.axzo.tyr.server.service.dto.response.user.UserVO; -import cn.azxo.framework.common.model.CommonPageResponse; -import cn.azxo.framework.common.model.CommonResponse; -import com.github.xiaoymin.knife4j.annotations.ApiSupport; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; - -/** - * @Author: liyong.tian - * @Date: 2022/9/2 - * @Description: - */ -@Slf4j -@Api(tags = "web-用户信息接口") -@ApiSupport(author = "田立勇") -@RequestMapping("/api/v1") -@RestController -@RequiredArgsConstructor -public class UserController { - - private final UserService userService; - - @ApiOperation(value = "创建用户") - @PostMapping("/users") - public CommonResponse createUser(@Valid @RequestBody NewUserDTO dto) { - log.info("REST request to save user : {}", dto); - // 校验入参 - dto.valid(); - UserVO result = userService.create(dto); - return CommonResponse.success(result); - } - - @ApiOperation(value = "修改用户") - @PutMapping("/users/{id}") - public CommonResponse updateUser(@ApiParam("用户ID") @PathVariable Long id, - @Valid @RequestBody UpdateUserDTO dto) { - log.info("REST request to update user : {}", dto); - // 校验入参 - dto.valid(); - UserVO result = userService.update(id, dto); - return CommonResponse.success(result); - } - - @ApiOperation("获取用户列表") - @GetMapping("/users") - public CommonResponse> getUsers(@Valid UserQO userQO) { - CommonPageResponse results = userService.queryByPage(userQO); - return CommonResponse.success(results); - } - - @ApiOperation("获取用户详情") - @GetMapping("/users/{id}") - public CommonResponse getUser(@ApiParam("用户ID") @PathVariable Long id) { - UserVO result = userService.getOne(id); - return CommonResponse.success(result); - } - - @ApiOperation("删除用户") - @DeleteMapping("/users/{id}") - public CommonResponse deleteUser(@ApiParam("用户ID") @PathVariable Long id) { - userService.delete(id); - return CommonResponse.success(); - } -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/web/UserResource.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/web/UserResource.java deleted file mode 100644 index 73607e7f..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/web/UserResource.java +++ /dev/null @@ -1,78 +0,0 @@ -package cn.axzo.tyr.server.controller.web; - -import cn.axzo.framework.domain.page.PageQO; -import cn.axzo.framework.domain.page.PageResp; -import cn.axzo.framework.web.http.ApiResponse; -import cn.axzo.framework.web.http.ApiPageResponse; -import cn.axzo.tyr.server.service.dto.request.user.NewUserDTO; -import cn.axzo.tyr.server.service.dto.request.user.UpdateUserDTO; -import cn.axzo.tyr.server.service.dto.request.user.UserQO1; -import cn.axzo.tyr.server.service.dto.response.user.UserVO; -import cn.axzo.tyr.server.service.user.UserService; -import com.github.xiaoymin.knife4j.annotations.ApiSupport; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.*; - -import javax.validation.Valid; - -/** - * @Author: liyong.tian - * @Date: 2022/10/28 - * @Description: 新项目搭建推荐方式 - */ -@Slf4j -@Api(tags = "web-用户信息接口") -@ApiSupport(author = "田立勇") -@RequestMapping("/api/v2") -@RestController -@RequiredArgsConstructor -public class UserResource { - - private final UserService userService; - - @ApiOperation(value = "创建用户") - @PostMapping("/users") - public ApiResponse createUser(@Valid @RequestBody NewUserDTO dto) { - log.info("REST request to save user : {}", dto); - // 校验入参 - dto.valid(); - UserVO result = userService.create(dto); - return ApiResponse.ok(result); - } - - @ApiOperation(value = "修改用户") - @PutMapping("/users/{id}") - public ApiResponse updateUser(@ApiParam("用户ID") @PathVariable Long id, - @Valid @RequestBody UpdateUserDTO dto) { - log.info("REST request to update user : {}", dto); - // 校验入参 - dto.valid(); - UserVO result = userService.update(id, dto); - return ApiResponse.ok(result); - } - - @ApiOperation("获取用户列表") - @GetMapping("/users") - public ApiPageResponse getUsers(@ModelAttribute UserQO1 userQo, PageQO page) { - PageResp results = userService.find(userQo, page); - return ApiPageResponse.ok(results); - } - - @ApiOperation("获取用户详情") - @GetMapping("/users/{id}") - public ApiResponse getUser(@ApiParam("用户ID") @PathVariable Long id) { - UserVO result = userService.getOne(id); - return ApiResponse.ok(result); - } - - @ApiOperation("删除用户") - @DeleteMapping("/users/{id}") - public ApiResponse deleteUser(@ApiParam("用户ID") @PathVariable Long id) { - userService.delete(id); - return ApiResponse.ok(); - } -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/job/package-info.java b/tyr-server/src/main/java/cn/axzo/tyr/server/job/package-info.java deleted file mode 100644 index d3a347ea..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/job/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.axzo.tyr.server.job; \ No newline at end of file diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java new file mode 100644 index 00000000..bd32942f --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java @@ -0,0 +1,17 @@ +package cn.axzo.tyr.server.repository; + +import cn.axzo.tyr.server.repository.entity.SaasBasicDict; +import cn.axzo.tyr.server.repository.mapper.SaasBasicDictMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * @author: chenwenjian + * @date: 2023/9/7 17:43 + * @description: + * @modifiedBy: + * @version: 1.0 + */ +@Service +public class SaasBasicDictDao extends ServiceImpl { +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java new file mode 100644 index 00000000..b7f49644 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java @@ -0,0 +1,19 @@ +package cn.axzo.tyr.server.repository.entity; + +import cn.axzo.framework.data.mybatisplus.model.BaseEntity; + +import java.io.Serializable; + +/** + * @author: chenwenjian + * @date: 2023/9/7 17:39 + * @description: + * @modifiedBy: + * @version: 1.0 + */ +public class SaasBasicDict extends BaseEntity implements Serializable { + + private static final long serialVersionUID = 100L; + + +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/package-info.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/package-info.java deleted file mode 100644 index f2633475..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.axzo.tyr.server.repository.entity; \ No newline at end of file diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasBasicDictMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasBasicDictMapper.java new file mode 100644 index 00000000..82260d7c --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasBasicDictMapper.java @@ -0,0 +1,16 @@ +package cn.axzo.tyr.server.repository.mapper; + +import cn.axzo.tyr.server.repository.entity.SaasBasicDict; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author: chenwenjian + * @date: 2023/9/7 17:41 + * @description: + * @modifiedBy: + * @version: 1.0 + */ +@Mapper +public interface SaasBasicDictMapper extends BaseMapper { +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java new file mode 100644 index 00000000..ae497d5b --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java @@ -0,0 +1,11 @@ +package cn.axzo.tyr.server.service; + +/** + * @author: chenwenjian + * @date: 2023/9/7 17:54 + * @description: + * @modifiedBy: + * @version: 1.0 + */ +public interface SaasBasicDictService { +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/converter/EntityConverter.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/converter/EntityConverter.java deleted file mode 100644 index 1dd728f1..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/converter/EntityConverter.java +++ /dev/null @@ -1,15 +0,0 @@ -package cn.axzo.tyr.server.service.converter; - -import java.util.List; - -/** - * @Author: liyong.tian - * @Date: 2022/9/5 - * @Description: - */ -public interface EntityConverter{ - - V toVo(E var); - - List toVo(List var); -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/converter/UserConverter.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/converter/UserConverter.java deleted file mode 100644 index af7010d8..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/converter/UserConverter.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.axzo.tyr.server.service.converter; - -import cn.axzo.tyr.server.service.dto.request.user.NewUserDTO; -import cn.axzo.tyr.server.service.dto.request.user.UpdateUserDTO; -import cn.axzo.tyr.server.service.dto.response.user.UserVO; -import cn.axzo.tyr.server.repository.entity.user.User; -import org.mapstruct.Mapper; -import org.mapstruct.MappingTarget; - -import static org.mapstruct.NullValueCheckStrategy.ALWAYS; - -/** - * @Author: liyong.tian - * @Date: 2022/9/2 - * @Description: - */ -@Mapper( - componentModel = "spring", - nullValueCheckStrategy = ALWAYS -) -public interface UserConverter extends EntityConverter { - - User toEntity(NewUserDTO dto); - - void updateEntity(UpdateUserDTO dto, @MappingTarget User user); -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/package-info.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/package-info.java deleted file mode 100644 index 8f23be65..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.axzo.tyr.server.service.dto.request; \ No newline at end of file diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/response/package-info.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/response/package-info.java deleted file mode 100644 index 28c9eaaf..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/response/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.axzo.tyr.server.service.dto.response; \ No newline at end of file diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/event/package-info.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/event/package-info.java deleted file mode 100644 index 0d058404..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/event/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.axzo.tyr.server.service.event; \ No newline at end of file diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/manager/package-info.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/manager/package-info.java deleted file mode 100644 index 9270b83b..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/manager/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.axzo.tyr.server.service.manager; \ No newline at end of file diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/user/UserService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/user/UserService.java deleted file mode 100644 index 1cffffb4..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/user/UserService.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.axzo.tyr.server.service.user; - -import cn.axzo.framework.domain.page.PageQO; -import cn.axzo.framework.domain.page.PageResp; -import cn.axzo.tyr.server.service.dto.request.user.NewUserDTO; -import cn.axzo.tyr.server.service.dto.request.user.UpdateUserDTO; -import cn.axzo.tyr.server.service.dto.request.user.UserQO; -import cn.axzo.tyr.server.service.dto.request.user.UserQO1; -import cn.axzo.tyr.server.service.dto.response.user.UserVO; -import cn.azxo.framework.common.model.CommonPageResponse; - -/** - * @Author: liyong.tian - * @Date: 2022/9/2 - * @Description: - */ -public interface UserService { - UserVO create(NewUserDTO dto); - - UserVO update(Long id, UpdateUserDTO dto); - - UserVO getOne(Long id); - - void delete(Long id); - - CommonPageResponse queryByPage(UserQO userQO); - - PageResp find(UserQO1 userQo, PageQO page); -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/user/impl/UserServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/user/impl/UserServiceImpl.java deleted file mode 100644 index 56fae11d..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/user/impl/UserServiceImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -package cn.axzo.tyr.server.service.user.impl; - -import cn.axzo.framework.domain.page.PageQO; -import cn.axzo.framework.domain.page.PageResp; -import cn.axzo.framework.domain.web.ApiException; -import cn.axzo.tyr.server.common.enums.ErrorCode; -import cn.axzo.tyr.server.service.dto.request.user.NewUserDTO; -import cn.axzo.tyr.server.service.dto.request.user.UpdateUserDTO; -import cn.axzo.tyr.server.service.dto.request.user.UserQO; -import cn.axzo.tyr.server.service.dto.request.user.UserQO1; -import cn.axzo.tyr.server.service.dto.response.user.UserVO; -import cn.axzo.tyr.server.repository.entity.user.User; -import cn.axzo.tyr.server.repository.UserDao; -import cn.axzo.tyr.server.service.user.UserService; -import cn.axzo.tyr.server.service.converter.UserConverter; -import cn.azxo.framework.common.model.CommonPageResponse; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * @Author: liyong.tian - * @Date: 2022/9/2 - * @Description: - */ -@Slf4j -@Service -@RequiredArgsConstructor -public class UserServiceImpl implements UserService { - - private final UserConverter userConverter; - - private final UserDao userDao; - - @Override - public UserVO create(NewUserDTO dto) { - User user = userConverter.toEntity(dto); - userDao.save(user); - return userConverter.toVo(user); - } - - @Override - public UserVO update(Long id, UpdateUserDTO dto) { - User user = userDao.findById(id); - if (user == null) { - throw new ApiException(ErrorCode.USER_NOT_EXISTS, id); - } - userConverter.updateEntity(dto, user); - return userConverter.toVo(user); - } - - @Override - public UserVO getOne(Long id) { - User user = userDao.findById(id); - return userConverter.toVo(user); - } - - @Override - public void delete(Long id) { - userDao.delete(id); - } - - @Override - public CommonPageResponse queryByPage(UserQO userQo) { - IPage page = userDao.queryByPage(userQo); - List userList = page.getRecords(); - if (CollectionUtils.isEmpty(userList)) { - return CommonPageResponse.zero(userQo.getPage(), userQo.getPageSize()); - } - return new CommonPageResponse<>(page.getCurrent(), page.getSize(), page.getTotal(), userConverter.toVo(page.getRecords())); - } - - @Override - public PageResp find(UserQO1 userQo, PageQO page) { - IPage userPage = userDao.find(userQo, page); - return PageResp.list(userPage, userConverter.toVo(userPage.getRecords())); - } -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/validator/package-info.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/validator/package-info.java deleted file mode 100644 index b4ae43f2..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/validator/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.axzo.tyr.server.service.validator; \ No newline at end of file diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/AppTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/AppTest.java deleted file mode 100644 index 7a8b5c69..00000000 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/AppTest.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.axzo.tyr.server; - -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -/** - * Unit test for simple App. - */ -@RunWith(SpringRunner.class) -@SpringBootTest -public class AppTest { - -} From 8188cb588698b1c7669b2258472fd318560a09a4 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Fri, 8 Sep 2023 13:43:11 +0800 Subject: [PATCH 024/186] =?UTF-8?q?update=20-=20=E8=B0=83=E6=95=B4=20POJO?= =?UTF-8?q?=20=E7=9A=84=E6=B3=A8=E8=A7=A3,=E6=94=AF=E6=8C=81=E9=93=BE?= =?UTF-8?q?=E5=BC=8F=E8=AE=BE=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/tyr/client/model/product/ProductAddReq.java | 5 ++--- .../model/product/ProductFeatureRelationSearchReq.java | 5 ++--- .../model/product/ProductFeatureRelationUpdateReq.java | 5 ++--- .../tyr/client/model/product/ProductFeatureRelationVO.java | 5 ++--- .../axzo/tyr/client/model/product/ProductSearchListReq.java | 5 ++--- .../axzo/tyr/client/model/product/ProductSearchPageReq.java | 5 ++--- .../cn/axzo/tyr/client/model/product/ProductUpdateReq.java | 5 ++--- .../java/cn/axzo/tyr/client/model/product/ProductVO.java | 5 ++--- 8 files changed, 16 insertions(+), 24 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java index 6b95d557..3e9b72b0 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotBlank; @@ -16,9 +17,7 @@ import javax.validation.constraints.NotNull; * @since 2023/9/6 15:13 */ @Data -@Builder -@AllArgsConstructor -@NoArgsConstructor +@Accessors(chain = true) public class ProductAddReq { /** diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java index 5666260a..e9a0cb50 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; import javax.validation.constraints.NotNull; @@ -14,9 +15,7 @@ import javax.validation.constraints.NotNull; * @since 2023/9/6 15:48 */ @Data -@Builder -@AllArgsConstructor -@NoArgsConstructor +@Accessors(chain = true) public class ProductFeatureRelationSearchReq { /** diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationUpdateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationUpdateReq.java index d1e0b95e..3cdac030 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationUpdateReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationUpdateReq.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; import javax.validation.constraints.NotNull; import java.util.ArrayList; @@ -16,9 +17,7 @@ import java.util.List; * @since 2023/9/7 18:53 */ @Data -@Builder -@AllArgsConstructor -@NoArgsConstructor +@Accessors(chain = true) public class ProductFeatureRelationUpdateReq { /** diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationVO.java index ea2d114e..4e6d76fe 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationVO.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; /** * 产品与权限点的关联关系响应模型 @@ -12,9 +13,7 @@ import lombok.NoArgsConstructor; * @since 2023/9/6 15:44 */ @Data -@Builder -@AllArgsConstructor -@NoArgsConstructor +@Accessors(chain = true) public class ProductFeatureRelationVO { /** diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java index 3c69a8af..f36b8f04 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java @@ -5,6 +5,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; /** * 产品分页搜索 @@ -13,9 +14,7 @@ import lombok.NoArgsConstructor; * @since 2023/9/6 14:58 */ @Data -@Builder -@AllArgsConstructor -@NoArgsConstructor +@Accessors(chain = true) public class ProductSearchListReq{ /** diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java index 3033dcba..2451a09b 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchPageReq.java @@ -7,6 +7,7 @@ import lombok.Builder; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; /** * 产品分页搜索 @@ -16,9 +17,7 @@ import lombok.NoArgsConstructor; */ @EqualsAndHashCode(callSuper = true) @Data -@Builder -@AllArgsConstructor -@NoArgsConstructor +@Accessors(chain = true) public class ProductSearchPageReq extends PageRequest { /** diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java index 83eac658..547d7ed1 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotBlank; @@ -16,9 +17,7 @@ import javax.validation.constraints.NotNull; * @since 2023/9/6 15:13 */ @Data -@Builder -@AllArgsConstructor -@NoArgsConstructor +@Accessors(chain = true) public class ProductUpdateReq { /** * 产品 ID diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java index f707cc6c..6b73064e 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; import java.util.Date; @@ -14,9 +15,7 @@ import java.util.Date; * @since 2023/9/6 14:51 */ @Data -@Builder -@AllArgsConstructor -@NoArgsConstructor +@Accessors(chain = true) public class ProductVO { /** From d981789b3d432b806f7f6aef911e895bf61068d8 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Fri, 8 Sep 2023 13:48:09 +0800 Subject: [PATCH 025/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BF=9D=E5=AD=98=20=E5=88=A0=E9=99=A4=20?= =?UTF-8?q?=E5=8F=98=E6=9B=B4=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constants/PermissionConstant.java | 4 ++ .../repository/mapper/SaasFeatureMapper.java | 2 +- .../service/impl/SaasFeatureDaoImpl.java | 7 ++- .../impl/PermissionPointServiceImpl.java | 55 +++++++++++++++--- .../permission/PermissionPointTest.java | 58 +++++++++++++++++++ 5 files changed, 116 insertions(+), 10 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/common/constants/PermissionConstant.java b/tyr-server/src/main/java/cn/axzo/tyr/server/common/constants/PermissionConstant.java index 73e0015b..92d20186 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/common/constants/PermissionConstant.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/common/constants/PermissionConstant.java @@ -14,4 +14,8 @@ public class PermissionConstant { /** 无父级 **/ public static final String FEATURE_NO_PARENT = "0"; + /** 顶级path **/ + public static final String FEATURE_TOP_PATH = "/0/"; + /** 权限点business_no前缀 **/ + public static final String FEATURE_BIZ_NO_PREFIX = "feature"; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasFeatureMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasFeatureMapper.java index 5a647c8b..c5f38ccb 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasFeatureMapper.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasFeatureMapper.java @@ -15,7 +15,7 @@ import org.apache.ibatis.annotations.Update; public interface SaasFeatureMapper extends BaseMapper { @Update("UPDATE saas_feature " + - "SET path = REPLACE(path,#{pathPrefix}, #{newPathPrefix}) , update_by = #{updater}" + + "SET path = REPLACE(path,#{pathPrefix}, #{newPathPrefix}) , update_by = #{updater} " + "WHERE path LIKE CONCAT(#{pathPrefix},'%') ") void updateChildrenPath(Long updater, String pathPrefix, String newPathPrefix); } \ No newline at end of file diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java index 778330e5..c317d0e7 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java @@ -3,7 +3,10 @@ package cn.axzo.tyr.server.repository.service.impl; import cn.axzo.tyr.server.repository.entity.SaasFeature; import cn.axzo.tyr.server.repository.mapper.SaasFeatureMapper; import cn.axzo.tyr.server.repository.service.SaasFeatureDao; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @@ -31,7 +34,7 @@ public class SaasFeatureDaoImpl extends ServiceImpl().set(SaasFeature::getSort, sort).eq(SaasFeature::getId, permissionId)); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index e4a3f106..29c3d5ed 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -28,8 +28,10 @@ import java.util.Optional; import java.util.function.Function; import java.util.stream.Collectors; +import static cn.axzo.tyr.server.common.constants.PermissionConstant.FEATURE_BIZ_NO_PREFIX; import static cn.axzo.tyr.server.common.constants.PermissionConstant.FEATURE_NO_PARENT; import static cn.axzo.tyr.server.common.constants.PermissionConstant.FEATURE_PATH_DELIMITER; +import static cn.axzo.tyr.server.common.constants.PermissionConstant.FEATURE_TOP_PATH; /** * 权限点服务实现 @@ -173,12 +175,50 @@ public class PermissionPointServiceImpl implements PermissionPointService { @Override public void save(PermissionPointDTO dto) { - SaasFeature saasFeature = BeanMapper.copyBean(dto, SaasFeature.class); if (dto.getId() == null) { - this.saasFeatureDao.save(saasFeature); + doInsert(dto); } else { - this.saasFeatureDao.updateById(saasFeature); + doUpdate(dto); } + + } + + private void doUpdate(PermissionPointDTO dto) { + SaasFeature feature = getAndCheck(dto.getId()); + SaasFeature saasFeature = BeanMapper.copyBean(dto, SaasFeature.class); + //清理不可更新的数据 + saasFeature.setFeatureCode(null); + saasFeature.setParentId(null); + saasFeature.setPath(null); + saasFeature.setSort(null); + saasFeature.setTerminal(null); + this.saasFeatureDao.updateById(saasFeature); + } + + private SaasFeature getAndCheck(Long permissionId) { + SaasFeature feature = this.saasFeatureDao.getById(permissionId); + if (feature == null) { + log.error("未查询到权限点:{}", permissionId); + throw new BizException(BaseCode.BAD_REQUEST, "未查询到权限点"); + } + return feature; + } + + private void doInsert(PermissionPointDTO dto) { + SaasFeature saasFeature = BeanMapper.copyBean(dto, SaasFeature.class); + SaasFeature parent; + if (dto.getParentId() == null || dto.getParentId() < 1) { + parent = new SaasFeature(); + parent.setPath(FEATURE_TOP_PATH); + parent.setBusinessNo("0"); + } else { + parent = this.saasFeatureDao.getById(dto.getParentId()); + } + //生成biz_no + saasFeature.setBusinessNo(FEATURE_BIZ_NO_PREFIX + System.currentTimeMillis()); + saasFeature.setParentBusinessNo(parent.getBusinessNo()); + saasFeature.setPath(parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER); + this.saasFeatureDao.save(saasFeature); } @Transactional(rollbackFor = Throwable.class) @@ -197,7 +237,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { return; } SaasFeature parent = this.saasFeatureDao.getById(newParentId); - if (StrUtil.equals(feature.getTerminal(), parent.getTerminal())) { + if (!StrUtil.equals(feature.getTerminal(), parent.getTerminal())) { throw new BizException(BaseCode.BAD_REQUEST, "不允许跨工作台"); } if (parent.getPath().contains(String.valueOf(permissionId))) { @@ -205,8 +245,9 @@ public class PermissionPointServiceImpl implements PermissionPointService { } //当前节点 SaasFeature entity = new SaasFeature(); - entity.setParentId(feature.getId()); + entity.setId(feature.getId()); entity.setParentId(newParentId); + entity.setParentBusinessNo(parent.getBusinessNo()); entity.setPath(parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER); entity.setUpdateBy(updater); this.saasFeatureDao.updateById(entity); @@ -235,14 +276,14 @@ public class PermissionPointServiceImpl implements PermissionPointService { //已经是第一个 return; } - switchIndex = ++index; + switchIndex = index - 1; } else { //向下 if (index == sortedChildren.size() - 1) { //已经最后一个 return; } - switchIndex = --index; + switchIndex = index + 1; } //更新当前节点 this.saasFeatureDao.updateSort(permissionId, switchIndex); diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java index 79c8b405..a85c1b0b 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java @@ -60,4 +60,62 @@ public class PermissionPointTest { System.out.println(JSON.toJSONString(result)); } + @Test + public void testInsert() { + PermissionPointDTO permissionPoint = new PermissionPointDTO(); + permissionPoint.setFeatureName("测试合同权限点"); + permissionPoint.setFeatureCode("CMS_WEB_PROJ_0158"); + permissionPoint.setParentId(360L); + permissionPoint.setPath("/0/354/360/"); + permissionPoint.setSort(6); + permissionPoint.setTerminal("NT_CMS_WEB_PROJ"); + permissionPoint.setFeatureType(3); + permissionPoint.setAppName("tyr"); + permissionPoint.setFeatureUrl("/tyr/test/permission"); + permissionPoint.setNeedAuth(true); + permissionPoint.setNeedAuth(true); + controller.savePermissionPoint(permissionPoint); + } + + @Test + public void testUpdate() { + PermissionPointDTO permissionPoint = new PermissionPointDTO(); + permissionPoint.setId(3479L); + permissionPoint.setFeatureName("测试合同权限点"); + permissionPoint.setFeatureCode("CMS_WEB_PROJ_0159"); //不生效 + permissionPoint.setParentId(361L);//不生效 + permissionPoint.setPath("/0/354/361/");//不生效 + permissionPoint.setSort(9);//不生效 + permissionPoint.setTerminal("NT_CMS_WEB_PROJ-xx");//不生效 + permissionPoint.setFeatureType(3); + permissionPoint.setAppName("tyr"); + permissionPoint.setFeatureUrl("/tyr/test/permission"); + permissionPoint.setNeedAuth(true); + permissionPoint.setNeedAuth(true); + controller.savePermissionPoint(permissionPoint); + } + + @Test + public void testSort() { + //老数据可能会导致位置不对 + Long updater = 111L; + Long permissionId = 3478L; + Integer direction = 1; + controller.updateSort(updater, permissionId, direction); + } + + @Test + public void testChangeParent() { + Long updater = 111L; + Long permissionId = 360L; + Long newParentId = 354L; + controller.changeParent(updater, permissionId, newParentId); + } + + @Test + public void testDelete() { + Long permissionId = 3478L; + controller.deletePermissionPoint(permissionId); + } + } From 5194d7fbbf1a6c859483530d409d3d6ebd2b47a8 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Fri, 8 Sep 2023 16:01:36 +0800 Subject: [PATCH 026/186] =?UTF-8?q?=E5=AD=97=E5=85=B8=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/annotation/EnumValidator.java | 28 +++ .../common/enums/DictTypeFiledEnum.java | 57 ++++++ .../common/enums/DictWorkSpaceTypeEnum.java | 55 ++++++ .../tyr/client/common/util/package-info.java | 1 + .../common/validator/EnumValueValidator.java | 34 ++++ ...asicDictApi.java => SaasBasicDictApi.java} | 31 +-- .../model/dict/request/BasicDictQueryReq.java | 17 ++ .../tyr/client/model/dict/request/pom.xml | 181 ------------------ .../dict/response/BasicDictNodeResp.java | 16 ++ tyr-server/pom.xml | 6 + .../tyr/server/common/enums/ErrorCode.java | 27 --- .../tyr/server/common/enums/ResultCode.java | 88 --------- .../tyr/server/common/util/package-info.java | 1 - .../controller/SaasBasicDictController.java | 54 ++++++ .../server/repository/SaasBasicDictDao.java | 3 +- .../axzo/tyr/server/repository/UserDao.java | 55 ------ .../repository/entity/SaasBasicDict.java | 80 +++++++- .../server/repository/entity/user/User.java | 27 --- .../mapper/SaasBasicDictMapper.java | 1 + .../server/repository/mapper/UserMapper.java | 14 -- .../service/dto/request/user/NewUserDTO.java | 44 ----- .../dto/request/user/UpdateUserDTO.java | 47 ----- .../service/dto/request/user/UserQO.java | 26 --- .../service/dto/request/user/UserQO1.java | 26 --- .../service/dto/response/user/UserVO.java | 34 ---- .../impl/SaasBasicDictServiceImpl.java | 23 +++ 26 files changed, 380 insertions(+), 596 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/common/annotation/EnumValidator.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/DictTypeFiledEnum.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/DictWorkSpaceTypeEnum.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/common/util/package-info.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/common/validator/EnumValueValidator.java rename tyr-api/src/main/java/cn/axzo/tyr/client/feign/{BasicDictApi.java => SaasBasicDictApi.java} (64%) delete mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/pom.xml delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/common/enums/ErrorCode.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/common/enums/ResultCode.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/common/util/package-info.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/controller/SaasBasicDictController.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/UserDao.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/user/User.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/UserMapper.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/NewUserDTO.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UpdateUserDTO.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UserQO.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UserQO1.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/response/user/UserVO.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/common/annotation/EnumValidator.java b/tyr-api/src/main/java/cn/axzo/tyr/client/common/annotation/EnumValidator.java new file mode 100644 index 00000000..6ecac533 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/common/annotation/EnumValidator.java @@ -0,0 +1,28 @@ +package cn.axzo.tyr.client.common.annotation; + +import cn.axzo.tyr.client.common.validator.EnumValueValidator; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.*; + +/** + * @author: chenwenjian + * @date: 2023/8/29 18:31 + * @description: + * @modifiedBy: + * @version: 1.0 + */ +@Documented +@Constraint(validatedBy = EnumValueValidator.class) +@Target({ElementType.FIELD, ElementType.PARAMETER}) +@Retention(RetentionPolicy.RUNTIME) +public @interface EnumValidator { + String message() default "Value is not valid"; + + Class[] groups() default {}; + + Class[] payload() default {}; + + Class> enumClass(); +} \ No newline at end of file diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/DictTypeFiledEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/DictTypeFiledEnum.java new file mode 100644 index 00000000..b5d39079 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/DictTypeFiledEnum.java @@ -0,0 +1,57 @@ +package cn.axzo.tyr.client.common.enums; + +import java.util.Arrays; + +/** + * @author: chenwenjian + * @date: 2023/9/8 15:12 + * @description: 字典type字段枚举 + * @modifiedBy: + * @version: 1.0 + */ + +public enum DictTypeFiledEnum { + + /** + * 企业类型 + */ + OUTYPE("ou_type","企业类型"), + + /** + * 端 + */ + TERMINAL("terminal","端"), + + /** + * 工作台 + */ + WORKSPACE("workspace","工作台") + ; + + private final String value; + + private final String description; + + public String getValue() { + return value; + } + + public String getDescription() { + return description; + } + + DictTypeFiledEnum(String value, String description) { + this.value = value; + this.description = description; + } + + /** + * 通过value值获取枚举类型 + * + * @param value value值 + * @return + */ + public static DictTypeFiledEnum getByValue(String value) { + return Arrays.stream(values()).filter(l -> l.getValue().equals(value)).findFirst().orElse(null); + } +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/DictWorkSpaceTypeEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/DictWorkSpaceTypeEnum.java new file mode 100644 index 00000000..a5ed1bb1 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/DictWorkSpaceTypeEnum.java @@ -0,0 +1,55 @@ +package cn.axzo.tyr.client.common.enums; + +import java.util.Arrays; + +/** + * @author: chenwenjian + * @date: 2023/9/8 14:21 + * @description: 字典工作台类型枚举 + * @modifiedBy: + * @version: 1.0 + */ +public enum DictWorkSpaceTypeEnum { + + /** + * 企业工作台 + */ + ENT("ent", "企业工作台"), + + /** + * 项目部工作台 + */ + PROJ("proj", "项目部工作台"), + + /** + * OMS工作台 + */ + OMS("oms", "OMS工作台"); + + private final String value; + + private final String description; + + public String getValue() { + return value; + } + + public String getDescription() { + return description; + } + + DictWorkSpaceTypeEnum(String value, String description) { + this.value = value; + this.description = description; + } + + /** + * 通过value值获取枚举类型 + * + * @param value value值 + * @return + */ + public static DictWorkSpaceTypeEnum getByValue(String value) { + return Arrays.stream(values()).filter(l -> l.getValue().equals(value)).findFirst().orElse(null); + } +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/common/util/package-info.java b/tyr-api/src/main/java/cn/axzo/tyr/client/common/util/package-info.java new file mode 100644 index 00000000..28f2b2e6 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/common/util/package-info.java @@ -0,0 +1 @@ +package cn.axzo.tyr.client.common.util; \ No newline at end of file diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/common/validator/EnumValueValidator.java b/tyr-api/src/main/java/cn/axzo/tyr/client/common/validator/EnumValueValidator.java new file mode 100644 index 00000000..ce353098 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/common/validator/EnumValueValidator.java @@ -0,0 +1,34 @@ +package cn.axzo.tyr.client.common.validator; + + +import cn.axzo.tyr.client.common.annotation.EnumValidator; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +/** + * @author: chenwenjian + * @date: 2023/8/29 18:24 + * @description: + * @modifiedBy: + * @version: 1.0 + */ +public class EnumValueValidator implements ConstraintValidator> { + + @Override + public boolean isValid(Enum value, ConstraintValidatorContext context) { + if (value == null) { + return true; + } + Class> enumClass = value.getDeclaringClass(); + Enum[] enumValues = enumClass.getEnumConstants(); + for (Enum enumValue : enumValues) { + if (enumValue.name().equals(value.name())) { + // 找到匹配的枚举值 + return true; + } + } + // 未找到匹配的枚举值 + return false; + } +} \ No newline at end of file diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/BasicDictApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java similarity index 64% rename from tyr-api/src/main/java/cn/axzo/tyr/client/feign/BasicDictApi.java rename to tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java index aaca937f..5221d645 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/BasicDictApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java @@ -1,9 +1,11 @@ package cn.axzo.tyr.client.feign; import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.tyr.client.model.dict.request.*; +import cn.axzo.tyr.client.model.dict.request.BasicDictCreateReq; +import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; +import cn.axzo.tyr.client.model.dict.request.BasicDictUpdateReq; +import cn.axzo.tyr.client.model.dict.request.BasicDictUpdateStatusReq; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; -import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; @@ -19,31 +21,12 @@ import java.util.List; * @version: 1.0 */ @FeignClient(name = "tyr", url = "http://tyr:8080") -public interface BasicDictApi { +public interface SaasBasicDictApi { /** - * 通过workspace和type获取字典节点列表 + * 获取字典树所有节点 * - * @param req 包含workspace和type两个字段 - * @return - */ - @PostMapping("api/dict/get-by-type") - ApiResult> getDictByType(@RequestBody BasicDictNodeReq req); - - - /** - * 获取字典树(树形结构,无需自行组装) - * - * @param req 当不进行筛选时不传 - * @return - */ - @PostMapping("api/dict/get-tree") - ApiResult> getBasicDictTree(@RequestBody BasicDictQueryReq req); - - /** - * 获取字典树所有节点(列表结构,需自行组装成树) - * - * @param req + * @param req 根据自身需求传入参数 * @return */ @PostMapping("api/dict/node-list") diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java index 1ddc991e..2c431f2c 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java @@ -1,5 +1,8 @@ package cn.axzo.tyr.client.model.dict.request; +import cn.axzo.tyr.client.common.annotation.EnumValidator; +import cn.axzo.tyr.client.common.enums.DictTypeFiledEnum; +import cn.axzo.tyr.client.common.enums.DictWorkSpaceTypeEnum; import lombok.Data; /** @@ -12,6 +15,20 @@ import lombok.Data; @Data public class BasicDictQueryReq { + private Long parentId; + + /** + * workspace + */ + @EnumValidator(enumClass = DictWorkSpaceTypeEnum.class, message = "枚举类型错误") + private DictWorkSpaceTypeEnum workspaceType; + + /** + * type + */ + @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") + private DictTypeFiledEnum type; + /** * 字典名称 */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/pom.xml b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/pom.xml deleted file mode 100644 index ed26a79c..00000000 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/pom.xml +++ /dev/null @@ -1,181 +0,0 @@ - - 4.0.0 - - cn.axzo.yoke - yoke - ${revision} - ../pom.xml - - - yoke-server - jar - - yoke-server - - - 1.18.16 - 1.4.2.Final - 0.2.0 - - - - - - cn.axzo.framework - axzo-web-spring-boot-starter - - - cn.axzo.framework - axzo-auth-spring-boot-starter - - - cn.axzo.framework - axzo-logger-spring-boot-starter - - - cn.axzo.maokai - maokai-api - - - org.hibernate.validator - hibernate-validator - - - cn.axzo.mns - mns-http-api - - - cn.axzo.basics - basics-profiles-api - - - cn.axzo.apollo - apollo-workspace-api - - - cn.axzo.third - third-party-api - - - org.mapstruct - mapstruct - - - cn.axzo.thrones - thrones-client - - - cn.axzo.basics - basics-auth-api - - - cn.axzo.trade - trade-dingtalk - - - cn.axzo.trade - trade-data-security-spring-boot-starter - - - mysql - mysql-connector-java - - - cn.axzo.pokonyan - pokonyan - - - org.springframework.boot - spring-boot-devtools - - - io.github.openfeign - feign-httpclient - - - cn.axzo.outman - outman-http-api - - - cn.axzo.pudge - pudge-api - - - cn.axzo.msgcenter - msgcenter-spring-boot-starter - - - cn.axzo.pluto - pluto-api - - - cn.axzo.nanopart - black-list-api - 2.0.0-SNAPSHOT - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - - - - com.aliyun - alibaba-dingtalk-service-sdk - - - com.aliyun - dingtalk - 2.0.14 - - - - - yoke - - - src/main/java - - **/*.xml - - - - src/main/resources - - - - - org.springframework.boot - spring-boot-maven-plugin - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - 1.8 - 1.8 - - - org.projectlombok - lombok - ${org.projectlombok.version} - - - - org.projectlombok - lombok-mapstruct-binding - ${lombok-mapstruct-binding.version} - - - - org.mapstruct - mapstruct-processor - ${org.mapstruct.version} - - - - - - - diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictNodeResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictNodeResp.java index 2228a0e9..f4704a31 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictNodeResp.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictNodeResp.java @@ -36,6 +36,11 @@ public class BasicDictNodeResp { */ private String code; + /** + * 唯一code + */ + private String uniqueCode; + /** * 状态 */ @@ -45,4 +50,15 @@ public class BasicDictNodeResp { * 路径 */ private String path; + + /** + * 层级 + */ + private Integer level; + + /** + * 扩展字段 + */ + private String ext; + } diff --git a/tyr-server/pom.xml b/tyr-server/pom.xml index 27a641c1..213bd48e 100644 --- a/tyr-server/pom.xml +++ b/tyr-server/pom.xml @@ -50,5 +50,11 @@ cn.axzo.framework axzo-logger-spring-boot-starter + + + cn.axzo.tyr + tyr-api + 1.0.0-SNAPSHOT + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/common/enums/ErrorCode.java b/tyr-server/src/main/java/cn/axzo/tyr/server/common/enums/ErrorCode.java deleted file mode 100644 index 7fa875f9..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/common/enums/ErrorCode.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.axzo.tyr.server.common.enums; - -import cn.axzo.framework.domain.web.code.IProjectRespCode; -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * @Author: liyong.tian - * @Date: 2022/9/5 - * @Description: 响应码规范:一共8位,取值范围0~9,3位项目编号(首位不能为0)+2位模块编号+3位自定义编号 - */ -@Getter -@AllArgsConstructor -public enum ErrorCode implements IProjectRespCode { - - USER_NOT_EXISTS("01001", "用户不存在,id=%s"), - USER_PHONE_EMAIL_IS_NULL("01002", "电话和邮箱不能都为空"); - - private String code; - private String message; - - @Override - public String getProjectCode() { - // 根据不同项目进行项目编码调整,可联系框架组获取项目编号(首位不能为0) - return "100"; - } -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/common/enums/ResultCode.java b/tyr-server/src/main/java/cn/axzo/tyr/server/common/enums/ResultCode.java deleted file mode 100644 index e96ef1be..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/common/enums/ResultCode.java +++ /dev/null @@ -1,88 +0,0 @@ -package cn.axzo.tyr.server.common.enums; - -/** - * @Author: liyong.tian - * @Date: 2022/9/5 - * @Description: - */ -public enum ResultCode { - /** - * 成功 [GET] - */ - SUCCESS(200), - /** - * [POST/PUT/PATCH] 用户新建或修改数据成功 - */ - CREATED(201), - /** - * [*] 标识一个请求已经进入后台排队 (异步任务) - */ - ACCEPTED(202), - /** - * [DELETE]: 用户删除数据成功 - */ - NO_CONTENT(204), - /** - * [POST/PUT/PATCH] 用户发出的请求有错误, 服务器没有进行新建或修改数据的操作, 该操作是幂等的. - */ - FAIL(400), - /** - * [*] 标识没有权限 (令牌、用户名、密码错误) - */ - UNAUTHORIZED(401), - /** - * [*] 标识用户得到授权(与401错误相对), 但是访问是被禁止的 - */ - FORBIDDEN(403), - /** - * [*] 用户发出的请求针对的是不存在的记录, 服务器没有进行操作 - */ - NOT_FOUND(404), - /** - * [GET] 用户请求的格式不可得 (比如用户请求JSON格式, 但是只有XML格式) - */ - NOT_ACCEPTABLE(406), - /** - * [GET] 用户请求的资源被永久删除, 且不会再得到 - */ - GONE(410), - /** - * [POST/PUT/PATCH] 当创建一个对象时, 发生一个验证错误646 - */ - UNPROCESSABLE_ENTITY(422), - /** - * 服务器内部错误 - */ - INTERNAL_SERVER_ERROR(9999), - /** - * 通用业务异常 - */ - SERVICE_EXCEPTION_ERROR(9998), - - /** - * ####业务的响应码#### - * 按业务依次划分 : - * 一共6位, 第6位是业务代码 第1-5位响应码, 按业务不同码不同 - * #100000 全局级别 - */ - - /** - * 100001 当前用户被强制下线 - */ - CUSTOM_100001(100001), - /** - * 确认弹窗响应码 - */ - CUSTOM_100002(100002); - - public int code; - - ResultCode(int code) { - this.code = code; - } - - public int getCode() { - return code; - } - -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/common/util/package-info.java b/tyr-server/src/main/java/cn/axzo/tyr/server/common/util/package-info.java deleted file mode 100644 index 1cd2c6fa..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/common/util/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.axzo.tyr.server.common.util; \ No newline at end of file diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/SaasBasicDictController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/SaasBasicDictController.java new file mode 100644 index 00000000..da04cad4 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/SaasBasicDictController.java @@ -0,0 +1,54 @@ +package cn.axzo.tyr.server.controller; + +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.feign.SaasBasicDictApi; +import cn.axzo.tyr.client.model.dict.request.*; +import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; +import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; +import cn.axzo.tyr.server.service.SaasBasicDictService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author: chenwenjian + * @date: 2023/9/8 14:32 + * @description: + * @modifiedBy: + * @version: 1.0 + */ +@Slf4j +@RestController +@RequiredArgsConstructor +public class SaasBasicDictController implements SaasBasicDictApi { + + private final SaasBasicDictService saasBasicDictService; + + + @Override + public ApiResult> getBasicDictTree(BasicDictQueryReq req) { + return null; + } + + @Override + public ApiResult> getBasicDictNodeList(BasicDictQueryReq req) { + return null; + } + + @Override + public ApiResult create(BasicDictCreateReq req) { + return null; + } + + @Override + public ApiResult update(BasicDictUpdateReq req) { + return null; + } + + @Override + public ApiResult updateStatus(BasicDictUpdateStatusReq req) { + return null; + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java index bd32942f..f28f79a5 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java @@ -13,5 +13,6 @@ import org.springframework.stereotype.Service; * @version: 1.0 */ @Service -public class SaasBasicDictDao extends ServiceImpl { +public class SaasBasicDictDao extends ServiceImpl { + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/UserDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/UserDao.java deleted file mode 100644 index b0909277..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/UserDao.java +++ /dev/null @@ -1,55 +0,0 @@ -package cn.axzo.tyr.server.repository; - -import cn.axzo.framework.domain.page.PageQO; -import cn.axzo.tyr.server.repository.mapper.UserMapper; -import cn.axzo.tyr.server.service.dto.request.user.UserQO; -import cn.axzo.tyr.server.service.dto.request.user.UserQO1; -import cn.axzo.tyr.server.repository.entity.user.User; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.RequiredArgsConstructor; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Repository; - -/** - * @Author: liyong.tian - * @Date: 2022/9/5 - * @Description: - */ -@Repository -@RequiredArgsConstructor -public class UserDao extends ServiceImpl { - - private final UserMapper userMapper; - - public User findById(Long id) { - return userMapper.selectById(id); - } - - public void delete(Long id) { - userMapper.deleteById(id); - } - - public IPage queryByPage(UserQO userQO) { - return userMapper.selectPage(userQO.toPage(), - Wrappers.lambdaQuery(User.class) - .eq(userQO.getId() != null, User::getId, userQO.getId()) - .like(StringUtils.isNotBlank(userQO.getName()), User::getName, userQO.getName()) - .like(StringUtils.isNotBlank(userQO.getPhone()), User::getPhone, userQO.getPhone()) - .like(StringUtils.isNotBlank(userQO.getEmail()), User::getEmail, userQO.getEmail()) - .orderByDesc(User::getCreateAt) - ); - } - - public IPage find(UserQO1 userQO, PageQO page) { - return userMapper.selectPage(page.toPage(), - Wrappers.lambdaQuery(User.class) - .eq(userQO.getId() != null, User::getId, userQO.getId()) - .like(StringUtils.isNotBlank(userQO.getName()), User::getName, userQO.getName()) - .like(StringUtils.isNotBlank(userQO.getPhone()), User::getPhone, userQO.getPhone()) - .like(StringUtils.isNotBlank(userQO.getEmail()), User::getEmail, userQO.getEmail()) - .orderByDesc(User::getCreateAt) - ); - } -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java index b7f49644..53b7665d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java @@ -1,19 +1,97 @@ package cn.axzo.tyr.server.repository.entity; import cn.axzo.framework.data.mybatisplus.model.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; import java.io.Serializable; +import java.util.Map; /** * @author: chenwenjian * @date: 2023/9/7 17:39 - * @description: + * @description: 字典实体类 * @modifiedBy: * @version: 1.0 */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@TableName("saas_basic_dict") public class SaasBasicDict extends BaseEntity implements Serializable { private static final long serialVersionUID = 100L; + /** + * 父节点id + */ + @TableField(value = "parent_id") + private Long parentId; + + /** + * 工作台类型,"ent", "proj", "oms" + */ + @TableField(value = "workspace_type") + private String workspaceType; + + /** + * 类型,"ouType", "terminal" + */ + @TableField(value = "type") + private String type; + + /** + * 名称 + */ + @TableField(value = "name") + private String name; + + /** + * code + */ + @TableField(value = "code") + private String code; + + /** + * 唯一code + */ + @TableField(value = "unique_code") + private String uniqueCode; + + /** + * 状态,0禁用,1启用 + */ + @TableField(value = "status") + private Integer status; + + /** + * 排序 + */ + @TableField(value = "sort") + private Integer sort; + + /** + * 层级 + */ + @TableField(value = "level") + private Integer level; + + /** + * 路径 + */ + @TableField(value = "path") + private String path; + + /** + * 扩展信息 + */ + @TableField(value = "ex", typeHandler = JacksonTypeHandler.class) + private Map ext; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/user/User.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/user/User.java deleted file mode 100644 index 3ceee26d..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/user/User.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.axzo.tyr.server.repository.entity.user; - -import cn.axzo.framework.data.mybatisplus.model.BaseEntity; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; - -/** - * @Author: liyong.tian - * @Date: 2022/9/5 - * @Description: - */ -@Data -@TableName("b_user") -public class User extends BaseEntity { - - private String name; - - private Integer sex; - - private Integer age; - - private String phone; - - private String email; - - private String address; -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasBasicDictMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasBasicDictMapper.java index 82260d7c..bae7c405 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasBasicDictMapper.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasBasicDictMapper.java @@ -13,4 +13,5 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface SaasBasicDictMapper extends BaseMapper { + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/UserMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/UserMapper.java deleted file mode 100644 index 0f0704f9..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/UserMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.axzo.tyr.server.repository.mapper; - -import cn.axzo.tyr.server.repository.entity.user.User; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - * @Author: liyong.tian - * @Date: 2022/9/5 - * @Description: - */ -@Mapper -public interface UserMapper extends BaseMapper { -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/NewUserDTO.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/NewUserDTO.java deleted file mode 100644 index 732aefe6..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/NewUserDTO.java +++ /dev/null @@ -1,44 +0,0 @@ -package cn.axzo.tyr.server.service.dto.request.user; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.apache.commons.lang3.StringUtils; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; - -/** - * @Author: liyong.tian - * @Date: 2022/9/2 - * @Description: - */ -@Data -public class NewUserDTO { - - @ApiModelProperty(value = "名称", position = 1) - @NotBlank(message = "名称不能为空") - private String name; - - @ApiModelProperty(value = "性别", position = 2) - @NotNull - private Integer sex; - - @ApiModelProperty(value = "年龄", position = 3) - private Integer age; - - @ApiModelProperty(value = "电话", position = 4) - private String phone; - - @ApiModelProperty(value = "邮箱", position = 5) - private String email; - - @ApiModelProperty(value = "地址", position = 6) - private String address; - - public void valid() { - // 电话和邮箱不能都为空 - if (StringUtils.isEmpty(phone) && StringUtils.isEmpty(email)) { - throw new RuntimeException("电话和邮箱不能都为空"); - } - } -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UpdateUserDTO.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UpdateUserDTO.java deleted file mode 100644 index bec543a7..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UpdateUserDTO.java +++ /dev/null @@ -1,47 +0,0 @@ -package cn.axzo.tyr.server.service.dto.request.user; - -import cn.axzo.framework.domain.web.ApiException; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import org.apache.commons.lang3.StringUtils; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; - -import static cn.axzo.tyr.server.common.enums.ErrorCode.USER_PHONE_EMAIL_IS_NULL; - -/** - * @Author: liyong.tian - * @Date: 2022/9/5 - * @Description: - */ -@Data -public class UpdateUserDTO { - - @ApiModelProperty(value = "名称", position = 1) - @NotBlank(message = "名称不能为空") - private String name; - - @ApiModelProperty(value = "性别", position = 2) - @NotNull - private Integer sex; - - @ApiModelProperty(value = "年龄", position = 3) - private Integer age; - - @ApiModelProperty(value = "电话", position = 4) - private String phone; - - @ApiModelProperty(value = "邮箱", position = 5) - private String email; - - @ApiModelProperty(value = "地址", position = 6) - private String address; - - public void valid() { - // 电话和邮箱不能都为空 - if (StringUtils.isEmpty(phone) && StringUtils.isEmpty(email)) { - throw new ApiException(USER_PHONE_EMAIL_IS_NULL); - } - } -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UserQO.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UserQO.java deleted file mode 100644 index 090a549b..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UserQO.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.axzo.tyr.server.service.dto.request.user; - -import cn.axzo.framework.domain.page.PageQO; -import io.swagger.annotations.ApiParam; -import lombok.Data; - -/** - * @Author: liyong.tian - * @Date: 2022/9/5 - * @Description: - */ -@Data -public class UserQO extends PageQO { - - @ApiParam("主键") - private Long id; - - @ApiParam("姓名") - private String name; - - @ApiParam("手机") - private String phone; - - @ApiParam("邮箱") - private String email; -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UserQO1.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UserQO1.java deleted file mode 100644 index 09c4dac5..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/request/user/UserQO1.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.axzo.tyr.server.service.dto.request.user; - -import cn.axzo.framework.domain.page.PageQO; -import io.swagger.annotations.ApiParam; -import lombok.Data; - -/** - * @Author: liyong.tian - * @Date: 2022/9/5 - * @Description: - */ -@Data -public class UserQO1 { - - @ApiParam("主键") - private Long id; - - @ApiParam("姓名") - private String name; - - @ApiParam("手机") - private String phone; - - @ApiParam("邮箱") - private String email; -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/response/user/UserVO.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/response/user/UserVO.java deleted file mode 100644 index 8317e4cd..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/dto/response/user/UserVO.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.axzo.tyr.server.service.dto.response.user; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * @Author: liyong.tian - * @Date: 2022/9/2 - * @Description: - */ -@Data -public class UserVO { - - @ApiModelProperty(value = "id", position = 1) - private Long id; - - @ApiModelProperty(value = "名称", position = 2) - private String name; - - @ApiModelProperty(value = "性别", position = 3) - private Integer sex; - - @ApiModelProperty(value = "年龄", position = 4) - private Integer age; - - @ApiModelProperty(value = "电话", position = 5) - private String phone; - - @ApiModelProperty(value = "邮箱", position = 6) - private String email; - - @ApiModelProperty(value = "地址", position = 7) - private String address; -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java new file mode 100644 index 00000000..21592854 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -0,0 +1,23 @@ +package cn.axzo.tyr.server.service.impl; + +import cn.axzo.tyr.server.repository.SaasBasicDictDao; +import cn.axzo.tyr.server.service.SaasBasicDictService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @author: chenwenjian + * @date: 2023/9/8 15:40 + * @description: + * @modifiedBy: + * @version: 1.0 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class SaasBasicDictServiceImpl implements SaasBasicDictService { + + private final SaasBasicDictDao saasBasicDictDao; + +} From 8f80147d18c7289adc552081859a1a67c4ce7bd5 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Fri, 8 Sep 2023 16:02:30 +0800 Subject: [PATCH 027/186] =?UTF-8?q?=E5=AD=97=E5=85=B8=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/controller/SaasBasicDictController.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/SaasBasicDictController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/SaasBasicDictController.java index da04cad4..6cd3f154 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/SaasBasicDictController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/SaasBasicDictController.java @@ -2,9 +2,11 @@ package cn.axzo.tyr.server.controller; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.SaasBasicDictApi; -import cn.axzo.tyr.client.model.dict.request.*; +import cn.axzo.tyr.client.model.dict.request.BasicDictCreateReq; +import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; +import cn.axzo.tyr.client.model.dict.request.BasicDictUpdateReq; +import cn.axzo.tyr.client.model.dict.request.BasicDictUpdateStatusReq; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; -import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; import cn.axzo.tyr.server.service.SaasBasicDictService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -26,12 +28,6 @@ public class SaasBasicDictController implements SaasBasicDictApi { private final SaasBasicDictService saasBasicDictService; - - @Override - public ApiResult> getBasicDictTree(BasicDictQueryReq req) { - return null; - } - @Override public ApiResult> getBasicDictNodeList(BasicDictQueryReq req) { return null; From 35683b2f996e8d8906a29fcb8e1a92ca0fa90ade Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Fri, 8 Sep 2023 16:06:10 +0800 Subject: [PATCH 028/186] ouTypeId -> ouTypeCode workspaceTypeId -> workspaceTypeCode --- .../cn/axzo/tyr/client/feign/SaasRoleApi.java | 6 ---- .../model/req/QuerySaasRoleGroupReq.java | 8 ++--- .../client/model/req/QuerySaasRoleReq.java | 36 +++++++++++++------ .../tyr/client/model/vo/SaasRoleGroupVO.java | 8 ++--- .../axzo/tyr/client/model/vo/SaasRoleVO.java | 5 +++ .../repository/entity/SaasRoleGroup.java | 12 +++---- 6 files changed, 45 insertions(+), 30 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java index cf62df29..d0035354 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java @@ -35,10 +35,4 @@ public interface SaasRoleApi { @PostMapping("query") ApiListResult query(@RequestBody QuerySaasRoleReq req); - /** - * 删除 - */ - @PostMapping("delete") - ApiResult delete(@RequestParam(required = true) Long id); - } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java index 78dee32d..22b56ae0 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java @@ -26,13 +26,13 @@ public class QuerySaasRoleGroupReq { private Long ouId; /** - * 工作台类型字典id + * 工作台类型字典code */ - private List workspaceTypeIds; + private List workspaceTypeCode; /** - * 单位类型字典id + * 单位类型字典code */ - private List ouTypeIds; + private List ouTypeCode; } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java index 63c402d4..08527089 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java @@ -1,5 +1,6 @@ package cn.axzo.tyr.client.model.req; +import cn.axzo.tyr.client.model.enums.IdentityType; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -13,7 +14,10 @@ import java.util.List; @NoArgsConstructor public class QuerySaasRoleReq { - private List id; + /** + * 角色id + */ + private List ids; /** * 角色名称 @@ -21,28 +25,40 @@ public class QuerySaasRoleReq { private String name; /** - * 角色类型:common 普通角色 admin管理员 + * 角色类型:common 自定义角色 admin管理员 init标准角色 */ private String roleType; + /** + * 工作台类型 + */ + private Integer workspaceTypeCode; + + /** + * 工作台类型id + */ + + /** + * 身份Id + */ + private Long identityId; + + /** + * 身份类型 1:工人 2:从业人员 3:班组长 4:运营人员 5:政务人员 + */ + private IdentityType identityType; + /** * 创建者 */ private Long createBy; + /** * 更新者 */ private Long updateBy; - /** - * 工作台Id - */ - private Long workspaceId; - /** - * 角色owner单位Id 实际角色和用户的所属关系 具体查询relation的ouId - */ - private Long ownerOuId; /** * 分组id diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java index 873610e8..0defc8e1 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java @@ -11,14 +11,14 @@ public class SaasRoleGroupVO { private Long id; /** - * 工作台类型字典id + * 工作台类型字典code */ - private Long workspaceTypeId; + private Long workspaceTypeCode; /** - * 单位类型字典id + * 单位类型字典code */ - private List ouTypeId; + private List ouTypeCode; /** * 所属工作台id diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java index e73366d5..12d1757f 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java @@ -44,6 +44,11 @@ public class SaasRoleVO { */ private List featureIds; + /** + * 是否删除 + */ + private Long isDelete; + private Date createAt; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java index bdb44d51..3f9760fd 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java @@ -24,16 +24,16 @@ public class SaasRoleGroup extends BaseEntity implements Serializ private static final long serialVersionUID = 972205950455439772L; /** - * 工作台类型字典id + * 工作台类型字典code */ - @TableField("workspace_type_id") - private Long workspaceTypeId; + @TableField("workspace_type_code") + private Long workspaceTypeCode; /** - * 单位类型字典id + * 单位类型字典code */ - @TableField("ou_type_id") - private Long ouTypeId; + @TableField("ou_type_code") + private Long ouTypeCode; /** * 名称 From 750bbce2be903da6738302e6b872750694c20828 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Fri, 8 Sep 2023 16:29:13 +0800 Subject: [PATCH 029/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E8=BF=94=E5=9B=9E=E5=AF=B9=E8=B1=A1=E5=8F=98?= =?UTF-8?q?=E6=9B=B4=EF=BC=9B=E8=BF=BD=E5=8A=A0=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/feign/PermissionPointApi.java | 3 ++- .../model/permission/PermissionPointDTO.java | 6 +++++ .../permission/PermissionPointController.java | 3 ++- .../service/PermissionPointService.java | 3 ++- .../impl/PermissionPointServiceImpl.java | 25 +++++++++++-------- .../permission/PermissionPointTest.java | 3 ++- 6 files changed, 29 insertions(+), 14 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java index 537a00c3..cffb233d 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java @@ -4,6 +4,7 @@ import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.permission.PermissionPointDTO; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; +import cn.axzo.tyr.client.model.permission.PermissionPointVO; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -29,7 +30,7 @@ public interface PermissionPointApi { /** 根据权限点ID查询详情 **/ @GetMapping(value = "/api/v1/permissionPoint/getDetail/{permissionId}") - ApiResult getDetail(@PathVariable Long permissionId); + ApiResult getDetail(@PathVariable Long permissionId); /** 根据权限点ID批量查询节点信息 **/ @PostMapping(value = "/api/v1/permissionPoint/listTreeNodesByIds") diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java index a36bace0..2d2071c5 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java @@ -2,6 +2,8 @@ package cn.axzo.tyr.client.model.permission; import lombok.Data; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import java.time.LocalDateTime; import java.util.List; @@ -23,11 +25,13 @@ public class PermissionPointDTO { /** * 权限点名称 */ + @NotBlank(message = "权限点名称不能为空") private String featureName; /** * 元素code */ + @NotBlank(message = "权限点元素code不能为空") private String featureCode; /** @@ -80,11 +84,13 @@ public class PermissionPointDTO { /** * 菜单适用工作台 */ + @NotBlank(message = "所属工作台不能为空") private String terminal; /** * 元素类别 0.模块 1.菜单 2页面 3按钮 */ + @NotNull(message = "元素类别不能为空") private Integer featureType; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java index 448e6aee..4c622c62 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java @@ -5,6 +5,7 @@ import cn.axzo.tyr.client.feign.PermissionPointApi; import cn.axzo.tyr.client.model.permission.PermissionPointDTO; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; +import cn.axzo.tyr.client.model.permission.PermissionPointVO; import cn.axzo.tyr.server.service.PermissionPointService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -35,7 +36,7 @@ public class PermissionPointController implements PermissionPointApi { } @Override - public ApiResult getDetail(Long permissionId) { + public ApiResult getDetail(Long permissionId) { return ApiResult.ok(permissionPointService.getDetail(permissionId)); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java index 39b5e42f..68bea9fb 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java @@ -3,6 +3,7 @@ package cn.axzo.tyr.server.service; import cn.axzo.tyr.client.model.permission.PermissionPointDTO; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; +import cn.axzo.tyr.client.model.permission.PermissionPointVO; import java.util.List; @@ -28,7 +29,7 @@ public interface PermissionPointService { /** * 根据权限点ID查询详情 * **/ - PermissionPointDTO getDetail(Long permissionId); + PermissionPointVO getDetail(Long permissionId); /** 保存权限点 **/ void save(PermissionPointDTO dto); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 29c3d5ed..ac6bc1b4 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -8,6 +8,7 @@ import cn.axzo.tyr.client.model.enums.FeatureType; import cn.axzo.tyr.client.model.permission.PermissionPointDTO; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; +import cn.axzo.tyr.client.model.permission.PermissionPointVO; import cn.axzo.tyr.server.repository.entity.SaasFeature; import cn.axzo.tyr.server.repository.service.SaasFeatureDao; import cn.axzo.tyr.server.service.PermissionPointService; @@ -138,25 +139,26 @@ public class PermissionPointServiceImpl implements PermissionPointService { } @Override - public PermissionPointDTO getDetail(Long permissionId) { + public PermissionPointVO getDetail(Long permissionId) { SaasFeature feature = this.saasFeatureDao.getById(permissionId); if (feature == null) { log.warn("no saasFeature found for:{}", permissionId); throw new BizException(BaseCode.BAD_REQUEST); } - PermissionPointDTO dto = BeanMapper.copyBean(feature, PermissionPointDTO.class); + PermissionPointVO vo = BeanMapper.copyBean(feature, PermissionPointVO.class); + vo.setFeatureTypeDesc(FeatureType.apply(vo.getFeatureType()).getDesc()); //补充上级信息 //TODO:@Zhan 依赖字典接口构建上级 List pathName = new ArrayList<>(); - if (dto.getParentId() == null || dto.getParentId() == 0) { + if (vo.getParentId() == null || vo.getParentId() == 0) { //没有parent直接挂在工作台下 - dto.setParentName(""); - dto.setPathName(pathName); - return dto; + vo.setParentName(""); + vo.setPathName(pathName); + return vo; } //所有父级处理 - List split = StrUtil.split(dto.getPath(), FEATURE_PATH_DELIMITER, true, true); + List split = StrUtil.split(vo.getPath(), FEATURE_PATH_DELIMITER, true, true); List ids = split.stream() .filter(x -> !StrUtil.equals(FEATURE_NO_PARENT, x)) .map(Long::valueOf) @@ -167,10 +169,13 @@ public class PermissionPointServiceImpl implements PermissionPointService { for (Long parentId : ids) { pathName.add(parentsMapping.get(parentId).getFeatureName()); } - dto.setPathName(pathName); - dto.setParentName(parentsMapping.get(dto.getParentId()).getFeatureName()); + vo.setPathName(pathName); + SaasFeature parent = parentsMapping.get(vo.getParentId()); + vo.setParentName(parent.getFeatureName()); + vo.setParentFeatureType(parent.getFeatureType()); + vo.setParentFeatureTypeDes(FeatureType.apply(parent.getFeatureType()).getDesc()); - return dto; + return vo; } @Override diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java index a85c1b0b..ace2ed4a 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java @@ -4,6 +4,7 @@ import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.permission.PermissionPointDTO; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; +import cn.axzo.tyr.client.model.permission.PermissionPointVO; import cn.axzo.tyr.server.controller.permission.PermissionPointController; import cn.axzo.tyr.server.repository.entity.SaasFeature; import cn.axzo.tyr.server.repository.service.SaasFeatureDao; @@ -49,7 +50,7 @@ public class PermissionPointTest { @Test public void testGetDetail() { Long permissionId = 360L; - ApiResult result = controller.getDetail(permissionId); + ApiResult result = controller.getDetail(permissionId); System.out.println(JSON.toJSONString(result)); } From 1c66c0b371c6df4ebaa589af020cda11c788fba7 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Fri, 8 Sep 2023 16:35:23 +0800 Subject: [PATCH 030/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=E8=A1=A5=E6=8F=90=E4=BA=A4=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/permission/PermissionPointVO.java | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointVO.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointVO.java new file mode 100644 index 00000000..bf97c6b3 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointVO.java @@ -0,0 +1,164 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 权限点展示对象 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/5 15:50 + */ +@Data +public class PermissionPointVO { + + /** + * 权限点id + */ + private Long id; + + /** + * 权限点名称 + */ + private String featureName; + + /** + * 元素code + */ + private String featureCode; + + /** + * 菜单icon + */ + private String icon; + + /** + * 父级权限点id + */ + private Long parentId; + + /** 父级权限点名称 **/ + private String parentName; + /** + * 父级元素类别 0.模块 1.菜单 2页面 3按钮 + * **/ + private Integer parentFeatureType; + + /** 父级元素类别描述 **/ + private String parentFeatureTypeDes; + + + /** + * 页面路由 + */ + private String linkUrl; + + /** + * 适用终端 1:PC 2:UNI 4:APP + */ + private Integer linkType; + + /** + * 扩展字段 - APP适配参数 + */ + private String linkExt; + + /** + * 小程序AppID + */ + private String microAppItemId; + + /** + * 权限点层级path + */ + private String path; + + /** 层级名称 顶级-……-当前节点 **/ + private List pathName; + + /** + * 排序 + */ + private Integer sort; + + /** + * 菜单适用工作台 + */ + private String terminal; + + /** + * 元素类别 0.模块 1.菜单 2页面 3按钮 + */ + private Integer featureType; + + /** + * 元素类别描述 + * **/ + private String featureTypeDesc; + + + /** + * 创建人id + */ + private Long createBy; + + /** + * 创建时间 + */ + private LocalDateTime createAt; + + /** + * 更新时间 + */ + private LocalDateTime updateAt; + + /** + * 修改人id + */ + private Long updateBy; + + + /** + * 适用单位类型-65535:所有 1:总包 2:建设单位 4:监理单位 8:劳务分包 16:专业分包 + */ + private Long fitOuTypeBit; + + /** + * 适用节点类型 65535:所有 1:部门 2:班组 4:小组 + */ + private Long fitOuNodeTypeBit; + + /** + * 所属应用 + */ + private String appName; + + /** + * 功能URL + */ + private String featureUrl; + + /** + * 是否认证 0:无需要认证 1:需要认证 + */ + private Boolean needCert; + + /** + * 是否授权 0:无需要授权 1:需要授权 + */ + private Boolean needAuth; + + /** + * 授权策略类型,允许为空 1-平台授权型 2-客户授权型 3-免授权型 + */ + private Integer delegatedType; + + /** 授权策略类型描述 **/ + private String delegatedTypeDesc; + +} From e09c9045ebf95ea96965e6f1bd297a3c90c5673b Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Fri, 8 Sep 2023 18:21:01 +0800 Subject: [PATCH 031/186] =?UTF-8?q?=E5=AD=97=E5=85=B8=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/feign/SaasBasicDictApi.java | 29 +++++++++++++++---- .../model/dict/request/BasicDictNodeReq.java | 16 ++++------ .../model/dict/request/BasicDictQueryReq.java | 4 +-- .../enum}/DictTypeFiledEnum.java | 2 +- .../enum}/DictWorkSpaceTypeEnum.java | 2 +- .../controller/SaasBasicDictController.java | 16 +++++++--- .../server/service/SaasBasicDictService.java | 7 +++++ .../impl/SaasBasicDictServiceImpl.java | 10 +++++++ 8 files changed, 63 insertions(+), 23 deletions(-) rename tyr-api/src/main/java/cn/axzo/tyr/client/{common/enums => model/enum}/DictTypeFiledEnum.java (96%) rename tyr-api/src/main/java/cn/axzo/tyr/client/{common/enums => model/enum}/DictWorkSpaceTypeEnum.java (96%) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java index 5221d645..2632f303 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java @@ -1,10 +1,9 @@ package cn.axzo.tyr.client.feign; import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.tyr.client.model.dict.request.BasicDictCreateReq; -import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; -import cn.axzo.tyr.client.model.dict.request.BasicDictUpdateReq; -import cn.axzo.tyr.client.model.dict.request.BasicDictUpdateStatusReq; +import cn.axzo.tyr.client.common.annotation.EnumValidator; +import cn.axzo.tyr.client.model.DictTypeFiledEnum; +import cn.axzo.tyr.client.model.dict.request.*; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.validation.annotation.Validated; @@ -30,7 +29,27 @@ public interface SaasBasicDictApi { * @return */ @PostMapping("api/dict/node-list") - ApiResult> getBasicDictNodeList(@RequestBody BasicDictQueryReq req); + ApiResult> getBasicDictNodeList(@RequestBody @Validated BasicDictQueryReq req); + + /** + * 获取字典树,需要单测树时才传type + * + * @param type + * @return + */ + @PostMapping("api/dict/node-tree") + ApiResult> getBasicDictNodeTree(@RequestBody + @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") + DictTypeFiledEnum type); + + /** + * 获取字典节点详情 + * + * @param req 传入type和code + * @return + */ + @PostMapping("api/dict/node") + ApiResult getBasicDictNode(@RequestBody @Validated BasicDictNodeReq req); /** * 添加字典 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java index 7c95901e..17aaa9fc 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java @@ -1,9 +1,9 @@ package cn.axzo.tyr.client.model.dict.request; +import cn.axzo.tyr.client.common.annotation.EnumValidator; +import cn.axzo.tyr.client.model.DictTypeFiledEnum; import lombok.Data; -import javax.validation.constraints.NotBlank; - /** * @author: chenwenjian * @date: 2023/9/6 15:46 @@ -14,16 +14,12 @@ import javax.validation.constraints.NotBlank; @Data public class BasicDictNodeReq { - /** - * 工作台类型 - */ - @NotBlank(message = "工作台类型不能为空") - private String workspaceType; - /** * 类型 */ - @NotBlank(message = "类型不能为空") - private String type; + @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") + private DictTypeFiledEnum type; + + private String code; } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java index 2c431f2c..5d559efd 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java @@ -1,8 +1,8 @@ package cn.axzo.tyr.client.model.dict.request; import cn.axzo.tyr.client.common.annotation.EnumValidator; -import cn.axzo.tyr.client.common.enums.DictTypeFiledEnum; -import cn.axzo.tyr.client.common.enums.DictWorkSpaceTypeEnum; +import cn.axzo.tyr.client.model.DictTypeFiledEnum; +import cn.axzo.tyr.client.model.DictWorkSpaceTypeEnum; import lombok.Data; /** diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/DictTypeFiledEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enum/DictTypeFiledEnum.java similarity index 96% rename from tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/DictTypeFiledEnum.java rename to tyr-api/src/main/java/cn/axzo/tyr/client/model/enum/DictTypeFiledEnum.java index b5d39079..67c29203 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/DictTypeFiledEnum.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enum/DictTypeFiledEnum.java @@ -1,4 +1,4 @@ -package cn.axzo.tyr.client.common.enums; +package cn.axzo.tyr.client.model; import java.util.Arrays; diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/DictWorkSpaceTypeEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enum/DictWorkSpaceTypeEnum.java similarity index 96% rename from tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/DictWorkSpaceTypeEnum.java rename to tyr-api/src/main/java/cn/axzo/tyr/client/model/enum/DictWorkSpaceTypeEnum.java index a5ed1bb1..53a28459 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/DictWorkSpaceTypeEnum.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enum/DictWorkSpaceTypeEnum.java @@ -1,4 +1,4 @@ -package cn.axzo.tyr.client.common.enums; +package cn.axzo.tyr.client.model; import java.util.Arrays; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/SaasBasicDictController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/SaasBasicDictController.java index 6cd3f154..5dad8997 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/SaasBasicDictController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/SaasBasicDictController.java @@ -2,10 +2,8 @@ package cn.axzo.tyr.server.controller; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.SaasBasicDictApi; -import cn.axzo.tyr.client.model.dict.request.BasicDictCreateReq; -import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; -import cn.axzo.tyr.client.model.dict.request.BasicDictUpdateReq; -import cn.axzo.tyr.client.model.dict.request.BasicDictUpdateStatusReq; +import cn.axzo.tyr.client.model.DictTypeFiledEnum; +import cn.axzo.tyr.client.model.dict.request.*; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.server.service.SaasBasicDictService; import lombok.RequiredArgsConstructor; @@ -30,6 +28,16 @@ public class SaasBasicDictController implements SaasBasicDictApi { @Override public ApiResult> getBasicDictNodeList(BasicDictQueryReq req) { + return saasBasicDictService.getBasicDictNodeList(req); + } + + @Override + public ApiResult> getBasicDictNodeTree(DictTypeFiledEnum type) { + return null; + } + + @Override + public ApiResult getBasicDictNode(BasicDictNodeReq req) { return null; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java index ae497d5b..6a3c633a 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java @@ -1,5 +1,11 @@ package cn.axzo.tyr.server.service; +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; +import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; + +import java.util.List; + /** * @author: chenwenjian * @date: 2023/9/7 17:54 @@ -8,4 +14,5 @@ package cn.axzo.tyr.server.service; * @version: 1.0 */ public interface SaasBasicDictService { + ApiResult> getBasicDictNodeList(BasicDictQueryReq req); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java index 21592854..8c8e10b0 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -1,11 +1,16 @@ package cn.axzo.tyr.server.service.impl; +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; +import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.server.repository.SaasBasicDictDao; import cn.axzo.tyr.server.service.SaasBasicDictService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.util.List; + /** * @author: chenwenjian * @date: 2023/9/8 15:40 @@ -20,4 +25,9 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { private final SaasBasicDictDao saasBasicDictDao; + @Override + public ApiResult> getBasicDictNodeList(BasicDictQueryReq req) { + + return null; + } } From 46282ebbe9338a55c2612478f26663ba4824a227 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Fri, 8 Sep 2023 18:23:10 +0800 Subject: [PATCH 032/186] =?UTF-8?q?=E5=AE=9E=E7=8E=B0RoleApi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/feign/SaasRoleApi.java | 7 +++ .../client/model/req/QuerySaasRoleReq.java | 8 +-- .../axzo/tyr/client/model/vo/SaasRoleVO.java | 3 +- .../controller/role/SaasRoleController.java | 57 +++++++++++++++++++ .../mapper/SaasRoleUserRelationMapper.java | 12 ++++ .../service/SaasRoleUserRelationDao.java | 20 +++++++ .../axzo/tyr/server/service/RoleService.java | 17 ++++++ .../server/service/impl/RoleServiceImpl.java | 41 +++++++++++++ 8 files changed, 157 insertions(+), 8 deletions(-) create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleUserRelationMapper.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java index d0035354..4e3f9754 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java @@ -5,6 +5,7 @@ import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; @@ -35,4 +36,10 @@ public interface SaasRoleApi { @PostMapping("query") ApiListResult query(@RequestBody QuerySaasRoleReq req); + /** + * 根据身份id 身份类型查询权限列表 + */ + @GetMapping("queryByIdentityIdType") + ApiListResult queryByIdentityIdType(@RequestParam(required = true) Long identityId,@RequestParam(required = true) Integer identityType); + } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java index 08527089..58878809 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java @@ -30,14 +30,10 @@ public class QuerySaasRoleReq { private String roleType; /** - * 工作台类型 + * 工作台类型code */ private Integer workspaceTypeCode; - /** - * 工作台类型id - */ - /** * 身份Id */ @@ -58,8 +54,6 @@ public class QuerySaasRoleReq { */ private Long updateBy; - - /** * 分组id */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java index 12d1757f..6b7576ac 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java @@ -24,6 +24,7 @@ public class SaasRoleVO { * 创建者 */ private Long createBy; + /** * 更新者 */ @@ -40,7 +41,7 @@ public class SaasRoleVO { private List permissionGroupIds; /** - * 权限id(用于创建权限集) + * 权限id */ private List featureIds; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java new file mode 100644 index 00000000..c734cfaa --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java @@ -0,0 +1,57 @@ +package cn.axzo.tyr.server.controller.role; + +import cn.axzo.framework.domain.web.result.ApiListResult; +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.feign.PermissionPointApi; +import cn.axzo.tyr.client.feign.SaasRoleApi; +import cn.axzo.tyr.client.model.enums.IdentityType; +import cn.axzo.tyr.client.model.permission.PermissionPointDTO; +import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; +import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; +import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; +import cn.axzo.tyr.client.model.vo.SaasRoleVO; +import cn.axzo.tyr.server.service.PermissionPointService; +import cn.axzo.tyr.server.service.RoleService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 权限 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/6 14:55 + */ +@Slf4j +@RestController +@RequiredArgsConstructor +public class SaasRoleController implements SaasRoleApi { + + @Autowired + RoleService roleService; + + @Override + public ApiResult saveOrUpdate(SaasRoleVO req) { + return null; + } + + @Override + public ApiResult getById(Long id) { + return null; + } + + @Override + public ApiListResult query(QuerySaasRoleReq req) { + return null; + } + + @Override + public ApiListResult queryByIdentityIdType(Long identityId, Integer identityType) { + // 根据身份id和身份类型查询 用户角色关联表 + return roleService.queryByIdentityIdType(identityId, identityType); + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleUserRelationMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleUserRelationMapper.java new file mode 100644 index 00000000..60dd9d61 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasRoleUserRelationMapper.java @@ -0,0 +1,12 @@ +package cn.axzo.tyr.server.repository.mapper; + +import cn.axzo.tyr.server.repository.entity.SaasRole; +import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SaasRoleUserRelationMapper extends BaseMapper { + +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java new file mode 100644 index 00000000..2b21746f --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java @@ -0,0 +1,20 @@ +package cn.axzo.tyr.server.repository.service; + +import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; +import cn.axzo.tyr.server.repository.mapper.SaasRoleUserRelationMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public class SaasRoleUserRelationDao extends ServiceImpl { + + public List queryByIdentityIdType(Long identityId, Integer identityType) { + return this.lambdaQuery() + .eq(SaasRoleUserRelation::getIdentityId,identityId) + .eq(SaasRoleUserRelation::getIdentityType,identityType) + .list(); + } +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java new file mode 100644 index 00000000..b1fcb39d --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java @@ -0,0 +1,17 @@ +package cn.axzo.tyr.server.service; + +import cn.axzo.framework.domain.web.result.ApiListResult; +import cn.axzo.tyr.client.model.vo.SaasRoleVO; + +/** + * 角色 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/6 15:51 + */ +public interface RoleService { + + + ApiListResult queryByIdentityIdType(Long identityId, Integer identityType); +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java new file mode 100644 index 00000000..ec47f2c0 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -0,0 +1,41 @@ +package cn.axzo.tyr.server.service.impl; + +import cn.axzo.framework.domain.web.result.ApiListResult; +import cn.axzo.tyr.client.model.vo.SaasRoleVO; +import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; +import cn.axzo.tyr.server.repository.service.SaasRoleDao; +import cn.axzo.tyr.server.repository.service.SaasRoleUserRelationDao; +import cn.axzo.tyr.server.service.RoleService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * 角色 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/6 15:51 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class RoleServiceImpl implements RoleService { + + @Autowired + SaasRoleUserRelationDao roleUserRelationDao; + @Autowired + SaasRoleDao saasRoleDao; + + @Override + public ApiListResult queryByIdentityIdType(Long identityId, Integer identityType) { + Set roleIds = roleUserRelationDao.queryByIdentityIdType(identityId, identityType).stream().map(SaasRoleUserRelation::getRoleId).collect(Collectors.toSet()); + // todo + return ApiListResult.ok(null); + } +} From 169662e0b02babbef69cf4566b5b02c15c66c3c6 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Fri, 8 Sep 2023 18:24:50 +0800 Subject: [PATCH 033/186] =?UTF-8?q?=E7=BB=93=E6=9E=84=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/model/{enum => enums}/DictTypeFiledEnum.java | 0 .../tyr/client/model/{enum => enums}/DictWorkSpaceTypeEnum.java | 0 .../server/controller/{ => dict}/SaasBasicDictController.java | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) rename tyr-api/src/main/java/cn/axzo/tyr/client/model/{enum => enums}/DictTypeFiledEnum.java (100%) rename tyr-api/src/main/java/cn/axzo/tyr/client/model/{enum => enums}/DictWorkSpaceTypeEnum.java (100%) rename tyr-server/src/main/java/cn/axzo/tyr/server/controller/{ => dict}/SaasBasicDictController.java (97%) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enum/DictTypeFiledEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DictTypeFiledEnum.java similarity index 100% rename from tyr-api/src/main/java/cn/axzo/tyr/client/model/enum/DictTypeFiledEnum.java rename to tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DictTypeFiledEnum.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enum/DictWorkSpaceTypeEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DictWorkSpaceTypeEnum.java similarity index 100% rename from tyr-api/src/main/java/cn/axzo/tyr/client/model/enum/DictWorkSpaceTypeEnum.java rename to tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DictWorkSpaceTypeEnum.java diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/SaasBasicDictController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java similarity index 97% rename from tyr-server/src/main/java/cn/axzo/tyr/server/controller/SaasBasicDictController.java rename to tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java index 5dad8997..34368385 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/SaasBasicDictController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java @@ -1,4 +1,4 @@ -package cn.axzo.tyr.server.controller; +package cn.axzo.tyr.server.controller.dict; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.SaasBasicDictApi; From 47e887c392ff73609db8c0b3ae3f0d2cec82d144 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Fri, 8 Sep 2023 18:35:54 +0800 Subject: [PATCH 034/186] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/server/controller/dict/SaasBasicDictController.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java index 34368385..b8403019 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java @@ -5,6 +5,7 @@ import cn.axzo.tyr.client.feign.SaasBasicDictApi; import cn.axzo.tyr.client.model.DictTypeFiledEnum; import cn.axzo.tyr.client.model.dict.request.*; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; +import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; import cn.axzo.tyr.server.service.SaasBasicDictService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -32,8 +33,8 @@ public class SaasBasicDictController implements SaasBasicDictApi { } @Override - public ApiResult> getBasicDictNodeTree(DictTypeFiledEnum type) { - return null; + public ApiResult getBasicDictNodeTree(DictTypeFiledEnum type) { + return saasBasicDictService.getBasicDictNodeTree(type); } @Override From ea29183145f202dc9c62167860d1941fe506af7f Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Fri, 8 Sep 2023 18:39:51 +0800 Subject: [PATCH 035/186] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java | 3 ++- .../cn/axzo/tyr/server/service/SaasBasicDictService.java | 4 ++++ .../tyr/server/service/impl/SaasBasicDictServiceImpl.java | 7 +++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java index 2632f303..df5dfbd4 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java @@ -5,6 +5,7 @@ import cn.axzo.tyr.client.common.annotation.EnumValidator; import cn.axzo.tyr.client.model.DictTypeFiledEnum; import cn.axzo.tyr.client.model.dict.request.*; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; +import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; @@ -38,7 +39,7 @@ public interface SaasBasicDictApi { * @return */ @PostMapping("api/dict/node-tree") - ApiResult> getBasicDictNodeTree(@RequestBody + ApiResult getBasicDictNodeTree(@RequestBody @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") DictTypeFiledEnum type); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java index 6a3c633a..c108655c 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java @@ -1,8 +1,10 @@ package cn.axzo.tyr.server.service; import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.DictTypeFiledEnum; import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; +import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; import java.util.List; @@ -15,4 +17,6 @@ import java.util.List; */ public interface SaasBasicDictService { ApiResult> getBasicDictNodeList(BasicDictQueryReq req); + + ApiResult getBasicDictNodeTree(DictTypeFiledEnum type); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java index 8c8e10b0..b0f12f91 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -1,8 +1,10 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.DictTypeFiledEnum; import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; +import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; import cn.axzo.tyr.server.repository.SaasBasicDictDao; import cn.axzo.tyr.server.service.SaasBasicDictService; import lombok.RequiredArgsConstructor; @@ -30,4 +32,9 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { return null; } + + @Override + public ApiResult getBasicDictNodeTree(DictTypeFiledEnum type) { + return null; + } } From c200db3c4b743714c68a0b300b3a755994a29df5 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Fri, 8 Sep 2023 18:44:20 +0800 Subject: [PATCH 036/186] =?UTF-8?q?update=20-=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E5=B7=A5=E7=A8=8B=E5=BC=95=E5=85=A5=E7=9A=84=20jar,=20?= =?UTF-8?q?=E5=90=8C=E6=97=B6=E4=BF=AE=E6=94=B9=20bootstrap.yml=20?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=86=85=E5=AE=B9,=20=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/feign/ProductApi.java | 9 ++- .../tyr/client/feign/SaasBasicDictApi.java | 6 +- .../client/model/product/ProductAddReq.java | 2 +- .../model/product/ProductUpdateReq.java | 2 +- .../tyr/client/model/product/ProductVO.java | 3 +- tyr-server/pom.xml | 8 +-- .../config/filter/HttpTraceLogFilter.java | 4 +- .../dict/SaasBasicDictController.java | 5 ++ .../controller/product/ProductController.java | 1 + .../repository/entity/SaasBasicDict.java | 4 +- .../server/repository/entity/SaasFeature.java | 6 +- .../repository/service/ProductModuleDao.java | 3 +- .../server/service/SaasBasicDictService.java | 4 ++ .../service/impl/ProductServiceImpl.java | 3 +- .../impl/SaasBasicDictServiceImpl.java | 5 ++ tyr-server/src/main/resources/bootstrap.yml | 57 ++++++++++++++++++- 16 files changed, 98 insertions(+), 24 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java index 1b293bd4..5717f333 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java @@ -10,6 +10,7 @@ import cn.axzo.tyr.client.model.product.ProductSearchListReq; import cn.axzo.tyr.client.model.product.ProductSearchPageReq; import cn.axzo.tyr.client.model.product.ProductUpdateReq; import cn.axzo.tyr.client.model.product.ProductVO; +import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; @@ -17,7 +18,9 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; +import javax.validation.constraints.NotNull; import java.util.List; /** @@ -54,7 +57,7 @@ public interface ProductApi { * @return {@link ProductVO} */ @GetMapping("api/auth/product/get/id") - ApiResult getById(Long id); + ApiResult getById(@RequestParam(required = false) @NotNull(message = "id不能为空") Long id); /** * 新增产品基础信息 @@ -81,7 +84,7 @@ public interface ProductApi { * @return 返回被删除的产品信息 */ @DeleteMapping("api/auth/product/delete/id") - ApiResult delete(Long id); + ApiResult delete(@RequestParam(required = false) @NotNull(message = "id不能为空") Long id); /** * 返回指定产品和单位类型下所有已有权限点集合 @@ -99,5 +102,5 @@ public interface ProductApi { * @return */ @PostMapping("api/auth/product/feature/relation/update") - ApiResult updateFeatureRelation(List req); + ApiResult updateFeatureRelation(@Validated @RequestBody List req); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java index 2632f303..5d2b3291 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java @@ -7,8 +7,10 @@ import cn.axzo.tyr.client.model.dict.request.*; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @@ -75,7 +77,9 @@ public interface SaasBasicDictApi { * @param req * @return */ - @PostMapping("/update-status") + @PostMapping("api/dict//update-status") ApiResult updateStatus(@RequestBody @Validated BasicDictUpdateStatusReq req); + @GetMapping("api/dict/get") + ApiResult get(@RequestParam Long id); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java index 3e9b72b0..a733f756 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java @@ -25,7 +25,7 @@ public class ProductAddReq { */ @NotBlank(message = "产品名称不能为空") @Length(max = 35, message = "产品名称长度不能超过 35 个字符") - private String name; + private String productName; /** * 产品图标 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java index 547d7ed1..774f265e 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java @@ -28,7 +28,7 @@ public class ProductUpdateReq { /** * 产品名称 */ - private String name; + private String productName; /** * 产品图标 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java index 6b73064e..129f1309 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java @@ -26,7 +26,7 @@ public class ProductVO { /** * 产品名称 */ - private String name; + private String productName; /** * 产品图标 @@ -57,4 +57,5 @@ public class ProductVO { * 更新时间 */ private Date updateAt; + } diff --git a/tyr-server/pom.xml b/tyr-server/pom.xml index c71ba70d..81da09b7 100644 --- a/tyr-server/pom.xml +++ b/tyr-server/pom.xml @@ -54,15 +54,15 @@ mysql-connector-java - + - + cn.axzo.framework diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/config/filter/HttpTraceLogFilter.java b/tyr-server/src/main/java/cn/axzo/tyr/server/config/filter/HttpTraceLogFilter.java index d85f107a..bc42c1b4 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/config/filter/HttpTraceLogFilter.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/config/filter/HttpTraceLogFilter.java @@ -39,7 +39,7 @@ import java.util.*; * @Description: Http接口日志记录 */ @Slf4j -@Component +//@Component public class HttpTraceLogFilter extends OncePerRequestFilter implements Ordered { private static final String X_REQUEST_ID = "x-request-id"; @@ -256,4 +256,4 @@ public class HttpTraceLogFilter extends OncePerRequestFilter implements Ordered } } } -} \ No newline at end of file +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java index 34368385..199fc1fa 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java @@ -55,4 +55,9 @@ public class SaasBasicDictController implements SaasBasicDictApi { public ApiResult updateStatus(BasicDictUpdateStatusReq req) { return null; } + + @Override + public ApiResult get(Long id) { + return saasBasicDictService.getById(id); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/product/ProductController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/product/ProductController.java index a0302790..c3ae5fb8 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/product/ProductController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/product/ProductController.java @@ -16,6 +16,7 @@ import cn.axzo.tyr.server.service.ProductService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.util.List; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java index 53b7665d..717e0d29 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java @@ -1,6 +1,6 @@ package cn.axzo.tyr.server.repository.entity; -import cn.axzo.framework.data.mybatisplus.model.BaseEntity; +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; @@ -91,7 +91,7 @@ public class SaasBasicDict extends BaseEntity implements Serializ /** * 扩展信息 */ - @TableField(value = "ex", typeHandler = JacksonTypeHandler.class) + @TableField(value = "ext", typeHandler = JacksonTypeHandler.class) private Map ext; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java index 174de7cc..54d5265a 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java @@ -1,6 +1,6 @@ package cn.axzo.tyr.server.repository.entity; -import cn.axzo.framework.data.mybatisplus.model.BaseEntity; +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Builder; @@ -11,7 +11,7 @@ import java.io.Serializable; /** *

- * + * *

* * @author ZhanSiHu @@ -88,7 +88,7 @@ public class SaasFeature extends BaseEntity implements Serializable private Integer sort; /** - * 菜单适用于平台 0:企业工作台 1:项目工作台 + * 菜单适用于平台 0:企业工作台 1:项目工作台 */ private String terminal; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/ProductModuleDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/ProductModuleDao.java index ea020fad..10c448dd 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/ProductModuleDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/ProductModuleDao.java @@ -4,6 +4,7 @@ import cn.axzo.tyr.server.repository.entity.ProductModule; import cn.axzo.tyr.server.repository.mapper.ProductModuleMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Repository; +import org.springframework.stereotype.Service; /** * saas-产品表(SaasProduct)表服务实现类 @@ -11,7 +12,7 @@ import org.springframework.stereotype.Repository; * @author makejava * @since 2022-05-24 11:15:04 */ -@Repository +@Service public class ProductModuleDao extends ServiceImpl { } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java index 6a3c633a..e7e27d6b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java @@ -6,6 +6,9 @@ import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import java.util.List; +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; + /** * @author: chenwenjian * @date: 2023/9/7 17:54 @@ -15,4 +18,5 @@ import java.util.List; */ public interface SaasBasicDictService { ApiResult> getBasicDictNodeList(BasicDictQueryReq req); + ApiResult getById(Long id); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java index 5be21a32..11f67059 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java @@ -16,7 +16,6 @@ import cn.axzo.tyr.server.service.ProductService; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.beanutils.BeanMap; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -74,7 +73,7 @@ public class ProductServiceImpl implements ProductService { ProductModule productModule = productModuleDao.getById(req.getId()); BeanMapper.copyBeanIgnoreNull(req, ()-> productModule); productModuleDao.updateById(productModule); - return ApiResult.ok(); + return ApiResult.ok(BeanMapper.copyBeanIgnoreNull(productModule, ProductVO.class)); } @Override diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java index 8c8e10b0..27b2fcb6 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -1,5 +1,6 @@ package cn.axzo.tyr.server.service.impl; +import cn.axzo.basics.common.BeanMapper; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; @@ -30,4 +31,8 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { return null; } + @Override + public ApiResult getById(Long id) { + return ApiResult.ok(BeanMapper.copyBean(saasBasicDictDao.getById(id), BasicDictNodeResp.class)); + } } diff --git a/tyr-server/src/main/resources/bootstrap.yml b/tyr-server/src/main/resources/bootstrap.yml index 91560edb..c1fd1a5a 100644 --- a/tyr-server/src/main/resources/bootstrap.yml +++ b/tyr-server/src/main/resources/bootstrap.yml @@ -4,10 +4,9 @@ spring: cloud: nacos: config: - server-addr: ${NACOS_HOST:dev-nacos.axzo.cn}:${NACOS_PORT:80} + server-addr: ${NACOS_HOST}:${NACOS_PORT} file-extension: yaml - namespace: ${NACOS_NAMESPACE_ID:35eada10-9574-4db8-9fea-bc6a4960b6c7} - prefix: ${spring.application.name} + namespace: ${NACOS_NAMESPACE_ID} profiles: active: ${NACOS_PROFILES_ACTIVE:local} include: swagger @@ -35,3 +34,55 @@ management: knife4j: enable: true + +--- +#本地开发机器连接公网中间件地址(仅 DEV 环境) +spring: + config: + activate: + on-profile: local + cloud: + nacos: + config: + server-addr: ${NACOS_HOST:dev-nacos.axzo.cn}:${NACOS_PORT:80} + file-extension: yaml + namespace: ${NACOS_NAMESPACE_ID:f82179f1-81a9-41a1-a489-4f9ab5660a6e} +logging: + level: + root: debug +--- +#开发环境 +spring: + config: + activate: + on-profile: dev + cloud: + nacos: + config: + server-addr: ${NACOS_HOST:dev-nacos.axzo.cn}:${NACOS_PORT:80} + file-extension: yaml + namespace: ${NACOS_NAMESPACE_ID:35eada10-9574-4db8-9fea-bc6a4960b6c7} +--- +#测试环境 +spring: + config: + activate: + on-profile: test + cloud: + nacos: + config: + server-addr: ${NACOS_HOST:test-nacos.axzo.cn}:${NACOS_PORT:80} + file-extension: yaml + namespace: ${NACOS_NAMESPACE_ID:f3c0f0d2-bac4-4498-bee7-9c3636b3afdf} +--- +#预发布环境 +spring: + config: + activate: + on-profile: pre + cloud: + nacos: + config: + server-addr: ${NACOS_HOST:https://pre-nacos.axzo.cn}:${NACOS_PORT:443} + file-extension: yaml + namespace: ${NACOS_NAMESPACE_ID:8b4cf725-7595-4c92-b2a6-9260a51ce078} From 52f71613d34f89a71954720ee94b0c540792a3ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Fri, 8 Sep 2023 19:03:10 +0800 Subject: [PATCH 037/186] add comment --- .../java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index ec47f2c0..f5476605 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -34,8 +34,9 @@ public class RoleServiceImpl implements RoleService { @Override public ApiListResult queryByIdentityIdType(Long identityId, Integer identityType) { + // 查询人关联的角色id Set roleIds = roleUserRelationDao.queryByIdentityIdType(identityId, identityType).stream().map(SaasRoleUserRelation::getRoleId).collect(Collectors.toSet()); - // todo + // 根据角色列表查询角色列表 return ApiListResult.ok(null); } } From c3df852c7f9e397f93948552613e5ed06eeb06fb Mon Sep 17 00:00:00 2001 From: yangsong Date: Fri, 8 Sep 2023 19:03:37 +0800 Subject: [PATCH 038/186] =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/model/enums/RoleLevel.java | 29 +++++++++++++++ .../client/model/req/QuerySaasRoleReq.java | 37 ------------------- 2 files changed, 29 insertions(+), 37 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/RoleLevel.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/RoleLevel.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/RoleLevel.java new file mode 100644 index 00000000..0e942c4e --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/RoleLevel.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.client.model.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +@Getter +@AllArgsConstructor +public enum RoleLevel { + WORKSPACE(1, "工作台"), + GROUP(2, "角色分组"), + ROLE(3, "角色"), + ; + private Integer code; + private String desc; + + private static final Map MAPPING = new HashMap<>(); + static { + for (RoleLevel level : RoleLevel.values()) { + MAPPING.put(level.code, level); + } + } + + public static RoleLevel apply(Integer code) { + return code == null ? null :MAPPING.get(code); + } +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java index 58878809..68084a42 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java @@ -1,6 +1,5 @@ package cn.axzo.tyr.client.model.req; -import cn.axzo.tyr.client.model.enums.IdentityType; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -19,49 +18,13 @@ public class QuerySaasRoleReq { */ private List ids; - /** - * 角色名称 - */ - private String name; - /** * 角色类型:common 自定义角色 admin管理员 init标准角色 */ private String roleType; - /** - * 工作台类型code - */ - private Integer workspaceTypeCode; - - /** - * 身份Id - */ - private Long identityId; - - /** - * 身份类型 1:工人 2:从业人员 3:班组长 4:运营人员 5:政务人员 - */ - private IdentityType identityType; - - /** - * 创建者 - */ - private Long createBy; - - /** - * 更新者 - */ - private Long updateBy; - /** * 分组id */ private List sassRoleGroupIds; - - /** - * 权限组id - */ - private List saasPermissionGroupIds; - } From 985c4e4d6674cc11d7c249f77ba4014fbcfa3f33 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Fri, 8 Sep 2023 19:10:59 +0800 Subject: [PATCH 039/186] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=AD=97=E5=85=B8?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/server/repository/SaasBasicDictDao.java | 16 ++++++++++++++++ .../service/impl/SaasBasicDictServiceImpl.java | 3 +-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java index f28f79a5..30135478 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java @@ -1,10 +1,16 @@ package cn.axzo.tyr.server.repository; +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; +import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.server.repository.entity.SaasBasicDict; import cn.axzo.tyr.server.repository.mapper.SaasBasicDictMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Objects; + /** * @author: chenwenjian * @date: 2023/9/7 17:43 @@ -15,4 +21,14 @@ import org.springframework.stereotype.Service; @Service public class SaasBasicDictDao extends ServiceImpl { + public ApiResult> getBasicDictNodeList(BasicDictQueryReq req) { + List basicDictList = lambdaQuery().eq(Objects.nonNull(req.getParentId()), SaasBasicDict::getParentId, req.getParentId()) + .eq(Objects.nonNull(req.getWorkspaceType()), SaasBasicDict::getWorkspaceType, req.getWorkspaceType().getValue()) + .eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, req.getType().getValue()) + .eq(Objects.nonNull(req.getCode()), SaasBasicDict::getCode, req.getCode()) + .eq(Objects.nonNull(req.getStatus()), SaasBasicDict::getStatus, Boolean.TRUE.equals(req.getStatus()) ? 1 : 0) + .like(Objects.nonNull(req.getName()), SaasBasicDict::getName, req.getName()) + .list(); + return null; + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java index b0f12f91..f04e5258 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -29,8 +29,7 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { @Override public ApiResult> getBasicDictNodeList(BasicDictQueryReq req) { - - return null; + return saasBasicDictDao.getBasicDictNodeList(req); } @Override From a25a245b9bed4d70a64b92553cee3f6858700397 Mon Sep 17 00:00:00 2001 From: chenweiwei Date: Sat, 9 Sep 2023 23:02:46 +0800 Subject: [PATCH 040/186] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=8E=A5=E5=8F=A3:?= =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E8=BA=AB=E4=BB=BDid=E5=92=8C=E8=BA=AB?= =?UTF-8?q?=E4=BB=BD=E7=B1=BB=E5=9E=8B=E6=9F=A5=E8=AF=A2=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E3=80=81=E6=9D=83=E9=99=90=E9=9B=86=E3=80=81=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/feign/SaasRoleApi.java | 10 +- .../req/QuerySaasPermissionGroupReq.java | 13 ++- .../model/vo/SaasPermissionGroupVO.java | 5 +- .../tyr/client/model/vo/SaasRoleGroupVO.java | 5 + .../axzo/tyr/client/model/vo/SaasRoleVO.java | 20 ++-- tyr-server/pom.xml | 6 -- .../cn/axzo/tyr/server/TyrApplication.java | 4 +- .../controller/role/SaasRoleController.java | 3 +- .../entity/SaasPermissionGroup.java | 2 +- .../entity/SaasPgroupPermissionRelation.java | 56 ++++++++++ .../entity/SaasRoleUserRelation.java | 2 +- .../SaasPgroupPermissionRelationMapper.java | 12 +++ .../SaasPgroupPermissionRelationDao.java | 14 +++ .../service/PermissionGroupService.java | 24 +++++ .../service/PermissionPointService.java | 2 + .../axzo/tyr/server/service/RoleService.java | 4 +- .../service/impl/PermissionGroupImpl.java | 100 ++++++++++++++++++ .../impl/PermissionPointServiceImpl.java | 4 +- .../server/service/impl/RoleServiceImpl.java | 73 +++++++++++-- 19 files changed, 319 insertions(+), 40 deletions(-) create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupPermissionRelation.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPgroupPermissionRelationMapper.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupPermissionRelationDao.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java index 4e3f9754..6da84ac6 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java @@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.RequestParam; /** * 角色 */ -@FeignClient(name = "tyr", url = "${axzo.service.maokai:http://tyr:8080/api/saasRole}") +@FeignClient(name = "tyr", url = "${axzo.service.maokai:http://tyr:8080}") public interface SaasRoleApi { /** @@ -21,25 +21,25 @@ public interface SaasRoleApi { * 标准角worksaceId ouId = -1,自定义跟随自定义分组赋值 * 如果权限列表不为空则创建通用权限 */ - @PostMapping("saveOrUpdate") + @PostMapping("/api/saasRole/saveOrUpdate") ApiResult saveOrUpdate(@RequestBody SaasRoleVO req); /** * 根据id查询详情 */ - @PostMapping("getById") + @PostMapping("/api/saasRole/getById") ApiResult getById(@RequestParam(required = true) Long id); /** * 获取角色列表 */ - @PostMapping("query") + @PostMapping("/api/saasRole/query") ApiListResult query(@RequestBody QuerySaasRoleReq req); /** * 根据身份id 身份类型查询权限列表 */ - @GetMapping("queryByIdentityIdType") + @GetMapping("/api/saasRole/queryByIdentityIdType") ApiListResult queryByIdentityIdType(@RequestParam(required = true) Long identityId,@RequestParam(required = true) Integer identityType); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java index ed796986..8735d0ae 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java @@ -2,17 +2,23 @@ package cn.axzo.tyr.client.model.req; import cn.axzo.basics.common.page.PageRequest; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.List; @Data +@AllArgsConstructor +@NoArgsConstructor +@Builder public class QuerySaasPermissionGroupReq extends PageRequest { /** * 角色id */ - private Long roleId; + private List roleIds; /** * 权限组id @@ -24,6 +30,11 @@ public class QuerySaasPermissionGroupReq extends PageRequest { */ private String name; + /** + * 是否为通用权限集 1:是 0:否 + */ + private Integer isCommon; + /** * 创建者 */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java index b2e6622a..c22753a2 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java @@ -1,5 +1,6 @@ package cn.axzo.tyr.client.model.vo; +import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -46,8 +47,8 @@ public class SaasPermissionGroupVO { private String type; /** - * 权限id + * 权限 */ - private List featureIds; + private List feature; } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java index 0defc8e1..25d393a3 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java @@ -35,6 +35,11 @@ public class SaasRoleGroupVO { */ private String name; + /** + * 角色 + */ + private List role; + /** * 排序 */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java index 6b7576ac..30535531 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java @@ -1,11 +1,18 @@ package cn.axzo.tyr.client.model.vo; +import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.Date; import java.util.List; @Data +@AllArgsConstructor +@NoArgsConstructor +@Builder public class SaasRoleVO { private Long id; @@ -31,19 +38,14 @@ public class SaasRoleVO { private Long updateBy; /** - * 分组id + * 分组id(这个关联关系应该放在上一级,从结构上看,上下级是多对多的,如果放在下级返回上级的id不太合适) */ - private List roleGroupIds; +// private List roleGroupIds; /** - * 权限组id + * 权限组 */ - private List permissionGroupIds; - - /** - * 权限id - */ - private List featureIds; + private List permissionGroup; /** * 是否删除 diff --git a/tyr-server/pom.xml b/tyr-server/pom.xml index 81da09b7..65236a4f 100644 --- a/tyr-server/pom.xml +++ b/tyr-server/pom.xml @@ -43,12 +43,6 @@ cn.axzo.framework axzo-processor-spring-boot-starter - - cn.axzo.basics - basics-common - - - mysql mysql-connector-java diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/TyrApplication.java b/tyr-server/src/main/java/cn/axzo/tyr/server/TyrApplication.java index e0449744..0609197b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/TyrApplication.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/TyrApplication.java @@ -13,9 +13,7 @@ import org.springframework.scheduling.annotation.EnableAsync; @Slf4j @EnableAsync @EnableDiscoveryClient -@EnableFeignClients(basePackages = { - "cn.axzo.data.collection.api", -}) +//@EnableFeignClients @MapperScan(value = {"cn.axzo.tyr.server.repository.mapper"}) @SpringBootApplication(scanBasePackages = "cn.axzo") public class TyrApplication { diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java index c734cfaa..858e933a 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java @@ -51,7 +51,6 @@ public class SaasRoleController implements SaasRoleApi { @Override public ApiListResult queryByIdentityIdType(Long identityId, Integer identityType) { - // 根据身份id和身份类型查询 用户角色关联表 - return roleService.queryByIdentityIdType(identityId, identityType); + return ApiListResult.ok(roleService.queryByIdentityIdType(identityId, identityType)); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java index 54c87ce8..23c6491b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java @@ -22,11 +22,11 @@ import java.io.Serializable; @TableName("saas_permission_group") public class SaasPermissionGroup extends BaseEntity { - /** * 权限集名称 */ private String name; + /** * 权限集描述 */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupPermissionRelation.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupPermissionRelation.java new file mode 100644 index 00000000..f2d9d8a2 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupPermissionRelation.java @@ -0,0 +1,56 @@ +package cn.axzo.tyr.server.repository.entity; + +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + * 权限集功能中间表(SaasPgroupPermissionRelation)表实体类 + * + * @author makejava + * @since 2022-05-24 11:18:41 + */ +@Getter +@Setter +@ToString +@EqualsAndHashCode(callSuper = true) +@TableName("saas_pgroup_permission_relation") +public class SaasPgroupPermissionRelation extends BaseEntity { + + + /** + * 权限集id + */ + private Long groupId; + /** + * 功能id + */ + private Long featureId; + + /** + * 创建者 + */ + private Long createBy; + + /** + * 更新者 + */ + private Long updateBy; + + + /** + * 获取主键值 + * + * @return 主键值 + */ + @Override + protected Serializable pkVal() { + return this.id; + } +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleUserRelation.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleUserRelation.java index 9db99707..ca3c4687 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleUserRelation.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleUserRelation.java @@ -31,7 +31,7 @@ public class SaasRoleUserRelation extends BaseEntity { /** * 身份类型 1:工人 2:从业人员 3:班组长 4:运营人员 5:政务人员 */ - private IdentityType identityType; + private Integer identityType; /** * 角色Id diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPgroupPermissionRelationMapper.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPgroupPermissionRelationMapper.java new file mode 100644 index 00000000..566ff109 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/mapper/SaasPgroupPermissionRelationMapper.java @@ -0,0 +1,12 @@ +package cn.axzo.tyr.server.repository.mapper; + +import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; +import cn.axzo.tyr.server.repository.entity.SaasRole; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SaasPgroupPermissionRelationMapper extends BaseMapper { + +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupPermissionRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupPermissionRelationDao.java new file mode 100644 index 00000000..528309ff --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupPermissionRelationDao.java @@ -0,0 +1,14 @@ +package cn.axzo.tyr.server.repository.service; + +import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; +import cn.axzo.tyr.server.repository.entity.SaasRole; +import cn.axzo.tyr.server.repository.mapper.SaasPgroupPermissionRelationMapper; +import cn.axzo.tyr.server.repository.mapper.SaasRoleMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Repository; + +@Repository +public class SaasPgroupPermissionRelationDao extends ServiceImpl { + +} + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java new file mode 100644 index 00000000..19017dc6 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java @@ -0,0 +1,24 @@ +package cn.axzo.tyr.server.service; + +import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; +import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; + +import java.util.List; + +/** + * 角色 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/6 15:51 + */ +public interface PermissionGroupService { + + /** + * 通用查询 + */ + public List query(QuerySaasPermissionGroupReq req); + + + +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java index 68bea9fb..f60ea5aa 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java @@ -4,6 +4,7 @@ import cn.axzo.tyr.client.model.permission.PermissionPointDTO; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.client.model.permission.PermissionPointVO; +import cn.axzo.tyr.server.repository.entity.SaasFeature; import java.util.List; @@ -42,4 +43,5 @@ public interface PermissionPointService { /** 移动排序 **/ void updateSort(Long updater, Long permissionId, Integer direction); + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java index b1fcb39d..2b61c289 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java @@ -3,6 +3,8 @@ package cn.axzo.tyr.server.service; import cn.axzo.framework.domain.web.result.ApiListResult; import cn.axzo.tyr.client.model.vo.SaasRoleVO; +import java.util.List; + /** * 角色 * @@ -13,5 +15,5 @@ import cn.axzo.tyr.client.model.vo.SaasRoleVO; public interface RoleService { - ApiListResult queryByIdentityIdType(Long identityId, Integer identityType); + List queryByIdentityIdType(Long identityId, Integer identityType); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java new file mode 100644 index 00000000..b7f04ebe --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -0,0 +1,100 @@ +package cn.axzo.tyr.server.service.impl; + +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; +import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; +import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; +import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup; +import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; +import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; +import cn.axzo.tyr.server.repository.service.SaasPermissionGroupDao; +import cn.axzo.tyr.server.repository.service.SaasPgroupPermissionRelationDao; +import cn.axzo.tyr.server.repository.service.SaasPgroupRoleRelationDao; +import cn.axzo.tyr.server.service.PermissionGroupService; +import cn.axzo.tyr.server.service.PermissionPointService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 权限集 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/6 15:51 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class PermissionGroupImpl implements PermissionGroupService { + + @Autowired + SaasPermissionGroupDao permissionGroupDao; + @Autowired + SaasPgroupRoleRelationDao roleRelationDao; + @Autowired + SaasPgroupPermissionRelationDao permissionRelationDao; + @Autowired + PermissionPointService featureService; + + @Override + public List query(QuerySaasPermissionGroupReq req) { + // 如果角色id不为空则先查询角色权限集关联表 + List relationList = null; + if (CollectionUtils.isNotEmpty(req.getRoleIds())) { + relationList = roleRelationDao.lambdaQuery() + .in(SaasPgroupRoleRelation::getRoleId, req.getRoleIds()) + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .list(); + // 如果没查询到关联关系则直接返回 + if (CollectionUtils.isEmpty(relationList)) { + return new ArrayList<>(); + } + } + // 查询权限集 + List groupList = permissionGroupDao.lambdaQuery() + .in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId, req.getIds()) + .eq(req.getIsCommon() != null, SaasPermissionGroup::getIsCommon, req.getIsCommon()) + .eq(req.getCreateBy() != null, SaasPermissionGroup::getCreateBy, req.getCreateBy()) + .eq(req.getUpdateBy() != null, SaasPermissionGroup::getUpdateBy, req.getUpdateBy()) + .eq(StringUtils.isNotBlank(req.getType()), SaasPermissionGroup::getType, req.getType()) + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .orderByDesc(BaseEntity::getId) + .list(); + // 如果权限集为空则直接返回 + if (CollectionUtils.isEmpty(groupList)) { + return new ArrayList<>(); + } + // 查询权限集关联的权限 + List permissionList = permissionRelationDao.lambdaQuery() + .in(SaasPgroupPermissionRelation::getGroupId, groupList.stream().map(BaseEntity::getId).collect(Collectors.toList())) + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .list(); + List feature = null; + if (CollectionUtils.isNotEmpty(permissionList)) { + // 查询featureCode + feature = featureService.listNodesByIds(permissionList.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())); + } + // 组装填充字段 + List finalFeature = feature; + return groupList.stream().map(group -> + SaasPermissionGroupVO.builder() + .id(group.getId()) + .name(group.getName()) + .feature(finalFeature) + .createBy(group.getCreateBy()) + .updateBy(group.getUpdateBy()) + .type(group.getType()) + .build() + ).collect(Collectors.toList()); + + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index ac6bc1b4..b57c634e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -4,6 +4,7 @@ import cn.axzo.basics.common.BeanMapper; import cn.axzo.basics.common.util.TreeUtil; import cn.axzo.framework.domain.web.BizException; import cn.axzo.framework.domain.web.code.BaseCode; +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.model.enums.FeatureType; import cn.axzo.tyr.client.model.permission.PermissionPointDTO; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; @@ -130,7 +131,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { @Override public List listNodesByIds(List permissionIds) { if (CollectionUtil.isEmpty(permissionIds)) { - return null; + return new ArrayList<>(); } return this.saasFeatureDao.listByIds(permissionIds) .stream() @@ -296,7 +297,6 @@ public class PermissionPointServiceImpl implements PermissionPointService { this.saasFeatureDao.updateSort(sortedChildren.get(switchIndex).getId(), index); } - private PermissionPointTreeNode feature2Node(SaasFeature feature) { PermissionPointTreeNode node = new PermissionPointTreeNode(); node.setPermissionPointId(feature.getId()); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index f5476605..6a2ff181 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -1,18 +1,27 @@ package cn.axzo.tyr.server.service.impl; -import cn.axzo.framework.domain.web.result.ApiListResult; +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; +import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; +import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; import cn.axzo.tyr.client.model.vo.SaasRoleVO; +import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; +import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; +import cn.axzo.tyr.server.repository.service.SaasPgroupRoleRelationDao; import cn.axzo.tyr.server.repository.service.SaasRoleDao; import cn.axzo.tyr.server.repository.service.SaasRoleUserRelationDao; +import cn.axzo.tyr.server.service.PermissionGroupService; import cn.axzo.tyr.server.service.RoleService; +import cn.hutool.core.bean.BeanUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; /** @@ -31,12 +40,62 @@ public class RoleServiceImpl implements RoleService { SaasRoleUserRelationDao roleUserRelationDao; @Autowired SaasRoleDao saasRoleDao; + @Autowired + PermissionGroupService permissionGroupService; + @Autowired + SaasPgroupRoleRelationDao permissionGroupRelation; @Override - public ApiListResult queryByIdentityIdType(Long identityId, Integer identityType) { + public List queryByIdentityIdType(Long identityId, Integer identityType) { // 查询人关联的角色id - Set roleIds = roleUserRelationDao.queryByIdentityIdType(identityId, identityType).stream().map(SaasRoleUserRelation::getRoleId).collect(Collectors.toSet()); - // 根据角色列表查询角色列表 - return ApiListResult.ok(null); + List roleIds = roleUserRelationDao.queryByIdentityIdType(identityId, identityType).stream().map(SaasRoleUserRelation::getRoleId).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(roleIds)) { + return new ArrayList<>(); + } + // 查询角色信息 + List roles = saasRoleDao.lambdaQuery().in(BaseEntity::getId, roleIds).list(); + // 查询权限集关联关系 + List saasPgroupRoleRelations = queryPermissionGroupRelation(roleIds); + // 查询权限集 + Map> pgrouRelationMap = null; + Map> pGroupMap = null; + if (CollectionUtils.isNotEmpty(saasPgroupRoleRelations)) { + // 转map + pgrouRelationMap = saasPgroupRoleRelations.stream().collect(Collectors.groupingBy(SaasPgroupRoleRelation::getRoleId)); + // 查询权限集 + pGroupMap = permissionGroupService.query(QuerySaasPermissionGroupReq.builder() + .ids(saasPgroupRoleRelations.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())) + .build()) + // 转map + .stream().collect(Collectors.groupingBy(SaasPermissionGroupVO::getId)); + } + Map> finalPgrouRelationMap = pgrouRelationMap; + Map> finalPGroupMap = pGroupMap; + return roles.stream().map(role -> { + // 获取对应的权限集 + List pGroup = new ArrayList<>(); + if(finalPgrouRelationMap != null && finalPgrouRelationMap.containsKey(role.getId())) { + pGroup = finalPgrouRelationMap.get(role.getId()) + .stream() + .map(SaasPgroupRoleRelation::getGroupId) + .map(finalPGroupMap::get) + .filter(Objects::nonNull) + .flatMap(List::stream) + .collect(Collectors.toList()); + } + SaasRoleVO saasRoleVO = BeanUtil.copyProperties(role, SaasRoleVO.class); + saasRoleVO.setPermissionGroup(pGroup); + return saasRoleVO; + }).collect(Collectors.toList()); + } + + /** + * 根据角色id查询权限集关联关系 + */ + public List queryPermissionGroupRelation(List roleIds) { + return permissionGroupRelation.lambdaQuery() + .in(SaasPgroupRoleRelation::getRoleId, roleIds) + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .list(); } } From c670da3c8a86cbf85901801913814afa0a56d8c5 Mon Sep 17 00:00:00 2001 From: chenweiwei Date: Sun, 10 Sep 2023 12:21:13 +0800 Subject: [PATCH 041/186] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=82=B9=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/model/permission/PermissionPointTreeNode.java | 3 +++ .../java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java | 9 +++++++++ .../server/service/impl/PermissionPointServiceImpl.java | 1 + 3 files changed, 13 insertions(+) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java index e3f6b053..cb31a7c5 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java @@ -23,6 +23,9 @@ public class PermissionPointTreeNode implements IBaseTree getFeature(){ + return permissionGroup.stream().map(SaasPermissionGroupVO::getFeature).flatMap(List::stream).collect(Collectors.toList()); + } + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index b57c634e..78a66aca 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -301,6 +301,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { PermissionPointTreeNode node = new PermissionPointTreeNode(); node.setPermissionPointId(feature.getId()); node.setPermissionName(feature.getFeatureName()); + node.setCode(feature.getFeatureCode()); node.setParentId(feature.getParentId()); node.setTerminal(feature.getTerminal()); node.setFeatureType(feature.getFeatureType()); From b2a18a777672f1fa55cf280a064531d499acfbc7 Mon Sep 17 00:00:00 2001 From: chenweiwei Date: Sun, 10 Sep 2023 15:06:22 +0800 Subject: [PATCH 042/186] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=8E=A5=E5=8F=A3:?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E9=80=9A=E7=94=A8=E6=9F=A5=E8=AF=A2=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/model/req/QuerySaasRoleReq.java | 10 +++ .../axzo/tyr/client/model/vo/SaasRoleVO.java | 2 +- .../controller/role/SaasRoleController.java | 2 +- .../repository/entity/SaasRoleGroup.java | 4 +- .../repository/service/SaasRoleGroupDao.java | 32 +++++++++ .../axzo/tyr/server/service/RoleService.java | 3 + .../server/service/impl/RoleServiceImpl.java | 66 +++++++++++++++++-- 7 files changed, 108 insertions(+), 11 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java index 68084a42..5438c865 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java @@ -23,6 +23,16 @@ public class QuerySaasRoleReq { */ private String roleType; + /** + * 工作台类型编码 + */ + private List workspaceTypeCode; + + /** + * 单位类型编码 + */ + private List ouTypeCode; + /** * 分组id */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java index 21ca497f..228fe5e6 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java @@ -63,7 +63,7 @@ public class SaasRoleVO { * @return */ public List getFeature(){ - return permissionGroup.stream().map(SaasPermissionGroupVO::getFeature).flatMap(List::stream).collect(Collectors.toList()); + return this.permissionGroup.stream().map(SaasPermissionGroupVO::getFeature).flatMap(List::stream).collect(Collectors.toList()); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java index 858e933a..06c04774 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java @@ -46,7 +46,7 @@ public class SaasRoleController implements SaasRoleApi { @Override public ApiListResult query(QuerySaasRoleReq req) { - return null; + return ApiListResult.ok(roleService.query(req)); } @Override diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java index 3f9760fd..8d5797f4 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java @@ -27,13 +27,13 @@ public class SaasRoleGroup extends BaseEntity implements Serializ * 工作台类型字典code */ @TableField("workspace_type_code") - private Long workspaceTypeCode; + private String workspaceTypeCode; /** * 单位类型字典code */ @TableField("ou_type_code") - private Long ouTypeCode; + private String ouTypeCode; /** * 名称 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java index f7207a8c..47350d57 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java @@ -1,14 +1,46 @@ package cn.axzo.tyr.server.repository.service; +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; +import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; import cn.axzo.tyr.server.repository.mapper.SaasPgroupRoleRelationMapper; import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public class SaasRoleGroupDao extends ServiceImpl { + @Autowired + SaasRoleGroupMapper mapper; + + /** + * 通用查询 + */ + public List query(QuerySaasRoleGroupReq req) { + // 构建单位类型查询条件json数组 + StringBuilder condition = new StringBuilder(); + if (CollectionUtils.isNotEmpty(req.getOuTypeCode())) { + condition = new StringBuilder(); + for (String value : req.getOuTypeCode()) { + condition.append(" FIND_IN_SET('" + value + "', ou_type_code) OR"); + } + } + return this.lambdaQuery() + .in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId,req.getIds()) + .in(CollectionUtils.isNotEmpty(req.getWorkspaceTypeCode()),SaasRoleGroup::getWorkspaceTypeCode,req.getWorkspaceTypeCode()) + .last(CollectionUtils.isNotEmpty(req.getOuTypeCode())," AND (" + condition.substring(0, condition.length() - 2) + ")") + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .list(); + } + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java index 2b61c289..a6da59e3 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java @@ -1,6 +1,7 @@ package cn.axzo.tyr.server.service; import cn.axzo.framework.domain.web.result.ApiListResult; +import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import java.util.List; @@ -16,4 +17,6 @@ public interface RoleService { List queryByIdentityIdType(Long identityId, Integer identityType); + + List query(QuerySaasRoleReq req); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 6a2ff181..b68aae2e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -4,20 +4,20 @@ import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; +import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; +import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; import cn.axzo.tyr.client.model.vo.SaasRoleVO; -import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; -import cn.axzo.tyr.server.repository.entity.SaasRole; -import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; -import cn.axzo.tyr.server.repository.service.SaasPgroupRoleRelationDao; -import cn.axzo.tyr.server.repository.service.SaasRoleDao; -import cn.axzo.tyr.server.repository.service.SaasRoleUserRelationDao; +import cn.axzo.tyr.server.repository.entity.*; +import cn.axzo.tyr.server.repository.service.*; import cn.axzo.tyr.server.service.PermissionGroupService; import cn.axzo.tyr.server.service.RoleService; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -44,11 +44,26 @@ public class RoleServiceImpl implements RoleService { PermissionGroupService permissionGroupService; @Autowired SaasPgroupRoleRelationDao permissionGroupRelation; + @Autowired + SaasRoleGroupDao saasRoleGroupDao; + @Autowired + SaasRoleGroupRelationDao roleGroupRelationDao; @Override public List queryByIdentityIdType(Long identityId, Integer identityType) { // 查询人关联的角色id List roleIds = roleUserRelationDao.queryByIdentityIdType(identityId, identityType).stream().map(SaasRoleUserRelation::getRoleId).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(roleIds)) { + return new ArrayList<>(); + } + return getByIds(roleIds); + } + + /** + * 根据id查询权限详情包含权限组合权限集(底层基础方法) + * @return + */ + public List getByIds(List roleIds) { if (CollectionUtils.isEmpty(roleIds)) { return new ArrayList<>(); } @@ -74,7 +89,7 @@ public class RoleServiceImpl implements RoleService { return roles.stream().map(role -> { // 获取对应的权限集 List pGroup = new ArrayList<>(); - if(finalPgrouRelationMap != null && finalPgrouRelationMap.containsKey(role.getId())) { + if (finalPgrouRelationMap != null && finalPgrouRelationMap.containsKey(role.getId())) { pGroup = finalPgrouRelationMap.get(role.getId()) .stream() .map(SaasPgroupRoleRelation::getGroupId) @@ -89,6 +104,43 @@ public class RoleServiceImpl implements RoleService { }).collect(Collectors.toList()); } + /** + * 通用查询 + * + * @param req + * @return + */ + @Override + public List query(QuerySaasRoleReq req) { + // 根据工作台类型和单位类型查询角色分组 todo 验空值和 1,12 数组匹配问题,传1只有一个结果返回 + List roleGroup = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(req.getWorkspaceTypeCode()) || CollectionUtils.isNotEmpty(req.getOuTypeCode())) { + roleGroup = saasRoleGroupDao.query(QuerySaasRoleGroupReq.builder() + .ids(req.getSassRoleGroupIds()) + .workspaceTypeCode(req.getWorkspaceTypeCode()) + .ouTypeCode(req.getOuTypeCode()) + .build()); + if (CollectionUtils.isEmpty(roleGroup)) { + return new ArrayList<>(); + } + } + // 根据角色分组查询角色分组关联表 + List groupRelation = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(roleGroup)) { + groupRelation = roleGroupRelationDao.lambdaQuery() + .in(SaasRoleGroupRelation::getSaasRoleGroupId, roleGroup.stream().map(BaseEntity::getId).collect(Collectors.toList())) + .list(); + } + // 查询角色 + List list = saasRoleDao.lambdaQuery() + .in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId, req.getIds()) + .in(CollectionUtils.isNotEmpty(groupRelation), BaseEntity::getId, groupRelation.stream().map(SaasRoleGroupRelation::getRoleId).collect(Collectors.toList())) + .eq(StringUtils.isNotBlank(req.getRoleType()),SaasRole::getRoleType,req.getRoleType()) + .orderByDesc(BaseEntity::getId) + .list(); + return getByIds(list.stream().map(BaseEntity::getId).collect(Collectors.toList())); + } + /** * 根据角色id查询权限集关联关系 */ From 30541980207a6382c332db13a8880dcca302ff08 Mon Sep 17 00:00:00 2001 From: chenweiwei Date: Sun, 10 Sep 2023 15:23:47 +0800 Subject: [PATCH 043/186] =?UTF-8?q?=E8=B0=83=E6=95=B4api=20list=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/feign/SaasRoleApi.java | 9 ++++++--- .../cn/axzo/tyr/client/model/vo/SaasRoleVO.java | 2 +- .../controller/role/SaasRoleController.java | 15 ++++----------- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java index 6da84ac6..62332481 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java @@ -1,6 +1,5 @@ package cn.axzo.tyr.client.feign; -import cn.axzo.framework.domain.web.result.ApiListResult; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.vo.SaasRoleVO; @@ -10,6 +9,8 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; +import java.util.List; + /** * 角色 */ @@ -32,14 +33,16 @@ public interface SaasRoleApi { /** * 获取角色列表 + * @return */ @PostMapping("/api/saasRole/query") - ApiListResult query(@RequestBody QuerySaasRoleReq req); + ApiResult> query(@RequestBody QuerySaasRoleReq req); /** * 根据身份id 身份类型查询权限列表 + * @return */ @GetMapping("/api/saasRole/queryByIdentityIdType") - ApiListResult queryByIdentityIdType(@RequestParam(required = true) Long identityId,@RequestParam(required = true) Integer identityType); + ApiResult> queryByIdentityIdType(@RequestParam(required = true) Long identityId,@RequestParam(required = true) Integer identityType); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java index 228fe5e6..1de30b24 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java @@ -63,7 +63,7 @@ public class SaasRoleVO { * @return */ public List getFeature(){ - return this.permissionGroup.stream().map(SaasPermissionGroupVO::getFeature).flatMap(List::stream).collect(Collectors.toList()); + return this.permissionGroup.stream().map(SaasPermissionGroupVO::getFeature).flatMap(List::stream).distinct().collect(Collectors.toList()); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java index 06c04774..6a6c8ee7 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java @@ -1,16 +1,9 @@ package cn.axzo.tyr.server.controller.role; -import cn.axzo.framework.domain.web.result.ApiListResult; import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.tyr.client.feign.PermissionPointApi; import cn.axzo.tyr.client.feign.SaasRoleApi; -import cn.axzo.tyr.client.model.enums.IdentityType; -import cn.axzo.tyr.client.model.permission.PermissionPointDTO; -import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; -import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.vo.SaasRoleVO; -import cn.axzo.tyr.server.service.PermissionPointService; import cn.axzo.tyr.server.service.RoleService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -45,12 +38,12 @@ public class SaasRoleController implements SaasRoleApi { } @Override - public ApiListResult query(QuerySaasRoleReq req) { - return ApiListResult.ok(roleService.query(req)); + public ApiResult> query(QuerySaasRoleReq req) { + return ApiResult.ok(roleService.query(req)); } @Override - public ApiListResult queryByIdentityIdType(Long identityId, Integer identityType) { - return ApiListResult.ok(roleService.queryByIdentityIdType(identityId, identityType)); + public ApiResult> queryByIdentityIdType(Long identityId, Integer identityType) { + return ApiResult.ok(roleService.queryByIdentityIdType(identityId, identityType)); } } From a79b7419d363583c7dbdc978feabb65e33decc93 Mon Sep 17 00:00:00 2001 From: chenweiwei Date: Sun, 10 Sep 2023 15:27:29 +0800 Subject: [PATCH 044/186] clear log --- .../java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index b68aae2e..6c884c60 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -112,7 +112,7 @@ public class RoleServiceImpl implements RoleService { */ @Override public List query(QuerySaasRoleReq req) { - // 根据工作台类型和单位类型查询角色分组 todo 验空值和 1,12 数组匹配问题,传1只有一个结果返回 + // 根据工作台类型和单位类型查询角色分组 List roleGroup = new ArrayList<>(); if (CollectionUtils.isNotEmpty(req.getWorkspaceTypeCode()) || CollectionUtils.isNotEmpty(req.getOuTypeCode())) { roleGroup = saasRoleGroupDao.query(QuerySaasRoleGroupReq.builder() From a31d8218fee64f900a9e6d299ab62e4f76eb7908 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Mon, 11 Sep 2023 10:29:32 +0800 Subject: [PATCH 045/186] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E8=BA=AB=E4=BB=BD?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=A7=92=E8=89=B2=E6=8E=A5=E5=8F=A3=E8=A1=A5?= =?UTF-8?q?=E5=85=85workspaceId=20ouId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java | 3 ++- .../tyr/server/controller/role/SaasRoleController.java | 4 ++-- .../server/repository/service/SaasRoleUserRelationDao.java | 7 ++++++- .../main/java/cn/axzo/tyr/server/service/RoleService.java | 2 +- .../cn/axzo/tyr/server/service/impl/RoleServiceImpl.java | 6 ++---- 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java index 62332481..6500f92c 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java @@ -43,6 +43,7 @@ public interface SaasRoleApi { * @return */ @GetMapping("/api/saasRole/queryByIdentityIdType") - ApiResult> queryByIdentityIdType(@RequestParam(required = true) Long identityId,@RequestParam(required = true) Integer identityType); + ApiResult> queryByIdentityIdType(@RequestParam(required = true) Long identityId,@RequestParam(required = true) Integer identityType,@RequestParam(required = true) Long workspaceId,@RequestParam(required = true) Long ouId + ); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java index 6a6c8ee7..cc274fff 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java @@ -43,7 +43,7 @@ public class SaasRoleController implements SaasRoleApi { } @Override - public ApiResult> queryByIdentityIdType(Long identityId, Integer identityType) { - return ApiResult.ok(roleService.queryByIdentityIdType(identityId, identityType)); + public ApiResult> queryByIdentityIdType(Long identityId, Integer identityType,Long workspaceId,Long ouId) { + return ApiResult.ok(roleService.queryByIdentityIdType(identityId, identityType,workspaceId,ouId)); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java index 2b21746f..3866cbf8 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java @@ -1,5 +1,7 @@ package cn.axzo.tyr.server.repository.service; +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; import cn.axzo.tyr.server.repository.mapper.SaasRoleUserRelationMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -10,10 +12,13 @@ import java.util.List; @Repository public class SaasRoleUserRelationDao extends ServiceImpl { - public List queryByIdentityIdType(Long identityId, Integer identityType) { + public List query(Long identityId, Integer identityType, Long workspaceId, Long ouId) { return this.lambdaQuery() .eq(SaasRoleUserRelation::getIdentityId,identityId) .eq(SaasRoleUserRelation::getIdentityType,identityType) + .eq(SaasRoleUserRelation::getWorkspaceId,workspaceId) + .eq(SaasRoleUserRelation::getOuId,ouId) + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) .list(); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java index a6da59e3..3bb440cd 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java @@ -16,7 +16,7 @@ import java.util.List; public interface RoleService { - List queryByIdentityIdType(Long identityId, Integer identityType); + List queryByIdentityIdType(Long identityId, Integer identityType,Long workspaceId,Long ouId); List query(QuerySaasRoleReq req); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 6c884c60..bd5548cd 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -2,7 +2,6 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; -import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; @@ -13,7 +12,6 @@ import cn.axzo.tyr.server.repository.service.*; import cn.axzo.tyr.server.service.PermissionGroupService; import cn.axzo.tyr.server.service.RoleService; import cn.hutool.core.bean.BeanUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; @@ -50,9 +48,9 @@ public class RoleServiceImpl implements RoleService { SaasRoleGroupRelationDao roleGroupRelationDao; @Override - public List queryByIdentityIdType(Long identityId, Integer identityType) { + public List queryByIdentityIdType(Long identityId, Integer identityType,Long workspaceId,Long ouId) { // 查询人关联的角色id - List roleIds = roleUserRelationDao.queryByIdentityIdType(identityId, identityType).stream().map(SaasRoleUserRelation::getRoleId).collect(Collectors.toList()); + List roleIds = roleUserRelationDao.query(identityId, identityType,workspaceId,ouId).stream().map(SaasRoleUserRelation::getRoleId).collect(Collectors.toList()); if (CollectionUtils.isEmpty(roleIds)) { return new ArrayList<>(); } From 5c493331987b6bda8bd79fc0649d4604023863c6 Mon Sep 17 00:00:00 2001 From: yangsong Date: Mon, 11 Sep 2023 10:32:55 +0800 Subject: [PATCH 046/186] =?UTF-8?q?=E8=A7=92=E8=89=B2=E5=88=86=E7=BB=84?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java index 25d393a3..2f44645a 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java @@ -38,7 +38,7 @@ public class SaasRoleGroupVO { /** * 角色 */ - private List role; + private List roleIds; /** * 排序 From 1987468897e9893b94d0e59d1f4e4582ea15268c Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Mon, 11 Sep 2023 10:49:41 +0800 Subject: [PATCH 047/186] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=AD=97=E5=85=B8?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/feign/SaasBasicDictApi.java | 6 +-- tyr-server/pom.xml | 5 +++ .../dict/SaasBasicDictController.java | 10 ++--- .../server/repository/SaasBasicDictDao.java | 24 +++++++----- .../repository/entity/SaasBasicDict.java | 2 +- .../server/service/SaasBasicDictService.java | 10 ++++- .../impl/SaasBasicDictServiceImpl.java | 39 ++++++++++++++++++- tyr-server/src/main/resources/bootstrap.yml | 2 +- 8 files changed, 75 insertions(+), 23 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java index df5dfbd4..0172590c 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java @@ -33,15 +33,15 @@ public interface SaasBasicDictApi { ApiResult> getBasicDictNodeList(@RequestBody @Validated BasicDictQueryReq req); /** - * 获取字典树,需要单测树时才传type + * 获取字典树,需要单侧树时才传type * * @param type * @return */ @PostMapping("api/dict/node-tree") ApiResult getBasicDictNodeTree(@RequestBody - @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") - DictTypeFiledEnum type); + @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") + DictTypeFiledEnum type); /** * 获取字典节点详情 diff --git a/tyr-server/pom.xml b/tyr-server/pom.xml index 213bd48e..06a78009 100644 --- a/tyr-server/pom.xml +++ b/tyr-server/pom.xml @@ -56,5 +56,10 @@ tyr-api 1.0.0-SNAPSHOT + + + cn.axzo.basics + basics-common + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java index b8403019..fc602749 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java @@ -16,7 +16,7 @@ import java.util.List; /** * @author: chenwenjian * @date: 2023/9/8 14:32 - * @description: + * @description: 字典controller * @modifiedBy: * @version: 1.0 */ @@ -39,21 +39,21 @@ public class SaasBasicDictController implements SaasBasicDictApi { @Override public ApiResult getBasicDictNode(BasicDictNodeReq req) { - return null; + return saasBasicDictService.getBasicDictNode(req); } @Override public ApiResult create(BasicDictCreateReq req) { - return null; + return saasBasicDictService.create(req); } @Override public ApiResult update(BasicDictUpdateReq req) { - return null; + return saasBasicDictService.update(req); } @Override public ApiResult updateStatus(BasicDictUpdateStatusReq req) { - return null; + return saasBasicDictService.updateStauts(req); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java index 30135478..c20343b8 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java @@ -1,10 +1,11 @@ package cn.axzo.tyr.server.repository; -import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.basics.common.BeanMapper; import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.server.repository.entity.SaasBasicDict; import cn.axzo.tyr.server.repository.mapper.SaasBasicDictMapper; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @@ -21,14 +22,17 @@ import java.util.Objects; @Service public class SaasBasicDictDao extends ServiceImpl { - public ApiResult> getBasicDictNodeList(BasicDictQueryReq req) { - List basicDictList = lambdaQuery().eq(Objects.nonNull(req.getParentId()), SaasBasicDict::getParentId, req.getParentId()) - .eq(Objects.nonNull(req.getWorkspaceType()), SaasBasicDict::getWorkspaceType, req.getWorkspaceType().getValue()) - .eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, req.getType().getValue()) - .eq(Objects.nonNull(req.getCode()), SaasBasicDict::getCode, req.getCode()) - .eq(Objects.nonNull(req.getStatus()), SaasBasicDict::getStatus, Boolean.TRUE.equals(req.getStatus()) ? 1 : 0) - .like(Objects.nonNull(req.getName()), SaasBasicDict::getName, req.getName()) - .list(); - return null; + public List getBasicDictNodeList(BasicDictQueryReq req) { + LambdaQueryChainWrapper queryChainWrapper = lambdaQuery(); + if (Objects.nonNull(req)){ + queryChainWrapper.eq(Objects.nonNull(req.getParentId()), SaasBasicDict::getParentId, req.getParentId()) + .eq(Objects.nonNull(req.getWorkspaceType()), SaasBasicDict::getWorkspaceType, Objects.nonNull(req.getWorkspaceType())?req.getWorkspaceType().getValue():"") + .eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, Objects.nonNull(req.getType())?req.getType().getValue():"") + .eq(Objects.nonNull(req.getCode()), SaasBasicDict::getCode, req.getCode()) + .eq(Objects.nonNull(req.getStatus()), SaasBasicDict::getStatus, Boolean.TRUE.equals(req.getStatus()) ? 1 : 0) + .like(Objects.nonNull(req.getName()), SaasBasicDict::getName, req.getName()); + } + List basicDictList = queryChainWrapper.orderByDesc(SaasBasicDict::getSort).list(); + return BeanMapper.copyList(basicDictList, BasicDictNodeResp.class, (s, b) -> b.setStatus(s.getStatus() == 1)); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java index 53b7665d..bd455c14 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java @@ -91,7 +91,7 @@ public class SaasBasicDict extends BaseEntity implements Serializ /** * 扩展信息 */ - @TableField(value = "ex", typeHandler = JacksonTypeHandler.class) + @TableField(value = "ext", typeHandler = JacksonTypeHandler.class) private Map ext; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java index c108655c..bed5e866 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java @@ -2,7 +2,7 @@ package cn.axzo.tyr.server.service; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.DictTypeFiledEnum; -import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; +import cn.axzo.tyr.client.model.dict.request.*; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; @@ -19,4 +19,12 @@ public interface SaasBasicDictService { ApiResult> getBasicDictNodeList(BasicDictQueryReq req); ApiResult getBasicDictNodeTree(DictTypeFiledEnum type); + + ApiResult getBasicDictNode(BasicDictNodeReq req); + + ApiResult create(BasicDictCreateReq req); + + ApiResult update(BasicDictUpdateReq req); + + ApiResult updateStauts(BasicDictUpdateStatusReq req); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java index f04e5258..836acc50 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -2,7 +2,7 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.DictTypeFiledEnum; -import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; +import cn.axzo.tyr.client.model.dict.request.*; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; import cn.axzo.tyr.server.repository.SaasBasicDictDao; @@ -29,11 +29,46 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { @Override public ApiResult> getBasicDictNodeList(BasicDictQueryReq req) { - return saasBasicDictDao.getBasicDictNodeList(req); + return ApiResult.ok(saasBasicDictDao.getBasicDictNodeList(req)); } @Override public ApiResult getBasicDictNodeTree(DictTypeFiledEnum type) { +// // 获取所有节点 +// List basicDictNodeList = saasBasicDictDao.getBasicDictNodeList(null); +// // 单侧树 +// if (Objects.nonNull(type)){ +// basicDictNodeList.stream().filter(new Predicate() { +// @Override +// public boolean test(BasicDictNodeResp b) { +// return b.getType().equals(type.getValue()); +// } +// }); +// } + return null; + } + + public BasicDictTreeResp constructDictTree(List nodeList){ + return null; + } + + @Override + public ApiResult getBasicDictNode(BasicDictNodeReq req) { + return null; + } + + @Override + public ApiResult create(BasicDictCreateReq req) { + return null; + } + + @Override + public ApiResult update(BasicDictUpdateReq req) { + return null; + } + + @Override + public ApiResult updateStauts(BasicDictUpdateStatusReq req) { return null; } } diff --git a/tyr-server/src/main/resources/bootstrap.yml b/tyr-server/src/main/resources/bootstrap.yml index 91560edb..6b6b8368 100644 --- a/tyr-server/src/main/resources/bootstrap.yml +++ b/tyr-server/src/main/resources/bootstrap.yml @@ -9,7 +9,7 @@ spring: namespace: ${NACOS_NAMESPACE_ID:35eada10-9574-4db8-9fea-bc6a4960b6c7} prefix: ${spring.application.name} profiles: - active: ${NACOS_PROFILES_ACTIVE:local} + active: ${NACOS_PROFILES_ACTIVE:dev} include: swagger main: allow-bean-definition-overriding: true From b6c55627603609185980f6ac47bb5ce0532113dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Mon, 11 Sep 2023 10:55:29 +0800 Subject: [PATCH 048/186] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Dockerfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 3 +++ .../src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..761596a1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,3 @@ +FROM registry.cn-hangzhou.aliyuncs.com/axzo-k8s/jdk1.8-fc:v1 +COPY tyr-server/target/tyr.jar ./tyr.jar +ENTRYPOINT [{ENTRYPOINT}] diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java index 6500f92c..710ceb77 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java @@ -43,7 +43,6 @@ public interface SaasRoleApi { * @return */ @GetMapping("/api/saasRole/queryByIdentityIdType") - ApiResult> queryByIdentityIdType(@RequestParam(required = true) Long identityId,@RequestParam(required = true) Integer identityType,@RequestParam(required = true) Long workspaceId,@RequestParam(required = true) Long ouId - ); + ApiResult> queryByIdentityIdType(@RequestParam(required = true) Long identityId,@RequestParam(required = true) Integer identityType,@RequestParam(required = true) Long workspaceId,@RequestParam(required = true) Long ouId); } From 775a68ee7dac33276e8c393b8dc930258da5f1a4 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Mon, 11 Sep 2023 11:00:03 +0800 Subject: [PATCH 049/186] =?UTF-8?q?update=20-=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E5=88=A0=E9=99=A4=E5=AE=9E=E7=8E=B0=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/tyr/server/service/impl/ProductServiceImpl.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java index 11f67059..40cf5a67 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java @@ -71,7 +71,7 @@ public class ProductServiceImpl implements ProductService { @Override public ApiResult update(ProductUpdateReq req) { ProductModule productModule = productModuleDao.getById(req.getId()); - BeanMapper.copyBeanIgnoreNull(req, ()-> productModule); + BeanMapper.copyBeanIgnoreNull(req, () -> productModule); productModuleDao.updateById(productModule); return ApiResult.ok(BeanMapper.copyBeanIgnoreNull(productModule, ProductVO.class)); } @@ -80,8 +80,10 @@ public class ProductServiceImpl implements ProductService { public ApiResult delete(Long id) { ProductModule productModule = productModuleDao.getById(id); AssertUtil.isTrue(Objects.nonNull(productModule), "产品不存在"); - productModule.setIsDelete(id); - productModuleDao.updateById(productModule); + productModuleDao.lambdaUpdate() + .eq(ProductModule::getId, productModule.getId()) + .set(ProductModule::getIsDelete, productModule.getId()) + .update(); return ApiResult.ok(BeanMapper.copyBean(productModule, ProductVO.class)); } } From 77bf00fadbc16ec0a3f2997935a5037aeee5e490 Mon Sep 17 00:00:00 2001 From: yangsong Date: Mon, 11 Sep 2023 11:10:13 +0800 Subject: [PATCH 050/186] =?UTF-8?q?=E8=A7=92=E8=89=B2=E5=88=86=E7=BB=84spi?= =?UTF-8?q?=20service?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...RoleGoupApi.java => SaasRoleGroupApi.java} | 2 +- .../role/SaasRoleGroupController.java | 33 ++++++++++++ .../server/service/SaasRoleGroupService.java | 10 ++++ .../server/service/impl/RoleServiceImpl.java | 8 ++- .../impl/SaasRoleGroupServiceImpl.java | 51 +++++++++++++++++++ 5 files changed, 102 insertions(+), 2 deletions(-) rename tyr-api/src/main/java/cn/axzo/tyr/client/feign/{SaasRoleGoupApi.java => SaasRoleGroupApi.java} (96%) create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGoupApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java similarity index 96% rename from tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGoupApi.java rename to tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java index ba7c016e..457819a3 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGoupApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java @@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.RequestParam; * 角色分组 */ @FeignClient(name = "tyr", url = "${axzo.service.maokai:http://tyr:8080/api/saasRoleGroup}") -public interface SaasRoleGoupApi { +public interface SaasRoleGroupApi { /** * 保存/更新 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java new file mode 100644 index 00000000..e25896c0 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java @@ -0,0 +1,33 @@ +package cn.axzo.tyr.server.controller.role; + +import cn.axzo.framework.domain.web.result.ApiListResult; +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.feign.SaasRoleGroupApi; +import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; +import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; +import cn.axzo.tyr.server.service.SaasRoleGroupService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@RestController +@RequiredArgsConstructor +public class SaasRoleGroupController implements SaasRoleGroupApi { + private final SaasRoleGroupService saasRoleGroupService; + + @Override + public ApiResult saveOrUpdate(SaasRoleGroupVO req) { + return null; + } + + @Override + public ApiListResult getList(QuerySaasRoleGroupReq req) { + return ApiListResult.ok(saasRoleGroupService.getList(req)); + } + + @Override + public ApiResult delete(Long id) { + return null; + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java new file mode 100644 index 00000000..d50e03d2 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java @@ -0,0 +1,10 @@ +package cn.axzo.tyr.server.service; + +import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; +import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; + +import java.util.List; + +public interface SaasRoleGroupService { + List getList(QuerySaasRoleGroupReq req); +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index bd5548cd..51ed81bb 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -19,7 +19,10 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -128,6 +131,9 @@ public class RoleServiceImpl implements RoleService { groupRelation = roleGroupRelationDao.lambdaQuery() .in(SaasRoleGroupRelation::getSaasRoleGroupId, roleGroup.stream().map(BaseEntity::getId).collect(Collectors.toList())) .list(); + if (CollectionUtils.isEmpty(groupRelation)) { + return new ArrayList<>(); + } } // 查询角色 List list = saasRoleDao.lambdaQuery() diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java new file mode 100644 index 00000000..7a76af4f --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java @@ -0,0 +1,51 @@ +package cn.axzo.tyr.server.service.impl; + +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; +import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; +import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; +import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation; +import cn.axzo.tyr.server.repository.service.SaasRoleGroupDao; +import cn.axzo.tyr.server.repository.service.SaasRoleGroupRelationDao; +import cn.axzo.tyr.server.service.SaasRoleGroupService; +import cn.hutool.core.bean.BeanUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@RequiredArgsConstructor +@Service +public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { + private final SaasRoleGroupDao saasRoleGroupDao; + private final SaasRoleGroupRelationDao saasRoleGroupRelationDao; + + @Override + public List getList(QuerySaasRoleGroupReq req) { + List groups = saasRoleGroupDao.query(req); + if (CollectionUtils.isEmpty(groups)) { + return new ArrayList<>(); + } + List saasRoleGroupRelations = saasRoleGroupRelationDao.lambdaQuery().in(SaasRoleGroupRelation::getSaasRoleGroupId, groups.stream().map(SaasRoleGroup::getId)) + .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + Map> groupRoleMap = saasRoleGroupRelations.stream().collect(Collectors.groupingBy(SaasRoleGroupRelation::getSaasRoleGroupId, Collectors.mapping(SaasRoleGroupRelation::getRoleId, Collectors.toList()))); + List results = groups.stream().map(e -> { + SaasRoleGroupVO target = BeanUtil.copyProperties(e, SaasRoleGroupVO.class); + if (StringUtils.isNotBlank(e.getOuTypeCode())) { + target.setOuTypeCode(Arrays.stream(e.getOuTypeCode().split(",")).filter(StringUtils::isNotBlank).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList())); + } + target.setRoleIds(groupRoleMap.get(e.getId())); + return target; + }).collect(Collectors.toList()); + + return results; + } +} From 81ab60e44f70fc2bbc79e3a0c02e46f15ccb2278 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Mon, 11 Sep 2023 11:31:22 +0800 Subject: [PATCH 051/186] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E8=BA=AB=E4=BB=BDid=E7=B1=BB=E5=9E=8B=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/feign/SaasRoleApi.java | 14 +- .../model/req/QueryByIdentityIdTypeReq.java | 22 ++ .../controller/role/SaasRoleController.java | 8 + .../axzo/tyr/server/service/RoleService.java | 5 +- .../server/service/impl/RoleServiceImpl.java | 231 +++++++++--------- 5 files changed, 168 insertions(+), 112 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryByIdentityIdTypeReq.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java index 710ceb77..c072b181 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java @@ -1,6 +1,7 @@ package cn.axzo.tyr.client.feign; import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import org.springframework.cloud.openfeign.FeignClient; @@ -10,6 +11,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import java.util.List; +import java.util.Map; /** * 角色 @@ -39,10 +41,20 @@ public interface SaasRoleApi { ApiResult> query(@RequestBody QuerySaasRoleReq req); /** - * 根据身份id 身份类型查询权限列表 + * 根据身份id身份类型查询权限列表(批量) + * @param identityType 身份类型 1:工人 2:班组长 3:从业人员 4:监管人员 5:运营人员 * @return */ @GetMapping("/api/saasRole/queryByIdentityIdType") ApiResult> queryByIdentityIdType(@RequestParam(required = true) Long identityId,@RequestParam(required = true) Integer identityType,@RequestParam(required = true) Long workspaceId,@RequestParam(required = true) Long ouId); + /** + * 根据身份id身份类型查询权限列表(批量) + * @return + */ + @GetMapping("/api/saasRole/queryBatchByIdentityIdType") + ApiResult>> queryBatchByIdentityIdType(@RequestBody List req); + + + } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryByIdentityIdTypeReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryByIdentityIdTypeReq.java new file mode 100644 index 00000000..e5f04f63 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryByIdentityIdTypeReq.java @@ -0,0 +1,22 @@ +package cn.axzo.tyr.client.model.req; + +import lombok.*; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@EqualsAndHashCode +public class QueryByIdentityIdTypeReq { + + Long identityId; + + /** + * 身份类型 1:工人 2:班组长 3:从业人员 4:监管人员 5:运营人员 + */ + Integer identityType; + + Long workspaceId; + + Long ouId; +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java index cc274fff..e030d5d9 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java @@ -2,6 +2,7 @@ package cn.axzo.tyr.server.controller.role; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.SaasRoleApi; +import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.server.service.RoleService; @@ -11,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RestController; import java.util.List; +import java.util.Map; /** * 权限 @@ -46,4 +48,10 @@ public class SaasRoleController implements SaasRoleApi { public ApiResult> queryByIdentityIdType(Long identityId, Integer identityType,Long workspaceId,Long ouId) { return ApiResult.ok(roleService.queryByIdentityIdType(identityId, identityType,workspaceId,ouId)); } + + @Override + public ApiResult>> queryBatchByIdentityIdType(List req) { + return ApiResult.ok(roleService.queryBatchByIdentityIdType(req)); + } + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java index 3bb440cd..b8df6dd9 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java @@ -1,10 +1,11 @@ package cn.axzo.tyr.server.service; -import cn.axzo.framework.domain.web.result.ApiListResult; +import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import java.util.List; +import java.util.Map; /** * 角色 @@ -19,4 +20,6 @@ public interface RoleService { List queryByIdentityIdType(Long identityId, Integer identityType,Long workspaceId,Long ouId); List query(QuerySaasRoleReq req); + + Map> queryBatchByIdentityIdType(List req); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index bd5548cd..5ca1659a 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -2,6 +2,7 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; @@ -34,118 +35,128 @@ import java.util.stream.Collectors; @Service public class RoleServiceImpl implements RoleService { - @Autowired - SaasRoleUserRelationDao roleUserRelationDao; - @Autowired - SaasRoleDao saasRoleDao; - @Autowired - PermissionGroupService permissionGroupService; - @Autowired - SaasPgroupRoleRelationDao permissionGroupRelation; - @Autowired - SaasRoleGroupDao saasRoleGroupDao; - @Autowired - SaasRoleGroupRelationDao roleGroupRelationDao; + @Autowired + SaasRoleUserRelationDao roleUserRelationDao; + @Autowired + SaasRoleDao saasRoleDao; + @Autowired + PermissionGroupService permissionGroupService; + @Autowired + SaasPgroupRoleRelationDao permissionGroupRelation; + @Autowired + SaasRoleGroupDao saasRoleGroupDao; + @Autowired + SaasRoleGroupRelationDao roleGroupRelationDao; - @Override - public List queryByIdentityIdType(Long identityId, Integer identityType,Long workspaceId,Long ouId) { - // 查询人关联的角色id - List roleIds = roleUserRelationDao.query(identityId, identityType,workspaceId,ouId).stream().map(SaasRoleUserRelation::getRoleId).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(roleIds)) { - return new ArrayList<>(); - } - return getByIds(roleIds); - } + @Override + public List queryByIdentityIdType(Long identityId, Integer identityType, Long workspaceId, Long ouId) { + // 查询人关联的角色id + List roleIds = roleUserRelationDao.query(identityId, identityType, workspaceId, ouId).stream().map(SaasRoleUserRelation::getRoleId).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(roleIds)) { + return new ArrayList<>(); + } + return getByIds(roleIds); + } - /** - * 根据id查询权限详情包含权限组合权限集(底层基础方法) - * @return - */ - public List getByIds(List roleIds) { - if (CollectionUtils.isEmpty(roleIds)) { - return new ArrayList<>(); - } - // 查询角色信息 - List roles = saasRoleDao.lambdaQuery().in(BaseEntity::getId, roleIds).list(); - // 查询权限集关联关系 - List saasPgroupRoleRelations = queryPermissionGroupRelation(roleIds); - // 查询权限集 - Map> pgrouRelationMap = null; - Map> pGroupMap = null; - if (CollectionUtils.isNotEmpty(saasPgroupRoleRelations)) { - // 转map - pgrouRelationMap = saasPgroupRoleRelations.stream().collect(Collectors.groupingBy(SaasPgroupRoleRelation::getRoleId)); - // 查询权限集 - pGroupMap = permissionGroupService.query(QuerySaasPermissionGroupReq.builder() - .ids(saasPgroupRoleRelations.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())) - .build()) - // 转map - .stream().collect(Collectors.groupingBy(SaasPermissionGroupVO::getId)); - } - Map> finalPgrouRelationMap = pgrouRelationMap; - Map> finalPGroupMap = pGroupMap; - return roles.stream().map(role -> { - // 获取对应的权限集 - List pGroup = new ArrayList<>(); - if (finalPgrouRelationMap != null && finalPgrouRelationMap.containsKey(role.getId())) { - pGroup = finalPgrouRelationMap.get(role.getId()) - .stream() - .map(SaasPgroupRoleRelation::getGroupId) - .map(finalPGroupMap::get) - .filter(Objects::nonNull) - .flatMap(List::stream) - .collect(Collectors.toList()); - } - SaasRoleVO saasRoleVO = BeanUtil.copyProperties(role, SaasRoleVO.class); - saasRoleVO.setPermissionGroup(pGroup); - return saasRoleVO; - }).collect(Collectors.toList()); - } + /** + * 根据id查询权限详情包含权限组合权限集(底层基础方法) + * + * @return + */ + public List getByIds(List roleIds) { + if (CollectionUtils.isEmpty(roleIds)) { + return new ArrayList<>(); + } + // 查询角色信息 + List roles = saasRoleDao.lambdaQuery().in(BaseEntity::getId, roleIds).list(); + // 查询权限集关联关系 + List saasPgroupRoleRelations = queryPermissionGroupRelation(roleIds); + // 查询权限集 + Map> pgrouRelationMap = null; + Map> pGroupMap = null; + if (CollectionUtils.isNotEmpty(saasPgroupRoleRelations)) { + // 转map + pgrouRelationMap = saasPgroupRoleRelations.stream().collect(Collectors.groupingBy(SaasPgroupRoleRelation::getRoleId)); + // 查询权限集 + pGroupMap = permissionGroupService.query(QuerySaasPermissionGroupReq.builder() + .ids(saasPgroupRoleRelations.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())) + .build()) + // 转map + .stream().collect(Collectors.groupingBy(SaasPermissionGroupVO::getId)); + } + Map> finalPgrouRelationMap = pgrouRelationMap; + Map> finalPGroupMap = pGroupMap; + return roles.stream().map(role -> { + // 获取对应的权限集 + List pGroup = new ArrayList<>(); + if (finalPgrouRelationMap != null && finalPgrouRelationMap.containsKey(role.getId())) { + pGroup = finalPgrouRelationMap.get(role.getId()) + .stream() + .map(SaasPgroupRoleRelation::getGroupId) + .map(finalPGroupMap::get) + .filter(Objects::nonNull) + .flatMap(List::stream) + .collect(Collectors.toList()); + } + SaasRoleVO saasRoleVO = BeanUtil.copyProperties(role, SaasRoleVO.class); + saasRoleVO.setPermissionGroup(pGroup); + return saasRoleVO; + }).collect(Collectors.toList()); + } - /** - * 通用查询 - * - * @param req - * @return - */ - @Override - public List query(QuerySaasRoleReq req) { - // 根据工作台类型和单位类型查询角色分组 - List roleGroup = new ArrayList<>(); - if (CollectionUtils.isNotEmpty(req.getWorkspaceTypeCode()) || CollectionUtils.isNotEmpty(req.getOuTypeCode())) { - roleGroup = saasRoleGroupDao.query(QuerySaasRoleGroupReq.builder() - .ids(req.getSassRoleGroupIds()) - .workspaceTypeCode(req.getWorkspaceTypeCode()) - .ouTypeCode(req.getOuTypeCode()) - .build()); - if (CollectionUtils.isEmpty(roleGroup)) { - return new ArrayList<>(); - } - } - // 根据角色分组查询角色分组关联表 - List groupRelation = new ArrayList<>(); - if (CollectionUtils.isNotEmpty(roleGroup)) { - groupRelation = roleGroupRelationDao.lambdaQuery() - .in(SaasRoleGroupRelation::getSaasRoleGroupId, roleGroup.stream().map(BaseEntity::getId).collect(Collectors.toList())) - .list(); - } - // 查询角色 - List list = saasRoleDao.lambdaQuery() - .in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId, req.getIds()) - .in(CollectionUtils.isNotEmpty(groupRelation), BaseEntity::getId, groupRelation.stream().map(SaasRoleGroupRelation::getRoleId).collect(Collectors.toList())) - .eq(StringUtils.isNotBlank(req.getRoleType()),SaasRole::getRoleType,req.getRoleType()) - .orderByDesc(BaseEntity::getId) - .list(); - return getByIds(list.stream().map(BaseEntity::getId).collect(Collectors.toList())); - } + /** + * 通用查询 + * + * @param req + * @return + */ + @Override + public List query(QuerySaasRoleReq req) { + // 根据工作台类型和单位类型查询角色分组 + List roleGroup = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(req.getWorkspaceTypeCode()) || CollectionUtils.isNotEmpty(req.getOuTypeCode())) { + roleGroup = saasRoleGroupDao.query(QuerySaasRoleGroupReq.builder() + .ids(req.getSassRoleGroupIds()) + .workspaceTypeCode(req.getWorkspaceTypeCode()) + .ouTypeCode(req.getOuTypeCode()) + .build()); + if (CollectionUtils.isEmpty(roleGroup)) { + return new ArrayList<>(); + } + } + // 根据角色分组查询角色分组关联表 + List groupRelation = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(roleGroup)) { + groupRelation = roleGroupRelationDao.lambdaQuery() + .in(SaasRoleGroupRelation::getSaasRoleGroupId, roleGroup.stream().map(BaseEntity::getId).collect(Collectors.toList())) + .list(); + } + // 查询角色 + List list = saasRoleDao.lambdaQuery() + .in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId, req.getIds()) + .in(CollectionUtils.isNotEmpty(groupRelation), BaseEntity::getId, groupRelation.stream().map(SaasRoleGroupRelation::getRoleId).collect(Collectors.toList())) + .eq(StringUtils.isNotBlank(req.getRoleType()), SaasRole::getRoleType, req.getRoleType()) + .orderByDesc(BaseEntity::getId) + .list(); + return getByIds(list.stream().map(BaseEntity::getId).collect(Collectors.toList())); + } - /** - * 根据角色id查询权限集关联关系 - */ - public List queryPermissionGroupRelation(List roleIds) { - return permissionGroupRelation.lambdaQuery() - .in(SaasPgroupRoleRelation::getRoleId, roleIds) - .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) - .list(); - } + @Override + public Map> queryBatchByIdentityIdType(List req) { + HashMap> result = new HashMap<>(); + req.forEach(e -> { + result.put(e,queryByIdentityIdType(e.getIdentityId(),e.getIdentityType(),e.getWorkspaceId(),e.getOuId())); + }); + return result; + } + + /** + * 根据角色id查询权限集关联关系 + */ + public List queryPermissionGroupRelation(List roleIds) { + return permissionGroupRelation.lambdaQuery() + .in(SaasPgroupRoleRelation::getRoleId, roleIds) + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .list(); + } } From ebfa3525fe7471b4625e5c0cc6ce5dee2595a88b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Mon, 11 Sep 2023 13:41:49 +0800 Subject: [PATCH 052/186] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pom.xml b/pom.xml index 4bead31e..2f0541bd 100644 --- a/pom.xml +++ b/pom.xml @@ -89,6 +89,20 @@ + + org.apache.maven.plugins + maven-assembly-plugin + + + + cn.axzo.tyr.server.TyrApplication + + + + jar-with-dependencies + + + From 475ff9fda0914d3492413c37538ab05b5078ecb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Mon, 11 Sep 2023 13:46:23 +0800 Subject: [PATCH 053/186] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 14 -------------- tyr-server/pom.xml | 8 ++++++++ 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/pom.xml b/pom.xml index 2f0541bd..4bead31e 100644 --- a/pom.xml +++ b/pom.xml @@ -89,20 +89,6 @@ - - org.apache.maven.plugins - maven-assembly-plugin - - - - cn.axzo.tyr.server.TyrApplication - - - - jar-with-dependencies - - - diff --git a/tyr-server/pom.xml b/tyr-server/pom.xml index 1c8bee66..4ed2013e 100644 --- a/tyr-server/pom.xml +++ b/tyr-server/pom.xml @@ -71,4 +71,12 @@ basics-common + + + + org.springframework.boot + spring-boot-maven-plugin + + + From 66c173ccbc2ac5391730b3f80868abf2993e5294 Mon Sep 17 00:00:00 2001 From: yangsong Date: Mon, 11 Sep 2023 14:00:36 +0800 Subject: [PATCH 054/186] =?UTF-8?q?feign=20url=20=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java | 2 +- .../cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java | 2 +- tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java | 2 +- .../main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java index 1a5221c8..5ebc745e 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java @@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.RequestParam; /** * 权限集 */ -@FeignClient(name = "tyr", url = "${axzo.service.maokai:http://tyr:8080/api/saasPermissionGoup}") +@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080/api/saasPermissionGoup}") public interface SaasPermissionGroupApi { /** diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java index 8152f66c..09c48e37 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java @@ -5,7 +5,7 @@ import org.springframework.cloud.openfeign.FeignClient; /** * 权限集作用范围 TODO */ -@FeignClient(name = "tyr", url = "${axzo.service.maokai:http://tyr:8080/api/saasPermissionGroup}") +@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080/api/saasPermissionGroup}") public interface SaasPermissionGroupScopeApi { diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java index c072b181..51314ede 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java @@ -16,7 +16,7 @@ import java.util.Map; /** * 角色 */ -@FeignClient(name = "tyr", url = "${axzo.service.maokai:http://tyr:8080}") +@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080}") public interface SaasRoleApi { /** diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java index 457819a3..174cb817 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java @@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.RequestParam; /** * 角色分组 */ -@FeignClient(name = "tyr", url = "${axzo.service.maokai:http://tyr:8080/api/saasRoleGroup}") +@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080/api/saasRoleGroup}") public interface SaasRoleGroupApi { /** From f2ebf603bcd7a088c42dfd613617d9772abee09f Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Mon, 11 Sep 2023 14:06:14 +0800 Subject: [PATCH 055/186] =?UTF-8?q?update=20-=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E5=88=A0=E9=99=A4=E5=AE=9E=E7=8E=B0=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ServiceExceptionResultHandler.java | 29 +++++++++++++++++++ .../service/impl/ProductServiceImpl.java | 4 +-- 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ServiceExceptionResultHandler.java diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ServiceExceptionResultHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ServiceExceptionResultHandler.java new file mode 100644 index 00000000..8d57707b --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ServiceExceptionResultHandler.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.server.config.exception; + + +import cn.axzo.basics.common.exception.ServiceException; +import cn.axzo.framework.autoconfigure.web.exception.RespErrorCodeMappingProperties; +import cn.axzo.framework.autoconfigure.web.exception.handler.AbstractExceptionApiResultHandler; +import cn.axzo.framework.domain.web.code.IRespCode; +import cn.axzo.framework.domain.web.code.RespCode; +import org.springframework.stereotype.Component; + +/** + * 目前整体框架中 ServiceException 有多种,而常用的 {@link cn.axzo.basics.common.util.AssertUtil} 抛出的是 {@link cn.axzo.basics.common.exception.ServiceException} + * 与框架默认的异常处理器不兼容,所以新增加一个处理该异常的处理器 + * + * @author wangli + * @since 2023/9/11 11:39 + */ +@Component +public class ServiceExceptionResultHandler extends AbstractExceptionApiResultHandler { + public ServiceExceptionResultHandler(RespErrorCodeMappingProperties properties) { + super(properties); + } + + @Override + protected IRespCode decode(ServiceException error, IRespCode fallbackCode) { + return new RespCode(String.valueOf(error.getErrorCode()), error.getMessage()); + } + +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java index 40cf5a67..4d0b0caa 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java @@ -81,8 +81,8 @@ public class ProductServiceImpl implements ProductService { ProductModule productModule = productModuleDao.getById(id); AssertUtil.isTrue(Objects.nonNull(productModule), "产品不存在"); productModuleDao.lambdaUpdate() - .eq(ProductModule::getId, productModule.getId()) - .set(ProductModule::getIsDelete, productModule.getId()) + .eq(ProductModule::getId, id) + .set(ProductModule::getIsDelete, id) .update(); return ApiResult.ok(BeanMapper.copyBean(productModule, ProductVO.class)); } From ab091ebb6306ce845e72fdb4b0362118b6e7b951 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Mon, 11 Sep 2023 14:38:27 +0800 Subject: [PATCH 056/186] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=AD=97=E5=85=B8?= =?UTF-8?q?=E6=A0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/feign/SaasBasicDictApi.java | 2 +- .../model/dict/request/BasicDictNodeReq.java | 4 + .../model/dict/request/BasicDictQueryReq.java | 6 ++ .../dict/response/BasicDictTreeResp.java | 2 + .../dict/SaasBasicDictController.java | 2 +- .../server/repository/SaasBasicDictDao.java | 8 ++ .../server/service/SaasBasicDictService.java | 3 +- .../impl/SaasBasicDictServiceImpl.java | 76 +++++++++++++++---- 8 files changed, 83 insertions(+), 20 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java index 897ba00f..389d29cc 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java @@ -41,7 +41,7 @@ public interface SaasBasicDictApi { * @return */ @PostMapping("api/dict/node-tree") - ApiResult getBasicDictNodeTree(@RequestBody + ApiResult> getBasicDictNodeTree( @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") DictTypeFiledEnum type); diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java index 17aaa9fc..dc255fb6 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java @@ -4,6 +4,8 @@ import cn.axzo.tyr.client.common.annotation.EnumValidator; import cn.axzo.tyr.client.model.DictTypeFiledEnum; import lombok.Data; +import javax.validation.constraints.NotNull; + /** * @author: chenwenjian * @date: 2023/9/6 15:46 @@ -17,9 +19,11 @@ public class BasicDictNodeReq { /** * 类型 */ + @NotNull(message = "type不能为空") @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") private DictTypeFiledEnum type; + @NotNull(message = "code不能为空") private String code; } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java index 5d559efd..7ee0fe68 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java @@ -3,7 +3,10 @@ package cn.axzo.tyr.client.model.dict.request; import cn.axzo.tyr.client.common.annotation.EnumValidator; import cn.axzo.tyr.client.model.DictTypeFiledEnum; import cn.axzo.tyr.client.model.DictWorkSpaceTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; /** * @author: chenwenjian @@ -13,6 +16,9 @@ import lombok.Data; * @version: 1.0 */ @Data +@Builder +@NoArgsConstructor +@AllArgsConstructor public class BasicDictQueryReq { private Long parentId; diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java index a5a6f1a5..9197b020 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java @@ -16,6 +16,8 @@ public class BasicDictTreeResp { private Long id; + private Long parentId; + /** * 字典名称 */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java index e766f315..977009ab 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java @@ -33,7 +33,7 @@ public class SaasBasicDictController implements SaasBasicDictApi { } @Override - public ApiResult getBasicDictNodeTree(DictTypeFiledEnum type) { + public ApiResult> getBasicDictNodeTree(DictTypeFiledEnum type) { return saasBasicDictService.getBasicDictNodeTree(type); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java index c20343b8..4ce7e168 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java @@ -1,6 +1,7 @@ package cn.axzo.tyr.server.repository; import cn.axzo.basics.common.BeanMapper; +import cn.axzo.tyr.client.model.dict.request.BasicDictNodeReq; import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.server.repository.entity.SaasBasicDict; @@ -35,4 +36,11 @@ public class SaasBasicDictDao extends ServiceImpl basicDictList = queryChainWrapper.orderByDesc(SaasBasicDict::getSort).list(); return BeanMapper.copyList(basicDictList, BasicDictNodeResp.class, (s, b) -> b.setStatus(s.getStatus() == 1)); } + + public BasicDictNodeResp getBasicDictNode(BasicDictNodeReq req) { + SaasBasicDict saasBasicDict = lambdaQuery().eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, req.getType().getValue()) + .eq(Objects.nonNull(req.getCode()), SaasBasicDict::getCode, req.getCode()) + .one(); + return BeanMapper.copyBean(saasBasicDict, BasicDictNodeResp.class, (s, b) -> b.setStatus(s.getStatus() == 1)); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java index 6c9aeeeb..5b481ec3 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java @@ -7,7 +7,6 @@ import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; import java.util.List; -import cn.axzo.tyr.client.model.dict.request.*; /** * @author: chenwenjian @@ -19,7 +18,7 @@ import cn.axzo.tyr.client.model.dict.request.*; public interface SaasBasicDictService { ApiResult> getBasicDictNodeList(BasicDictQueryReq req); - ApiResult getBasicDictNodeTree(DictTypeFiledEnum type); + ApiResult> getBasicDictNodeTree(DictTypeFiledEnum type); ApiResult getById(Long id); ApiResult getBasicDictNode(BasicDictNodeReq req); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java index e47e1551..3479a01e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -8,11 +8,16 @@ import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; import cn.axzo.tyr.server.repository.SaasBasicDictDao; import cn.axzo.tyr.server.service.SaasBasicDictService; +import cn.hutool.core.collection.CollectionUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; /** * @author: chenwenjian @@ -33,29 +38,67 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { return ApiResult.ok(saasBasicDictDao.getBasicDictNodeList(req)); } + /** + * 获取节点树 + * @param type + * @return + */ @Override - public ApiResult getBasicDictNodeTree(DictTypeFiledEnum type) { -// // 获取所有节点 -// List basicDictNodeList = saasBasicDictDao.getBasicDictNodeList(null); -// // 单侧树 -// if (Objects.nonNull(type)){ -// basicDictNodeList.stream().filter(new Predicate() { -// @Override -// public boolean test(BasicDictNodeResp b) { -// return b.getType().equals(type.getValue()); -// } -// }); -// } - return null; + public ApiResult> getBasicDictNodeTree(DictTypeFiledEnum type) { + // 获取所有节点 + List basicDictNodeList = saasBasicDictDao.getBasicDictNodeList(null); + // 单侧树 + if (Objects.nonNull(type)){ + List unilateralTreeNodeList = basicDictNodeList.stream() + .filter(b -> b.getType().equals(type.getValue()) || b.getType().equals(DictTypeFiledEnum.WORKSPACE.getValue())) + .collect(Collectors.toList()); + return ApiResult.ok(constructDictTree(unilateralTreeNodeList)); + } + return ApiResult.ok(constructDictTree(basicDictNodeList)); } - public BasicDictTreeResp constructDictTree(List nodeList){ - return null; + /** + * 根据节点列表构建节点树 + * @param nodeList 节点列表 + * @return 节点树 + */ + public List constructDictTree(List nodeList) { + if (CollectionUtil.isEmpty(nodeList)) { + return null; + } + + ArrayList root = new ArrayList<>(); + LinkedHashMap map = new LinkedHashMap<>(); + + nodeList.forEach(node -> { + BasicDictTreeResp treeNode = BeanMapper.copyBean(node, BasicDictTreeResp.class); + map.put(node.getId(), treeNode); + if (node.getParentId() == 0){ + root.add(treeNode); + } + }); + map.values().forEach(treeNode -> { + BasicDictTreeResp parent = map.get(treeNode.getParentId()); + if (Objects.nonNull(parent)){ + if (Objects.isNull(parent.getChildren())){ + parent.setChildren(new ArrayList<>()); + } + parent.getChildren().add(treeNode); + } + }); + + return root; } + /** + * 获取节点详情 + * + * @param req type和code + * @return 一个字典节点 + */ @Override public ApiResult getBasicDictNode(BasicDictNodeReq req) { - return null; + return ApiResult.ok(saasBasicDictDao.getBasicDictNode(req)); } @Override @@ -72,6 +115,7 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { public ApiResult updateStauts(BasicDictUpdateStatusReq req) { return null; } + @Override public ApiResult getById(Long id) { return ApiResult.ok(BeanMapper.copyBean(saasBasicDictDao.getById(id), BasicDictNodeResp.class)); From e380d0c9429e2f40d85bcaf8bc417a5c146e4979 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Mon, 11 Sep 2023 15:03:16 +0800 Subject: [PATCH 057/186] =?UTF-8?q?add=20-=20=E6=96=B0=E5=A2=9E=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E8=8E=B7=E5=8F=96=E5=AD=97=E5=85=B8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java | 3 +++ .../tyr/client/model/dict/request/BasicDictQueryReq.java | 4 ++-- .../tyr/server/controller/dict/SaasBasicDictController.java | 5 +++++ .../cn/axzo/tyr/server/service/SaasBasicDictService.java | 2 ++ .../tyr/server/service/impl/SaasBasicDictServiceImpl.java | 5 +++++ 5 files changed, 17 insertions(+), 2 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java index 389d29cc..3cec8ab8 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java @@ -83,4 +83,7 @@ public interface SaasBasicDictApi { @GetMapping("api/dict/get") ApiResult get(@RequestParam Long id); + + @GetMapping("api/dict/get-by-ids") + ApiResult> getByIds(@RequestParam List ids) ; } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java index 7ee0fe68..ddb1708f 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java @@ -26,13 +26,13 @@ public class BasicDictQueryReq { /** * workspace */ - @EnumValidator(enumClass = DictWorkSpaceTypeEnum.class, message = "枚举类型错误") +// @EnumValidator(enumClass = DictWorkSpaceTypeEnum.class, message = "枚举类型错误") private DictWorkSpaceTypeEnum workspaceType; /** * type */ - @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") +// @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") private DictTypeFiledEnum type; /** diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java index 977009ab..9fda27b6 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java @@ -61,4 +61,9 @@ public class SaasBasicDictController implements SaasBasicDictApi { public ApiResult get(Long id) { return saasBasicDictService.getById(id); } + + @Override + public ApiResult> getByIds(List ids) { + return saasBasicDictService.getByIds(ids); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java index 5b481ec3..e1e4f729 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java @@ -28,4 +28,6 @@ public interface SaasBasicDictService { ApiResult update(BasicDictUpdateReq req); ApiResult updateStauts(BasicDictUpdateStatusReq req); + + ApiResult> getByIds(List ids); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java index 3479a01e..1d1aacf7 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -120,4 +120,9 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { public ApiResult getById(Long id) { return ApiResult.ok(BeanMapper.copyBean(saasBasicDictDao.getById(id), BasicDictNodeResp.class)); } + + @Override + public ApiResult> getByIds(List ids) { + return ApiResult.ok(BeanMapper.copyList(saasBasicDictDao.listByIds(ids), BasicDictNodeResp.class)); + } } From aae9578fac79daae3bf4bc26b674a638e055dbc8 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Mon, 11 Sep 2023 15:06:29 +0800 Subject: [PATCH 058/186] =?UTF-8?q?update=20-=20=E5=AD=97=E5=85=B8list=20?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=A2=9E=E5=8A=A0=E9=80=9A=E8=BF=87=20ID=20?= =?UTF-8?q?=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/feign/SaasBasicDictApi.java | 2 -- .../client/model/dict/request/BasicDictQueryReq.java | 4 ++++ .../controller/dict/SaasBasicDictController.java | 4 ---- .../axzo/tyr/server/repository/SaasBasicDictDao.java | 11 +++++++---- .../axzo/tyr/server/service/SaasBasicDictService.java | 1 - .../server/service/impl/SaasBasicDictServiceImpl.java | 4 ---- 6 files changed, 11 insertions(+), 15 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java index 3cec8ab8..b6d3ff30 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java @@ -84,6 +84,4 @@ public interface SaasBasicDictApi { @GetMapping("api/dict/get") ApiResult get(@RequestParam Long id); - @GetMapping("api/dict/get-by-ids") - ApiResult> getByIds(@RequestParam List ids) ; } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java index ddb1708f..f4a56deb 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java @@ -8,6 +8,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; + /** * @author: chenwenjian * @date: 2023/9/6 14:02 @@ -21,6 +23,8 @@ import lombok.NoArgsConstructor; @AllArgsConstructor public class BasicDictQueryReq { + private List ids; + private Long parentId; /** diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java index 9fda27b6..c8715a08 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java @@ -62,8 +62,4 @@ public class SaasBasicDictController implements SaasBasicDictApi { return saasBasicDictService.getById(id); } - @Override - public ApiResult> getByIds(List ids) { - return saasBasicDictService.getByIds(ids); - } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java index 4ce7e168..ea881629 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java @@ -9,6 +9,7 @@ import cn.axzo.tyr.server.repository.mapper.SaasBasicDictMapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import java.util.List; import java.util.Objects; @@ -25,10 +26,12 @@ public class SaasBasicDictDao extends ServiceImpl getBasicDictNodeList(BasicDictQueryReq req) { LambdaQueryChainWrapper queryChainWrapper = lambdaQuery(); - if (Objects.nonNull(req)){ - queryChainWrapper.eq(Objects.nonNull(req.getParentId()), SaasBasicDict::getParentId, req.getParentId()) - .eq(Objects.nonNull(req.getWorkspaceType()), SaasBasicDict::getWorkspaceType, Objects.nonNull(req.getWorkspaceType())?req.getWorkspaceType().getValue():"") - .eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, Objects.nonNull(req.getType())?req.getType().getValue():"") + if (Objects.nonNull(req)) { + queryChainWrapper + .eq(!CollectionUtils.isEmpty(req.getIds()), SaasBasicDict::getId, req.getIds()) + .eq(Objects.nonNull(req.getParentId()), SaasBasicDict::getParentId, req.getParentId()) + .eq(Objects.nonNull(req.getWorkspaceType()), SaasBasicDict::getWorkspaceType, Objects.nonNull(req.getWorkspaceType()) ? req.getWorkspaceType().getValue() : "") + .eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, Objects.nonNull(req.getType()) ? req.getType().getValue() : "") .eq(Objects.nonNull(req.getCode()), SaasBasicDict::getCode, req.getCode()) .eq(Objects.nonNull(req.getStatus()), SaasBasicDict::getStatus, Boolean.TRUE.equals(req.getStatus()) ? 1 : 0) .like(Objects.nonNull(req.getName()), SaasBasicDict::getName, req.getName()); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java index e1e4f729..397658b6 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java @@ -29,5 +29,4 @@ public interface SaasBasicDictService { ApiResult updateStauts(BasicDictUpdateStatusReq req); - ApiResult> getByIds(List ids); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java index 1d1aacf7..9644a1bf 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -121,8 +121,4 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { return ApiResult.ok(BeanMapper.copyBean(saasBasicDictDao.getById(id), BasicDictNodeResp.class)); } - @Override - public ApiResult> getByIds(List ids) { - return ApiResult.ok(BeanMapper.copyList(saasBasicDictDao.listByIds(ids), BasicDictNodeResp.class)); - } } From 8bd09278bfc5ba201f8bb316b3463813c5266620 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Mon, 11 Sep 2023 15:24:07 +0800 Subject: [PATCH 059/186] =?UTF-8?q?update=20-=20=E5=AD=97=E5=85=B8list=20?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=A2=9E=E5=8A=A0=E9=80=9A=E8=BF=87=20ID=20?= =?UTF-8?q?=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java index ea881629..5f71b90c 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java @@ -28,7 +28,7 @@ public class SaasBasicDictDao extends ServiceImpl queryChainWrapper = lambdaQuery(); if (Objects.nonNull(req)) { queryChainWrapper - .eq(!CollectionUtils.isEmpty(req.getIds()), SaasBasicDict::getId, req.getIds()) + .in(!CollectionUtils.isEmpty(req.getIds()), SaasBasicDict::getId, req.getIds()) .eq(Objects.nonNull(req.getParentId()), SaasBasicDict::getParentId, req.getParentId()) .eq(Objects.nonNull(req.getWorkspaceType()), SaasBasicDict::getWorkspaceType, Objects.nonNull(req.getWorkspaceType()) ? req.getWorkspaceType().getValue() : "") .eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, Objects.nonNull(req.getType()) ? req.getType().getValue() : "") From 60b7f72655e640aa1e6a4fb3e7ee83845d590078 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Mon, 11 Sep 2023 15:24:26 +0800 Subject: [PATCH 060/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E6=8E=A5=E5=8F=A3=E5=A2=9E=E5=8A=A0=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=BD=93=E5=89=8D=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/feign/PermissionPointApi.java | 2 +- .../model/permission/PermissionPointDTO.java | 3 +++ .../PermissionPointTreeQueryReq.java | 3 +++ .../permission/PermissionPointController.java | 2 +- .../service/PermissionPointService.java | 2 +- .../impl/PermissionPointServiceImpl.java | 22 +++++++++++-------- 6 files changed, 22 insertions(+), 12 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java index cffb233d..096719ce 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java @@ -38,7 +38,7 @@ public interface PermissionPointApi { /** 保存权限点 - 新增或更新 **/ @PostMapping(value = "/api/v1/permissionPoint/save") - ApiResult savePermissionPoint(@RequestBody PermissionPointDTO dto); + ApiResult savePermissionPoint(@RequestBody PermissionPointDTO dto); /** 删除权限点 - 直接删除 **/ @PostMapping(value = "/api/v1/permissionPoint/delete/{permissionId}") diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java index 2d2071c5..55513756 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java @@ -156,4 +156,7 @@ public class PermissionPointDTO { */ private Integer delegatedType; + /** 业务编码 **/ + private String businessNo; + } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java index 0a0b5f5e..fb93b1ae 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java @@ -25,4 +25,7 @@ public class PermissionPointTreeQueryReq { /** 权限点所属工作台 **/ private List terminalList; + + /** 权限点ID列表 **/ + private List ids; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java index 4c622c62..d999b2a6 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java @@ -46,7 +46,7 @@ public class PermissionPointController implements PermissionPointApi { } @Override - public ApiResult savePermissionPoint(PermissionPointDTO dto) { + public ApiResult savePermissionPoint(PermissionPointDTO dto) { permissionPointService.save(dto); return ApiResult.ok(); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java index f60ea5aa..70e71451 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java @@ -33,7 +33,7 @@ public interface PermissionPointService { PermissionPointVO getDetail(Long permissionId); /** 保存权限点 **/ - void save(PermissionPointDTO dto); + PermissionPointDTO save(PermissionPointDTO dto); /** 删除权限点 **/ void delete(Long permissionId); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 78a66aca..8e45a05a 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -4,7 +4,6 @@ import cn.axzo.basics.common.BeanMapper; import cn.axzo.basics.common.util.TreeUtil; import cn.axzo.framework.domain.web.BizException; import cn.axzo.framework.domain.web.code.BaseCode; -import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.model.enums.FeatureType; import cn.axzo.tyr.client.model.permission.PermissionPointDTO; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; @@ -158,7 +157,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { vo.setPathName(pathName); return vo; } - //所有父级处理 + //查询所有父级 List split = StrUtil.split(vo.getPath(), FEATURE_PATH_DELIMITER, true, true); List ids = split.stream() .filter(x -> !StrUtil.equals(FEATURE_NO_PARENT, x)) @@ -167,6 +166,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { Map parentsMapping = this.saasFeatureDao.listByIds(ids) .stream() .collect(Collectors.toMap(SaasFeature::getId, Function.identity())); + //填充层级父级名称 直接父级信息 for (Long parentId : ids) { pathName.add(parentsMapping.get(parentId).getFeatureName()); } @@ -180,16 +180,14 @@ public class PermissionPointServiceImpl implements PermissionPointService { } @Override - public void save(PermissionPointDTO dto) { + public PermissionPointDTO save(PermissionPointDTO dto) { if (dto.getId() == null) { - doInsert(dto); - } else { - doUpdate(dto); + return doInsert(dto); } - + return doUpdate(dto); } - private void doUpdate(PermissionPointDTO dto) { + private PermissionPointDTO doUpdate(PermissionPointDTO dto) { SaasFeature feature = getAndCheck(dto.getId()); SaasFeature saasFeature = BeanMapper.copyBean(dto, SaasFeature.class); //清理不可更新的数据 @@ -198,7 +196,10 @@ public class PermissionPointServiceImpl implements PermissionPointService { saasFeature.setPath(null); saasFeature.setSort(null); saasFeature.setTerminal(null); + saasFeature.setBusinessNo(null); this.saasFeatureDao.updateById(saasFeature); + dto.setBusinessNo(feature.getBusinessNo()); + return dto; } private SaasFeature getAndCheck(Long permissionId) { @@ -210,7 +211,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { return feature; } - private void doInsert(PermissionPointDTO dto) { + private PermissionPointDTO doInsert(PermissionPointDTO dto) { SaasFeature saasFeature = BeanMapper.copyBean(dto, SaasFeature.class); SaasFeature parent; if (dto.getParentId() == null || dto.getParentId() < 1) { @@ -225,6 +226,9 @@ public class PermissionPointServiceImpl implements PermissionPointService { saasFeature.setParentBusinessNo(parent.getBusinessNo()); saasFeature.setPath(parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER); this.saasFeatureDao.save(saasFeature); + dto.setId(saasFeature.getId()); + dto.setBusinessNo(saasFeature.getBusinessNo()); + return dto; } @Transactional(rollbackFor = Throwable.class) From 6f6ca32d25ea48754e88424fcbc6ba76222a05c6 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Mon, 11 Sep 2023 15:32:52 +0800 Subject: [PATCH 061/186] =?UTF-8?q?fix(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=B0=83=E7=94=A8=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java index 096719ce..15eccb12 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java @@ -21,7 +21,7 @@ import java.util.List; * @author: ZhanSiHu * @date: 2023/9/6 14:48 */ -@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://localhost:8899}") +@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080}") public interface PermissionPointApi { /** 查询权限点树形节点 **/ From c94de2c57b4bf7c5dbc326c18bef135ac673a696 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Mon, 11 Sep 2023 15:33:02 +0800 Subject: [PATCH 062/186] =?UTF-8?q?update=20-=20=E5=AD=97=E5=85=B8list=20?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=A2=9E=E5=8A=A0=E9=80=9A=E8=BF=87=20ID=20?= =?UTF-8?q?=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/tyr/client/model/dict/request/BasicDictQueryReq.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java index f4a56deb..f4dc02e4 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java @@ -30,13 +30,13 @@ public class BasicDictQueryReq { /** * workspace */ -// @EnumValidator(enumClass = DictWorkSpaceTypeEnum.class, message = "枚举类型错误") + @EnumValidator(enumClass = DictWorkSpaceTypeEnum.class, message = "枚举类型错误") private DictWorkSpaceTypeEnum workspaceType; /** * type */ -// @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") + @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") private DictTypeFiledEnum type; /** From 8409db60232a4cbaf83c5cb17caf3c3f3eb61980 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Mon, 11 Sep 2023 16:12:37 +0800 Subject: [PATCH 063/186] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E6=B8=85=E6=B4=97=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tyr-server/pom.xml | 4 + .../server/repository/entity/SaasRole.java | 36 +++++ .../src/main/java/job/OMSRoleJobHandler.java | 133 ++++++++++++++++++ 3 files changed, 173 insertions(+) create mode 100644 tyr-server/src/main/java/job/OMSRoleJobHandler.java diff --git a/tyr-server/pom.xml b/tyr-server/pom.xml index 4ed2013e..b75af331 100644 --- a/tyr-server/pom.xml +++ b/tyr-server/pom.xml @@ -70,6 +70,10 @@ cn.axzo.basics basics-common + + com.xuxueli + xxl-job-core + diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java index 4814caf2..b3b5c262 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java @@ -37,6 +37,42 @@ public class SaasRole extends BaseEntity { */ private String roleType; + private Long workspaceId; + + private Integer workspaceType; + + private Long ownerOuId; + + /** + * 废弃 20230911 + */ + private Integer fitOuTypeBit; + + /** + * 废弃 20230911 + */ + private Integer fitOuNodeTypeBit; + + /** + * 废弃 20230911 + */ + private Long positionTemplateId; + + /** + * 废弃 20230911 + */ + private Long projectTeamManageRoleResourceId; + + /** + * 废弃 20230911 + */ + private Long fromPreRoleId; + + /** + * 废弃 20230911 + */ + private String jobCode; + /** * 创建者 */ diff --git a/tyr-server/src/main/java/job/OMSRoleJobHandler.java b/tyr-server/src/main/java/job/OMSRoleJobHandler.java new file mode 100644 index 00000000..f823f561 --- /dev/null +++ b/tyr-server/src/main/java/job/OMSRoleJobHandler.java @@ -0,0 +1,133 @@ +package job; + +import java.util.Date; + +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.model.DictTypeFiledEnum; +import cn.axzo.tyr.server.repository.entity.*; +import cn.axzo.tyr.server.repository.service.*; +import cn.axzo.tyr.server.service.RoleService; +import cn.axzo.tyr.server.service.SaasRoleGroupService; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.IJobHandler; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 成都重新推送job + * + * @author cn + * @version 1.0 + * @description + * @date 2021/9/13 11:31 + */ +@Component +@AllArgsConstructor +@Slf4j +public class OMSRoleJobHandler extends IJobHandler { + + @Autowired + SaasRoleGroupDao roleGroupDao; + @Autowired + SaasRoleDao roleDao; + @Autowired + SaasPermissionGroupDao saasPermissionGroupDao; + @Autowired + SaasFeatureDao featureDao; + @Autowired + SaasRoleGroupRelationDao roleGroupRelationDao; + @Autowired + SaasRoleUserRelationDao roleUserRelationDao; + @Autowired + SaasPgroupRoleRelationDao pgroupRoleRelationDao; + @Autowired + SaasPgroupPermissionRelationDao pgroupPermissionRelationDao; + + /** + * 清洗OMS角色相关数据(注:先通过SQL检查和清除脏数据,要不然无法保证各个实体的关联关系) + * + * @param s + * @return + * @throws Exception + */ + @Transactional // 在一个事务里面做,一起提交 + @Override + @XxlJob("chengDuSubwayLogRetry") + public ReturnT execute(String s) throws Exception { + // 创建角色分组 + SaasRoleGroup roleGroup = new SaasRoleGroup(); + roleGroup.setWorkspaceTypeCode("6"); + roleGroup.setName("管理员"); + roleGroupDao.save(roleGroup); + // 查询OMS的角色 workspaceType=6 OMS的角色 + List oldRole = roleDao.lambdaQuery().eq(SaasRole::getWorkspaceType, 6).list(); + // 重置老角色多余的字段 + oldRole.forEach(e -> { + e.setWorkspaceId(-1l); + e.setOwnerOuId(-1l); + e.setWorkspaceType(-1); + e.setFitOuTypeBit(-1); + e.setFitOuNodeTypeBit(-1); + e.setPositionTemplateId(-1l); + e.setProjectTeamManageRoleResourceId(-1l); + e.setFromPreRoleId(-1l); + e.setJobCode(""); + }); + roleDao.updateBatchById(oldRole); + // 保存角色分组关联关系 + List roleGroupRelation = oldRole.stream().map(e -> { + SaasRoleGroupRelation saasRoleGroupRelation = new SaasRoleGroupRelation(); + saasRoleGroupRelation.setRoleId(e.getId()); + saasRoleGroupRelation.setSaasRoleGroupId(roleGroup.getId()); + return saasRoleGroupRelation; + }).collect(Collectors.toList()); + roleGroupRelationDao.saveBatch(roleGroupRelation); + + // 查询角色关联的角色,打包成新的权限集 + oldRole.forEach(role -> { + List pgroupRoleRelation = pgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, role.getId()).list(); + List permissionGroup = saasPermissionGroupDao.lambdaQuery().in(BaseEntity::getId, pgroupRoleRelation.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())).list(); + List pgroupPermissionRelation = pgroupPermissionRelationDao.lambdaQuery().in(SaasPgroupPermissionRelation::getGroupId, permissionGroup.stream().map(BaseEntity::getId).collect(Collectors.toList())).list(); + List feature = featureDao.lambdaQuery().in(BaseEntity::getId, pgroupPermissionRelation.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())).list(); + // 创建新的权限集 + SaasPermissionGroup saasPermissionGroup = new SaasPermissionGroup(); + saasPermissionGroup.setName("通用权限"); + saasPermissionGroup.setDescription(""); + saasPermissionGroup.setCreateBy(-1L); + saasPermissionGroup.setUpdateBy(-1L); + saasPermissionGroup.setType("feature"); + saasPermissionGroup.setIsCommon(1); + saasPermissionGroupDao.save(saasPermissionGroup); + // 创建新的角色权限集关联关系 + SaasPgroupRoleRelation saasPgroupRoleRelation = new SaasPgroupRoleRelation(); + saasPgroupRoleRelation.setRoleId(role.getId()); + saasPgroupRoleRelation.setGroupId(saasPermissionGroup.getId()); + saasPgroupRoleRelation.setCreateBy(-1L); + saasPgroupRoleRelation.setUpdateBy(-1L); + pgroupRoleRelationDao.save(saasPgroupRoleRelation); + // 创建新的权限集权限关联关系 + feature.forEach(e -> { + SaasPgroupPermissionRelation saasPgroupPermissionRelation = new SaasPgroupPermissionRelation(); + saasPgroupPermissionRelation.setGroupId(saasPermissionGroup.getId()); + saasPgroupPermissionRelation.setFeatureId(e.getId()); + saasPgroupPermissionRelation.setCreateBy(-1L); + saasPgroupPermissionRelation.setUpdateBy(-1L); + pgroupPermissionRelationDao.save(saasPgroupPermissionRelation); + }); + // 删除老的权限集权限关联关系 + pgroupPermissionRelation.forEach(e -> e.setIsDelete(1l)); + pgroupPermissionRelationDao.updateBatchById(pgroupPermissionRelation); + // 删除老的角色权限集关联关系 + pgroupRoleRelation.forEach(e -> e.setIsDelete(1l)); + pgroupRoleRelationDao.updateBatchById(pgroupRoleRelation); + }); + return ReturnT.SUCCESS; + } +} From 742243b7589486d1fc10b0cfe7908332104bfcb7 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Mon, 11 Sep 2023 16:23:01 +0800 Subject: [PATCH 064/186] =?UTF-8?q?BasicDictQueryReq=E5=85=A5=E5=8F=82code?= =?UTF-8?q?=E5=8F=98=E4=B8=BAcodes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/feign/SaasBasicDictApi.java | 27 ++++++++++++------- .../model/dict/request/BasicDictQueryReq.java | 4 ++- .../server/repository/SaasBasicDictDao.java | 25 ++++++++++++++--- .../impl/SaasBasicDictServiceImpl.java | 20 +++++++------- 4 files changed, 52 insertions(+), 24 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java index 389d29cc..fbbaafb4 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java @@ -26,7 +26,7 @@ import java.util.List; public interface SaasBasicDictApi { /** - * 获取字典树所有节点 + * 获取字典树节点 * * @param req 根据自身需求传入参数 * @return @@ -42,11 +42,11 @@ public interface SaasBasicDictApi { */ @PostMapping("api/dict/node-tree") ApiResult> getBasicDictNodeTree( - @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") - DictTypeFiledEnum type); + @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") + DictTypeFiledEnum type); /** - * 获取字典节点详情 + * 通过type和code获取字典节点详情 * * @param req 传入type和code * @return @@ -58,16 +58,17 @@ public interface SaasBasicDictApi { * 添加字典 * * @param req 其中name同一个父级节点,名称不能重复,codeMap全局唯一 - * @return + * @return 节点id */ @PostMapping("api/dict/create") ApiResult create(@RequestBody @Validated BasicDictCreateReq req); /** * 编辑字典 + * 目前只支持更新字典名称 * - * @param req - * @return + * @param req 字典id和name + * @return 更新状态 */ @PostMapping("api/dict/update") ApiResult update(@RequestBody @Validated BasicDictUpdateReq req); @@ -75,12 +76,18 @@ public interface SaasBasicDictApi { /** * 更新字典状态 * - * @param req - * @return + * @param req 字典id和status + * @return 更新状态 */ - @PostMapping("api/dict//update-status") + @PostMapping("api/dict/update-status") ApiResult updateStatus(@RequestBody @Validated BasicDictUpdateStatusReq req); + /** + * 通过id获取字典节点 + * + * @param id 节点id + * @return 一个字典节点 + */ @GetMapping("api/dict/get") ApiResult get(@RequestParam Long id); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java index 7ee0fe68..6027b314 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java @@ -8,6 +8,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; + /** * @author: chenwenjian * @date: 2023/9/6 14:02 @@ -43,7 +45,7 @@ public class BasicDictQueryReq { /** * 字典code */ - private String code; + private List codes; /** * 状态 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java index 4ce7e168..2a7b6eb4 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java @@ -1,8 +1,11 @@ package cn.axzo.tyr.server.repository; import cn.axzo.basics.common.BeanMapper; +import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.dict.request.BasicDictNodeReq; import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; +import cn.axzo.tyr.client.model.dict.request.BasicDictUpdateReq; +import cn.axzo.tyr.client.model.dict.request.BasicDictUpdateStatusReq; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.server.repository.entity.SaasBasicDict; import cn.axzo.tyr.server.repository.mapper.SaasBasicDictMapper; @@ -25,11 +28,11 @@ public class SaasBasicDictDao extends ServiceImpl getBasicDictNodeList(BasicDictQueryReq req) { LambdaQueryChainWrapper queryChainWrapper = lambdaQuery(); - if (Objects.nonNull(req)){ + if (Objects.nonNull(req)) { queryChainWrapper.eq(Objects.nonNull(req.getParentId()), SaasBasicDict::getParentId, req.getParentId()) - .eq(Objects.nonNull(req.getWorkspaceType()), SaasBasicDict::getWorkspaceType, Objects.nonNull(req.getWorkspaceType())?req.getWorkspaceType().getValue():"") - .eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, Objects.nonNull(req.getType())?req.getType().getValue():"") - .eq(Objects.nonNull(req.getCode()), SaasBasicDict::getCode, req.getCode()) + .eq(Objects.nonNull(req.getWorkspaceType()), SaasBasicDict::getWorkspaceType, Objects.nonNull(req.getWorkspaceType()) ? req.getWorkspaceType().getValue() : "") + .eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, Objects.nonNull(req.getType()) ? req.getType().getValue() : "") + .in(Objects.nonNull(req.getCodes()), SaasBasicDict::getCode, req.getCodes()) .eq(Objects.nonNull(req.getStatus()), SaasBasicDict::getStatus, Boolean.TRUE.equals(req.getStatus()) ? 1 : 0) .like(Objects.nonNull(req.getName()), SaasBasicDict::getName, req.getName()); } @@ -43,4 +46,18 @@ public class SaasBasicDictDao extends ServiceImpl b.setStatus(s.getStatus() == 1)); } + + public ApiResult updateStatus(BasicDictUpdateStatusReq req) { + boolean update = lambdaUpdate().eq(SaasBasicDict::getId, req.getId()) + .set(SaasBasicDict::getStatus, req.getStatus() ? 1 : 0) + .update(); + return ApiResult.ok(update); + } + + public ApiResult update(BasicDictUpdateReq req) { + boolean update = lambdaUpdate().eq(SaasBasicDict::getId, req.getId()) + .set(SaasBasicDict::getName, req.getId()) + .update(); + return ApiResult.ok(update); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java index 3479a01e..5992d82b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -40,6 +40,7 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { /** * 获取节点树 + * * @param type * @return */ @@ -48,7 +49,7 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { // 获取所有节点 List basicDictNodeList = saasBasicDictDao.getBasicDictNodeList(null); // 单侧树 - if (Objects.nonNull(type)){ + if (Objects.nonNull(type)) { List unilateralTreeNodeList = basicDictNodeList.stream() .filter(b -> b.getType().equals(type.getValue()) || b.getType().equals(DictTypeFiledEnum.WORKSPACE.getValue())) .collect(Collectors.toList()); @@ -59,6 +60,7 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { /** * 根据节点列表构建节点树 + * * @param nodeList 节点列表 * @return 节点树 */ @@ -73,17 +75,17 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { nodeList.forEach(node -> { BasicDictTreeResp treeNode = BeanMapper.copyBean(node, BasicDictTreeResp.class); map.put(node.getId(), treeNode); - if (node.getParentId() == 0){ + if (node.getParentId() == 0) { root.add(treeNode); } }); map.values().forEach(treeNode -> { BasicDictTreeResp parent = map.get(treeNode.getParentId()); - if (Objects.nonNull(parent)){ - if (Objects.isNull(parent.getChildren())){ - parent.setChildren(new ArrayList<>()); - } - parent.getChildren().add(treeNode); + if (Objects.nonNull(parent)) { + if (Objects.isNull(parent.getChildren())) { + parent.setChildren(new ArrayList<>()); + } + parent.getChildren().add(treeNode); } }); @@ -108,12 +110,12 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { @Override public ApiResult update(BasicDictUpdateReq req) { - return null; + return saasBasicDictDao.update(req); } @Override public ApiResult updateStauts(BasicDictUpdateStatusReq req) { - return null; + return saasBasicDictDao.updateStatus(req); } @Override From 4633c44cc677e07b5cdb74bf8552bd7bd277be34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Mon, 11 Sep 2023 16:36:10 +0800 Subject: [PATCH 065/186] =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=9D=83=E9=99=90=E9=9B=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tyr-server/src/main/java/job/OMSRoleJobHandler.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tyr-server/src/main/java/job/OMSRoleJobHandler.java b/tyr-server/src/main/java/job/OMSRoleJobHandler.java index f823f561..3a41b6ca 100644 --- a/tyr-server/src/main/java/job/OMSRoleJobHandler.java +++ b/tyr-server/src/main/java/job/OMSRoleJobHandler.java @@ -1,5 +1,6 @@ package job; +import java.util.ArrayList; import java.util.Date; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; @@ -91,6 +92,7 @@ public class OMSRoleJobHandler extends IJobHandler { roleGroupRelationDao.saveBatch(roleGroupRelation); // 查询角色关联的角色,打包成新的权限集 + ArrayList deletePgroup = new ArrayList<>(); oldRole.forEach(role -> { List pgroupRoleRelation = pgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, role.getId()).list(); List permissionGroup = saasPermissionGroupDao.lambdaQuery().in(BaseEntity::getId, pgroupRoleRelation.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())).list(); @@ -105,6 +107,7 @@ public class OMSRoleJobHandler extends IJobHandler { saasPermissionGroup.setType("feature"); saasPermissionGroup.setIsCommon(1); saasPermissionGroupDao.save(saasPermissionGroup); + deletePgroup.addAll(permissionGroup); // 创建新的角色权限集关联关系 SaasPgroupRoleRelation saasPgroupRoleRelation = new SaasPgroupRoleRelation(); saasPgroupRoleRelation.setRoleId(role.getId()); @@ -122,12 +125,15 @@ public class OMSRoleJobHandler extends IJobHandler { pgroupPermissionRelationDao.save(saasPgroupPermissionRelation); }); // 删除老的权限集权限关联关系 - pgroupPermissionRelation.forEach(e -> e.setIsDelete(1l)); + pgroupPermissionRelation.forEach(e -> e.setIsDelete(e.getId())); pgroupPermissionRelationDao.updateBatchById(pgroupPermissionRelation); // 删除老的角色权限集关联关系 - pgroupRoleRelation.forEach(e -> e.setIsDelete(1l)); + pgroupRoleRelation.forEach(e -> e.setIsDelete(e.getId())); pgroupRoleRelationDao.updateBatchById(pgroupRoleRelation); }); + // 删除权限集 + deletePgroup.forEach(e -> e.setIsDelete(e.getId())); + saasPermissionGroupDao.updateBatchById(deletePgroup); return ReturnT.SUCCESS; } } From 8faa8f2cb04ff48fc5e71fcaad29e8119473ee0e Mon Sep 17 00:00:00 2001 From: zhansihu Date: Mon, 11 Sep 2023 17:26:35 +0800 Subject: [PATCH 066/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=94=AF=E6=8C=81workspace=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=EF=BC=9B=E6=9E=84=E5=BB=BA=E9=A1=B6=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PermissionPointTreeQueryReq.java | 3 + .../impl/PermissionPointServiceImpl.java | 61 +++++++++++++++++-- .../permission/PermissionPointTest.java | 6 +- 3 files changed, 64 insertions(+), 6 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java index fb93b1ae..978a9d01 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java @@ -28,4 +28,7 @@ public class PermissionPointTreeQueryReq { /** 权限点ID列表 **/ private List ids; + + /** 权限点terminal对应workspaceType **/ + private List workspaceType; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 8e45a05a..dd5b2615 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -4,14 +4,21 @@ import cn.axzo.basics.common.BeanMapper; import cn.axzo.basics.common.util.TreeUtil; import cn.axzo.framework.domain.web.BizException; import cn.axzo.framework.domain.web.code.BaseCode; +import cn.axzo.tyr.client.model.DictTypeFiledEnum; +import cn.axzo.tyr.client.model.DictWorkSpaceTypeEnum; +import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; +import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; +import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; import cn.axzo.tyr.client.model.enums.FeatureType; import cn.axzo.tyr.client.model.permission.PermissionPointDTO; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.client.model.permission.PermissionPointVO; +import cn.axzo.tyr.server.repository.SaasBasicDictDao; import cn.axzo.tyr.server.repository.entity.SaasFeature; import cn.axzo.tyr.server.repository.service.SaasFeatureDao; import cn.axzo.tyr.server.service.PermissionPointService; +import cn.axzo.tyr.server.service.SaasBasicDictService; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -45,10 +52,15 @@ import static cn.axzo.tyr.server.common.constants.PermissionConstant.FEATURE_TOP @RequiredArgsConstructor @Service public class PermissionPointServiceImpl implements PermissionPointService { + private final SaasFeatureDao saasFeatureDao; + private final SaasBasicDictDao saasBasicDictDao; + private final SaasBasicDictService saasBasicDictService; @Override public List listTreeNodes(PermissionPointTreeQueryReq request) { + //条件转换 workspace --> terminal + workspace2Terminal(request); //查询条件构建 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() .in(CollectionUtil.isNotEmpty(request.getTerminalList()), SaasFeature::getTerminal, request.getTerminalList()); @@ -72,22 +84,63 @@ public class PermissionPointServiceImpl implements PermissionPointService { list = null; //for GC //搜索或需要按授权策略过滤 - 有额外的过滤条件 - List result = filterTreeNode(request, treeList); + List nodesResult = filterTreeNode(request, treeList); //指定parent后不需要顶级的工作台 if (request.getParentId() != null) { - return result; + return nodesResult; } - //TODO:@Zhan 依赖系统字典接口封装上级 //按terminal分组 Map> mappingNode = treeList.stream() .collect(Collectors.groupingBy(PermissionPointTreeNode::getTerminal)); - //构建terminal工作台层级 + //构建workspace-terminal工作台层级 + List dictList = saasBasicDictService.getBasicDictNodeTree(DictTypeFiledEnum.TERMINAL).getData(); + //遍历所有workspace和terminal + List result = new ArrayList<>(); + for (BasicDictTreeResp workspace : dictList) { + List terminals = workspace.getChildren(); + PermissionPointTreeNode workspaceNode = null; + for (BasicDictTreeResp terminal : terminals) { + //有对应权限点 则建立上级 + List childrenNodes = mappingNode.get(terminal.getCode()); + if (CollectionUtil.isNotEmpty(childrenNodes)) { + PermissionPointTreeNode terminalTree = new PermissionPointTreeNode(); + terminalTree.setPermissionName(terminal.getName()); + terminalTree.setCode(terminal.getCode()); + terminalTree.setChildren(childrenNodes); + if (workspaceNode == null) { + List terminalChildren = new ArrayList<>(); + workspaceNode = new PermissionPointTreeNode(); + workspaceNode.setPermissionName(workspace.getName()); + workspaceNode.setChildren(terminalChildren); + } + workspaceNode.getChildren().add(terminalTree); + } + } + if (workspaceNode != null) { + result.add(workspaceNode); + } + } + return result; } + private void workspace2Terminal(PermissionPointTreeQueryReq request) { + if (CollectionUtil.isNotEmpty(request.getWorkspaceType())) { + List terminals = new ArrayList<>(); + BasicDictQueryReq dictReq = new BasicDictQueryReq(); + for (String workSpaceType : request.getWorkspaceType()) { + dictReq.setWorkspaceType(DictWorkSpaceTypeEnum.getByValue(workSpaceType)); + dictReq.setType(DictTypeFiledEnum.TERMINAL); + List dictList = saasBasicDictDao.getBasicDictNodeList(dictReq); + terminals.addAll(dictList.stream().map(BasicDictNodeResp::getCode).collect(Collectors.toList())); + } + request.setTerminalList(terminals); + } + } + private List filterTreeNode(PermissionPointTreeQueryReq request, List treeList) { //过滤条件 boolean needFilter = StrUtil.isNotBlank(request.getKeyword()) diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java index ace2ed4a..882ff203 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java @@ -40,8 +40,10 @@ public class PermissionPointTest { @Test public void testListTreeNode() { PermissionPointTreeQueryReq request = new PermissionPointTreeQueryReq(); - request.setParentId(354L); - request.setKeyword("合同"); + //request.setParentId(354L); + request.setKeyword("预警"); + //request.setWorkspaceType(Arrays.asList("ent")); + request.setTerminalList(Arrays.asList("NT_CMS_WEB_ENT_ZB")); ApiResult> result = controller.listTreeNodes(request); System.out.println("---------------"); System.out.println(JSON.toJSONString(result, SerializerFeature.DisableCircularReferenceDetect)); From d4099a66ddb4e929bf864c1981c5bcb91baec5a1 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Mon, 11 Sep 2023 17:33:37 +0800 Subject: [PATCH 067/186] =?UTF-8?q?fix(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=BF=87=E6=BB=A4=E5=AF=B9=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/server/service/impl/PermissionPointServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index dd5b2615..491f4a38 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -92,7 +92,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { } //按terminal分组 - Map> mappingNode = treeList.stream() + Map> mappingNode = nodesResult.stream() .collect(Collectors.groupingBy(PermissionPointTreeNode::getTerminal)); //构建workspace-terminal工作台层级 List dictList = saasBasicDictService.getBasicDictNodeTree(DictTypeFiledEnum.TERMINAL).getData(); From 25b309a1a68a050df0ff662e6b95fad293dbe16a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Mon, 11 Sep 2023 17:52:47 +0800 Subject: [PATCH 068/186] =?UTF-8?q?=E9=AA=8C=E8=AF=81=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=B8=85=E6=B4=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/server/TyrApplication.java | 48 ++++++++++++------- .../tyr/server}/job/OMSRoleJobHandler.java | 39 +++++++++++---- 2 files changed, 61 insertions(+), 26 deletions(-) rename tyr-server/src/main/java/{ => cn/axzo/tyr/server}/job/OMSRoleJobHandler.java (80%) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/TyrApplication.java b/tyr-server/src/main/java/cn/axzo/tyr/server/TyrApplication.java index 0609197b..2b251373 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/TyrApplication.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/TyrApplication.java @@ -1,11 +1,12 @@ package cn.axzo.tyr.server; +import cn.hutool.extra.spring.SpringUtil; import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; +import cn.axzo.tyr.server.job.OMSRoleJobHandler; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; -import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.env.Environment; import org.springframework.scheduling.annotation.EnableAsync; @@ -21,22 +22,33 @@ public class TyrApplication { ConfigurableApplicationContext run = SpringApplication.run(TyrApplication.class, args); Environment env = run.getEnvironment(); log.info( - "--------------------------------------------------------------------------------------------------------------------\n" + - "Application 【{}】 is running on 【{}】 environment!\n" + - "Api Local: \thttp://127.0.0.1:{}\n" + - "Mysql: \t{}\t username:{}\n" + - "Redis: \t{}:{}\t database:{}\n" + - "RabbitMQ: \t{}\t username:{}", - env.getProperty("spring.application.name"), - env.getProperty("spring.profiles.active"), - env.getProperty("server.port"), - env.getProperty("spring.datasource.url"), - env.getProperty("spring.datasource.username"), - env.getProperty("spring.redis.host"), - env.getProperty("spring.redis.port"), - env.getProperty("spring.redis.database"), - env.getProperty("spring.rabbitmq.addresses"), - env.getProperty("spring.rabbitmq.username") + - "\n----------------------------------------------------------"); + "--------------------------------------------------------------------------------------------------------------------\n" + + "Application 【{}】 is running on 【{}】 environment!\n" + + "Api Local: \thttp://127.0.0.1:{}\n" + + "Mysql: \t{}\t username:{}\n" + + "Redis: \t{}:{}\t database:{}\n" + + "RabbitMQ: \t{}\t username:{}", + env.getProperty("spring.application.name"), + env.getProperty("spring.profiles.active"), + env.getProperty("server.port"), + env.getProperty("spring.datasource.url"), + env.getProperty("spring.datasource.username"), + env.getProperty("spring.redis.host"), + env.getProperty("spring.redis.port"), + env.getProperty("spring.redis.database"), + env.getProperty("spring.rabbitmq.addresses"), + env.getProperty("spring.rabbitmq.username") + + "\n----------------------------------------------------------"); + +// try { +// test(); +// } catch (Exception e) { +// e.printStackTrace(); +// } } + +// public static void test() throws Exception { +// OMSRoleJobHandler executor = SpringUtil.getBean(OMSRoleJobHandler.class); +// executor.execute(null); +// } } diff --git a/tyr-server/src/main/java/job/OMSRoleJobHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java similarity index 80% rename from tyr-server/src/main/java/job/OMSRoleJobHandler.java rename to tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java index 3a41b6ca..fb33d70b 100644 --- a/tyr-server/src/main/java/job/OMSRoleJobHandler.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java @@ -1,19 +1,16 @@ -package job; +package cn.axzo.tyr.server.job; import java.util.ArrayList; -import java.util.Date; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; -import cn.axzo.tyr.client.model.DictTypeFiledEnum; import cn.axzo.tyr.server.repository.entity.*; import cn.axzo.tyr.server.repository.service.*; -import cn.axzo.tyr.server.service.RoleService; -import cn.axzo.tyr.server.service.SaasRoleGroupService; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.handler.IJobHandler; import com.xxl.job.core.handler.annotation.XxlJob; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -60,7 +57,7 @@ public class OMSRoleJobHandler extends IJobHandler { */ @Transactional // 在一个事务里面做,一起提交 @Override - @XxlJob("chengDuSubwayLogRetry") + @XxlJob("OMSRoleJobHandler") public ReturnT execute(String s) throws Exception { // 创建角色分组 SaasRoleGroup roleGroup = new SaasRoleGroup(); @@ -68,7 +65,10 @@ public class OMSRoleJobHandler extends IJobHandler { roleGroup.setName("管理员"); roleGroupDao.save(roleGroup); // 查询OMS的角色 workspaceType=6 OMS的角色 - List oldRole = roleDao.lambdaQuery().eq(SaasRole::getWorkspaceType, 6).list(); + List oldRole = roleDao.lambdaQuery() + .eq(SaasRole::getWorkspaceType, 6) + .notIn(SaasRole::getRoleType,"super_admin") + .list(); // 重置老角色多余的字段 oldRole.forEach(e -> { e.setWorkspaceId(-1l); @@ -90,14 +90,37 @@ public class OMSRoleJobHandler extends IJobHandler { return saasRoleGroupRelation; }).collect(Collectors.toList()); roleGroupRelationDao.saveBatch(roleGroupRelation); - // 查询角色关联的角色,打包成新的权限集 ArrayList deletePgroup = new ArrayList<>(); oldRole.forEach(role -> { List pgroupRoleRelation = pgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, role.getId()).list(); + if (CollectionUtils.isEmpty(pgroupRoleRelation)) { + return; + } List permissionGroup = saasPermissionGroupDao.lambdaQuery().in(BaseEntity::getId, pgroupRoleRelation.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())).list(); + if (CollectionUtils.isEmpty(permissionGroup)) { + return; + } List pgroupPermissionRelation = pgroupPermissionRelationDao.lambdaQuery().in(SaasPgroupPermissionRelation::getGroupId, permissionGroup.stream().map(BaseEntity::getId).collect(Collectors.toList())).list(); + if (CollectionUtils.isEmpty(pgroupPermissionRelation)) { + // 如果没查到权限则表示当前权限集是无意义的,删掉 + permissionGroup.forEach(e -> e.setIsDelete(e.getId())); + saasPermissionGroupDao.updateBatchById(permissionGroup); + // 删除角色权限集关联关系 + pgroupRoleRelation.forEach(e -> e.setIsDelete(e.getId())); + pgroupRoleRelationDao.updateBatchById(pgroupRoleRelation); + return; + } List feature = featureDao.lambdaQuery().in(BaseEntity::getId, pgroupPermissionRelation.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())).list(); + if (CollectionUtils.isEmpty(feature)) { + // 如果没查到权限则表示当前权限集是无意义的,删掉 + permissionGroup.forEach(e -> e.setIsDelete(e.getId())); + saasPermissionGroupDao.updateBatchById(permissionGroup); + // 删除角色权限集关联关系 + pgroupRoleRelation.forEach(e -> e.setIsDelete(e.getId())); + pgroupRoleRelationDao.updateBatchById(pgroupRoleRelation); + return; + } // 创建新的权限集 SaasPermissionGroup saasPermissionGroup = new SaasPermissionGroup(); saasPermissionGroup.setName("通用权限"); From f4e4c0fdcfb8e53ec4231b39390b8e19d483ca5c Mon Sep 17 00:00:00 2001 From: yangsong Date: Mon, 11 Sep 2023 18:17:52 +0800 Subject: [PATCH 069/186] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E8=AF=A6=E6=83=85=EF=BC=8C=E5=88=86=E7=BB=84=E8=A7=92=E8=89=B2?= =?UTF-8?q?id=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/feign/SaasRoleApi.java | 3 +- .../tyr/client/feign/SaasRoleGroupApi.java | 2 +- .../model/enums/PermissionGroupType.java | 29 +++++++++++++++ .../client/model/enums/RoleGroupScope.java | 29 +++++++++++++++ .../model/req/QuerySaasRoleGroupReq.java | 5 ++- .../client/model/req/QuerySaasRoleReq.java | 2 ++ .../controller/role/SaasRoleController.java | 11 +++++- .../server/service/impl/RoleServiceImpl.java | 8 ++--- .../impl/SaasRoleGroupServiceImpl.java | 35 ++++++++++++++----- 9 files changed, 107 insertions(+), 17 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionGroupType.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/RoleGroupScope.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java index 51314ede..e72b2b23 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java @@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; +import javax.validation.constraints.NotNull; import java.util.List; import java.util.Map; @@ -31,7 +32,7 @@ public interface SaasRoleApi { * 根据id查询详情 */ @PostMapping("/api/saasRole/getById") - ApiResult getById(@RequestParam(required = true) Long id); + ApiResult getById(@RequestParam(required = true) @NotNull Long id); /** * 获取角色列表 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java index 174cb817..7f2886f4 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java @@ -2,8 +2,8 @@ package cn.axzo.tyr.client.feign; import cn.axzo.framework.domain.web.result.ApiListResult; import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; +import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionGroupType.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionGroupType.java new file mode 100644 index 00000000..6a92fd64 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionGroupType.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.client.model.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +@Getter +@AllArgsConstructor +public enum PermissionGroupType { + COMMON(1, "通用"), + Special (0, "例外"), + ; + + private Integer code; + private String desc; + + private static final Map MAPPING = new HashMap<>(); + static { + for (PermissionGroupType type : PermissionGroupType.values()) { + MAPPING.put(type.code, type); + } + } + + public static PermissionGroupType apply(Integer code) { + return code == null ? null :MAPPING.get(code); + } +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/RoleGroupScope.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/RoleGroupScope.java new file mode 100644 index 00000000..ad610bf1 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/RoleGroupScope.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.client.model.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +@Getter +@AllArgsConstructor +public enum RoleGroupScope { + ALL(1, "全部"), + SPECIFY_ENTERPRISE_TYPE(2, "指定企业类型"), + ; + + private Integer code; + private String desc; + + private static final Map MAPPING = new HashMap<>(); + static { + for (RoleGroupScope type : RoleGroupScope.values()) { + MAPPING.put(type.code, type); + } + } + + public static RoleGroupScope apply(Integer code) { + return code == null ? null :MAPPING.get(code); + } +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java index 22b56ae0..a9fdbcde 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java @@ -34,5 +34,8 @@ public class QuerySaasRoleGroupReq { * 单位类型字典code */ private List ouTypeCode; - + /** + * 被那些角色使用到的分组 + */ + private List roleIds; } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java index 5438c865..2527491b 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java @@ -37,4 +37,6 @@ public class QuerySaasRoleReq { * 分组id */ private List sassRoleGroupIds; + + private Integer isCommon; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java index e030d5d9..79f018e9 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java @@ -1,13 +1,17 @@ package cn.axzo.tyr.server.controller.role; +import cn.axzo.framework.domain.web.BizException; +import cn.axzo.framework.domain.web.code.BaseCode; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.SaasRoleApi; import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.server.service.RoleService; +import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RestController; @@ -36,7 +40,12 @@ public class SaasRoleController implements SaasRoleApi { @Override public ApiResult getById(Long id) { - return null; + QuerySaasRoleReq query = QuerySaasRoleReq.builder().ids(Lists.newArrayList(id)).build(); + List saasRoles = roleService.query(query); + if (CollectionUtils.isNotEmpty(saasRoles)) { + return ApiResult.ok(saasRoles.get(0)); + } + throw new BizException(BaseCode.BAD_REQUEST, "未查询到角色"); } @Override diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 40a33130..4c0ff699 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -55,7 +55,7 @@ public class RoleServiceImpl implements RoleService { if (CollectionUtils.isEmpty(roleIds)) { return new ArrayList<>(); } - return getByIds(roleIds); + return getByIds(roleIds, null); } /** @@ -63,7 +63,7 @@ public class RoleServiceImpl implements RoleService { * * @return */ - public List getByIds(List roleIds) { + public List getByIds(List roleIds, Integer isCommon) { if (CollectionUtils.isEmpty(roleIds)) { return new ArrayList<>(); } @@ -78,7 +78,7 @@ public class RoleServiceImpl implements RoleService { // 转map pgrouRelationMap = saasPgroupRoleRelations.stream().collect(Collectors.groupingBy(SaasPgroupRoleRelation::getRoleId)); // 查询权限集 - pGroupMap = permissionGroupService.query(QuerySaasPermissionGroupReq.builder() + pGroupMap = permissionGroupService.query(QuerySaasPermissionGroupReq.builder().isCommon(isCommon) .ids(saasPgroupRoleRelations.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())) .build()) // 转map @@ -141,7 +141,7 @@ public class RoleServiceImpl implements RoleService { .eq(StringUtils.isNotBlank(req.getRoleType()), SaasRole::getRoleType, req.getRoleType()) .orderByDesc(BaseEntity::getId) .list(); - return getByIds(list.stream().map(BaseEntity::getId).collect(Collectors.toList())); + return getByIds(list.stream().map(BaseEntity::getId).collect(Collectors.toList()), req.getIsCommon()); } @Override diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java index 7a76af4f..d7dfa8c2 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java @@ -30,21 +30,38 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { @Override public List getList(QuerySaasRoleGroupReq req) { + if (CollectionUtils.isNotEmpty(req.getRoleIds())) { + List saasRoleGroupRelations = saasRoleGroupRelationDao.lambdaQuery() + .in(SaasRoleGroupRelation::getRoleId, req.getRoleIds()) + .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + List groupIds = saasRoleGroupRelations.stream().map(SaasRoleGroupRelation::getSaasRoleGroupId).distinct().collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(req.getIds())) { + req.getIds().retainAll(groupIds); + } else { + req.setIds(groupIds); + } + if (CollectionUtils.isEmpty(req.getIds())) { + return new ArrayList<>(); + } + } + List groups = saasRoleGroupDao.query(req); if (CollectionUtils.isEmpty(groups)) { return new ArrayList<>(); } - List saasRoleGroupRelations = saasRoleGroupRelationDao.lambdaQuery().in(SaasRoleGroupRelation::getSaasRoleGroupId, groups.stream().map(SaasRoleGroup::getId)) + List saasRoleGroupRelations = saasRoleGroupRelationDao.lambdaQuery() + .in(SaasRoleGroupRelation::getSaasRoleGroupId, groups.stream().map(SaasRoleGroup::getId)) .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); Map> groupRoleMap = saasRoleGroupRelations.stream().collect(Collectors.groupingBy(SaasRoleGroupRelation::getSaasRoleGroupId, Collectors.mapping(SaasRoleGroupRelation::getRoleId, Collectors.toList()))); - List results = groups.stream().map(e -> { - SaasRoleGroupVO target = BeanUtil.copyProperties(e, SaasRoleGroupVO.class); - if (StringUtils.isNotBlank(e.getOuTypeCode())) { - target.setOuTypeCode(Arrays.stream(e.getOuTypeCode().split(",")).filter(StringUtils::isNotBlank).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList())); - } - target.setRoleIds(groupRoleMap.get(e.getId())); - return target; - }).collect(Collectors.toList()); + List results = groups.stream() + .map(e -> { + SaasRoleGroupVO target = BeanUtil.copyProperties(e, SaasRoleGroupVO.class); + if (StringUtils.isNotBlank(e.getOuTypeCode())) { + target.setOuTypeCode(Arrays.stream(e.getOuTypeCode().split(",")).filter(StringUtils::isNotBlank).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList())); + } + target.setRoleIds(groupRoleMap.get(e.getId())); + return target; + }).collect(Collectors.toList()); return results; } From 3569c1b9dba52699044bdb0035285107545fa1c3 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Mon, 11 Sep 2023 18:21:31 +0800 Subject: [PATCH 070/186] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/feign/SaasBasicDictApi.java | 2 +- .../dict/request/BasicDictCreateReq.java | 22 ++++----- .../model/dict/request/BasicDictQueryReq.java | 4 ++ .../server/repository/SaasBasicDictDao.java | 1 + .../impl/SaasBasicDictServiceImpl.java | 45 +++++++++++++++++++ 5 files changed, 62 insertions(+), 12 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java index fbbaafb4..92096d56 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java @@ -57,7 +57,7 @@ public interface SaasBasicDictApi { /** * 添加字典 * - * @param req 其中name同一个父级节点,名称不能重复,codeMap全局唯一 + * @param req 其中name,code在同一个父级节点下不能重复 * @return 节点id */ @PostMapping("api/dict/create") diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictCreateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictCreateReq.java index 2521fcd1..c3bfa65f 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictCreateReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictCreateReq.java @@ -1,9 +1,12 @@ package cn.axzo.tyr.client.model.dict.request; +import cn.axzo.tyr.client.common.annotation.EnumValidator; +import cn.axzo.tyr.client.model.DictTypeFiledEnum; import lombok.Data; import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; /** * @author: chenwenjian @@ -15,22 +18,19 @@ import javax.validation.constraints.NotBlank; @Data public class BasicDictCreateReq { - /** - * 工作台类型,"ent", "proj", "oms" - */ - @NotBlank(message = "工作台类型不能为空") - private String workspaceType; - - /** - * 类型,"ouType", "terminal" - */ - private String type; - /** * 所属上级节点id */ + @NotNull(message = "所属上级不能为空") private Long parentId; + /** + * type类型不能为空 + */ + @NotNull(message = "type类型不能为空") + @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") + private DictTypeFiledEnum type; + /** * 字典名称 */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java index 6027b314..4065c163 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java @@ -52,4 +52,8 @@ public class BasicDictQueryReq { */ private Boolean status; + /** + * 层级 + */ + private Integer level; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java index 2a7b6eb4..affb17c5 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java @@ -34,6 +34,7 @@ public class SaasBasicDictDao extends ServiceImpl basicDictList = queryChainWrapper.orderByDesc(SaasBasicDict::getSort).list(); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java index 5992d82b..dd0d4490 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -1,14 +1,18 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.BeanMapper; +import cn.axzo.framework.domain.ServiceException; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.DictTypeFiledEnum; import cn.axzo.tyr.client.model.dict.request.*; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; import cn.axzo.tyr.server.repository.SaasBasicDictDao; +import cn.axzo.tyr.server.repository.entity.SaasBasicDict; import cn.axzo.tyr.server.service.SaasBasicDictService; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.RandomUtil; +import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -103,8 +107,49 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { return ApiResult.ok(saasBasicDictDao.getBasicDictNode(req)); } + /** + * 创建字典节点 + * @param req + * @return + */ @Override public ApiResult create(BasicDictCreateReq req) { + SaasBasicDict parent = saasBasicDictDao.getById(req.getParentId()); + if (Objects.isNull(parent)) { + throw new ServiceException("不存在给定的上级节点"); + } + // 获取所属父节点下所有同级节点,name和code在同级节点中不能重复 + List brotherNodeList = saasBasicDictDao.getBasicDictNodeList( + BasicDictQueryReq.builder() + .parentId(req.getParentId()) + .type(req.getType()) + .build()); + brotherNodeList.forEach(n -> { + if (n.getName().equals(req.getName())) { + throw new ServiceException("该节点下已存在名称为" + req.getName() + "的节点"); + } + if (n.getCode().equals(req.getCode())) { + throw new ServiceException("该节点下已存在code为" + req.getName() + "的节点"); + } + }); + int count = 0; + for (int i = 0; i < 3; i++) { + // 生成唯一的unique_code,若生成了与数据库中已存在uniqueCode + String uniqueCode = RandomUtil.randomString(10); + SaasBasicDict saasBasicDict = BeanMapper.copyBean(req, SaasBasicDict.class, (b, s) -> { + s.setWorkspaceType(parent.getWorkspaceType()); + s.setType(b.getType().getValue()); + s.setUniqueCode(uniqueCode); + s.setLevel(parent.getLevel()+1); + s.setPath(String.join(",",parent.getPath(),uniqueCode)); + }); + try{ + boolean save = saasBasicDictDao.save(saasBasicDict); + }catch (MybatisPlusException e){ +// if () + } + } + return null; } From 23c223dda93586bd3d429010f16ee6517854eb1a Mon Sep 17 00:00:00 2001 From: zhansihu Date: Mon, 11 Sep 2023 18:28:19 +0800 Subject: [PATCH 071/186] =?UTF-8?q?fix(=E6=9D=83=E9=99=90=E7=82=B9):=20?= =?UTF-8?q?=E5=BF=BD=E7=95=A5=E4=B8=8D=E9=9C=80=E8=A6=81=E7=9A=84=E5=B1=9E?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/model/permission/PermissionPointTreeNode.java | 6 ++++++ .../tyr/server/service/impl/PermissionPointServiceImpl.java | 4 +--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java index cb31a7c5..e8b71ffc 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java @@ -1,6 +1,8 @@ package cn.axzo.tyr.client.model.permission; import cn.axzo.basics.common.model.IBaseTree; +import com.alibaba.fastjson.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import java.util.List; @@ -51,21 +53,25 @@ public class PermissionPointTreeNode implements IBaseTree children; + @JsonIgnore @Override public Long getNodeCode() { return permissionPointId; } + @JsonIgnore @Override public Long getParentNodeCode() { return parentId; } + @JsonIgnore @Override public List getNodeChildren() { return children; } + @JsonIgnore @Override public void setNodeChildren(List nodeChildren) { this.children = nodeChildren; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 491f4a38..d498cfe8 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -96,7 +96,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { .collect(Collectors.groupingBy(PermissionPointTreeNode::getTerminal)); //构建workspace-terminal工作台层级 List dictList = saasBasicDictService.getBasicDictNodeTree(DictTypeFiledEnum.TERMINAL).getData(); - //遍历所有workspace和terminal + //遍历所有workspace和terminal-构建顶层两级 List result = new ArrayList<>(); for (BasicDictTreeResp workspace : dictList) { List terminals = workspace.getChildren(); @@ -122,8 +122,6 @@ public class PermissionPointServiceImpl implements PermissionPointService { result.add(workspaceNode); } } - - return result; } From a0d55bd61aa4ee8397415790710622d2740d565e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Mon, 11 Sep 2023 18:36:32 +0800 Subject: [PATCH 072/186] =?UTF-8?q?fix=20bug:=E8=A7=92=E8=89=B2=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E9=80=BB=E8=BE=91=E6=8B=BC=E6=8E=A5ouTypeCode?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/service/SaasRoleGroupDao.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java index 47350d57..5fdc2ffb 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java @@ -9,6 +9,7 @@ import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; import cn.axzo.tyr.server.repository.mapper.SaasPgroupRoleRelationMapper; import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupMapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -34,12 +35,14 @@ public class SaasRoleGroupDao extends ServiceImpl eq = this.lambdaQuery() + .in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId, req.getIds()) + .in(CollectionUtils.isNotEmpty(req.getWorkspaceTypeCode()), SaasRoleGroup::getWorkspaceTypeCode, req.getWorkspaceTypeCode()) + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value); + if(CollectionUtils.isNotEmpty(req.getOuTypeCode())){ + eq.last(" AND (" + condition.substring(0, condition.length() - 2) + ")"); + } + return eq.list(); } } From 958ea432c5d95866ce34108e544cc01bad9993f6 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Mon, 11 Sep 2023 19:51:08 +0800 Subject: [PATCH 073/186] =?UTF-8?q?fix=20-=20=E8=B0=83=E6=95=B4=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E4=B8=8E=E6=9D=83=E9=99=90=E7=82=B9=E5=85=B3=E8=81=94?= =?UTF-8?q?=E5=85=B3=E7=B3=BB=E7=9A=84=E5=AD=98=E5=82=A8=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/ProductFeatureRelationServiceImpl.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java index 6a1ef569..cbd35b81 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java @@ -8,6 +8,7 @@ import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO; import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation; import cn.axzo.tyr.server.repository.service.SaasProductModuleFeatureRelationDao; import cn.axzo.tyr.server.service.ProductFeatureRelationService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -44,7 +45,10 @@ public class ProductFeatureRelationServiceImpl implements ProductFeatureRelation @Transactional(rollbackFor = Exception.class) public ApiResult updateFeatureRelation(List req) { List productIds = req.stream().map(ProductFeatureRelationUpdateReq::getProductModuleId).distinct().collect(Collectors.toList()); - saasProductModuleFeatureRelationDao.removeByIds(productIds); + if(!CollectionUtils.isEmpty(productIds)) { + saasProductModuleFeatureRelationDao.remove(new LambdaQueryWrapper() + .in(SaasProductModuleFeatureRelation::getProductModuleId, productIds)); + } List saveList = new ArrayList<>(); req.forEach(i -> i.getFeatureIds().forEach(featureId -> { SaasProductModuleFeatureRelation relation = new SaasProductModuleFeatureRelation(); From aa7a9a1a9f2dcbf27708a467de4775b3626e0401 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Mon, 11 Sep 2023 20:35:42 +0800 Subject: [PATCH 074/186] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/server/job/OMSRoleJobHandler.java | 80 +++++++++++++++---- 1 file changed, 64 insertions(+), 16 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java index fb33d70b..73b0eb41 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java @@ -3,6 +3,7 @@ package cn.axzo.tyr.server.job; import java.util.ArrayList; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.model.DictWorkSpaceTypeEnum; import cn.axzo.tyr.server.repository.entity.*; import cn.axzo.tyr.server.repository.service.*; import com.xxl.job.core.biz.model.ReturnT; @@ -50,7 +51,6 @@ public class OMSRoleJobHandler extends IJobHandler { /** * 清洗OMS角色相关数据(注:先通过SQL检查和清除脏数据,要不然无法保证各个实体的关联关系) - * * @param s * @return * @throws Exception @@ -62,12 +62,15 @@ public class OMSRoleJobHandler extends IJobHandler { // 创建角色分组 SaasRoleGroup roleGroup = new SaasRoleGroup(); roleGroup.setWorkspaceTypeCode("6"); + roleGroup.setOuTypeCode("7"); roleGroup.setName("管理员"); + roleGroup.setWorkspaceId(-1l); + roleGroup.setOuId(-1l); roleGroupDao.save(roleGroup); // 查询OMS的角色 workspaceType=6 OMS的角色 List oldRole = roleDao.lambdaQuery() .eq(SaasRole::getWorkspaceType, 6) - .notIn(SaasRole::getRoleType,"super_admin") + .notIn(SaasRole::getRoleType, "super_admin") .list(); // 重置老角色多余的字段 oldRole.forEach(e -> { @@ -99,26 +102,59 @@ public class OMSRoleJobHandler extends IJobHandler { } List permissionGroup = saasPermissionGroupDao.lambdaQuery().in(BaseEntity::getId, pgroupRoleRelation.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())).list(); if (CollectionUtils.isEmpty(permissionGroup)) { + // 删除角色权限集关联关系 + pgroupRoleRelation.forEach(e -> { + pgroupRoleRelationDao.lambdaUpdate() + .eq(BaseEntity::getId, e.getId()) + .set(BaseEntity::getIsDelete, e.getId()) + .update(); + }); return; } List pgroupPermissionRelation = pgroupPermissionRelationDao.lambdaQuery().in(SaasPgroupPermissionRelation::getGroupId, permissionGroup.stream().map(BaseEntity::getId).collect(Collectors.toList())).list(); if (CollectionUtils.isEmpty(pgroupPermissionRelation)) { // 如果没查到权限则表示当前权限集是无意义的,删掉 - permissionGroup.forEach(e -> e.setIsDelete(e.getId())); - saasPermissionGroupDao.updateBatchById(permissionGroup); + permissionGroup.forEach(e -> { + // 只能通过这种方式删除 update不能删除 + saasPermissionGroupDao.lambdaUpdate() + .eq(BaseEntity::getId, e.getId()) + .set(BaseEntity::getIsDelete, e.getId()) + .update(); + }); // 删除角色权限集关联关系 - pgroupRoleRelation.forEach(e -> e.setIsDelete(e.getId())); - pgroupRoleRelationDao.updateBatchById(pgroupRoleRelation); + pgroupRoleRelation.forEach(e -> { + pgroupRoleRelationDao.lambdaUpdate() + .eq(BaseEntity::getId, e.getId()) + .set(BaseEntity::getIsDelete, e.getId()) + .update(); + }); return; } List feature = featureDao.lambdaQuery().in(BaseEntity::getId, pgroupPermissionRelation.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())).list(); if (CollectionUtils.isEmpty(feature)) { + // 删除权限集权限关联关系 + pgroupPermissionRelation.forEach(e -> { + // 只能通过这种方式删除 update不能删除 + pgroupPermissionRelationDao.lambdaUpdate() + .eq(BaseEntity::getId, e.getId()) + .set(BaseEntity::getIsDelete, e.getId()) + .update(); + }); // 如果没查到权限则表示当前权限集是无意义的,删掉 - permissionGroup.forEach(e -> e.setIsDelete(e.getId())); - saasPermissionGroupDao.updateBatchById(permissionGroup); + permissionGroup.forEach(e -> { + // 只能通过这种方式删除 update不能删除 + saasPermissionGroupDao.lambdaUpdate() + .eq(BaseEntity::getId, e.getId()) + .set(BaseEntity::getIsDelete, e.getId()) + .update(); + }); // 删除角色权限集关联关系 - pgroupRoleRelation.forEach(e -> e.setIsDelete(e.getId())); - pgroupRoleRelationDao.updateBatchById(pgroupRoleRelation); + pgroupRoleRelation.forEach(e -> { + pgroupRoleRelationDao.lambdaUpdate() + .eq(BaseEntity::getId, e.getId()) + .set(BaseEntity::getIsDelete, e.getId()) + .update(); + }); return; } // 创建新的权限集 @@ -148,15 +184,27 @@ public class OMSRoleJobHandler extends IJobHandler { pgroupPermissionRelationDao.save(saasPgroupPermissionRelation); }); // 删除老的权限集权限关联关系 - pgroupPermissionRelation.forEach(e -> e.setIsDelete(e.getId())); - pgroupPermissionRelationDao.updateBatchById(pgroupPermissionRelation); + pgroupPermissionRelation.forEach(e -> { + pgroupPermissionRelationDao.lambdaUpdate() + .eq(BaseEntity::getId, e.getId()) + .set(BaseEntity::getId, e.getId()) + .update(); + }); // 删除老的角色权限集关联关系 - pgroupRoleRelation.forEach(e -> e.setIsDelete(e.getId())); - pgroupRoleRelationDao.updateBatchById(pgroupRoleRelation); + pgroupRoleRelation.forEach(e -> { + pgroupRoleRelationDao.lambdaUpdate() + .eq(BaseEntity::getId, e.getId()) + .set(BaseEntity::getId, e.getId()) + .update(); + }); }); // 删除权限集 - deletePgroup.forEach(e -> e.setIsDelete(e.getId())); - saasPermissionGroupDao.updateBatchById(deletePgroup); + deletePgroup.forEach(e -> { + saasPermissionGroupDao.lambdaUpdate() + .eq(BaseEntity::getId, e.getId()) + .set(BaseEntity::getId, e.getId()) + .update(); + }); return ReturnT.SUCCESS; } } From de247b8b38aa4915fe9217efa6dec7a5f9775b69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Mon, 11 Sep 2023 20:40:02 +0800 Subject: [PATCH 075/186] clean --- .../main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java index 73b0eb41..3d0f0e05 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java @@ -1,9 +1,6 @@ package cn.axzo.tyr.server.job; -import java.util.ArrayList; - import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; -import cn.axzo.tyr.client.model.DictWorkSpaceTypeEnum; import cn.axzo.tyr.server.repository.entity.*; import cn.axzo.tyr.server.repository.service.*; import com.xxl.job.core.biz.model.ReturnT; @@ -16,6 +13,7 @@ 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.stream.Collectors; From da5a037f32cdc1502315a81ab6d4b3c00189c67d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Mon, 11 Sep 2023 20:59:08 +0800 Subject: [PATCH 076/186] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=BD=AF=E5=88=A0?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java index 3d0f0e05..e63fd03f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java @@ -185,14 +185,14 @@ public class OMSRoleJobHandler extends IJobHandler { pgroupPermissionRelation.forEach(e -> { pgroupPermissionRelationDao.lambdaUpdate() .eq(BaseEntity::getId, e.getId()) - .set(BaseEntity::getId, e.getId()) + .set(BaseEntity::getIsDelete, e.getId()) .update(); }); // 删除老的角色权限集关联关系 pgroupRoleRelation.forEach(e -> { pgroupRoleRelationDao.lambdaUpdate() .eq(BaseEntity::getId, e.getId()) - .set(BaseEntity::getId, e.getId()) + .set(BaseEntity::getIsDelete, e.getId()) .update(); }); }); @@ -200,7 +200,7 @@ public class OMSRoleJobHandler extends IJobHandler { deletePgroup.forEach(e -> { saasPermissionGroupDao.lambdaUpdate() .eq(BaseEntity::getId, e.getId()) - .set(BaseEntity::getId, e.getId()) + .set(BaseEntity::getIsDelete, e.getId()) .update(); }); return ReturnT.SUCCESS; From 800806f1efa6b794ae934dd02053d09b7a6802d2 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Tue, 12 Sep 2023 09:36:17 +0800 Subject: [PATCH 077/186] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=A0=91=E5=BD=A2?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/feign/SaasBasicDictApi.java | 8 ++--- .../dict/SaasBasicDictController.java | 5 ++- .../server/service/SaasBasicDictService.java | 3 +- .../impl/SaasBasicDictServiceImpl.java | 35 +++++++++++-------- 4 files changed, 25 insertions(+), 26 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java index 92096d56..221174f4 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasBasicDictApi.java @@ -1,8 +1,6 @@ package cn.axzo.tyr.client.feign; import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.tyr.client.common.annotation.EnumValidator; -import cn.axzo.tyr.client.model.DictTypeFiledEnum; import cn.axzo.tyr.client.model.dict.request.*; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; @@ -37,13 +35,11 @@ public interface SaasBasicDictApi { /** * 获取字典树,需要单侧树时才传type * - * @param type + * @param req * @return */ @PostMapping("api/dict/node-tree") - ApiResult> getBasicDictNodeTree( - @EnumValidator(enumClass = DictTypeFiledEnum.class, message = "枚举类型错误") - DictTypeFiledEnum type); + ApiResult> getBasicDictNodeTree(@RequestBody @Validated BasicDictQueryReq req); /** * 通过type和code获取字典节点详情 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java index 977009ab..40fb173f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java @@ -2,7 +2,6 @@ package cn.axzo.tyr.server.controller.dict; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.SaasBasicDictApi; -import cn.axzo.tyr.client.model.DictTypeFiledEnum; import cn.axzo.tyr.client.model.dict.request.*; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; @@ -33,8 +32,8 @@ public class SaasBasicDictController implements SaasBasicDictApi { } @Override - public ApiResult> getBasicDictNodeTree(DictTypeFiledEnum type) { - return saasBasicDictService.getBasicDictNodeTree(type); + public ApiResult> getBasicDictNodeTree(BasicDictQueryReq req) { + return saasBasicDictService.getBasicDictNodeTree(req); } @Override diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java index 5b481ec3..0335dc8c 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java @@ -1,7 +1,6 @@ package cn.axzo.tyr.server.service; import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.tyr.client.model.DictTypeFiledEnum; import cn.axzo.tyr.client.model.dict.request.*; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; @@ -18,7 +17,7 @@ import java.util.List; public interface SaasBasicDictService { ApiResult> getBasicDictNodeList(BasicDictQueryReq req); - ApiResult> getBasicDictNodeTree(DictTypeFiledEnum type); + ApiResult> getBasicDictNodeTree(BasicDictQueryReq req); ApiResult getById(Long id); ApiResult getBasicDictNode(BasicDictNodeReq req); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java index dd0d4490..2fde94c3 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -3,7 +3,6 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.BeanMapper; import cn.axzo.framework.domain.ServiceException; import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.tyr.client.model.DictTypeFiledEnum; import cn.axzo.tyr.client.model.dict.request.*; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; @@ -45,20 +44,13 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { /** * 获取节点树 * - * @param type + * @param req * @return */ @Override - public ApiResult> getBasicDictNodeTree(DictTypeFiledEnum type) { + public ApiResult> getBasicDictNodeTree(BasicDictQueryReq req) { // 获取所有节点 - List basicDictNodeList = saasBasicDictDao.getBasicDictNodeList(null); - // 单侧树 - if (Objects.nonNull(type)) { - List unilateralTreeNodeList = basicDictNodeList.stream() - .filter(b -> b.getType().equals(type.getValue()) || b.getType().equals(DictTypeFiledEnum.WORKSPACE.getValue())) - .collect(Collectors.toList()); - return ApiResult.ok(constructDictTree(unilateralTreeNodeList)); - } + List basicDictNodeList = saasBasicDictDao.getBasicDictNodeList(req); return ApiResult.ok(constructDictTree(basicDictNodeList)); } @@ -83,6 +75,18 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { root.add(treeNode); } }); + + // 若没有顶级节点(即一级节点),则需要查询一级节点 + if (CollectionUtil.isEmpty(root)) { + List parentIds = nodeList.stream().map(BasicDictNodeResp::getParentId).distinct().collect(Collectors.toList()); + List parentDicts = saasBasicDictDao.listByIds(parentIds); + parentDicts.forEach(s -> { + BasicDictTreeResp parentTreeNode = BeanMapper.copyBean(s, BasicDictTreeResp.class, (s1, b) -> b.setStatus(s1.getStatus() == 1)); + root.add(parentTreeNode); + map.put(parentTreeNode.getId(), parentTreeNode); + }); + } + map.values().forEach(treeNode -> { BasicDictTreeResp parent = map.get(treeNode.getParentId()); if (Objects.nonNull(parent)) { @@ -109,6 +113,7 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { /** * 创建字典节点 + * * @param req * @return */ @@ -140,12 +145,12 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { s.setWorkspaceType(parent.getWorkspaceType()); s.setType(b.getType().getValue()); s.setUniqueCode(uniqueCode); - s.setLevel(parent.getLevel()+1); - s.setPath(String.join(",",parent.getPath(),uniqueCode)); + s.setLevel(parent.getLevel() + 1); + s.setPath(String.join(",", parent.getPath(), uniqueCode)); }); - try{ + try { boolean save = saasBasicDictDao.save(saasBasicDict); - }catch (MybatisPlusException e){ + } catch (MybatisPlusException e) { // if () } } From 07505029879643f91cbc668f7ac8db19257ebc11 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Tue, 12 Sep 2023 09:41:46 +0800 Subject: [PATCH 078/186] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=A0=91=E5=BD=A2?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/PermissionPointServiceImpl.java | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index d498cfe8..c622ce2f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -27,19 +27,11 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; -import static cn.axzo.tyr.server.common.constants.PermissionConstant.FEATURE_BIZ_NO_PREFIX; -import static cn.axzo.tyr.server.common.constants.PermissionConstant.FEATURE_NO_PARENT; -import static cn.axzo.tyr.server.common.constants.PermissionConstant.FEATURE_PATH_DELIMITER; -import static cn.axzo.tyr.server.common.constants.PermissionConstant.FEATURE_TOP_PATH; +import static cn.axzo.tyr.server.common.constants.PermissionConstant.*; /** * 权限点服务实现 @@ -95,7 +87,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { Map> mappingNode = nodesResult.stream() .collect(Collectors.groupingBy(PermissionPointTreeNode::getTerminal)); //构建workspace-terminal工作台层级 - List dictList = saasBasicDictService.getBasicDictNodeTree(DictTypeFiledEnum.TERMINAL).getData(); + List dictList = saasBasicDictService.getBasicDictNodeTree(BasicDictQueryReq.builder().type(DictTypeFiledEnum.TERMINAL).build()).getData(); //遍历所有workspace和terminal-构建顶层两级 List result = new ArrayList<>(); for (BasicDictTreeResp workspace : dictList) { From 1e4cabcfaf2b76b5174dfa35f2d20fa9f04881ae Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Tue, 12 Sep 2023 09:59:24 +0800 Subject: [PATCH 079/186] =?UTF-8?q?update=20-=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E6=97=A0=E7=94=A8=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java | 1 - 1 file changed, 1 deletion(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java index 5717f333..77cfd610 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/ProductApi.java @@ -10,7 +10,6 @@ import cn.axzo.tyr.client.model.product.ProductSearchListReq; import cn.axzo.tyr.client.model.product.ProductSearchPageReq; import cn.axzo.tyr.client.model.product.ProductUpdateReq; import cn.axzo.tyr.client.model.product.ProductVO; -import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; From 61d15ede26290632a1ef6ceada362a63983e89e8 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Tue, 12 Sep 2023 10:40:39 +0800 Subject: [PATCH 080/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=20=E7=BA=A7=E8=81=94=E5=88=A0=E9=99=A4=E5=AD=90=E8=8A=82?= =?UTF-8?q?=E7=82=B9=EF=BC=8C=E5=85=B3=E8=81=94=E5=88=A0=E9=99=A4=E6=9D=83?= =?UTF-8?q?=E9=99=90=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/service/SaasFeatureDao.java | 2 + .../SaasPgroupPermissionRelationDao.java | 7 ++++ .../service/impl/SaasFeatureDaoImpl.java | 5 +++ .../impl/PermissionPointServiceImpl.java | 38 ++++++++++++++++--- .../permission/PermissionPointTest.java | 5 ++- 5 files changed, 50 insertions(+), 7 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasFeatureDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasFeatureDao.java index f99acd18..cd84f261 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasFeatureDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasFeatureDao.java @@ -20,4 +20,6 @@ public interface SaasFeatureDao extends IService { List listByParentId(Long parentId); void updateSort(Long permissionId, int switchIndex); + + List listLikePath(String path); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupPermissionRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupPermissionRelationDao.java index 528309ff..f0c9efb9 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupPermissionRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupPermissionRelationDao.java @@ -4,11 +4,18 @@ import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.mapper.SaasPgroupPermissionRelationMapper; import cn.axzo.tyr.server.repository.mapper.SaasRoleMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public class SaasPgroupPermissionRelationDao extends ServiceImpl { + public void removeByPermissionPointIds(List permissionPointIds) { + this.remove(new LambdaQueryWrapper() + .in(SaasPgroupPermissionRelation::getFeatureId, permissionPointIds)); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java index c317d0e7..d917e9bf 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java @@ -37,4 +37,9 @@ public class SaasFeatureDaoImpl extends ServiceImpl().set(SaasFeature::getSort, sort).eq(SaasFeature::getId, permissionId)); } + + @Override + public List listLikePath(String path) { + return this.list(new LambdaQueryWrapper().likeRight(SaasFeature::getPath, path)); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index d498cfe8..78dc2882 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -6,6 +6,7 @@ import cn.axzo.framework.domain.web.BizException; import cn.axzo.framework.domain.web.code.BaseCode; import cn.axzo.tyr.client.model.DictTypeFiledEnum; import cn.axzo.tyr.client.model.DictWorkSpaceTypeEnum; +import cn.axzo.tyr.client.model.dict.request.BasicDictNodeReq; import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; @@ -17,6 +18,7 @@ import cn.axzo.tyr.client.model.permission.PermissionPointVO; import cn.axzo.tyr.server.repository.SaasBasicDictDao; import cn.axzo.tyr.server.repository.entity.SaasFeature; import cn.axzo.tyr.server.repository.service.SaasFeatureDao; +import cn.axzo.tyr.server.repository.service.SaasPgroupPermissionRelationDao; import cn.axzo.tyr.server.service.PermissionPointService; import cn.axzo.tyr.server.service.SaasBasicDictService; import cn.hutool.core.collection.CollectionUtil; @@ -56,6 +58,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { private final SaasFeatureDao saasFeatureDao; private final SaasBasicDictDao saasBasicDictDao; private final SaasBasicDictService saasBasicDictService; + private final SaasPgroupPermissionRelationDao saasPgroupPermissionRelationDao; @Override public List listTreeNodes(PermissionPointTreeQueryReq request) { @@ -200,11 +203,21 @@ public class PermissionPointServiceImpl implements PermissionPointService { vo.setFeatureTypeDesc(FeatureType.apply(vo.getFeatureType()).getDesc()); //补充上级信息 - //TODO:@Zhan 依赖字典接口构建上级 + //最顶级二层 + BasicDictNodeReq terminalReq = new BasicDictNodeReq(); + terminalReq.setCode(feature.getTerminal()); + terminalReq.setType(DictTypeFiledEnum.TERMINAL); + BasicDictNodeResp terminal = saasBasicDictDao.getBasicDictNode(terminalReq); + terminalReq.setType(DictTypeFiledEnum.WORKSPACE); + terminalReq.setCode(terminal.getWorkspaceType()); + BasicDictNodeResp workspace = saasBasicDictDao.getBasicDictNode(terminalReq); List pathName = new ArrayList<>(); + pathName.add(workspace.getName()); + pathName.add(terminal.getName()); + if (vo.getParentId() == null || vo.getParentId() == 0) { //没有parent直接挂在工作台下 - vo.setParentName(""); + vo.setParentName(terminal.getName()); vo.setPathName(pathName); return vo; } @@ -269,9 +282,13 @@ public class PermissionPointServiceImpl implements PermissionPointService { parent = new SaasFeature(); parent.setPath(FEATURE_TOP_PATH); parent.setBusinessNo("0"); + //设置为0便于下面查询 + parent.setParentId(0L); } else { parent = this.saasFeatureDao.getById(dto.getParentId()); } + //计算子节点作为sort + //生成biz_no saasFeature.setBusinessNo(FEATURE_BIZ_NO_PREFIX + System.currentTimeMillis()); saasFeature.setParentBusinessNo(parent.getBusinessNo()); @@ -284,9 +301,20 @@ public class PermissionPointServiceImpl implements PermissionPointService { @Transactional(rollbackFor = Throwable.class) @Override - public void delete(Long permissionId) { - this.saasFeatureDao.removeById(permissionId); - //TODO:@Zhan 删除关联数据 - 权限集合 + public void delete(Long permissionPointId) { + List delIds = new ArrayList<>(); + SaasFeature feature = getAndCheck(permissionPointId); + //删除自己 + this.saasFeatureDao.removeById(permissionPointId); + delIds.add(feature.getId()); + //删除所有子节点 + List children = this.saasFeatureDao.listLikePath(feature.getPath() + feature.getId() + FEATURE_PATH_DELIMITER); + if (CollectionUtil.isNotEmpty(children)) { + List childrenIds = children.stream().map(SaasFeature::getId).collect(Collectors.toList()); + this.saasFeatureDao.removeByIds(childrenIds); + delIds.addAll(childrenIds); + } + this.saasPgroupPermissionRelationDao.removeByPermissionPointIds(delIds); } @Transactional(rollbackFor = Throwable.class) diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java index 882ff203..92f358c3 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java @@ -77,7 +77,8 @@ public class PermissionPointTest { permissionPoint.setFeatureUrl("/tyr/test/permission"); permissionPoint.setNeedAuth(true); permissionPoint.setNeedAuth(true); - controller.savePermissionPoint(permissionPoint); + System.out.println(JSON.toJSONString(permissionPoint)); + //controller.savePermissionPoint(permissionPoint); } @Test @@ -117,7 +118,7 @@ public class PermissionPointTest { @Test public void testDelete() { - Long permissionId = 3478L; + Long permissionId = 360L; controller.deletePermissionPoint(permissionId); } From 4aba28d27175b994097d686da9f5049f88e3d5e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Tue, 12 Sep 2023 10:59:39 +0800 Subject: [PATCH 081/186] =?UTF-8?q?=E8=A7=92=E8=89=B2=E5=AD=98=E9=87=8F?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=B8=85=E6=B4=97=E9=AA=8C=E8=AF=81=E5=AE=8C?= =?UTF-8?q?=E6=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/server/job/OMSRoleJobHandler.java | 84 +++++++------------ 1 file changed, 30 insertions(+), 54 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java index e63fd03f..77486a3a 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java @@ -49,6 +49,7 @@ public class OMSRoleJobHandler extends IJobHandler { /** * 清洗OMS角色相关数据(注:先通过SQL检查和清除脏数据,要不然无法保证各个实体的关联关系) + * * @param s * @return * @throws Exception @@ -57,6 +58,7 @@ public class OMSRoleJobHandler extends IJobHandler { @Override @XxlJob("OMSRoleJobHandler") public ReturnT execute(String s) throws Exception { + log.info("OMSRoleJobHandler start"); // 创建角色分组 SaasRoleGroup roleGroup = new SaasRoleGroup(); roleGroup.setWorkspaceTypeCode("6"); @@ -74,7 +76,6 @@ public class OMSRoleJobHandler extends IJobHandler { oldRole.forEach(e -> { e.setWorkspaceId(-1l); e.setOwnerOuId(-1l); - e.setWorkspaceType(-1); e.setFitOuTypeBit(-1); e.setFitOuNodeTypeBit(-1); e.setPositionTemplateId(-1l); @@ -93,6 +94,8 @@ public class OMSRoleJobHandler extends IJobHandler { roleGroupRelationDao.saveBatch(roleGroupRelation); // 查询角色关联的角色,打包成新的权限集 ArrayList deletePgroup = new ArrayList<>(); + ArrayList deletePgroupRoleRelation = new ArrayList<>(); + ArrayList deletePgroupPermissionRelation = new ArrayList<>(); oldRole.forEach(role -> { List pgroupRoleRelation = pgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, role.getId()).list(); if (CollectionUtils.isEmpty(pgroupRoleRelation)) { @@ -101,58 +104,25 @@ public class OMSRoleJobHandler extends IJobHandler { List permissionGroup = saasPermissionGroupDao.lambdaQuery().in(BaseEntity::getId, pgroupRoleRelation.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())).list(); if (CollectionUtils.isEmpty(permissionGroup)) { // 删除角色权限集关联关系 - pgroupRoleRelation.forEach(e -> { - pgroupRoleRelationDao.lambdaUpdate() - .eq(BaseEntity::getId, e.getId()) - .set(BaseEntity::getIsDelete, e.getId()) - .update(); - }); + deletePgroupRoleRelation.addAll(pgroupRoleRelation); return; } List pgroupPermissionRelation = pgroupPermissionRelationDao.lambdaQuery().in(SaasPgroupPermissionRelation::getGroupId, permissionGroup.stream().map(BaseEntity::getId).collect(Collectors.toList())).list(); if (CollectionUtils.isEmpty(pgroupPermissionRelation)) { // 如果没查到权限则表示当前权限集是无意义的,删掉 - permissionGroup.forEach(e -> { - // 只能通过这种方式删除 update不能删除 - saasPermissionGroupDao.lambdaUpdate() - .eq(BaseEntity::getId, e.getId()) - .set(BaseEntity::getIsDelete, e.getId()) - .update(); - }); + deletePgroup.addAll(permissionGroup); // 删除角色权限集关联关系 - pgroupRoleRelation.forEach(e -> { - pgroupRoleRelationDao.lambdaUpdate() - .eq(BaseEntity::getId, e.getId()) - .set(BaseEntity::getIsDelete, e.getId()) - .update(); - }); + deletePgroupRoleRelation.addAll(pgroupRoleRelation); return; } List feature = featureDao.lambdaQuery().in(BaseEntity::getId, pgroupPermissionRelation.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())).list(); if (CollectionUtils.isEmpty(feature)) { // 删除权限集权限关联关系 - pgroupPermissionRelation.forEach(e -> { - // 只能通过这种方式删除 update不能删除 - pgroupPermissionRelationDao.lambdaUpdate() - .eq(BaseEntity::getId, e.getId()) - .set(BaseEntity::getIsDelete, e.getId()) - .update(); - }); + deletePgroupPermissionRelation.addAll(pgroupPermissionRelation); // 如果没查到权限则表示当前权限集是无意义的,删掉 - permissionGroup.forEach(e -> { - // 只能通过这种方式删除 update不能删除 - saasPermissionGroupDao.lambdaUpdate() - .eq(BaseEntity::getId, e.getId()) - .set(BaseEntity::getIsDelete, e.getId()) - .update(); - }); + deletePgroup.addAll(permissionGroup); // 删除角色权限集关联关系 - pgroupRoleRelation.forEach(e -> { - pgroupRoleRelationDao.lambdaUpdate() - .eq(BaseEntity::getId, e.getId()) - .set(BaseEntity::getIsDelete, e.getId()) - .update(); - }); + deletePgroupRoleRelation.addAll(pgroupRoleRelation); return; } // 创建新的权限集 @@ -181,20 +151,25 @@ public class OMSRoleJobHandler extends IJobHandler { saasPgroupPermissionRelation.setUpdateBy(-1L); pgroupPermissionRelationDao.save(saasPgroupPermissionRelation); }); - // 删除老的权限集权限关联关系 - pgroupPermissionRelation.forEach(e -> { - pgroupPermissionRelationDao.lambdaUpdate() - .eq(BaseEntity::getId, e.getId()) - .set(BaseEntity::getIsDelete, e.getId()) - .update(); - }); - // 删除老的角色权限集关联关系 - pgroupRoleRelation.forEach(e -> { - pgroupRoleRelationDao.lambdaUpdate() - .eq(BaseEntity::getId, e.getId()) - .set(BaseEntity::getIsDelete, e.getId()) - .update(); - }); + // 暂存待删除数据 + deletePgroupPermissionRelation.addAll(pgroupPermissionRelation); + // 暂存待删除数据 + deletePgroupRoleRelation.addAll(pgroupRoleRelation); + }); + // 所有的数据都不能在循环中删,要不然下一次循环中就查不到了 + // 删除老的权限集权限关联关系 + deletePgroupPermissionRelation.forEach(e -> { + pgroupPermissionRelationDao.lambdaUpdate() + .eq(BaseEntity::getId, e.getId()) + .set(BaseEntity::getIsDelete, e.getId()) + .update(); + }); + // 删除老的角色权限集关联关系 + deletePgroupRoleRelation.forEach(e -> { + pgroupRoleRelationDao.lambdaUpdate() + .eq(BaseEntity::getId, e.getId()) + .set(BaseEntity::getIsDelete, e.getId()) + .update(); }); // 删除权限集 deletePgroup.forEach(e -> { @@ -203,6 +178,7 @@ public class OMSRoleJobHandler extends IJobHandler { .set(BaseEntity::getIsDelete, e.getId()) .update(); }); + log.info("OMSRoleJobHandler end"); return ReturnT.SUCCESS; } } From 095c48fcb6a50f1d53180ddbbd387da9ce23caa4 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Tue, 12 Sep 2023 13:44:13 +0800 Subject: [PATCH 082/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=20=E5=A2=9E=E5=8A=A0=E7=BB=88=E7=AB=AF=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/model/enums/PageLinkType.java | 37 +++++++++++++++++++ .../server/repository/entity/SaasFeature.java | 4 +- .../impl/PermissionPointServiceImpl.java | 5 ++- 3 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PageLinkType.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PageLinkType.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PageLinkType.java new file mode 100644 index 00000000..02be3d58 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PageLinkType.java @@ -0,0 +1,37 @@ +package cn.axzo.tyr.client.model.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +/** + * 页面适用终端 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/12 11:52 + */ +@Getter +@AllArgsConstructor +public enum PageLinkType { + PC(1, "PC"), + UNI(2, "UNI"), + APP(4, "APP"), + ; + + private Integer code; + private String desc; + + private static final Map MAPPING = new HashMap<>(); + static { + for (PageLinkType type : PageLinkType.values()) { + MAPPING.put(type.code, type); + } + } + + public static PageLinkType apply(Integer code) { + return code == null ? null :MAPPING.get(code); + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java index 54d5265a..3f04f6fc 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasFeature.java @@ -141,12 +141,12 @@ public class SaasFeature extends BaseEntity implements Serializable private String featureUrl; /** - * 网关专属字段,是否认证 0:无需要认证 1:需要认证 + * 网关专属字段,是否认证 0:无需要认证 1:需要认证 - 登录-默认1 */ private Boolean needCert; /** - * 网关专属字段,是否授权 0:无需要授权 1:需要授权 + * 网关专属字段,是否授权 0:无需要授权 1:需要授权 - 权限-默认1 */ private Boolean needAuth; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 969a4342..001fe90f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -90,7 +90,9 @@ public class PermissionPointServiceImpl implements PermissionPointService { Map> mappingNode = nodesResult.stream() .collect(Collectors.groupingBy(PermissionPointTreeNode::getTerminal)); //构建workspace-terminal工作台层级 - List dictList = saasBasicDictService.getBasicDictNodeTree(BasicDictQueryReq.builder().type(DictTypeFiledEnum.TERMINAL).build()).getData(); + List dictList = saasBasicDictService.getBasicDictNodeTree(BasicDictQueryReq.builder() + .type(DictTypeFiledEnum.TERMINAL).build()) + .getData(); //遍历所有workspace和terminal-构建顶层两级 List result = new ArrayList<>(); for (BasicDictTreeResp workspace : dictList) { @@ -102,6 +104,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { if (CollectionUtil.isNotEmpty(childrenNodes)) { PermissionPointTreeNode terminalTree = new PermissionPointTreeNode(); terminalTree.setPermissionName(terminal.getName()); + terminalTree.setTerminal(terminal.getCode()); terminalTree.setCode(terminal.getCode()); terminalTree.setChildren(childrenNodes); if (workspaceNode == null) { From d9528f03fada8d1c9ce5435fb7fd1d5c5cfdc393 Mon Sep 17 00:00:00 2001 From: yangsong Date: Tue, 12 Sep 2023 14:10:31 +0800 Subject: [PATCH 083/186] =?UTF-8?q?=E8=BF=94=E5=9B=9E=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java | 5 +++-- .../server/controller/role/SaasRoleGroupController.java | 7 ++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java index 7f2886f4..602b5aa7 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java @@ -1,6 +1,5 @@ package cn.axzo.tyr.client.feign; -import cn.axzo.framework.domain.web.result.ApiListResult; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; @@ -9,6 +8,8 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; +import java.util.List; + /** * 角色分组 */ @@ -27,7 +28,7 @@ public interface SaasRoleGroupApi { * @return */ @PostMapping("getList") - ApiListResult getList(@RequestBody QuerySaasRoleGroupReq req); + ApiResult> getList(@RequestBody QuerySaasRoleGroupReq req); /** * 删除分组 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java index e25896c0..c78b9a9c 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java @@ -1,6 +1,5 @@ package cn.axzo.tyr.server.controller.role; -import cn.axzo.framework.domain.web.result.ApiListResult; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.SaasRoleGroupApi; import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; @@ -10,6 +9,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + @Slf4j @RestController @RequiredArgsConstructor @@ -22,8 +23,8 @@ public class SaasRoleGroupController implements SaasRoleGroupApi { } @Override - public ApiListResult getList(QuerySaasRoleGroupReq req) { - return ApiListResult.ok(saasRoleGroupService.getList(req)); + public ApiResult> getList(QuerySaasRoleGroupReq req) { + return ApiResult.ok(saasRoleGroupService.getList(req)); } @Override From 50a4d12540229d93b6dc7040438ec994c9b9966d Mon Sep 17 00:00:00 2001 From: zhansihu Date: Tue, 12 Sep 2023 14:41:07 +0800 Subject: [PATCH 084/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=20=E5=A2=9E=E5=8A=A0=E9=80=9A=E8=BF=87ID=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E6=A0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/permission/PermissionPointTreeQueryReq.java | 3 ++- .../service/impl/PermissionPointServiceImpl.java | 10 +++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java index 978a9d01..28ed8ce6 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java @@ -3,6 +3,7 @@ package cn.axzo.tyr.client.model.permission; import lombok.Data; import java.util.List; +import java.util.Set; /** * 权限点树形查询请求参数 @@ -27,7 +28,7 @@ public class PermissionPointTreeQueryReq { private List terminalList; /** 权限点ID列表 **/ - private List ids; + private Set ids; /** 权限点terminal对应workspaceType **/ private List workspaceType; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 001fe90f..2078213c 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -140,7 +140,8 @@ public class PermissionPointServiceImpl implements PermissionPointService { private List filterTreeNode(PermissionPointTreeQueryReq request, List treeList) { //过滤条件 boolean needFilter = StrUtil.isNotBlank(request.getKeyword()) - || request.getDelegateType() != 0; + || request.getDelegateType() != 0 + || CollectionUtil.isNotEmpty(request.getIds()); if (needFilter) { return treeList.stream().filter(x -> this.recursionFilter(request, x)).collect(Collectors.toList()); @@ -149,14 +150,17 @@ public class PermissionPointServiceImpl implements PermissionPointService { } private boolean recursionFilter(PermissionPointTreeQueryReq request, PermissionPointTreeNode node) { - + // 过滤参数为空时 认为匹配成功 //条件匹配 - 关键字 boolean matchKeyword = request.getKeyword() == null || node.getPermissionName().contains(request.getKeyword()); //条件匹配 - 授权策略类型 boolean matchDelegateType = request.getDelegateType() == 0 || Objects.equals(request.getDelegateType(), node.getDelegatedType()); - if (matchKeyword && matchDelegateType) { + //条件匹配 - ID + boolean matchId = CollectionUtil.isEmpty(request.getIds()) || request.getIds().contains(node.getPermissionPointId()); + + if (matchKeyword && matchDelegateType && matchId) { //如果匹配直接返回,否则过滤子节点 return true; } From 812ff3fab4615be906826ee9bdcde4c201425f93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Tue, 12 Sep 2023 16:14:49 +0800 Subject: [PATCH 085/186] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E5=88=86=E7=BB=84=E9=83=A8=E5=88=86=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/feign/SaasPermissionGroupApi.java | 14 +++-- .../cn/axzo/tyr/client/feign/SaasRoleApi.java | 6 ++ .../tyr/client/feign/SaasRoleGroupApi.java | 14 ++--- .../tyr/client/model/vo/SaasRoleGroupVO.java | 20 +++---- .../role/SaasPermissionGroupController.java | 58 +++++++++++++++++++ .../controller/role/SaasRoleController.java | 5 ++ .../role/SaasRoleGroupController.java | 11 ++-- .../entity/SaasPermissionGroupScope.java | 6 ++ .../service/SaasPermissionGroupDao.java | 9 +++ .../service/SaasPermissionGroupScopeDao.java | 10 ++++ .../SaasPgroupPermissionRelationDao.java | 10 ++++ .../service/SaasPgroupRoleRelationDao.java | 11 ++++ .../repository/service/SaasRoleDao.java | 10 ++++ .../repository/service/SaasRoleGroupDao.java | 7 +++ .../service/SaasRoleGroupRelationDao.java | 11 ++++ .../service/SaasRoleUserRelationDao.java | 8 +++ .../server/service/SaasRoleGroupService.java | 4 ++ .../impl/SaasRoleGroupServiceImpl.java | 43 +++++++++++++- 18 files changed, 225 insertions(+), 32 deletions(-) create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java index 5ebc745e..4d80fbd5 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java @@ -9,16 +9,18 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; +import java.util.List; + /** * 权限集 */ -@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080/api/saasPermissionGoup}") +@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080}") public interface SaasPermissionGroupApi { /** * 保存/更新 */ - @PostMapping("saveOrUpdate") + @PostMapping("/api/saasPermissionGoup/saveOrUpdate") ApiResult saveOrUpdate(@RequestBody SaasPermissionGroupVO req); /** @@ -26,19 +28,19 @@ public interface SaasPermissionGroupApi { * @param id * @return */ - @PostMapping("getById") + @PostMapping("/api/saasPermissionGoup/getById") ApiResult getById(@RequestParam("id") Long id); /** * 查询 */ - @PostMapping("query") + @PostMapping("/api/saasPermissionGoup/query") ApiPageResult query(@RequestBody QuerySaasPermissionGroupReq req); /** * 删除 */ - @PostMapping("delete") - ApiResult delete(@RequestParam(required = true) Long id); + @PostMapping("/api/saasPermissionGoup/delete") + ApiResult delete(@RequestBody List id); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java index e72b2b23..47daff72 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java @@ -41,6 +41,12 @@ public interface SaasRoleApi { @PostMapping("/api/saasRole/query") ApiResult> query(@RequestBody QuerySaasRoleReq req); + /** + * 删除 + */ + @PostMapping("/api/saasRole/delete") + ApiResult delete(@RequestBody List id); + /** * 根据身份id身份类型查询权限列表(批量) * @param identityType 身份类型 1:工人 2:班组长 3:从业人员 4:监管人员 5:运营人员 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java index 602b5aa7..d2a1d414 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java @@ -13,28 +13,28 @@ import java.util.List; /** * 角色分组 */ -@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080/api/saasRoleGroup}") +@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080}") public interface SaasRoleGroupApi { /** * 保存/更新 * @return */ - @PostMapping("save") - ApiResult saveOrUpdate(@RequestBody SaasRoleGroupVO req); + @PostMapping("/api/saasRoleGroup/save") + ApiResult saveOrUpdate(@RequestBody SaasRoleGroupVO req); /** * 获取权限分组列表 * @return */ - @PostMapping("getList") + @PostMapping("/api/saasRoleGroup/getList") ApiResult> getList(@RequestBody QuerySaasRoleGroupReq req); /** - * 删除分组 + * 删除 */ - @PostMapping("delete") - ApiResult delete(@RequestParam(required = true) Long id); + @PostMapping("/api/saasRoleGroup//api/saasPermissionGoup/delete") + ApiResult delete(@RequestBody List id); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java index 2f44645a..fb640369 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java @@ -1,11 +1,17 @@ package cn.axzo.tyr.client.model.vo; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.Date; import java.util.List; @Data +@AllArgsConstructor +@NoArgsConstructor +@Builder public class SaasRoleGroupVO { private Long id; @@ -13,22 +19,12 @@ public class SaasRoleGroupVO { /** * 工作台类型字典code */ - private Long workspaceTypeCode; + private String workspaceTypeCode; /** * 单位类型字典code */ - private List ouTypeCode; - - /** - * 所属工作台id - */ - private Long workspaceId; - - /** - * 所属单位id - */ - private Long ouId; + private List ouTypeCode; /** * 名称 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java new file mode 100644 index 00000000..15b2139a --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java @@ -0,0 +1,58 @@ +package cn.axzo.tyr.server.controller.role; + + +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.framework.domain.web.result.ApiPageResult; +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.feign.SaasPermissionGroupApi; +import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; +import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; +import cn.axzo.tyr.server.repository.service.SaasPermissionGroupDao; +import cn.axzo.tyr.server.repository.service.SaasPermissionGroupScopeDao; +import cn.axzo.tyr.server.repository.service.SaasPgroupPermissionRelationDao; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + + +@Slf4j +@RestController +@RequiredArgsConstructor +public class SaasPermissionGroupController implements SaasPermissionGroupApi { + + private final SaasPermissionGroupDao permissionGroupDao; + private final SaasPgroupPermissionRelationDao pgroupPermissionRelationDao; + private final SaasPermissionGroupScopeDao permissionGroupScopeDao; + + @Override + public ApiResult saveOrUpdate(SaasPermissionGroupVO req) { + return null; + } + + @Override + public ApiResult getById(Long id) { + return null; + } + + @Override + public ApiPageResult query(QuerySaasPermissionGroupReq req) { + return null; + } + + @Transactional + @Override + public ApiResult delete(List id) { + // 删除权限集 + permissionGroupDao.delete(id); + // 删除权限集权限关联关系 + pgroupPermissionRelationDao.deleteByPGroupId(id); + // 删除权限集作用范围 + permissionGroupScopeDao.deleteByPGroupId(id); + return ApiResult.ok(); + } + +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java index 79f018e9..9aa2250c 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java @@ -53,6 +53,11 @@ public class SaasRoleController implements SaasRoleApi { return ApiResult.ok(roleService.query(req)); } + @Override + public ApiResult delete(List id) { + return null; + } + @Override public ApiResult> queryByIdentityIdType(Long identityId, Integer identityType,Long workspaceId,Long ouId) { return ApiResult.ok(roleService.queryByIdentityIdType(identityId, identityType,workspaceId,ouId)); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java index c78b9a9c..4971b46d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java @@ -15,11 +15,13 @@ import java.util.List; @RestController @RequiredArgsConstructor public class SaasRoleGroupController implements SaasRoleGroupApi { + private final SaasRoleGroupService saasRoleGroupService; @Override - public ApiResult saveOrUpdate(SaasRoleGroupVO req) { - return null; + public ApiResult saveOrUpdate(SaasRoleGroupVO req) { + saasRoleGroupService.saveOrUpdate(req); + return ApiResult.ok(); } @Override @@ -28,7 +30,8 @@ public class SaasRoleGroupController implements SaasRoleGroupApi { } @Override - public ApiResult delete(Long id) { - return null; + public ApiResult delete(List id) { + + return ApiResult.ok(); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java index 32ebafaa..808a1725 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java @@ -23,6 +23,12 @@ public class SaasPermissionGroupScope extends BaseEntity { + public void delete(List id) { + lambdaUpdate() + .in(BaseEntity::getId,id) + .set(BaseEntity::getIsDelete,id) + .update(); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupScopeDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupScopeDao.java index 00587ebd..17ee34a8 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupScopeDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupScopeDao.java @@ -1,5 +1,7 @@ package cn.axzo.tyr.server.repository.service; +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup; import cn.axzo.tyr.server.repository.entity.SaasPermissionGroupScope; import cn.axzo.tyr.server.repository.mapper.SaasPermissionGroupMapper; @@ -7,8 +9,16 @@ import cn.axzo.tyr.server.repository.mapper.SaasPermissionGroupScopeMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public class SaasPermissionGroupScopeDao extends ServiceImpl { + public void deleteByPGroupId(List pgroupId) { + lambdaUpdate() + .in(SaasPermissionGroupScope::getPgroupId,pgroupId) + .set(BaseEntity::getIsDelete, TableIsDeleteEnum.DELETE.value) + .update(); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupPermissionRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupPermissionRelationDao.java index f0c9efb9..f7317bd7 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupPermissionRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupPermissionRelationDao.java @@ -1,5 +1,7 @@ package cn.axzo.tyr.server.repository.service; +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.mapper.SaasPgroupPermissionRelationMapper; @@ -17,5 +19,13 @@ public class SaasPgroupPermissionRelationDao extends ServiceImpl() .in(SaasPgroupPermissionRelation::getFeatureId, permissionPointIds)); } + + public void deleteByPGroupId(List pgroupId) { + lambdaUpdate() + .in(SaasPgroupPermissionRelation::getGroupId,pgroupId) + .set(BaseEntity::getIsDelete, TableIsDeleteEnum.DELETE.value) + .update(); + } + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupRoleRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupRoleRelationDao.java index 624e7e5d..27057033 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupRoleRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupRoleRelationDao.java @@ -1,5 +1,7 @@ package cn.axzo.tyr.server.repository.service; +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup; import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; import cn.axzo.tyr.server.repository.mapper.SaasPermissionGroupMapper; @@ -7,8 +9,17 @@ import cn.axzo.tyr.server.repository.mapper.SaasPgroupRoleRelationMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public class SaasPgroupRoleRelationDao extends ServiceImpl { + public void deleteByRoleId(List roleId) { + lambdaUpdate() + .in(SaasPgroupRoleRelation::getRoleId,roleId) + .set(BaseEntity::getIsDelete, TableIsDeleteEnum.DELETE.value) + .update(); + } + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleDao.java index 3d413049..68234eda 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleDao.java @@ -1,5 +1,6 @@ package cn.axzo.tyr.server.repository.service; +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupMapper; @@ -7,8 +8,17 @@ import cn.axzo.tyr.server.repository.mapper.SaasRoleMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public class SaasRoleDao extends ServiceImpl { + public void delete(List id) { + lambdaUpdate() + .in(BaseEntity::getId,id) + .set(BaseEntity::getIsDelete,id) + .update(); + } + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java index 5fdc2ffb..6900378d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java @@ -45,5 +45,12 @@ public class SaasRoleGroupDao extends ServiceImpl id) { + lambdaUpdate() + .in(BaseEntity::getId,id) + .set(BaseEntity::getIsDelete,id) + .update(); + } + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupRelationDao.java index f8a24f9f..05eba429 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupRelationDao.java @@ -1,5 +1,7 @@ package cn.axzo.tyr.server.repository.service; +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation; import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupMapper; @@ -7,8 +9,17 @@ import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupRelationMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public class SaasRoleGroupRelationDao extends ServiceImpl { + public void deleteByRoleGroupId(List roleGroupId) { + lambdaUpdate() + .in(SaasRoleGroupRelation::getSaasRoleGroupId, roleGroupId) + .set(BaseEntity::getIsDelete, TableIsDeleteEnum.DELETE.value) + .update(); + } + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java index 3866cbf8..fde44b5f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java @@ -21,5 +21,13 @@ public class SaasRoleUserRelationDao extends ServiceImpl roleId) { + lambdaUpdate() + .in(SaasRoleUserRelation::getRoleId,roleId) + .set(BaseEntity::getIsDelete,TableIsDeleteEnum.DELETE.value) + .update(); + } + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java index d50e03d2..456d2f59 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java @@ -7,4 +7,8 @@ import java.util.List; public interface SaasRoleGroupService { List getList(QuerySaasRoleGroupReq req); + + void saveOrUpdate(SaasRoleGroupVO req); + + void delete(Long id); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java index d7dfa8c2..a2a5cac6 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java @@ -1,12 +1,13 @@ package cn.axzo.tyr.server.service.impl; +import java.util.Date; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; +import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation; -import cn.axzo.tyr.server.repository.service.SaasRoleGroupDao; -import cn.axzo.tyr.server.repository.service.SaasRoleGroupRelationDao; +import cn.axzo.tyr.server.repository.service.*; import cn.axzo.tyr.server.service.SaasRoleGroupService; import cn.hutool.core.bean.BeanUtil; import lombok.RequiredArgsConstructor; @@ -27,6 +28,11 @@ import java.util.stream.Collectors; public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { private final SaasRoleGroupDao saasRoleGroupDao; private final SaasRoleGroupRelationDao saasRoleGroupRelationDao; + private final SaasRoleDao roleDao; + private final SaasPgroupRoleRelationDao pgroupRoleRelationDao; + private final SaasPermissionGroupDao permissionGroupDao; + private final SaasPgroupPermissionRelationDao pgroupPermissionRelationDao; + private final SaasRoleUserRelationDao roleUserRelationDao; @Override public List getList(QuerySaasRoleGroupReq req) { @@ -57,7 +63,7 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { .map(e -> { SaasRoleGroupVO target = BeanUtil.copyProperties(e, SaasRoleGroupVO.class); if (StringUtils.isNotBlank(e.getOuTypeCode())) { - target.setOuTypeCode(Arrays.stream(e.getOuTypeCode().split(",")).filter(StringUtils::isNotBlank).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList())); + target.setOuTypeCode(Arrays.stream(e.getOuTypeCode().split(",")).filter(StringUtils::isNotBlank).map(s -> s.trim()).collect(Collectors.toList())); } target.setRoleIds(groupRoleMap.get(e.getId())); return target; @@ -65,4 +71,35 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { return results; } + + @Override + public void saveOrUpdate(SaasRoleGroupVO req) { + // 拼接ouTypeCode字符串 + String ouTypeCodeStr = null; + if (CollectionUtils.isNotEmpty(req.getOuTypeCode())) { + ouTypeCodeStr = StringUtils.join(req.getOuTypeCode(),","); + } + SaasRoleGroup saasRoleGroup = new SaasRoleGroup(); + saasRoleGroup.setId(req.getId()); + saasRoleGroup.setWorkspaceTypeCode(req.getWorkspaceTypeCode()); + saasRoleGroup.setOuTypeCode(ouTypeCodeStr); + saasRoleGroup.setName(req.getName()); + saasRoleGroup.setSort(req.getSort()); + saasRoleGroupDao.saveOrUpdate(saasRoleGroup); + } + + @Override + public void delete(Long id) { + // 删除分组 + + // 删除角色分组关联关系 + + // + + + // 删除权限分组关联关系 + // 删除权限 + // 删除权限集关联关系 + // 删除权限集 + } } From 57d5ab56a4b43a42aaf5659c41ff31334b0e122d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Tue, 12 Sep 2023 16:24:00 +0800 Subject: [PATCH 086/186] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E8=BA=AB=E4=BB=BDid=E5=92=8C=E8=BA=AB=E4=BB=BD=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E6=89=B9=E9=87=8F=E6=9F=A5=E8=AF=A2=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/feign/SaasRoleApi.java | 4 +-- .../res/QueryBatchByIdentityIdTypeRes.java | 31 +++++++++++++++++++ .../axzo/tyr/client/model/vo/SaasRoleVO.java | 16 ---------- .../controller/role/SaasRoleController.java | 4 +-- .../axzo/tyr/server/service/RoleService.java | 3 +- .../server/service/impl/RoleServiceImpl.java | 13 ++++++-- 6 files changed, 47 insertions(+), 24 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/res/QueryBatchByIdentityIdTypeRes.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java index 47daff72..a2091a01 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java @@ -3,6 +3,7 @@ package cn.axzo.tyr.client.feign; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; +import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; @@ -12,7 +13,6 @@ import org.springframework.web.bind.annotation.RequestParam; import javax.validation.constraints.NotNull; import java.util.List; -import java.util.Map; /** * 角色 @@ -60,7 +60,7 @@ public interface SaasRoleApi { * @return */ @GetMapping("/api/saasRole/queryBatchByIdentityIdType") - ApiResult>> queryBatchByIdentityIdType(@RequestBody List req); + ApiResult> queryBatchByIdentityIdType(@RequestBody List req); diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/QueryBatchByIdentityIdTypeRes.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/QueryBatchByIdentityIdTypeRes.java new file mode 100644 index 00000000..a1632fc9 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/QueryBatchByIdentityIdTypeRes.java @@ -0,0 +1,31 @@ +package cn.axzo.tyr.client.model.res; + +import cn.axzo.tyr.client.model.vo.SaasRoleVO; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class QueryBatchByIdentityIdTypeRes { + + Long identityId; + + /** + * 身份类型 1:工人 2:班组长 3:从业人员 4:监管人员 5:运营人员 + */ + Integer identityType; + + Long workspaceId; + + Long ouId; + + List role; + + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java index 1de30b24..4ab79894 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java @@ -1,6 +1,5 @@ package cn.axzo.tyr.client.model.vo; -import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -8,7 +7,6 @@ import lombok.NoArgsConstructor; import java.util.Date; import java.util.List; -import java.util.stream.Collectors; @Data @AllArgsConstructor @@ -38,11 +36,6 @@ public class SaasRoleVO { */ private Long updateBy; - /** - * 分组id(这个关联关系应该放在上一级,从结构上看,上下级是多对多的,如果放在下级返回上级的id不太合适) - */ -// private List roleGroupIds; - /** * 权限组 */ @@ -53,17 +46,8 @@ public class SaasRoleVO { */ private Long isDelete; - private Date createAt; private Date updateAt; - /** - * 获取角色对应所用的权限 - * @return - */ - public List getFeature(){ - return this.permissionGroup.stream().map(SaasPermissionGroupVO::getFeature).flatMap(List::stream).distinct().collect(Collectors.toList()); - } - } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java index 9aa2250c..e87f63a9 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java @@ -6,6 +6,7 @@ import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.SaasRoleApi; import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; +import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.server.service.RoleService; import com.google.common.collect.Lists; @@ -16,7 +17,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RestController; import java.util.List; -import java.util.Map; /** * 权限 @@ -64,7 +64,7 @@ public class SaasRoleController implements SaasRoleApi { } @Override - public ApiResult>> queryBatchByIdentityIdType(List req) { + public ApiResult> queryBatchByIdentityIdType(List req) { return ApiResult.ok(roleService.queryBatchByIdentityIdType(req)); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java index b8df6dd9..97d42ee5 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java @@ -2,6 +2,7 @@ package cn.axzo.tyr.server.service; import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; +import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import java.util.List; @@ -21,5 +22,5 @@ public interface RoleService { List query(QuerySaasRoleReq req); - Map> queryBatchByIdentityIdType(List req); + List queryBatchByIdentityIdType(List req); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 4c0ff699..4450c7b9 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -6,6 +6,7 @@ import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; +import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.server.repository.entity.*; @@ -145,10 +146,16 @@ public class RoleServiceImpl implements RoleService { } @Override - public Map> queryBatchByIdentityIdType(List req) { - HashMap> result = new HashMap<>(); + public List queryBatchByIdentityIdType(List req) { + List result = new ArrayList<>(); req.forEach(e -> { - result.put(e,queryByIdentityIdType(e.getIdentityId(),e.getIdentityType(),e.getWorkspaceId(),e.getOuId())); + result.add(QueryBatchByIdentityIdTypeRes.builder() + .identityId(e.getIdentityId()) + .identityType(e.getIdentityType()) + .workspaceId(e.getWorkspaceId()) + .ouId(e.getOuId()) + .role(queryByIdentityIdType(e.getIdentityId(),e.getIdentityType(),e.getWorkspaceId(),e.getOuId())) + .build()); }); return result; } From 38dd3d3f7988bf5b02025735afdb9425b8b83af5 Mon Sep 17 00:00:00 2001 From: yangsong Date: Tue, 12 Sep 2023 16:42:43 +0800 Subject: [PATCH 087/186] =?UTF-8?q?=E8=BF=94=E5=9B=9E=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../role/SaasPermissionGroupController.java | 7 +- .../service/PermissionGroupService.java | 3 +- .../service/impl/PermissionGroupImpl.java | 64 +++++++++++++++++++ 3 files changed, 69 insertions(+), 5 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java index 15b2139a..27bc90e0 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java @@ -1,16 +1,15 @@ package cn.axzo.tyr.server.controller.role; -import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.framework.domain.web.result.ApiPageResult; import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.feign.SaasPermissionGroupApi; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; import cn.axzo.tyr.server.repository.service.SaasPermissionGroupDao; import cn.axzo.tyr.server.repository.service.SaasPermissionGroupScopeDao; import cn.axzo.tyr.server.repository.service.SaasPgroupPermissionRelationDao; +import cn.axzo.tyr.server.service.PermissionGroupService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.transaction.annotation.Transactional; @@ -18,7 +17,6 @@ import org.springframework.web.bind.annotation.RestController; import java.util.List; - @Slf4j @RestController @RequiredArgsConstructor @@ -27,6 +25,7 @@ public class SaasPermissionGroupController implements SaasPermissionGroupApi { private final SaasPermissionGroupDao permissionGroupDao; private final SaasPgroupPermissionRelationDao pgroupPermissionRelationDao; private final SaasPermissionGroupScopeDao permissionGroupScopeDao; + private final PermissionGroupService permissionGroupService; @Override public ApiResult saveOrUpdate(SaasPermissionGroupVO req) { @@ -40,7 +39,7 @@ public class SaasPermissionGroupController implements SaasPermissionGroupApi { @Override public ApiPageResult query(QuerySaasPermissionGroupReq req) { - return null; + return ApiPageResult.ok(permissionGroupService.page(req)); } @Transactional diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java index 19017dc6..d6f96b88 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java @@ -1,5 +1,6 @@ package cn.axzo.tyr.server.service; +import cn.axzo.framework.domain.page.PageResp; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; @@ -19,6 +20,6 @@ public interface PermissionGroupService { */ public List query(QuerySaasPermissionGroupReq req); - + PageResp page(QuerySaasPermissionGroupReq req); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index b7f04ebe..f6fba882 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -1,6 +1,7 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.framework.domain.page.PageResp; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; @@ -13,6 +14,7 @@ import cn.axzo.tyr.server.repository.service.SaasPgroupPermissionRelationDao; import cn.axzo.tyr.server.repository.service.SaasPgroupRoleRelationDao; import cn.axzo.tyr.server.service.PermissionGroupService; import cn.axzo.tyr.server.service.PermissionPointService; +import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; @@ -97,4 +99,66 @@ public class PermissionGroupImpl implements PermissionGroupService { ).collect(Collectors.toList()); } + + @Override + public PageResp page(QuerySaasPermissionGroupReq req) { + // 如果角色id不为空则先查询角色权限集关联表 + IPage iPage = req.toPage(); + if (CollectionUtils.isNotEmpty(req.getRoleIds())) { + List relationList = roleRelationDao.lambdaQuery() + .in(SaasPgroupRoleRelation::getRoleId, req.getRoleIds()) + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .list(); + List hitIds = relationList.stream().map(SaasPgroupRoleRelation::getGroupId).distinct().collect(Collectors.toList()); + if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(req.getIds())) { + req.getIds().retainAll(hitIds); + } else { + req.setIds(hitIds); + } + // 如果没查询到关联关系则直接返回 + if (CollectionUtils.isEmpty(relationList)) { + return PageResp.zero(iPage.getCurrent(), iPage.getSize()); + } + } + // 查询权限集 + iPage = permissionGroupDao.lambdaQuery() + .in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId, req.getIds()) + .eq(req.getIsCommon() != null, SaasPermissionGroup::getIsCommon, req.getIsCommon()) + .eq(req.getCreateBy() != null, SaasPermissionGroup::getCreateBy, req.getCreateBy()) + .eq(req.getUpdateBy() != null, SaasPermissionGroup::getUpdateBy, req.getUpdateBy()) + .eq(StringUtils.isNotBlank(req.getType()), SaasPermissionGroup::getType, req.getType()) + .like(StringUtils.isNotBlank(req.getName()), SaasPermissionGroup::getName, req.getName()) + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .orderByDesc(BaseEntity::getId) + .page(iPage); + List groupList = iPage.getRecords(); + // 如果权限集为空则直接返回 + if (CollectionUtils.isEmpty(groupList)) { + return PageResp.zero(iPage.getCurrent(), iPage.getSize()); + } + // 查询权限集关联的权限 + List permissionList = permissionRelationDao.lambdaQuery() + .in(SaasPgroupPermissionRelation::getGroupId, groupList.stream().map(BaseEntity::getId).collect(Collectors.toList())) + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .list(); + List feature = null; + if (CollectionUtils.isNotEmpty(permissionList)) { + // 查询featureCode + feature = featureService.listNodesByIds(permissionList.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())); + } + // 组装填充字段 + List finalFeature = feature; + List pageList = groupList.stream().map(group -> + SaasPermissionGroupVO.builder() + .id(group.getId()) + .name(group.getName()) + .feature(finalFeature) + .createBy(group.getCreateBy()) + .updateBy(group.getUpdateBy()) + .type(group.getType()) + .build() + ).collect(Collectors.toList()); + return PageResp.list(iPage.getCurrent(), iPage.getSize(), iPage.getTotal(), pageList); + } + } From f948608fbf55eeb60b13f5492cd26e907b80d108 Mon Sep 17 00:00:00 2001 From: yangsong Date: Tue, 12 Sep 2023 16:47:43 +0800 Subject: [PATCH 088/186] =?UTF-8?q?=E6=8A=A5=E9=94=99=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java index 4ab79894..a2fc1ec7 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java @@ -1,5 +1,6 @@ package cn.axzo.tyr.client.model.vo; +import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -7,6 +8,7 @@ import lombok.NoArgsConstructor; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; @Data @AllArgsConstructor @@ -50,4 +52,11 @@ public class SaasRoleVO { private Date updateAt; + /** + * 获取角色对应所用的权限 + * @return + */ + public List getFeature(){ + return this.permissionGroup.stream().map(SaasPermissionGroupVO::getFeature).flatMap(List::stream).distinct().collect(Collectors.toList()); + } } From 5cbf14b79d7917c5eab28735764fe267ce74d396 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Tue, 12 Sep 2023 17:57:50 +0800 Subject: [PATCH 089/186] =?UTF-8?q?add=20-=20=E4=BA=A7=E5=93=81=E4=B8=8E?= =?UTF-8?q?=E6=9D=83=E9=99=90=E7=82=B9=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AD=97=E5=85=B8=20code=20=E7=9A=84?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/product/ProductFeatureRelationSearchReq.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java index e9a0cb50..169ba66b 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationSearchReq.java @@ -29,4 +29,9 @@ public class ProductFeatureRelationSearchReq { */ private Long dictCodeId; + /** + * 字典的 code + */ + private String dictCode; + } From 0ad3ae6483086703945660d9cf84f374cd1565aa Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Tue, 12 Sep 2023 18:23:41 +0800 Subject: [PATCH 090/186] =?UTF-8?q?add=20-=20=E4=BA=A7=E5=93=81=E4=B8=8E?= =?UTF-8?q?=E6=9D=83=E9=99=90=E7=82=B9=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AD=97=E5=85=B8=20code=20=E7=9A=84?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/entity/SaasProductModuleFeatureRelation.java | 5 +++++ .../service/impl/ProductFeatureRelationServiceImpl.java | 2 ++ 2 files changed, 7 insertions(+) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasProductModuleFeatureRelation.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasProductModuleFeatureRelation.java index 698d783a..ea2d0a19 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasProductModuleFeatureRelation.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasProductModuleFeatureRelation.java @@ -32,6 +32,11 @@ public class SaasProductModuleFeatureRelation extends BaseEntity list = saasProductModuleFeatureRelationDao.lambdaQuery() .eq(SaasProductModuleFeatureRelation::getProductModuleId, req.getProductModuleId()) .eq(Objects.nonNull(req.getDictCodeId()), SaasProductModuleFeatureRelation::getDictCodeId, req.getDictCodeId()) + .eq(StringUtils.hasLength(req.getDictCode()), SaasProductModuleFeatureRelation::getDictCode, req.getDictCode()) .list(); return ApiResult.ok(BeanMapper.copyList(list, ProductFeatureRelationVO.class)); } From 045c1f8db6080a0fe59b9b45269267a8498a9116 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Tue, 12 Sep 2023 18:49:53 +0800 Subject: [PATCH 091/186] =?UTF-8?q?add=20-=20=E4=BA=A7=E5=93=81=E4=B8=8E?= =?UTF-8?q?=E6=9D=83=E9=99=90=E7=82=B9=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AD=97=E5=85=B8=20code=20=E7=9A=84?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/product/ProductFeatureRelationUpdateReq.java | 5 +++++ .../service/impl/ProductFeatureRelationServiceImpl.java | 1 + 2 files changed, 6 insertions(+) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationUpdateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationUpdateReq.java index 3cdac030..6ed6fa36 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationUpdateReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductFeatureRelationUpdateReq.java @@ -32,6 +32,11 @@ public class ProductFeatureRelationUpdateReq { @NotNull(message = "字典 ouType ID 不能为空") private Long dictCodeId; + /** + * 字典的 code + */ + private String dictCode; + /** * 权限点 ID */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java index 8e1d2ac4..5dbd6134 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java @@ -56,6 +56,7 @@ public class ProductFeatureRelationServiceImpl implements ProductFeatureRelation SaasProductModuleFeatureRelation relation = new SaasProductModuleFeatureRelation(); relation.setProductModuleId(i.getProductModuleId()); relation.setDictCodeId(i.getDictCodeId()); + relation.setDictCode(i.getDictCode()); relation.setFeatureId(featureId); saveList.add(relation); })); From d12de53f95c8f6f0d29d2cb5d9552b4ecf530c99 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Tue, 12 Sep 2023 18:51:15 +0800 Subject: [PATCH 092/186] =?UTF-8?q?=E5=AD=97=E5=85=B8=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dict/request/BasicDictCreateReq.java | 2 +- .../model/dict/request/BasicDictNodeReq.java | 2 +- .../model/dict/request/BasicDictQueryReq.java | 8 +- .../client/model/enums/DictTypeFiledEnum.java | 7 +- .../model/enums/DictWorkSpaceTypeEnum.java | 7 +- .../dict/SaasBasicDictController.java | 14 +-- .../server/repository/SaasBasicDictDao.java | 27 +++--- .../repository/entity/SaasBasicDict.java | 5 +- .../server/service/SaasBasicDictService.java | 16 ++-- .../impl/SaasBasicDictServiceImpl.java | 94 ++++++++----------- tyr-server/src/main/resources/bootstrap.yml | 3 + 11 files changed, 92 insertions(+), 93 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictCreateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictCreateReq.java index c3bfa65f..4ba67505 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictCreateReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictCreateReq.java @@ -1,7 +1,7 @@ package cn.axzo.tyr.client.model.dict.request; import cn.axzo.tyr.client.common.annotation.EnumValidator; -import cn.axzo.tyr.client.model.DictTypeFiledEnum; +import cn.axzo.tyr.client.model.enums.DictTypeFiledEnum; import lombok.Data; import org.hibernate.validator.constraints.Length; diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java index dc255fb6..843bc689 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictNodeReq.java @@ -1,7 +1,7 @@ package cn.axzo.tyr.client.model.dict.request; import cn.axzo.tyr.client.common.annotation.EnumValidator; -import cn.axzo.tyr.client.model.DictTypeFiledEnum; +import cn.axzo.tyr.client.model.enums.DictTypeFiledEnum; import lombok.Data; import javax.validation.constraints.NotNull; diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java index 4065c163..17fed839 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/request/BasicDictQueryReq.java @@ -1,8 +1,8 @@ package cn.axzo.tyr.client.model.dict.request; import cn.axzo.tyr.client.common.annotation.EnumValidator; -import cn.axzo.tyr.client.model.DictTypeFiledEnum; -import cn.axzo.tyr.client.model.DictWorkSpaceTypeEnum; +import cn.axzo.tyr.client.model.enums.DictTypeFiledEnum; +import cn.axzo.tyr.client.model.enums.DictWorkSpaceTypeEnum; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -48,9 +48,9 @@ public class BasicDictQueryReq { private List codes; /** - * 状态 + * 状态,默认只查启用记录 */ - private Boolean status; + private Boolean status = true; /** * 层级 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DictTypeFiledEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DictTypeFiledEnum.java index 67c29203..2e803d2a 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DictTypeFiledEnum.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DictTypeFiledEnum.java @@ -1,4 +1,7 @@ -package cn.axzo.tyr.client.model; +package cn.axzo.tyr.client.model.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonValue; import java.util.Arrays; @@ -28,6 +31,8 @@ public enum DictTypeFiledEnum { WORKSPACE("workspace","工作台") ; + @EnumValue + @JsonValue private final String value; private final String description; diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DictWorkSpaceTypeEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DictWorkSpaceTypeEnum.java index 53a28459..c9a963b1 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DictWorkSpaceTypeEnum.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DictWorkSpaceTypeEnum.java @@ -1,4 +1,7 @@ -package cn.axzo.tyr.client.model; +package cn.axzo.tyr.client.model.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import com.fasterxml.jackson.annotation.JsonValue; import java.util.Arrays; @@ -26,6 +29,8 @@ public enum DictWorkSpaceTypeEnum { */ OMS("oms", "OMS工作台"); + @EnumValue + @JsonValue private final String value; private final String description; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java index 40fb173f..c462c1e7 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/dict/SaasBasicDictController.java @@ -28,36 +28,36 @@ public class SaasBasicDictController implements SaasBasicDictApi { @Override public ApiResult> getBasicDictNodeList(BasicDictQueryReq req) { - return saasBasicDictService.getBasicDictNodeList(req); + return ApiResult.ok(saasBasicDictService.getBasicDictNodeList(req)); } @Override public ApiResult> getBasicDictNodeTree(BasicDictQueryReq req) { - return saasBasicDictService.getBasicDictNodeTree(req); + return ApiResult.ok(saasBasicDictService.getBasicDictNodeTree(req)); } @Override public ApiResult getBasicDictNode(BasicDictNodeReq req) { - return saasBasicDictService.getBasicDictNode(req); + return ApiResult.ok(saasBasicDictService.getBasicDictNode(req)); } @Override public ApiResult create(BasicDictCreateReq req) { - return saasBasicDictService.create(req); + return ApiResult.ok(saasBasicDictService.create(req)); } @Override public ApiResult update(BasicDictUpdateReq req) { - return saasBasicDictService.update(req); + return ApiResult.ok(saasBasicDictService.update(req)); } @Override public ApiResult updateStatus(BasicDictUpdateStatusReq req) { - return saasBasicDictService.updateStauts(req); + return ApiResult.ok(saasBasicDictService.updateStauts(req)); } @Override public ApiResult get(Long id) { - return saasBasicDictService.getById(id); + return ApiResult.ok(saasBasicDictService.getById(id)); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java index affb17c5..1045ecea 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java @@ -1,7 +1,6 @@ package cn.axzo.tyr.server.repository; import cn.axzo.basics.common.BeanMapper; -import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.dict.request.BasicDictNodeReq; import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; import cn.axzo.tyr.client.model.dict.request.BasicDictUpdateReq; @@ -30,35 +29,33 @@ public class SaasBasicDictDao extends ServiceImpl queryChainWrapper = lambdaQuery(); if (Objects.nonNull(req)) { queryChainWrapper.eq(Objects.nonNull(req.getParentId()), SaasBasicDict::getParentId, req.getParentId()) - .eq(Objects.nonNull(req.getWorkspaceType()), SaasBasicDict::getWorkspaceType, Objects.nonNull(req.getWorkspaceType()) ? req.getWorkspaceType().getValue() : "") - .eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, Objects.nonNull(req.getType()) ? req.getType().getValue() : "") + .eq(Objects.nonNull(req.getWorkspaceType()), SaasBasicDict::getWorkspaceType, req.getWorkspaceType()) + .eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, req.getType()) .in(Objects.nonNull(req.getCodes()), SaasBasicDict::getCode, req.getCodes()) - .eq(Objects.nonNull(req.getStatus()), SaasBasicDict::getStatus, Boolean.TRUE.equals(req.getStatus()) ? 1 : 0) + .eq(Objects.nonNull(req.getStatus()), SaasBasicDict::getStatus, req.getStatus()) .eq(Objects.nonNull(req.getLevel()), SaasBasicDict::getLevel, req.getLevel()) .like(Objects.nonNull(req.getName()), SaasBasicDict::getName, req.getName()); } List basicDictList = queryChainWrapper.orderByDesc(SaasBasicDict::getSort).list(); - return BeanMapper.copyList(basicDictList, BasicDictNodeResp.class, (s, b) -> b.setStatus(s.getStatus() == 1)); + return BeanMapper.copyList(basicDictList, BasicDictNodeResp.class); } public BasicDictNodeResp getBasicDictNode(BasicDictNodeReq req) { - SaasBasicDict saasBasicDict = lambdaQuery().eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, req.getType().getValue()) + SaasBasicDict saasBasicDict = lambdaQuery().eq(Objects.nonNull(req.getType()), SaasBasicDict::getType, req.getType()) .eq(Objects.nonNull(req.getCode()), SaasBasicDict::getCode, req.getCode()) .one(); - return BeanMapper.copyBean(saasBasicDict, BasicDictNodeResp.class, (s, b) -> b.setStatus(s.getStatus() == 1)); + return BeanMapper.copyBean(saasBasicDict, BasicDictNodeResp.class); } - public ApiResult updateStatus(BasicDictUpdateStatusReq req) { - boolean update = lambdaUpdate().eq(SaasBasicDict::getId, req.getId()) - .set(SaasBasicDict::getStatus, req.getStatus() ? 1 : 0) + public Boolean updateStatus(BasicDictUpdateStatusReq req) { + return lambdaUpdate().eq(SaasBasicDict::getId, req.getId()) + .set(SaasBasicDict::getStatus, req.getStatus()) .update(); - return ApiResult.ok(update); } - public ApiResult update(BasicDictUpdateReq req) { - boolean update = lambdaUpdate().eq(SaasBasicDict::getId, req.getId()) - .set(SaasBasicDict::getName, req.getId()) + public Boolean update(BasicDictUpdateReq req) { + return lambdaUpdate().eq(SaasBasicDict::getId, req.getId()) + .set(SaasBasicDict::getName, req.getName()) .update(); - return ApiResult.ok(update); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java index 717e0d29..f7b5c798 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasBasicDict.java @@ -8,6 +8,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.apache.ibatis.type.BooleanTypeHandler; import java.io.Serializable; import java.util.Map; @@ -67,8 +68,8 @@ public class SaasBasicDict extends BaseEntity implements Serializ /** * 状态,0禁用,1启用 */ - @TableField(value = "status") - private Integer status; + @TableField(value = "status", typeHandler = BooleanTypeHandler.class) + private Boolean status; /** * 排序 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java index 0335dc8c..a40071dc 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java @@ -1,6 +1,5 @@ package cn.axzo.tyr.server.service; -import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.dict.request.*; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; @@ -15,16 +14,17 @@ import java.util.List; * @version: 1.0 */ public interface SaasBasicDictService { - ApiResult> getBasicDictNodeList(BasicDictQueryReq req); + List getBasicDictNodeList(BasicDictQueryReq req); - ApiResult> getBasicDictNodeTree(BasicDictQueryReq req); - ApiResult getById(Long id); + List getBasicDictNodeTree(BasicDictQueryReq req); - ApiResult getBasicDictNode(BasicDictNodeReq req); + BasicDictNodeResp getById(Long id); - ApiResult create(BasicDictCreateReq req); + BasicDictNodeResp getBasicDictNode(BasicDictNodeReq req); - ApiResult update(BasicDictUpdateReq req); + Long create(BasicDictCreateReq req); - ApiResult updateStauts(BasicDictUpdateStatusReq req); + Boolean update(BasicDictUpdateReq req); + + Boolean updateStauts(BasicDictUpdateStatusReq req); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java index 2fde94c3..ef317463 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -2,7 +2,6 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.BeanMapper; import cn.axzo.framework.domain.ServiceException; -import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.dict.request.*; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; @@ -17,8 +16,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.ArrayList; -import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; @@ -37,8 +36,8 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { private final SaasBasicDictDao saasBasicDictDao; @Override - public ApiResult> getBasicDictNodeList(BasicDictQueryReq req) { - return ApiResult.ok(saasBasicDictDao.getBasicDictNodeList(req)); + public List getBasicDictNodeList(BasicDictQueryReq req) { + return saasBasicDictDao.getBasicDictNodeList(req); } /** @@ -48,10 +47,11 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { * @return */ @Override - public ApiResult> getBasicDictNodeTree(BasicDictQueryReq req) { + public List getBasicDictNodeTree(BasicDictQueryReq req) { // 获取所有节点 List basicDictNodeList = saasBasicDictDao.getBasicDictNodeList(req); - return ApiResult.ok(constructDictTree(basicDictNodeList)); + + return constructDictTree(basicDictNodeList); } /** @@ -62,41 +62,27 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { */ public List constructDictTree(List nodeList) { if (CollectionUtil.isEmpty(nodeList)) { - return null; + return new ArrayList<>(); } - ArrayList root = new ArrayList<>(); - LinkedHashMap map = new LinkedHashMap<>(); + List parentIds = nodeList.stream().map(BasicDictNodeResp::getParentId).distinct().collect(Collectors.toList()); + nodeList.addAll(BeanMapper.copyList(saasBasicDictDao.listByIds(parentIds), BasicDictNodeResp.class)); - nodeList.forEach(node -> { - BasicDictTreeResp treeNode = BeanMapper.copyBean(node, BasicDictTreeResp.class); - map.put(node.getId(), treeNode); - if (node.getParentId() == 0) { - root.add(treeNode); - } - }); + Map nodeMap = nodeList.stream() + .distinct() + .collect(Collectors.toMap(BasicDictNodeResp::getId, nodeResp -> BeanMapper.copyBean(nodeResp, BasicDictTreeResp.class))); - // 若没有顶级节点(即一级节点),则需要查询一级节点 - if (CollectionUtil.isEmpty(root)) { - List parentIds = nodeList.stream().map(BasicDictNodeResp::getParentId).distinct().collect(Collectors.toList()); - List parentDicts = saasBasicDictDao.listByIds(parentIds); - parentDicts.forEach(s -> { - BasicDictTreeResp parentTreeNode = BeanMapper.copyBean(s, BasicDictTreeResp.class, (s1, b) -> b.setStatus(s1.getStatus() == 1)); - root.add(parentTreeNode); - map.put(parentTreeNode.getId(), parentTreeNode); - }); - } - - map.values().forEach(treeNode -> { - BasicDictTreeResp parent = map.get(treeNode.getParentId()); - if (Objects.nonNull(parent)) { + nodeMap.forEach((id, basicDictTreeResp) -> { + if (basicDictTreeResp.getParentId() == 0) { + root.add(basicDictTreeResp); + } else { + BasicDictTreeResp parent = nodeMap.get(basicDictTreeResp.getParentId()); if (Objects.isNull(parent.getChildren())) { parent.setChildren(new ArrayList<>()); } - parent.getChildren().add(treeNode); + parent.getChildren().add(basicDictTreeResp); } }); - return root; } @@ -107,18 +93,19 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { * @return 一个字典节点 */ @Override - public ApiResult getBasicDictNode(BasicDictNodeReq req) { - return ApiResult.ok(saasBasicDictDao.getBasicDictNode(req)); + public BasicDictNodeResp getBasicDictNode(BasicDictNodeReq req) { + return saasBasicDictDao.getBasicDictNode(req); } /** * 创建字典节点 + * 目前不支持创建顶级节点即工作台类型 * * @param req * @return */ @Override - public ApiResult create(BasicDictCreateReq req) { + public Long create(BasicDictCreateReq req) { SaasBasicDict parent = saasBasicDictDao.getById(req.getParentId()); if (Objects.isNull(parent)) { throw new ServiceException("不存在给定的上级节点"); @@ -134,42 +121,43 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { throw new ServiceException("该节点下已存在名称为" + req.getName() + "的节点"); } if (n.getCode().equals(req.getCode())) { - throw new ServiceException("该节点下已存在code为" + req.getName() + "的节点"); + throw new ServiceException("该节点下已存在code为" + req.getCode() + "的节点"); } }); - int count = 0; for (int i = 0; i < 3; i++) { - // 生成唯一的unique_code,若生成了与数据库中已存在uniqueCode - String uniqueCode = RandomUtil.randomString(10); - SaasBasicDict saasBasicDict = BeanMapper.copyBean(req, SaasBasicDict.class, (b, s) -> { - s.setWorkspaceType(parent.getWorkspaceType()); - s.setType(b.getType().getValue()); - s.setUniqueCode(uniqueCode); - s.setLevel(parent.getLevel() + 1); - s.setPath(String.join(",", parent.getPath(), uniqueCode)); - }); try { + // 生成唯一的unique_code,若生成了与数据库中已存在uniqueCode重复的uniqueCode + String uniqueCode = RandomUtil.randomString(10); + SaasBasicDict saasBasicDict = BeanMapper.copyBean(req, SaasBasicDict.class, (b, s) -> { + s.setWorkspaceType(parent.getWorkspaceType()); + s.setType(b.getType().getValue()); + s.setUniqueCode(uniqueCode); + s.setLevel(parent.getLevel() + 1); + s.setPath(String.join(",", parent.getPath(), uniqueCode)); + }); boolean save = saasBasicDictDao.save(saasBasicDict); + if (save) { + return saasBasicDict.getId(); + } } catch (MybatisPlusException e) { -// if () + } } - - return null; + throw new ServiceException("系统繁忙,请稍后重试"); } @Override - public ApiResult update(BasicDictUpdateReq req) { + public Boolean update(BasicDictUpdateReq req) { return saasBasicDictDao.update(req); } @Override - public ApiResult updateStauts(BasicDictUpdateStatusReq req) { + public Boolean updateStauts(BasicDictUpdateStatusReq req) { return saasBasicDictDao.updateStatus(req); } @Override - public ApiResult getById(Long id) { - return ApiResult.ok(BeanMapper.copyBean(saasBasicDictDao.getById(id), BasicDictNodeResp.class)); + public BasicDictNodeResp getById(Long id) { + return BeanMapper.copyBean(saasBasicDictDao.getById(id), BasicDictNodeResp.class); } } diff --git a/tyr-server/src/main/resources/bootstrap.yml b/tyr-server/src/main/resources/bootstrap.yml index 80e20e00..08d64163 100644 --- a/tyr-server/src/main/resources/bootstrap.yml +++ b/tyr-server/src/main/resources/bootstrap.yml @@ -13,6 +13,9 @@ spring: main: allow-bean-definition-overriding: true +mybatis-plus: + type-enums-package: cn.axzo.tyr.client.model.enums + logging: level: com.alibaba.nacos.client.config.impl: WARN From d1c7059e6d342a14cf454952b61c82024f64b046 Mon Sep 17 00:00:00 2001 From: yangsong Date: Tue, 12 Sep 2023 18:57:07 +0800 Subject: [PATCH 093/186] =?UTF-8?q?=E6=8A=A5=E9=94=99=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/enums/PermissionGroupType.java | 2 +- .../client/model/enums/PermissionScope.java | 29 ++++++++++++++++ .../model/enums/PermissionScopeType.java | 29 ++++++++++++++++ .../model/vo/SaasPermissionGroupVO.java | 9 +++++ .../model/vo/SaasRolePermissionScopeVO.java | 2 ++ .../entity/SaasPermissionGroup.java | 4 +++ .../entity/SaasPermissionGroupScope.java | 2 +- .../service/impl/PermissionGroupImpl.java | 34 ++++++++++++++++--- 8 files changed, 105 insertions(+), 6 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionScope.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionScopeType.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionGroupType.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionGroupType.java index 6a92fd64..d2808dbd 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionGroupType.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionGroupType.java @@ -10,7 +10,7 @@ import java.util.Map; @AllArgsConstructor public enum PermissionGroupType { COMMON(1, "通用"), - Special (0, "例外"), + SPECIAL(0, "例外"), ; private Integer code; diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionScope.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionScope.java new file mode 100644 index 00000000..5fbd890c --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionScope.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.client.model.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +@Getter +@AllArgsConstructor +public enum PermissionScope { + INCLUDE(1, "正选"), + EXCLUDE (2, "反选"), + ; + + private Integer code; + private String desc; + + private static final Map MAPPING = new HashMap<>(); + static { + for (PermissionScope type : PermissionScope.values()) { + MAPPING.put(type.code, type); + } + } + + public static PermissionScope apply(Integer code) { + return code == null ? null :MAPPING.get(code); + } +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionScopeType.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionScopeType.java new file mode 100644 index 00000000..d08e51a0 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionScopeType.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.client.model.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +@Getter +@AllArgsConstructor +public enum PermissionScopeType { + WORKSPACE("workspace", "项目部"), + OU ("ou", "单位"), + ; + + private String code; + private String desc; + + private static final Map MAPPING = new HashMap<>(); + static { + for (PermissionScopeType type : PermissionScopeType.values()) { + MAPPING.put(type.code, type); + } + } + + public static PermissionScopeType apply(Integer code) { + return code == null ? null :MAPPING.get(code); + } +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java index c22753a2..97102097 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java @@ -46,9 +46,18 @@ public class SaasPermissionGroupVO { */ private String type; + /** + * 是否为通用权限集 1:是 0:否 + */ + private Integer isCommon; + /** * 权限 */ private List feature; + /** + * 权限范围 + */ + private List scopes; } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRolePermissionScopeVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRolePermissionScopeVO.java index 5923b3d7..283cec37 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRolePermissionScopeVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRolePermissionScopeVO.java @@ -14,6 +14,8 @@ public class SaasRolePermissionScopeVO { private Long id; + private Long pgroupId; + /** * 选择类型: 1.正选 2.反选 */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java index 23c6491b..ea68f23a 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java @@ -36,11 +36,15 @@ public class SaasPermissionGroup extends BaseEntity { * 创建者 */ private Long createBy; + + private String createName; /** * 更新者 */ private Long updateBy; + private String updateName; + /** * 权限集类型:feature data */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java index 808a1725..ad530253 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java @@ -27,7 +27,7 @@ public class SaasPermissionGroupScope extends BaseEntity query(QuerySaasPermissionGroupReq req) { @@ -56,6 +62,12 @@ public class PermissionGroupImpl implements PermissionGroupService { .in(SaasPgroupRoleRelation::getRoleId, req.getRoleIds()) .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) .list(); + List hitIds = relationList.stream().map(SaasPgroupRoleRelation::getGroupId).distinct().collect(Collectors.toList()); + if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(req.getIds())) { + req.getIds().retainAll(hitIds); + } else { + req.setIds(hitIds); + } // 如果没查询到关联关系则直接返回 if (CollectionUtils.isEmpty(relationList)) { return new ArrayList<>(); @@ -68,6 +80,7 @@ public class PermissionGroupImpl implements PermissionGroupService { .eq(req.getCreateBy() != null, SaasPermissionGroup::getCreateBy, req.getCreateBy()) .eq(req.getUpdateBy() != null, SaasPermissionGroup::getUpdateBy, req.getUpdateBy()) .eq(StringUtils.isNotBlank(req.getType()), SaasPermissionGroup::getType, req.getType()) + .like(StringUtils.isNotBlank(req.getName()), SaasPermissionGroup::getName, req.getName()) .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) .orderByDesc(BaseEntity::getId) .list(); @@ -75,9 +88,10 @@ public class PermissionGroupImpl implements PermissionGroupService { if (CollectionUtils.isEmpty(groupList)) { return new ArrayList<>(); } + List groupIds = groupList.stream().map(BaseEntity::getId).collect(Collectors.toList()); // 查询权限集关联的权限 List permissionList = permissionRelationDao.lambdaQuery() - .in(SaasPgroupPermissionRelation::getGroupId, groupList.stream().map(BaseEntity::getId).collect(Collectors.toList())) + .in(SaasPgroupPermissionRelation::getGroupId, groupIds) .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) .list(); List feature = null; @@ -85,6 +99,10 @@ public class PermissionGroupImpl implements PermissionGroupService { // 查询featureCode feature = featureService.listNodesByIds(permissionList.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())); } + List saasPermissionGroupScopes = saasPermissionGroupScopeDao.lambdaQuery() + .in(SaasPermissionGroupScope::getPgroupId, groupIds) + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .list(); // 组装填充字段 List finalFeature = feature; return groupList.stream().map(group -> @@ -92,9 +110,11 @@ public class PermissionGroupImpl implements PermissionGroupService { .id(group.getId()) .name(group.getName()) .feature(finalFeature) + .scopes(saasPermissionGroupScopes.stream().map(e -> BeanMapper.copyBean(e, SaasRolePermissionScopeVO.class)).collect(Collectors.toList())) .createBy(group.getCreateBy()) .updateBy(group.getUpdateBy()) .type(group.getType()) + .isCommon(group.getIsCommon()) .build() ).collect(Collectors.toList()); @@ -129,16 +149,17 @@ public class PermissionGroupImpl implements PermissionGroupService { .eq(StringUtils.isNotBlank(req.getType()), SaasPermissionGroup::getType, req.getType()) .like(StringUtils.isNotBlank(req.getName()), SaasPermissionGroup::getName, req.getName()) .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) - .orderByDesc(BaseEntity::getId) + .orderByAsc(BaseEntity::getCreateAt).orderByAsc(BaseEntity::getId) .page(iPage); List groupList = iPage.getRecords(); // 如果权限集为空则直接返回 if (CollectionUtils.isEmpty(groupList)) { return PageResp.zero(iPage.getCurrent(), iPage.getSize()); } + List groupIds = groupList.stream().map(BaseEntity::getId).collect(Collectors.toList()); // 查询权限集关联的权限 List permissionList = permissionRelationDao.lambdaQuery() - .in(SaasPgroupPermissionRelation::getGroupId, groupList.stream().map(BaseEntity::getId).collect(Collectors.toList())) + .in(SaasPgroupPermissionRelation::getGroupId, groupIds) .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) .list(); List feature = null; @@ -146,6 +167,10 @@ public class PermissionGroupImpl implements PermissionGroupService { // 查询featureCode feature = featureService.listNodesByIds(permissionList.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())); } + List saasPermissionGroupScopes = saasPermissionGroupScopeDao.lambdaQuery() + .in(SaasPermissionGroupScope::getPgroupId, groupIds) + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .list(); // 组装填充字段 List finalFeature = feature; List pageList = groupList.stream().map(group -> @@ -153,12 +178,13 @@ public class PermissionGroupImpl implements PermissionGroupService { .id(group.getId()) .name(group.getName()) .feature(finalFeature) + .scopes(saasPermissionGroupScopes.stream().map(e -> BeanMapper.copyBean(e, SaasRolePermissionScopeVO.class)).collect(Collectors.toList())) .createBy(group.getCreateBy()) .updateBy(group.getUpdateBy()) .type(group.getType()) + .isCommon(group.getIsCommon()) .build() ).collect(Collectors.toList()); return PageResp.list(iPage.getCurrent(), iPage.getSize(), iPage.getTotal(), pageList); } - } From 041145b8e51a1476ea4f5d78f4734ea2b7d289eb Mon Sep 17 00:00:00 2001 From: yangsong Date: Tue, 12 Sep 2023 19:14:30 +0800 Subject: [PATCH 094/186] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E4=BA=BA=E5=A7=93?= =?UTF-8?q?=E5=90=8D=E5=92=8C=E4=BF=AE=E6=94=B9=E4=BA=BA=E5=A7=93=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/server/repository/entity/SaasPermissionGroup.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java index ea68f23a..8fcd2444 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroup.java @@ -37,13 +37,13 @@ public class SaasPermissionGroup extends BaseEntity { */ private Long createBy; - private String createName; + private String creatorName; /** * 更新者 */ private Long updateBy; - private String updateName; + private String updatorName; /** * 权限集类型:feature data From 4a24ab8126f83c8e11270b8fd4a662b2a990ed08 Mon Sep 17 00:00:00 2001 From: yangsong Date: Tue, 12 Sep 2023 21:05:46 +0800 Subject: [PATCH 095/186] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E9=83=A8=E5=8D=95?= =?UTF-8?q?=E4=BD=8D=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/feign/SaasRoleGroupApi.java | 3 +++ .../role/SaasPermissionGroupController.java | 10 +++++++++- .../controller/role/SaasRoleGroupController.java | 13 +++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java index d2a1d414..0a61b026 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java @@ -30,6 +30,9 @@ public interface SaasRoleGroupApi { @PostMapping("/api/saasRoleGroup/getList") ApiResult> getList(@RequestBody QuerySaasRoleGroupReq req); + @PostMapping("/api/saasRoleGroup/getById") + ApiResult getById(@RequestParam("id") Long id); + /** * 删除 */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java index 27bc90e0..db0db94d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java @@ -1,6 +1,8 @@ package cn.axzo.tyr.server.controller.role; +import cn.axzo.framework.domain.web.BizException; +import cn.axzo.framework.domain.web.code.BaseCode; import cn.axzo.framework.domain.web.result.ApiPageResult; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.SaasPermissionGroupApi; @@ -10,8 +12,10 @@ import cn.axzo.tyr.server.repository.service.SaasPermissionGroupDao; import cn.axzo.tyr.server.repository.service.SaasPermissionGroupScopeDao; import cn.axzo.tyr.server.repository.service.SaasPgroupPermissionRelationDao; import cn.axzo.tyr.server.service.PermissionGroupService; +import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RestController; @@ -34,7 +38,11 @@ public class SaasPermissionGroupController implements SaasPermissionGroupApi { @Override public ApiResult getById(Long id) { - return null; + List pGroups = permissionGroupService.query(QuerySaasPermissionGroupReq.builder().ids(Lists.newArrayList(id)).build()); + if (CollectionUtils.isEmpty(pGroups)) { + throw new BizException(BaseCode.BAD_REQUEST, "未查询到权限组信息"); + } + return ApiResult.ok(pGroups.get(0)); } @Override diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java index 4971b46d..698dc814 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java @@ -1,12 +1,16 @@ package cn.axzo.tyr.server.controller.role; +import cn.axzo.framework.domain.web.BizException; +import cn.axzo.framework.domain.web.code.BaseCode; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.SaasRoleGroupApi; import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; import cn.axzo.tyr.server.service.SaasRoleGroupService; +import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; import org.springframework.web.bind.annotation.RestController; import java.util.List; @@ -29,6 +33,15 @@ public class SaasRoleGroupController implements SaasRoleGroupApi { return ApiResult.ok(saasRoleGroupService.getList(req)); } + @Override + public ApiResult getById(Long id) { + List roleGroups = saasRoleGroupService.getList(QuerySaasRoleGroupReq.builder().ids(Lists.newArrayList(id)).build()); + if (CollectionUtils.isEmpty(roleGroups)) { + throw new BizException(BaseCode.BAD_REQUEST, "未查询到角色分组信息"); + } + return ApiResult.ok(roleGroups.get(0)); + } + @Override public ApiResult delete(List id) { From 538a17e8077010d4e7e35841e5cfffdf9b61f0f6 Mon Sep 17 00:00:00 2001 From: chenweiwei Date: Tue, 12 Sep 2023 23:14:58 +0800 Subject: [PATCH 096/186] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E6=9D=83=E9=99=90=E9=9B=86=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=9D=83=E9=99=90=E4=BD=9C=E7=94=A8=E8=8C=83?= =?UTF-8?q?=E5=9B=B4=E7=AD=9B=E9=80=89=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../req/QuerySaasPermissionGroupReq.java | 10 +++++ .../client/model/req/QuerySaasRoleReq.java | 10 +++++ .../model/vo/SaasPermissionGroupVO.java | 1 + .../service/impl/PermissionGroupImpl.java | 45 +++++++++++++++++-- .../server/service/impl/RoleServiceImpl.java | 15 ++++--- 5 files changed, 71 insertions(+), 10 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java index 8735d0ae..893ef00f 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java @@ -35,6 +35,16 @@ public class QuerySaasPermissionGroupReq extends PageRequest { */ private Integer isCommon; + /** + * 工作台id(过滤权限集作用范围) + */ + private List workspaceId; + + /** + * 单位id(过滤权限集作用范围) + */ + private List ouId; + /** * 创建者 */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java index 2527491b..94bc2937 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java @@ -33,6 +33,16 @@ public class QuerySaasRoleReq { */ private List ouTypeCode; + /** + * 工作台id(过滤权限集作用范围) + */ + private List workspaceId; + + /** + * 单位id(过滤权限集作用范围) + */ + private List ouId; + /** * 分组id */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java index 97102097..bc7b72c4 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java @@ -55,6 +55,7 @@ public class SaasPermissionGroupVO { * 权限 */ private List feature; + /** * 权限范围 */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index 777362cc..a1a132d1 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -4,6 +4,7 @@ import cn.axzo.basics.common.BeanMapper; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.framework.domain.page.PageResp; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.model.enums.PermissionScopeType; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; @@ -99,10 +100,28 @@ public class PermissionGroupImpl implements PermissionGroupService { // 查询featureCode feature = featureService.listNodesByIds(permissionList.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())); } - List saasPermissionGroupScopes = saasPermissionGroupScopeDao.lambdaQuery() + List saasPermissionGroupScopesSource = saasPermissionGroupScopeDao.lambdaQuery() .in(SaasPermissionGroupScope::getPgroupId, groupIds) .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) .list(); + // 过滤权限集作用范围 + List saasPermissionGroupScopes = saasPermissionGroupScopesSource.stream().filter(e -> { + // 过滤出选中的工作台 + if (CollectionUtils.isNotEmpty(req.getWorkspaceId()) + && PermissionScopeType.WORKSPACE.getCode().equals(e.getScopeType()) + && req.getWorkspaceId().contains(e.getScopeId())) { + req.getWorkspaceId().contains(e.getScopeId()); + return true; + } + // 过滤出选中的单位 + if (CollectionUtils.isNotEmpty(req.getOuId()) + && PermissionScopeType.OU.getCode().equals(e.getScopeType()) + && req.getOuId().contains(e.getScopeId())) { + req.getWorkspaceId().contains(e.getScopeId()); + return true; + } + return false; + }).collect(Collectors.toList()); // 组装填充字段 List finalFeature = feature; return groupList.stream().map(group -> @@ -110,7 +129,7 @@ public class PermissionGroupImpl implements PermissionGroupService { .id(group.getId()) .name(group.getName()) .feature(finalFeature) - .scopes(saasPermissionGroupScopes.stream().map(e -> BeanMapper.copyBean(e, SaasRolePermissionScopeVO.class)).collect(Collectors.toList())) + .scopes(saasPermissionGroupScopes.stream().filter(e -> e.getPgroupId().equals(group.getId())).map(e -> BeanMapper.copyBean(e, SaasRolePermissionScopeVO.class)).collect(Collectors.toList())) .createBy(group.getCreateBy()) .updateBy(group.getUpdateBy()) .type(group.getType()) @@ -167,10 +186,28 @@ public class PermissionGroupImpl implements PermissionGroupService { // 查询featureCode feature = featureService.listNodesByIds(permissionList.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())); } - List saasPermissionGroupScopes = saasPermissionGroupScopeDao.lambdaQuery() + List saasPermissionGroupScopesSource = saasPermissionGroupScopeDao.lambdaQuery() .in(SaasPermissionGroupScope::getPgroupId, groupIds) .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) .list(); + // 过滤权限集作用范围 + List saasPermissionGroupScopes = saasPermissionGroupScopesSource.stream().filter(e -> { + // 过滤出选中的工作台 + if (CollectionUtils.isNotEmpty(req.getWorkspaceId()) + && PermissionScopeType.WORKSPACE.getCode().equals(e.getScopeType()) + && req.getWorkspaceId().contains(e.getScopeId())) { + req.getWorkspaceId().contains(e.getScopeId()); + return true; + } + // 过滤出选中的单位 + if (CollectionUtils.isNotEmpty(req.getOuId()) + && PermissionScopeType.OU.getCode().equals(e.getScopeType()) + && req.getOuId().contains(e.getScopeId())) { + req.getWorkspaceId().contains(e.getScopeId()); + return true; + } + return false; + }).collect(Collectors.toList()); // 组装填充字段 List finalFeature = feature; List pageList = groupList.stream().map(group -> @@ -178,7 +215,7 @@ public class PermissionGroupImpl implements PermissionGroupService { .id(group.getId()) .name(group.getName()) .feature(finalFeature) - .scopes(saasPermissionGroupScopes.stream().map(e -> BeanMapper.copyBean(e, SaasRolePermissionScopeVO.class)).collect(Collectors.toList())) + .scopes(saasPermissionGroupScopes.stream().filter(e -> e.getPgroupId().equals(group.getId())).map(e -> BeanMapper.copyBean(e, SaasRolePermissionScopeVO.class)).collect(Collectors.toList())) .createBy(group.getCreateBy()) .updateBy(group.getUpdateBy()) .type(group.getType()) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 4450c7b9..5274ab9b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -56,7 +56,7 @@ public class RoleServiceImpl implements RoleService { if (CollectionUtils.isEmpty(roleIds)) { return new ArrayList<>(); } - return getByIds(roleIds, null); + return getByIds(roleIds, null, null,null); } /** @@ -64,7 +64,7 @@ public class RoleServiceImpl implements RoleService { * * @return */ - public List getByIds(List roleIds, Integer isCommon) { + public List getByIds(List roleIds, Integer isCommon, List workspaceId, List ouId) { if (CollectionUtils.isEmpty(roleIds)) { return new ArrayList<>(); } @@ -79,9 +79,12 @@ public class RoleServiceImpl implements RoleService { // 转map pgrouRelationMap = saasPgroupRoleRelations.stream().collect(Collectors.groupingBy(SaasPgroupRoleRelation::getRoleId)); // 查询权限集 - pGroupMap = permissionGroupService.query(QuerySaasPermissionGroupReq.builder().isCommon(isCommon) - .ids(saasPgroupRoleRelations.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())) - .build()) + pGroupMap = permissionGroupService.query(QuerySaasPermissionGroupReq.builder() + .isCommon(isCommon) + .ids(saasPgroupRoleRelations.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())) + .workspaceId(workspaceId) + .ouId(ouId) + .build()) // 转map .stream().collect(Collectors.groupingBy(SaasPermissionGroupVO::getId)); } @@ -142,7 +145,7 @@ public class RoleServiceImpl implements RoleService { .eq(StringUtils.isNotBlank(req.getRoleType()), SaasRole::getRoleType, req.getRoleType()) .orderByDesc(BaseEntity::getId) .list(); - return getByIds(list.stream().map(BaseEntity::getId).collect(Collectors.toList()), req.getIsCommon()); + return getByIds(list.stream().map(BaseEntity::getId).collect(Collectors.toList()), req.getIsCommon(),req.getWorkspaceId(),req.getOuId()); } @Override From b100ec729b704b7a130caeedf4e2c5d122a9423e Mon Sep 17 00:00:00 2001 From: zhansihu Date: Wed, 13 Sep 2023 09:54:06 +0800 Subject: [PATCH 097/186] =?UTF-8?q?feature(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=20=E5=A2=9E=E5=8A=A0=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=9B=E5=A2=9E=E5=8A=A0=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/feign/PermissionPointApi.java | 14 +- .../PermissionPointListQueryRequest.java | 36 +++++ .../PermissionPointMoveRequest.java | 30 ++++ .../axzo/tyr/server/common/util/Throws.java | 21 +++ .../permission/PermissionPointController.java | 12 +- .../repository/service/SaasFeatureDao.java | 2 + .../service/impl/SaasFeatureDaoImpl.java | 7 + .../service/PermissionPointService.java | 11 +- .../impl/PermissionPointServiceImpl.java | 138 +++++++++++------- .../permission/PermissionPointTest.java | 32 ++-- 10 files changed, 218 insertions(+), 85 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointListQueryRequest.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointMoveRequest.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/common/util/Throws.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java index 15eccb12..97451956 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java @@ -2,6 +2,8 @@ package cn.axzo.tyr.client.feign; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.permission.PermissionPointDTO; +import cn.axzo.tyr.client.model.permission.PermissionPointListQueryRequest; +import cn.axzo.tyr.client.model.permission.PermissionPointMoveRequest; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.client.model.permission.PermissionPointVO; @@ -45,11 +47,11 @@ public interface PermissionPointApi { ApiResult deletePermissionPoint(@PathVariable Long permissionId); - /** 更新父级节点 - 直接更新不校验 **/ - @PostMapping(value = "/api/v1/permissionPoint/change/{permissionId}") - ApiResult changeParent(@RequestParam Long updater, @PathVariable Long permissionId, @RequestParam Long newParentId); + /** 位置移动 **/ + @PostMapping(value = "/api/v1/permissionPoint/move") + ApiResult move(@RequestBody PermissionPointMoveRequest request); - /** 更改排序 **/ - @PostMapping(value = "/api/v1/permissionPoint/sort/{permissionId}") - ApiResult updateSort(@RequestParam Long updater, @PathVariable Long permissionId, @RequestParam Integer direction); + /** 查询权限点列表 - 不组装树形结构 **/ + @PostMapping(value = "/api/v1/permissionPoint/queryList") + ApiResult> queryList(@RequestBody PermissionPointListQueryRequest request); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointListQueryRequest.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointListQueryRequest.java new file mode 100644 index 00000000..9f96f411 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointListQueryRequest.java @@ -0,0 +1,36 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +/** + * 权限点列表查询对象 + * 按需扩展 + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/12 18:51 + */ +@Data +public class PermissionPointListQueryRequest { + + /** + * 元素类别 0.模块 1.菜单 2页面 3按钮 + * 参考FeatureType + * **/ + private Integer featureType; + + /** + * 权限点所属工作台 + * **/ + private String terminal; + + /** + * 父级权限点ID + * **/ + private Long parentId; + + /** + * path左匹配 + * **/ + private String likePath; +} + diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointMoveRequest.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointMoveRequest.java new file mode 100644 index 00000000..c1df001b --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointMoveRequest.java @@ -0,0 +1,30 @@ +package cn.axzo.tyr.client.model.permission; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 权限点移动请求 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/12 15:45 + */ +@Data +public class PermissionPointMoveRequest { + + /** 权限点ID **/ + @NotNull(message = "权限点ID不能为空") + private Long permissionId; + + /** 父级节点ID - 可为空-则parent为工作台 **/ + private Long parentId = 0L; + + /** 排序sort **/ + @NotNull(message = "权限点排序不能为空") + private Integer sort; + + /** 操作人 **/ + private Long updaterId; +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/common/util/Throws.java b/tyr-server/src/main/java/cn/axzo/tyr/server/common/util/Throws.java new file mode 100644 index 00000000..c63a9249 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/common/util/Throws.java @@ -0,0 +1,21 @@ +package cn.axzo.tyr.server.common.util; + +import cn.axzo.framework.core.enums.ErrorLevel; +import cn.axzo.framework.core.enums.ErrorType; +import cn.axzo.framework.domain.web.BizException; +import cn.axzo.framework.domain.web.code.IRespCode; + +/** + * 抛异常工具 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/12 11:25 + */ +public class Throws { + + /** 用于抛出请求参数类异常 **/ + public static BizException paramException(IRespCode code, String message) { + throw new BizException(ErrorLevel.P2, ErrorType.ERROR_BUSINESS, code, message); + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java index d999b2a6..773e69ca 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java @@ -3,6 +3,8 @@ package cn.axzo.tyr.server.controller.permission; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.PermissionPointApi; import cn.axzo.tyr.client.model.permission.PermissionPointDTO; +import cn.axzo.tyr.client.model.permission.PermissionPointListQueryRequest; +import cn.axzo.tyr.client.model.permission.PermissionPointMoveRequest; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.client.model.permission.PermissionPointVO; @@ -57,15 +59,15 @@ public class PermissionPointController implements PermissionPointApi { return ApiResult.ok(); } + @Override - public ApiResult changeParent(Long updater, Long permissionId, Long newParentId) { - permissionPointService.changeParent(updater, permissionId, newParentId); + public ApiResult move(PermissionPointMoveRequest request) { + permissionPointService.move(request); return ApiResult.ok(); } @Override - public ApiResult updateSort(Long updater, Long permissionId, Integer direction) { - permissionPointService.updateSort(updater, permissionId, direction); - return ApiResult.ok(); + public ApiResult> queryList(PermissionPointListQueryRequest request) { + return ApiResult.ok(permissionPointService.queryList(request)); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasFeatureDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasFeatureDao.java index cd84f261..0751a47d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasFeatureDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasFeatureDao.java @@ -22,4 +22,6 @@ public interface SaasFeatureDao extends IService { void updateSort(Long permissionId, int switchIndex); List listLikePath(String path); + + List listByParentIdAndTerminal(Long parentId, String terminal); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java index d917e9bf..cb863a87 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java @@ -42,4 +42,11 @@ public class SaasFeatureDaoImpl extends ServiceImpl listLikePath(String path) { return this.list(new LambdaQueryWrapper().likeRight(SaasFeature::getPath, path)); } + + @Override + public List listByParentIdAndTerminal(Long parentId, String terminal) { + return this.list(new LambdaQueryWrapper() + .eq(SaasFeature::getParentId, parentId) + .eq(SaasFeature::getTerminal, terminal)); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java index 70e71451..1f48543b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java @@ -1,10 +1,11 @@ package cn.axzo.tyr.server.service; import cn.axzo.tyr.client.model.permission.PermissionPointDTO; +import cn.axzo.tyr.client.model.permission.PermissionPointListQueryRequest; +import cn.axzo.tyr.client.model.permission.PermissionPointMoveRequest; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.client.model.permission.PermissionPointVO; -import cn.axzo.tyr.server.repository.entity.SaasFeature; import java.util.List; @@ -38,10 +39,8 @@ public interface PermissionPointService { /** 删除权限点 **/ void delete(Long permissionId); - /** 更新父级 **/ - void changeParent(Long updater, Long permissionId,Long newParentId); - - /** 移动排序 **/ - void updateSort(Long updater, Long permissionId, Integer direction); + /** 位置移动-父级和排序 **/ + void move(PermissionPointMoveRequest request); + List queryList(PermissionPointListQueryRequest request); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 2078213c..313bc9f7 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -12,6 +12,8 @@ import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; import cn.axzo.tyr.client.model.enums.FeatureType; import cn.axzo.tyr.client.model.permission.PermissionPointDTO; +import cn.axzo.tyr.client.model.permission.PermissionPointListQueryRequest; +import cn.axzo.tyr.client.model.permission.PermissionPointMoveRequest; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.client.model.permission.PermissionPointVO; @@ -30,6 +32,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; import java.util.stream.Collectors; @@ -316,67 +319,92 @@ public class PermissionPointServiceImpl implements PermissionPointService { this.saasPgroupPermissionRelationDao.removeByPermissionPointIds(delIds); } - @Transactional(rollbackFor = Throwable.class) + @Override - public void changeParent(Long updater, Long permissionId, Long newParentId) { - SaasFeature feature = this.saasFeatureDao.getById(permissionId); - if (Objects.equals(feature.getParentId(), newParentId)) { - //父级未变 - return; - } - SaasFeature parent = this.saasFeatureDao.getById(newParentId); - if (!StrUtil.equals(feature.getTerminal(), parent.getTerminal())) { - throw new BizException(BaseCode.BAD_REQUEST, "不允许跨工作台"); - } - if (parent.getPath().contains(String.valueOf(permissionId))) { - throw new BizException(BaseCode.BAD_REQUEST, "不允许移到子级"); - } - //当前节点 - SaasFeature entity = new SaasFeature(); - entity.setId(feature.getId()); - entity.setParentId(newParentId); - entity.setParentBusinessNo(parent.getBusinessNo()); - entity.setPath(parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER); - entity.setUpdateBy(updater); - this.saasFeatureDao.updateById(entity); - //更新子级path - this.saasFeatureDao.updateChildrenPath(updater, feature.getPath() + feature.getId() + FEATURE_PATH_DELIMITER, - entity.getPath() + entity.getId() + FEATURE_PATH_DELIMITER); + public void move(PermissionPointMoveRequest request) { + SaasFeature feature = getAndCheck(request.getPermissionId()); + changeParent(feature, request); + changeSort(feature, request); } @Override - public void updateSort(Long updater, Long permissionId, Integer direction) { - //查询当前节点和所有同级节点 - SaasFeature feature = this.saasFeatureDao.getById(permissionId); - List children = this.saasFeatureDao.listByParentId(feature.getParentId()); - List sortedChildren = children.stream() - .sorted(Comparator.comparing(SaasFeature::getSort)) + public List queryList(PermissionPointListQueryRequest request) { + + LambdaQueryWrapper wrapper = new LambdaQueryWrapper() + .eq(Objects.nonNull(request.getTerminal()), SaasFeature::getTerminal, request.getTerminal()) + .eq(Objects.nonNull(request.getFeatureType()), SaasFeature::getFeatureType, request.getFeatureType()) + .eq(Objects.nonNull(request.getParentId()), SaasFeature::getParentId, request.getParentId()) + .likeRight(Objects.nonNull(request.getLikePath()), SaasFeature::getPath, request.getLikePath()); + + return this.saasFeatureDao.list(wrapper) + .stream() + .map(this::feature2Node) .collect(Collectors.toList()); - //确认当前节点index - Integer index = sortedChildren.stream() - .filter(x -> x.getId().equals(permissionId)) - .map(sortedChildren::indexOf) - .findFirst().get(); - int switchIndex = 0; - if (direction > 0) { - //向上 - if (index == 0) { - //已经是第一个 - return; - } - switchIndex = index - 1; - } else { - //向下 - if (index == sortedChildren.size() - 1) { - //已经最后一个 - return; - } - switchIndex = index + 1; + } + + private void changeSort(SaasFeature feature, PermissionPointMoveRequest request) { + //原parent下节点排序会有缺失但无影响-不处理 + //同terminal 同级节点 + List saasFeatures = this.saasFeatureDao.listByParentIdAndTerminal(request.getParentId(), + feature.getTerminal()); + //记录排序 + Map sortMap = new HashMap<>(); + //插入指定位置 + sortMap.put(request.getPermissionId(), request.getSort()); + //找到需要更新排序其他节点 + AtomicInteger sort = new AtomicInteger(0); + Integer targetSort = request.getSort(); + saasFeatures.stream() + .sorted(Comparator.comparing(SaasFeature::getSort)) + .forEach(x -> { + //跳过自己 + if (!x.getId().equals(request.getPermissionId())) { + //记录位置 + sort.incrementAndGet(); + if (targetSort.equals(sort.get())) { + //找到指定位置,当前节点需要移动到下一位置 + sort.incrementAndGet(); + } + if (!x.getSort().equals(sort.get())) { + // 排序需要修正 + sortMap.put(x.getId(), sort.get()); + } + } + }); + //执行更新 - 有一定性能问题 + for (Map.Entry entry : sortMap.entrySet()) { + this.saasFeatureDao.updateSort(entry.getKey(), entry.getValue()); } - //更新当前节点 - this.saasFeatureDao.updateSort(permissionId, switchIndex); - //更新交换节点 - this.saasFeatureDao.updateSort(sortedChildren.get(switchIndex).getId(), index); + } + + private void changeParent(SaasFeature feature, PermissionPointMoveRequest request) { + Long parentId = request.getParentId(); + if (Objects.equals(feature.getParentId(), parentId)) { + //父级未变 + return; + } + SaasFeature parent = null; + if (parentId != 0) { + parent = this.saasFeatureDao.getById(parentId); + if (!StrUtil.equals(feature.getTerminal(), parent.getTerminal())) { + throw new BizException(BaseCode.BAD_REQUEST, "不允许跨工作台"); + } + if (parent.getPath().contains(String.valueOf(request.getPermissionId()))) { + throw new BizException(BaseCode.BAD_REQUEST, "不允许移到子级"); + } + } + + //当前节点更新 + SaasFeature entity = new SaasFeature(); + entity.setId(feature.getId()); + entity.setParentId(parentId); + entity.setParentBusinessNo(parent == null ? "0" : parent.getBusinessNo()); + entity.setPath(parent == null ? FEATURE_TOP_PATH : parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER); + entity.setUpdateBy(request.getUpdaterId()); + this.saasFeatureDao.updateById(entity); + //更新子级path + this.saasFeatureDao.updateChildrenPath(request.getUpdaterId(), feature.getPath() + feature.getId() + FEATURE_PATH_DELIMITER, + entity.getPath() + entity.getId() + FEATURE_PATH_DELIMITER); } private PermissionPointTreeNode feature2Node(SaasFeature feature) { diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java index 92f358c3..4603cf76 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java @@ -1,7 +1,10 @@ package cn.axzo.tyr.server.permission; import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.enums.FeatureType; import cn.axzo.tyr.client.model.permission.PermissionPointDTO; +import cn.axzo.tyr.client.model.permission.PermissionPointListQueryRequest; +import cn.axzo.tyr.client.model.permission.PermissionPointMoveRequest; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.client.model.permission.PermissionPointVO; @@ -99,27 +102,30 @@ public class PermissionPointTest { controller.savePermissionPoint(permissionPoint); } - @Test - public void testSort() { - //老数据可能会导致位置不对 - Long updater = 111L; - Long permissionId = 3478L; - Integer direction = 1; - controller.updateSort(updater, permissionId, direction); - } @Test - public void testChangeParent() { - Long updater = 111L; - Long permissionId = 360L; - Long newParentId = 354L; - controller.changeParent(updater, permissionId, newParentId); + public void testMove() { + PermissionPointMoveRequest request = new PermissionPointMoveRequest(); + request.setPermissionId(360L); + request.setParentId(354L); + request.setSort(1); + ApiResult result = controller.move(request); + System.out.println(JSON.toJSONString(result)); } + @Test public void testDelete() { Long permissionId = 360L; controller.deletePermissionPoint(permissionId); } + @Test + public void testQueryList() { + PermissionPointListQueryRequest request = new PermissionPointListQueryRequest(); + request.setFeatureType(FeatureType.BUTTON.getCode()); + ApiResult> result = controller.queryList(request); + System.out.println(JSON.toJSONString(result)); + } + } From af0ef14370a1d4c1b17d6f1596e5269cb5b8441e Mon Sep 17 00:00:00 2001 From: zhansihu Date: Wed, 13 Sep 2023 10:13:57 +0800 Subject: [PATCH 098/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=20=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=8F=82=E6=95=B0=EF=BC=9B=E5=88=A0=E9=99=A4=E8=BF=94=E5=9B=9E?= =?UTF-8?q?bizNo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/tyr/client/feign/PermissionPointApi.java | 4 ++-- .../model/permission/PermissionPointListQueryRequest.java | 6 ++++++ .../controller/permission/PermissionPointController.java | 5 ++--- .../cn/axzo/tyr/server/service/PermissionPointService.java | 4 ++-- .../tyr/server/service/impl/PermissionPointServiceImpl.java | 5 ++++- 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java index 97451956..bf09e3ee 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PermissionPointApi.java @@ -42,9 +42,9 @@ public interface PermissionPointApi { @PostMapping(value = "/api/v1/permissionPoint/save") ApiResult savePermissionPoint(@RequestBody PermissionPointDTO dto); - /** 删除权限点 - 直接删除 **/ + /** 删除权限点 **/ @PostMapping(value = "/api/v1/permissionPoint/delete/{permissionId}") - ApiResult deletePermissionPoint(@PathVariable Long permissionId); + ApiResult> deletePermissionPoint(@PathVariable Long permissionId); /** 位置移动 **/ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointListQueryRequest.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointListQueryRequest.java index 9f96f411..e1cb9071 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointListQueryRequest.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointListQueryRequest.java @@ -18,6 +18,12 @@ public class PermissionPointListQueryRequest { * **/ private Integer featureType; + /** + * 授权策略类型,允许为空 1-平台授权型 2-客户授权型 3-免授权型 + * 参考DelegatedType + **/ + private Integer delegatedType; + /** * 权限点所属工作台 * **/ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java index 773e69ca..e4e5f6c5 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java @@ -54,9 +54,8 @@ public class PermissionPointController implements PermissionPointApi { } @Override - public ApiResult deletePermissionPoint(Long permissionId) { - permissionPointService.delete(permissionId); - return ApiResult.ok(); + public ApiResult> deletePermissionPoint(Long permissionId) { + return ApiResult.ok(permissionPointService.delete(permissionId)); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java index 1f48543b..e423c645 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionPointService.java @@ -36,8 +36,8 @@ public interface PermissionPointService { /** 保存权限点 **/ PermissionPointDTO save(PermissionPointDTO dto); - /** 删除权限点 **/ - void delete(Long permissionId); + /** 删除权限点 返回business_no **/ + List delete(Long permissionId); /** 位置移动-父级和排序 **/ void move(PermissionPointMoveRequest request); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 313bc9f7..4a1472e3 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -303,8 +303,9 @@ public class PermissionPointServiceImpl implements PermissionPointService { @Transactional(rollbackFor = Throwable.class) @Override - public void delete(Long permissionPointId) { + public List delete(Long permissionPointId) { List delIds = new ArrayList<>(); + List bizNoList = new ArrayList<>(); SaasFeature feature = getAndCheck(permissionPointId); //删除自己 this.saasFeatureDao.removeById(permissionPointId); @@ -317,6 +318,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { delIds.addAll(childrenIds); } this.saasPgroupPermissionRelationDao.removeByPermissionPointIds(delIds); + return bizNoList; } @@ -334,6 +336,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { .eq(Objects.nonNull(request.getTerminal()), SaasFeature::getTerminal, request.getTerminal()) .eq(Objects.nonNull(request.getFeatureType()), SaasFeature::getFeatureType, request.getFeatureType()) .eq(Objects.nonNull(request.getParentId()), SaasFeature::getParentId, request.getParentId()) + .eq(Objects.nonNull(request.getDelegatedType()), SaasFeature::getDelegatedType, request.getDelegatedType()) .likeRight(Objects.nonNull(request.getLikePath()), SaasFeature::getPath, request.getLikePath()); return this.saasFeatureDao.list(wrapper) From 4612287b38e04a2dd15cea065b256d29782b711c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Wed, 13 Sep 2023 11:05:17 +0800 Subject: [PATCH 099/186] =?UTF-8?q?=E8=A1=A5=E5=85=85=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E8=A7=92=E8=89=B2=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/server/service/impl/RoleServiceImpl.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 5274ab9b..c994643c 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -116,6 +116,13 @@ public class RoleServiceImpl implements RoleService { */ @Override public List query(QuerySaasRoleReq req) { + // 如果没有传则默认查询通用维度默认值是 -1 + if (CollectionUtils.isEmpty(req.getWorkspaceId())) { + req.setWorkspaceId(Arrays.asList(-1l)); + } + if (CollectionUtils.isEmpty(req.getOuId())) { + req.setOuId(Arrays.asList(-1l)); + } // 根据工作台类型和单位类型查询角色分组 List roleGroup = new ArrayList<>(); if (CollectionUtils.isNotEmpty(req.getWorkspaceTypeCode()) || CollectionUtils.isNotEmpty(req.getOuTypeCode())) { @@ -143,6 +150,8 @@ public class RoleServiceImpl implements RoleService { .in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId, req.getIds()) .in(CollectionUtils.isNotEmpty(groupRelation), BaseEntity::getId, groupRelation.stream().map(SaasRoleGroupRelation::getRoleId).collect(Collectors.toList())) .eq(StringUtils.isNotBlank(req.getRoleType()), SaasRole::getRoleType, req.getRoleType()) + .in(CollectionUtils.isNotEmpty(req.getWorkspaceId()),SaasRole::getWorkspaceId,req.getWorkspaceId()) + .in(CollectionUtils.isNotEmpty(req.getOuId()),SaasRole::getOwnerOuId,req.getOuId()) .orderByDesc(BaseEntity::getId) .list(); return getByIds(list.stream().map(BaseEntity::getId).collect(Collectors.toList()), req.getIsCommon(),req.getWorkspaceId(),req.getOuId()); From 17422897545721ee1816ff95b99663ba4df743e4 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Wed, 13 Sep 2023 11:42:03 +0800 Subject: [PATCH 100/186] =?UTF-8?q?fix(=E6=9D=83=E9=99=90=E7=82=B9):=20?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E7=9B=B4=E6=8E=A5=E6=9F=A5=E8=AF=A2workspace?= =?UTF-8?q?type?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/server/repository/SaasBasicDictDao.java | 9 +++++++++ .../service/impl/PermissionPointServiceImpl.java | 13 ++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java index affb17c5..ab81427c 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java @@ -2,6 +2,7 @@ package cn.axzo.tyr.server.repository; import cn.axzo.basics.common.BeanMapper; import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.DictTypeFiledEnum; import cn.axzo.tyr.client.model.dict.request.BasicDictNodeReq; import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; import cn.axzo.tyr.client.model.dict.request.BasicDictUpdateReq; @@ -9,6 +10,7 @@ import cn.axzo.tyr.client.model.dict.request.BasicDictUpdateStatusReq; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.server.repository.entity.SaasBasicDict; import cn.axzo.tyr.server.repository.mapper.SaasBasicDictMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @@ -61,4 +63,11 @@ public class SaasBasicDictDao extends ServiceImpl() + .eq(SaasBasicDict::getType, DictTypeFiledEnum.WORKSPACE.getValue()) + .eq(SaasBasicDict::getWorkspaceType, workspaceType)); + return BeanMapper.copyBean(dict, BasicDictNodeResp.class); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 4a1472e3..09722f8a 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -210,9 +210,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { terminalReq.setCode(feature.getTerminal()); terminalReq.setType(DictTypeFiledEnum.TERMINAL); BasicDictNodeResp terminal = saasBasicDictDao.getBasicDictNode(terminalReq); - terminalReq.setType(DictTypeFiledEnum.WORKSPACE); - terminalReq.setCode(terminal.getWorkspaceType()); - BasicDictNodeResp workspace = saasBasicDictDao.getBasicDictNode(terminalReq); + BasicDictNodeResp workspace = saasBasicDictDao.getWorkspaceType(terminal.getWorkspaceType()); List pathName = new ArrayList<>(); pathName.add(workspace.getName()); pathName.add(terminal.getName()); @@ -310,12 +308,21 @@ public class PermissionPointServiceImpl implements PermissionPointService { //删除自己 this.saasFeatureDao.removeById(permissionPointId); delIds.add(feature.getId()); + if (feature.getFeatureType().equals(FeatureType.BUTTON.getCode())) { + //bizNo返回用于删除路由 + bizNoList.add(feature.getBusinessNo()); + } //删除所有子节点 List children = this.saasFeatureDao.listLikePath(feature.getPath() + feature.getId() + FEATURE_PATH_DELIMITER); if (CollectionUtil.isNotEmpty(children)) { List childrenIds = children.stream().map(SaasFeature::getId).collect(Collectors.toList()); this.saasFeatureDao.removeByIds(childrenIds); delIds.addAll(childrenIds); + List buttonBizNoList = children.stream() + .filter(x -> x.getFeatureType().equals(FeatureType.BUTTON.getCode())) + .map(SaasFeature::getBusinessNo) + .collect(Collectors.toList()); + bizNoList.addAll(buttonBizNoList); } this.saasPgroupPermissionRelationDao.removeByPermissionPointIds(delIds); return bizNoList; From cc88853f9c43a180f967c138609f579fa1b0eb9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Wed, 13 Sep 2023 11:43:17 +0800 Subject: [PATCH 101/186] =?UTF-8?q?=E8=A1=A5=E5=85=85=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E8=A7=92=E8=89=B2=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/server/service/impl/RoleServiceImpl.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index c994643c..4d100318 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -116,12 +116,16 @@ public class RoleServiceImpl implements RoleService { */ @Override public List query(QuerySaasRoleReq req) { - // 如果没有传则默认查询通用维度默认值是 -1 + // 如果没有传则默认查询通用维度默认值是 -1,-1+传入的参数含义是查询通用和自定义 if (CollectionUtils.isEmpty(req.getWorkspaceId())) { req.setWorkspaceId(Arrays.asList(-1l)); + } else if(!req.getWorkspaceId().contains(-1l)){ + req.getWorkspaceId().add(-1l); } if (CollectionUtils.isEmpty(req.getOuId())) { req.setOuId(Arrays.asList(-1l)); + } else if (!req.getOuId().contains(-1l)) { + req.getOuId().add(-1l); } // 根据工作台类型和单位类型查询角色分组 List roleGroup = new ArrayList<>(); From dfb552040888822a69fcb79b96f2ce60639484bf Mon Sep 17 00:00:00 2001 From: zhansihu Date: Wed, 13 Sep 2023 13:53:24 +0800 Subject: [PATCH 102/186] =?UTF-8?q?fix(=E6=9D=83=E9=99=90=E7=82=B9):=20?= =?UTF-8?q?=E5=85=BC=E5=AE=B9parent=20id=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/server/service/impl/PermissionPointServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 09722f8a..fa043724 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -215,7 +215,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { pathName.add(workspace.getName()); pathName.add(terminal.getName()); - if (vo.getParentId() == null || vo.getParentId() == 0) { + if (vo.getParentId() == null || vo.getParentId() < 1) { //没有parent直接挂在工作台下 vo.setParentName(terminal.getName()); vo.setPathName(pathName); @@ -394,7 +394,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { return; } SaasFeature parent = null; - if (parentId != 0) { + if (parentId > 0) { parent = this.saasFeatureDao.getById(parentId); if (!StrUtil.equals(feature.getTerminal(), parent.getTerminal())) { throw new BizException(BaseCode.BAD_REQUEST, "不允许跨工作台"); From 4aa4b969144640324e817097929f2d7ac24ed1b4 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Wed, 13 Sep 2023 14:01:31 +0800 Subject: [PATCH 103/186] =?UTF-8?q?=E5=AD=97=E5=85=B8=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/PermissionPointServiceImpl.java | 7 +++-- .../impl/SaasBasicDictServiceImpl.java | 26 ++++++++++++++----- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 313bc9f7..6d2d7e77 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -4,12 +4,12 @@ import cn.axzo.basics.common.BeanMapper; import cn.axzo.basics.common.util.TreeUtil; import cn.axzo.framework.domain.web.BizException; import cn.axzo.framework.domain.web.code.BaseCode; -import cn.axzo.tyr.client.model.DictTypeFiledEnum; -import cn.axzo.tyr.client.model.DictWorkSpaceTypeEnum; import cn.axzo.tyr.client.model.dict.request.BasicDictNodeReq; import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; +import cn.axzo.tyr.client.model.enums.DictTypeFiledEnum; +import cn.axzo.tyr.client.model.enums.DictWorkSpaceTypeEnum; import cn.axzo.tyr.client.model.enums.FeatureType; import cn.axzo.tyr.client.model.permission.PermissionPointDTO; import cn.axzo.tyr.client.model.permission.PermissionPointListQueryRequest; @@ -94,8 +94,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { .collect(Collectors.groupingBy(PermissionPointTreeNode::getTerminal)); //构建workspace-terminal工作台层级 List dictList = saasBasicDictService.getBasicDictNodeTree(BasicDictQueryReq.builder() - .type(DictTypeFiledEnum.TERMINAL).build()) - .getData(); + .type(DictTypeFiledEnum.TERMINAL).build()); //遍历所有workspace和terminal-构建顶层两级 List result = new ArrayList<>(); for (BasicDictTreeResp workspace : dictList) { diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java index 383d1400..1f31c3a8 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -10,15 +10,13 @@ import cn.axzo.tyr.server.repository.entity.SaasBasicDict; import cn.axzo.tyr.server.service.SaasBasicDictService; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.RandomUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -62,7 +60,7 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { */ public List constructDictTree(List nodeList) { if (CollectionUtil.isEmpty(nodeList)) { - return new ArrayList<>(); + return Collections.emptyList(); } ArrayList root = new ArrayList<>(); List parentIds = nodeList.stream().map(BasicDictNodeResp::getParentId).distinct().collect(Collectors.toList()); @@ -78,7 +76,7 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { } else { BasicDictTreeResp parent = nodeMap.get(basicDictTreeResp.getParentId()); if (Objects.isNull(parent.getChildren())) { - parent.setChildren(new ArrayList<>()); + parent.setChildren(Collections.emptyList()); } parent.getChildren().add(basicDictTreeResp); } @@ -148,6 +146,22 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { @Override public Boolean update(BasicDictUpdateReq req) { + BasicDictNodeResp currentNode = getById(req.getId()); + if (Objects.isNull(currentNode)) { + throw new ServiceException("节点不存在"); + } + + // 获取同级节点用于校验同级节点name唯一性 + List brotherNodes = saasBasicDictDao.list(new LambdaQueryWrapper() + .eq(SaasBasicDict::getParentId, currentNode.getParentId()) + .eq(SaasBasicDict::getType, currentNode.getType())); + + brotherNodes.forEach(n -> { + if (n.getName().equals(req.getName())) { + throw new ServiceException("该节点下已存在名称为" + req.getName() + "的节点"); + } + }); + return saasBasicDictDao.update(req); } From 2ac5dd5d7740d48ab5146ebf84fd3422ca8836db Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Wed, 13 Sep 2023 14:49:14 +0800 Subject: [PATCH 104/186] =?UTF-8?q?=E5=AD=97=E5=85=B8=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java index 1f31c3a8..27e2accb 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -76,7 +76,7 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { } else { BasicDictTreeResp parent = nodeMap.get(basicDictTreeResp.getParentId()); if (Objects.isNull(parent.getChildren())) { - parent.setChildren(Collections.emptyList()); + parent.setChildren(new ArrayList<>()); } parent.getChildren().add(basicDictTreeResp); } From c7e54252d11628f8ed4f5e932925e587b76ac546 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Wed, 13 Sep 2023 14:53:43 +0800 Subject: [PATCH 105/186] =?UTF-8?q?=E8=8E=B7=E5=8F=96workSpaceType?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java index d9673276..82516fe2 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/SaasBasicDictDao.java @@ -6,8 +6,10 @@ import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; import cn.axzo.tyr.client.model.dict.request.BasicDictUpdateReq; import cn.axzo.tyr.client.model.dict.request.BasicDictUpdateStatusReq; import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; +import cn.axzo.tyr.client.model.enums.DictTypeFiledEnum; import cn.axzo.tyr.server.repository.entity.SaasBasicDict; import cn.axzo.tyr.server.repository.mapper.SaasBasicDictMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; From 2ff21391e8497dd99ffb309d9415454fdac55f33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Wed, 13 Sep 2023 15:37:13 +0800 Subject: [PATCH 106/186] rename TyrSaasRoleApi --- .../client/feign/{SaasRoleApi.java => TyrSaasRoleApi.java} | 2 +- .../axzo/tyr/server/controller/role/SaasRoleController.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename tyr-api/src/main/java/cn/axzo/tyr/client/feign/{SaasRoleApi.java => TyrSaasRoleApi.java} (98%) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java similarity index 98% rename from tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java rename to tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java index a2091a01..8fe4fe24 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java @@ -18,7 +18,7 @@ import java.util.List; * 角色 */ @FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080}") -public interface SaasRoleApi { +public interface TyrSaasRoleApi { /** * 保存/更新 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java index e87f63a9..6b1cb3c0 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java @@ -3,7 +3,7 @@ package cn.axzo.tyr.server.controller.role; import cn.axzo.framework.domain.web.BizException; import cn.axzo.framework.domain.web.code.BaseCode; import cn.axzo.framework.domain.web.result.ApiResult; -import cn.axzo.tyr.client.feign.SaasRoleApi; +import cn.axzo.tyr.client.feign.TyrSaasRoleApi; import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; @@ -28,7 +28,7 @@ import java.util.List; @Slf4j @RestController @RequiredArgsConstructor -public class SaasRoleController implements SaasRoleApi { +public class SaasRoleController implements TyrSaasRoleApi { @Autowired RoleService roleService; From 5a49466f0d08cd2f00dbfa9502ea364595f3688c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Wed, 13 Sep 2023 16:45:28 +0800 Subject: [PATCH 107/186] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=9D=83=E9=99=90?= =?UTF-8?q?=E9=9B=86=E4=BD=9C=E7=94=A8=E8=8C=83=E5=9B=B4=E7=AD=9B=E9=80=89?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feign/SaasPermissionGroupScopeApi.java | 2 +- .../service/impl/PermissionGroupImpl.java | 50 +++++++++---------- 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java index 09c48e37..df318a73 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupScopeApi.java @@ -3,7 +3,7 @@ package cn.axzo.tyr.client.feign; import org.springframework.cloud.openfeign.FeignClient; /** - * 权限集作用范围 TODO + * 权限集作用范围 */ @FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080/api/saasPermissionGroup}") public interface SaasPermissionGroupScopeApi { diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index a1a132d1..8f0781f7 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -106,21 +106,20 @@ public class PermissionGroupImpl implements PermissionGroupService { .list(); // 过滤权限集作用范围 List saasPermissionGroupScopes = saasPermissionGroupScopesSource.stream().filter(e -> { + List workspaceIdWithOutCommon = req.getWorkspaceId().stream().filter(workspaceId -> !workspaceId.equals(-1l)).collect(Collectors.toList()); + List ouIdWithOutCommon = req.getOuId().stream().filter(ouId -> !ouId.equals(-1l)).collect(Collectors.toList()); // 过滤出选中的工作台 - if (CollectionUtils.isNotEmpty(req.getWorkspaceId()) - && PermissionScopeType.WORKSPACE.getCode().equals(e.getScopeType()) - && req.getWorkspaceId().contains(e.getScopeId())) { - req.getWorkspaceId().contains(e.getScopeId()); - return true; + if (PermissionScopeType.WORKSPACE.getCode().equals(e.getScopeType())) { + if (CollectionUtils.isNotEmpty(workspaceIdWithOutCommon) && ! workspaceIdWithOutCommon.contains(e.getScopeId())) { + return false; + } + }else { + // 过滤出选中的单位 + if (CollectionUtils.isNotEmpty(ouIdWithOutCommon) && ! ouIdWithOutCommon.contains(e.getScopeId())) { + return false; + } } - // 过滤出选中的单位 - if (CollectionUtils.isNotEmpty(req.getOuId()) - && PermissionScopeType.OU.getCode().equals(e.getScopeType()) - && req.getOuId().contains(e.getScopeId())) { - req.getWorkspaceId().contains(e.getScopeId()); - return true; - } - return false; + return true; }).collect(Collectors.toList()); // 组装填充字段 List finalFeature = feature; @@ -192,21 +191,20 @@ public class PermissionGroupImpl implements PermissionGroupService { .list(); // 过滤权限集作用范围 List saasPermissionGroupScopes = saasPermissionGroupScopesSource.stream().filter(e -> { + List workspaceIdWithOutCommon = req.getWorkspaceId().stream().filter(workspaceId -> !workspaceId.equals(-1l)).collect(Collectors.toList()); + List ouIdWithOutCommon = req.getOuId().stream().filter(ouId -> !ouId.equals(-1l)).collect(Collectors.toList()); // 过滤出选中的工作台 - if (CollectionUtils.isNotEmpty(req.getWorkspaceId()) - && PermissionScopeType.WORKSPACE.getCode().equals(e.getScopeType()) - && req.getWorkspaceId().contains(e.getScopeId())) { - req.getWorkspaceId().contains(e.getScopeId()); - return true; + if (PermissionScopeType.WORKSPACE.getCode().equals(e.getScopeType())) { + if (CollectionUtils.isNotEmpty(workspaceIdWithOutCommon) && ! workspaceIdWithOutCommon.contains(e.getScopeId())) { + return false; + } + }else { + // 过滤出选中的单位 + if (CollectionUtils.isNotEmpty(ouIdWithOutCommon) && ! ouIdWithOutCommon.contains(e.getScopeId())) { + return false; + } } - // 过滤出选中的单位 - if (CollectionUtils.isNotEmpty(req.getOuId()) - && PermissionScopeType.OU.getCode().equals(e.getScopeType()) - && req.getOuId().contains(e.getScopeId())) { - req.getWorkspaceId().contains(e.getScopeId()); - return true; - } - return false; + return true; }).collect(Collectors.toList()); // 组装填充字段 List finalFeature = feature; From e666e5c2bcaa6b6985c1f5cdd2a5f1a82e0561af Mon Sep 17 00:00:00 2001 From: yangsong Date: Wed, 13 Sep 2023 16:53:28 +0800 Subject: [PATCH 108/186] =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=88=96=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/tyr/client/feign/TyrSaasRoleApi.java | 3 +- .../client/model/vo/SaveOrUpdateRoleVO.java | 84 ++++++++++ .../controller/role/SaasRoleController.java | 5 +- .../entity/SaasPgroupPermissionRelation.java | 10 ++ .../entity/SaasRoleGroupRelation.java | 10 ++ .../SaasPgroupPermissionRelationDao.java | 15 +- .../service/SaasPgroupRoleRelationDao.java | 15 +- .../repository/service/SaasRoleDao.java | 14 +- .../axzo/tyr/server/service/RoleService.java | 3 + .../SaasPgroupPermissionRelationService.java | 9 ++ .../SaasPgroupRoleRelationService.java | 11 ++ .../service/SaasRoleGroupRelationService.java | 9 ++ .../server/service/impl/RoleServiceImpl.java | 144 +++++++++++++++++- ...asPgroupPermissionRelationServiceImpl.java | 39 +++++ .../SaasPgroupRoleRelationServiceImpl.java | 51 +++++++ .../SaasRoleGroupRelationServiceImpl.java | 42 +++++ 16 files changed, 453 insertions(+), 11 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaveOrUpdateRoleVO.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupPermissionRelationService.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupRoleRelationService.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupRelationService.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupRelationServiceImpl.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java index 8fe4fe24..8c827a5e 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java @@ -5,6 +5,7 @@ import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; import cn.axzo.tyr.client.model.vo.SaasRoleVO; +import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -26,7 +27,7 @@ public interface TyrSaasRoleApi { * 如果权限列表不为空则创建通用权限 */ @PostMapping("/api/saasRole/saveOrUpdate") - ApiResult saveOrUpdate(@RequestBody SaasRoleVO req); + ApiResult saveOrUpdate(@RequestBody SaveOrUpdateRoleVO saveOrUpdateRole); /** * 根据id查询详情 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaveOrUpdateRoleVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaveOrUpdateRoleVO.java new file mode 100644 index 00000000..4d42066a --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaveOrUpdateRoleVO.java @@ -0,0 +1,84 @@ +package cn.axzo.tyr.client.model.vo; + +import lombok.Data; + +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class SaveOrUpdateRoleVO { + + /** + * 角色id(编辑时有效) + */ + private Long id; + + /** + * 角色名称 + */ + @NotBlank(message = "角色名称不能为空") + private String name; + + private String description; + + /** + * 角色类型:init 业务角色 admin管理员 common 自定义 + */ + @NotBlank(message = "角色类型不能为空") + private String roleType; + + private Long workspaceId; + + private Integer workspaceType; + + private Long ownerOuId; + + private Long operatorId; + + private String operatorName; + /** + * 角色分组 + */ + @NotEmpty + @Valid + private List groupTree; + + /** + * 通用权限集id(编辑时有效) + */ + private Long permissionGroupId; + + private String permissionGroupName; + + private String permissionGroupDescription; + + /** + * 权限集类型:feature data + */ + private String permissionGroupType; + + /** + * 选中的权限点id + */ + @NotNull + private List selectedPPIds; + + @Data + public static class GroupInfoVO { + + /** + * 角色分组id + */ + @NotNull + private Long id; + + /** + * 项目部类型字典code + */ + @NotNull + private Long workspaceTypeCode; + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java index 6b1cb3c0..d5353136 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java @@ -8,6 +8,7 @@ import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; import cn.axzo.tyr.client.model.vo.SaasRoleVO; +import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; import cn.axzo.tyr.server.service.RoleService; import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; @@ -34,8 +35,8 @@ public class SaasRoleController implements TyrSaasRoleApi { RoleService roleService; @Override - public ApiResult saveOrUpdate(SaasRoleVO req) { - return null; + public ApiResult saveOrUpdate(SaveOrUpdateRoleVO saveOrUpdateRole) { + return ApiResult.ok(roleService.saveOrUpdate(saveOrUpdateRole)); } @Override diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupPermissionRelation.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupPermissionRelation.java index f2d9d8a2..964cdfaa 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupPermissionRelation.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPgroupPermissionRelation.java @@ -8,6 +8,7 @@ import lombok.Setter; import lombok.ToString; import java.io.Serializable; +import java.util.Objects; /** * 权限集功能中间表(SaasPgroupPermissionRelation)表实体类 @@ -52,5 +53,14 @@ public class SaasPgroupPermissionRelation extends BaseEntity imp protected Serializable pkVal() { return this.id; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + SaasRoleGroupRelation that = (SaasRoleGroupRelation) o; + return Objects.equals(roleId, that.roleId) && Objects.equals(saasRoleGroupId, that.saasRoleGroupId) && Objects.equals(isDelete, that.isDelete); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupPermissionRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupPermissionRelationDao.java index f7317bd7..7075a7a6 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupPermissionRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupPermissionRelationDao.java @@ -3,13 +3,14 @@ package cn.axzo.tyr.server.repository.service; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; -import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.mapper.SaasPgroupPermissionRelationMapper; -import cn.axzo.tyr.server.repository.mapper.SaasRoleMapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.collections.CollectionUtils; import org.springframework.stereotype.Repository; +import java.io.Serializable; +import java.util.Collection; import java.util.List; @Repository @@ -27,5 +28,15 @@ public class SaasPgroupPermissionRelationDao extends ServiceImpl idList) { + if (CollectionUtils.isEmpty(idList)) { + return false; + } + return lambdaUpdate() + .in(SaasPgroupPermissionRelation::getId,idList) + .set(BaseEntity::getIsDelete, TableIsDeleteEnum.DELETE.value) + .update(); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupRoleRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupRoleRelationDao.java index 27057033..99c0183b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupRoleRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupRoleRelationDao.java @@ -2,13 +2,14 @@ package cn.axzo.tyr.server.repository.service; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; -import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup; import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; -import cn.axzo.tyr.server.repository.mapper.SaasPermissionGroupMapper; import cn.axzo.tyr.server.repository.mapper.SaasPgroupRoleRelationMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.collections.CollectionUtils; import org.springframework.stereotype.Repository; +import java.io.Serializable; +import java.util.Collection; import java.util.List; @Repository @@ -21,5 +22,15 @@ public class SaasPgroupRoleRelationDao extends ServiceImpl idList) { + if (CollectionUtils.isEmpty(idList)) { + return false; + } + return lambdaUpdate() + .in(SaasPgroupRoleRelation::getId,idList) + .set(BaseEntity::getIsDelete, TableIsDeleteEnum.DELETE.value) + .update(); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleDao.java index 68234eda..f7846a02 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleDao.java @@ -1,18 +1,28 @@ package cn.axzo.tyr.server.repository.service; +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.server.repository.entity.SaasRole; -import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; -import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupMapper; import cn.axzo.tyr.server.repository.mapper.SaasRoleMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.collections.CollectionUtils; import org.springframework.stereotype.Repository; +import java.io.Serializable; import java.util.List; @Repository public class SaasRoleDao extends ServiceImpl { + @Override + public SaasRole getById(Serializable id) { + List roles = lambdaQuery().eq(SaasRole::getId, id).eq(SaasRole::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + if (CollectionUtils.isEmpty(roles)) { + return null; + } + return roles.get(0); + } + public void delete(List id) { lambdaUpdate() .in(BaseEntity::getId,id) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java index 97d42ee5..b563e4f9 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java @@ -4,6 +4,7 @@ import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; import cn.axzo.tyr.client.model.vo.SaasRoleVO; +import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; import java.util.List; import java.util.Map; @@ -23,4 +24,6 @@ public interface RoleService { List query(QuerySaasRoleReq req); List queryBatchByIdentityIdType(List req); + + Long saveOrUpdate(SaveOrUpdateRoleVO saveOrUpdateRole); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupPermissionRelationService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupPermissionRelationService.java new file mode 100644 index 00000000..ec30c0c0 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupPermissionRelationService.java @@ -0,0 +1,9 @@ +package cn.axzo.tyr.server.service; + +import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; + +import java.util.List; + +public interface SaasPgroupPermissionRelationService { + void saveOrUpdate(List relations); +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupRoleRelationService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupRoleRelationService.java new file mode 100644 index 00000000..6be028f6 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupRoleRelationService.java @@ -0,0 +1,11 @@ +package cn.axzo.tyr.server.service; + +import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; + +public interface SaasPgroupRoleRelationService { + /** + * 处理通用权限集 + * @param commonRelation + */ + void saveOrUpdateCommon(SaasPgroupRoleRelation commonRelation); +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupRelationService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupRelationService.java new file mode 100644 index 00000000..b8ae8a52 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupRelationService.java @@ -0,0 +1,9 @@ +package cn.axzo.tyr.server.service; + +import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation; + +import java.util.List; + +public interface SaasRoleGroupRelationService { + void saveOrUpdate(List relations); +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 4d100318..e4528591 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -1,7 +1,10 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.framework.domain.web.BizException; +import cn.axzo.framework.domain.web.code.BaseCode; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.model.enums.PermissionGroupType; import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; @@ -9,10 +12,10 @@ import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; import cn.axzo.tyr.client.model.vo.SaasRoleVO; +import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; import cn.axzo.tyr.server.repository.entity.*; import cn.axzo.tyr.server.repository.service.*; -import cn.axzo.tyr.server.service.PermissionGroupService; -import cn.axzo.tyr.server.service.RoleService; +import cn.axzo.tyr.server.service.*; import cn.hutool.core.bean.BeanUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -20,8 +23,10 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -48,6 +53,16 @@ public class RoleServiceImpl implements RoleService { SaasRoleGroupDao saasRoleGroupDao; @Autowired SaasRoleGroupRelationDao roleGroupRelationDao; + @Autowired + SaasPermissionGroupDao saasPermissionGroupDao; + @Autowired + SaasRoleGroupRelationService saasRoleGroupRelationService; + @Autowired + SaasFeatureDao saasFeatureDao; + @Autowired + SaasPgroupRoleRelationService saasPgroupRoleRelationService; + @Autowired + SaasPgroupPermissionRelationService saasPgroupPermissionRelationService; @Override public List queryByIdentityIdType(Long identityId, Integer identityType, Long workspaceId, Long ouId) { @@ -176,6 +191,131 @@ public class RoleServiceImpl implements RoleService { return result; } + @Override + @Transactional(rollbackFor = Exception.class) + public Long saveOrUpdate(SaveOrUpdateRoleVO saveOrUpdateRole) { + // 新增OR修改角色 + SaasRole saasRole; + Date now = new Date(); + boolean save = Objects.isNull(saveOrUpdateRole.getId()); + if (!save) { + saasRole = saasRoleDao.getById(saveOrUpdateRole.getId()); + if (Objects.isNull(saasRole)) { + throw new BizException(BaseCode.BAD_REQUEST, "角色不存在"); + } + } else { + saasRole = new SaasRole(); + saasRole.setCreateBy(saveOrUpdateRole.getOperatorId()); + saasRole.setCreateAt(now); + } + List groupTrees = saveOrUpdateRole.getGroupTree(); + // 验证角色分组信息 + validRoleGroup(groupTrees); + //验证权限集信息 + SaasPermissionGroup saasPermissionGroup = validPermissionGroupCommon(saveOrUpdateRole); + validFeature(saveOrUpdateRole.getSelectedPPIds()); + saasRole.setId(saveOrUpdateRole.getId()); + saasRole.setName(saveOrUpdateRole.getName()); + saasRole.setDescription(saasRole.getDescription()); + saasRole.setRoleType(saveOrUpdateRole.getRoleType()); + saasRole.setWorkspaceId(saveOrUpdateRole.getWorkspaceId()); + saasRole.setWorkspaceType(saveOrUpdateRole.getWorkspaceType()); + saasRole.setOwnerOuId(saveOrUpdateRole.getOwnerOuId()); + saasRole.setUpdateBy(saveOrUpdateRole.getOperatorId()); + saasRole.setUpdateAt(now); + saasRoleDao.saveOrUpdate(saasRole); + // 新增或者保存分组和角色映射关系 + saasRoleGroupRelationService.saveOrUpdate(groupTrees.stream().map(g -> { + SaasRoleGroupRelation roleGroupRelation = new SaasRoleGroupRelation(); + roleGroupRelation.setRoleId(saasRole.getId()); + roleGroupRelation.setSaasRoleGroupId(g.getId()); + roleGroupRelation.setCreateAt(now); + roleGroupRelation.setUpdateAt(now); + return roleGroupRelation; + }).collect(Collectors.toList())); + saasPermissionGroupDao.saveOrUpdate(saasPermissionGroup); + SaasPgroupRoleRelation pgrr = new SaasPgroupRoleRelation(); + pgrr.setCreateBy(saveOrUpdateRole.getOperatorId()); + pgrr.setRoleId(saasRole.getId()); + pgrr.setUpdateBy(saveOrUpdateRole.getOperatorId()); + pgrr.setGroupId(saasPermissionGroup.getId()); + pgrr.setCreateAt(now); + pgrr.setUpdateAt(now); + // 新增或保存角色通用权限映射 + saasPgroupRoleRelationService.saveOrUpdateCommon(pgrr); + // 保存权限集和权限点映射关系 + List pgpRelations = Optional.ofNullable(saveOrUpdateRole.getSelectedPPIds()).orElse(new ArrayList<>()).stream().map(ppId -> { + SaasPgroupPermissionRelation target = new SaasPgroupPermissionRelation(); + target.setGroupId(saasPermissionGroup.getId()); + target.setFeatureId(ppId); + target.setCreateBy(saveOrUpdateRole.getOperatorId()); + target.setUpdateBy(saveOrUpdateRole.getOperatorId()); + return target; + }).collect(Collectors.toList()); + saasPgroupPermissionRelationService.saveOrUpdate(pgpRelations); + return saasRole.getId(); + } + + private void validFeature(List featureIds) { + if (CollectionUtils.isEmpty(featureIds)) { + return; + } + List saasFeatures = saasFeatureDao.lambdaQuery().in(SaasFeature::getId, featureIds) + .eq(SaasFeature::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + Map featureMap = saasFeatures.stream().collect(Collectors.toMap(SaasFeature::getId, Function.identity())); + List invalidFeatues = featureIds.stream().filter(rg -> { + SaasFeature target = featureMap.get(rg); + return Objects.isNull(target); + }).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(invalidFeatues)) { + throw new BizException(BaseCode.BAD_REQUEST, "权限点信息错误"); + } + } + + private SaasPermissionGroup validPermissionGroupCommon(SaveOrUpdateRoleVO saveOrUpdateRole) { + SaasPermissionGroup saasPermissionGroup; + if (Objects.isNull(saveOrUpdateRole.getPermissionGroupId())) { + saasPermissionGroup = new SaasPermissionGroup(); + saasPermissionGroup.setIsCommon(PermissionGroupType.COMMON.getCode()); + saasPermissionGroup.setCreateBy(saveOrUpdateRole.getOperatorId()); + saasPermissionGroup.setCreatorName(saveOrUpdateRole.getOperatorName()); + } else { + List groups = saasPermissionGroupDao.lambdaQuery() + .eq(SaasPermissionGroup::getId, saveOrUpdateRole.getPermissionGroupId()) + .eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + if (CollectionUtils.isEmpty(groups)) { + throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在"); + } + saasPermissionGroup = groups.get(0); + if (!Objects.equals(saasPermissionGroup.getIsCommon(), PermissionGroupType.COMMON.getCode())) { + throw new BizException(BaseCode.BAD_REQUEST, "权限集不是通用权限集"); + } + } + saasPermissionGroup.setName(saveOrUpdateRole.getPermissionGroupName()); + saasPermissionGroup.setDescription(saveOrUpdateRole.getPermissionGroupDescription()); + saasPermissionGroup.setUpdateBy(saveOrUpdateRole.getOperatorId()); + saasPermissionGroup.setUpdatorName(saveOrUpdateRole.getOperatorName()); + saasPermissionGroup.setType(saveOrUpdateRole.getPermissionGroupType()); + return saasPermissionGroup; + } + + private void validRoleGroup(List groupTrees) { + if (CollectionUtils.isEmpty(groupTrees)) { + return; + } + List groups = saasRoleGroupDao.lambdaQuery() + .in(SaasRoleGroup::getId, groupTrees.stream().map(SaveOrUpdateRoleVO.GroupInfoVO::getId).collect(Collectors.toList())) + .eq(SaasRoleGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + Map roleGroupMap = groups.stream().collect(Collectors.toMap(SaasRoleGroup::getId, Function.identity())); + List invalidRoleGroups = groupTrees.stream().filter(rg -> { + SaasRoleGroup target = roleGroupMap.get(rg.getId()); + return Objects.isNull(target) || !Objects.equals(target.getWorkspaceTypeCode(), rg.getWorkspaceTypeCode().toString()); + }).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(invalidRoleGroups)) { + throw new BizException(BaseCode.BAD_REQUEST, "角色分组信息错误"); + } + } + /** * 根据角色id查询权限集关联关系 */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java new file mode 100644 index 00000000..164f7361 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java @@ -0,0 +1,39 @@ +package cn.axzo.tyr.server.service.impl; + +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; +import cn.axzo.tyr.server.repository.service.SaasPgroupPermissionRelationDao; +import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +@Slf4j +@Service +@RequiredArgsConstructor +public class SaasPgroupPermissionRelationServiceImpl implements SaasPgroupPermissionRelationService { + private final SaasPgroupPermissionRelationDao saasPgroupPermissionRelationDao; + + @Override + public void saveOrUpdate(List relations) { + if (CollectionUtils.isNotEmpty(relations)) { + return; + } + List exists = saasPgroupPermissionRelationDao.lambdaQuery() + .in(SaasPgroupPermissionRelation::getGroupId, relations.stream().map(SaasPgroupPermissionRelation::getGroupId).distinct().sorted().collect(Collectors.toList())) + .eq(SaasPgroupPermissionRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + Collection insertList = CollectionUtils.subtract(relations, exists); + Collection deleteList = CollectionUtils.subtract(exists, relations); + if (CollectionUtils.isNotEmpty(insertList)) { + saasPgroupPermissionRelationDao.saveBatch(insertList); + } + if (CollectionUtils.isNotEmpty(deleteList)) { + saasPgroupPermissionRelationDao.removeByIds(deleteList.stream().map(SaasPgroupPermissionRelation::getId).sorted().collect(Collectors.toList())); + } + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java new file mode 100644 index 00000000..a5ebd538 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java @@ -0,0 +1,51 @@ +package cn.axzo.tyr.server.service.impl; + +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.tyr.client.model.enums.PermissionGroupType; +import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup; +import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; +import cn.axzo.tyr.server.repository.service.SaasPermissionGroupDao; +import cn.axzo.tyr.server.repository.service.SaasPgroupRoleRelationDao; +import cn.axzo.tyr.server.service.SaasPgroupRoleRelationService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; + +@Slf4j +@Service +@RequiredArgsConstructor +public class SaasPgroupRoleRelationServiceImpl implements SaasPgroupRoleRelationService { + private final SaasPgroupRoleRelationDao saasPgroupRoleRelationDao; + private final SaasPermissionGroupDao saasPermissionGroupDao; + + @Override + public void saveOrUpdateCommon(SaasPgroupRoleRelation commonRelation) { + List relations = saasPgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, commonRelation.getRoleId()) + .eq(SaasPgroupRoleRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + if (CollectionUtils.isEmpty(relations)) { + saasPgroupRoleRelationDao.save(commonRelation); + return; + } + List prr = relations.stream().filter(e -> Objects.equals(commonRelation.getGroupId(), e.getGroupId())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(prr)) { + // 通用权限集已经 存在 + return; + } + List permissionGroupIds = relations.stream().map(SaasPgroupRoleRelation::getGroupId).sorted().collect(Collectors.toList()); + List commonGroups = saasPermissionGroupDao.lambdaQuery().in(SaasPermissionGroup::getId, permissionGroupIds) + .eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .eq(SaasPermissionGroup::getIsCommon, PermissionGroupType.COMMON.getCode()).list(); + if (CollectionUtils.isNotEmpty(commonGroups)) { + Set commonGroupIds = commonGroups.stream().map(SaasPermissionGroup::getId).collect(Collectors.toSet()); + // 移除以前的通用权限集 + saasPgroupRoleRelationDao.removeByIds(relations.stream().filter(e -> commonGroupIds.contains(e.getGroupId())).collect(Collectors.toList())); + } + saasPgroupRoleRelationDao.save(commonRelation); + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupRelationServiceImpl.java new file mode 100644 index 00000000..c2f0dad7 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupRelationServiceImpl.java @@ -0,0 +1,42 @@ +package cn.axzo.tyr.server.service.impl; + +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation; +import cn.axzo.tyr.server.repository.service.SaasRoleGroupRelationDao; +import cn.axzo.tyr.server.service.SaasRoleGroupRelationService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +@Slf4j +@Service +@RequiredArgsConstructor +public class SaasRoleGroupRelationServiceImpl implements SaasRoleGroupRelationService { + private final SaasRoleGroupRelationDao saasRoleGroupRelationDao; + @Override + public void saveOrUpdate(List relations) { + if (CollectionUtils.isEmpty(relations)) { + return; + } + List exists = saasRoleGroupRelationDao.lambdaQuery() + .in(SaasRoleGroupRelation::getRoleId, relations.stream().map(SaasRoleGroupRelation::getRoleId).distinct().sorted().collect(Collectors.toList())) + .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + if (CollectionUtils.isEmpty(exists)) { + saasRoleGroupRelationDao.saveBatch(relations); + return; + } + Collection insertList = CollectionUtils.subtract(relations, exists); + Collection deleteList = CollectionUtils.subtract(exists, relations); + if (CollectionUtils.isNotEmpty(insertList)) { + saasRoleGroupRelationDao.saveBatch(insertList); + } + if (CollectionUtils.isNotEmpty(deleteList)) { + saasRoleGroupRelationDao.removeByIds(deleteList.stream().map(SaasRoleGroupRelation::getId).sorted().collect(Collectors.toList())); + } + } +} From d3e69ba8ed166fb84a580773fa5861918a63dbfa Mon Sep 17 00:00:00 2001 From: TanJ Date: Wed, 13 Sep 2023 17:02:11 +0800 Subject: [PATCH 109/186] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E9=9D=9E?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E8=A7=92=E8=89=B2=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E5=8F=98=E6=9B=B4=E7=9A=84=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/feign/TyrSaasRoleUserApi.java | 25 +++++ .../tyr/client/model/BaseWorkspaceModel.java | 45 ++++++++ .../model/roleuser/req/RoleUserReq.java | 55 ++++++++++ .../tyr/server/common/enums/RoleTypeEnum.java | 47 ++++++++ .../tyr/server/common/util/StreamUtil.java | 17 +++ .../roleuser/RoleUserController.java | 29 +++++ .../service/SaasRoleUserRelationDao.java | 24 ++++ .../server/service/SaasRoleUserService.java | 16 +++ .../server/service/impl/RoleUserService.java | 103 ++++++++++++++++++ 9 files changed, 361 insertions(+) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleUserApi.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/BaseWorkspaceModel.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/RoleUserReq.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/common/enums/RoleTypeEnum.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/common/util/StreamUtil.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleUserApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleUserApi.java new file mode 100644 index 00000000..1d54fe74 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleUserApi.java @@ -0,0 +1,25 @@ +package cn.axzo.tyr.client.feign; + +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import javax.validation.Valid; + +/** + * 角色 + */ +@FeignClient(name = "tyr", url = "${axzo.service.tyr:http://tyr:8080}") +public interface TyrSaasRoleUserApi { + + /** + * 保存/更新 用户的角色,每次传入新的角色ID时都会覆盖原来的所有角色 + */ + @PostMapping("/api/saas-role-user/save-or-update") + ApiResult saveOrUpdate(@RequestBody @Valid RoleUserReq req); + + + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/BaseWorkspaceModel.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/BaseWorkspaceModel.java new file mode 100644 index 00000000..5bcb0133 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/BaseWorkspaceModel.java @@ -0,0 +1,45 @@ +package cn.axzo.tyr.client.model; + +import cn.axzo.tyr.client.model.enums.IdentityType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; + +/** + * @author tanjie@axzo.cn + * @date 2023/9/13 16:09 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BaseWorkspaceModel { + + /** + * 工作台id + */ + @NotNull + private Long workspaceId; + + /** + * 单位id + */ + @NotNull + private Long ouId; + + /** + * 身份id + */ + @NotNull + private Long identityId; + + /** + * 身份类型 + */ + @NotNull + private IdentityType identityType; + +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/RoleUserReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/RoleUserReq.java new file mode 100644 index 00000000..0e6e42f4 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/RoleUserReq.java @@ -0,0 +1,55 @@ +package cn.axzo.tyr.client.model.roleuser.req; + +import cn.axzo.tyr.client.model.enums.IdentityType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + + +/** + * @author tanjie@axzo.cn + * @date 2023/9/13 15:38 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RoleUserReq { + + /** + * 工作台id + */ + @NotNull + private Long workspaceId; + + /** + * 单位id + */ + @NotNull + private Long ouId; + + + private Long personId; + /** + * 身份id + */ + @NotNull + private Long identityId; + + /** + * 身份类型 + */ + @NotNull + private IdentityType identityType; + /** + * 完整的update,所有RoleId都被更新 + */ + @NotEmpty + private List updateRoleIds; + +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/common/enums/RoleTypeEnum.java b/tyr-server/src/main/java/cn/axzo/tyr/server/common/enums/RoleTypeEnum.java new file mode 100644 index 00000000..ea110c50 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/common/enums/RoleTypeEnum.java @@ -0,0 +1,47 @@ +package cn.axzo.tyr.server.common.enums; + +import com.baomidou.mybatisplus.annotation.EnumValue; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; + +import java.util.Arrays; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author tanjie@axzo.cn + * @date 2023/9/13 16:35 + */ + +@Getter +@AllArgsConstructor +public enum RoleTypeEnum { + + //角色类型:common 普通角色 super_admin超级管理员(禁止删除) admin子管理员(禁止删除) init初始化内置角色 + COMMON("common", "普通角色",false), + SUPER_ADMIN("super_admin", "超级管理员",true), + ADMIN("admin", "子管理员",true), + INIT("init", "初始化内置角色",false); + + @EnumValue + private final String value; + private final String desc; + private final boolean isAdmin; + + private static Map map = null; + + public static RoleTypeEnum getRoleType(String value) { + if (map == null) { + map = Arrays.stream(values()) + .collect(Collectors.toMap(RoleTypeEnum::getValue, Function.identity())); + } + return map.get(value); + } + + public boolean isAdminRole() { + return isAdmin; + } + +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/common/util/StreamUtil.java b/tyr-server/src/main/java/cn/axzo/tyr/server/common/util/StreamUtil.java new file mode 100644 index 00000000..6ea7edd8 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/common/util/StreamUtil.java @@ -0,0 +1,17 @@ +package cn.axzo.tyr.server.common.util; + +import java.util.Collection; +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @author tanjie@axzo.cn + * @date 2023/9/13 16:24 + */ +public class StreamUtil { + + public static List mapToList(Collection collection, Function function) { + return collection.stream().map(function).collect(Collectors.toList()); + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java new file mode 100644 index 00000000..31e58e72 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.server.controller.roleuser; + +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.feign.TyrSaasRoleUserApi; +import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; +import cn.axzo.tyr.server.repository.service.SaasRoleUserRelationDao; +import cn.axzo.tyr.server.service.SaasRoleUserService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; + +/** + * @author tanjie@axzo.cn + * @date 2023/9/13 15:47 + */ +@Slf4j +@RestController +@RequiredArgsConstructor +public class RoleUserController implements TyrSaasRoleUserApi { + private final SaasRoleUserService saasRoleUserService; + @Override + public ApiResult saveOrUpdate(@Valid RoleUserReq req) { + saasRoleUserService.saveOrUpdate(req); + return ApiResult.ok(); + + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java index fde44b5f..e0536a7d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java @@ -2,8 +2,11 @@ package cn.axzo.tyr.server.repository.service; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.model.BaseWorkspaceModel; +import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; import cn.axzo.tyr.server.repository.mapper.SaasRoleUserRelationMapper; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Repository; @@ -29,5 +32,26 @@ public class SaasRoleUserRelationDao extends ServiceImpl roleId) { + remove( + lambdaQuery() + .eq(SaasRoleUserRelation::getIdentityId, baseWorkspaceModel.getIdentityId()) + .eq(SaasRoleUserRelation::getIdentityType, baseWorkspaceModel.getIdentityType()) + .eq(SaasRoleUserRelation::getWorkspaceId, baseWorkspaceModel.getWorkspaceId()) + .eq(SaasRoleUserRelation::getOuId, baseWorkspaceModel.getOuId()) + .eq(CollectionUtil.isNotEmpty(roleId), SaasRoleUserRelation::getRoleId, roleId) + ); + + } + + + + + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java new file mode 100644 index 00000000..97069bdb --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java @@ -0,0 +1,16 @@ +package cn.axzo.tyr.server.service; + +import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; + +import javax.validation.Valid; + +/** + * @author tanjie@axzo.cn + * @date 2023/9/13 15:36 + */ +public interface SaasRoleUserService { + + void saveOrUpdate( RoleUserReq req); + + +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java new file mode 100644 index 00000000..78717f65 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java @@ -0,0 +1,103 @@ +package cn.axzo.tyr.server.service.impl; + +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.framework.domain.ServiceException; +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.model.BaseWorkspaceModel; +import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; +import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; +import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; +import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; +import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; +import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; +import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; +import cn.axzo.tyr.client.model.vo.SaasRoleVO; +import cn.axzo.tyr.server.common.enums.RoleTypeEnum; +import cn.axzo.tyr.server.common.util.StreamUtil; +import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; +import cn.axzo.tyr.server.repository.entity.SaasRole; +import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; +import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation; +import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; +import cn.axzo.tyr.server.repository.service.SaasPgroupRoleRelationDao; +import cn.axzo.tyr.server.repository.service.SaasRoleDao; +import cn.axzo.tyr.server.repository.service.SaasRoleGroupDao; +import cn.axzo.tyr.server.repository.service.SaasRoleGroupRelationDao; +import cn.axzo.tyr.server.repository.service.SaasRoleUserRelationDao; +import cn.axzo.tyr.server.service.PermissionGroupService; +import cn.axzo.tyr.server.service.RoleService; +import cn.axzo.tyr.server.service.SaasRoleUserService; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 角色 + * + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/6 15:51 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class RoleUserService implements SaasRoleUserService { + + private final SaasRoleUserRelationDao roleUserRelationDao; + private final SaasRoleDao saasRoleDao; + @Override + @Transactional(rollbackFor = Exception.class) + public void saveOrUpdate(RoleUserReq req) { + + if (CollectionUtil.isEmpty(req.getUpdateRoleIds())) { + throw new ServiceException("当前不支持空角色"); + } + + List roles = saasRoleDao.listByIds(req.getUpdateRoleIds()); + if (roles.stream().anyMatch(e -> RoleTypeEnum.getRoleType(e.getRoleType()).isAdminRole())) { + throw new ServiceException("暂不支持更换管理员角色"); + } + + List existsRoleUser = roleUserRelationDao.query(req.getIdentityId(), req.getIdentityType().getCode(), req.getWorkspaceId(), req.getOuId()); + List existsRole = saasRoleDao.listByIds(existsRoleUser.stream().mapToLong(SaasRoleUserRelation::getRoleId).boxed().collect(Collectors.toList())); + List notAdminRole = existsRole.stream().filter(e -> !RoleTypeEnum.getRoleType(e.getRoleType()).isAdminRole()).collect(Collectors.toList()); + + roleUserRelationDao.deleteByUser(BaseWorkspaceModel.builder() + .workspaceId(req.getWorkspaceId()) + .ouId(req.getOuId()) + .identityId(req.getIdentityId()) + .identityType(req.getIdentityType()) + .build() + , notAdminRole + .stream() + .mapToLong(BaseEntity::getId) + .boxed() + .collect(Collectors.toList())); + + + roleUserRelationDao.saveBatch(req.getUpdateRoleIds().stream().map(e -> { + SaasRoleUserRelation saasRoleUserRelation = new SaasRoleUserRelation(); + saasRoleUserRelation.setIdentityId(req.getIdentityId()); + saasRoleUserRelation.setIdentityType(req.getIdentityType().getCode()); + saasRoleUserRelation.setRoleId(e); + saasRoleUserRelation.setNaturalPersonId(req.getPersonId()); + saasRoleUserRelation.setOuId(req.getOuId()); + saasRoleUserRelation.setWorkspaceId(req.getWorkspaceId()); + return saasRoleUserRelation; + }).collect(Collectors.toList())); + + } +} From adc9e97a3993e07fda1a9f8f75cd84eda6d7d399 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Wed, 13 Sep 2023 17:05:32 +0800 Subject: [PATCH 110/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=20=E5=8F=82=E6=95=B0=E5=A4=84=E7=90=86=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/tyr/client/model/enums/DelegatedType.java | 4 ++++ .../main/java/cn/axzo/tyr/client/model/enums/FeatureType.java | 4 ++++ .../java/cn/axzo/tyr/client/model/enums/PageLinkType.java | 4 ++++ .../controller/permission/PermissionPointController.java | 3 +-- .../tyr/server/service/impl/PermissionPointServiceImpl.java | 4 ++-- 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DelegatedType.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DelegatedType.java index 85c54168..3dc3bbd2 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DelegatedType.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DelegatedType.java @@ -35,4 +35,8 @@ public enum DelegatedType { public static DelegatedType apply(Integer code) { return code == null ? null :MAPPING.get(code); } + + public boolean sameCode(Integer code) { + return this.code.equals(code); + } } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/FeatureType.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/FeatureType.java index 63e1b2ea..746f938b 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/FeatureType.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/FeatureType.java @@ -36,4 +36,8 @@ public enum FeatureType { public static FeatureType apply(Integer code) { return code == null ? null :MAPPING.get(code); } + + public boolean sameCode(Integer code) { + return this.code.equals(code); + } } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PageLinkType.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PageLinkType.java index 02be3d58..fd1b7b1e 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PageLinkType.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PageLinkType.java @@ -34,4 +34,8 @@ public enum PageLinkType { public static PageLinkType apply(Integer code) { return code == null ? null :MAPPING.get(code); } + + public boolean sameCode(Integer code) { + return this.code.equals(code); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java index e4e5f6c5..f592485a 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PermissionPointController.java @@ -49,8 +49,7 @@ public class PermissionPointController implements PermissionPointApi { @Override public ApiResult savePermissionPoint(PermissionPointDTO dto) { - permissionPointService.save(dto); - return ApiResult.ok(); + return ApiResult.ok(permissionPointService.save(dto)); } @Override diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 09722f8a..952c9a88 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -254,14 +254,14 @@ public class PermissionPointServiceImpl implements PermissionPointService { private PermissionPointDTO doUpdate(PermissionPointDTO dto) { SaasFeature feature = getAndCheck(dto.getId()); SaasFeature saasFeature = BeanMapper.copyBean(dto, SaasFeature.class); - //清理不可更新的数据 - saasFeature.setFeatureCode(null); + //清理不可直接更新的数据 saasFeature.setParentId(null); saasFeature.setPath(null); saasFeature.setSort(null); saasFeature.setTerminal(null); saasFeature.setBusinessNo(null); this.saasFeatureDao.updateById(saasFeature); + //返回一些要用的数据 dto.setBusinessNo(feature.getBusinessNo()); return dto; } From 7d5e63be734369152d6d4121c95bc5bee0ea4063 Mon Sep 17 00:00:00 2001 From: TanJ Date: Wed, 13 Sep 2023 17:10:29 +0800 Subject: [PATCH 111/186] =?UTF-8?q?fix:=20=E5=8F=98=E6=9B=B4=E8=A7=92?= =?UTF-8?q?=E8=89=B2ID=E5=AD=97=E6=AE=B5=E6=94=B9=E4=B8=BASET=E9=9B=86?= =?UTF-8?q?=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/model/roleuser/req/RoleUserReq.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/RoleUserReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/RoleUserReq.java index 0e6e42f4..0772b26c 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/RoleUserReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/RoleUserReq.java @@ -9,6 +9,7 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.List; +import java.util.Set; /** @@ -50,6 +51,6 @@ public class RoleUserReq { * 完整的update,所有RoleId都被更新 */ @NotEmpty - private List updateRoleIds; + private Set updateRoleIds; } From 3c8c6179c75d83380d7f4a4b27e1870778d8a310 Mon Sep 17 00:00:00 2001 From: yangsong Date: Wed, 13 Sep 2023 17:33:56 +0800 Subject: [PATCH 112/186] =?UTF-8?q?=E9=80=9A=E7=94=A8=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=82=B9=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/feign/SaasPermissionGroupApi.java | 4 +++ .../model/vo/SavePermissionGroupPPVO.java | 28 +++++++++++++++ .../role/SaasPermissionGroupController.java | 7 ++++ .../service/PermissionGroupService.java | 3 ++ .../service/impl/PermissionGroupImpl.java | 34 +++++++++++++++++++ .../server/service/impl/RoleServiceImpl.java | 2 +- ...asPgroupPermissionRelationServiceImpl.java | 2 ++ .../SaasPgroupRoleRelationServiceImpl.java | 2 ++ .../SaasRoleGroupRelationServiceImpl.java | 2 ++ 9 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SavePermissionGroupPPVO.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java index 4d80fbd5..7d808f60 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java @@ -4,11 +4,13 @@ import cn.axzo.framework.domain.web.result.ApiPageResult; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; +import cn.axzo.tyr.client.model.vo.SavePermissionGroupPPVO; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; +import javax.validation.Valid; import java.util.List; /** @@ -43,4 +45,6 @@ public interface SaasPermissionGroupApi { @PostMapping("/api/saasPermissionGoup/delete") ApiResult delete(@RequestBody List id); + @PostMapping("/api/saasPermissionGoup/savePermissionPoints") + ApiResult savePermissionPoints(@RequestBody@Valid SavePermissionGroupPPVO save); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SavePermissionGroupPPVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SavePermissionGroupPPVO.java new file mode 100644 index 00000000..220810f0 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SavePermissionGroupPPVO.java @@ -0,0 +1,28 @@ +package cn.axzo.tyr.client.model.vo; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class SavePermissionGroupPPVO { + + /** + * 权限集id + */ + @NotNull + private Long id; + + /** + * 创建者 + */ + @NotNull + private Long operatorId; + + /** + * 选中的权限id + */ + private List selectedPPIds; + +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java index db0db94d..98f5b878 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java @@ -8,6 +8,7 @@ import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.SaasPermissionGroupApi; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; +import cn.axzo.tyr.client.model.vo.SavePermissionGroupPPVO; import cn.axzo.tyr.server.repository.service.SaasPermissionGroupDao; import cn.axzo.tyr.server.repository.service.SaasPermissionGroupScopeDao; import cn.axzo.tyr.server.repository.service.SaasPgroupPermissionRelationDao; @@ -62,4 +63,10 @@ public class SaasPermissionGroupController implements SaasPermissionGroupApi { return ApiResult.ok(); } + @Override + public ApiResult savePermissionPoints(SavePermissionGroupPPVO save) { + permissionGroupService.savePermissionPoints(save); + return ApiResult.ok(); + } + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java index d6f96b88..ae9e1e26 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java @@ -3,6 +3,7 @@ package cn.axzo.tyr.server.service; import cn.axzo.framework.domain.page.PageResp; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; +import cn.axzo.tyr.client.model.vo.SavePermissionGroupPPVO; import java.util.List; @@ -22,4 +23,6 @@ public interface PermissionGroupService { PageResp page(QuerySaasPermissionGroupReq req); + void savePermissionPoints(SavePermissionGroupPPVO save); + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index 8f0781f7..b9cb587a 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -3,12 +3,16 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.BeanMapper; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.framework.domain.page.PageResp; +import cn.axzo.framework.domain.web.BizException; +import cn.axzo.framework.domain.web.code.BaseCode; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.model.enums.PermissionGroupType; import cn.axzo.tyr.client.model.enums.PermissionScopeType; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; import cn.axzo.tyr.client.model.vo.SaasRolePermissionScopeVO; +import cn.axzo.tyr.client.model.vo.SavePermissionGroupPPVO; import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup; import cn.axzo.tyr.server.repository.entity.SaasPermissionGroupScope; import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; @@ -19,6 +23,7 @@ import cn.axzo.tyr.server.repository.service.SaasPgroupPermissionRelationDao; import cn.axzo.tyr.server.repository.service.SaasPgroupRoleRelationDao; import cn.axzo.tyr.server.service.PermissionGroupService; import cn.axzo.tyr.server.service.PermissionPointService; +import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationService; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -26,9 +31,12 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; +import java.util.Objects; +import java.util.Optional; import java.util.stream.Collectors; /** @@ -53,6 +61,8 @@ public class PermissionGroupImpl implements PermissionGroupService { PermissionPointService featureService; @Autowired SaasPermissionGroupScopeDao saasPermissionGroupScopeDao; + @Autowired + SaasPgroupPermissionRelationService saasPgroupPermissionRelationService; @Override public List query(QuerySaasPermissionGroupReq req) { @@ -222,4 +232,28 @@ public class PermissionGroupImpl implements PermissionGroupService { ).collect(Collectors.toList()); return PageResp.list(iPage.getCurrent(), iPage.getSize(), iPage.getTotal(), pageList); } + + @Override + @Transactional(rollbackFor = Exception.class) + public void savePermissionPoints(SavePermissionGroupPPVO save) { + List groups = permissionGroupDao.lambdaQuery() + .eq(SaasPermissionGroup::getId, save.getId()) + .eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + if (CollectionUtils.isEmpty(groups)) { + throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在"); + } + SaasPermissionGroup saasPermissionGroup = groups.get(0); + if (!Objects.equals(saasPermissionGroup.getIsCommon(), PermissionGroupType.COMMON.getCode())) { + throw new BizException(BaseCode.BAD_REQUEST, "权限集不是通用权限集"); + } + List pgpRelations = Optional.ofNullable(save.getSelectedPPIds()).orElse(new ArrayList<>()).stream().map(ppId -> { + SaasPgroupPermissionRelation target = new SaasPgroupPermissionRelation(); + target.setGroupId(saasPermissionGroup.getId()); + target.setFeatureId(ppId); + target.setCreateBy(save.getOperatorId()); + target.setUpdateBy(save.getOperatorId()); + return target; + }).collect(Collectors.toList()); + saasPgroupPermissionRelationService.saveOrUpdate(pgpRelations); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index e4528591..bc208423 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -252,7 +252,7 @@ public class RoleServiceImpl implements RoleService { target.setUpdateBy(saveOrUpdateRole.getOperatorId()); return target; }).collect(Collectors.toList()); - saasPgroupPermissionRelationService.saveOrUpdate(pgpRelations); + saasPgroupPermissionRelationService.saveOrUpdate(pgpRelations); return saasRole.getId(); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java index 164f7361..9d8ed1a3 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java @@ -8,6 +8,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Collection; import java.util.List; @@ -20,6 +21,7 @@ public class SaasPgroupPermissionRelationServiceImpl implements SaasPgroupPermis private final SaasPgroupPermissionRelationDao saasPgroupPermissionRelationDao; @Override + @Transactional(rollbackFor = Exception.class) public void saveOrUpdate(List relations) { if (CollectionUtils.isNotEmpty(relations)) { return; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java index a5ebd538..a68d69fb 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java @@ -11,6 +11,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Objects; @@ -25,6 +26,7 @@ public class SaasPgroupRoleRelationServiceImpl implements SaasPgroupRoleRelation private final SaasPermissionGroupDao saasPermissionGroupDao; @Override + @Transactional(rollbackFor = Exception.class) public void saveOrUpdateCommon(SaasPgroupRoleRelation commonRelation) { List relations = saasPgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, commonRelation.getRoleId()) .eq(SaasPgroupRoleRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupRelationServiceImpl.java index c2f0dad7..08dccf0e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupRelationServiceImpl.java @@ -8,6 +8,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Collection; import java.util.List; @@ -19,6 +20,7 @@ import java.util.stream.Collectors; public class SaasRoleGroupRelationServiceImpl implements SaasRoleGroupRelationService { private final SaasRoleGroupRelationDao saasRoleGroupRelationDao; @Override + @Transactional(rollbackFor = Exception.class) public void saveOrUpdate(List relations) { if (CollectionUtils.isEmpty(relations)) { return; From 87fb605eeff8c799fc869954241df9b62c866ca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Wed, 13 Sep 2023 17:53:06 +0800 Subject: [PATCH 113/186] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E9=80=9A=E7=94=A8=E6=8E=A5=E5=8F=A3=E8=A1=A5=E5=85=85=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E5=8C=85=E5=90=AB=E6=9D=83=E9=99=90=E9=9B=86=E7=9A=84?= =?UTF-8?q?=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/req/QuerySaasRoleGroupReq.java | 1 + .../client/model/req/QuerySaasRoleReq.java | 5 +++ .../server/service/impl/RoleServiceImpl.java | 40 +++++++++++-------- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java index a9fdbcde..805ec758 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java @@ -34,6 +34,7 @@ public class QuerySaasRoleGroupReq { * 单位类型字典code */ private List ouTypeCode; + /** * 被那些角色使用到的分组 */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java index 94bc2937..26c4d6cf 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java @@ -49,4 +49,9 @@ public class QuerySaasRoleReq { private List sassRoleGroupIds; private Integer isCommon; + + /** + * 是否包含权限集(如果不需要则不执行后续查询链路) + */ + private Boolean includePermissionGroup; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index bc208423..1b2b3445 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -71,7 +71,7 @@ public class RoleServiceImpl implements RoleService { if (CollectionUtils.isEmpty(roleIds)) { return new ArrayList<>(); } - return getByIds(roleIds, null, null,null); + return getByIds(roleIds, null, null,null, null); } /** @@ -79,29 +79,35 @@ public class RoleServiceImpl implements RoleService { * * @return */ - public List getByIds(List roleIds, Integer isCommon, List workspaceId, List ouId) { + public List getByIds(List roleIds, Integer isCommon, List workspaceId, List ouId, Boolean includePermissionGroup) { + if (includePermissionGroup == null) { + includePermissionGroup = true; + } if (CollectionUtils.isEmpty(roleIds)) { return new ArrayList<>(); } // 查询角色信息 List roles = saasRoleDao.lambdaQuery().in(BaseEntity::getId, roleIds).list(); - // 查询权限集关联关系 - List saasPgroupRoleRelations = queryPermissionGroupRelation(roleIds); // 查询权限集 Map> pgrouRelationMap = null; Map> pGroupMap = null; - if (CollectionUtils.isNotEmpty(saasPgroupRoleRelations)) { - // 转map - pgrouRelationMap = saasPgroupRoleRelations.stream().collect(Collectors.groupingBy(SaasPgroupRoleRelation::getRoleId)); - // 查询权限集 - pGroupMap = permissionGroupService.query(QuerySaasPermissionGroupReq.builder() - .isCommon(isCommon) - .ids(saasPgroupRoleRelations.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())) - .workspaceId(workspaceId) - .ouId(ouId) - .build()) - // 转map - .stream().collect(Collectors.groupingBy(SaasPermissionGroupVO::getId)); + // 如果不包含则跳过 + if(includePermissionGroup) { + // 查询权限集关联关系 + List saasPgroupRoleRelations = queryPermissionGroupRelation(roleIds); + if (CollectionUtils.isNotEmpty(saasPgroupRoleRelations)) { + // 转map + pgrouRelationMap = saasPgroupRoleRelations.stream().collect(Collectors.groupingBy(SaasPgroupRoleRelation::getRoleId)); + // 查询权限集 + pGroupMap = permissionGroupService.query(QuerySaasPermissionGroupReq.builder() + .isCommon(isCommon) + .ids(saasPgroupRoleRelations.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())) + .workspaceId(workspaceId) + .ouId(ouId) + .build()) + // 转map + .stream().collect(Collectors.groupingBy(SaasPermissionGroupVO::getId)); + } } Map> finalPgrouRelationMap = pgrouRelationMap; Map> finalPGroupMap = pGroupMap; @@ -173,7 +179,7 @@ public class RoleServiceImpl implements RoleService { .in(CollectionUtils.isNotEmpty(req.getOuId()),SaasRole::getOwnerOuId,req.getOuId()) .orderByDesc(BaseEntity::getId) .list(); - return getByIds(list.stream().map(BaseEntity::getId).collect(Collectors.toList()), req.getIsCommon(),req.getWorkspaceId(),req.getOuId()); + return getByIds(list.stream().map(BaseEntity::getId).collect(Collectors.toList()), req.getIsCommon(),req.getWorkspaceId(),req.getOuId(),req.getIncludePermissionGroup()); } @Override From 472f65adfcd098cc0a290d1fbda893de58109a9d Mon Sep 17 00:00:00 2001 From: TanJ Date: Wed, 13 Sep 2023 18:00:47 +0800 Subject: [PATCH 114/186] =?UTF-8?q?fix:=20=E6=8C=87=E5=88=A0=E9=99=A4role?= =?UTF-8?q?=20user=20=E6=8A=A5=E9=94=99=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 同时添加了启动参数 --- README.md | 12 +++++++++++- .../repository/service/SaasRoleUserRelationDao.java | 8 ++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 23c731de..a25a1b85 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,14 @@ # 项目介绍 提尔(Týr),是北欧神话中的战争与勇气之神,同时也是契约的保证人,誓言的守护者和荣耀的代表。阿萨神族主神奥丁之子。 -权限服务 \ No newline at end of file +权限服务 + + +dev环境启动参数: +-Dspring.datasource.url=jdbc:mysql://116.63.13.181:3311/pudge-dev?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=true&verifyServerCertificate=false&rewriteBatchedStatements=true +-Dspring.redis.host=123.249.44.111 +-Drocketmq.name-server=114.116.202.128:9876 +-Dspring.redis.port=31270 +-DCUSTOM_ENV=dev +-Dserver.port=8080 +-Dspring.profiles.active=dev \ No newline at end of file diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java index e0536a7d..91674d48 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java @@ -7,7 +7,11 @@ import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; import cn.axzo.tyr.server.repository.mapper.SaasRoleUserRelationMapper; import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.extension.toolkit.ChainWrappers; import org.springframework.stereotype.Repository; import java.util.List; @@ -39,12 +43,12 @@ public class SaasRoleUserRelationDao extends ServiceImpl roleId) { remove( - lambdaQuery() + Wrappers.lambdaQuery(SaasRoleUserRelation.class) .eq(SaasRoleUserRelation::getIdentityId, baseWorkspaceModel.getIdentityId()) .eq(SaasRoleUserRelation::getIdentityType, baseWorkspaceModel.getIdentityType()) .eq(SaasRoleUserRelation::getWorkspaceId, baseWorkspaceModel.getWorkspaceId()) .eq(SaasRoleUserRelation::getOuId, baseWorkspaceModel.getOuId()) - .eq(CollectionUtil.isNotEmpty(roleId), SaasRoleUserRelation::getRoleId, roleId) + .in(CollectionUtil.isNotEmpty(roleId), SaasRoleUserRelation::getRoleId, roleId) ); } From b42e6fb0ba39c0f36d7883d01d17decc1f7d96a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Wed, 13 Sep 2023 18:12:28 +0800 Subject: [PATCH 115/186] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9D=83=E9=99=90?= =?UTF-8?q?=E4=B8=8E=E6=9D=83=E9=99=90=E9=9B=86=E5=AF=B9=E5=BA=94=E5=85=B3?= =?UTF-8?q?=E7=B3=BB=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/PermissionGroupImpl.java | 45 ++++++++++--------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index b9cb587a..2202ab1f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -100,16 +100,7 @@ public class PermissionGroupImpl implements PermissionGroupService { return new ArrayList<>(); } List groupIds = groupList.stream().map(BaseEntity::getId).collect(Collectors.toList()); - // 查询权限集关联的权限 - List permissionList = permissionRelationDao.lambdaQuery() - .in(SaasPgroupPermissionRelation::getGroupId, groupIds) - .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) - .list(); - List feature = null; - if (CollectionUtils.isNotEmpty(permissionList)) { - // 查询featureCode - feature = featureService.listNodesByIds(permissionList.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())); - } + List saasPermissionGroupScopesSource = saasPermissionGroupScopeDao.lambdaQuery() .in(SaasPermissionGroupScope::getPgroupId, groupIds) .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) @@ -132,18 +123,28 @@ public class PermissionGroupImpl implements PermissionGroupService { return true; }).collect(Collectors.toList()); // 组装填充字段 - List finalFeature = feature; - return groupList.stream().map(group -> - SaasPermissionGroupVO.builder() - .id(group.getId()) - .name(group.getName()) - .feature(finalFeature) - .scopes(saasPermissionGroupScopes.stream().filter(e -> e.getPgroupId().equals(group.getId())).map(e -> BeanMapper.copyBean(e, SaasRolePermissionScopeVO.class)).collect(Collectors.toList())) - .createBy(group.getCreateBy()) - .updateBy(group.getUpdateBy()) - .type(group.getType()) - .isCommon(group.getIsCommon()) - .build() + return groupList.stream().map(group -> { + // 查询权限集关联的权限 + List permissionList = permissionRelationDao.lambdaQuery() + .eq(SaasPgroupPermissionRelation::getGroupId, group.getId()) + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .list(); + List feature = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(permissionList)) { + // 查询featureCode + feature = featureService.listNodesByIds(permissionList.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())); + } + return SaasPermissionGroupVO.builder() + .id(group.getId()) + .name(group.getName()) + .feature(feature) + .scopes(saasPermissionGroupScopes.stream().filter(e -> e.getPgroupId().equals(group.getId())).map(e -> BeanMapper.copyBean(e, SaasRolePermissionScopeVO.class)).collect(Collectors.toList())) + .createBy(group.getCreateBy()) + .updateBy(group.getUpdateBy()) + .type(group.getType()) + .isCommon(group.getIsCommon()) + .build(); + } ).collect(Collectors.toList()); } From 2919d720ac751d19354cad2ffc5dccefdd9ac407 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Wed, 13 Sep 2023 19:49:45 +0800 Subject: [PATCH 116/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=20=E5=85=BC=E5=AE=B9=E5=A4=84=E7=90=86=E9=80=82=E7=94=A8?= =?UTF-8?q?=E5=8D=95=E4=BD=8D=E5=92=8C=E8=8A=82=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/permission/PermissionPointDTO.java | 22 ++++++++-- .../model/permission/PermissionPointVO.java | 43 +++++++++++++++++-- .../impl/PermissionPointServiceImpl.java | 6 +++ .../tyr/server/permission/SimpleTest.java | 22 ++++++++++ 4 files changed, 87 insertions(+), 6 deletions(-) create mode 100644 tyr-server/src/test/java/cn/axzo/tyr/server/permission/SimpleTest.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java index 55513756..7187c3cc 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java @@ -5,6 +5,7 @@ import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; /** @@ -122,14 +123,14 @@ public class PermissionPointDTO { /** - * 适用单位类型-65535:所有 1:总包 2:建设单位 4:监理单位 8:劳务分包 16:专业分包 + * 适用单位类型-65535:所有 1:总包 2:建设单位 4:监理单位 8:劳务分包 16:专业分包 32-班组 */ - private Long fitOuTypeBit; + private List fitOuTypeList; /** * 适用节点类型 65535:所有 1:部门 2:班组 4:小组 */ - private Long fitOuNodeTypeBit; + private List fitOuNodeTypeList; /** * 所属应用 @@ -159,4 +160,19 @@ public class PermissionPointDTO { /** 业务编码 **/ private String businessNo; + public Long mergeFitOuTypeBit() { + if (this.fitOuTypeList == null || this.fitOuTypeList.isEmpty()) { + return null; + } + return this.fitOuTypeList.stream().mapToLong(Long::longValue).sum(); + } + + + public Long mergeFitOuNodeTypeBit() { + if (this.fitOuNodeTypeList == null || this.fitOuNodeTypeList.isEmpty()) { + return null; + } + return this.fitOuNodeTypeList.stream().mapToLong(Long::longValue).sum(); + } + } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointVO.java index bf97c6b3..3f8f46be 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointVO.java @@ -1,10 +1,12 @@ package cn.axzo.tyr.client.model.permission; +import cn.hutool.core.math.BitStatusUtil; import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; /** @@ -124,14 +126,14 @@ public class PermissionPointVO { /** - * 适用单位类型-65535:所有 1:总包 2:建设单位 4:监理单位 8:劳务分包 16:专业分包 + * 适用单位类型-65535:所有 1:总包 2:建设单位 4:监理单位 8:劳务分包 16:专业分包 32-班组 */ - private Long fitOuTypeBit; + private List fitOuTypeList; /** * 适用节点类型 65535:所有 1:部门 2:班组 4:小组 */ - private Long fitOuNodeTypeBit; + private List fitOuNodeTypeList; /** * 所属应用 @@ -161,4 +163,39 @@ public class PermissionPointVO { /** 授权策略类型描述 **/ private String delegatedTypeDesc; + public void applyFitOuTypeBit(long fitOuTypeBit) { + //这个最值需要处理 + if (fitOuTypeBit > 63L) { + fitOuTypeBit = 63L; + } + long mask = 1L; + ArrayList list = new ArrayList<>(); + while (mask <= 32) { + long bitValue = fitOuTypeBit & mask; + if (bitValue != 0) { + list.add(bitValue); + } + mask = mask << 1; + } + this.fitOuTypeList = list; + } + + public void applyFitOuNodeTypeBit(long fitOuNodeTypeBit) { + //这个最值需要处理 + if (fitOuNodeTypeBit > 7L) { + fitOuNodeTypeBit = 7L; + } + long mask = 1L; + ArrayList list = new ArrayList<>(); + while (mask <= 32) { + long bitValue = fitOuNodeTypeBit & mask; + if (bitValue != 0) { + list.add(bitValue); + } + mask = mask << 1; + } + this.fitOuNodeTypeList = list; + } + + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 9ee2cb3a..f868dd23 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -202,6 +202,8 @@ public class PermissionPointServiceImpl implements PermissionPointService { } PermissionPointVO vo = BeanMapper.copyBean(feature, PermissionPointVO.class); vo.setFeatureTypeDesc(FeatureType.apply(vo.getFeatureType()).getDesc()); + vo.applyFitOuTypeBit(feature.getFitOuTypeBit()); + vo.applyFitOuNodeTypeBit(feature.getFitOuNodeTypeBit()); //补充上级信息 //最顶级二层 @@ -253,6 +255,8 @@ public class PermissionPointServiceImpl implements PermissionPointService { private PermissionPointDTO doUpdate(PermissionPointDTO dto) { SaasFeature feature = getAndCheck(dto.getId()); SaasFeature saasFeature = BeanMapper.copyBean(dto, SaasFeature.class); + saasFeature.setFitOuTypeBit(dto.mergeFitOuTypeBit()); + saasFeature.setFitOuNodeTypeBit(dto.mergeFitOuNodeTypeBit()); //清理不可直接更新的数据 saasFeature.setParentId(null); saasFeature.setPath(null); @@ -276,6 +280,8 @@ public class PermissionPointServiceImpl implements PermissionPointService { private PermissionPointDTO doInsert(PermissionPointDTO dto) { SaasFeature saasFeature = BeanMapper.copyBean(dto, SaasFeature.class); + saasFeature.setFitOuTypeBit(dto.mergeFitOuTypeBit()); + saasFeature.setFitOuNodeTypeBit(dto.mergeFitOuNodeTypeBit()); SaasFeature parent; if (dto.getParentId() == null || dto.getParentId() < 1) { parent = new SaasFeature(); diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/SimpleTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/SimpleTest.java new file mode 100644 index 00000000..b1444025 --- /dev/null +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/SimpleTest.java @@ -0,0 +1,22 @@ +package cn.axzo.tyr.server.permission; + +import cn.axzo.tyr.client.model.permission.PermissionPointVO; +import org.junit.Test; + +/** + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/13 18:43 + */ +public class SimpleTest { + + @Test + public void testSplitBit() { + + PermissionPointVO vo = new PermissionPointVO(); + vo.applyFitOuTypeBit(34L); + System.out.println(vo.getFitOuTypeList()); + vo.applyFitOuTypeBit(65535L); + System.out.println(vo.getFitOuTypeList()); + } +} From 609aaddc28a90913b1b53f8f2fe3ca8f128a8b1d Mon Sep 17 00:00:00 2001 From: yangsong Date: Wed, 13 Sep 2023 20:24:24 +0800 Subject: [PATCH 117/186] =?UTF-8?q?=E4=BE=8B=E5=A4=96=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/feign/SaasPermissionGroupApi.java | 7 +- .../client/model/enums/PermissionType.java | 29 ++++ .../vo/SaveOrUpdatePermissionGroupVO.java | 62 +++++++ .../role/SaasPermissionGroupController.java | 5 +- .../entity/SaasPermissionGroupScope.java | 11 ++ .../service/SaasPermissionGroupScopeDao.java | 16 +- .../service/SaasRoleGroupRelationDao.java | 14 ++ .../service/PermissionGroupService.java | 12 ++ .../SaasPermissionGroupScopeService.java | 9 + .../service/impl/PermissionGroupImpl.java | 159 +++++++++++++++--- .../server/service/impl/RoleServiceImpl.java | 11 +- .../SaasPermissionGroupScopeServiceImpl.java | 40 +++++ 12 files changed, 336 insertions(+), 39 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionType.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaveOrUpdatePermissionGroupVO.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPermissionGroupScopeService.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPermissionGroupScopeServiceImpl.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java index 7d808f60..2fcabc6c 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java @@ -4,6 +4,7 @@ import cn.axzo.framework.domain.web.result.ApiPageResult; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; +import cn.axzo.tyr.client.model.vo.SaveOrUpdatePermissionGroupVO; import cn.axzo.tyr.client.model.vo.SavePermissionGroupPPVO; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -20,10 +21,10 @@ import java.util.List; public interface SaasPermissionGroupApi { /** - * 保存/更新 + * 保存/更新 例外 */ - @PostMapping("/api/saasPermissionGoup/saveOrUpdate") - ApiResult saveOrUpdate(@RequestBody SaasPermissionGroupVO req); + @PostMapping("/api/saasPermissionGoup/saveOrUpdateScope") + ApiResult saveOrUpdateScope(@RequestBody @Valid SaveOrUpdatePermissionGroupVO permissionGroup); /** * 根据id查询详情 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionType.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionType.java new file mode 100644 index 00000000..a799cc85 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/PermissionType.java @@ -0,0 +1,29 @@ +package cn.axzo.tyr.client.model.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +@Getter +@AllArgsConstructor +public enum PermissionType { + FEATURE("feature", "功能"), + DATA("data", "数据"), + ; + + private String code; + private String desc; + + private static final Map MAPPING = new HashMap<>(); + static { + for (PermissionType type : PermissionType.values()) { + MAPPING.put(type.code, type); + } + } + + public static PermissionType apply(Integer code) { + return code == null ? null :MAPPING.get(code); + } +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaveOrUpdatePermissionGroupVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaveOrUpdatePermissionGroupVO.java new file mode 100644 index 00000000..de5f234e --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaveOrUpdatePermissionGroupVO.java @@ -0,0 +1,62 @@ +package cn.axzo.tyr.client.model.vo; + +import lombok.Data; + +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class SaveOrUpdatePermissionGroupVO { + + /** + * 权限集id(例外) + */ + private Long id; + + @NotNull + private Long roleId; + /** + * 权限集名称 + */ + @NotBlank + private String name; + + private String description; + + @NotNull + private Long operatorId; + + private String operatorName; + + @NotNull + private String type; + + /** + * 已选择的项目部 + */ + @Valid + private List selectedWorkspace; + + /** + * 已选择的单位 + */ + @Valid + private List selectedOu; + + @Data + public static class PermissionGroupScopeVO { + /** + * 选择类型 1:正选(指定组织适用) 2:反选(指定组织不适用) + */ + @NotNull + private Integer type; + /** + * 作为范围id(workspaceId/ouId) + */ + @NotNull + private Long scopeId; + } + +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java index 98f5b878..bc0684b7 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java @@ -8,6 +8,7 @@ import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.SaasPermissionGroupApi; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; +import cn.axzo.tyr.client.model.vo.SaveOrUpdatePermissionGroupVO; import cn.axzo.tyr.client.model.vo.SavePermissionGroupPPVO; import cn.axzo.tyr.server.repository.service.SaasPermissionGroupDao; import cn.axzo.tyr.server.repository.service.SaasPermissionGroupScopeDao; @@ -33,8 +34,8 @@ public class SaasPermissionGroupController implements SaasPermissionGroupApi { private final PermissionGroupService permissionGroupService; @Override - public ApiResult saveOrUpdate(SaasPermissionGroupVO req) { - return null; + public ApiResult saveOrUpdateScope(SaveOrUpdatePermissionGroupVO permissionGroup) { + return ApiResult.ok(permissionGroupService.saveOrUpdateScope(permissionGroup)); } @Override diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java index ad530253..0b3f1a5e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java @@ -8,6 +8,7 @@ import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; +import java.util.Objects; /** * 权限集作用范围 @@ -56,5 +57,15 @@ public class SaasPermissionGroupScope extends BaseEntity idList) { + if (CollectionUtils.isEmpty(idList)) { + return false; + } + return lambdaUpdate() + .in(SaasPermissionGroupScope::getId,idList) + .set(BaseEntity::getIsDelete, TableIsDeleteEnum.DELETE.value) + .update(); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupRelationDao.java index 05eba429..292c13db 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupRelationDao.java @@ -2,13 +2,17 @@ package cn.axzo.tyr.server.repository.service; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation; import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupMapper; import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupRelationMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.collections.CollectionUtils; import org.springframework.stereotype.Repository; +import java.io.Serializable; +import java.util.Collection; import java.util.List; @Repository @@ -21,5 +25,15 @@ public class SaasRoleGroupRelationDao extends ServiceImpl idList) { + if (CollectionUtils.isEmpty(idList)) { + return false; + } + return lambdaUpdate() + .in(SaasRoleGroupRelation::getId,idList) + .set(BaseEntity::getIsDelete, TableIsDeleteEnum.DELETE.value) + .update(); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java index ae9e1e26..1cabc230 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java @@ -1,9 +1,12 @@ package cn.axzo.tyr.server.service; import cn.axzo.framework.domain.page.PageResp; +import cn.axzo.tyr.client.model.enums.PermissionGroupType; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; +import cn.axzo.tyr.client.model.vo.SaveOrUpdatePermissionGroupVO; import cn.axzo.tyr.client.model.vo.SavePermissionGroupPPVO; +import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup; import java.util.List; @@ -25,4 +28,13 @@ public interface PermissionGroupService { void savePermissionPoints(SavePermissionGroupPPVO save); + /** + * 新增或者编辑例外权限 + * @param permissionGroup + * @return + */ + Long saveOrUpdateScope(SaveOrUpdatePermissionGroupVO permissionGroup); + + SaasPermissionGroup getRequiredPermissionGroup(Long permissionGroupId, PermissionGroupType type); + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPermissionGroupScopeService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPermissionGroupScopeService.java new file mode 100644 index 00000000..068d87ea --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPermissionGroupScopeService.java @@ -0,0 +1,9 @@ +package cn.axzo.tyr.server.service; + +import cn.axzo.tyr.server.repository.entity.SaasPermissionGroupScope; + +import java.util.List; + +public interface SaasPermissionGroupScopeService { + void saveOrUpdate(List scopes); +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index 2202ab1f..d656da7f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -7,22 +7,19 @@ import cn.axzo.framework.domain.web.BizException; import cn.axzo.framework.domain.web.code.BaseCode; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.model.enums.PermissionGroupType; +import cn.axzo.tyr.client.model.enums.PermissionScope; import cn.axzo.tyr.client.model.enums.PermissionScopeType; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; import cn.axzo.tyr.client.model.vo.SaasRolePermissionScopeVO; +import cn.axzo.tyr.client.model.vo.SaveOrUpdatePermissionGroupVO; import cn.axzo.tyr.client.model.vo.SavePermissionGroupPPVO; -import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup; -import cn.axzo.tyr.server.repository.entity.SaasPermissionGroupScope; -import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; -import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; -import cn.axzo.tyr.server.repository.service.SaasPermissionGroupDao; -import cn.axzo.tyr.server.repository.service.SaasPermissionGroupScopeDao; -import cn.axzo.tyr.server.repository.service.SaasPgroupPermissionRelationDao; -import cn.axzo.tyr.server.repository.service.SaasPgroupRoleRelationDao; +import cn.axzo.tyr.server.repository.entity.*; +import cn.axzo.tyr.server.repository.service.*; import cn.axzo.tyr.server.service.PermissionGroupService; import cn.axzo.tyr.server.service.PermissionPointService; +import cn.axzo.tyr.server.service.SaasPermissionGroupScopeService; import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationService; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.RequiredArgsConstructor; @@ -33,10 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; +import java.util.*; import java.util.stream.Collectors; /** @@ -63,6 +57,10 @@ public class PermissionGroupImpl implements PermissionGroupService { SaasPermissionGroupScopeDao saasPermissionGroupScopeDao; @Autowired SaasPgroupPermissionRelationService saasPgroupPermissionRelationService; + @Autowired + SaasRoleDao saasRoleDao; + @Autowired + SaasPermissionGroupScopeService saasPermissionGroupScopeService; @Override public List query(QuerySaasPermissionGroupReq req) { @@ -237,16 +235,7 @@ public class PermissionGroupImpl implements PermissionGroupService { @Override @Transactional(rollbackFor = Exception.class) public void savePermissionPoints(SavePermissionGroupPPVO save) { - List groups = permissionGroupDao.lambdaQuery() - .eq(SaasPermissionGroup::getId, save.getId()) - .eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); - if (CollectionUtils.isEmpty(groups)) { - throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在"); - } - SaasPermissionGroup saasPermissionGroup = groups.get(0); - if (!Objects.equals(saasPermissionGroup.getIsCommon(), PermissionGroupType.COMMON.getCode())) { - throw new BizException(BaseCode.BAD_REQUEST, "权限集不是通用权限集"); - } + SaasPermissionGroup saasPermissionGroup = getRequiredPermissionGroup(save.getId(), PermissionGroupType.COMMON); List pgpRelations = Optional.ofNullable(save.getSelectedPPIds()).orElse(new ArrayList<>()).stream().map(ppId -> { SaasPgroupPermissionRelation target = new SaasPgroupPermissionRelation(); target.setGroupId(saasPermissionGroup.getId()); @@ -257,4 +246,130 @@ public class PermissionGroupImpl implements PermissionGroupService { }).collect(Collectors.toList()); saasPgroupPermissionRelationService.saveOrUpdate(pgpRelations); } + + @Override + @Transactional(rollbackFor = Exception.class) + public Long saveOrUpdateScope(SaveOrUpdatePermissionGroupVO permissionGroup) { + SaasPermissionGroup saasPermissionGroup; + validSaasPermissionGroup(permissionGroup); + Date now = new Date(); + if (Objects.nonNull(permissionGroup.getId())) { + saasPermissionGroup = getRequiredPermissionGroup(permissionGroup.getId(), PermissionGroupType.SPECIAL); + } else { + saasPermissionGroup = new SaasPermissionGroup(); + saasPermissionGroup.setCreateBy(permissionGroup.getOperatorId()); + saasPermissionGroup.setCreatorName(Optional.ofNullable(permissionGroup.getOperatorName()).orElse("")); + saasPermissionGroup.setIsCommon(PermissionGroupType.SPECIAL.getCode()); + saasPermissionGroup.setCreateAt(now); + } + saasPermissionGroup.setType(permissionGroup.getType()); + saasPermissionGroup.setName(permissionGroup.getName()); + saasPermissionGroup.setUpdateBy(permissionGroup.getOperatorId()); + saasPermissionGroup.setUpdatorName(Optional.ofNullable(permissionGroup.getOperatorName()).orElse("")); + saasPermissionGroup.setDescription(permissionGroup.getDescription()); + saasPermissionGroup.setUpdateAt(now); + permissionGroupDao.saveOrUpdate(saasPermissionGroup); + if (Objects.isNull(permissionGroup.getId())) { + SaasPgroupRoleRelation roleRelation = new SaasPgroupRoleRelation(); + roleRelation.setRoleId(permissionGroup.getRoleId()); + roleRelation.setGroupId(saasPermissionGroup.getId()); + roleRelation.setCreateBy(permissionGroup.getOperatorId()); + roleRelation.setUpdateBy(permissionGroup.getOperatorId()); + roleRelation.setCreateAt(now); + roleRelation.setUpdateAt(now); + roleRelationDao.save(roleRelation); + } + List scopes = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(permissionGroup.getSelectedWorkspace())) { + scopes.addAll(permissionGroup.getSelectedWorkspace().stream().map(w -> { + SaasPermissionGroupScope scope = new SaasPermissionGroupScope(); + scope.setPgroupId(saasPermissionGroup.getId()); + scope.setType(w.getType()); + scope.setScopeType(PermissionScopeType.WORKSPACE.getCode()); + scope.setScopeId(w.getScopeId()); + scope.setCreateAt(now); + scope.setUpdateAt(now); + return scope; + }).collect(Collectors.toList())); + } + if (CollectionUtils.isNotEmpty(permissionGroup.getSelectedOu())) { + scopes.addAll(permissionGroup.getSelectedOu().stream().map(w -> { + SaasPermissionGroupScope scope = new SaasPermissionGroupScope(); + scope.setPgroupId(saasPermissionGroup.getId()); + scope.setType(w.getType()); + scope.setScopeType(PermissionScopeType.OU.getCode()); + scope.setScopeId(w.getScopeId()); + scope.setCreateAt(now); + scope.setUpdateAt(now); + return scope; + }).collect(Collectors.toList())); + } + saasPermissionGroupScopeService.saveOrUpdate(scopes); + return saasPermissionGroup.getId(); + } + + @Override + public SaasPermissionGroup getRequiredPermissionGroup(Long permissionGroupId, PermissionGroupType type) { + List groups = permissionGroupDao.lambdaQuery() + .eq(SaasPermissionGroup::getId, permissionGroupId) + .eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + if (CollectionUtils.isEmpty(groups)) { + throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在"); + } + SaasPermissionGroup saasPermissionGroup = groups.get(0); + if (!Objects.equals(saasPermissionGroup.getIsCommon(), type.getCode())) { + throw new BizException(BaseCode.BAD_REQUEST, String.format("权限集不是%s权限集", type.getDesc())); + } + return saasPermissionGroup; + } + + private void validSaasPermissionGroup(SaveOrUpdatePermissionGroupVO permissionGroup) { + SaasRole saasRole = saasRoleDao.getById(permissionGroup.getRoleId()); + if (Objects.isNull(saasRole)) { + throw new BizException(BaseCode.BAD_REQUEST, "角色不存在"); + } + if (Objects.nonNull(permissionGroup.getId())) { + int relationCount = roleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, permissionGroup.getRoleId()) + .eq(SaasPgroupRoleRelation::getGroupId, permissionGroup.getId()) + .eq(SaasPgroupRoleRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).count(); + if (relationCount == 0) { + throw new BizException(BaseCode.BAD_REQUEST, "角色和权限组不存在关联关系"); + } + } + List selectedWorkspace = permissionGroup.getSelectedWorkspace(); + List selectedOu = permissionGroup.getSelectedOu(); + Set scopeTypes = new HashSet<>(); + if (CollectionUtils.isEmpty(selectedWorkspace) && CollectionUtils.isEmpty(selectedOu)) { + throw new BizException(BaseCode.BAD_REQUEST, "例外不能为空"); + } + if (CollectionUtils.isNotEmpty(selectedWorkspace)) { + Map> selectedWorkspaceMap = selectedWorkspace.stream() + .collect(Collectors.groupingBy(SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO::getType)); + List includeScopes = Optional.ofNullable(selectedWorkspaceMap.get(PermissionScope.INCLUDE)).orElse(new ArrayList<>()); + List excludeScopes = Optional.ofNullable(selectedWorkspaceMap.get(PermissionScope.EXCLUDE)).orElse(new ArrayList<>()); + if (includeScopes.size() + excludeScopes.size() != selectedWorkspace.size()) { + throw new BizException(BaseCode.BAD_REQUEST, "选择类型设置错误"); + } + if (CollectionUtils.containsAny(includeScopes, excludeScopes)) { + throw new BizException(BaseCode.BAD_REQUEST, "项目部例外设置冲突"); + } + scopeTypes.addAll(selectedWorkspace.stream().map(SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO::getType).collect(Collectors.toSet())); + } + if (CollectionUtils.isNotEmpty(selectedOu)) { + Map> selectedOuMap = selectedOu.stream() + .collect(Collectors.groupingBy(SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO::getType)); + List includeScopes = Optional.ofNullable(selectedOuMap.get(PermissionScope.INCLUDE)).orElse(new ArrayList<>()); + List excludeScopes = Optional.ofNullable(selectedOuMap.get(PermissionScope.EXCLUDE)).orElse(new ArrayList<>()); + if (includeScopes.size() + excludeScopes.size() != selectedWorkspace.size()) { + throw new BizException(BaseCode.BAD_REQUEST, "选择类型设置错误"); + } + if (CollectionUtils.containsAny(includeScopes, excludeScopes)) { + throw new BizException(BaseCode.BAD_REQUEST, "单位例外设置冲突"); + } + scopeTypes.addAll(selectedOu.stream().map(SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO::getType).collect(Collectors.toSet())); + } + if (scopeTypes.size() > 1) { + throw new BizException(BaseCode.BAD_REQUEST, "例外类型不能同时指定适用与不适用"); + } + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 1b2b3445..89e3dd60 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -286,16 +286,7 @@ public class RoleServiceImpl implements RoleService { saasPermissionGroup.setCreateBy(saveOrUpdateRole.getOperatorId()); saasPermissionGroup.setCreatorName(saveOrUpdateRole.getOperatorName()); } else { - List groups = saasPermissionGroupDao.lambdaQuery() - .eq(SaasPermissionGroup::getId, saveOrUpdateRole.getPermissionGroupId()) - .eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); - if (CollectionUtils.isEmpty(groups)) { - throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在"); - } - saasPermissionGroup = groups.get(0); - if (!Objects.equals(saasPermissionGroup.getIsCommon(), PermissionGroupType.COMMON.getCode())) { - throw new BizException(BaseCode.BAD_REQUEST, "权限集不是通用权限集"); - } + saasPermissionGroup = permissionGroupService.getRequiredPermissionGroup(saveOrUpdateRole.getPermissionGroupId(), PermissionGroupType.COMMON); } saasPermissionGroup.setName(saveOrUpdateRole.getPermissionGroupName()); saasPermissionGroup.setDescription(saveOrUpdateRole.getPermissionGroupDescription()); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPermissionGroupScopeServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPermissionGroupScopeServiceImpl.java new file mode 100644 index 00000000..e1d5f5b6 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPermissionGroupScopeServiceImpl.java @@ -0,0 +1,40 @@ +package cn.axzo.tyr.server.service.impl; + +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.tyr.server.repository.entity.SaasPermissionGroupScope; +import cn.axzo.tyr.server.repository.service.SaasPermissionGroupScopeDao; +import cn.axzo.tyr.server.service.SaasPermissionGroupScopeService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +@Slf4j +@Service +@RequiredArgsConstructor +public class SaasPermissionGroupScopeServiceImpl implements SaasPermissionGroupScopeService { + private final SaasPermissionGroupScopeDao saasPermissionGroupScopeDao; + @Override + @Transactional(rollbackFor = Exception.class) + public void saveOrUpdate(List scopes) { + if (CollectionUtils.isNotEmpty(scopes)) { + return; + } + List exists = saasPermissionGroupScopeDao.lambdaQuery() + .in(SaasPermissionGroupScope::getPgroupId, scopes.stream().map(SaasPermissionGroupScope::getPgroupId).distinct().sorted().collect(Collectors.toList())) + .eq(SaasPermissionGroupScope::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + Collection insertList = CollectionUtils.subtract(scopes, exists); + Collection deleteList = CollectionUtils.subtract(exists, scopes); + if (CollectionUtils.isNotEmpty(insertList)) { + saasPermissionGroupScopeDao.saveBatch(insertList); + } + if (CollectionUtils.isNotEmpty(deleteList)) { + saasPermissionGroupScopeDao.removeByIds(deleteList.stream().map(SaasPermissionGroupScope::getId).sorted().collect(Collectors.toList())); + } + } +} From 22d6900246c826f3d1c93a9e1fb7cf7d185ba4c2 Mon Sep 17 00:00:00 2001 From: yangsong Date: Wed, 13 Sep 2023 21:04:01 +0800 Subject: [PATCH 118/186] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=BE=8B=E5=A4=96?= =?UTF-8?q?=E6=9D=83=E9=99=90=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/feign/SaasPermissionGroupApi.java | 8 +++- .../model/vo/DeletePermissionGroupVO.java | 27 +++++++++++++ .../role/SaasPermissionGroupController.java | 9 ++++- .../service/SaasPermissionGroupDao.java | 2 + .../service/PermissionGroupService.java | 2 + .../service/impl/PermissionGroupImpl.java | 39 +++++++++++++++++-- 6 files changed, 80 insertions(+), 7 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/DeletePermissionGroupVO.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java index 2fcabc6c..917a99f1 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java @@ -3,6 +3,7 @@ package cn.axzo.tyr.client.feign; import cn.axzo.framework.domain.web.result.ApiPageResult; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; +import cn.axzo.tyr.client.model.vo.DeletePermissionGroupVO; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; import cn.axzo.tyr.client.model.vo.SaveOrUpdatePermissionGroupVO; import cn.axzo.tyr.client.model.vo.SavePermissionGroupPPVO; @@ -23,8 +24,8 @@ public interface SaasPermissionGroupApi { /** * 保存/更新 例外 */ - @PostMapping("/api/saasPermissionGoup/saveOrUpdateScope") - ApiResult saveOrUpdateScope(@RequestBody @Valid SaveOrUpdatePermissionGroupVO permissionGroup); + @PostMapping("/api/saasPermissionGoup/saveOrUpdateSpecial") + ApiResult saveOrUpdateSpecial(@RequestBody @Valid SaveOrUpdatePermissionGroupVO permissionGroup); /** * 根据id查询详情 @@ -48,4 +49,7 @@ public interface SaasPermissionGroupApi { @PostMapping("/api/saasPermissionGoup/savePermissionPoints") ApiResult savePermissionPoints(@RequestBody@Valid SavePermissionGroupPPVO save); + + @PostMapping("/api/saasPermissionGoup/deletePermissionGroupSpecial") + ApiResult deletePermissionGroupSpecial(@RequestBody @Valid DeletePermissionGroupVO group); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/DeletePermissionGroupVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/DeletePermissionGroupVO.java new file mode 100644 index 00000000..edbe49c9 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/DeletePermissionGroupVO.java @@ -0,0 +1,27 @@ +package cn.axzo.tyr.client.model.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class DeletePermissionGroupVO { + @NotNull + private Long roleId; + + @NotEmpty + private List specialPermissionGroupIds; + + @NotNull + private Long operatorId; + + private String operatorName; +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java index bc0684b7..161902ef 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java @@ -7,6 +7,7 @@ import cn.axzo.framework.domain.web.result.ApiPageResult; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.SaasPermissionGroupApi; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; +import cn.axzo.tyr.client.model.vo.DeletePermissionGroupVO; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; import cn.axzo.tyr.client.model.vo.SaveOrUpdatePermissionGroupVO; import cn.axzo.tyr.client.model.vo.SavePermissionGroupPPVO; @@ -34,7 +35,7 @@ public class SaasPermissionGroupController implements SaasPermissionGroupApi { private final PermissionGroupService permissionGroupService; @Override - public ApiResult saveOrUpdateScope(SaveOrUpdatePermissionGroupVO permissionGroup) { + public ApiResult saveOrUpdateSpecial(SaveOrUpdatePermissionGroupVO permissionGroup) { return ApiResult.ok(permissionGroupService.saveOrUpdateScope(permissionGroup)); } @@ -70,4 +71,10 @@ public class SaasPermissionGroupController implements SaasPermissionGroupApi { return ApiResult.ok(); } + @Override + public ApiResult deletePermissionGroupSpecial(DeletePermissionGroupVO group) { + permissionGroupService.deletePermissionGroupSpecial(group); + return ApiResult.ok(); + } + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupDao.java index a08eaf07..a5ff031d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupDao.java @@ -17,5 +17,7 @@ public class SaasPermissionGroupDao extends ServiceImpl relations = roleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, group.getRoleId()) + .in(SaasPgroupRoleRelation::getGroupId, group.getSpecialPermissionGroupIds()) + .eq(SaasPgroupRoleRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + if (CollectionUtils.isEmpty(relations)) { + throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在"); + } + List deleteGroupIds = relations.stream().map(SaasPgroupRoleRelation::getGroupId).sorted().collect(Collectors.toList()); + List groups = permissionGroupDao.lambdaQuery() + .in(SaasPermissionGroup::getId, deleteGroupIds) + .eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + if (groups.stream().anyMatch(e -> !Objects.equals(e.getIsCommon(), PermissionGroupType.SPECIAL.getCode()))) { + throw new BizException(BaseCode.BAD_REQUEST, "只能删除例外权限集"); + } + //删除角色关联 + roleRelationDao.removeByIds(relations.stream().map(SaasPgroupRoleRelation::getId).sorted().collect(Collectors.toList())); + List scopes = saasPermissionGroupScopeDao.lambdaQuery().in(SaasPermissionGroupScope::getPgroupId, deleteGroupIds) + .eq(SaasPermissionGroupScope::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + if (CollectionUtils.isNotEmpty(scopes)) { + // 删除例外scope + saasPermissionGroupScopeDao.removeByIds(scopes.stream().map(SaasPermissionGroupScope::getId).sorted().collect(Collectors.toList())); + } + // 删除通用权限集 + permissionGroupDao.lambdaUpdate() + .in(BaseEntity::getId,deleteGroupIds) + .set(BaseEntity::getIsDelete, TableIsDeleteEnum.DELETE.value) + .set(BaseEntity::getUpdateAt, new Date()) + .set(SaasPermissionGroup::getUpdateBy, group.getOperatorId()) + .set(SaasPermissionGroup::getUpdatorName, group.getOperatorName()) + .update(); + } + private void validSaasPermissionGroup(SaveOrUpdatePermissionGroupVO permissionGroup) { SaasRole saasRole = saasRoleDao.getById(permissionGroup.getRoleId()); if (Objects.isNull(saasRole)) { From 37d6de4412661f7f2d0e4b4981b02e7d1930d528 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Wed, 13 Sep 2023 21:06:37 +0800 Subject: [PATCH 119/186] =?UTF-8?q?fix(=E6=9D=83=E9=99=90=E7=82=B9):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8DdelegatedType=E8=B5=8B=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/server/service/impl/PermissionPointServiceImpl.java | 1 + .../cn/axzo/tyr/server/permission/PermissionPointTest.java | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index f868dd23..be8b3685 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -431,6 +431,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { node.setTerminal(feature.getTerminal()); node.setFeatureType(feature.getFeatureType()); node.setFeatureTypeDesc(FeatureType.apply(feature.getFeatureType()).getDesc()); + node.setDelegatedType(feature.getDelegatedType()); node.setPath(feature.getPath()); node.setSort(feature.getSort()); return node; diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java index 4603cf76..3fe2cd3e 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java @@ -44,9 +44,10 @@ public class PermissionPointTest { public void testListTreeNode() { PermissionPointTreeQueryReq request = new PermissionPointTreeQueryReq(); //request.setParentId(354L); - request.setKeyword("预警"); + //request.setKeyword("预警"); //request.setWorkspaceType(Arrays.asList("ent")); - request.setTerminalList(Arrays.asList("NT_CMS_WEB_ENT_ZB")); + //request.setTerminalList(Arrays.asList("NT_CMS_WEB_ENT_ZB")); + request.setDelegateType(2); ApiResult> result = controller.listTreeNodes(request); System.out.println("---------------"); System.out.println(JSON.toJSONString(result, SerializerFeature.DisableCircularReferenceDetect)); From 80140309ad3285812bfb9eaae6bf5c5729f2ef03 Mon Sep 17 00:00:00 2001 From: yangsong Date: Thu, 14 Sep 2023 09:41:31 +0800 Subject: [PATCH 120/186] =?UTF-8?q?=E5=88=A0=E9=99=A4=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/feign/SaasRoleGroupApi.java | 4 +-- .../role/SaasRoleGroupController.java | 4 +-- .../server/service/SaasRoleGroupService.java | 2 +- .../impl/SaasRoleGroupServiceImpl.java | 31 ++++++++++--------- 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java index 0a61b026..0fbfa3dc 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java @@ -8,6 +8,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; +import javax.validation.constraints.NotEmpty; import java.util.List; /** @@ -37,7 +38,6 @@ public interface SaasRoleGroupApi { * 删除 */ @PostMapping("/api/saasRoleGroup//api/saasPermissionGoup/delete") - ApiResult delete(@RequestBody List id); - + ApiResult delete(@RequestBody@NotEmpty List ids); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java index 698dc814..466b5e31 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java @@ -43,8 +43,8 @@ public class SaasRoleGroupController implements SaasRoleGroupApi { } @Override - public ApiResult delete(List id) { - + public ApiResult delete(List ids) { + saasRoleGroupService.delete(ids); return ApiResult.ok(); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java index 456d2f59..c7504af7 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java @@ -10,5 +10,5 @@ public interface SaasRoleGroupService { void saveOrUpdate(SaasRoleGroupVO req); - void delete(Long id); + void delete(List ids); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java index a2a5cac6..2e12c9b2 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java @@ -1,10 +1,10 @@ package cn.axzo.tyr.server.service.impl; -import java.util.Date; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.framework.domain.web.BizException; +import cn.axzo.framework.domain.web.code.BaseCode; import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; -import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation; import cn.axzo.tyr.server.repository.service.*; @@ -88,18 +88,21 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { saasRoleGroupDao.saveOrUpdate(saasRoleGroup); } + /** + * 只有当分组下面角色为空时才能删除 + * @param ids + */ @Override - public void delete(Long id) { - // 删除分组 - - // 删除角色分组关联关系 - - // - - - // 删除权限分组关联关系 - // 删除权限 - // 删除权限集关联关系 - // 删除权限集 + public void delete(List ids) { + if (CollectionUtils.isEmpty(ids)) { + return; + } + int relationCount = saasRoleGroupRelationDao.lambdaQuery().in(SaasRoleGroupRelation::getSaasRoleGroupId, ids) + .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).count(); + if (relationCount > 0) { + throw new BizException(BaseCode.BAD_REQUEST, "分组关联角色,不能删除"); + } + saasRoleGroupDao.delete(ids); } + } From bd27016a3daac204c1a7bae35d22ec7ae0a10cfb Mon Sep 17 00:00:00 2001 From: TanJ Date: Thu, 14 Sep 2023 10:52:57 +0800 Subject: [PATCH 121/186] =?UTF-8?q?feat:=20roleType=E7=A7=BB=E8=87=B3commo?= =?UTF-8?q?n=E4=BE=9Byoke=E6=B6=88=E8=B4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client}/common/enums/RoleTypeEnum.java | 3 +-- .../server/service/impl/RoleUserService.java | 27 +------------------ 2 files changed, 2 insertions(+), 28 deletions(-) rename {tyr-server/src/main/java/cn/axzo/tyr/server => tyr-api/src/main/java/cn/axzo/tyr/client}/common/enums/RoleTypeEnum.java (95%) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/common/enums/RoleTypeEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/RoleTypeEnum.java similarity index 95% rename from tyr-server/src/main/java/cn/axzo/tyr/server/common/enums/RoleTypeEnum.java rename to tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/RoleTypeEnum.java index ea110c50..ec0f621a 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/common/enums/RoleTypeEnum.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/common/enums/RoleTypeEnum.java @@ -1,8 +1,7 @@ -package cn.axzo.tyr.server.common.enums; +package cn.axzo.tyr.client.common.enums; import com.baomidou.mybatisplus.annotation.EnumValue; import lombok.AllArgsConstructor; -import lombok.Data; import lombok.Getter; import java.util.Arrays; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java index 78717f65..b2a927d5 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java @@ -1,47 +1,22 @@ package cn.axzo.tyr.server.service.impl; -import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.framework.domain.ServiceException; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.model.BaseWorkspaceModel; -import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; -import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; -import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; -import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; -import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; -import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; -import cn.axzo.tyr.client.model.vo.SaasRoleVO; -import cn.axzo.tyr.server.common.enums.RoleTypeEnum; -import cn.axzo.tyr.server.common.util.StreamUtil; -import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; +import cn.axzo.tyr.client.common.enums.RoleTypeEnum; import cn.axzo.tyr.server.repository.entity.SaasRole; -import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; -import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; -import cn.axzo.tyr.server.repository.service.SaasPgroupRoleRelationDao; import cn.axzo.tyr.server.repository.service.SaasRoleDao; -import cn.axzo.tyr.server.repository.service.SaasRoleGroupDao; -import cn.axzo.tyr.server.repository.service.SaasRoleGroupRelationDao; import cn.axzo.tyr.server.repository.service.SaasRoleUserRelationDao; -import cn.axzo.tyr.server.service.PermissionGroupService; -import cn.axzo.tyr.server.service.RoleService; import cn.axzo.tyr.server.service.SaasRoleUserService; -import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Map; -import java.util.Objects; import java.util.stream.Collectors; /** From 627a5852c1c8cda9b2166671852dccc46c9f1e2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Thu, 14 Sep 2023 10:58:19 +0800 Subject: [PATCH 122/186] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E5=88=86=E7=BB=84=E6=8E=A5=E5=8F=A3=E8=A1=A5=E5=85=85=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java | 10 ++++++++++ .../server/service/impl/SaasRoleGroupServiceImpl.java | 2 ++ 2 files changed, 12 insertions(+) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java index fb640369..1286efc8 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java @@ -36,6 +36,16 @@ public class SaasRoleGroupVO { */ private List roleIds; + /** + * 工作台id(自定义时传入) + */ + private Long workspaceId; + + /** + * 单位id(自定义时传入) + */ + private Long ouId; + /** * 排序 */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java index 2e12c9b2..a5eaff8c 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java @@ -85,6 +85,8 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { saasRoleGroup.setOuTypeCode(ouTypeCodeStr); saasRoleGroup.setName(req.getName()); saasRoleGroup.setSort(req.getSort()); + saasRoleGroup.setWorkspaceId(req.getWorkspaceId() != null ? req.getWorkspaceId():-1l); + saasRoleGroup.setOuId(req.getOuId() != null ? req.getOuId():-1l); saasRoleGroupDao.saveOrUpdate(saasRoleGroup); } From fbd3ac440a3c61386f9f2498d4c53e4979f239c0 Mon Sep 17 00:00:00 2001 From: yangsong Date: Thu, 14 Sep 2023 11:02:33 +0800 Subject: [PATCH 123/186] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E5=88=86=E7=BB=84=E6=A0=91=20bugfix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java index a5eaff8c..50b64f95 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java @@ -56,7 +56,7 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { return new ArrayList<>(); } List saasRoleGroupRelations = saasRoleGroupRelationDao.lambdaQuery() - .in(SaasRoleGroupRelation::getSaasRoleGroupId, groups.stream().map(SaasRoleGroup::getId)) + .in(SaasRoleGroupRelation::getSaasRoleGroupId, groups.stream().map(SaasRoleGroup::getId).collect(Collectors.toList())) .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); Map> groupRoleMap = saasRoleGroupRelations.stream().collect(Collectors.groupingBy(SaasRoleGroupRelation::getSaasRoleGroupId, Collectors.mapping(SaasRoleGroupRelation::getRoleId, Collectors.toList()))); List results = groups.stream() From f7ae347b08d3bff57c4639c799645635b056710b Mon Sep 17 00:00:00 2001 From: zhansihu Date: Thu, 14 Sep 2023 11:36:53 +0800 Subject: [PATCH 124/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=20=E6=8E=92=E5=BA=8F=E5=AE=9E=E7=8E=B0=E9=87=8D=E6=9E=84?= =?UTF-8?q?=EF=BC=9B=E6=94=AF=E6=8C=81=E6=96=B0=E5=A2=9E=E6=97=B6=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constants/PermissionConstant.java | 4 +- .../impl/PermissionPointServiceImpl.java | 126 ++++++++++-------- .../permission/PermissionPointTest.java | 8 +- 3 files changed, 73 insertions(+), 65 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/common/constants/PermissionConstant.java b/tyr-server/src/main/java/cn/axzo/tyr/server/common/constants/PermissionConstant.java index 92d20186..077c006a 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/common/constants/PermissionConstant.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/common/constants/PermissionConstant.java @@ -12,8 +12,8 @@ public class PermissionConstant { /** 权限点path分隔符 **/ public static final String FEATURE_PATH_DELIMITER = "/"; - /** 无父级 **/ - public static final String FEATURE_NO_PARENT = "0"; + /** 无父级的parent_business_no **/ + public static final String FEATURE_TOP_BIZ_NO = "0"; /** 顶级path **/ public static final String FEATURE_TOP_PATH = "/0/"; /** 权限点business_no前缀 **/ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index be8b3685..e9cab098 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -25,6 +25,7 @@ import cn.axzo.tyr.server.service.PermissionPointService; import cn.axzo.tyr.server.service.SaasBasicDictService; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -57,21 +58,9 @@ public class PermissionPointServiceImpl implements PermissionPointService { @Override public List listTreeNodes(PermissionPointTreeQueryReq request) { - //条件转换 workspace --> terminal - workspace2Terminal(request); - //查询条件构建 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() - .in(CollectionUtil.isNotEmpty(request.getTerminalList()), SaasFeature::getTerminal, request.getTerminalList()); - //查指定节点子级处理条件 - if (request.getParentId() != null && request.getParentId() != 0) { - SaasFeature parent = this.saasFeatureDao.getById(request.getParentId()); - if (parent == null) { - log.error("指定的父级节点不存在:{}", request.getParentId()); - throw new BizException(BaseCode.BAD_REQUEST); - } - //追加条件path左匹配 - queryWrapper.likeRight(SaasFeature::getPath, parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER); - } + + //构建查询条件 + Wrapper queryWrapper = buildQueryWrapper(request); List list = saasFeatureDao.list(queryWrapper); //构建树形结构, 整体排序保证层级内的有序 - 优化点:构建树形结构时进行过滤 @@ -85,7 +74,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { List nodesResult = filterTreeNode(request, treeList); //指定parent后不需要顶级的工作台 - if (request.getParentId() != null) { + if (request.getParentId() != null || CollectionUtil.isEmpty(nodesResult)) { return nodesResult; } @@ -125,6 +114,25 @@ public class PermissionPointServiceImpl implements PermissionPointService { return result; } + private Wrapper buildQueryWrapper(PermissionPointTreeQueryReq request) { + //条件转换 workspace --> terminal + workspace2Terminal(request); + //查询条件构建 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .in(CollectionUtil.isNotEmpty(request.getTerminalList()), SaasFeature::getTerminal, request.getTerminalList()); + //查指定节点子级处理条件 + if (request.getParentId() != null && request.getParentId() != 0) { + SaasFeature parent = this.saasFeatureDao.getById(request.getParentId()); + if (parent == null) { + log.error("指定的父级节点不存在:{}", request.getParentId()); + throw new BizException(BaseCode.BAD_REQUEST); + } + //追加条件path左匹配 + queryWrapper.likeRight(SaasFeature::getPath, parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER); + } + return queryWrapper; + } + private void workspace2Terminal(PermissionPointTreeQueryReq request) { if (CollectionUtil.isNotEmpty(request.getWorkspaceType())) { List terminals = new ArrayList<>(); @@ -195,13 +203,11 @@ public class PermissionPointServiceImpl implements PermissionPointService { @Override public PermissionPointVO getDetail(Long permissionId) { - SaasFeature feature = this.saasFeatureDao.getById(permissionId); - if (feature == null) { - log.warn("no saasFeature found for:{}", permissionId); - throw new BizException(BaseCode.BAD_REQUEST); - } + + SaasFeature feature = getAndCheck(permissionId); PermissionPointVO vo = BeanMapper.copyBean(feature, PermissionPointVO.class); vo.setFeatureTypeDesc(FeatureType.apply(vo.getFeatureType()).getDesc()); + //按位拆分适配单位类型和节点类型 vo.applyFitOuTypeBit(feature.getFitOuTypeBit()); vo.applyFitOuNodeTypeBit(feature.getFitOuNodeTypeBit()); @@ -222,11 +228,12 @@ public class PermissionPointServiceImpl implements PermissionPointService { vo.setPathName(pathName); return vo; } - //查询所有父级 - List split = StrUtil.split(vo.getPath(), FEATURE_PATH_DELIMITER, true, true); - List ids = split.stream() - .filter(x -> !StrUtil.equals(FEATURE_NO_PARENT, x)) + + //查询所有父级 - path拆分查询 + List ids = StrUtil.split(vo.getPath(), FEATURE_PATH_DELIMITER, true, true) + .stream() .map(Long::valueOf) + .filter(id -> id < 1) .collect(Collectors.toList()); Map parentsMapping = this.saasFeatureDao.listByIds(ids) .stream() @@ -284,23 +291,22 @@ public class PermissionPointServiceImpl implements PermissionPointService { saasFeature.setFitOuNodeTypeBit(dto.mergeFitOuNodeTypeBit()); SaasFeature parent; if (dto.getParentId() == null || dto.getParentId() < 1) { - parent = new SaasFeature(); - parent.setPath(FEATURE_TOP_PATH); - parent.setBusinessNo("0"); - //设置为0便于下面查询 - parent.setParentId(0L); + saasFeature.setParentId(0L); + saasFeature.setPath(FEATURE_TOP_PATH); + saasFeature.setParentBusinessNo(FEATURE_TOP_BIZ_NO); } else { parent = this.saasFeatureDao.getById(dto.getParentId()); + saasFeature.setPath(parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER); + saasFeature.setParentBusinessNo(parent.getBusinessNo()); } - //计算子节点作为sort //生成biz_no saasFeature.setBusinessNo(FEATURE_BIZ_NO_PREFIX + System.currentTimeMillis()); - saasFeature.setParentBusinessNo(parent.getBusinessNo()); - saasFeature.setPath(parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER); this.saasFeatureDao.save(saasFeature); dto.setId(saasFeature.getId()); dto.setBusinessNo(saasFeature.getBusinessNo()); + //调整排序 - 兼容处理老数据,数据规范化 + changeSort(saasFeature, saasFeature.getSort()); return dto; } @@ -338,7 +344,8 @@ public class PermissionPointServiceImpl implements PermissionPointService { public void move(PermissionPointMoveRequest request) { SaasFeature feature = getAndCheck(request.getPermissionId()); changeParent(feature, request); - changeSort(feature, request); + feature.setParentId(request.getParentId()); + changeSort(feature, request.getSort()); } @Override @@ -357,35 +364,36 @@ public class PermissionPointServiceImpl implements PermissionPointService { .collect(Collectors.toList()); } - private void changeSort(SaasFeature feature, PermissionPointMoveRequest request) { - //原parent下节点排序会有缺失但无影响-不处理 + private void changeSort(SaasFeature feature, Integer targetSort) { + //排序从1开始 + //原parent下节点排序会有缺失 - 有节点新增时进行处理 //同terminal 同级节点 - List saasFeatures = this.saasFeatureDao.listByParentIdAndTerminal(request.getParentId(), + List saasFeatures = this.saasFeatureDao.listByParentIdAndTerminal(feature.getParentId(), feature.getTerminal()); + //数据规范化 + if (targetSort == null + || targetSort > saasFeatures.size()) { + //默认在最后 + targetSort = saasFeatures.size(); + } + targetSort = targetSort < 1 ? 1 : targetSort; + //排序并排除自己 + List sortedList = saasFeatures.stream() + .sorted(Comparator.comparing(SaasFeature::getSort)) + .filter(x -> !x.getId().equals(feature.getId())) + .collect(Collectors.toList()); + //将自己插入指定位置 + sortedList.add(targetSort - 1, feature); //记录排序 Map sortMap = new HashMap<>(); - //插入指定位置 - sortMap.put(request.getPermissionId(), request.getSort()); - //找到需要更新排序其他节点 - AtomicInteger sort = new AtomicInteger(0); - Integer targetSort = request.getSort(); - saasFeatures.stream() - .sorted(Comparator.comparing(SaasFeature::getSort)) - .forEach(x -> { - //跳过自己 - if (!x.getId().equals(request.getPermissionId())) { - //记录位置 - sort.incrementAndGet(); - if (targetSort.equals(sort.get())) { - //找到指定位置,当前节点需要移动到下一位置 - sort.incrementAndGet(); - } - if (!x.getSort().equals(sort.get())) { - // 排序需要修正 - sortMap.put(x.getId(), sort.get()); - } - } - }); + //找到需要更新排序的节点 + for (int i = 0; i < sortedList.size(); i++) { + SaasFeature saasFeature = sortedList.get(i); + if (!saasFeature.getSort().equals(i + 1)) { + sortMap.put(saasFeature.getId(), i + 1); + } + } + //执行更新 - 有一定性能问题 for (Map.Entry entry : sortMap.entrySet()) { this.saasFeatureDao.updateSort(entry.getKey(), entry.getValue()); diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java index 3fe2cd3e..93ccc452 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java @@ -74,7 +74,7 @@ public class PermissionPointTest { permissionPoint.setFeatureCode("CMS_WEB_PROJ_0158"); permissionPoint.setParentId(360L); permissionPoint.setPath("/0/354/360/"); - permissionPoint.setSort(6); + permissionPoint.setSort(3); permissionPoint.setTerminal("NT_CMS_WEB_PROJ"); permissionPoint.setFeatureType(3); permissionPoint.setAppName("tyr"); @@ -82,7 +82,7 @@ public class PermissionPointTest { permissionPoint.setNeedAuth(true); permissionPoint.setNeedAuth(true); System.out.println(JSON.toJSONString(permissionPoint)); - //controller.savePermissionPoint(permissionPoint); + controller.savePermissionPoint(permissionPoint); } @Test @@ -107,8 +107,8 @@ public class PermissionPointTest { @Test public void testMove() { PermissionPointMoveRequest request = new PermissionPointMoveRequest(); - request.setPermissionId(360L); - request.setParentId(354L); + request.setPermissionId(3483L); + request.setParentId(360L); request.setSort(1); ApiResult result = controller.move(request); System.out.println(JSON.toJSONString(result)); From 3210aa2d6d8fd9954d17f558f4db3f4267cf4ec2 Mon Sep 17 00:00:00 2001 From: yangsong Date: Thu, 14 Sep 2023 13:42:33 +0800 Subject: [PATCH 125/186] package rename --- .../model/req/QuerySaasRoleGroupReq.java | 4 +-- .../role/SaasPermissionGroupController.java | 6 ++-- .../roleuser/RoleUserController.java | 1 - .../tyr/server/job/OMSRoleJobHandler.java | 8 +---- .../{service => dao}/ProductModuleDao.java | 3 +- .../{service => dao}/SaasFeatureDao.java | 2 +- .../SaasPermissionGroupDao.java | 2 +- .../SaasPermissionGroupScopeDao.java | 2 +- .../SaasPgroupPermissionRelationDao.java | 2 +- .../SaasPgroupRoleRelationDao.java | 2 +- .../SaasProductModuleFeatureRelationDao.java | 2 +- .../{service => dao}/SaasRoleDao.java | 2 +- .../{service => dao}/SaasRoleGroupDao.java | 8 ++--- .../SaasRoleGroupRelationDao.java | 5 +-- .../SaasRoleUserRelationDao.java | 6 +--- .../impl/SaasFeatureDaoImpl.java | 6 ++-- .../server/repository/entity/SaasRole.java | 33 +++---------------- .../service/impl/PermissionGroupImpl.java | 2 +- .../impl/PermissionPointServiceImpl.java | 4 +-- .../ProductFeatureRelationServiceImpl.java | 2 +- .../service/impl/ProductServiceImpl.java | 2 +- .../server/service/impl/RoleServiceImpl.java | 4 +-- .../server/service/impl/RoleUserService.java | 4 +-- .../SaasPermissionGroupScopeServiceImpl.java | 2 +- ...asPgroupPermissionRelationServiceImpl.java | 2 +- .../SaasPgroupRoleRelationServiceImpl.java | 4 +-- .../SaasRoleGroupRelationServiceImpl.java | 2 +- .../impl/SaasRoleGroupServiceImpl.java | 2 +- .../permission/PermissionPointTest.java | 2 +- 29 files changed, 41 insertions(+), 85 deletions(-) rename tyr-server/src/main/java/cn/axzo/tyr/server/repository/{service => dao}/ProductModuleDao.java (82%) rename tyr-server/src/main/java/cn/axzo/tyr/server/repository/{service => dao}/SaasFeatureDao.java (92%) rename tyr-server/src/main/java/cn/axzo/tyr/server/repository/{service => dao}/SaasPermissionGroupDao.java (92%) rename tyr-server/src/main/java/cn/axzo/tyr/server/repository/{service => dao}/SaasPermissionGroupScopeDao.java (96%) rename tyr-server/src/main/java/cn/axzo/tyr/server/repository/{service => dao}/SaasPgroupPermissionRelationDao.java (97%) rename tyr-server/src/main/java/cn/axzo/tyr/server/repository/{service => dao}/SaasPgroupRoleRelationDao.java (96%) rename tyr-server/src/main/java/cn/axzo/tyr/server/repository/{service => dao}/SaasProductModuleFeatureRelationDao.java (92%) rename tyr-server/src/main/java/cn/axzo/tyr/server/repository/{service => dao}/SaasRoleDao.java (95%) rename tyr-server/src/main/java/cn/axzo/tyr/server/repository/{service => dao}/SaasRoleGroupDao.java (86%) rename tyr-server/src/main/java/cn/axzo/tyr/server/repository/{service => dao}/SaasRoleGroupRelationDao.java (82%) rename tyr-server/src/main/java/cn/axzo/tyr/server/repository/{service => dao}/SaasRoleUserRelationDao.java (86%) rename tyr-server/src/main/java/cn/axzo/tyr/server/repository/{service => dao}/impl/SaasFeatureDaoImpl.java (87%) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java index 805ec758..e6309e29 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleGroupReq.java @@ -18,12 +18,12 @@ public class QuerySaasRoleGroupReq { /** * 项目部id(不传或者传-1查询的是标准分组) */ - private Long workspaceId; + private List workspaceIds; /** * 单位id(不传或者传-1查询的是标准分组) */ - private Long ouId; + private List ouIds; /** * 工作台类型字典code diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java index 161902ef..7b0bfcf4 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java @@ -11,9 +11,9 @@ import cn.axzo.tyr.client.model.vo.DeletePermissionGroupVO; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; import cn.axzo.tyr.client.model.vo.SaveOrUpdatePermissionGroupVO; import cn.axzo.tyr.client.model.vo.SavePermissionGroupPPVO; -import cn.axzo.tyr.server.repository.service.SaasPermissionGroupDao; -import cn.axzo.tyr.server.repository.service.SaasPermissionGroupScopeDao; -import cn.axzo.tyr.server.repository.service.SaasPgroupPermissionRelationDao; +import cn.axzo.tyr.server.repository.dao.SaasPermissionGroupDao; +import cn.axzo.tyr.server.repository.dao.SaasPermissionGroupScopeDao; +import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao; import cn.axzo.tyr.server.service.PermissionGroupService; import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java index 31e58e72..b29c444e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java @@ -3,7 +3,6 @@ package cn.axzo.tyr.server.controller.roleuser; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.TyrSaasRoleUserApi; import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; -import cn.axzo.tyr.server.repository.service.SaasRoleUserRelationDao; import cn.axzo.tyr.server.service.SaasRoleUserService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java index 77486a3a..4b5e44f2 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java @@ -2,7 +2,7 @@ package cn.axzo.tyr.server.job; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.server.repository.entity.*; -import cn.axzo.tyr.server.repository.service.*; +import cn.axzo.tyr.server.repository.dao.*; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.handler.IJobHandler; import com.xxl.job.core.handler.annotation.XxlJob; @@ -76,12 +76,6 @@ public class OMSRoleJobHandler extends IJobHandler { oldRole.forEach(e -> { e.setWorkspaceId(-1l); e.setOwnerOuId(-1l); - e.setFitOuTypeBit(-1); - e.setFitOuNodeTypeBit(-1); - e.setPositionTemplateId(-1l); - e.setProjectTeamManageRoleResourceId(-1l); - e.setFromPreRoleId(-1l); - e.setJobCode(""); }); roleDao.updateBatchById(oldRole); // 保存角色分组关联关系 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/ProductModuleDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/ProductModuleDao.java similarity index 82% rename from tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/ProductModuleDao.java rename to tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/ProductModuleDao.java index 10c448dd..c83be1d3 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/ProductModuleDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/ProductModuleDao.java @@ -1,9 +1,8 @@ -package cn.axzo.tyr.server.repository.service; +package cn.axzo.tyr.server.repository.dao; import cn.axzo.tyr.server.repository.entity.ProductModule; import cn.axzo.tyr.server.repository.mapper.ProductModuleMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Repository; import org.springframework.stereotype.Service; /** diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasFeatureDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasFeatureDao.java similarity index 92% rename from tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasFeatureDao.java rename to tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasFeatureDao.java index 0751a47d..bfe031a1 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasFeatureDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasFeatureDao.java @@ -1,4 +1,4 @@ -package cn.axzo.tyr.server.repository.service; +package cn.axzo.tyr.server.repository.dao; import cn.axzo.tyr.server.repository.entity.SaasFeature; import com.baomidou.mybatisplus.extension.service.IService; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPermissionGroupDao.java similarity index 92% rename from tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupDao.java rename to tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPermissionGroupDao.java index a5ff031d..358ce34f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPermissionGroupDao.java @@ -1,4 +1,4 @@ -package cn.axzo.tyr.server.repository.service; +package cn.axzo.tyr.server.repository.dao; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupScopeDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPermissionGroupScopeDao.java similarity index 96% rename from tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupScopeDao.java rename to tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPermissionGroupScopeDao.java index 4af9a366..11174e8b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPermissionGroupScopeDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPermissionGroupScopeDao.java @@ -1,4 +1,4 @@ -package cn.axzo.tyr.server.repository.service; +package cn.axzo.tyr.server.repository.dao; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupPermissionRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPgroupPermissionRelationDao.java similarity index 97% rename from tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupPermissionRelationDao.java rename to tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPgroupPermissionRelationDao.java index 7075a7a6..37240edd 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupPermissionRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPgroupPermissionRelationDao.java @@ -1,4 +1,4 @@ -package cn.axzo.tyr.server.repository.service; +package cn.axzo.tyr.server.repository.dao; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupRoleRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPgroupRoleRelationDao.java similarity index 96% rename from tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupRoleRelationDao.java rename to tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPgroupRoleRelationDao.java index 99c0183b..32a9560f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasPgroupRoleRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPgroupRoleRelationDao.java @@ -1,4 +1,4 @@ -package cn.axzo.tyr.server.repository.service; +package cn.axzo.tyr.server.repository.dao; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasProductModuleFeatureRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasProductModuleFeatureRelationDao.java similarity index 92% rename from tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasProductModuleFeatureRelationDao.java rename to tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasProductModuleFeatureRelationDao.java index 844bce5e..8f7bba44 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasProductModuleFeatureRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasProductModuleFeatureRelationDao.java @@ -1,4 +1,4 @@ -package cn.axzo.tyr.server.repository.service; +package cn.axzo.tyr.server.repository.dao; import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation; import cn.axzo.tyr.server.repository.mapper.SaasProductModuleFeatureRelationMapper; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleDao.java similarity index 95% rename from tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleDao.java rename to tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleDao.java index f7846a02..072dd6db 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleDao.java @@ -1,4 +1,4 @@ -package cn.axzo.tyr.server.repository.service; +package cn.axzo.tyr.server.repository.dao; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleGroupDao.java similarity index 86% rename from tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java rename to tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleGroupDao.java index 6900378d..7df2637b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleGroupDao.java @@ -1,14 +1,10 @@ -package cn.axzo.tyr.server.repository.service; +package cn.axzo.tyr.server.repository.dao; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; -import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; -import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; -import cn.axzo.tyr.server.repository.mapper.SaasPgroupRoleRelationMapper; import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupMapper; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.collections.CollectionUtils; @@ -38,6 +34,8 @@ public class SaasRoleGroupDao extends ServiceImpl eq = this.lambdaQuery() .in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId, req.getIds()) .in(CollectionUtils.isNotEmpty(req.getWorkspaceTypeCode()), SaasRoleGroup::getWorkspaceTypeCode, req.getWorkspaceTypeCode()) + .in(CollectionUtils.isNotEmpty(req.getWorkspaceIds()), SaasRoleGroup::getWorkspaceId, req.getWorkspaceIds()) + .in(CollectionUtils.isNotEmpty(req.getOuIds()), SaasRoleGroup::getOuId, req.getOuIds()) .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value); if(CollectionUtils.isNotEmpty(req.getOuTypeCode())){ eq.last(" AND (" + condition.substring(0, condition.length() - 2) + ")"); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleGroupRelationDao.java similarity index 82% rename from tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupRelationDao.java rename to tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleGroupRelationDao.java index 292c13db..e9381487 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleGroupRelationDao.java @@ -1,11 +1,8 @@ -package cn.axzo.tyr.server.repository.service; +package cn.axzo.tyr.server.repository.dao; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; -import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; -import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation; -import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupMapper; import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupRelationMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.collections.CollectionUtils; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleUserRelationDao.java similarity index 86% rename from tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java rename to tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleUserRelationDao.java index 91674d48..d24fe166 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleUserRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleUserRelationDao.java @@ -1,17 +1,13 @@ -package cn.axzo.tyr.server.repository.service; +package cn.axzo.tyr.server.repository.dao; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.model.BaseWorkspaceModel; -import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; import cn.axzo.tyr.server.repository.mapper.SaasRoleUserRelationMapper; import cn.hutool.core.collection.CollectionUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.baomidou.mybatisplus.extension.toolkit.ChainWrappers; import org.springframework.stereotype.Repository; import java.util.List; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/impl/SaasFeatureDaoImpl.java similarity index 87% rename from tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java rename to tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/impl/SaasFeatureDaoImpl.java index cb863a87..48791cd3 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/impl/SaasFeatureDaoImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/impl/SaasFeatureDaoImpl.java @@ -1,12 +1,10 @@ -package cn.axzo.tyr.server.repository.service.impl; +package cn.axzo.tyr.server.repository.dao.impl; import cn.axzo.tyr.server.repository.entity.SaasFeature; import cn.axzo.tyr.server.repository.mapper.SaasFeatureMapper; -import cn.axzo.tyr.server.repository.service.SaasFeatureDao; -import com.baomidou.mybatisplus.core.conditions.Wrapper; +import cn.axzo.tyr.server.repository.dao.SaasFeatureDao; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java index b3b5c262..75208466 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRole.java @@ -39,39 +39,14 @@ public class SaasRole extends BaseEntity { private Long workspaceId; + /** + * 废弃 + */ + @Deprecated private Integer workspaceType; private Long ownerOuId; - /** - * 废弃 20230911 - */ - private Integer fitOuTypeBit; - - /** - * 废弃 20230911 - */ - private Integer fitOuNodeTypeBit; - - /** - * 废弃 20230911 - */ - private Long positionTemplateId; - - /** - * 废弃 20230911 - */ - private Long projectTeamManageRoleResourceId; - - /** - * 废弃 20230911 - */ - private Long fromPreRoleId; - - /** - * 废弃 20230911 - */ - private String jobCode; /** * 创建者 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index cf0f19d6..0a9f2963 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -13,7 +13,7 @@ import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.vo.*; import cn.axzo.tyr.server.repository.entity.*; -import cn.axzo.tyr.server.repository.service.*; +import cn.axzo.tyr.server.repository.dao.*; import cn.axzo.tyr.server.service.PermissionGroupService; import cn.axzo.tyr.server.service.PermissionPointService; import cn.axzo.tyr.server.service.SaasPermissionGroupScopeService; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index e9cab098..7dde68d3 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -19,8 +19,8 @@ import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.client.model.permission.PermissionPointVO; import cn.axzo.tyr.server.repository.SaasBasicDictDao; import cn.axzo.tyr.server.repository.entity.SaasFeature; -import cn.axzo.tyr.server.repository.service.SaasFeatureDao; -import cn.axzo.tyr.server.repository.service.SaasPgroupPermissionRelationDao; +import cn.axzo.tyr.server.repository.dao.SaasFeatureDao; +import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao; import cn.axzo.tyr.server.service.PermissionPointService; import cn.axzo.tyr.server.service.SaasBasicDictService; import cn.hutool.core.collection.CollectionUtil; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java index 5dbd6134..2dab53a6 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductFeatureRelationServiceImpl.java @@ -6,7 +6,7 @@ import cn.axzo.tyr.client.model.product.ProductFeatureRelationSearchReq; import cn.axzo.tyr.client.model.product.ProductFeatureRelationUpdateReq; import cn.axzo.tyr.client.model.product.ProductFeatureRelationVO; import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation; -import cn.axzo.tyr.server.repository.service.SaasProductModuleFeatureRelationDao; +import cn.axzo.tyr.server.repository.dao.SaasProductModuleFeatureRelationDao; import cn.axzo.tyr.server.service.ProductFeatureRelationService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java index 4d0b0caa..ead2f150 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java @@ -11,7 +11,7 @@ import cn.axzo.tyr.client.model.product.ProductSearchPageReq; import cn.axzo.tyr.client.model.product.ProductUpdateReq; import cn.axzo.tyr.client.model.product.ProductVO; import cn.axzo.tyr.server.repository.entity.ProductModule; -import cn.axzo.tyr.server.repository.service.ProductModuleDao; +import cn.axzo.tyr.server.repository.dao.ProductModuleDao; import cn.axzo.tyr.server.service.ProductService; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.RequiredArgsConstructor; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 89e3dd60..417e88ec 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -14,7 +14,7 @@ import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; import cn.axzo.tyr.server.repository.entity.*; -import cn.axzo.tyr.server.repository.service.*; +import cn.axzo.tyr.server.repository.dao.*; import cn.axzo.tyr.server.service.*; import cn.hutool.core.bean.BeanUtil; import lombok.RequiredArgsConstructor; @@ -225,7 +225,7 @@ public class RoleServiceImpl implements RoleService { saasRole.setDescription(saasRole.getDescription()); saasRole.setRoleType(saveOrUpdateRole.getRoleType()); saasRole.setWorkspaceId(saveOrUpdateRole.getWorkspaceId()); - saasRole.setWorkspaceType(saveOrUpdateRole.getWorkspaceType()); +// saasRole.setWorkspaceType(saveOrUpdateRole.getWorkspaceType()); saasRole.setOwnerOuId(saveOrUpdateRole.getOwnerOuId()); saasRole.setUpdateBy(saveOrUpdateRole.getOperatorId()); saasRole.setUpdateAt(now); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java index b2a927d5..8d2d4f08 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java @@ -7,8 +7,8 @@ import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; import cn.axzo.tyr.client.common.enums.RoleTypeEnum; import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; -import cn.axzo.tyr.server.repository.service.SaasRoleDao; -import cn.axzo.tyr.server.repository.service.SaasRoleUserRelationDao; +import cn.axzo.tyr.server.repository.dao.SaasRoleDao; +import cn.axzo.tyr.server.repository.dao.SaasRoleUserRelationDao; import cn.axzo.tyr.server.service.SaasRoleUserService; import cn.hutool.core.collection.CollectionUtil; import lombok.RequiredArgsConstructor; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPermissionGroupScopeServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPermissionGroupScopeServiceImpl.java index e1d5f5b6..25681169 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPermissionGroupScopeServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPermissionGroupScopeServiceImpl.java @@ -2,7 +2,7 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.tyr.server.repository.entity.SaasPermissionGroupScope; -import cn.axzo.tyr.server.repository.service.SaasPermissionGroupScopeDao; +import cn.axzo.tyr.server.repository.dao.SaasPermissionGroupScopeDao; import cn.axzo.tyr.server.service.SaasPermissionGroupScopeService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java index 9d8ed1a3..b86d137b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java @@ -2,7 +2,7 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; -import cn.axzo.tyr.server.repository.service.SaasPgroupPermissionRelationDao; +import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao; import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java index a68d69fb..f804560f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java @@ -4,8 +4,8 @@ import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.tyr.client.model.enums.PermissionGroupType; import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup; import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; -import cn.axzo.tyr.server.repository.service.SaasPermissionGroupDao; -import cn.axzo.tyr.server.repository.service.SaasPgroupRoleRelationDao; +import cn.axzo.tyr.server.repository.dao.SaasPermissionGroupDao; +import cn.axzo.tyr.server.repository.dao.SaasPgroupRoleRelationDao; import cn.axzo.tyr.server.service.SaasPgroupRoleRelationService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupRelationServiceImpl.java index 08dccf0e..a8094b64 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupRelationServiceImpl.java @@ -2,7 +2,7 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation; -import cn.axzo.tyr.server.repository.service.SaasRoleGroupRelationDao; +import cn.axzo.tyr.server.repository.dao.SaasRoleGroupRelationDao; import cn.axzo.tyr.server.service.SaasRoleGroupRelationService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java index 50b64f95..cc9efe1b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java @@ -7,7 +7,7 @@ import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation; -import cn.axzo.tyr.server.repository.service.*; +import cn.axzo.tyr.server.repository.dao.*; import cn.axzo.tyr.server.service.SaasRoleGroupService; import cn.hutool.core.bean.BeanUtil; import lombok.RequiredArgsConstructor; diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java index 93ccc452..806f084e 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java @@ -10,7 +10,7 @@ import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.client.model.permission.PermissionPointVO; import cn.axzo.tyr.server.controller.permission.PermissionPointController; import cn.axzo.tyr.server.repository.entity.SaasFeature; -import cn.axzo.tyr.server.repository.service.SaasFeatureDao; +import cn.axzo.tyr.server.repository.dao.SaasFeatureDao; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; import org.junit.jupiter.api.Test; From 017588b23070059d769193b260c056d17c8f2e35 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Thu, 14 Sep 2023 14:26:35 +0800 Subject: [PATCH 126/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=20=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/service/SaasBasicDictService.java | 2 ++ .../impl/PermissionPointServiceImpl.java | 18 ++++++++++-------- .../service/impl/SaasBasicDictServiceImpl.java | 5 +++++ 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java index a40071dc..5601373b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasBasicDictService.java @@ -27,4 +27,6 @@ public interface SaasBasicDictService { Boolean update(BasicDictUpdateReq req); Boolean updateStauts(BasicDictUpdateStatusReq req); + + BasicDictNodeResp getWorkspaceType(String workspaceType); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index e9cab098..f6de2c3d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -17,7 +17,6 @@ import cn.axzo.tyr.client.model.permission.PermissionPointMoveRequest; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.client.model.permission.PermissionPointVO; -import cn.axzo.tyr.server.repository.SaasBasicDictDao; import cn.axzo.tyr.server.repository.entity.SaasFeature; import cn.axzo.tyr.server.repository.service.SaasFeatureDao; import cn.axzo.tyr.server.repository.service.SaasPgroupPermissionRelationDao; @@ -33,7 +32,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; import java.util.stream.Collectors; @@ -52,7 +50,6 @@ import static cn.axzo.tyr.server.common.constants.PermissionConstant.*; public class PermissionPointServiceImpl implements PermissionPointService { private final SaasFeatureDao saasFeatureDao; - private final SaasBasicDictDao saasBasicDictDao; private final SaasBasicDictService saasBasicDictService; private final SaasPgroupPermissionRelationDao saasPgroupPermissionRelationDao; @@ -78,10 +75,15 @@ public class PermissionPointServiceImpl implements PermissionPointService { return nodesResult; } + return buildTopNodes(nodesResult); + } + + private List buildTopNodes(List nodesResult) { + //构建workspace-terminal工作台层级 + //按terminal分组 Map> mappingNode = nodesResult.stream() .collect(Collectors.groupingBy(PermissionPointTreeNode::getTerminal)); - //构建workspace-terminal工作台层级 List dictList = saasBasicDictService.getBasicDictNodeTree(BasicDictQueryReq.builder() .type(DictTypeFiledEnum.TERMINAL).build()); //遍历所有workspace和terminal-构建顶层两级 @@ -90,7 +92,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { List terminals = workspace.getChildren(); PermissionPointTreeNode workspaceNode = null; for (BasicDictTreeResp terminal : terminals) { - //有对应权限点 则建立上级 + //有下级权限点 则建立上级 List childrenNodes = mappingNode.get(terminal.getCode()); if (CollectionUtil.isNotEmpty(childrenNodes)) { PermissionPointTreeNode terminalTree = new PermissionPointTreeNode(); @@ -140,7 +142,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { for (String workSpaceType : request.getWorkspaceType()) { dictReq.setWorkspaceType(DictWorkSpaceTypeEnum.getByValue(workSpaceType)); dictReq.setType(DictTypeFiledEnum.TERMINAL); - List dictList = saasBasicDictDao.getBasicDictNodeList(dictReq); + List dictList = saasBasicDictService.getBasicDictNodeList(dictReq); terminals.addAll(dictList.stream().map(BasicDictNodeResp::getCode).collect(Collectors.toList())); } request.setTerminalList(terminals); @@ -216,8 +218,8 @@ public class PermissionPointServiceImpl implements PermissionPointService { BasicDictNodeReq terminalReq = new BasicDictNodeReq(); terminalReq.setCode(feature.getTerminal()); terminalReq.setType(DictTypeFiledEnum.TERMINAL); - BasicDictNodeResp terminal = saasBasicDictDao.getBasicDictNode(terminalReq); - BasicDictNodeResp workspace = saasBasicDictDao.getWorkspaceType(terminal.getWorkspaceType()); + BasicDictNodeResp terminal = saasBasicDictService.getBasicDictNode(terminalReq); + BasicDictNodeResp workspace = saasBasicDictService.getWorkspaceType(terminal.getWorkspaceType()); List pathName = new ArrayList<>(); pathName.add(workspace.getName()); pathName.add(terminal.getName()); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java index 27e2accb..d99c244b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasBasicDictServiceImpl.java @@ -170,6 +170,11 @@ public class SaasBasicDictServiceImpl implements SaasBasicDictService { return saasBasicDictDao.updateStatus(req); } + @Override + public BasicDictNodeResp getWorkspaceType(String workspaceType) { + return saasBasicDictDao.getWorkspaceType(workspaceType); + } + @Override public BasicDictNodeResp getById(Long id) { return BeanMapper.copyBean(saasBasicDictDao.getById(id), BasicDictNodeResp.class); From 4710057f4416798c4cabe422bea0b85569a9e810 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Thu, 14 Sep 2023 14:34:30 +0800 Subject: [PATCH 127/186] =?UTF-8?q?fix(=E6=9D=83=E9=99=90=E7=82=B9):=20?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/server/service/impl/PermissionPointServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 76e9f9a1..9b1bb173 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -235,7 +235,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { List ids = StrUtil.split(vo.getPath(), FEATURE_PATH_DELIMITER, true, true) .stream() .map(Long::valueOf) - .filter(id -> id < 1) + .filter(id -> id > 0) .collect(Collectors.toList()); Map parentsMapping = this.saasFeatureDao.listByIds(ids) .stream() From 9af061131f29054632df5c4db243cc2a52566b31 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Thu, 14 Sep 2023 16:04:42 +0800 Subject: [PATCH 128/186] =?UTF-8?q?fix(=E6=9D=83=E9=99=90=E7=82=B9):=20?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E7=A9=BAsort?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/PermissionPointServiceImpl.java | 2 +- .../permission/PermissionPointTest.java | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 9b1bb173..ab018c3f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -391,7 +391,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { //找到需要更新排序的节点 for (int i = 0; i < sortedList.size(); i++) { SaasFeature saasFeature = sortedList.get(i); - if (!saasFeature.getSort().equals(i + 1)) { + if (Objects.equals(saasFeature.getSort(), i + 1)) { sortMap.put(saasFeature.getId(), i + 1); } } diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java index 806f084e..813063bc 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java @@ -72,15 +72,16 @@ public class PermissionPointTest { PermissionPointDTO permissionPoint = new PermissionPointDTO(); permissionPoint.setFeatureName("测试合同权限点"); permissionPoint.setFeatureCode("CMS_WEB_PROJ_0158"); - permissionPoint.setParentId(360L); - permissionPoint.setPath("/0/354/360/"); - permissionPoint.setSort(3); - permissionPoint.setTerminal("NT_CMS_WEB_PROJ"); - permissionPoint.setFeatureType(3); - permissionPoint.setAppName("tyr"); - permissionPoint.setFeatureUrl("/tyr/test/permission"); - permissionPoint.setNeedAuth(true); - permissionPoint.setNeedAuth(true); + //permissionPoint.setParentId(360L); + //permissionPoint.setPath("/0/354/360/"); + //permissionPoint.setSort(3); + //permissionPoint.setTerminal("NT_CMS_WEB_PROJ"); + permissionPoint.setTerminal("NT_CMS_WEB_ENT_ZB"); + permissionPoint.setFeatureType(1); + //permissionPoint.setAppName("tyr"); + //permissionPoint.setFeatureUrl("/tyr/test/permission"); + //permissionPoint.setNeedAuth(true); + //permissionPoint.setNeedAuth(true); System.out.println(JSON.toJSONString(permissionPoint)); controller.savePermissionPoint(permissionPoint); } From 675e1bd0655b862a2d9020c98baaca277ba20282 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Thu, 14 Sep 2023 16:19:53 +0800 Subject: [PATCH 129/186] code review add comment --- .../main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java | 3 ++- .../tyr/server/service/impl/SaasRoleGroupServiceImpl.java | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java index 8c827a5e..a2c2cf21 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java @@ -7,6 +7,7 @@ import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -27,7 +28,7 @@ public interface TyrSaasRoleApi { * 如果权限列表不为空则创建通用权限 */ @PostMapping("/api/saasRole/saveOrUpdate") - ApiResult saveOrUpdate(@RequestBody SaveOrUpdateRoleVO saveOrUpdateRole); + ApiResult saveOrUpdate(@RequestBody @Validated SaveOrUpdateRoleVO saveOrUpdateRole); /** * 根据id查询详情 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java index cc9efe1b..bab8e0dc 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java @@ -99,8 +99,10 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { if (CollectionUtils.isEmpty(ids)) { return; } - int relationCount = saasRoleGroupRelationDao.lambdaQuery().in(SaasRoleGroupRelation::getSaasRoleGroupId, ids) - .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).count(); + int relationCount = saasRoleGroupRelationDao.lambdaQuery() + .in(SaasRoleGroupRelation::getSaasRoleGroupId, ids) + .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .count(); if (relationCount > 0) { throw new BizException(BaseCode.BAD_REQUEST, "分组关联角色,不能删除"); } From 10e237551c2a9309b444a54222825a3e83bca060 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Thu, 14 Sep 2023 16:26:51 +0800 Subject: [PATCH 130/186] =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java index a2fc1ec7..9a43d998 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java @@ -24,7 +24,7 @@ public class SaasRoleVO { private String name; /** - * 角色类型:common 普通角色 admin管理员 + * 角色类型: init 标准 common 自定义角色 admin管理员 super_admin 超管 */ private String roleType; From e6ceb71324a797f7f688c27d69f0766a5de8c5fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E6=B5=B7=E6=B4=8B?= Date: Thu, 14 Sep 2023 16:46:25 +0800 Subject: [PATCH 131/186] feat(server): add /api/saas-role-user/list api --- .../src/test/resources/reponse-check.js | 7 ++ .../src/test/resources/rest-client.env.json | 8 +++ .../src/test/resources/role-user.http | 13 ++++ .../tyr/client/feign/TyrSaasRoleUserApi.java | 11 ++- .../roleuser/dto/SaasRoleUserRelationDTO.java | 71 +++++++++++++++++++ .../model/roleuser/req/RoleUserParam.java | 53 ++++++++++++++ .../model/roleuser/req/RoleUserReq.java | 1 + .../roleuser/RoleUserController.java | 11 +++ .../service/SaasRoleUserRelationService.java | 14 ++++ .../server/service/SaasRoleUserService.java | 5 +- .../impl/SaasRoleUserRelationServiceImpl.java | 54 ++++++++++++++ 11 files changed, 245 insertions(+), 3 deletions(-) create mode 100644 integration-test/src/test/resources/reponse-check.js create mode 100644 integration-test/src/test/resources/rest-client.env.json create mode 100644 integration-test/src/test/resources/role-user.http create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/dto/SaasRoleUserRelationDTO.java create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/RoleUserParam.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java diff --git a/integration-test/src/test/resources/reponse-check.js b/integration-test/src/test/resources/reponse-check.js new file mode 100644 index 00000000..e2d7b749 --- /dev/null +++ b/integration-test/src/test/resources/reponse-check.js @@ -0,0 +1,7 @@ +client.test("request executed successful", function () { + client.assert(response.status == 200, "Response status is not 200") +}); + +client.test("response body status successful", function () { + client.assert(response.body.code == 0, "Response body code is not 0") +}); diff --git a/integration-test/src/test/resources/rest-client.env.json b/integration-test/src/test/resources/rest-client.env.json new file mode 100644 index 00000000..252aa85a --- /dev/null +++ b/integration-test/src/test/resources/rest-client.env.json @@ -0,0 +1,8 @@ +{ + "local": { + "host": "http://localhost:8080" + }, + "dev": { + "host": "https://dev-app.axzo.cn/msg-center/webApi/message/" + } +} \ No newline at end of file diff --git a/integration-test/src/test/resources/role-user.http b/integration-test/src/test/resources/role-user.http new file mode 100644 index 00000000..79e87795 --- /dev/null +++ b/integration-test/src/test/resources/role-user.http @@ -0,0 +1,13 @@ +### +POST {{host}}/api/saas-role-user/list +Accept: application/json +Content-Type: application/json + +{ + +} + +> reponse-check.js + + + diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleUserApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleUserApi.java index 1d54fe74..f90f4207 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleUserApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleUserApi.java @@ -1,12 +1,15 @@ package cn.axzo.tyr.client.feign; import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserRelationDTO; +import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import javax.validation.Valid; +import java.util.List; /** * 角色 @@ -20,6 +23,12 @@ public interface TyrSaasRoleUserApi { @PostMapping("/api/saas-role-user/save-or-update") ApiResult saveOrUpdate(@RequestBody @Valid RoleUserReq req); - + /** + * 用户角色列表 限制1000条 + * @param param + * @return + */ + @PostMapping("/api/saas-role-user/list") + ApiResult> roleUserList(@RequestBody @Valid RoleUserParam param); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/dto/SaasRoleUserRelationDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/dto/SaasRoleUserRelationDTO.java new file mode 100644 index 00000000..e5174227 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/dto/SaasRoleUserRelationDTO.java @@ -0,0 +1,71 @@ +package cn.axzo.tyr.client.model.roleuser.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author haiyangjin + * @date 2023/9/14 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SaasRoleUserRelationDTO { + /** + * 主键ID + */ + private Long id; + + /** + * 身份Id + */ + private Long identityId; + + /** + * 身份类型 1:工人 2:从业人员 3:班组长 4:运营人员 5:政务人员 + */ + private Integer identityType; + + /** + * 角色Id + */ + private Long roleId; + + /** + * 自然人Id + */ + private Long naturalPersonId; + + /** + * 创建者 + */ + private Long createBy; + + /** + * 更新者 + */ + private Long updateBy; + + /** + * 所属单位Id 用户在当前工作台的所属单位 + */ + private Long ouId; + + /** + * 工作台Id + */ + private Long workspaceId; + + /** + * 资源类型 + */ + private Integer resourceType; + + /** + * 资源Id + */ + private Long resourceId; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/RoleUserParam.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/RoleUserParam.java new file mode 100644 index 00000000..00626fe6 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/RoleUserParam.java @@ -0,0 +1,53 @@ +package cn.axzo.tyr.client.model.roleuser.req; + +import cn.axzo.tyr.client.model.enums.IdentityType; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.Set; + +/** + * @author haiyangjin + * @date 2023/9/14 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RoleUserParam { + /** + * 工作台id + */ + private Long workspaceId; + + /** + * 单位id + */ + private Long ouId; + + + /** + * personId + */ + private Long personId; + + /** + * 身份id + * 传身份id的时候请带上身份类型。 身份id会重复 + */ + private Long identityId; + + /** + * 身份类型 + */ + private IdentityType identityType; + + /** + * role ids + */ + private Set roleIds; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/RoleUserReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/RoleUserReq.java index 0772b26c..8fae1cde 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/RoleUserReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/RoleUserReq.java @@ -47,6 +47,7 @@ public class RoleUserReq { */ @NotNull private IdentityType identityType; + /** * 完整的update,所有RoleId都被更新 */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java index b29c444e..9bd1defb 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java @@ -2,13 +2,18 @@ package cn.axzo.tyr.server.controller.roleuser; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.TyrSaasRoleUserApi; +import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserRelationDTO; +import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; +import cn.axzo.tyr.server.service.SaasRoleUserRelationService; import cn.axzo.tyr.server.service.SaasRoleUserService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; +import java.util.List; /** * @author tanjie@axzo.cn @@ -19,10 +24,16 @@ import javax.validation.Valid; @RequiredArgsConstructor public class RoleUserController implements TyrSaasRoleUserApi { private final SaasRoleUserService saasRoleUserService; + private final SaasRoleUserRelationService saasRoleUserRelationService; @Override public ApiResult saveOrUpdate(@Valid RoleUserReq req) { saasRoleUserService.saveOrUpdate(req); return ApiResult.ok(); } + + @Override + public ApiResult> roleUserList(@RequestBody @Valid RoleUserParam param) { + return ApiResult.ok(saasRoleUserRelationService.list(param)); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java new file mode 100644 index 00000000..c63e9d3d --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java @@ -0,0 +1,14 @@ +package cn.axzo.tyr.server.service; + +import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserRelationDTO; +import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; + +import java.util.List; + +/** + * @author haiyangjin + * @date 2023/9/14 + */ +public interface SaasRoleUserRelationService { + List list(RoleUserParam param); +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java index 97069bdb..aebfcdb9 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java @@ -1,8 +1,11 @@ package cn.axzo.tyr.server.service; +import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; +import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; import javax.validation.Valid; +import java.util.List; /** * @author tanjie@axzo.cn @@ -11,6 +14,4 @@ import javax.validation.Valid; public interface SaasRoleUserService { void saveOrUpdate( RoleUserReq req); - - } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java new file mode 100644 index 00000000..1fc61ac0 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java @@ -0,0 +1,54 @@ +package cn.axzo.tyr.server.service.impl; + +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserRelationDTO; +import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; +import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; +import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; +import cn.axzo.tyr.server.repository.service.SaasRoleUserRelationDao; +import cn.axzo.tyr.server.service.SaasRoleUserRelationService; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.checkerframework.checker.units.qual.C; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author haiyangjin + * @date 2023/9/14 + */ +@Slf4j +@Service +public class SaasRoleUserRelationServiceImpl implements SaasRoleUserRelationService { + + @Resource + private SaasRoleUserRelationDao saasRoleUserRelationDao; + @Override + public List list(RoleUserParam param) { + List saasRoleUserRelations = saasRoleUserRelationDao.lambdaQuery().eq(Objects.nonNull(param.getIdentityId()), SaasRoleUserRelation::getIdentityId, param.getIdentityId()) + .eq(Objects.nonNull(param.getIdentityType()), SaasRoleUserRelation::getIdentityType, param.getIdentityType()) + .eq(Objects.nonNull(param.getWorkspaceId()), SaasRoleUserRelation::getWorkspaceId, param.getWorkspaceId()) + .eq(Objects.nonNull(param.getOuId()), SaasRoleUserRelation::getOuId, param.getOuId()) + .in(CollectionUtil.isNotEmpty(param.getRoleIds()), SaasRoleUserRelation::getRoleId, param.getRoleIds()) + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .last("LIMIT 1000") + .list(); + if (CollectionUtil.isEmpty(saasRoleUserRelations)) { + return Collections.emptyList(); + } + + return saasRoleUserRelations.stream().map(e -> BeanUtil.copyProperties(e, SaasRoleUserRelationDTO.class)).collect(Collectors.toList()); + } + + + + +} From b219f788aa375bb14a3a600577cfb8844a9073f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E6=B5=B7=E6=B4=8B?= Date: Thu, 14 Sep 2023 16:52:36 +0800 Subject: [PATCH 132/186] modify OrganizationalJobConfig update api --- .../service/impl/SaasRoleUserRelationServiceImpl.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java index 1fc61ac0..7a495298 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java @@ -4,15 +4,12 @@ import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserRelationDTO; import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; -import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; +import cn.axzo.tyr.server.repository.dao.SaasRoleUserRelationDao; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; -import cn.axzo.tyr.server.repository.service.SaasRoleUserRelationDao; import cn.axzo.tyr.server.service.SaasRoleUserRelationService; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; -import org.checkerframework.checker.units.qual.C; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -48,7 +45,4 @@ public class SaasRoleUserRelationServiceImpl implements SaasRoleUserRelationServ return saasRoleUserRelations.stream().map(e -> BeanUtil.copyProperties(e, SaasRoleUserRelationDTO.class)).collect(Collectors.toList()); } - - - } From e0501daf6887567e9be9fe60ffc95fdc8ff70993 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Thu, 14 Sep 2023 17:57:44 +0800 Subject: [PATCH 133/186] code review add comment refect --- .../client/model/vo/SaveOrUpdateRoleVO.java | 2 +- .../service/impl/PermissionGroupImpl.java | 5 +- .../server/service/impl/RoleServiceImpl.java | 7 ++- ...asPgroupPermissionRelationServiceImpl.java | 38 +++++++-------- .../SaasPgroupRoleRelationServiceImpl.java | 48 ++++++++----------- .../SaasRoleGroupRelationServiceImpl.java | 47 +++++++++--------- 6 files changed, 71 insertions(+), 76 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaveOrUpdateRoleVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaveOrUpdateRoleVO.java index 4d42066a..cc317641 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaveOrUpdateRoleVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaveOrUpdateRoleVO.java @@ -79,6 +79,6 @@ public class SaveOrUpdateRoleVO { * 项目部类型字典code */ @NotNull - private Long workspaceTypeCode; + private String workspaceTypeCode; } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index 0a9f2963..4fad21a0 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -357,10 +357,11 @@ public class PermissionGroupImpl implements PermissionGroupService { private void validSaasPermissionGroup(SaveOrUpdatePermissionGroupVO permissionGroup) { SaasRole saasRole = saasRoleDao.getById(permissionGroup.getRoleId()); if (Objects.isNull(saasRole)) { - throw new BizException(BaseCode.BAD_REQUEST, "角色不存在"); + throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在"); } if (Objects.nonNull(permissionGroup.getId())) { - int relationCount = roleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, permissionGroup.getRoleId()) + int relationCount = roleRelationDao.lambdaQuery() + .eq(SaasPgroupRoleRelation::getRoleId, permissionGroup.getRoleId()) .eq(SaasPgroupRoleRelation::getGroupId, permissionGroup.getId()) .eq(SaasPgroupRoleRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).count(); if (relationCount == 0) { diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 417e88ec..174c3363 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -225,7 +225,6 @@ public class RoleServiceImpl implements RoleService { saasRole.setDescription(saasRole.getDescription()); saasRole.setRoleType(saveOrUpdateRole.getRoleType()); saasRole.setWorkspaceId(saveOrUpdateRole.getWorkspaceId()); -// saasRole.setWorkspaceType(saveOrUpdateRole.getWorkspaceType()); saasRole.setOwnerOuId(saveOrUpdateRole.getOwnerOuId()); saasRole.setUpdateBy(saveOrUpdateRole.getOperatorId()); saasRole.setUpdateAt(now); @@ -241,10 +240,10 @@ public class RoleServiceImpl implements RoleService { }).collect(Collectors.toList())); saasPermissionGroupDao.saveOrUpdate(saasPermissionGroup); SaasPgroupRoleRelation pgrr = new SaasPgroupRoleRelation(); - pgrr.setCreateBy(saveOrUpdateRole.getOperatorId()); pgrr.setRoleId(saasRole.getId()); - pgrr.setUpdateBy(saveOrUpdateRole.getOperatorId()); pgrr.setGroupId(saasPermissionGroup.getId()); + pgrr.setCreateBy(saveOrUpdateRole.getOperatorId()); + pgrr.setUpdateBy(saveOrUpdateRole.getOperatorId()); pgrr.setCreateAt(now); pgrr.setUpdateAt(now); // 新增或保存角色通用权限映射 @@ -306,7 +305,7 @@ public class RoleServiceImpl implements RoleService { Map roleGroupMap = groups.stream().collect(Collectors.toMap(SaasRoleGroup::getId, Function.identity())); List invalidRoleGroups = groupTrees.stream().filter(rg -> { SaasRoleGroup target = roleGroupMap.get(rg.getId()); - return Objects.isNull(target) || !Objects.equals(target.getWorkspaceTypeCode(), rg.getWorkspaceTypeCode().toString()); + return Objects.isNull(target) || !Objects.equals(target.getWorkspaceTypeCode(), rg.getWorkspaceTypeCode()); }).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(invalidRoleGroups)) { throw new BizException(BaseCode.BAD_REQUEST, "角色分组信息错误"); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java index b86d137b..c94d4d04 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java @@ -18,24 +18,24 @@ import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class SaasPgroupPermissionRelationServiceImpl implements SaasPgroupPermissionRelationService { - private final SaasPgroupPermissionRelationDao saasPgroupPermissionRelationDao; + private final SaasPgroupPermissionRelationDao saasPgroupPermissionRelationDao; - @Override - @Transactional(rollbackFor = Exception.class) - public void saveOrUpdate(List relations) { - if (CollectionUtils.isNotEmpty(relations)) { - return; - } - List exists = saasPgroupPermissionRelationDao.lambdaQuery() - .in(SaasPgroupPermissionRelation::getGroupId, relations.stream().map(SaasPgroupPermissionRelation::getGroupId).distinct().sorted().collect(Collectors.toList())) - .eq(SaasPgroupPermissionRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); - Collection insertList = CollectionUtils.subtract(relations, exists); - Collection deleteList = CollectionUtils.subtract(exists, relations); - if (CollectionUtils.isNotEmpty(insertList)) { - saasPgroupPermissionRelationDao.saveBatch(insertList); - } - if (CollectionUtils.isNotEmpty(deleteList)) { - saasPgroupPermissionRelationDao.removeByIds(deleteList.stream().map(SaasPgroupPermissionRelation::getId).sorted().collect(Collectors.toList())); - } - } + @Override + @Transactional(rollbackFor = Exception.class) + public void saveOrUpdate(List relations) { + if (CollectionUtils.isNotEmpty(relations)) { + return; + } + List exists = saasPgroupPermissionRelationDao.lambdaQuery() + .in(SaasPgroupPermissionRelation::getGroupId, relations.stream().map(SaasPgroupPermissionRelation::getGroupId).distinct().sorted().collect(Collectors.toList())) + .eq(SaasPgroupPermissionRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + Collection insertList = CollectionUtils.subtract(relations, exists); + Collection deleteList = CollectionUtils.subtract(exists, relations); + if (CollectionUtils.isNotEmpty(insertList)) { + saasPgroupPermissionRelationDao.saveBatch(insertList); + } + if (CollectionUtils.isNotEmpty(deleteList)) { + saasPgroupPermissionRelationDao.removeByIds(deleteList.stream().map(SaasPgroupPermissionRelation::getId).collect(Collectors.toList())); + } + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java index f804560f..82f558b6 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java @@ -1,12 +1,15 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.framework.domain.web.BizException; +import cn.axzo.framework.domain.web.code.BaseCode; import cn.axzo.tyr.client.model.enums.PermissionGroupType; import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup; import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; import cn.axzo.tyr.server.repository.dao.SaasPermissionGroupDao; import cn.axzo.tyr.server.repository.dao.SaasPgroupRoleRelationDao; import cn.axzo.tyr.server.service.SaasPgroupRoleRelationService; +import cn.hutool.json.JSONUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; @@ -22,32 +25,23 @@ import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class SaasPgroupRoleRelationServiceImpl implements SaasPgroupRoleRelationService { - private final SaasPgroupRoleRelationDao saasPgroupRoleRelationDao; - private final SaasPermissionGroupDao saasPermissionGroupDao; + private final SaasPgroupRoleRelationDao saasPgroupRoleRelationDao; - @Override - @Transactional(rollbackFor = Exception.class) - public void saveOrUpdateCommon(SaasPgroupRoleRelation commonRelation) { - List relations = saasPgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, commonRelation.getRoleId()) - .eq(SaasPgroupRoleRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); - if (CollectionUtils.isEmpty(relations)) { - saasPgroupRoleRelationDao.save(commonRelation); - return; - } - List prr = relations.stream().filter(e -> Objects.equals(commonRelation.getGroupId(), e.getGroupId())).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(prr)) { - // 通用权限集已经 存在 - return; - } - List permissionGroupIds = relations.stream().map(SaasPgroupRoleRelation::getGroupId).sorted().collect(Collectors.toList()); - List commonGroups = saasPermissionGroupDao.lambdaQuery().in(SaasPermissionGroup::getId, permissionGroupIds) - .eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value) - .eq(SaasPermissionGroup::getIsCommon, PermissionGroupType.COMMON.getCode()).list(); - if (CollectionUtils.isNotEmpty(commonGroups)) { - Set commonGroupIds = commonGroups.stream().map(SaasPermissionGroup::getId).collect(Collectors.toSet()); - // 移除以前的通用权限集 - saasPgroupRoleRelationDao.removeByIds(relations.stream().filter(e -> commonGroupIds.contains(e.getGroupId())).collect(Collectors.toList())); - } - saasPgroupRoleRelationDao.save(commonRelation); - } + @Override + @Transactional(rollbackFor = Exception.class) + public void saveOrUpdateCommon(SaasPgroupRoleRelation commonRelation) { + List relations = saasPgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, commonRelation.getRoleId()) + .eq(SaasPgroupRoleRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + if (CollectionUtils.isEmpty(relations)) { + saasPgroupRoleRelationDao.save(commonRelation); + return; + } + List prr = relations.stream().filter(e -> Objects.equals(commonRelation.getGroupId(), e.getGroupId())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(prr)) { + // 通用权限集已经 存在 + return; + }else { + throw new BizException(BaseCode.BAD_REQUEST,"传入的权限集id与已存在的通用权限集id不一致 req{}", JSONUtil.toJsonStr(commonRelation)); + } + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupRelationServiceImpl.java index a8094b64..f067191e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupRelationServiceImpl.java @@ -18,27 +18,28 @@ import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class SaasRoleGroupRelationServiceImpl implements SaasRoleGroupRelationService { - private final SaasRoleGroupRelationDao saasRoleGroupRelationDao; - @Override - @Transactional(rollbackFor = Exception.class) - public void saveOrUpdate(List relations) { - if (CollectionUtils.isEmpty(relations)) { - return; - } - List exists = saasRoleGroupRelationDao.lambdaQuery() - .in(SaasRoleGroupRelation::getRoleId, relations.stream().map(SaasRoleGroupRelation::getRoleId).distinct().sorted().collect(Collectors.toList())) - .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); - if (CollectionUtils.isEmpty(exists)) { - saasRoleGroupRelationDao.saveBatch(relations); - return; - } - Collection insertList = CollectionUtils.subtract(relations, exists); - Collection deleteList = CollectionUtils.subtract(exists, relations); - if (CollectionUtils.isNotEmpty(insertList)) { - saasRoleGroupRelationDao.saveBatch(insertList); - } - if (CollectionUtils.isNotEmpty(deleteList)) { - saasRoleGroupRelationDao.removeByIds(deleteList.stream().map(SaasRoleGroupRelation::getId).sorted().collect(Collectors.toList())); - } - } + private final SaasRoleGroupRelationDao saasRoleGroupRelationDao; + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveOrUpdate(List relations) { + if (CollectionUtils.isEmpty(relations)) { + return; + } + List exists = saasRoleGroupRelationDao.lambdaQuery() + .in(SaasRoleGroupRelation::getRoleId, relations.stream().map(SaasRoleGroupRelation::getRoleId).distinct().sorted().collect(Collectors.toList())) + .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + if (CollectionUtils.isEmpty(exists)) { + saasRoleGroupRelationDao.saveBatch(relations); + return; + } + Collection insertList = CollectionUtils.subtract(relations, exists); + Collection deleteList = CollectionUtils.subtract(exists, relations); + if (CollectionUtils.isNotEmpty(insertList)) { + saasRoleGroupRelationDao.saveBatch(insertList); + } + if (CollectionUtils.isNotEmpty(deleteList)) { + saasRoleGroupRelationDao.removeByIds(deleteList.stream().map(SaasRoleGroupRelation::getId).collect(Collectors.toList())); + } + } } From c0334565aa399b791f4e1d2a8bb4b28f2ce9ee9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Thu, 14 Sep 2023 18:13:45 +0800 Subject: [PATCH 134/186] code review add comment refect --- .../cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index 4fad21a0..a08df0b7 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -256,6 +256,8 @@ public class PermissionGroupImpl implements PermissionGroupService { saasPermissionGroup = new SaasPermissionGroup(); saasPermissionGroup.setCreateBy(permissionGroup.getOperatorId()); saasPermissionGroup.setCreatorName(Optional.ofNullable(permissionGroup.getOperatorName()).orElse("")); + saasPermissionGroup.setUpdateBy(permissionGroup.getOperatorId()); + saasPermissionGroup.setUpdatorName(Optional.ofNullable(permissionGroup.getOperatorName()).orElse("")); saasPermissionGroup.setIsCommon(PermissionGroupType.SPECIAL.getCode()); saasPermissionGroup.setCreateAt(now); } @@ -374,6 +376,7 @@ public class PermissionGroupImpl implements PermissionGroupService { if (CollectionUtils.isEmpty(selectedWorkspace) && CollectionUtils.isEmpty(selectedOu)) { throw new BizException(BaseCode.BAD_REQUEST, "例外不能为空"); } + // TODO 校验规则是产品给的吗? if (CollectionUtils.isNotEmpty(selectedWorkspace)) { Map> selectedWorkspaceMap = selectedWorkspace.stream() .collect(Collectors.groupingBy(SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO::getType)); From 599ced9fd218e95bffd7b8357bd44f10d2f48f18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Thu, 14 Sep 2023 18:21:16 +0800 Subject: [PATCH 135/186] code review add comment refect --- .../server/repository/dao/SaasRoleGroupRelationDao.java | 7 ------- .../axzo/tyr/server/service/impl/PermissionGroupImpl.java | 2 +- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleGroupRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleGroupRelationDao.java index e9381487..c9dd7f87 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleGroupRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleGroupRelationDao.java @@ -15,13 +15,6 @@ import java.util.List; @Repository public class SaasRoleGroupRelationDao extends ServiceImpl { - public void deleteByRoleGroupId(List roleGroupId) { - lambdaUpdate() - .in(SaasRoleGroupRelation::getSaasRoleGroupId, roleGroupId) - .set(BaseEntity::getIsDelete, TableIsDeleteEnum.DELETE.value) - .update(); - } - @Override public boolean removeByIds(Collection idList) { if (CollectionUtils.isEmpty(idList)) { diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index a08df0b7..78c22c4e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -346,7 +346,7 @@ public class PermissionGroupImpl implements PermissionGroupService { // 删除例外scope saasPermissionGroupScopeDao.removeByIds(scopes.stream().map(SaasPermissionGroupScope::getId).sorted().collect(Collectors.toList())); } - // 删除通用权限集 + // 删除权限集 permissionGroupDao.lambdaUpdate() .in(BaseEntity::getId,deleteGroupIds) .set(BaseEntity::getIsDelete, TableIsDeleteEnum.DELETE.value) From 000af3f45652755f40710f6a61d3ae6854ce6952 Mon Sep 17 00:00:00 2001 From: TanJ Date: Thu, 14 Sep 2023 18:25:15 +0800 Subject: [PATCH 136/186] =?UTF-8?q?feat:=20saasRoleVo=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加基于单位I与工作台ID获取匹配菜单的接口 --- .../axzo/tyr/client/model/vo/SaasRoleVO.java | 146 ++++++++++++++---- 1 file changed, 112 insertions(+), 34 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java index 9a43d998..fd657e65 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java @@ -1,13 +1,20 @@ package cn.axzo.tyr.client.model.vo; +import cn.axzo.trade.datasecurity.core.annotation.control.DisableCrypt; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; +import cn.hutool.core.collection.CollectionUtil; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.ArrayList; +import java.util.Collection; import java.util.Date; +import java.util.HashSet; import java.util.List; +import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; @Data @@ -16,47 +23,118 @@ import java.util.stream.Collectors; @Builder public class SaasRoleVO { - private Long id; + private Long id; - /** - * 角色名称 - */ - private String name; + /** + * 角色名称 + */ + private String name; - /** - * 角色类型: init 标准 common 自定义角色 admin管理员 super_admin 超管 - */ - private String roleType; + /** + * 角色类型: init 标准 common 自定义角色 admin管理员 super_admin 超管 + */ + private String roleType; - /** - * 创建者 - */ - private Long createBy; + /** + * 创建者 + */ + private Long createBy; - /** - * 更新者 - */ - private Long updateBy; + /** + * 更新者 + */ + private Long updateBy; - /** - * 权限组 - */ - private List permissionGroup; + /** + * 权限组 + */ + private List permissionGroup; - /** - * 是否删除 - */ - private Long isDelete; + /** + * 是否删除 + */ + private Long isDelete; - private Date createAt; + private Date createAt; - private Date updateAt; + private Date updateAt; - /** - * 获取角色对应所用的权限 - * @return - */ - public List getFeature(){ - return this.permissionGroup.stream().map(SaasPermissionGroupVO::getFeature).flatMap(List::stream).distinct().collect(Collectors.toList()); - } + /** + * 获取角色对应所用的菜单,不管例外 + * + * @return + */ + public List getFeature() { + return this.permissionGroup.stream().map(SaasPermissionGroupVO::getFeature).flatMap(List::stream).distinct().collect(Collectors.toList()); + } + + /** + * 获取角色基于单位ID和工作台ID所匹配的所以菜单(包括通用和例外) + * @param workspaceId + * @param ouId + * @return + */ + public List getMatchFeature (Long workspaceId, Long ouId) { + Set permissionPoint = new HashSet<>(); + //例外 + group: + for (SaasPermissionGroupVO permissionGroupVO : permissionGroup) { + // 通用权限 + if (CollectionUtil.isEmpty(permissionGroupVO.getScopes())) { + permissionPoint.addAll(permissionGroupVO.getFeature()); + } + List scopes = permissionGroupVO.getScopes(); + + scope: + for (SaasRolePermissionScopeVO scope : scopes) { + //正选 + if (Objects.equals(scope.getType(), 1)) { + + // 判断是否与当前工作台或者单位ID匹配 + if (scope.getScopeType().equals("workspace") + && match(true, permissionPoint, permissionGroupVO.getFeature(), scope.getScopeId(), workspaceId)) { + continue group; + } + + if (scope.getScopeType().equals("ou") + && match(true, permissionPoint, permissionGroupVO.getFeature(), scope.getScopeId(), ouId) + ) { + continue group; + } + + //反选 + } else if (Objects.equals(scope.getType(), 2)) { + + // 判断是否与当前工作台或者单位ID匹配 + if (scope.getScopeType().equals("workspace") + && match(false, permissionPoint, permissionGroupVO.getFeature(), scope.getScopeId(), workspaceId) + /* && !Objects.equals(scope.getScopeId(), workspaceId) + && permissionPoint.addAll(permissionGroupVO.getFeature())*/) { + continue group; + } + + if (scope.getScopeType().equals("ou") + && match(false, permissionPoint, permissionGroupVO.getFeature(), scope.getScopeId(), ouId) + /* && !Objects.equals(scope.getScopeId(), ouId) + && permissionPoint.addAll(permissionGroupVO.getFeature())*/) { + continue group; + } + } + + } + + } + return new ArrayList<>((Collection) permissionPoint); + } + + private boolean match(boolean isMatch, Set source, Collection target, Long scopeId, Long workspaceId) { + if (isMatch && scopeId.equals(workspaceId)) { + source.addAll(target); + return true; + } else if (!isMatch && !Objects.equals(scopeId, workspaceId)) { + source.addAll(target); + return true; + } + return false; + } } From 7aa37d7d07ac72a6d7a4fa872151193dc879d7c9 Mon Sep 17 00:00:00 2001 From: yangsong Date: Thu, 14 Sep 2023 20:49:28 +0800 Subject: [PATCH 137/186] bugfix --- .../tyr/client/feign/SaasRoleGroupApi.java | 2 +- .../role/SaasRoleGroupController.java | 5 ++--- .../entity/SaasPermissionGroupScope.java | 3 +-- .../entity/SaasPgroupPermissionRelation.java | 3 +-- .../entity/SaasRoleGroupRelation.java | 3 +-- .../server/service/SaasRoleGroupService.java | 2 +- .../service/impl/PermissionGroupImpl.java | 22 ++++++++++++++----- .../server/service/impl/RoleServiceImpl.java | 10 ++++++++- .../SaasPermissionGroupScopeServiceImpl.java | 2 +- ...asPgroupPermissionRelationServiceImpl.java | 2 +- .../impl/SaasRoleGroupServiceImpl.java | 3 ++- 11 files changed, 36 insertions(+), 21 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java index 0fbfa3dc..ee7ec061 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasRoleGroupApi.java @@ -22,7 +22,7 @@ public interface SaasRoleGroupApi { * @return */ @PostMapping("/api/saasRoleGroup/save") - ApiResult saveOrUpdate(@RequestBody SaasRoleGroupVO req); + ApiResult saveOrUpdate(@RequestBody SaasRoleGroupVO req); /** * 获取权限分组列表 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java index 466b5e31..4c07cba7 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java @@ -23,9 +23,8 @@ public class SaasRoleGroupController implements SaasRoleGroupApi { private final SaasRoleGroupService saasRoleGroupService; @Override - public ApiResult saveOrUpdate(SaasRoleGroupVO req) { - saasRoleGroupService.saveOrUpdate(req); - return ApiResult.ok(); + public ApiResult saveOrUpdate(SaasRoleGroupVO req) { + return ApiResult.ok(saasRoleGroupService.saveOrUpdate(req)); } @Override diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java index 0b3f1a5e..52669b3c 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasPermissionGroupScope.java @@ -62,9 +62,8 @@ public class SaasPermissionGroupScope extends BaseEntity imp public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - if (!super.equals(o)) return false; SaasRoleGroupRelation that = (SaasRoleGroupRelation) o; - return Objects.equals(roleId, that.roleId) && Objects.equals(saasRoleGroupId, that.saasRoleGroupId) && Objects.equals(isDelete, that.isDelete); + return Objects.equals(roleId, that.roleId) && Objects.equals(saasRoleGroupId, that.saasRoleGroupId); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java index c7504af7..1324c6c5 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleGroupService.java @@ -8,7 +8,7 @@ import java.util.List; public interface SaasRoleGroupService { List getList(QuerySaasRoleGroupReq req); - void saveOrUpdate(SaasRoleGroupVO req); + Long saveOrUpdate(SaasRoleGroupVO req); void delete(List ids); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index 78c22c4e..a1c60871 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -61,6 +61,16 @@ public class PermissionGroupImpl implements PermissionGroupService { @Override public List query(QuerySaasPermissionGroupReq req) { + if (CollectionUtils.isEmpty(req.getWorkspaceId())) { + req.setWorkspaceId(Arrays.asList(-1l)); + } else if(!req.getWorkspaceId().contains(-1l)){ + req.getWorkspaceId().add(-1l); + } + if (CollectionUtils.isEmpty(req.getOuId())) { + req.setOuId(Arrays.asList(-1l)); + } else if (!req.getOuId().contains(-1l)) { + req.getOuId().add(-1l); + } // 如果角色id不为空则先查询角色权限集关联表 List relationList = null; if (CollectionUtils.isNotEmpty(req.getRoleIds())) { @@ -232,7 +242,7 @@ public class PermissionGroupImpl implements PermissionGroupService { @Override @Transactional(rollbackFor = Exception.class) public void savePermissionPoints(SavePermissionGroupPPVO save) { - SaasPermissionGroup saasPermissionGroup = getRequiredPermissionGroup(save.getId(), PermissionGroupType.COMMON); + SaasPermissionGroup saasPermissionGroup = getRequiredPermissionGroup(save.getId(), null); List pgpRelations = Optional.ofNullable(save.getSelectedPPIds()).orElse(new ArrayList<>()).stream().map(ppId -> { SaasPgroupPermissionRelation target = new SaasPgroupPermissionRelation(); target.setGroupId(saasPermissionGroup.getId()); @@ -316,7 +326,7 @@ public class PermissionGroupImpl implements PermissionGroupService { throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在"); } SaasPermissionGroup saasPermissionGroup = groups.get(0); - if (!Objects.equals(saasPermissionGroup.getIsCommon(), type.getCode())) { + if (Objects.nonNull(type) && !Objects.equals(saasPermissionGroup.getIsCommon(), type.getCode())) { throw new BizException(BaseCode.BAD_REQUEST, String.format("权限集不是%s权限集", type.getDesc())); } return saasPermissionGroup; @@ -380,8 +390,8 @@ public class PermissionGroupImpl implements PermissionGroupService { if (CollectionUtils.isNotEmpty(selectedWorkspace)) { Map> selectedWorkspaceMap = selectedWorkspace.stream() .collect(Collectors.groupingBy(SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO::getType)); - List includeScopes = Optional.ofNullable(selectedWorkspaceMap.get(PermissionScope.INCLUDE)).orElse(new ArrayList<>()); - List excludeScopes = Optional.ofNullable(selectedWorkspaceMap.get(PermissionScope.EXCLUDE)).orElse(new ArrayList<>()); + List includeScopes = Optional.ofNullable(selectedWorkspaceMap.get(PermissionScope.INCLUDE.getCode())).orElse(new ArrayList<>()); + List excludeScopes = Optional.ofNullable(selectedWorkspaceMap.get(PermissionScope.EXCLUDE.getCode())).orElse(new ArrayList<>()); if (includeScopes.size() + excludeScopes.size() != selectedWorkspace.size()) { throw new BizException(BaseCode.BAD_REQUEST, "选择类型设置错误"); } @@ -393,8 +403,8 @@ public class PermissionGroupImpl implements PermissionGroupService { if (CollectionUtils.isNotEmpty(selectedOu)) { Map> selectedOuMap = selectedOu.stream() .collect(Collectors.groupingBy(SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO::getType)); - List includeScopes = Optional.ofNullable(selectedOuMap.get(PermissionScope.INCLUDE)).orElse(new ArrayList<>()); - List excludeScopes = Optional.ofNullable(selectedOuMap.get(PermissionScope.EXCLUDE)).orElse(new ArrayList<>()); + List includeScopes = Optional.ofNullable(selectedOuMap.get(PermissionScope.INCLUDE.getCode())).orElse(new ArrayList<>()); + List excludeScopes = Optional.ofNullable(selectedOuMap.get(PermissionScope.EXCLUDE.getCode())).orElse(new ArrayList<>()); if (includeScopes.size() + excludeScopes.size() != selectedWorkspace.size()) { throw new BizException(BaseCode.BAD_REQUEST, "选择类型设置错误"); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 174c3363..a9fe42df 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -13,8 +13,8 @@ import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; -import cn.axzo.tyr.server.repository.entity.*; import cn.axzo.tyr.server.repository.dao.*; +import cn.axzo.tyr.server.repository.entity.*; import cn.axzo.tyr.server.service.*; import cn.hutool.core.bean.BeanUtil; import lombok.RequiredArgsConstructor; @@ -209,6 +209,14 @@ public class RoleServiceImpl implements RoleService { if (Objects.isNull(saasRole)) { throw new BizException(BaseCode.BAD_REQUEST, "角色不存在"); } + if (Objects.isNull(saveOrUpdateRole.getPermissionGroupId())) { + throw new BizException(BaseCode.BAD_REQUEST, "更新角色时权限集不能为空不存在"); + } + SaasPermissionGroup group = saasPermissionGroupDao.lambdaQuery().eq(SaasPermissionGroup::getId, saveOrUpdateRole.getPermissionGroupId()) + .eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).one(); + if (Objects.isNull(group)) { + throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在"); + } } else { saasRole = new SaasRole(); saasRole.setCreateBy(saveOrUpdateRole.getOperatorId()); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPermissionGroupScopeServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPermissionGroupScopeServiceImpl.java index 25681169..9f5be4bb 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPermissionGroupScopeServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPermissionGroupScopeServiceImpl.java @@ -22,7 +22,7 @@ public class SaasPermissionGroupScopeServiceImpl implements SaasPermissionGroupS @Override @Transactional(rollbackFor = Exception.class) public void saveOrUpdate(List scopes) { - if (CollectionUtils.isNotEmpty(scopes)) { + if (CollectionUtils.isEmpty(scopes)) { return; } List exists = saasPermissionGroupScopeDao.lambdaQuery() diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java index c94d4d04..db6ee22e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java @@ -23,7 +23,7 @@ public class SaasPgroupPermissionRelationServiceImpl implements SaasPgroupPermis @Override @Transactional(rollbackFor = Exception.class) public void saveOrUpdate(List relations) { - if (CollectionUtils.isNotEmpty(relations)) { + if (CollectionUtils.isEmpty(relations)) { return; } List exists = saasPgroupPermissionRelationDao.lambdaQuery() diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java index bab8e0dc..ceade765 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java @@ -73,7 +73,7 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { } @Override - public void saveOrUpdate(SaasRoleGroupVO req) { + public Long saveOrUpdate(SaasRoleGroupVO req) { // 拼接ouTypeCode字符串 String ouTypeCodeStr = null; if (CollectionUtils.isNotEmpty(req.getOuTypeCode())) { @@ -88,6 +88,7 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { saasRoleGroup.setWorkspaceId(req.getWorkspaceId() != null ? req.getWorkspaceId():-1l); saasRoleGroup.setOuId(req.getOuId() != null ? req.getOuId():-1l); saasRoleGroupDao.saveOrUpdate(saasRoleGroup); + return saasRoleGroup.getId(); } /** From 3ecb5a6f5c145c80258ef806b8b2c5e34645a9a5 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Fri, 15 Sep 2023 09:59:34 +0800 Subject: [PATCH 138/186] =?UTF-8?q?BasicDictTreeResp=E6=96=B0=E5=A2=9Ework?= =?UTF-8?q?space=E5=92=8Ctype=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/model/dict/response/BasicDictTreeResp.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java index 9197b020..57d9bc9e 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/dict/response/BasicDictTreeResp.java @@ -18,6 +18,16 @@ public class BasicDictTreeResp { private Long parentId; + /** + * 工作台类型,"ent", "proj", "oms" + */ + private String workspaceType; + + /** + * 类型,"ouType", "terminal" + */ + private String type; + /** * 字典名称 */ From 036960475ae684fd8b5992f53e9c5fd5d24e5c1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Fri, 15 Sep 2023 10:09:59 +0800 Subject: [PATCH 139/186] =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=B8=85=E6=B4=97=20saasRoleGroup.workspaceType=3D6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java index 4b5e44f2..1cd59564 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java @@ -62,7 +62,7 @@ public class OMSRoleJobHandler extends IJobHandler { // 创建角色分组 SaasRoleGroup roleGroup = new SaasRoleGroup(); roleGroup.setWorkspaceTypeCode("6"); - roleGroup.setOuTypeCode("7"); + roleGroup.setOuTypeCode("6"); roleGroup.setName("管理员"); roleGroup.setWorkspaceId(-1l); roleGroup.setOuId(-1l); From d7eafc16978998b84e84634a58d8c5dfd4899d5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Fri, 15 Sep 2023 10:14:12 +0800 Subject: [PATCH 140/186] =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=B8=85=E6=B4=97=20saasRoleGroup.sort=3D1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java | 1 + 1 file changed, 1 insertion(+) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java index 1cd59564..b7167aea 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java @@ -66,6 +66,7 @@ public class OMSRoleJobHandler extends IJobHandler { roleGroup.setName("管理员"); roleGroup.setWorkspaceId(-1l); roleGroup.setOuId(-1l); + roleGroup.setSort(1); roleGroupDao.save(roleGroup); // 查询OMS的角色 workspaceType=6 OMS的角色 List oldRole = roleDao.lambdaQuery() From 9cf773b4fea9f345bee329d2091841ef769e1543 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Fri, 15 Sep 2023 10:57:30 +0800 Subject: [PATCH 141/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=20=E8=B0=83=E6=95=B4featureType=E8=AF=B4=E6=98=8E=EF=BC=8C?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/tyr/client/model/enums/FeatureType.java | 8 ++++---- .../tyr/client/model/permission/PermissionPointDTO.java | 4 ++-- .../tyr/client/model/permission/PermissionPointVO.java | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/FeatureType.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/FeatureType.java index 746f938b..40fd7d03 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/FeatureType.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/FeatureType.java @@ -17,10 +17,10 @@ import java.util.Map; @AllArgsConstructor public enum FeatureType { - MODULE(0, "模块"), - MENU(1, "菜单"), - PAGE(2, "页面"), - BUTTON(3, "按钮"), + MODULE(0, "菜单"), //原0-模块 + MENU(1, "页面"), //原 1-菜单 + PAGE(2, "页面"), //原 2-页面 没使用 + BUTTON(3, "按钮"), //原 3-功能 ; private Integer code; diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java index 7187c3cc..91508da2 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java @@ -123,12 +123,12 @@ public class PermissionPointDTO { /** - * 适用单位类型-65535:所有 1:总包 2:建设单位 4:监理单位 8:劳务分包 16:专业分包 32-班组 + * 适用单位类型 1:总包 2:建设单位 4:监理单位 8:劳务分包 16:专业分包 32-班组 */ private List fitOuTypeList; /** - * 适用节点类型 65535:所有 1:部门 2:班组 4:小组 + * 适用节点类型 1:部门 2:班组 4:小组 */ private List fitOuNodeTypeList; diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointVO.java index 3f8f46be..64938a23 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointVO.java @@ -126,12 +126,12 @@ public class PermissionPointVO { /** - * 适用单位类型-65535:所有 1:总包 2:建设单位 4:监理单位 8:劳务分包 16:专业分包 32-班组 + * 适用单位类型 1:总包 2:建设单位 4:监理单位 8:劳务分包 16:专业分包 32-班组 */ private List fitOuTypeList; /** - * 适用节点类型 65535:所有 1:部门 2:班组 4:小组 + * 适用节点类型 1:部门 2:班组 4:小组 */ private List fitOuNodeTypeList; From 76392a072b4eaa9198eb6c98202c42f572d9ae19 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Fri, 15 Sep 2023 11:12:55 +0800 Subject: [PATCH 142/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=20=E8=B0=83=E6=95=B4enum=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/model/permission/PermissionPointDTO.java | 2 +- .../model/permission/PermissionPointListQueryRequest.java | 2 +- .../tyr/client/model/permission/PermissionPointTreeNode.java | 2 +- .../cn/axzo/tyr/client/model/permission/PermissionPointVO.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java index 91508da2..2c5959a8 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointDTO.java @@ -89,7 +89,7 @@ public class PermissionPointDTO { private String terminal; /** - * 元素类别 0.模块 1.菜单 2页面 3按钮 + * 元素类别 0.菜单 1.页面 3按钮 */ @NotNull(message = "元素类别不能为空") private Integer featureType; diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointListQueryRequest.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointListQueryRequest.java index e1cb9071..82c03cb0 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointListQueryRequest.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointListQueryRequest.java @@ -13,7 +13,7 @@ import lombok.Data; public class PermissionPointListQueryRequest { /** - * 元素类别 0.模块 1.菜单 2页面 3按钮 + * 元素类别 0.菜单 1.页面 3按钮 * 参考FeatureType * **/ private Integer featureType; diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java index e8b71ffc..16bdf184 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java @@ -38,7 +38,7 @@ public class PermissionPointTreeNode implements IBaseTree Date: Fri, 15 Sep 2023 14:02:24 +0800 Subject: [PATCH 143/186] codereview bugfix --- .../client/feign/SaasPermissionGroupApi.java | 2 +- .../req/QuerySaasPermissionGroupReq.java | 2 + .../service/PermissionGroupService.java | 2 +- .../service/impl/PermissionGroupImpl.java | 38 +++++++++++++------ .../server/service/impl/RoleServiceImpl.java | 17 +++------ .../impl/SaasRoleGroupServiceImpl.java | 22 +++++++---- 6 files changed, 51 insertions(+), 32 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java index 917a99f1..5d7583d4 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/SaasPermissionGroupApi.java @@ -39,7 +39,7 @@ public interface SaasPermissionGroupApi { * 查询 */ @PostMapping("/api/saasPermissionGoup/query") - ApiPageResult query(@RequestBody QuerySaasPermissionGroupReq req); + ApiPageResult query(@RequestBody@Valid QuerySaasPermissionGroupReq req); /** * 删除 diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java index 893ef00f..65380dde 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java @@ -7,6 +7,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import javax.validation.constraints.NotEmpty; import java.util.List; @Data @@ -18,6 +19,7 @@ public class QuerySaasPermissionGroupReq extends PageRequest { /** * 角色id */ + @NotEmpty(message = "角色id必填") private List roleIds; /** diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java index 92a562a3..ea1d1ad9 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java @@ -23,7 +23,7 @@ public interface PermissionGroupService { /** * 通用查询 */ - public List query(QuerySaasPermissionGroupReq req); + List query(QuerySaasPermissionGroupReq req); PageResp page(QuerySaasPermissionGroupReq req); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index a1c60871..33c8e1bb 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -12,8 +12,8 @@ import cn.axzo.tyr.client.model.enums.PermissionScopeType; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.vo.*; -import cn.axzo.tyr.server.repository.entity.*; import cn.axzo.tyr.server.repository.dao.*; +import cn.axzo.tyr.server.repository.entity.*; import cn.axzo.tyr.server.service.PermissionGroupService; import cn.axzo.tyr.server.service.PermissionPointService; import cn.axzo.tyr.server.service.SaasPermissionGroupScopeService; @@ -62,14 +62,14 @@ public class PermissionGroupImpl implements PermissionGroupService { @Override public List query(QuerySaasPermissionGroupReq req) { if (CollectionUtils.isEmpty(req.getWorkspaceId())) { - req.setWorkspaceId(Arrays.asList(-1l)); - } else if(!req.getWorkspaceId().contains(-1l)){ - req.getWorkspaceId().add(-1l); + req.setWorkspaceId(Arrays.asList(-1L)); + } else if(!req.getWorkspaceId().contains(-1L)){ + req.getWorkspaceId().add(-1L); } if (CollectionUtils.isEmpty(req.getOuId())) { - req.setOuId(Arrays.asList(-1l)); - } else if (!req.getOuId().contains(-1l)) { - req.getOuId().add(-1l); + req.setOuId(Arrays.asList(-1L)); + } else if (!req.getOuId().contains(-1L)) { + req.getOuId().add(-1L); } // 如果角色id不为空则先查询角色权限集关联表 List relationList = null; @@ -111,9 +111,9 @@ public class PermissionGroupImpl implements PermissionGroupService { .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) .list(); // 过滤权限集作用范围 + List workspaceIdWithOutCommon = req.getWorkspaceId().stream().filter(workspaceId -> !workspaceId.equals(-1L)).collect(Collectors.toList()); + List ouIdWithOutCommon = req.getOuId().stream().filter(ouId -> !ouId.equals(-1L)).collect(Collectors.toList()); List saasPermissionGroupScopes = saasPermissionGroupScopesSource.stream().filter(e -> { - List workspaceIdWithOutCommon = req.getWorkspaceId().stream().filter(workspaceId -> !workspaceId.equals(-1l)).collect(Collectors.toList()); - List ouIdWithOutCommon = req.getOuId().stream().filter(ouId -> !ouId.equals(-1l)).collect(Collectors.toList()); // 过滤出选中的工作台 if (PermissionScopeType.WORKSPACE.getCode().equals(e.getScopeType())) { if (CollectionUtils.isNotEmpty(workspaceIdWithOutCommon) && ! workspaceIdWithOutCommon.contains(e.getScopeId())) { @@ -156,6 +156,16 @@ public class PermissionGroupImpl implements PermissionGroupService { @Override public PageResp page(QuerySaasPermissionGroupReq req) { + if (CollectionUtils.isEmpty(req.getWorkspaceId())) { + req.setWorkspaceId(Arrays.asList(-1L)); + } else if(!req.getWorkspaceId().contains(-1L)){ + req.getWorkspaceId().add(-1L); + } + if (CollectionUtils.isEmpty(req.getOuId())) { + req.setOuId(Arrays.asList(-1L)); + } else if (!req.getOuId().contains(-1L)) { + req.getOuId().add(-1L); + } // 如果角色id不为空则先查询角色权限集关联表 IPage iPage = req.toPage(); if (CollectionUtils.isNotEmpty(req.getRoleIds())) { @@ -206,9 +216,9 @@ public class PermissionGroupImpl implements PermissionGroupService { .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) .list(); // 过滤权限集作用范围 + List workspaceIdWithOutCommon = req.getWorkspaceId().stream().filter(workspaceId -> !workspaceId.equals(-1L)).collect(Collectors.toList()); + List ouIdWithOutCommon = req.getOuId().stream().filter(ouId -> !ouId.equals(-1L)).collect(Collectors.toList()); List saasPermissionGroupScopes = saasPermissionGroupScopesSource.stream().filter(e -> { - List workspaceIdWithOutCommon = req.getWorkspaceId().stream().filter(workspaceId -> !workspaceId.equals(-1l)).collect(Collectors.toList()); - List ouIdWithOutCommon = req.getOuId().stream().filter(ouId -> !ouId.equals(-1l)).collect(Collectors.toList()); // 过滤出选中的工作台 if (PermissionScopeType.WORKSPACE.getCode().equals(e.getScopeType())) { if (CollectionUtils.isNotEmpty(workspaceIdWithOutCommon) && ! workspaceIdWithOutCommon.contains(e.getScopeId())) { @@ -356,6 +366,12 @@ public class PermissionGroupImpl implements PermissionGroupService { // 删除例外scope saasPermissionGroupScopeDao.removeByIds(scopes.stream().map(SaasPermissionGroupScope::getId).sorted().collect(Collectors.toList())); } + List pgroupPermissionRelations = permissionRelationDao.lambdaQuery().in(SaasPgroupPermissionRelation::getGroupId, deleteGroupIds) + .eq(SaasPgroupPermissionRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + // 删除权限集和权限点关联关系 + if (CollectionUtils.isNotEmpty(pgroupPermissionRelations)) { + permissionRelationDao.removeByIds(pgroupPermissionRelations.stream().map(SaasPgroupPermissionRelation::getId).sorted().collect(Collectors.toList())); + } // 删除权限集 permissionGroupDao.lambdaUpdate() .in(BaseEntity::getId,deleteGroupIds) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index a9fe42df..5b33b021 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -139,14 +139,14 @@ public class RoleServiceImpl implements RoleService { public List query(QuerySaasRoleReq req) { // 如果没有传则默认查询通用维度默认值是 -1,-1+传入的参数含义是查询通用和自定义 if (CollectionUtils.isEmpty(req.getWorkspaceId())) { - req.setWorkspaceId(Arrays.asList(-1l)); - } else if(!req.getWorkspaceId().contains(-1l)){ - req.getWorkspaceId().add(-1l); + req.setWorkspaceId(Arrays.asList(-1L)); + } else if(!req.getWorkspaceId().contains(-1L)){ + req.getWorkspaceId().add(-1L); } if (CollectionUtils.isEmpty(req.getOuId())) { - req.setOuId(Arrays.asList(-1l)); - } else if (!req.getOuId().contains(-1l)) { - req.getOuId().add(-1l); + req.setOuId(Arrays.asList(-1L)); + } else if (!req.getOuId().contains(-1L)) { + req.getOuId().add(-1L); } // 根据工作台类型和单位类型查询角色分组 List roleGroup = new ArrayList<>(); @@ -212,11 +212,6 @@ public class RoleServiceImpl implements RoleService { if (Objects.isNull(saveOrUpdateRole.getPermissionGroupId())) { throw new BizException(BaseCode.BAD_REQUEST, "更新角色时权限集不能为空不存在"); } - SaasPermissionGroup group = saasPermissionGroupDao.lambdaQuery().eq(SaasPermissionGroup::getId, saveOrUpdateRole.getPermissionGroupId()) - .eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).one(); - if (Objects.isNull(group)) { - throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在"); - } } else { saasRole = new SaasRole(); saasRole.setCreateBy(saveOrUpdateRole.getOperatorId()); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java index ceade765..fca6fbb6 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java @@ -5,9 +5,10 @@ import cn.axzo.framework.domain.web.BizException; import cn.axzo.framework.domain.web.code.BaseCode; import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; +import cn.axzo.tyr.server.repository.dao.SaasRoleGroupDao; +import cn.axzo.tyr.server.repository.dao.SaasRoleGroupRelationDao; import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; import cn.axzo.tyr.server.repository.entity.SaasRoleGroupRelation; -import cn.axzo.tyr.server.repository.dao.*; import cn.axzo.tyr.server.service.SaasRoleGroupService; import cn.hutool.core.bean.BeanUtil; import lombok.RequiredArgsConstructor; @@ -28,14 +29,19 @@ import java.util.stream.Collectors; public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { private final SaasRoleGroupDao saasRoleGroupDao; private final SaasRoleGroupRelationDao saasRoleGroupRelationDao; - private final SaasRoleDao roleDao; - private final SaasPgroupRoleRelationDao pgroupRoleRelationDao; - private final SaasPermissionGroupDao permissionGroupDao; - private final SaasPgroupPermissionRelationDao pgroupPermissionRelationDao; - private final SaasRoleUserRelationDao roleUserRelationDao; @Override public List getList(QuerySaasRoleGroupReq req) { + if (CollectionUtils.isEmpty(req.getWorkspaceIds())) { + req.setWorkspaceIds(Arrays.asList(-1L)); + } else if(!req.getWorkspaceIds().contains(-1L)){ + req.getWorkspaceIds().add(-1L); + } + if (CollectionUtils.isEmpty(req.getOuIds())) { + req.setOuIds(Arrays.asList(-1L)); + } else if (!req.getOuIds().contains(-1L)) { + req.getOuIds().add(-1L); + } if (CollectionUtils.isNotEmpty(req.getRoleIds())) { List saasRoleGroupRelations = saasRoleGroupRelationDao.lambdaQuery() .in(SaasRoleGroupRelation::getRoleId, req.getRoleIds()) @@ -85,8 +91,8 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { saasRoleGroup.setOuTypeCode(ouTypeCodeStr); saasRoleGroup.setName(req.getName()); saasRoleGroup.setSort(req.getSort()); - saasRoleGroup.setWorkspaceId(req.getWorkspaceId() != null ? req.getWorkspaceId():-1l); - saasRoleGroup.setOuId(req.getOuId() != null ? req.getOuId():-1l); + saasRoleGroup.setWorkspaceId(req.getWorkspaceId() != null ? req.getWorkspaceId():-1L); + saasRoleGroup.setOuId(req.getOuId() != null ? req.getOuId():-1L); saasRoleGroupDao.saveOrUpdate(saasRoleGroup); return saasRoleGroup.getId(); } From 42ae74b0e2e507476b45e89bbb3456cdec480dc5 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Fri, 15 Sep 2023 14:23:46 +0800 Subject: [PATCH 144/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=20=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2=E5=A2=9E=E5=8A=A0IDS?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=EF=BC=9B=20fix(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=20=E4=BF=AE=E6=AD=A3=E6=8E=92=E5=BA=8Fbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/permission/PermissionPointListQueryRequest.java | 5 +++++ .../tyr/server/service/impl/PermissionPointServiceImpl.java | 3 ++- .../cn/axzo/tyr/server/permission/PermissionPointTest.java | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointListQueryRequest.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointListQueryRequest.java index 82c03cb0..08098cab 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointListQueryRequest.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointListQueryRequest.java @@ -2,6 +2,8 @@ package cn.axzo.tyr.client.model.permission; import lombok.Data; +import java.util.List; + /** * 权限点列表查询对象 * 按需扩展 @@ -38,5 +40,8 @@ public class PermissionPointListQueryRequest { * path左匹配 * **/ private String likePath; + + /** 权限点ID列表 **/ + private List ids; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index ab018c3f..15f383bc 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -358,6 +358,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { .eq(Objects.nonNull(request.getFeatureType()), SaasFeature::getFeatureType, request.getFeatureType()) .eq(Objects.nonNull(request.getParentId()), SaasFeature::getParentId, request.getParentId()) .eq(Objects.nonNull(request.getDelegatedType()), SaasFeature::getDelegatedType, request.getDelegatedType()) + .in(CollectionUtil.isNotEmpty(request.getIds()), SaasFeature::getId, request.getIds()) .likeRight(Objects.nonNull(request.getLikePath()), SaasFeature::getPath, request.getLikePath()); return this.saasFeatureDao.list(wrapper) @@ -391,7 +392,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { //找到需要更新排序的节点 for (int i = 0; i < sortedList.size(); i++) { SaasFeature saasFeature = sortedList.get(i); - if (Objects.equals(saasFeature.getSort(), i + 1)) { + if (!Objects.equals(saasFeature.getSort(), i + 1)) { sortMap.put(saasFeature.getId(), i + 1); } } diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java index 813063bc..1fd25e78 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java @@ -126,6 +126,7 @@ public class PermissionPointTest { public void testQueryList() { PermissionPointListQueryRequest request = new PermissionPointListQueryRequest(); request.setFeatureType(FeatureType.BUTTON.getCode()); + request.setIds(Arrays.asList(255L, 266L)); ApiResult> result = controller.queryList(request); System.out.println(JSON.toJSONString(result)); } From 17c741869ac30ff1bbe2c134f3633d3c1cf591b5 Mon Sep 17 00:00:00 2001 From: TanJ Date: Fri, 15 Sep 2023 14:56:37 +0800 Subject: [PATCH 145/186] =?UTF-8?q?fix:=20=E6=B7=BB=E5=8A=A0=E8=87=AA?= =?UTF-8?q?=E7=84=B6=E4=BA=BAID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/tyr/server/service/impl/RoleUserService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java index 8d2d4f08..52d873e0 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java @@ -69,6 +69,7 @@ public class RoleUserService implements SaasRoleUserService { saasRoleUserRelation.setIdentityType(req.getIdentityType().getCode()); saasRoleUserRelation.setRoleId(e); saasRoleUserRelation.setNaturalPersonId(req.getPersonId()); + saasRoleUserRelation.setNaturalPersonId(req.getPersonId()); saasRoleUserRelation.setOuId(req.getOuId()); saasRoleUserRelation.setWorkspaceId(req.getWorkspaceId()); return saasRoleUserRelation; From 0aee92334ebd24586592897f99e4b9537641265c Mon Sep 17 00:00:00 2001 From: zhansihu Date: Fri, 15 Sep 2023 15:08:45 +0800 Subject: [PATCH 146/186] =?UTF-8?q?fix(=E6=9D=83=E9=99=90=E7=82=B9):=20?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=A0=91=E5=BD=A2=E9=A1=B6=E7=BA=A7=E5=B1=95?= =?UTF-8?q?=E7=A4=BA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/PermissionPointServiceImpl.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 15f383bc..f141e1c5 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -74,11 +74,15 @@ public class PermissionPointServiceImpl implements PermissionPointService { if (request.getParentId() != null || CollectionUtil.isEmpty(nodesResult)) { return nodesResult; } - - return buildTopNodes(nodesResult); + //顶级展示 - 非特殊过滤时,没有子节点也应该展示,否则无法新增 + boolean needAllTop = StrUtil.isBlank(request.getKeyword()) + && CollectionUtil.isEmpty(request.getTerminalList()) + && CollectionUtil.isEmpty(request.getWorkspaceType()) + && CollectionUtil.isEmpty(request.getIds()); + return buildTopNodes(nodesResult, needAllTop); } - private List buildTopNodes(List nodesResult) { + private List buildTopNodes(List nodesResult, boolean needAllTop) { //构建workspace-terminal工作台层级 //按terminal分组 @@ -94,7 +98,8 @@ public class PermissionPointServiceImpl implements PermissionPointService { for (BasicDictTreeResp terminal : terminals) { //有下级权限点 则建立上级 List childrenNodes = mappingNode.get(terminal.getCode()); - if (CollectionUtil.isNotEmpty(childrenNodes)) { + if (needAllTop || CollectionUtil.isNotEmpty(childrenNodes)) { + //需要保留顶级时,没有子节点也要展示 PermissionPointTreeNode terminalTree = new PermissionPointTreeNode(); terminalTree.setPermissionName(terminal.getName()); terminalTree.setTerminal(terminal.getCode()); From 1b72a1c10cc4c214b8110f202a2610ae182ef6df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E6=B5=B7=E6=B4=8B?= Date: Fri, 15 Sep 2023 16:13:04 +0800 Subject: [PATCH 147/186] feat(server): add /api/saas-role-user/delete api --- .../src/test/resources/role-user.http | 11 +++++ .../tyr/client/feign/TyrSaasRoleUserApi.java | 13 ++++++ .../roleuser/req/DeleteRoleUserParam.java | 40 +++++++++++++++++++ .../ServiceExceptionResultHandler.java | 21 ++++++++++ .../roleuser/RoleUserController.java | 9 +++++ .../dao/SaasRoleUserRelationDao.java | 1 + .../service/SaasRoleUserRelationService.java | 4 ++ .../server/service/SaasRoleUserService.java | 20 ++++++++++ .../server/service/impl/RoleUserService.java | 34 ++++++++++++++++ .../impl/SaasRoleUserRelationServiceImpl.java | 20 +++++++++- 10 files changed, 171 insertions(+), 2 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/DeleteRoleUserParam.java diff --git a/integration-test/src/test/resources/role-user.http b/integration-test/src/test/resources/role-user.http index 79e87795..3d1e2906 100644 --- a/integration-test/src/test/resources/role-user.http +++ b/integration-test/src/test/resources/role-user.http @@ -9,5 +9,16 @@ Content-Type: application/json > reponse-check.js +### +POST {{host}}/api/saas-role-user/delete +Accept: application/json +Content-Type: application/json + +{ + +} + +> reponse-check.js + diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleUserApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleUserApi.java index f90f4207..e26eb196 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleUserApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleUserApi.java @@ -2,9 +2,12 @@ package cn.axzo.tyr.client.feign; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserRelationDTO; +import cn.axzo.tyr.client.model.roleuser.req.DeleteRoleUserParam; import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; +import cn.azxo.framework.common.model.CommonResponse; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -31,4 +34,14 @@ public interface TyrSaasRoleUserApi { @PostMapping("/api/saas-role-user/list") ApiResult> roleUserList(@RequestBody @Valid RoleUserParam param); + /** + * 移除某个人在某个工作台的所有角色(除超管) + * + * @param param + * @return + */ + @PostMapping("api/saas-role-user/delete") + ApiResult deleteUserAllRoles(@RequestBody @Valid List param); + + } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/DeleteRoleUserParam.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/DeleteRoleUserParam.java new file mode 100644 index 00000000..64d9b6f2 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/roleuser/req/DeleteRoleUserParam.java @@ -0,0 +1,40 @@ +package cn.axzo.tyr.client.model.roleuser.req; + +import cn.axzo.tyr.client.model.enums.IdentityType; +import lombok.*; + +import javax.validation.constraints.NotNull; + +/** + * @author haiyangjin + * @date 2023/9/15 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DeleteRoleUserParam { + /** + * 工作台id + */ + @NotNull(message = "工作台id不能为空") + private Long workspaceId; + + /** + * 单位id : 非必填 + */ + @NotNull(message = "单位id不能为空") + private Long ouId; + + /** + * 被赋予角色的人的身份id + */ + @NotNull(message = "身份id不能为空") + private Long identityId; + + /** + * 必填 + */ + @NotNull(message = "身份类型不能为空") + private IdentityType identityType; +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ServiceExceptionResultHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ServiceExceptionResultHandler.java index 8d57707b..776cd886 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ServiceExceptionResultHandler.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ServiceExceptionResultHandler.java @@ -6,7 +6,16 @@ import cn.axzo.framework.autoconfigure.web.exception.RespErrorCodeMappingPropert import cn.axzo.framework.autoconfigure.web.exception.handler.AbstractExceptionApiResultHandler; import cn.axzo.framework.domain.web.code.IRespCode; import cn.axzo.framework.domain.web.code.RespCode; +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.azxo.framework.common.model.CommonResponse; import org.springframework.stereotype.Component; +import org.springframework.validation.BindException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import java.util.Set; /** * 目前整体框架中 ServiceException 有多种,而常用的 {@link cn.axzo.basics.common.util.AssertUtil} 抛出的是 {@link cn.axzo.basics.common.exception.ServiceException} @@ -26,4 +35,16 @@ public class ServiceExceptionResultHandler extends AbstractExceptionApiResultHan return new RespCode(String.valueOf(error.getErrorCode()), error.getMessage()); } + @ExceptionHandler(ConstraintViolationException.class) + @ResponseBody + public ApiResult handleConstraintViolationException(ConstraintViolationException exception) { + Set> violations = exception.getConstraintViolations(); + StringBuilder builder = new StringBuilder(); + for (ConstraintViolation violation : violations) { + builder.append(violation.getMessage()); + break; + } + return ApiResult.err(builder.toString()); + } + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java index 9bd1defb..991d1e15 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/roleuser/RoleUserController.java @@ -3,12 +3,15 @@ package cn.axzo.tyr.server.controller.roleuser; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.TyrSaasRoleUserApi; import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserRelationDTO; +import cn.axzo.tyr.client.model.roleuser.req.DeleteRoleUserParam; import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; import cn.axzo.tyr.server.service.SaasRoleUserRelationService; import cn.axzo.tyr.server.service.SaasRoleUserService; +import cn.azxo.framework.common.model.CommonResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @@ -36,4 +39,10 @@ public class RoleUserController implements TyrSaasRoleUserApi { public ApiResult> roleUserList(@RequestBody @Valid RoleUserParam param) { return ApiResult.ok(saasRoleUserRelationService.list(param)); } + + @Override + public ApiResult deleteUserAllRoles(@RequestBody @Valid List param) { + return ApiResult.ok(saasRoleUserService.deleteUserAllRoles(param)); + } + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleUserRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleUserRelationDao.java index d24fe166..725a640c 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleUserRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleUserRelationDao.java @@ -3,6 +3,7 @@ package cn.axzo.tyr.server.repository.dao; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.model.BaseWorkspaceModel; +import cn.axzo.tyr.client.model.roleuser.req.DeleteRoleUserParam; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; import cn.axzo.tyr.server.repository.mapper.SaasRoleUserRelationMapper; import cn.hutool.core.collection.CollectionUtil; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java index c63e9d3d..19c8e585 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserRelationService.java @@ -1,8 +1,12 @@ package cn.axzo.tyr.server.service; +import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserRelationDTO; +import cn.axzo.tyr.client.model.roleuser.req.DeleteRoleUserParam; import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; +import org.springframework.web.bind.annotation.RequestBody; +import javax.validation.Valid; import java.util.List; /** diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java index aebfcdb9..50eddab2 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasRoleUserService.java @@ -1,5 +1,7 @@ package cn.axzo.tyr.server.service; +import cn.axzo.tyr.client.model.enums.IdentityType; +import cn.axzo.tyr.client.model.roleuser.req.DeleteRoleUserParam; import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; @@ -14,4 +16,22 @@ import java.util.List; public interface SaasRoleUserService { void saveOrUpdate( RoleUserReq req); + + /** + * 删除用户角色,但是不能删除超管 + * + * @param param + * @return + */ + boolean deleteUserAllRoles(List param); + + /** + * 是超管 + * + * @param identityId + * @param workspaceId + * @param ouId + * @return + */ + boolean isSuperAdmin(Long identityId, IdentityType identityType, Long workspaceId, Long ouId); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java index 52d873e0..baaab49d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java @@ -3,6 +3,8 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.framework.domain.ServiceException; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.model.BaseWorkspaceModel; +import cn.axzo.tyr.client.model.enums.IdentityType; +import cn.axzo.tyr.client.model.roleuser.req.DeleteRoleUserParam; import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; import cn.axzo.tyr.client.common.enums.RoleTypeEnum; import cn.axzo.tyr.server.repository.entity.SaasRole; @@ -76,4 +78,36 @@ public class RoleUserService implements SaasRoleUserService { }).collect(Collectors.toList())); } + + @Override + public boolean deleteUserAllRoles(List param) { + param.forEach(item -> { + if (isSuperAdmin(item.getIdentityId(), item.getIdentityType(), item.getWorkspaceId(), item.getOuId())) { + throw new ServiceException("超级管理员无法被删除"); + } + roleUserRelationDao.deleteByUser(BaseWorkspaceModel.builder() + .workspaceId(item.getWorkspaceId()) + .ouId(item.getOuId()) + .identityId(item.getIdentityId()) + .identityType(item.getIdentityType()) + .build(), null); + }); + return true; + } + + @Override + public boolean isSuperAdmin(Long identityId, IdentityType identityType, Long workspaceId, Long ouId) { + List roleList = saasRoleDao.lambdaQuery() + .eq(SaasRole::getOwnerOuId, ouId) + .eq(SaasRole::getWorkspaceId, workspaceId) + .eq(SaasRole::getRoleType, RoleTypeEnum.SUPER_ADMIN.getValue()) + .list(); + List roleIds = roleList.stream().map(SaasRole::getId).collect(Collectors.toList()); + List saasRoleUserRelations = roleUserRelationDao.lambdaQuery().eq(SaasRoleUserRelation::getIdentityId, identityId) + .eq(SaasRoleUserRelation::getIdentityType, identityType.getCode()) + .eq(SaasRoleUserRelation::getWorkspaceId, workspaceId) + .eq(SaasRoleUserRelation::getOuId, ouId) + .in(SaasRoleUserRelation::getRoleId, roleIds).last("limit 1").list(); + return saasRoleUserRelations.size() > 0; + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java index 7a495298..348b58f4 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java @@ -1,22 +1,34 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.framework.domain.ServiceException; +import cn.axzo.framework.domain.web.BizException; +import cn.axzo.framework.domain.web.code.BaseCode; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.common.enums.RoleTypeEnum; +import cn.axzo.tyr.client.model.BaseWorkspaceModel; +import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserRelationDTO; +import cn.axzo.tyr.client.model.roleuser.req.DeleteRoleUserParam; import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; +import cn.axzo.tyr.server.repository.dao.SaasRoleDao; import cn.axzo.tyr.server.repository.dao.SaasRoleUserRelationDao; +import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; import cn.axzo.tyr.server.service.SaasRoleUserRelationService; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @author haiyangjin @@ -28,9 +40,14 @@ public class SaasRoleUserRelationServiceImpl implements SaasRoleUserRelationServ @Resource private SaasRoleUserRelationDao saasRoleUserRelationDao; + + @Resource + private SaasRoleDao saasRoleDao; + @Override public List list(RoleUserParam param) { - List saasRoleUserRelations = saasRoleUserRelationDao.lambdaQuery().eq(Objects.nonNull(param.getIdentityId()), SaasRoleUserRelation::getIdentityId, param.getIdentityId()) + List saasRoleUserRelations = saasRoleUserRelationDao.lambdaQuery() + .eq(Objects.nonNull(param.getIdentityId()), SaasRoleUserRelation::getIdentityId, param.getIdentityId()) .eq(Objects.nonNull(param.getIdentityType()), SaasRoleUserRelation::getIdentityType, param.getIdentityType()) .eq(Objects.nonNull(param.getWorkspaceId()), SaasRoleUserRelation::getWorkspaceId, param.getWorkspaceId()) .eq(Objects.nonNull(param.getOuId()), SaasRoleUserRelation::getOuId, param.getOuId()) @@ -44,5 +61,4 @@ public class SaasRoleUserRelationServiceImpl implements SaasRoleUserRelationServ return saasRoleUserRelations.stream().map(e -> BeanUtil.copyProperties(e, SaasRoleUserRelationDTO.class)).collect(Collectors.toList()); } - } From f699a6049f9846124ef47ca754b73300f55bc77f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Fri, 15 Sep 2023 17:28:23 +0800 Subject: [PATCH 148/186] fix bug:selectedOu.size --- .../cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index 33c8e1bb..30ea0235 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -421,7 +421,7 @@ public class PermissionGroupImpl implements PermissionGroupService { .collect(Collectors.groupingBy(SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO::getType)); List includeScopes = Optional.ofNullable(selectedOuMap.get(PermissionScope.INCLUDE.getCode())).orElse(new ArrayList<>()); List excludeScopes = Optional.ofNullable(selectedOuMap.get(PermissionScope.EXCLUDE.getCode())).orElse(new ArrayList<>()); - if (includeScopes.size() + excludeScopes.size() != selectedWorkspace.size()) { + if (includeScopes.size() + excludeScopes.size() != selectedOu.size()) { throw new BizException(BaseCode.BAD_REQUEST, "选择类型设置错误"); } if (CollectionUtils.containsAny(includeScopes, excludeScopes)) { From 08c0d583454d7ccbc1306906f97f962016796255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Fri, 15 Sep 2023 17:55:38 +0800 Subject: [PATCH 149/186] =?UTF-8?q?fix=20bug:=E5=88=A0=E9=99=A4=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/server/repository/dao/SaasRoleGroupDao.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleGroupDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleGroupDao.java index 7df2637b..a8f02b69 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleGroupDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleGroupDao.java @@ -46,7 +46,7 @@ public class SaasRoleGroupDao extends ServiceImpl id) { lambdaUpdate() .in(BaseEntity::getId,id) - .set(BaseEntity::getIsDelete,id) + .set(BaseEntity::getIsDelete,1l) .update(); } From 37f3a1de5069a7e8088cbe7c90ecb16362c9546d Mon Sep 17 00:00:00 2001 From: TanJ Date: Fri, 15 Sep 2023 18:04:11 +0800 Subject: [PATCH 150/186] =?UTF-8?q?fix:=20=E5=AE=9E=E4=BD=93=E7=B1=BB?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=87=AA=E6=9C=89=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.saasRoleVo添加权限过滤 2.菜单添加平铺展示 --- .../permission/PermissionPointTreeNode.java | 29 +++++++++++++++++++ .../axzo/tyr/client/model/vo/SaasRoleVO.java | 1 + 2 files changed, 30 insertions(+) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java index 16bdf184..5bc11adc 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java @@ -1,10 +1,13 @@ package cn.axzo.tyr.client.model.permission; import cn.axzo.basics.common.model.IBaseTree; +import cn.axzo.framework.domain.ServiceException; +import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.annotation.JSONField; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; +import java.util.ArrayList; import java.util.List; /** @@ -76,4 +79,30 @@ public class PermissionPointTreeNode implements IBaseTree nodeChildren) { this.children = nodeChildren; } + /** + * 将树型结构平铺展示。会将当前节点也添加到children中 + */ + public void flatChildren() { + if (CollectionUtil.isNotEmpty(children)) { + this.children = getNode(new ArrayList<>(),children, 10); + } + } + + private List getNode(List rootList,List list,Integer maxDepth) { + if (maxDepth < 1) { + throw new ServiceException("超过最大递归深度,可能发生死循环"); + } + if (CollectionUtil.isEmpty(list)) { + return rootList; + } + list.stream().forEach(e -> { + getNode(rootList, e.getChildren(), maxDepth - 1); + e.setChildren(null); + } ); + + rootList.addAll(list); + + + return rootList; + } } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java index fd657e65..ac4a41f9 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java @@ -82,6 +82,7 @@ public class SaasRoleVO { // 通用权限 if (CollectionUtil.isEmpty(permissionGroupVO.getScopes())) { permissionPoint.addAll(permissionGroupVO.getFeature()); + continue; } List scopes = permissionGroupVO.getScopes(); From 8ed88b98136a6d73b1ae090d394361831ef36d48 Mon Sep 17 00:00:00 2001 From: yangsong Date: Fri, 15 Sep 2023 18:11:07 +0800 Subject: [PATCH 151/186] =?UTF-8?q?=E8=A7=92=E8=89=B2=EF=BC=8C=E5=88=86?= =?UTF-8?q?=E7=BB=84=EF=BC=8C=E6=9D=83=E9=99=90=E9=9B=86=20=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E4=B8=8D=E8=83=BD=E9=87=8D=E5=A4=8D=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/vo/SaasPermissionGroupVO.java | 5 +- .../tyr/client/model/vo/SaasRoleGroupVO.java | 4 + .../role/SaasPermissionGroupController.java | 2 +- .../service/PermissionGroupService.java | 2 +- .../service/impl/PermissionGroupImpl.java | 129 +++++++++++------- .../server/service/impl/RoleServiceImpl.java | 70 ++++++---- .../impl/SaasRoleGroupServiceImpl.java | 69 +++++++--- 7 files changed, 188 insertions(+), 93 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java index bc7b72c4..8e33b227 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java @@ -50,7 +50,10 @@ public class SaasPermissionGroupVO { * 是否为通用权限集 1:是 0:否 */ private Integer isCommon; - + /** + * 权限集对应的角色 + */ + private Long roleId; /** * 权限 */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java index 1286efc8..d309d788 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleGroupVO.java @@ -5,6 +5,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import javax.validation.constraints.NotBlank; import java.util.Date; import java.util.List; @@ -19,6 +20,7 @@ public class SaasRoleGroupVO { /** * 工作台类型字典code */ + @NotBlank private String workspaceTypeCode; /** @@ -33,6 +35,8 @@ public class SaasRoleGroupVO { /** * 角色 + * 如果查询时候指定了roleIds,返回的roleIds <= 请求的roleIds + * 如果查询时候没有指定roleIds, 返回roleId 等于 该分组对应的所有的角色id */ private List roleIds; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java index 7b0bfcf4..1ace1626 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java @@ -36,7 +36,7 @@ public class SaasPermissionGroupController implements SaasPermissionGroupApi { @Override public ApiResult saveOrUpdateSpecial(SaveOrUpdatePermissionGroupVO permissionGroup) { - return ApiResult.ok(permissionGroupService.saveOrUpdateScope(permissionGroup)); + return ApiResult.ok(permissionGroupService.saveOrUpdateSpecial(permissionGroup)); } @Override diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java index ea1d1ad9..90fe5a41 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java @@ -34,7 +34,7 @@ public interface PermissionGroupService { * @param permissionGroup * @return */ - Long saveOrUpdateScope(SaveOrUpdatePermissionGroupVO permissionGroup); + Long saveOrUpdateSpecial(SaveOrUpdatePermissionGroupVO permissionGroup); SaasPermissionGroup getRequiredPermissionGroup(Long permissionGroupId, PermissionGroupType type); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index 33c8e1bb..76eba196 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -23,11 +23,11 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -41,23 +41,14 @@ import java.util.stream.Collectors; @RequiredArgsConstructor @Service public class PermissionGroupImpl implements PermissionGroupService { - - @Autowired - SaasPermissionGroupDao permissionGroupDao; - @Autowired - SaasPgroupRoleRelationDao roleRelationDao; - @Autowired - SaasPgroupPermissionRelationDao permissionRelationDao; - @Autowired - PermissionPointService featureService; - @Autowired - SaasPermissionGroupScopeDao saasPermissionGroupScopeDao; - @Autowired - SaasPgroupPermissionRelationService saasPgroupPermissionRelationService; - @Autowired - SaasRoleDao saasRoleDao; - @Autowired - SaasPermissionGroupScopeService saasPermissionGroupScopeService; + private final SaasPermissionGroupDao permissionGroupDao; + private final SaasPgroupRoleRelationDao pgroupRoleRelationDao; + private final SaasPgroupPermissionRelationDao permissionRelationDao; + private final PermissionPointService featureService; + private final SaasPermissionGroupScopeDao saasPermissionGroupScopeDao; + private final SaasPgroupPermissionRelationService saasPgroupPermissionRelationService; + private final SaasRoleDao saasRoleDao; + private final SaasPermissionGroupScopeService saasPermissionGroupScopeService; @Override public List query(QuerySaasPermissionGroupReq req) { @@ -74,7 +65,7 @@ public class PermissionGroupImpl implements PermissionGroupService { // 如果角色id不为空则先查询角色权限集关联表 List relationList = null; if (CollectionUtils.isNotEmpty(req.getRoleIds())) { - relationList = roleRelationDao.lambdaQuery() + relationList = pgroupRoleRelationDao.lambdaQuery() .in(SaasPgroupRoleRelation::getRoleId, req.getRoleIds()) .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) .list(); @@ -106,6 +97,15 @@ public class PermissionGroupImpl implements PermissionGroupService { } List groupIds = groupList.stream().map(BaseEntity::getId).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(relationList)) { + relationList = pgroupRoleRelationDao.lambdaQuery() + .in(SaasPgroupRoleRelation::getGroupId, groupIds) + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .list(); + } + // 角色和权限集是1Vn 关系,权限集必然依附角色存在 + Map pgrrMap = relationList.stream().collect(Collectors.toMap(SaasPgroupRoleRelation::getGroupId, Function.identity(), (e1, e2) -> e2)); + List saasPermissionGroupScopesSource = saasPermissionGroupScopeDao.lambdaQuery() .in(SaasPermissionGroupScope::getPgroupId, groupIds) .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) @@ -145,7 +145,11 @@ public class PermissionGroupImpl implements PermissionGroupService { .feature(feature) .scopes(saasPermissionGroupScopes.stream().filter(e -> e.getPgroupId().equals(group.getId())).map(e -> BeanMapper.copyBean(e, SaasRolePermissionScopeVO.class)).collect(Collectors.toList())) .createBy(group.getCreateBy()) + .roleId(Optional.ofNullable(pgrrMap.get(group.getId())).map(SaasPgroupRoleRelation::getRoleId).orElse(null)) + .createBy(group.getCreateBy()) .updateBy(group.getUpdateBy()) + .creatorName(group.getCreatorName()) + .updatorName(group.getUpdatorName()) .type(group.getType()) .isCommon(group.getIsCommon()) .build(); @@ -168,8 +172,9 @@ public class PermissionGroupImpl implements PermissionGroupService { } // 如果角色id不为空则先查询角色权限集关联表 IPage iPage = req.toPage(); + List relationList = null; if (CollectionUtils.isNotEmpty(req.getRoleIds())) { - List relationList = roleRelationDao.lambdaQuery() + relationList = pgroupRoleRelationDao.lambdaQuery() .in(SaasPgroupRoleRelation::getRoleId, req.getRoleIds()) .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) .list(); @@ -201,6 +206,16 @@ public class PermissionGroupImpl implements PermissionGroupService { return PageResp.zero(iPage.getCurrent(), iPage.getSize()); } List groupIds = groupList.stream().map(BaseEntity::getId).collect(Collectors.toList()); + + if (CollectionUtils.isEmpty(relationList)) { + relationList = pgroupRoleRelationDao.lambdaQuery() + .in(SaasPgroupRoleRelation::getGroupId, groupIds) + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .list(); + } + // 角色和权限集是1Vn 关系,权限集必然依附角色存在 + Map pgrrMap = relationList.stream().collect(Collectors.toMap(SaasPgroupRoleRelation::getGroupId, Function.identity(), (e1, e2) -> e2)); + // 查询权限集关联的权限 List permissionList = permissionRelationDao.lambdaQuery() .in(SaasPgroupPermissionRelation::getGroupId, groupIds) @@ -241,7 +256,10 @@ public class PermissionGroupImpl implements PermissionGroupService { .feature(finalFeature) .scopes(saasPermissionGroupScopes.stream().filter(e -> e.getPgroupId().equals(group.getId())).map(e -> BeanMapper.copyBean(e, SaasRolePermissionScopeVO.class)).collect(Collectors.toList())) .createBy(group.getCreateBy()) + .creatorName(group.getCreatorName()) .updateBy(group.getUpdateBy()) + .updatorName(group.getUpdatorName()) + .roleId(Optional.ofNullable(pgrrMap.get(group.getId())).map(SaasPgroupRoleRelation::getRoleId).orElse(null)) .type(group.getType()) .isCommon(group.getIsCommon()) .build() @@ -266,27 +284,9 @@ public class PermissionGroupImpl implements PermissionGroupService { @Override @Transactional(rollbackFor = Exception.class) - public Long saveOrUpdateScope(SaveOrUpdatePermissionGroupVO permissionGroup) { - SaasPermissionGroup saasPermissionGroup; - validSaasPermissionGroup(permissionGroup); + public Long saveOrUpdateSpecial(SaveOrUpdatePermissionGroupVO permissionGroup) { Date now = new Date(); - if (Objects.nonNull(permissionGroup.getId())) { - saasPermissionGroup = getRequiredPermissionGroup(permissionGroup.getId(), PermissionGroupType.SPECIAL); - } else { - saasPermissionGroup = new SaasPermissionGroup(); - saasPermissionGroup.setCreateBy(permissionGroup.getOperatorId()); - saasPermissionGroup.setCreatorName(Optional.ofNullable(permissionGroup.getOperatorName()).orElse("")); - saasPermissionGroup.setUpdateBy(permissionGroup.getOperatorId()); - saasPermissionGroup.setUpdatorName(Optional.ofNullable(permissionGroup.getOperatorName()).orElse("")); - saasPermissionGroup.setIsCommon(PermissionGroupType.SPECIAL.getCode()); - saasPermissionGroup.setCreateAt(now); - } - saasPermissionGroup.setType(permissionGroup.getType()); - saasPermissionGroup.setName(permissionGroup.getName()); - saasPermissionGroup.setUpdateBy(permissionGroup.getOperatorId()); - saasPermissionGroup.setUpdatorName(Optional.ofNullable(permissionGroup.getOperatorName()).orElse("")); - saasPermissionGroup.setDescription(permissionGroup.getDescription()); - saasPermissionGroup.setUpdateAt(now); + SaasPermissionGroup saasPermissionGroup = validAndBuildPermissionGroup(permissionGroup, now); permissionGroupDao.saveOrUpdate(saasPermissionGroup); if (Objects.isNull(permissionGroup.getId())) { SaasPgroupRoleRelation roleRelation = new SaasPgroupRoleRelation(); @@ -296,7 +296,7 @@ public class PermissionGroupImpl implements PermissionGroupService { roleRelation.setUpdateBy(permissionGroup.getOperatorId()); roleRelation.setCreateAt(now); roleRelation.setUpdateAt(now); - roleRelationDao.save(roleRelation); + pgroupRoleRelationDao.save(roleRelation); } List scopes = new ArrayList<>(); if (CollectionUtils.isNotEmpty(permissionGroup.getSelectedWorkspace())) { @@ -345,7 +345,7 @@ public class PermissionGroupImpl implements PermissionGroupService { @Override @Transactional(rollbackFor = Exception.class) public void deletePermissionGroupSpecial(DeletePermissionGroupVO group) { - List relations = roleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, group.getRoleId()) + List relations = pgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, group.getRoleId()) .in(SaasPgroupRoleRelation::getGroupId, group.getSpecialPermissionGroupIds()) .eq(SaasPgroupRoleRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); if (CollectionUtils.isEmpty(relations)) { @@ -359,7 +359,7 @@ public class PermissionGroupImpl implements PermissionGroupService { throw new BizException(BaseCode.BAD_REQUEST, "只能删除例外权限集"); } //删除角色关联 - roleRelationDao.removeByIds(relations.stream().map(SaasPgroupRoleRelation::getId).sorted().collect(Collectors.toList())); + pgroupRoleRelationDao.removeByIds(relations.stream().map(SaasPgroupRoleRelation::getId).sorted().collect(Collectors.toList())); List scopes = saasPermissionGroupScopeDao.lambdaQuery().in(SaasPermissionGroupScope::getPgroupId, deleteGroupIds) .eq(SaasPermissionGroupScope::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); if (CollectionUtils.isNotEmpty(scopes)) { @@ -382,13 +382,14 @@ public class PermissionGroupImpl implements PermissionGroupService { .update(); } - private void validSaasPermissionGroup(SaveOrUpdatePermissionGroupVO permissionGroup) { + private SaasPermissionGroup validAndBuildPermissionGroup(SaveOrUpdatePermissionGroupVO permissionGroup, Date now) { + // 验证角色是否存在 SaasRole saasRole = saasRoleDao.getById(permissionGroup.getRoleId()); if (Objects.isNull(saasRole)) { throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在"); } if (Objects.nonNull(permissionGroup.getId())) { - int relationCount = roleRelationDao.lambdaQuery() + int relationCount = pgroupRoleRelationDao.lambdaQuery() .eq(SaasPgroupRoleRelation::getRoleId, permissionGroup.getRoleId()) .eq(SaasPgroupRoleRelation::getGroupId, permissionGroup.getId()) .eq(SaasPgroupRoleRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).count(); @@ -396,13 +397,48 @@ public class PermissionGroupImpl implements PermissionGroupService { throw new BizException(BaseCode.BAD_REQUEST, "角色和权限组不存在关联关系"); } } + validPermissionGroupScope(permissionGroup); + SaasPermissionGroup saasPermissionGroup; + if (Objects.isNull(permissionGroup.getId())) { + saasPermissionGroup = new SaasPermissionGroup(); + saasPermissionGroup.setCreateBy(permissionGroup.getOperatorId()); + saasPermissionGroup.setCreatorName(Optional.ofNullable(permissionGroup.getOperatorName()).orElse("")); + saasPermissionGroup.setIsCommon(PermissionGroupType.SPECIAL.getCode()); + saasPermissionGroup.setCreateAt(now); + } else { + saasPermissionGroup = getRequiredPermissionGroup(permissionGroup.getId(), PermissionGroupType.SPECIAL); + } + saasPermissionGroup.setType(permissionGroup.getType()); + saasPermissionGroup.setName(permissionGroup.getName()); + saasPermissionGroup.setUpdateBy(permissionGroup.getOperatorId()); + saasPermissionGroup.setUpdatorName(Optional.ofNullable(permissionGroup.getOperatorName()).orElse("")); + saasPermissionGroup.setDescription(permissionGroup.getDescription()); + saasPermissionGroup.setUpdateAt(now); + List relations = pgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, permissionGroup.getRoleId()) + .eq(SaasPgroupRoleRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + if (CollectionUtils.isNotEmpty(relations)) { + List groupIds = relations.stream().map(SaasPgroupRoleRelation::getGroupId).sorted().collect(Collectors.toList()); + List groups = permissionGroupDao.lambdaQuery().in(SaasPermissionGroup::getId, groupIds).eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + Optional repeatName = groups.stream().filter(g -> !Objects.equals(g.getId(), saasPermissionGroup.getId()) && StringUtils.equalsIgnoreCase(saasPermissionGroup.getName(), g.getName())) + .findFirst(); + if (repeatName.isPresent()) { + throw new BizException(BaseCode.BAD_REQUEST, "同角色,分组名称不能重复"); + } + } + return saasPermissionGroup; + } + + /** + * 验证例外 + * @param permissionGroup + */ + private void validPermissionGroupScope(SaveOrUpdatePermissionGroupVO permissionGroup) { List selectedWorkspace = permissionGroup.getSelectedWorkspace(); List selectedOu = permissionGroup.getSelectedOu(); Set scopeTypes = new HashSet<>(); if (CollectionUtils.isEmpty(selectedWorkspace) && CollectionUtils.isEmpty(selectedOu)) { throw new BizException(BaseCode.BAD_REQUEST, "例外不能为空"); } - // TODO 校验规则是产品给的吗? if (CollectionUtils.isNotEmpty(selectedWorkspace)) { Map> selectedWorkspaceMap = selectedWorkspace.stream() .collect(Collectors.groupingBy(SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO::getType)); @@ -429,6 +465,7 @@ public class PermissionGroupImpl implements PermissionGroupService { } scopeTypes.addAll(selectedOu.stream().map(SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO::getType).collect(Collectors.toSet())); } + // 移除这行,例外设置支持移除和包含 if (scopeTypes.size() > 1) { throw new BizException(BaseCode.BAD_REQUEST, "例外类型不能同时指定适用与不适用"); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 5b33b021..957af5f1 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -201,36 +201,16 @@ public class RoleServiceImpl implements RoleService { @Transactional(rollbackFor = Exception.class) public Long saveOrUpdate(SaveOrUpdateRoleVO saveOrUpdateRole) { // 新增OR修改角色 - SaasRole saasRole; Date now = new Date(); - boolean save = Objects.isNull(saveOrUpdateRole.getId()); - if (!save) { - saasRole = saasRoleDao.getById(saveOrUpdateRole.getId()); - if (Objects.isNull(saasRole)) { - throw new BizException(BaseCode.BAD_REQUEST, "角色不存在"); - } - if (Objects.isNull(saveOrUpdateRole.getPermissionGroupId())) { - throw new BizException(BaseCode.BAD_REQUEST, "更新角色时权限集不能为空不存在"); - } - } else { - saasRole = new SaasRole(); - saasRole.setCreateBy(saveOrUpdateRole.getOperatorId()); - saasRole.setCreateAt(now); - } + List groupTrees = saveOrUpdateRole.getGroupTree(); // 验证角色分组信息 validRoleGroup(groupTrees); + SaasRole saasRole = validAndBuildRole(saveOrUpdateRole, now); //验证权限集信息 SaasPermissionGroup saasPermissionGroup = validPermissionGroupCommon(saveOrUpdateRole); validFeature(saveOrUpdateRole.getSelectedPPIds()); - saasRole.setId(saveOrUpdateRole.getId()); - saasRole.setName(saveOrUpdateRole.getName()); - saasRole.setDescription(saasRole.getDescription()); - saasRole.setRoleType(saveOrUpdateRole.getRoleType()); - saasRole.setWorkspaceId(saveOrUpdateRole.getWorkspaceId()); - saasRole.setOwnerOuId(saveOrUpdateRole.getOwnerOuId()); - saasRole.setUpdateBy(saveOrUpdateRole.getOperatorId()); - saasRole.setUpdateAt(now); + saasRoleDao.saveOrUpdate(saasRole); // 新增或者保存分组和角色映射关系 saasRoleGroupRelationService.saveOrUpdate(groupTrees.stream().map(g -> { @@ -264,6 +244,50 @@ public class RoleServiceImpl implements RoleService { return saasRole.getId(); } + private SaasRole validAndBuildRole(SaveOrUpdateRoleVO saveOrUpdateRole, Date now) { + SaasRole saasRole; + if (Objects.isNull(saveOrUpdateRole.getId())) { + saasRole = new SaasRole(); + saasRole.setCreateBy(saveOrUpdateRole.getOperatorId()); + saasRole.setCreateAt(now); + } else { + saasRole = saasRoleDao.getById(saveOrUpdateRole.getId()); + if (Objects.isNull(saasRole)) { + throw new BizException(BaseCode.BAD_REQUEST, "角色不存在"); + } + if (Objects.isNull(saveOrUpdateRole.getPermissionGroupId())) { + throw new BizException(BaseCode.BAD_REQUEST, "更新角色时权限集不能为空不存在"); + } + } + saasRole.setName(saveOrUpdateRole.getName()); + saasRole.setDescription(saasRole.getDescription()); + saasRole.setRoleType(saveOrUpdateRole.getRoleType()); + saasRole.setWorkspaceId(saveOrUpdateRole.getWorkspaceId()); + saasRole.setOwnerOuId(saveOrUpdateRole.getOwnerOuId()); + saasRole.setUpdateBy(saveOrUpdateRole.getOperatorId()); + saasRole.setUpdateAt(now); + // 不可能为空 + List groupIds = saveOrUpdateRole.getGroupTree().stream().map(SaveOrUpdateRoleVO.GroupInfoVO::getId).sorted().collect(Collectors.toList()); + //同分组内角色名称不能重复 + List relations = roleGroupRelationDao.lambdaQuery().in(SaasRoleGroupRelation::getSaasRoleGroupId, groupIds) + .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + if (CollectionUtils.isNotEmpty(relations)) { + List roleIds = relations.stream().map(SaasRoleGroupRelation::getRoleId).sorted().collect(Collectors.toList()); + Map> groupRoleMap = relations.stream().collect(Collectors.groupingBy(SaasRoleGroupRelation::getSaasRoleGroupId, Collectors.mapping(SaasRoleGroupRelation::getRoleId, Collectors.toSet()))); + List roles = saasRoleDao.lambdaQuery().in(SaasRole::getId, roleIds).eq(SaasRole::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + Map roleMap = roles.stream().collect(Collectors.toMap(SaasRole::getId, Function.identity(), (e1, e2) -> e2)); + groupRoleMap.forEach((groupId, roleSet) -> { + Optional repeatNameRole = roleSet.stream().map(roleMap::get) + .filter(e -> Objects.nonNull(e) && !Objects.equals(e.getId(), saveOrUpdateRole.getId()) && StringUtils.equalsIgnoreCase(e.getName(), saasRole.getName())) + .findFirst(); + if (repeatNameRole.isPresent()) { + throw new BizException(BaseCode.BAD_REQUEST, "同分组内不角色名称不能重复"); + } + }); + } + return saasRole; + } + private void validFeature(List featureIds) { if (CollectionUtils.isEmpty(featureIds)) { return; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java index fca6fbb6..35318bf7 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java @@ -17,10 +17,7 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Slf4j @@ -42,8 +39,9 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { } else if (!req.getOuIds().contains(-1L)) { req.getOuIds().add(-1L); } + List saasRoleGroupRelations = null; if (CollectionUtils.isNotEmpty(req.getRoleIds())) { - List saasRoleGroupRelations = saasRoleGroupRelationDao.lambdaQuery() + saasRoleGroupRelations = saasRoleGroupRelationDao.lambdaQuery() .in(SaasRoleGroupRelation::getRoleId, req.getRoleIds()) .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); List groupIds = saasRoleGroupRelations.stream().map(SaasRoleGroupRelation::getSaasRoleGroupId).distinct().collect(Collectors.toList()); @@ -61,9 +59,12 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { if (CollectionUtils.isEmpty(groups)) { return new ArrayList<>(); } - List saasRoleGroupRelations = saasRoleGroupRelationDao.lambdaQuery() - .in(SaasRoleGroupRelation::getSaasRoleGroupId, groups.stream().map(SaasRoleGroup::getId).collect(Collectors.toList())) - .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + // 如果参数指定了roleIds, 返回的值就包含在请求的roleIds中,否则返回全量的roleIds + if (CollectionUtils.isEmpty(saasRoleGroupRelations)) { + saasRoleGroupRelations = saasRoleGroupRelationDao.lambdaQuery() + .in(SaasRoleGroupRelation::getSaasRoleGroupId, groups.stream().map(SaasRoleGroup::getId).collect(Collectors.toList())) + .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + } Map> groupRoleMap = saasRoleGroupRelations.stream().collect(Collectors.groupingBy(SaasRoleGroupRelation::getSaasRoleGroupId, Collectors.mapping(SaasRoleGroupRelation::getRoleId, Collectors.toList()))); List results = groups.stream() .map(e -> { @@ -80,19 +81,7 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { @Override public Long saveOrUpdate(SaasRoleGroupVO req) { - // 拼接ouTypeCode字符串 - String ouTypeCodeStr = null; - if (CollectionUtils.isNotEmpty(req.getOuTypeCode())) { - ouTypeCodeStr = StringUtils.join(req.getOuTypeCode(),","); - } - SaasRoleGroup saasRoleGroup = new SaasRoleGroup(); - saasRoleGroup.setId(req.getId()); - saasRoleGroup.setWorkspaceTypeCode(req.getWorkspaceTypeCode()); - saasRoleGroup.setOuTypeCode(ouTypeCodeStr); - saasRoleGroup.setName(req.getName()); - saasRoleGroup.setSort(req.getSort()); - saasRoleGroup.setWorkspaceId(req.getWorkspaceId() != null ? req.getWorkspaceId():-1L); - saasRoleGroup.setOuId(req.getOuId() != null ? req.getOuId():-1L); + SaasRoleGroup saasRoleGroup = validAndBuildGroup(req); saasRoleGroupDao.saveOrUpdate(saasRoleGroup); return saasRoleGroup.getId(); } @@ -116,4 +105,42 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { saasRoleGroupDao.delete(ids); } + private SaasRoleGroup validAndBuildGroup(SaasRoleGroupVO req) { + SaasRoleGroup saasRoleGroup; + Date now = new Date(); + if (Objects.isNull(req.getId())) { + //新增 + saasRoleGroup = new SaasRoleGroup(); + saasRoleGroup.setCreateAt(now); + } else { + //修改 + saasRoleGroup = saasRoleGroupDao.lambdaQuery().eq(SaasRoleGroup::getId, req.getId()) + .eq(SaasRoleGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).one(); + if (Objects.isNull(saasRoleGroup)) { + throw new BizException(BaseCode.BAD_REQUEST, "角色分组不存在"); + } + } + List groups = saasRoleGroupDao.lambdaQuery().eq(SaasRoleGroup::getWorkspaceTypeCode, req.getWorkspaceTypeCode()) + .eq(SaasRoleGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + if (CollectionUtils.isNotEmpty(groups)) { + Optional repeatGroupName = groups.stream() + .filter(g -> !Objects.equals(g.getId(), req.getId()) && StringUtils.equalsIgnoreCase(g.getName(), req.getName())).findFirst(); + if (repeatGroupName.isPresent()) { + throw new BizException(BaseCode.BAD_REQUEST, "同工作台类型内,分组名称不能重复"); + } + } + // 拼接ouTypeCode字符串 + String ouTypeCodeStr = null; + if (CollectionUtils.isNotEmpty(req.getOuTypeCode())) { + ouTypeCodeStr = StringUtils.join(req.getOuTypeCode(),","); + } + saasRoleGroup.setUpdateAt(now); + saasRoleGroup.setWorkspaceTypeCode(req.getWorkspaceTypeCode()); + saasRoleGroup.setOuTypeCode(ouTypeCodeStr); + saasRoleGroup.setName(req.getName()); + saasRoleGroup.setSort(req.getSort()); + saasRoleGroup.setWorkspaceId(req.getWorkspaceId() != null ? req.getWorkspaceId() : -1L); + saasRoleGroup.setOuId(req.getOuId() != null ? req.getOuId() : -1L); + return saasRoleGroup; + } } From 5348476aa7bad4c935fbc63a797777ecccbfa175 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Sat, 16 Sep 2023 11:01:58 +0800 Subject: [PATCH 152/186] =?UTF-8?q?=E6=9D=83=E9=99=90=E7=BB=84=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E7=BB=93=E6=9E=9C=E6=B7=BB=E5=8A=A0=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=92=8C=E6=9B=B4=E6=96=B0=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java | 5 +++++ .../cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java index 8e33b227..9c95c5e2 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasPermissionGroupVO.java @@ -6,6 +6,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.Date; import java.util.List; @Data @@ -21,6 +22,10 @@ public class SaasPermissionGroupVO { */ private String name; + private Date createAt; + + private Date updateAt; + /** * 创建者 */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index 92512c05..9273f21b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -152,6 +152,8 @@ public class PermissionGroupImpl implements PermissionGroupService { .updatorName(group.getUpdatorName()) .type(group.getType()) .isCommon(group.getIsCommon()) + .createAt(group.getCreateAt()) + .updateAt(group.getUpdateAt()) .build(); } ).collect(Collectors.toList()); @@ -262,6 +264,8 @@ public class PermissionGroupImpl implements PermissionGroupService { .roleId(Optional.ofNullable(pgrrMap.get(group.getId())).map(SaasPgroupRoleRelation::getRoleId).orElse(null)) .type(group.getType()) .isCommon(group.getIsCommon()) + .createAt(group.getCreateAt()) + .updateAt(group.getUpdateAt()) .build() ).collect(Collectors.toList()); return PageResp.list(iPage.getCurrent(), iPage.getSize(), iPage.getTotal(), pageList); From 189e1ffa980e97465f173bcc54c17bd81b88dc62 Mon Sep 17 00:00:00 2001 From: yangsong Date: Sat, 16 Sep 2023 14:56:20 +0800 Subject: [PATCH 153/186] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=EF=BC=8C=E5=90=88=E5=B9=B6list=E5=92=8Cpage?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../req/QuerySaasPermissionGroupReq.java | 9 +- .../role/SaasPermissionGroupController.java | 10 +- .../controller/role/SaasRoleController.java | 5 +- .../role/SaasRoleGroupController.java | 5 +- .../service/PermissionGroupService.java | 10 +- .../service/impl/PermissionGroupImpl.java | 157 ++++-------------- .../server/service/impl/RoleServiceImpl.java | 18 +- .../SaasPgroupRoleRelationServiceImpl.java | 11 +- .../impl/SaasRoleGroupServiceImpl.java | 9 +- 9 files changed, 66 insertions(+), 168 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java index 65380dde..99ae315a 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasPermissionGroupReq.java @@ -8,6 +8,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; import java.util.List; @Data @@ -62,5 +63,11 @@ public class QuerySaasPermissionGroupReq extends PageRequest { */ private String type; - + /** + * true 查询分页 + * false 查询list 全部 + */ + @NotNull + @Builder.Default + private Boolean fetchPage = Boolean.TRUE; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java index 1ace1626..aea17984 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasPermissionGroupController.java @@ -1,8 +1,8 @@ package cn.axzo.tyr.server.controller.role; -import cn.axzo.framework.domain.web.BizException; -import cn.axzo.framework.domain.web.code.BaseCode; +import cn.axzo.basics.common.exception.ServiceException; +import cn.axzo.framework.domain.page.PageResp; import cn.axzo.framework.domain.web.result.ApiPageResult; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.SaasPermissionGroupApi; @@ -41,9 +41,11 @@ public class SaasPermissionGroupController implements SaasPermissionGroupApi { @Override public ApiResult getById(Long id) { - List pGroups = permissionGroupService.query(QuerySaasPermissionGroupReq.builder().ids(Lists.newArrayList(id)).build()); + PageResp pgPage = permissionGroupService.page(QuerySaasPermissionGroupReq.builder() + .fetchPage(Boolean.FALSE).ids(Lists.newArrayList(id)).build()); + List pGroups = pgPage.getList(); if (CollectionUtils.isEmpty(pGroups)) { - throw new BizException(BaseCode.BAD_REQUEST, "未查询到权限组信息"); + throw new ServiceException("未查询到权限组信息"); } return ApiResult.ok(pGroups.get(0)); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java index d5353136..586fbe38 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java @@ -1,7 +1,6 @@ package cn.axzo.tyr.server.controller.role; -import cn.axzo.framework.domain.web.BizException; -import cn.axzo.framework.domain.web.code.BaseCode; +import cn.axzo.basics.common.exception.ServiceException; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.TyrSaasRoleApi; import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; @@ -46,7 +45,7 @@ public class SaasRoleController implements TyrSaasRoleApi { if (CollectionUtils.isNotEmpty(saasRoles)) { return ApiResult.ok(saasRoles.get(0)); } - throw new BizException(BaseCode.BAD_REQUEST, "未查询到角色"); + throw new ServiceException("未查询到角色"); } @Override diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java index 4c07cba7..36ab2927 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleGroupController.java @@ -1,7 +1,6 @@ package cn.axzo.tyr.server.controller.role; -import cn.axzo.framework.domain.web.BizException; -import cn.axzo.framework.domain.web.code.BaseCode; +import cn.axzo.basics.common.exception.ServiceException; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.SaasRoleGroupApi; import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; @@ -36,7 +35,7 @@ public class SaasRoleGroupController implements SaasRoleGroupApi { public ApiResult getById(Long id) { List roleGroups = saasRoleGroupService.getList(QuerySaasRoleGroupReq.builder().ids(Lists.newArrayList(id)).build()); if (CollectionUtils.isEmpty(roleGroups)) { - throw new BizException(BaseCode.BAD_REQUEST, "未查询到角色分组信息"); + throw new ServiceException("未查询到角色分组信息"); } return ApiResult.ok(roleGroups.get(0)); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java index 90fe5a41..4cb5ce60 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/PermissionGroupService.java @@ -9,8 +9,6 @@ import cn.axzo.tyr.client.model.vo.SaveOrUpdatePermissionGroupVO; import cn.axzo.tyr.client.model.vo.SavePermissionGroupPPVO; import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup; -import java.util.List; - /** * 角色 * @@ -19,12 +17,12 @@ import java.util.List; * @date: 2023/9/6 15:51 */ public interface PermissionGroupService { - /** - * 通用查询 + * 接口需要区分查分页或者查询list + * 默认查询page + * @param req + * @return */ - List query(QuerySaasPermissionGroupReq req); - PageResp page(QuerySaasPermissionGroupReq req); void savePermissionPoints(SavePermissionGroupPPVO save); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index 9273f21b..75590ea8 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -2,9 +2,8 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.BeanMapper; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.basics.common.exception.ServiceException; import cn.axzo.framework.domain.page.PageResp; -import cn.axzo.framework.domain.web.BizException; -import cn.axzo.framework.domain.web.code.BaseCode; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.model.enums.PermissionGroupType; import cn.axzo.tyr.client.model.enums.PermissionScope; @@ -19,9 +18,11 @@ import cn.axzo.tyr.server.service.PermissionPointService; import cn.axzo.tyr.server.service.SaasPermissionGroupScopeService; import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationService; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -50,116 +51,6 @@ public class PermissionGroupImpl implements PermissionGroupService { private final SaasRoleDao saasRoleDao; private final SaasPermissionGroupScopeService saasPermissionGroupScopeService; - @Override - public List query(QuerySaasPermissionGroupReq req) { - if (CollectionUtils.isEmpty(req.getWorkspaceId())) { - req.setWorkspaceId(Arrays.asList(-1L)); - } else if(!req.getWorkspaceId().contains(-1L)){ - req.getWorkspaceId().add(-1L); - } - if (CollectionUtils.isEmpty(req.getOuId())) { - req.setOuId(Arrays.asList(-1L)); - } else if (!req.getOuId().contains(-1L)) { - req.getOuId().add(-1L); - } - // 如果角色id不为空则先查询角色权限集关联表 - List relationList = null; - if (CollectionUtils.isNotEmpty(req.getRoleIds())) { - relationList = pgroupRoleRelationDao.lambdaQuery() - .in(SaasPgroupRoleRelation::getRoleId, req.getRoleIds()) - .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) - .list(); - List hitIds = relationList.stream().map(SaasPgroupRoleRelation::getGroupId).distinct().collect(Collectors.toList()); - if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(req.getIds())) { - req.getIds().retainAll(hitIds); - } else { - req.setIds(hitIds); - } - // 如果没查询到关联关系则直接返回 - if (CollectionUtils.isEmpty(relationList)) { - return new ArrayList<>(); - } - } - // 查询权限集 - List groupList = permissionGroupDao.lambdaQuery() - .in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId, req.getIds()) - .eq(req.getIsCommon() != null, SaasPermissionGroup::getIsCommon, req.getIsCommon()) - .eq(req.getCreateBy() != null, SaasPermissionGroup::getCreateBy, req.getCreateBy()) - .eq(req.getUpdateBy() != null, SaasPermissionGroup::getUpdateBy, req.getUpdateBy()) - .eq(StringUtils.isNotBlank(req.getType()), SaasPermissionGroup::getType, req.getType()) - .like(StringUtils.isNotBlank(req.getName()), SaasPermissionGroup::getName, req.getName()) - .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) - .orderByDesc(BaseEntity::getId) - .list(); - // 如果权限集为空则直接返回 - if (CollectionUtils.isEmpty(groupList)) { - return new ArrayList<>(); - } - List groupIds = groupList.stream().map(BaseEntity::getId).collect(Collectors.toList()); - - if (CollectionUtils.isEmpty(relationList)) { - relationList = pgroupRoleRelationDao.lambdaQuery() - .in(SaasPgroupRoleRelation::getGroupId, groupIds) - .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) - .list(); - } - // 角色和权限集是1Vn 关系,权限集必然依附角色存在 - Map pgrrMap = relationList.stream().collect(Collectors.toMap(SaasPgroupRoleRelation::getGroupId, Function.identity(), (e1, e2) -> e2)); - - List saasPermissionGroupScopesSource = saasPermissionGroupScopeDao.lambdaQuery() - .in(SaasPermissionGroupScope::getPgroupId, groupIds) - .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) - .list(); - // 过滤权限集作用范围 - List workspaceIdWithOutCommon = req.getWorkspaceId().stream().filter(workspaceId -> !workspaceId.equals(-1L)).collect(Collectors.toList()); - List ouIdWithOutCommon = req.getOuId().stream().filter(ouId -> !ouId.equals(-1L)).collect(Collectors.toList()); - List saasPermissionGroupScopes = saasPermissionGroupScopesSource.stream().filter(e -> { - // 过滤出选中的工作台 - if (PermissionScopeType.WORKSPACE.getCode().equals(e.getScopeType())) { - if (CollectionUtils.isNotEmpty(workspaceIdWithOutCommon) && ! workspaceIdWithOutCommon.contains(e.getScopeId())) { - return false; - } - }else { - // 过滤出选中的单位 - if (CollectionUtils.isNotEmpty(ouIdWithOutCommon) && ! ouIdWithOutCommon.contains(e.getScopeId())) { - return false; - } - } - return true; - }).collect(Collectors.toList()); - // 组装填充字段 - return groupList.stream().map(group -> { - // 查询权限集关联的权限 - List permissionList = permissionRelationDao.lambdaQuery() - .eq(SaasPgroupPermissionRelation::getGroupId, group.getId()) - .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) - .list(); - List feature = new ArrayList<>(); - if (CollectionUtils.isNotEmpty(permissionList)) { - // 查询featureCode - feature = featureService.listNodesByIds(permissionList.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())); - } - return SaasPermissionGroupVO.builder() - .id(group.getId()) - .name(group.getName()) - .feature(feature) - .scopes(saasPermissionGroupScopes.stream().filter(e -> e.getPgroupId().equals(group.getId())).map(e -> BeanMapper.copyBean(e, SaasRolePermissionScopeVO.class)).collect(Collectors.toList())) - .createBy(group.getCreateBy()) - .roleId(Optional.ofNullable(pgrrMap.get(group.getId())).map(SaasPgroupRoleRelation::getRoleId).orElse(null)) - .createBy(group.getCreateBy()) - .updateBy(group.getUpdateBy()) - .creatorName(group.getCreatorName()) - .updatorName(group.getUpdatorName()) - .type(group.getType()) - .isCommon(group.getIsCommon()) - .createAt(group.getCreateAt()) - .updateAt(group.getUpdateAt()) - .build(); - } - ).collect(Collectors.toList()); - - } - @Override public PageResp page(QuerySaasPermissionGroupReq req) { if (CollectionUtils.isEmpty(req.getWorkspaceId())) { @@ -192,7 +83,7 @@ public class PermissionGroupImpl implements PermissionGroupService { } } // 查询权限集 - iPage = permissionGroupDao.lambdaQuery() + LambdaQueryChainWrapper lambdaQueryWrapper = permissionGroupDao.lambdaQuery() .in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId, req.getIds()) .eq(req.getIsCommon() != null, SaasPermissionGroup::getIsCommon, req.getIsCommon()) .eq(req.getCreateBy() != null, SaasPermissionGroup::getCreateBy, req.getCreateBy()) @@ -200,9 +91,17 @@ public class PermissionGroupImpl implements PermissionGroupService { .eq(StringUtils.isNotBlank(req.getType()), SaasPermissionGroup::getType, req.getType()) .like(StringUtils.isNotBlank(req.getName()), SaasPermissionGroup::getName, req.getName()) .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) - .orderByAsc(BaseEntity::getCreateAt).orderByAsc(BaseEntity::getId) - .page(iPage); - List groupList = iPage.getRecords(); + .orderByAsc(BaseEntity::getCreateAt).orderByAsc(BaseEntity::getId); + List groupList; + if (BooleanUtils.isTrue(req.getFetchPage())) { + // 分页 + iPage = lambdaQueryWrapper.page(iPage); + groupList = iPage.getRecords(); + } else { + groupList = lambdaQueryWrapper.list(); + iPage.setTotal(groupList.size()); + } + // 如果权限集为空则直接返回 if (CollectionUtils.isEmpty(groupList)) { return PageResp.zero(iPage.getCurrent(), iPage.getSize()); @@ -337,11 +236,11 @@ public class PermissionGroupImpl implements PermissionGroupService { .eq(SaasPermissionGroup::getId, permissionGroupId) .eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); if (CollectionUtils.isEmpty(groups)) { - throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在"); + throw new ServiceException("权限集不存在"); } SaasPermissionGroup saasPermissionGroup = groups.get(0); if (Objects.nonNull(type) && !Objects.equals(saasPermissionGroup.getIsCommon(), type.getCode())) { - throw new BizException(BaseCode.BAD_REQUEST, String.format("权限集不是%s权限集", type.getDesc())); + throw new ServiceException(String.format("权限集不是%s权限集", type.getDesc())); } return saasPermissionGroup; } @@ -353,14 +252,14 @@ public class PermissionGroupImpl implements PermissionGroupService { .in(SaasPgroupRoleRelation::getGroupId, group.getSpecialPermissionGroupIds()) .eq(SaasPgroupRoleRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); if (CollectionUtils.isEmpty(relations)) { - throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在"); + throw new ServiceException("权限集不存在"); } List deleteGroupIds = relations.stream().map(SaasPgroupRoleRelation::getGroupId).sorted().collect(Collectors.toList()); List groups = permissionGroupDao.lambdaQuery() .in(SaasPermissionGroup::getId, deleteGroupIds) .eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); if (groups.stream().anyMatch(e -> !Objects.equals(e.getIsCommon(), PermissionGroupType.SPECIAL.getCode()))) { - throw new BizException(BaseCode.BAD_REQUEST, "只能删除例外权限集"); + throw new ServiceException("只能删除例外权限集"); } //删除角色关联 pgroupRoleRelationDao.removeByIds(relations.stream().map(SaasPgroupRoleRelation::getId).sorted().collect(Collectors.toList())); @@ -390,7 +289,7 @@ public class PermissionGroupImpl implements PermissionGroupService { // 验证角色是否存在 SaasRole saasRole = saasRoleDao.getById(permissionGroup.getRoleId()); if (Objects.isNull(saasRole)) { - throw new BizException(BaseCode.BAD_REQUEST, "权限集不存在"); + throw new ServiceException("权限集不存在"); } if (Objects.nonNull(permissionGroup.getId())) { int relationCount = pgroupRoleRelationDao.lambdaQuery() @@ -398,7 +297,7 @@ public class PermissionGroupImpl implements PermissionGroupService { .eq(SaasPgroupRoleRelation::getGroupId, permissionGroup.getId()) .eq(SaasPgroupRoleRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).count(); if (relationCount == 0) { - throw new BizException(BaseCode.BAD_REQUEST, "角色和权限组不存在关联关系"); + throw new ServiceException("角色和权限组不存在关联关系"); } } validPermissionGroupScope(permissionGroup); @@ -426,7 +325,7 @@ public class PermissionGroupImpl implements PermissionGroupService { Optional repeatName = groups.stream().filter(g -> !Objects.equals(g.getId(), saasPermissionGroup.getId()) && StringUtils.equalsIgnoreCase(saasPermissionGroup.getName(), g.getName())) .findFirst(); if (repeatName.isPresent()) { - throw new BizException(BaseCode.BAD_REQUEST, "同角色,分组名称不能重复"); + throw new ServiceException("同角色,分组名称不能重复"); } } return saasPermissionGroup; @@ -441,7 +340,7 @@ public class PermissionGroupImpl implements PermissionGroupService { List selectedOu = permissionGroup.getSelectedOu(); Set scopeTypes = new HashSet<>(); if (CollectionUtils.isEmpty(selectedWorkspace) && CollectionUtils.isEmpty(selectedOu)) { - throw new BizException(BaseCode.BAD_REQUEST, "例外不能为空"); + throw new ServiceException("例外不能为空"); } if (CollectionUtils.isNotEmpty(selectedWorkspace)) { Map> selectedWorkspaceMap = selectedWorkspace.stream() @@ -449,10 +348,10 @@ public class PermissionGroupImpl implements PermissionGroupService { List includeScopes = Optional.ofNullable(selectedWorkspaceMap.get(PermissionScope.INCLUDE.getCode())).orElse(new ArrayList<>()); List excludeScopes = Optional.ofNullable(selectedWorkspaceMap.get(PermissionScope.EXCLUDE.getCode())).orElse(new ArrayList<>()); if (includeScopes.size() + excludeScopes.size() != selectedWorkspace.size()) { - throw new BizException(BaseCode.BAD_REQUEST, "选择类型设置错误"); + throw new ServiceException("选择类型设置错误"); } if (CollectionUtils.containsAny(includeScopes, excludeScopes)) { - throw new BizException(BaseCode.BAD_REQUEST, "项目部例外设置冲突"); + throw new ServiceException("项目部例外设置冲突"); } scopeTypes.addAll(selectedWorkspace.stream().map(SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO::getType).collect(Collectors.toSet())); } @@ -462,16 +361,16 @@ public class PermissionGroupImpl implements PermissionGroupService { List includeScopes = Optional.ofNullable(selectedOuMap.get(PermissionScope.INCLUDE.getCode())).orElse(new ArrayList<>()); List excludeScopes = Optional.ofNullable(selectedOuMap.get(PermissionScope.EXCLUDE.getCode())).orElse(new ArrayList<>()); if (includeScopes.size() + excludeScopes.size() != selectedOu.size()) { - throw new BizException(BaseCode.BAD_REQUEST, "选择类型设置错误"); + throw new ServiceException("选择类型设置错误"); } if (CollectionUtils.containsAny(includeScopes, excludeScopes)) { - throw new BizException(BaseCode.BAD_REQUEST, "单位例外设置冲突"); + throw new ServiceException("单位例外设置冲突"); } scopeTypes.addAll(selectedOu.stream().map(SaveOrUpdatePermissionGroupVO.PermissionGroupScopeVO::getType).collect(Collectors.toSet())); } // 移除这行,例外设置支持移除和包含 if (scopeTypes.size() > 1) { - throw new BizException(BaseCode.BAD_REQUEST, "例外类型不能同时指定适用与不适用"); + throw new ServiceException("例外类型不能同时指定适用与不适用"); } } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 957af5f1..52041aa5 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -1,8 +1,7 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; -import cn.axzo.framework.domain.web.BizException; -import cn.axzo.framework.domain.web.code.BaseCode; +import cn.axzo.basics.common.exception.ServiceException; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.model.enums.PermissionGroupType; import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; @@ -99,12 +98,13 @@ public class RoleServiceImpl implements RoleService { // 转map pgrouRelationMap = saasPgroupRoleRelations.stream().collect(Collectors.groupingBy(SaasPgroupRoleRelation::getRoleId)); // 查询权限集 - pGroupMap = permissionGroupService.query(QuerySaasPermissionGroupReq.builder() + pGroupMap = permissionGroupService.page(QuerySaasPermissionGroupReq.builder() .isCommon(isCommon) .ids(saasPgroupRoleRelations.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())) .workspaceId(workspaceId) .ouId(ouId) - .build()) + .fetchPage(Boolean.FALSE) + .build()).getList() // 转map .stream().collect(Collectors.groupingBy(SaasPermissionGroupVO::getId)); } @@ -253,10 +253,10 @@ public class RoleServiceImpl implements RoleService { } else { saasRole = saasRoleDao.getById(saveOrUpdateRole.getId()); if (Objects.isNull(saasRole)) { - throw new BizException(BaseCode.BAD_REQUEST, "角色不存在"); + throw new ServiceException("角色不存在"); } if (Objects.isNull(saveOrUpdateRole.getPermissionGroupId())) { - throw new BizException(BaseCode.BAD_REQUEST, "更新角色时权限集不能为空不存在"); + throw new ServiceException("更新角色时权限集不能为空不存在"); } } saasRole.setName(saveOrUpdateRole.getName()); @@ -281,7 +281,7 @@ public class RoleServiceImpl implements RoleService { .filter(e -> Objects.nonNull(e) && !Objects.equals(e.getId(), saveOrUpdateRole.getId()) && StringUtils.equalsIgnoreCase(e.getName(), saasRole.getName())) .findFirst(); if (repeatNameRole.isPresent()) { - throw new BizException(BaseCode.BAD_REQUEST, "同分组内不角色名称不能重复"); + throw new ServiceException("同分组内不角色名称不能重复"); } }); } @@ -300,7 +300,7 @@ public class RoleServiceImpl implements RoleService { return Objects.isNull(target); }).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(invalidFeatues)) { - throw new BizException(BaseCode.BAD_REQUEST, "权限点信息错误"); + throw new ServiceException("权限点信息错误"); } } @@ -335,7 +335,7 @@ public class RoleServiceImpl implements RoleService { return Objects.isNull(target) || !Objects.equals(target.getWorkspaceTypeCode(), rg.getWorkspaceTypeCode()); }).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(invalidRoleGroups)) { - throw new BizException(BaseCode.BAD_REQUEST, "角色分组信息错误"); + throw new ServiceException("角色分组信息错误"); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java index 82f558b6..b29df383 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java @@ -1,13 +1,9 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; -import cn.axzo.framework.domain.web.BizException; -import cn.axzo.framework.domain.web.code.BaseCode; -import cn.axzo.tyr.client.model.enums.PermissionGroupType; -import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup; -import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; -import cn.axzo.tyr.server.repository.dao.SaasPermissionGroupDao; +import cn.axzo.basics.common.exception.ServiceException; import cn.axzo.tyr.server.repository.dao.SaasPgroupRoleRelationDao; +import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; import cn.axzo.tyr.server.service.SaasPgroupRoleRelationService; import cn.hutool.json.JSONUtil; import lombok.RequiredArgsConstructor; @@ -18,7 +14,6 @@ import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Objects; -import java.util.Set; import java.util.stream.Collectors; @Slf4j @@ -41,7 +36,7 @@ public class SaasPgroupRoleRelationServiceImpl implements SaasPgroupRoleRelation // 通用权限集已经 存在 return; }else { - throw new BizException(BaseCode.BAD_REQUEST,"传入的权限集id与已存在的通用权限集id不一致 req{}", JSONUtil.toJsonStr(commonRelation)); + throw new ServiceException(String.format("传入的权限集id与已存在的通用权限集id不一致 req : %s", JSONUtil.toJsonStr(commonRelation))); } } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java index 35318bf7..0d3cc20d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleGroupServiceImpl.java @@ -1,8 +1,7 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; -import cn.axzo.framework.domain.web.BizException; -import cn.axzo.framework.domain.web.code.BaseCode; +import cn.axzo.basics.common.exception.ServiceException; import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; import cn.axzo.tyr.server.repository.dao.SaasRoleGroupDao; @@ -100,7 +99,7 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value) .count(); if (relationCount > 0) { - throw new BizException(BaseCode.BAD_REQUEST, "分组关联角色,不能删除"); + throw new ServiceException("分组关联角色,不能删除"); } saasRoleGroupDao.delete(ids); } @@ -117,7 +116,7 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { saasRoleGroup = saasRoleGroupDao.lambdaQuery().eq(SaasRoleGroup::getId, req.getId()) .eq(SaasRoleGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).one(); if (Objects.isNull(saasRoleGroup)) { - throw new BizException(BaseCode.BAD_REQUEST, "角色分组不存在"); + throw new ServiceException("角色分组不存在"); } } List groups = saasRoleGroupDao.lambdaQuery().eq(SaasRoleGroup::getWorkspaceTypeCode, req.getWorkspaceTypeCode()) @@ -126,7 +125,7 @@ public class SaasRoleGroupServiceImpl implements SaasRoleGroupService { Optional repeatGroupName = groups.stream() .filter(g -> !Objects.equals(g.getId(), req.getId()) && StringUtils.equalsIgnoreCase(g.getName(), req.getName())).findFirst(); if (repeatGroupName.isPresent()) { - throw new BizException(BaseCode.BAD_REQUEST, "同工作台类型内,分组名称不能重复"); + throw new ServiceException("同工作台类型内,分组名称不能重复"); } } // 拼接ouTypeCode字符串 From 712cfa0b86ad457bf0d5cf8c79153c4dbfe99d37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Sat, 16 Sep 2023 16:13:38 +0800 Subject: [PATCH 154/186] fix bug:npe --- .../cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index 75590ea8..b69438e4 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -122,7 +122,7 @@ public class PermissionGroupImpl implements PermissionGroupService { .in(SaasPgroupPermissionRelation::getGroupId, groupIds) .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) .list(); - List feature = null; + List feature = new ArrayList<>(); if (CollectionUtils.isNotEmpty(permissionList)) { // 查询featureCode feature = featureService.listNodesByIds(permissionList.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())); From 8087854336325c8adb6c63e0be5e4de9b8a21885 Mon Sep 17 00:00:00 2001 From: yangsong Date: Sat, 16 Sep 2023 17:49:54 +0800 Subject: [PATCH 155/186] =?UTF-8?q?=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/exception/ExceptionController.java | 34 +++++++++++++++++++ .../ServiceExceptionResultHandler.java | 6 +--- .../server/service/impl/RoleUserService.java | 8 ++--- .../impl/SaasRoleUserRelationServiceImpl.java | 11 ------ 4 files changed, 39 insertions(+), 20 deletions(-) create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ExceptionController.java diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ExceptionController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ExceptionController.java new file mode 100644 index 00000000..5e7a49c3 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ExceptionController.java @@ -0,0 +1,34 @@ +package cn.axzo.tyr.server.config.exception; + +import cn.axzo.basics.common.exception.ServiceException; +import cn.axzo.framework.domain.web.result.ApiResult; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import java.util.Set; + +@RestControllerAdvice +@Slf4j +public class ExceptionController { + @ExceptionHandler(ServiceException.class) + public ApiResult exceptionHandler(ServiceException e) { + log.info("业务异常", e); + return ApiResult.err(e.getErrorCode(), e.getMessage()); + } + + @ExceptionHandler(ConstraintViolationException.class) + @ResponseBody + public ApiResult handleConstraintViolationException(ConstraintViolationException exception) { + Set> violations = exception.getConstraintViolations(); + StringBuilder builder = new StringBuilder(); + for (ConstraintViolation violation : violations) { + builder.append(violation.getMessage()); + break; + } + return ApiResult.err(builder.toString()); + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ServiceExceptionResultHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ServiceExceptionResultHandler.java index 776cd886..1b4e0f7b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ServiceExceptionResultHandler.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ServiceExceptionResultHandler.java @@ -7,9 +7,6 @@ import cn.axzo.framework.autoconfigure.web.exception.handler.AbstractExceptionAp import cn.axzo.framework.domain.web.code.IRespCode; import cn.axzo.framework.domain.web.code.RespCode; import cn.axzo.framework.domain.web.result.ApiResult; -import cn.azxo.framework.common.model.CommonResponse; -import org.springframework.stereotype.Component; -import org.springframework.validation.BindException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; @@ -24,7 +21,7 @@ import java.util.Set; * @author wangli * @since 2023/9/11 11:39 */ -@Component +//@Component public class ServiceExceptionResultHandler extends AbstractExceptionApiResultHandler { public ServiceExceptionResultHandler(RespErrorCodeMappingProperties properties) { super(properties); @@ -46,5 +43,4 @@ public class ServiceExceptionResultHandler extends AbstractExceptionApiResultHan } return ApiResult.err(builder.toString()); } - } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java index baaab49d..c5ab1f40 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java @@ -1,16 +1,16 @@ package cn.axzo.tyr.server.service.impl; -import cn.axzo.framework.domain.ServiceException; +import cn.axzo.basics.common.exception.ServiceException; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.common.enums.RoleTypeEnum; import cn.axzo.tyr.client.model.BaseWorkspaceModel; import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.client.model.roleuser.req.DeleteRoleUserParam; import cn.axzo.tyr.client.model.roleuser.req.RoleUserReq; -import cn.axzo.tyr.client.common.enums.RoleTypeEnum; -import cn.axzo.tyr.server.repository.entity.SaasRole; -import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; import cn.axzo.tyr.server.repository.dao.SaasRoleDao; import cn.axzo.tyr.server.repository.dao.SaasRoleUserRelationDao; +import cn.axzo.tyr.server.repository.entity.SaasRole; +import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; import cn.axzo.tyr.server.service.SaasRoleUserService; import cn.hutool.core.collection.CollectionUtil; import lombok.RequiredArgsConstructor; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java index 348b58f4..2f27b378 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasRoleUserRelationServiceImpl.java @@ -1,34 +1,23 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; -import cn.axzo.framework.domain.ServiceException; -import cn.axzo.framework.domain.web.BizException; -import cn.axzo.framework.domain.web.code.BaseCode; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; -import cn.axzo.tyr.client.common.enums.RoleTypeEnum; -import cn.axzo.tyr.client.model.BaseWorkspaceModel; -import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserRelationDTO; -import cn.axzo.tyr.client.model.roleuser.req.DeleteRoleUserParam; import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; import cn.axzo.tyr.server.repository.dao.SaasRoleDao; import cn.axzo.tyr.server.repository.dao.SaasRoleUserRelationDao; -import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; import cn.axzo.tyr.server.service.SaasRoleUserRelationService; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; -import java.util.stream.Stream; /** * @author haiyangjin From 3593a17951dadd34260978de447c6c42d9949d16 Mon Sep 17 00:00:00 2001 From: yangsong Date: Sat, 16 Sep 2023 18:17:12 +0800 Subject: [PATCH 156/186] =?UTF-8?q?=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/exception/ExceptionController.java | 34 ------------------- .../ServiceExceptionResultHandler.java | 9 ++++- 2 files changed, 8 insertions(+), 35 deletions(-) delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ExceptionController.java diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ExceptionController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ExceptionController.java deleted file mode 100644 index 5e7a49c3..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ExceptionController.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.axzo.tyr.server.config.exception; - -import cn.axzo.basics.common.exception.ServiceException; -import cn.axzo.framework.domain.web.result.ApiResult; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestControllerAdvice; - -import javax.validation.ConstraintViolation; -import javax.validation.ConstraintViolationException; -import java.util.Set; - -@RestControllerAdvice -@Slf4j -public class ExceptionController { - @ExceptionHandler(ServiceException.class) - public ApiResult exceptionHandler(ServiceException e) { - log.info("业务异常", e); - return ApiResult.err(e.getErrorCode(), e.getMessage()); - } - - @ExceptionHandler(ConstraintViolationException.class) - @ResponseBody - public ApiResult handleConstraintViolationException(ConstraintViolationException exception) { - Set> violations = exception.getConstraintViolations(); - StringBuilder builder = new StringBuilder(); - for (ConstraintViolation violation : violations) { - builder.append(violation.getMessage()); - break; - } - return ApiResult.err(builder.toString()); - } -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ServiceExceptionResultHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ServiceExceptionResultHandler.java index 1b4e0f7b..244828f6 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ServiceExceptionResultHandler.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/ServiceExceptionResultHandler.java @@ -7,6 +7,8 @@ import cn.axzo.framework.autoconfigure.web.exception.handler.AbstractExceptionAp import cn.axzo.framework.domain.web.code.IRespCode; import cn.axzo.framework.domain.web.code.RespCode; import cn.axzo.framework.domain.web.result.ApiResult; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; @@ -21,7 +23,7 @@ import java.util.Set; * @author wangli * @since 2023/9/11 11:39 */ -//@Component +@Component public class ServiceExceptionResultHandler extends AbstractExceptionApiResultHandler { public ServiceExceptionResultHandler(RespErrorCodeMappingProperties properties) { super(properties); @@ -32,6 +34,11 @@ public class ServiceExceptionResultHandler extends AbstractExceptionApiResultHan return new RespCode(String.valueOf(error.getErrorCode()), error.getMessage()); } + @Override + protected HttpStatus mappingHttpStatus(String code, ServiceException ex) { + return HttpStatus.OK; + } + @ExceptionHandler(ConstraintViolationException.class) @ResponseBody public ApiResult handleConstraintViolationException(ConstraintViolationException exception) { From c83fd1ef5c876aac0eb9fd294e2a8f391e3a1612 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Sat, 16 Sep 2023 18:17:29 +0800 Subject: [PATCH 157/186] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8E=A5=E5=8F=A3:?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E4=B8=BA=E8=B6=85=E7=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/tyr/client/feign/TyrSaasRoleApi.java | 8 +++++++- .../tyr/client/model/res/IsSuperAdminRes.java | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/res/IsSuperAdminRes.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java index a2c2cf21..f3ffa89f 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java @@ -3,6 +3,7 @@ package cn.axzo.tyr.client.feign; import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; +import cn.axzo.tyr.client.model.res.IsSuperAdminRes; import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; @@ -64,6 +65,11 @@ public interface TyrSaasRoleApi { @GetMapping("/api/saasRole/queryBatchByIdentityIdType") ApiResult> queryBatchByIdentityIdType(@RequestBody List req); - + /** + * 根据身份id身份类型查询是否为超管 + * @return + */ + @GetMapping("/api/saasRole/isSuperAdmin") + ApiResult> isSuperAdmin(@RequestBody List req); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/IsSuperAdminRes.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/IsSuperAdminRes.java new file mode 100644 index 00000000..f6457e10 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/IsSuperAdminRes.java @@ -0,0 +1,17 @@ +package cn.axzo.tyr.client.model.res; + +public class IsSuperAdminRes { + + Long identityId; + + /** + * 身份类型 1:工人 2:班组长 3:从业人员 4:监管人员 5:运营人员 + */ + Integer identityType; + + Long workspaceId; + + Long ouId; + + Boolean isSuperAdmin; +} From 6bf11e4f8d6db5e7b58fdae3dd9b1a411611b485 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Sat, 16 Sep 2023 18:18:27 +0800 Subject: [PATCH 158/186] fix method type --- .../main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java index f3ffa89f..9894c45f 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java @@ -62,14 +62,14 @@ public interface TyrSaasRoleApi { * 根据身份id身份类型查询权限列表(批量) * @return */ - @GetMapping("/api/saasRole/queryBatchByIdentityIdType") + @PostMapping("/api/saasRole/queryBatchByIdentityIdType") ApiResult> queryBatchByIdentityIdType(@RequestBody List req); /** * 根据身份id身份类型查询是否为超管 * @return */ - @GetMapping("/api/saasRole/isSuperAdmin") + @PostMapping("/api/saasRole/isSuperAdmin") ApiResult> isSuperAdmin(@RequestBody List req); } From 0b44d32c26fefafbff20e2861849f61aa0333c8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Sat, 16 Sep 2023 18:19:59 +0800 Subject: [PATCH 159/186] add implements --- .../axzo/tyr/server/controller/role/SaasRoleController.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java index 586fbe38..67b75cc0 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java @@ -5,6 +5,7 @@ import cn.axzo.framework.domain.web.result.ApiResult; import cn.axzo.tyr.client.feign.TyrSaasRoleApi; import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; +import cn.axzo.tyr.client.model.res.IsSuperAdminRes; import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; @@ -68,4 +69,9 @@ public class SaasRoleController implements TyrSaasRoleApi { return ApiResult.ok(roleService.queryBatchByIdentityIdType(req)); } + @Override + public ApiResult> isSuperAdmin(List req) { + return null; + } + } From 9907742993e6d7767486e0d5698394431d049fd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Sat, 16 Sep 2023 18:23:45 +0800 Subject: [PATCH 160/186] fix bug --- .../tyr/client/model/res/IsSuperAdminRes.java | 9 +++++++++ .../controller/role/SaasRoleController.java | 2 +- .../cn/axzo/tyr/server/service/RoleService.java | 3 +++ .../tyr/server/service/impl/RoleServiceImpl.java | 16 ++++++++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/IsSuperAdminRes.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/IsSuperAdminRes.java index f6457e10..d0f0f069 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/IsSuperAdminRes.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/IsSuperAdminRes.java @@ -1,5 +1,14 @@ package cn.axzo.tyr.client.model.res; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder public class IsSuperAdminRes { Long identityId; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java index 67b75cc0..45f3dd69 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java @@ -71,7 +71,7 @@ public class SaasRoleController implements TyrSaasRoleApi { @Override public ApiResult> isSuperAdmin(List req) { - return null; + return ApiResult.ok(roleService.isSuperAdmin(req)); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java index b563e4f9..8d17e03a 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java @@ -2,6 +2,7 @@ package cn.axzo.tyr.server.service; import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; +import cn.axzo.tyr.client.model.res.IsSuperAdminRes; import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; @@ -26,4 +27,6 @@ public interface RoleService { List queryBatchByIdentityIdType(List req); Long saveOrUpdate(SaveOrUpdateRoleVO saveOrUpdateRole); + + List isSuperAdmin(List req); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 52041aa5..146b2da2 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -8,6 +8,7 @@ import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; +import cn.axzo.tyr.client.model.res.IsSuperAdminRes; import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; import cn.axzo.tyr.client.model.vo.SaasRoleVO; @@ -244,6 +245,21 @@ public class RoleServiceImpl implements RoleService { return saasRole.getId(); } + @Override + public List isSuperAdmin(List req) { + List result = new ArrayList<>(); + req.forEach(e -> { +// result.add(QueryBatchByIdentityIdTypeRes.builder() +// .identityId(e.getIdentityId()) +// .identityType(e.getIdentityType()) +// .workspaceId(e.getWorkspaceId()) +// .ouId(e.getOuId()) +// .role(queryByIdentityIdType(e.getIdentityId(),e.getIdentityType(),e.getWorkspaceId(),e.getOuId())) +// .build()); + }); + return result; + } + private SaasRole validAndBuildRole(SaveOrUpdateRoleVO saveOrUpdateRole, Date now) { SaasRole saasRole; if (Objects.isNull(saveOrUpdateRole.getId())) { From 572bdcfc49a86e61dc1216b362cc215b19649b26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Sat, 16 Sep 2023 18:41:40 +0800 Subject: [PATCH 161/186] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=8E=A5=E5=8F=A3:is?= =?UTF-8?q?SuperAdmin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/service/impl/RoleServiceImpl.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 146b2da2..4fd92c0c 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -3,6 +3,7 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.basics.common.exception.ServiceException; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.common.enums.RoleTypeEnum; import cn.axzo.tyr.client.model.enums.PermissionGroupType; import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; @@ -249,13 +250,21 @@ public class RoleServiceImpl implements RoleService { public List isSuperAdmin(List req) { List result = new ArrayList<>(); req.forEach(e -> { -// result.add(QueryBatchByIdentityIdTypeRes.builder() -// .identityId(e.getIdentityId()) -// .identityType(e.getIdentityType()) -// .workspaceId(e.getWorkspaceId()) -// .ouId(e.getOuId()) -// .role(queryByIdentityIdType(e.getIdentityId(),e.getIdentityType(),e.getWorkspaceId(),e.getOuId())) -// .build()); + List roleIds = roleUserRelationDao.query(e.getIdentityId(), e.getIdentityType(), e.getWorkspaceId(), e.getOuId()).stream().map(SaasRoleUserRelation::getRoleId).collect(Collectors.toList()); + List list = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(roleIds)) { + list = saasRoleDao.lambdaQuery() + .in(BaseEntity::getId, roleIds) + .eq(SaasRole::getRoleType, RoleTypeEnum.SUPER_ADMIN.getValue()) + .list(); + } + result.add(IsSuperAdminRes.builder() + .identityId(e.getIdentityId()) + .identityType(e.getIdentityType()) + .workspaceId(e.getWorkspaceId()) + .ouId(e.getOuId()) + .isSuperAdmin(CollectionUtils.isNotEmpty(list)?true:false) + .build()); }); return result; } From 7e2cb2d11d2d6b716ee2c6b9f6f126fb9cf84da6 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Mon, 18 Sep 2023 10:13:36 +0800 Subject: [PATCH 162/186] =?UTF-8?q?update=20-=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E9=87=8D=E5=90=8D=E7=9B=B8=E5=85=B3=E7=9A=84?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/tyr/server/service/impl/ProductServiceImpl.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java index ead2f150..b1de1237 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java @@ -21,6 +21,7 @@ import org.springframework.util.StringUtils; import java.util.List; import java.util.Objects; +import java.util.Optional; /** * 产品相关 Service 接口实现 @@ -63,6 +64,11 @@ public class ProductServiceImpl implements ProductService { @Override public ApiResult add(ProductAddReq req) { + Optional optProduct = productModuleDao.lambdaQuery() + .eq(ProductModule::getProductName, req.getProductName()) + .eq(ProductModule::getDictWorkspaceTypeId, req.getDictWorkspaceTypeId()) + .oneOpt(); + AssertUtil.isTrue(!optProduct.isPresent(), "产品名称在相同工作台类型下不允许重复"); ProductModule productModule = BeanMapper.copyBean(req, ProductModule.class); productModuleDao.save(productModule); return ApiResult.ok(BeanMapper.copyBean(productModule, ProductVO.class)); @@ -71,6 +77,8 @@ public class ProductServiceImpl implements ProductService { @Override public ApiResult update(ProductUpdateReq req) { ProductModule productModule = productModuleDao.getById(req.getId()); + AssertUtil.isTrue(Objects.equals(req.getProductName(), productModule.getProductName()) + && Objects.equals(req.getDictWorkspaceTypeId(), productModule.getDictWorkspaceTypeId()), "产品名称在相同工作台类型下不允许重复"); BeanMapper.copyBeanIgnoreNull(req, () -> productModule); productModuleDao.updateById(productModule); return ApiResult.ok(BeanMapper.copyBeanIgnoreNull(productModule, ProductVO.class)); From 17b2bc9d7509afdc34cbbacbb351f447b635acc9 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Mon, 18 Sep 2023 10:19:18 +0800 Subject: [PATCH 163/186] =?UTF-8?q?update=20-=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E9=87=8D=E5=90=8D=E7=9B=B8=E5=85=B3=E7=9A=84?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/model/product/ProductUpdateReq.java | 2 +- .../axzo/tyr/server/service/impl/ProductServiceImpl.java | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java index 774f265e..0e09042e 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java @@ -23,7 +23,7 @@ public class ProductUpdateReq { * 产品 ID */ @NotNull(message = "产品 ID 不能为空") - private String id; + private Long id; /** * 产品名称 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java index b1de1237..4b6dd4c9 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java @@ -76,9 +76,12 @@ public class ProductServiceImpl implements ProductService { @Override public ApiResult update(ProductUpdateReq req) { + Optional optProduct = productModuleDao.lambdaQuery() + .eq(ProductModule::getProductName, req.getProductName()) + .eq(ProductModule::getDictWorkspaceTypeId, req.getDictWorkspaceTypeId()) + .oneOpt(); + AssertUtil.isTrue(!optProduct.isPresent() || Objects.equals(req.getId(), optProduct.get().getId()), "产品名称在相同工作台类型下不允许重复"); ProductModule productModule = productModuleDao.getById(req.getId()); - AssertUtil.isTrue(Objects.equals(req.getProductName(), productModule.getProductName()) - && Objects.equals(req.getDictWorkspaceTypeId(), productModule.getDictWorkspaceTypeId()), "产品名称在相同工作台类型下不允许重复"); BeanMapper.copyBeanIgnoreNull(req, () -> productModule); productModuleDao.updateById(productModule); return ApiResult.ok(BeanMapper.copyBeanIgnoreNull(productModule, ProductVO.class)); From ecc03c376dd121535084701657baedbd78926791 Mon Sep 17 00:00:00 2001 From: yangsong Date: Mon, 18 Sep 2023 10:21:29 +0800 Subject: [PATCH 164/186] =?UTF-8?q?=E5=85=81=E8=AE=B8=E5=B0=86=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=82=B9=E8=AE=BE=E7=BD=AE=E4=B8=BA=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SaasPgroupPermissionRelationService.java | 2 +- .../server/service/impl/PermissionGroupImpl.java | 3 ++- .../tyr/server/service/impl/RoleServiceImpl.java | 3 ++- .../SaasPgroupPermissionRelationServiceImpl.java | 16 ++++++++++------ 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupPermissionRelationService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupPermissionRelationService.java index ec30c0c0..a32f8627 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupPermissionRelationService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupPermissionRelationService.java @@ -5,5 +5,5 @@ import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; import java.util.List; public interface SaasPgroupPermissionRelationService { - void saveOrUpdate(List relations); + void saveOrUpdate(List groupIds, List relations); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index b69438e4..cebdaaab 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -19,6 +19,7 @@ import cn.axzo.tyr.server.service.SaasPermissionGroupScopeService; import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationService; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; @@ -182,7 +183,7 @@ public class PermissionGroupImpl implements PermissionGroupService { target.setUpdateBy(save.getOperatorId()); return target; }).collect(Collectors.toList()); - saasPgroupPermissionRelationService.saveOrUpdate(pgpRelations); + saasPgroupPermissionRelationService.saveOrUpdate(Lists.newArrayList(saasPermissionGroup.getId()), pgpRelations); } @Override diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 4fd92c0c..eb4c6c61 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -18,6 +18,7 @@ import cn.axzo.tyr.server.repository.dao.*; import cn.axzo.tyr.server.repository.entity.*; import cn.axzo.tyr.server.service.*; import cn.hutool.core.bean.BeanUtil; +import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; @@ -242,7 +243,7 @@ public class RoleServiceImpl implements RoleService { target.setUpdateBy(saveOrUpdateRole.getOperatorId()); return target; }).collect(Collectors.toList()); - saasPgroupPermissionRelationService.saveOrUpdate(pgpRelations); + saasPgroupPermissionRelationService.saveOrUpdate(Lists.newArrayList(saasPermissionGroup.getId()), pgpRelations); return saasRole.getId(); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java index db6ee22e..a52c86a6 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java @@ -1,8 +1,8 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; -import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao; +import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -22,20 +22,24 @@ public class SaasPgroupPermissionRelationServiceImpl implements SaasPgroupPermis @Override @Transactional(rollbackFor = Exception.class) - public void saveOrUpdate(List relations) { - if (CollectionUtils.isEmpty(relations)) { + public void saveOrUpdate(List groupIds, List relations) { + if (CollectionUtils.isEmpty(groupIds) && CollectionUtils.isEmpty(relations)) { return; } + // 移除权限点 + if (CollectionUtils.isEmpty(groupIds)) { + groupIds = relations.stream().map(SaasPgroupPermissionRelation::getGroupId).distinct().sorted().collect(Collectors.toList()); + } List exists = saasPgroupPermissionRelationDao.lambdaQuery() - .in(SaasPgroupPermissionRelation::getGroupId, relations.stream().map(SaasPgroupPermissionRelation::getGroupId).distinct().sorted().collect(Collectors.toList())) - .eq(SaasPgroupPermissionRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + .in(SaasPgroupPermissionRelation::getGroupId, groupIds) + .eq(SaasPgroupPermissionRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); Collection insertList = CollectionUtils.subtract(relations, exists); Collection deleteList = CollectionUtils.subtract(exists, relations); if (CollectionUtils.isNotEmpty(insertList)) { saasPgroupPermissionRelationDao.saveBatch(insertList); } if (CollectionUtils.isNotEmpty(deleteList)) { - saasPgroupPermissionRelationDao.removeByIds(deleteList.stream().map(SaasPgroupPermissionRelation::getId).collect(Collectors.toList())); + saasPgroupPermissionRelationDao.removeByIds(deleteList.stream().map(SaasPgroupPermissionRelation::getId).sorted().collect(Collectors.toList())); } } } From 5ac3eb1089c930dc41e757ba2b05c07255503855 Mon Sep 17 00:00:00 2001 From: chenwenjian Date: Mon, 18 Sep 2023 11:12:11 +0800 Subject: [PATCH 165/186] =?UTF-8?q?DictWorkSpaceTypeEnum=E6=96=B0=E5=A2=9E?= =?UTF-8?q?team=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/model/enums/DictWorkSpaceTypeEnum.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DictWorkSpaceTypeEnum.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DictWorkSpaceTypeEnum.java index c9a963b1..135b9950 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DictWorkSpaceTypeEnum.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/enums/DictWorkSpaceTypeEnum.java @@ -27,7 +27,13 @@ public enum DictWorkSpaceTypeEnum { /** * OMS工作台 */ - OMS("oms", "OMS工作台"); + OMS("oms", "OMS工作台"), + + /** + * 班组工作台 + */ + TEAM("team","班组工作台") + ; @EnumValue @JsonValue From c3750cf92c73149c0d584abb5cb17863353ffd39 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Mon, 18 Sep 2023 11:14:48 +0800 Subject: [PATCH 166/186] =?UTF-8?q?debug(=E6=9D=83=E9=99=90=E7=82=B9):=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=A0=91=E5=BD=A2=E6=8E=A5=E5=8F=A3=E8=80=97?= =?UTF-8?q?=E6=97=B6=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/PermissionPointServiceImpl.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index f141e1c5..3b61284a 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -1,6 +1,7 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.BeanMapper; +import cn.axzo.basics.common.util.StopWatchUtil; import cn.axzo.basics.common.util.TreeUtil; import cn.axzo.framework.domain.web.BizException; import cn.axzo.framework.domain.web.code.BaseCode; @@ -55,31 +56,42 @@ public class PermissionPointServiceImpl implements PermissionPointService { @Override public List listTreeNodes(PermissionPointTreeQueryReq request) { + StopWatchUtil watch = StopWatchUtil.createStarted("permission-point-tree"); + watch.start("dbQuery"); //构建查询条件 Wrapper queryWrapper = buildQueryWrapper(request); List list = saasFeatureDao.list(queryWrapper); + watch.stop(); //构建树形结构, 整体排序保证层级内的有序 - 优化点:构建树形结构时进行过滤 + watch.start("sort-build-tree"); List treeList = TreeUtil.buildTree(list.stream() .map(this::feature2Node) .sorted(Comparator.comparing(PermissionPointTreeNode::getSort)) .collect(Collectors.toList())); list = null; //for GC + watch.stop(); //搜索或需要按授权策略过滤 - 有额外的过滤条件 + watch.start("filter-node"); List nodesResult = filterTreeNode(request, treeList); + watch.stop(); //指定parent后不需要顶级的工作台 if (request.getParentId() != null || CollectionUtil.isEmpty(nodesResult)) { return nodesResult; } //顶级展示 - 非特殊过滤时,没有子节点也应该展示,否则无法新增 + watch.start("build-top"); boolean needAllTop = StrUtil.isBlank(request.getKeyword()) && CollectionUtil.isEmpty(request.getTerminalList()) && CollectionUtil.isEmpty(request.getWorkspaceType()) && CollectionUtil.isEmpty(request.getIds()); - return buildTopNodes(nodesResult, needAllTop); + List resultTree = buildTopNodes(nodesResult, needAllTop); + watch.stop(); + watch.prettyPrint(); + return resultTree; } private List buildTopNodes(List nodesResult, boolean needAllTop) { From 1f407110c6115ca9b152a16fcf4743f6f425763f Mon Sep 17 00:00:00 2001 From: yangsong Date: Mon, 18 Sep 2023 11:56:18 +0800 Subject: [PATCH 167/186] =?UTF-8?q?=E5=85=81=E8=AE=B8=E4=BE=8B=E5=A4=96?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E4=B8=BA=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/SaasPermissionGroupScopeService.java | 2 +- .../server/service/impl/PermissionGroupImpl.java | 5 +++-- .../impl/SaasPermissionGroupScopeServiceImpl.java | 15 +++++++++++---- .../SaasPgroupPermissionRelationServiceImpl.java | 4 ++++ 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPermissionGroupScopeService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPermissionGroupScopeService.java index 068d87ea..f5de1fbd 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPermissionGroupScopeService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPermissionGroupScopeService.java @@ -5,5 +5,5 @@ import cn.axzo.tyr.server.repository.entity.SaasPermissionGroupScope; import java.util.List; public interface SaasPermissionGroupScopeService { - void saveOrUpdate(List scopes); + void saveOrUpdate(List pgroupIds, List scopes); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index cebdaaab..6d1423af 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -227,7 +227,7 @@ public class PermissionGroupImpl implements PermissionGroupService { return scope; }).collect(Collectors.toList())); } - saasPermissionGroupScopeService.saveOrUpdate(scopes); + saasPermissionGroupScopeService.saveOrUpdate(Lists.newArrayList(saasPermissionGroup.getId()), scopes); return saasPermissionGroup.getId(); } @@ -341,7 +341,8 @@ public class PermissionGroupImpl implements PermissionGroupService { List selectedOu = permissionGroup.getSelectedOu(); Set scopeTypes = new HashSet<>(); if (CollectionUtils.isEmpty(selectedWorkspace) && CollectionUtils.isEmpty(selectedOu)) { - throw new ServiceException("例外不能为空"); + //throw new ServiceException("例外不能为空"); + return; } if (CollectionUtils.isNotEmpty(selectedWorkspace)) { Map> selectedWorkspaceMap = selectedWorkspace.stream() diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPermissionGroupScopeServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPermissionGroupScopeServiceImpl.java index 9f5be4bb..0081be38 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPermissionGroupScopeServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPermissionGroupScopeServiceImpl.java @@ -1,8 +1,8 @@ package cn.axzo.tyr.server.service.impl; import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; -import cn.axzo.tyr.server.repository.entity.SaasPermissionGroupScope; import cn.axzo.tyr.server.repository.dao.SaasPermissionGroupScopeDao; +import cn.axzo.tyr.server.repository.entity.SaasPermissionGroupScope; import cn.axzo.tyr.server.service.SaasPermissionGroupScopeService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -10,8 +10,10 @@ import org.apache.commons.collections.CollectionUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; @Slf4j @@ -21,12 +23,17 @@ public class SaasPermissionGroupScopeServiceImpl implements SaasPermissionGroupS private final SaasPermissionGroupScopeDao saasPermissionGroupScopeDao; @Override @Transactional(rollbackFor = Exception.class) - public void saveOrUpdate(List scopes) { - if (CollectionUtils.isEmpty(scopes)) { + public void saveOrUpdate(List pgroupIds, List scopes) { + if (CollectionUtils.isEmpty(pgroupIds) && CollectionUtils.isEmpty(scopes)) { return; } + if (CollectionUtils.isEmpty(pgroupIds)) { + pgroupIds = scopes.stream().map(SaasPermissionGroupScope::getPgroupId).distinct().sorted().collect(Collectors.toList()); + } else if (Objects.isNull(scopes)) { + scopes = new ArrayList<>(); + } List exists = saasPermissionGroupScopeDao.lambdaQuery() - .in(SaasPermissionGroupScope::getPgroupId, scopes.stream().map(SaasPermissionGroupScope::getPgroupId).distinct().sorted().collect(Collectors.toList())) + .in(SaasPermissionGroupScope::getPgroupId, pgroupIds) .eq(SaasPermissionGroupScope::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); Collection insertList = CollectionUtils.subtract(scopes, exists); Collection deleteList = CollectionUtils.subtract(exists, scopes); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java index a52c86a6..65106522 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupPermissionRelationServiceImpl.java @@ -10,8 +10,10 @@ import org.apache.commons.collections.CollectionUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; @Slf4j @@ -29,6 +31,8 @@ public class SaasPgroupPermissionRelationServiceImpl implements SaasPgroupPermis // 移除权限点 if (CollectionUtils.isEmpty(groupIds)) { groupIds = relations.stream().map(SaasPgroupPermissionRelation::getGroupId).distinct().sorted().collect(Collectors.toList()); + } else if (Objects.isNull(relations)){ + relations = new ArrayList<>(); } List exists = saasPgroupPermissionRelationDao.lambdaQuery() .in(SaasPgroupPermissionRelation::getGroupId, groupIds) From b24dcbaf0aebba92f157590ec8397864bb2bd989 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Mon, 18 Sep 2023 13:43:34 +0800 Subject: [PATCH 168/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=20=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=B1=82=E7=BA=A7=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/model/permission/PermissionPointTreeQueryReq.java | 3 +++ .../tyr/server/service/impl/PermissionPointServiceImpl.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java index 28ed8ce6..1b497606 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java @@ -32,4 +32,7 @@ public class PermissionPointTreeQueryReq { /** 权限点terminal对应workspaceType **/ private List workspaceType; + + /** 权限点展示最大层级 **/ + private Integer maxLevel; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 3b61284a..a23ca5a3 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -90,7 +90,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { && CollectionUtil.isEmpty(request.getIds()); List resultTree = buildTopNodes(nodesResult, needAllTop); watch.stop(); - watch.prettyPrint(); + log.info("permission-point-tree cost:{}", watch.prettyPrint()); return resultTree; } From 448634b3b5cc01ea15373731a81464277a750911 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Mon, 18 Sep 2023 13:51:41 +0800 Subject: [PATCH 169/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=20=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/permission/PermissionPointTreeQueryReq.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java index 1b497606..7cbcc53e 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java @@ -33,6 +33,8 @@ public class PermissionPointTreeQueryReq { /** 权限点terminal对应workspaceType **/ private List workspaceType; - /** 权限点展示最大层级 **/ - private Integer maxLevel; + /** 权限点元素类型 + * 0.菜单 1.页面 3按钮 + * **/ + private Integer featureType; } From 5a272c98fcef0ee93b471834fb440ef7279a82bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Mon, 18 Sep 2023 14:25:38 +0800 Subject: [PATCH 170/186] =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=B8=85=E6=B4=97job?= =?UTF-8?q?=E6=9A=82=E6=97=B6=E5=85=B3=E9=97=AD=E9=80=BB=E8=BE=91,?= =?UTF-8?q?=E9=AA=8C=E8=AF=81dev=E7=8E=AF=E5=A2=83=E8=BF=9E=E9=80=9A?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/server/job/OMSRoleJobHandler.java | 228 +++++++++--------- 1 file changed, 114 insertions(+), 114 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java index b7167aea..02e45693 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java @@ -59,120 +59,120 @@ public class OMSRoleJobHandler extends IJobHandler { @XxlJob("OMSRoleJobHandler") public ReturnT execute(String s) throws Exception { log.info("OMSRoleJobHandler start"); - // 创建角色分组 - SaasRoleGroup roleGroup = new SaasRoleGroup(); - roleGroup.setWorkspaceTypeCode("6"); - roleGroup.setOuTypeCode("6"); - roleGroup.setName("管理员"); - roleGroup.setWorkspaceId(-1l); - roleGroup.setOuId(-1l); - roleGroup.setSort(1); - roleGroupDao.save(roleGroup); - // 查询OMS的角色 workspaceType=6 OMS的角色 - List oldRole = roleDao.lambdaQuery() - .eq(SaasRole::getWorkspaceType, 6) - .notIn(SaasRole::getRoleType, "super_admin") - .list(); - // 重置老角色多余的字段 - oldRole.forEach(e -> { - e.setWorkspaceId(-1l); - e.setOwnerOuId(-1l); - }); - roleDao.updateBatchById(oldRole); - // 保存角色分组关联关系 - List roleGroupRelation = oldRole.stream().map(e -> { - SaasRoleGroupRelation saasRoleGroupRelation = new SaasRoleGroupRelation(); - saasRoleGroupRelation.setRoleId(e.getId()); - saasRoleGroupRelation.setSaasRoleGroupId(roleGroup.getId()); - return saasRoleGroupRelation; - }).collect(Collectors.toList()); - roleGroupRelationDao.saveBatch(roleGroupRelation); - // 查询角色关联的角色,打包成新的权限集 - ArrayList deletePgroup = new ArrayList<>(); - ArrayList deletePgroupRoleRelation = new ArrayList<>(); - ArrayList deletePgroupPermissionRelation = new ArrayList<>(); - oldRole.forEach(role -> { - List pgroupRoleRelation = pgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, role.getId()).list(); - if (CollectionUtils.isEmpty(pgroupRoleRelation)) { - return; - } - List permissionGroup = saasPermissionGroupDao.lambdaQuery().in(BaseEntity::getId, pgroupRoleRelation.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())).list(); - if (CollectionUtils.isEmpty(permissionGroup)) { - // 删除角色权限集关联关系 - deletePgroupRoleRelation.addAll(pgroupRoleRelation); - return; - } - List pgroupPermissionRelation = pgroupPermissionRelationDao.lambdaQuery().in(SaasPgroupPermissionRelation::getGroupId, permissionGroup.stream().map(BaseEntity::getId).collect(Collectors.toList())).list(); - if (CollectionUtils.isEmpty(pgroupPermissionRelation)) { - // 如果没查到权限则表示当前权限集是无意义的,删掉 - deletePgroup.addAll(permissionGroup); - // 删除角色权限集关联关系 - deletePgroupRoleRelation.addAll(pgroupRoleRelation); - return; - } - List feature = featureDao.lambdaQuery().in(BaseEntity::getId, pgroupPermissionRelation.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())).list(); - if (CollectionUtils.isEmpty(feature)) { - // 删除权限集权限关联关系 - deletePgroupPermissionRelation.addAll(pgroupPermissionRelation); - // 如果没查到权限则表示当前权限集是无意义的,删掉 - deletePgroup.addAll(permissionGroup); - // 删除角色权限集关联关系 - deletePgroupRoleRelation.addAll(pgroupRoleRelation); - return; - } - // 创建新的权限集 - SaasPermissionGroup saasPermissionGroup = new SaasPermissionGroup(); - saasPermissionGroup.setName("通用权限"); - saasPermissionGroup.setDescription(""); - saasPermissionGroup.setCreateBy(-1L); - saasPermissionGroup.setUpdateBy(-1L); - saasPermissionGroup.setType("feature"); - saasPermissionGroup.setIsCommon(1); - saasPermissionGroupDao.save(saasPermissionGroup); - deletePgroup.addAll(permissionGroup); - // 创建新的角色权限集关联关系 - SaasPgroupRoleRelation saasPgroupRoleRelation = new SaasPgroupRoleRelation(); - saasPgroupRoleRelation.setRoleId(role.getId()); - saasPgroupRoleRelation.setGroupId(saasPermissionGroup.getId()); - saasPgroupRoleRelation.setCreateBy(-1L); - saasPgroupRoleRelation.setUpdateBy(-1L); - pgroupRoleRelationDao.save(saasPgroupRoleRelation); - // 创建新的权限集权限关联关系 - feature.forEach(e -> { - SaasPgroupPermissionRelation saasPgroupPermissionRelation = new SaasPgroupPermissionRelation(); - saasPgroupPermissionRelation.setGroupId(saasPermissionGroup.getId()); - saasPgroupPermissionRelation.setFeatureId(e.getId()); - saasPgroupPermissionRelation.setCreateBy(-1L); - saasPgroupPermissionRelation.setUpdateBy(-1L); - pgroupPermissionRelationDao.save(saasPgroupPermissionRelation); - }); - // 暂存待删除数据 - deletePgroupPermissionRelation.addAll(pgroupPermissionRelation); - // 暂存待删除数据 - deletePgroupRoleRelation.addAll(pgroupRoleRelation); - }); - // 所有的数据都不能在循环中删,要不然下一次循环中就查不到了 - // 删除老的权限集权限关联关系 - deletePgroupPermissionRelation.forEach(e -> { - pgroupPermissionRelationDao.lambdaUpdate() - .eq(BaseEntity::getId, e.getId()) - .set(BaseEntity::getIsDelete, e.getId()) - .update(); - }); - // 删除老的角色权限集关联关系 - deletePgroupRoleRelation.forEach(e -> { - pgroupRoleRelationDao.lambdaUpdate() - .eq(BaseEntity::getId, e.getId()) - .set(BaseEntity::getIsDelete, e.getId()) - .update(); - }); - // 删除权限集 - deletePgroup.forEach(e -> { - saasPermissionGroupDao.lambdaUpdate() - .eq(BaseEntity::getId, e.getId()) - .set(BaseEntity::getIsDelete, e.getId()) - .update(); - }); +// // 创建角色分组 +// SaasRoleGroup roleGroup = new SaasRoleGroup(); +// roleGroup.setWorkspaceTypeCode("6"); +// roleGroup.setOuTypeCode("6"); +// roleGroup.setName("管理员"); +// roleGroup.setWorkspaceId(-1l); +// roleGroup.setOuId(-1l); +// roleGroup.setSort(1); +// roleGroupDao.save(roleGroup); +// // 查询OMS的角色 workspaceType=6 OMS的角色 +// List oldRole = roleDao.lambdaQuery() +// .eq(SaasRole::getWorkspaceType, 6) +// .notIn(SaasRole::getRoleType, "super_admin") +// .list(); +// // 重置老角色多余的字段 +// oldRole.forEach(e -> { +// e.setWorkspaceId(-1l); +// e.setOwnerOuId(-1l); +// }); +// roleDao.updateBatchById(oldRole); +// // 保存角色分组关联关系 +// List roleGroupRelation = oldRole.stream().map(e -> { +// SaasRoleGroupRelation saasRoleGroupRelation = new SaasRoleGroupRelation(); +// saasRoleGroupRelation.setRoleId(e.getId()); +// saasRoleGroupRelation.setSaasRoleGroupId(roleGroup.getId()); +// return saasRoleGroupRelation; +// }).collect(Collectors.toList()); +// roleGroupRelationDao.saveBatch(roleGroupRelation); +// // 查询角色关联的角色,打包成新的权限集 +// ArrayList deletePgroup = new ArrayList<>(); +// ArrayList deletePgroupRoleRelation = new ArrayList<>(); +// ArrayList deletePgroupPermissionRelation = new ArrayList<>(); +// oldRole.forEach(role -> { +// List pgroupRoleRelation = pgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, role.getId()).list(); +// if (CollectionUtils.isEmpty(pgroupRoleRelation)) { +// return; +// } +// List permissionGroup = saasPermissionGroupDao.lambdaQuery().in(BaseEntity::getId, pgroupRoleRelation.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())).list(); +// if (CollectionUtils.isEmpty(permissionGroup)) { +// // 删除角色权限集关联关系 +// deletePgroupRoleRelation.addAll(pgroupRoleRelation); +// return; +// } +// List pgroupPermissionRelation = pgroupPermissionRelationDao.lambdaQuery().in(SaasPgroupPermissionRelation::getGroupId, permissionGroup.stream().map(BaseEntity::getId).collect(Collectors.toList())).list(); +// if (CollectionUtils.isEmpty(pgroupPermissionRelation)) { +// // 如果没查到权限则表示当前权限集是无意义的,删掉 +// deletePgroup.addAll(permissionGroup); +// // 删除角色权限集关联关系 +// deletePgroupRoleRelation.addAll(pgroupRoleRelation); +// return; +// } +// List feature = featureDao.lambdaQuery().in(BaseEntity::getId, pgroupPermissionRelation.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())).list(); +// if (CollectionUtils.isEmpty(feature)) { +// // 删除权限集权限关联关系 +// deletePgroupPermissionRelation.addAll(pgroupPermissionRelation); +// // 如果没查到权限则表示当前权限集是无意义的,删掉 +// deletePgroup.addAll(permissionGroup); +// // 删除角色权限集关联关系 +// deletePgroupRoleRelation.addAll(pgroupRoleRelation); +// return; +// } +// // 创建新的权限集 +// SaasPermissionGroup saasPermissionGroup = new SaasPermissionGroup(); +// saasPermissionGroup.setName("通用权限"); +// saasPermissionGroup.setDescription(""); +// saasPermissionGroup.setCreateBy(-1L); +// saasPermissionGroup.setUpdateBy(-1L); +// saasPermissionGroup.setType("feature"); +// saasPermissionGroup.setIsCommon(1); +// saasPermissionGroupDao.save(saasPermissionGroup); +// deletePgroup.addAll(permissionGroup); +// // 创建新的角色权限集关联关系 +// SaasPgroupRoleRelation saasPgroupRoleRelation = new SaasPgroupRoleRelation(); +// saasPgroupRoleRelation.setRoleId(role.getId()); +// saasPgroupRoleRelation.setGroupId(saasPermissionGroup.getId()); +// saasPgroupRoleRelation.setCreateBy(-1L); +// saasPgroupRoleRelation.setUpdateBy(-1L); +// pgroupRoleRelationDao.save(saasPgroupRoleRelation); +// // 创建新的权限集权限关联关系 +// feature.forEach(e -> { +// SaasPgroupPermissionRelation saasPgroupPermissionRelation = new SaasPgroupPermissionRelation(); +// saasPgroupPermissionRelation.setGroupId(saasPermissionGroup.getId()); +// saasPgroupPermissionRelation.setFeatureId(e.getId()); +// saasPgroupPermissionRelation.setCreateBy(-1L); +// saasPgroupPermissionRelation.setUpdateBy(-1L); +// pgroupPermissionRelationDao.save(saasPgroupPermissionRelation); +// }); +// // 暂存待删除数据 +// deletePgroupPermissionRelation.addAll(pgroupPermissionRelation); +// // 暂存待删除数据 +// deletePgroupRoleRelation.addAll(pgroupRoleRelation); +// }); +// // 所有的数据都不能在循环中删,要不然下一次循环中就查不到了 +// // 删除老的权限集权限关联关系 +// deletePgroupPermissionRelation.forEach(e -> { +// pgroupPermissionRelationDao.lambdaUpdate() +// .eq(BaseEntity::getId, e.getId()) +// .set(BaseEntity::getIsDelete, e.getId()) +// .update(); +// }); +// // 删除老的角色权限集关联关系 +// deletePgroupRoleRelation.forEach(e -> { +// pgroupRoleRelationDao.lambdaUpdate() +// .eq(BaseEntity::getId, e.getId()) +// .set(BaseEntity::getIsDelete, e.getId()) +// .update(); +// }); +// // 删除权限集 +// deletePgroup.forEach(e -> { +// saasPermissionGroupDao.lambdaUpdate() +// .eq(BaseEntity::getId, e.getId()) +// .set(BaseEntity::getIsDelete, e.getId()) +// .update(); +// }); log.info("OMSRoleJobHandler end"); return ReturnT.SUCCESS; } From 11d535da2a8b6947fb8e3ffd2501a55ccbc684a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Mon, 18 Sep 2023 14:48:22 +0800 Subject: [PATCH 171/186] =?UTF-8?q?=E6=B7=BB=E5=8A=A0XxlJobConfig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/tyr/server/config/XxlJobConfig.java | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/config/XxlJobConfig.java diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/config/XxlJobConfig.java b/tyr-server/src/main/java/cn/axzo/tyr/server/config/XxlJobConfig.java new file mode 100644 index 00000000..44dfeabc --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/config/XxlJobConfig.java @@ -0,0 +1,76 @@ +package cn.axzo.tyr.server.config; + +import cn.azxo.framework.common.logger.JobLoggerTemplate; +import cn.azxo.framework.common.service.JobParamResolver; +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * xxl-job config + * + * @author xuxueli 2017-04-28 + */ +@Configuration +public class XxlJobConfig { + + Logger logger = LoggerFactory.getLogger(XxlJobConfig.class); + + /** + * //@Value("http://dev-xxl-job.axzo.cn/xxl-job-admin") + */ + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + + @Value("${xxl.job.executor.appname}") + private String appName; + + @Value("") + private String ip; + + @Value("${xxl.job.executor.port}") + private int port; + + + /** + * // @Value("${xxl.job.accessToken}") + */ + @Value("") + private String accessToken; + + @Value("") + private String logPath; + + @Value("-1") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + logger.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appName); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + + return xxlJobSpringExecutor; + } + + @Bean("jobParamResolver") + public JobParamResolver jobParamResolver(){ + return new JobParamResolver(); + } + + @Bean("jobLoggerTemplate") + public JobLoggerTemplate jobLoggerTemplate(){ + return new JobLoggerTemplate(); + } + +} + From a1d60a09a6837b240e39af84f1e5ba65b3f38ea9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Mon, 18 Sep 2023 15:08:20 +0800 Subject: [PATCH 172/186] =?UTF-8?q?xxl-job=E7=8E=AF=E5=A2=83=E8=81=94?= =?UTF-8?q?=E9=80=9A=E6=B5=8B=E8=AF=95=E5=AE=8C=E6=AF=95,=E5=9B=9E?= =?UTF-8?q?=E5=A4=8D=E8=A7=92=E8=89=B2=E6=B8=85=E6=B4=97job=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/server/job/OMSRoleJobHandler.java | 228 +++++++++--------- 1 file changed, 114 insertions(+), 114 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java index 02e45693..b7167aea 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/job/OMSRoleJobHandler.java @@ -59,120 +59,120 @@ public class OMSRoleJobHandler extends IJobHandler { @XxlJob("OMSRoleJobHandler") public ReturnT execute(String s) throws Exception { log.info("OMSRoleJobHandler start"); -// // 创建角色分组 -// SaasRoleGroup roleGroup = new SaasRoleGroup(); -// roleGroup.setWorkspaceTypeCode("6"); -// roleGroup.setOuTypeCode("6"); -// roleGroup.setName("管理员"); -// roleGroup.setWorkspaceId(-1l); -// roleGroup.setOuId(-1l); -// roleGroup.setSort(1); -// roleGroupDao.save(roleGroup); -// // 查询OMS的角色 workspaceType=6 OMS的角色 -// List oldRole = roleDao.lambdaQuery() -// .eq(SaasRole::getWorkspaceType, 6) -// .notIn(SaasRole::getRoleType, "super_admin") -// .list(); -// // 重置老角色多余的字段 -// oldRole.forEach(e -> { -// e.setWorkspaceId(-1l); -// e.setOwnerOuId(-1l); -// }); -// roleDao.updateBatchById(oldRole); -// // 保存角色分组关联关系 -// List roleGroupRelation = oldRole.stream().map(e -> { -// SaasRoleGroupRelation saasRoleGroupRelation = new SaasRoleGroupRelation(); -// saasRoleGroupRelation.setRoleId(e.getId()); -// saasRoleGroupRelation.setSaasRoleGroupId(roleGroup.getId()); -// return saasRoleGroupRelation; -// }).collect(Collectors.toList()); -// roleGroupRelationDao.saveBatch(roleGroupRelation); -// // 查询角色关联的角色,打包成新的权限集 -// ArrayList deletePgroup = new ArrayList<>(); -// ArrayList deletePgroupRoleRelation = new ArrayList<>(); -// ArrayList deletePgroupPermissionRelation = new ArrayList<>(); -// oldRole.forEach(role -> { -// List pgroupRoleRelation = pgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, role.getId()).list(); -// if (CollectionUtils.isEmpty(pgroupRoleRelation)) { -// return; -// } -// List permissionGroup = saasPermissionGroupDao.lambdaQuery().in(BaseEntity::getId, pgroupRoleRelation.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())).list(); -// if (CollectionUtils.isEmpty(permissionGroup)) { -// // 删除角色权限集关联关系 -// deletePgroupRoleRelation.addAll(pgroupRoleRelation); -// return; -// } -// List pgroupPermissionRelation = pgroupPermissionRelationDao.lambdaQuery().in(SaasPgroupPermissionRelation::getGroupId, permissionGroup.stream().map(BaseEntity::getId).collect(Collectors.toList())).list(); -// if (CollectionUtils.isEmpty(pgroupPermissionRelation)) { -// // 如果没查到权限则表示当前权限集是无意义的,删掉 -// deletePgroup.addAll(permissionGroup); -// // 删除角色权限集关联关系 -// deletePgroupRoleRelation.addAll(pgroupRoleRelation); -// return; -// } -// List feature = featureDao.lambdaQuery().in(BaseEntity::getId, pgroupPermissionRelation.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())).list(); -// if (CollectionUtils.isEmpty(feature)) { -// // 删除权限集权限关联关系 -// deletePgroupPermissionRelation.addAll(pgroupPermissionRelation); -// // 如果没查到权限则表示当前权限集是无意义的,删掉 -// deletePgroup.addAll(permissionGroup); -// // 删除角色权限集关联关系 -// deletePgroupRoleRelation.addAll(pgroupRoleRelation); -// return; -// } -// // 创建新的权限集 -// SaasPermissionGroup saasPermissionGroup = new SaasPermissionGroup(); -// saasPermissionGroup.setName("通用权限"); -// saasPermissionGroup.setDescription(""); -// saasPermissionGroup.setCreateBy(-1L); -// saasPermissionGroup.setUpdateBy(-1L); -// saasPermissionGroup.setType("feature"); -// saasPermissionGroup.setIsCommon(1); -// saasPermissionGroupDao.save(saasPermissionGroup); -// deletePgroup.addAll(permissionGroup); -// // 创建新的角色权限集关联关系 -// SaasPgroupRoleRelation saasPgroupRoleRelation = new SaasPgroupRoleRelation(); -// saasPgroupRoleRelation.setRoleId(role.getId()); -// saasPgroupRoleRelation.setGroupId(saasPermissionGroup.getId()); -// saasPgroupRoleRelation.setCreateBy(-1L); -// saasPgroupRoleRelation.setUpdateBy(-1L); -// pgroupRoleRelationDao.save(saasPgroupRoleRelation); -// // 创建新的权限集权限关联关系 -// feature.forEach(e -> { -// SaasPgroupPermissionRelation saasPgroupPermissionRelation = new SaasPgroupPermissionRelation(); -// saasPgroupPermissionRelation.setGroupId(saasPermissionGroup.getId()); -// saasPgroupPermissionRelation.setFeatureId(e.getId()); -// saasPgroupPermissionRelation.setCreateBy(-1L); -// saasPgroupPermissionRelation.setUpdateBy(-1L); -// pgroupPermissionRelationDao.save(saasPgroupPermissionRelation); -// }); -// // 暂存待删除数据 -// deletePgroupPermissionRelation.addAll(pgroupPermissionRelation); -// // 暂存待删除数据 -// deletePgroupRoleRelation.addAll(pgroupRoleRelation); -// }); -// // 所有的数据都不能在循环中删,要不然下一次循环中就查不到了 -// // 删除老的权限集权限关联关系 -// deletePgroupPermissionRelation.forEach(e -> { -// pgroupPermissionRelationDao.lambdaUpdate() -// .eq(BaseEntity::getId, e.getId()) -// .set(BaseEntity::getIsDelete, e.getId()) -// .update(); -// }); -// // 删除老的角色权限集关联关系 -// deletePgroupRoleRelation.forEach(e -> { -// pgroupRoleRelationDao.lambdaUpdate() -// .eq(BaseEntity::getId, e.getId()) -// .set(BaseEntity::getIsDelete, e.getId()) -// .update(); -// }); -// // 删除权限集 -// deletePgroup.forEach(e -> { -// saasPermissionGroupDao.lambdaUpdate() -// .eq(BaseEntity::getId, e.getId()) -// .set(BaseEntity::getIsDelete, e.getId()) -// .update(); -// }); + // 创建角色分组 + SaasRoleGroup roleGroup = new SaasRoleGroup(); + roleGroup.setWorkspaceTypeCode("6"); + roleGroup.setOuTypeCode("6"); + roleGroup.setName("管理员"); + roleGroup.setWorkspaceId(-1l); + roleGroup.setOuId(-1l); + roleGroup.setSort(1); + roleGroupDao.save(roleGroup); + // 查询OMS的角色 workspaceType=6 OMS的角色 + List oldRole = roleDao.lambdaQuery() + .eq(SaasRole::getWorkspaceType, 6) + .notIn(SaasRole::getRoleType, "super_admin") + .list(); + // 重置老角色多余的字段 + oldRole.forEach(e -> { + e.setWorkspaceId(-1l); + e.setOwnerOuId(-1l); + }); + roleDao.updateBatchById(oldRole); + // 保存角色分组关联关系 + List roleGroupRelation = oldRole.stream().map(e -> { + SaasRoleGroupRelation saasRoleGroupRelation = new SaasRoleGroupRelation(); + saasRoleGroupRelation.setRoleId(e.getId()); + saasRoleGroupRelation.setSaasRoleGroupId(roleGroup.getId()); + return saasRoleGroupRelation; + }).collect(Collectors.toList()); + roleGroupRelationDao.saveBatch(roleGroupRelation); + // 查询角色关联的角色,打包成新的权限集 + ArrayList deletePgroup = new ArrayList<>(); + ArrayList deletePgroupRoleRelation = new ArrayList<>(); + ArrayList deletePgroupPermissionRelation = new ArrayList<>(); + oldRole.forEach(role -> { + List pgroupRoleRelation = pgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, role.getId()).list(); + if (CollectionUtils.isEmpty(pgroupRoleRelation)) { + return; + } + List permissionGroup = saasPermissionGroupDao.lambdaQuery().in(BaseEntity::getId, pgroupRoleRelation.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList())).list(); + if (CollectionUtils.isEmpty(permissionGroup)) { + // 删除角色权限集关联关系 + deletePgroupRoleRelation.addAll(pgroupRoleRelation); + return; + } + List pgroupPermissionRelation = pgroupPermissionRelationDao.lambdaQuery().in(SaasPgroupPermissionRelation::getGroupId, permissionGroup.stream().map(BaseEntity::getId).collect(Collectors.toList())).list(); + if (CollectionUtils.isEmpty(pgroupPermissionRelation)) { + // 如果没查到权限则表示当前权限集是无意义的,删掉 + deletePgroup.addAll(permissionGroup); + // 删除角色权限集关联关系 + deletePgroupRoleRelation.addAll(pgroupRoleRelation); + return; + } + List feature = featureDao.lambdaQuery().in(BaseEntity::getId, pgroupPermissionRelation.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())).list(); + if (CollectionUtils.isEmpty(feature)) { + // 删除权限集权限关联关系 + deletePgroupPermissionRelation.addAll(pgroupPermissionRelation); + // 如果没查到权限则表示当前权限集是无意义的,删掉 + deletePgroup.addAll(permissionGroup); + // 删除角色权限集关联关系 + deletePgroupRoleRelation.addAll(pgroupRoleRelation); + return; + } + // 创建新的权限集 + SaasPermissionGroup saasPermissionGroup = new SaasPermissionGroup(); + saasPermissionGroup.setName("通用权限"); + saasPermissionGroup.setDescription(""); + saasPermissionGroup.setCreateBy(-1L); + saasPermissionGroup.setUpdateBy(-1L); + saasPermissionGroup.setType("feature"); + saasPermissionGroup.setIsCommon(1); + saasPermissionGroupDao.save(saasPermissionGroup); + deletePgroup.addAll(permissionGroup); + // 创建新的角色权限集关联关系 + SaasPgroupRoleRelation saasPgroupRoleRelation = new SaasPgroupRoleRelation(); + saasPgroupRoleRelation.setRoleId(role.getId()); + saasPgroupRoleRelation.setGroupId(saasPermissionGroup.getId()); + saasPgroupRoleRelation.setCreateBy(-1L); + saasPgroupRoleRelation.setUpdateBy(-1L); + pgroupRoleRelationDao.save(saasPgroupRoleRelation); + // 创建新的权限集权限关联关系 + feature.forEach(e -> { + SaasPgroupPermissionRelation saasPgroupPermissionRelation = new SaasPgroupPermissionRelation(); + saasPgroupPermissionRelation.setGroupId(saasPermissionGroup.getId()); + saasPgroupPermissionRelation.setFeatureId(e.getId()); + saasPgroupPermissionRelation.setCreateBy(-1L); + saasPgroupPermissionRelation.setUpdateBy(-1L); + pgroupPermissionRelationDao.save(saasPgroupPermissionRelation); + }); + // 暂存待删除数据 + deletePgroupPermissionRelation.addAll(pgroupPermissionRelation); + // 暂存待删除数据 + deletePgroupRoleRelation.addAll(pgroupRoleRelation); + }); + // 所有的数据都不能在循环中删,要不然下一次循环中就查不到了 + // 删除老的权限集权限关联关系 + deletePgroupPermissionRelation.forEach(e -> { + pgroupPermissionRelationDao.lambdaUpdate() + .eq(BaseEntity::getId, e.getId()) + .set(BaseEntity::getIsDelete, e.getId()) + .update(); + }); + // 删除老的角色权限集关联关系 + deletePgroupRoleRelation.forEach(e -> { + pgroupRoleRelationDao.lambdaUpdate() + .eq(BaseEntity::getId, e.getId()) + .set(BaseEntity::getIsDelete, e.getId()) + .update(); + }); + // 删除权限集 + deletePgroup.forEach(e -> { + saasPermissionGroupDao.lambdaUpdate() + .eq(BaseEntity::getId, e.getId()) + .set(BaseEntity::getIsDelete, e.getId()) + .update(); + }); log.info("OMSRoleJobHandler end"); return ReturnT.SUCCESS; } From 0eeb3869244eec2771080ee1941227271a16bd49 Mon Sep 17 00:00:00 2001 From: yangsong Date: Mon, 18 Sep 2023 15:34:38 +0800 Subject: [PATCH 173/186] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=88=86=E7=BB=84?= =?UTF-8?q?=E6=9D=83=E9=99=90=E7=82=B9=20bugfix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/PermissionGroupImpl.java | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index 6d1423af..a4f76b6f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -123,11 +123,15 @@ public class PermissionGroupImpl implements PermissionGroupService { .in(SaasPgroupPermissionRelation::getGroupId, groupIds) .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) .list(); - List feature = new ArrayList<>(); + List features = new ArrayList<>(); if (CollectionUtils.isNotEmpty(permissionList)) { - // 查询featureCode - feature = featureService.listNodesByIds(permissionList.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())); + // 查询全部featureCode + features = featureService.listNodesByIds(permissionList.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList())); } + Map featureMap = features.stream().collect(Collectors.toMap(PermissionPointTreeNode::getPermissionPointId, Function.identity(), (e1, e2) -> e2)); + Map> pgroupPermissionMap = permissionList.stream() + .collect(Collectors.groupingBy(SaasPgroupPermissionRelation::getGroupId, + Collectors.mapping(releation -> featureMap.get(releation.getFeatureId()), Collectors.toList()))); List saasPermissionGroupScopesSource = saasPermissionGroupScopeDao.lambdaQuery() .in(SaasPermissionGroupScope::getPgroupId, groupIds) .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) @@ -149,24 +153,26 @@ public class PermissionGroupImpl implements PermissionGroupService { } return true; }).collect(Collectors.toList()); + Map> permissionGroupScopeMap = saasPermissionGroupScopes.stream().collect(Collectors.groupingBy(SaasPermissionGroupScope::getPgroupId, Collectors.mapping(e -> BeanMapper.copyBean(e, SaasRolePermissionScopeVO.class), Collectors.toList()))); // 组装填充字段 - List finalFeature = feature; - List pageList = groupList.stream().map(group -> - SaasPermissionGroupVO.builder() - .id(group.getId()) - .name(group.getName()) - .feature(finalFeature) - .scopes(saasPermissionGroupScopes.stream().filter(e -> e.getPgroupId().equals(group.getId())).map(e -> BeanMapper.copyBean(e, SaasRolePermissionScopeVO.class)).collect(Collectors.toList())) - .createBy(group.getCreateBy()) - .creatorName(group.getCreatorName()) - .updateBy(group.getUpdateBy()) - .updatorName(group.getUpdatorName()) - .roleId(Optional.ofNullable(pgrrMap.get(group.getId())).map(SaasPgroupRoleRelation::getRoleId).orElse(null)) - .type(group.getType()) - .isCommon(group.getIsCommon()) - .createAt(group.getCreateAt()) - .updateAt(group.getUpdateAt()) - .build() + List pageList = groupList.stream().map(group -> { + SaasPermissionGroupVO pgroupResult = SaasPermissionGroupVO.builder() + .id(group.getId()) + .name(group.getName()) + .scopes(Optional.ofNullable(permissionGroupScopeMap.get(group.getId())).orElse(new ArrayList<>())) + .feature(Optional.ofNullable(pgroupPermissionMap.get(group.getId())).orElse(new ArrayList<>())) + .createBy(group.getCreateBy()) + .creatorName(group.getCreatorName()) + .updateBy(group.getUpdateBy()) + .updatorName(group.getUpdatorName()) + .roleId(Optional.ofNullable(pgrrMap.get(group.getId())).map(SaasPgroupRoleRelation::getRoleId).orElse(null)) + .type(group.getType()) + .isCommon(group.getIsCommon()) + .createAt(group.getCreateAt()) + .updateAt(group.getUpdateAt()) + .build(); + return pgroupResult; + } ).collect(Collectors.toList()); return PageResp.list(iPage.getCurrent(), iPage.getSize(), iPage.getTotal(), pageList); } From 5d3fb61b45f56c38bf8e85e0491d456d33ca96c5 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Mon, 18 Sep 2023 16:01:25 +0800 Subject: [PATCH 174/186] =?UTF-8?q?update=20-=20=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E8=A1=A8=E5=A2=9E=E5=8A=A0=E4=B8=80=E5=88=97=E5=AD=97=E5=85=B8?= =?UTF-8?q?=20code=20=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/client/model/product/ProductAddReq.java | 8 +++++--- .../axzo/tyr/client/model/product/ProductUpdateReq.java | 5 +++++ .../java/cn/axzo/tyr/client/model/product/ProductVO.java | 5 +++++ .../axzo/tyr/server/repository/entity/ProductModule.java | 5 +++++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java index a733f756..9dae9962 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductAddReq.java @@ -1,9 +1,6 @@ package cn.axzo.tyr.client.model.product; -import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Data; -import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import org.hibernate.validator.constraints.Length; @@ -39,6 +36,11 @@ public class ProductAddReq { @NotNull(message = "工作台类型不能为空") private Long dictWorkspaceTypeId; + /** + * 产品所属工作台类型 + */ + private String dictWorkspaceTypeCode; + /** * 上下架状态 1:上架, 0:下架 */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java index 0e09042e..73d9b7ea 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductUpdateReq.java @@ -40,6 +40,11 @@ public class ProductUpdateReq { */ private Long dictWorkspaceTypeId; + /** + * 产品所属工作台类型 Code + */ + private String dictWorkspaceTypeCode; + /** * 上下架状态 1:上架, 0:下架 */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java index 129f1309..0b8e3447 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductVO.java @@ -38,6 +38,11 @@ public class ProductVO { */ private Long dictWorkspaceTypeId; + /** + * 产品所属工作台类型code + */ + private String dictWorkspaceTypeCode; + /** * 产品所属工作类型名称 */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/ProductModule.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/ProductModule.java index caa174a1..68a5b235 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/ProductModule.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/ProductModule.java @@ -37,6 +37,11 @@ public class ProductModule extends BaseEntity { */ private Long dictWorkspaceTypeId; + /** + * 产品所属工作台字典 Code + */ + private String dictWorkspaceTypeCode; + /** * 产品状态 */ From 76382d63d3b41579e83b3b2f927b937cfca25fae Mon Sep 17 00:00:00 2001 From: zhansihu Date: Mon, 18 Sep 2023 16:05:23 +0800 Subject: [PATCH 175/186] =?UTF-8?q?feature(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=20=E6=A0=91=E5=BD=A2=E6=9F=A5=E8=AF=A2=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=B1=82=E7=BA=A7=E5=8F=82=E6=95=B0=EF=BC=9B=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E6=89=A9=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../permission/PermissionPointTreeNode.java | 26 +++++++++++++++++ .../PermissionPointTreeQueryReq.java | 7 +++-- .../impl/PermissionPointServiceImpl.java | 29 ++++++++++++++----- .../permission/PermissionPointTest.java | 3 +- 4 files changed, 54 insertions(+), 11 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java index 5bc11adc..fc9081c5 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java @@ -52,9 +52,35 @@ public class PermissionPointTreeNode implements IBaseTree children; + /** + * 网关专属字段,所属应用 + */ + private String appName; + + /** + * 网关专属字段 ,功能URL,对应后端接口url + */ + private String featureUrl; + @JsonIgnore @Override diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java index 7cbcc53e..6f869369 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java @@ -33,8 +33,9 @@ public class PermissionPointTreeQueryReq { /** 权限点terminal对应workspaceType **/ private List workspaceType; - /** 权限点元素类型 - * 0.菜单 1.页面 3按钮 + /** + * 过滤层级-包含顶层两级 + * 1-工作台类型 2-工作台 * **/ - private Integer featureType; + private Integer maxLevel; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index a23ca5a3..17627ab0 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -91,9 +91,30 @@ public class PermissionPointServiceImpl implements PermissionPointService { List resultTree = buildTopNodes(nodesResult, needAllTop); watch.stop(); log.info("permission-point-tree cost:{}", watch.prettyPrint()); + //层级过滤 + filterLevel(resultTree, request.getMaxLevel(), 1); return resultTree; } + private void filterLevel(List resultTree, Integer maxLevel, Integer currentLevel) { + if (maxLevel == null || resultTree == null) { + return; + } + if (currentLevel < maxLevel) { + //递归子级 + for (PermissionPointTreeNode node : resultTree) { + filterLevel(node.getChildren(), maxLevel, currentLevel + 1); + } + } else { + //清空下级 + for (PermissionPointTreeNode node : resultTree) { + node.setChildren(null); + } + } + + } + + private List buildTopNodes(List nodesResult, boolean needAllTop) { //构建workspace-terminal工作台层级 @@ -451,17 +472,11 @@ public class PermissionPointServiceImpl implements PermissionPointService { } private PermissionPointTreeNode feature2Node(SaasFeature feature) { - PermissionPointTreeNode node = new PermissionPointTreeNode(); + PermissionPointTreeNode node = BeanMapper.copyBean(feature, PermissionPointTreeNode.class); node.setPermissionPointId(feature.getId()); node.setPermissionName(feature.getFeatureName()); node.setCode(feature.getFeatureCode()); - node.setParentId(feature.getParentId()); - node.setTerminal(feature.getTerminal()); - node.setFeatureType(feature.getFeatureType()); node.setFeatureTypeDesc(FeatureType.apply(feature.getFeatureType()).getDesc()); - node.setDelegatedType(feature.getDelegatedType()); - node.setPath(feature.getPath()); - node.setSort(feature.getSort()); return node; } diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java index 1fd25e78..ed81af0c 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java @@ -47,7 +47,8 @@ public class PermissionPointTest { //request.setKeyword("预警"); //request.setWorkspaceType(Arrays.asList("ent")); //request.setTerminalList(Arrays.asList("NT_CMS_WEB_ENT_ZB")); - request.setDelegateType(2); + request.setDelegateType(0); + request.setMaxLevel(3); ApiResult> result = controller.listTreeNodes(request); System.out.println("---------------"); System.out.println(JSON.toJSONString(result, SerializerFeature.DisableCircularReferenceDetect)); From 13d561bea26641b6aa66bd636a821f2b7ff5f5ff Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Mon, 18 Sep 2023 16:30:48 +0800 Subject: [PATCH 176/186] =?UTF-8?q?add=20-=20=E6=9F=A5=E8=AF=A2=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E5=88=97=E8=A1=A8=E5=A2=9E=E5=8A=A0=20ID=20=E9=9B=86?= =?UTF-8?q?=E5=90=88=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/model/product/ProductSearchListReq.java | 7 ++++++- .../axzo/tyr/server/service/impl/ProductServiceImpl.java | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java index f36b8f04..28e609cc 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/product/ProductSearchListReq.java @@ -7,6 +7,8 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; +import java.util.List; + /** * 产品分页搜索 * @@ -16,7 +18,10 @@ import lombok.experimental.Accessors; @Data @Accessors(chain = true) public class ProductSearchListReq{ - + /** + * 产品 ID 集合 + */ + private List ids; /** * 产品名称 */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java index 4b6dd4c9..1cefaa0c 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/ProductServiceImpl.java @@ -17,6 +17,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.util.List; @@ -38,6 +39,7 @@ public class ProductServiceImpl implements ProductService { @Override public ApiResult> list(ProductSearchListReq req) { List list = productModuleDao.lambdaQuery() + .in(!CollectionUtils.isEmpty(req.getIds()), ProductModule::getId, req.getIds()) .like(StringUtils.hasLength(req.getName()), ProductModule::getProductName, req.getName()) .eq(Objects.nonNull(req.getDictWorkspaceTypeId()), ProductModule::getDictWorkspaceTypeId, req.getDictWorkspaceTypeId()) .eq(Objects.nonNull(req.getStatus()), ProductModule::getStatus, req.getStatus()) From 55c67f3fcb6a92daadd78ce80a2721bbd5b18332 Mon Sep 17 00:00:00 2001 From: TanJ Date: Mon, 18 Sep 2023 16:49:45 +0800 Subject: [PATCH 177/186] =?UTF-8?q?fix:=20=E7=89=88=E6=9C=AC=E7=BB=9F?= =?UTF-8?q?=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 3 ++- tyr-api/pom.xml | 2 +- tyr-server/pom.xml | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 4bead31e..39612245 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ cn.axzo.tyr tyr pom - 1.0.0-SNAPSHOT + ${revision} tyr @@ -20,6 +20,7 @@ + 2.0.0-SNAPSHOT 2.0.0-SNAPSHOT 2.0.0-SNAPSHOT 1.18.22 diff --git a/tyr-api/pom.xml b/tyr-api/pom.xml index 118ad5eb..08786447 100644 --- a/tyr-api/pom.xml +++ b/tyr-api/pom.xml @@ -5,7 +5,7 @@ tyr cn.axzo.tyr - 1.0.0-SNAPSHOT + ${revision} ../pom.xml diff --git a/tyr-server/pom.xml b/tyr-server/pom.xml index b75af331..20ab0ca7 100644 --- a/tyr-server/pom.xml +++ b/tyr-server/pom.xml @@ -3,7 +3,7 @@ tyr cn.axzo.tyr - 1.0.0-SNAPSHOT + ${revision} ../pom.xml 4.0.0 From dc09ced2a9dbca391ad9790728c073c12efff06e Mon Sep 17 00:00:00 2001 From: zhansihu Date: Mon, 18 Sep 2023 18:16:46 +0800 Subject: [PATCH 178/186] =?UTF-8?q?feature(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=20=E6=A0=91=E5=BD=A2=E6=9F=A5=E8=AF=A2=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E6=9F=A5=E8=AF=A2=EF=BC=8C=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E6=89=A9=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../permission/PermissionPointTreeNode.java | 65 ++++++++++++++++++- .../PermissionPointTreeQueryReq.java | 3 + .../impl/PermissionPointServiceImpl.java | 3 +- .../permission/PermissionPointTest.java | 1 + 4 files changed, 68 insertions(+), 4 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java index fc9081c5..067a636e 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeNode.java @@ -7,6 +7,7 @@ import com.alibaba.fastjson.annotation.JSONField; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -68,9 +69,6 @@ public class PermissionPointTreeNode implements IBaseTree children; - /** * 网关专属字段,所属应用 */ @@ -81,6 +79,67 @@ public class PermissionPointTreeNode implements IBaseTree fitOuTypeList; + + /** + * 适用节点类型 1:部门 2:班组 4:小组 + */ + private List fitOuNodeTypeList; + + /** + * 是否认证 0:无需要认证 1:需要认证 + */ + private Boolean needCert; + + /** + * 是否授权 0:无需要授权 1:需要授权 + */ + private Boolean needAuth; + + + /** 业务编码 **/ + private String businessNo; + + /** + * 父级业务id + */ + private String parentBusinessNo; + + /** 下级节点 **/ + private List children; + @JsonIgnore @Override diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java index 6f869369..d9e3ffc5 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java @@ -38,4 +38,7 @@ public class PermissionPointTreeQueryReq { * 1-工作台类型 2-工作台 * **/ private Integer maxLevel; + + /** featureType 层级过滤-过滤掉featureType大于该值的数据 **/ + private Integer maxFeatureType; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 17627ab0..18c69d8d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -159,7 +159,8 @@ public class PermissionPointServiceImpl implements PermissionPointService { workspace2Terminal(request); //查询条件构建 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() - .in(CollectionUtil.isNotEmpty(request.getTerminalList()), SaasFeature::getTerminal, request.getTerminalList()); + .in(CollectionUtil.isNotEmpty(request.getTerminalList()), SaasFeature::getTerminal, request.getTerminalList()) + .le(Objects.nonNull(request.getMaxFeatureType()), SaasFeature::getFeatureType, request.getMaxFeatureType()); //查指定节点子级处理条件 if (request.getParentId() != null && request.getParentId() != 0) { SaasFeature parent = this.saasFeatureDao.getById(request.getParentId()); diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java index ed81af0c..b6b4e1af 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java @@ -49,6 +49,7 @@ public class PermissionPointTest { //request.setTerminalList(Arrays.asList("NT_CMS_WEB_ENT_ZB")); request.setDelegateType(0); request.setMaxLevel(3); + request.setMaxFeatureType(2); ApiResult> result = controller.listTreeNodes(request); System.out.println("---------------"); System.out.println(JSON.toJSONString(result, SerializerFeature.DisableCircularReferenceDetect)); From 4f43435c0d2669c4467df5ecf843199fbe6dd8f3 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Mon, 18 Sep 2023 18:33:28 +0800 Subject: [PATCH 179/186] =?UTF-8?q?fix(docker):=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 761596a1..bc77e220 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,3 @@ FROM registry.cn-hangzhou.aliyuncs.com/axzo-k8s/jdk1.8-fc:v1 -COPY tyr-server/target/tyr.jar ./tyr.jar +COPY tyr-server/target/tyr-server-2.0.0-SNAPSHOT.jar ./tyr.jar ENTRYPOINT [{ENTRYPOINT}] From abf3bd7c0ac30854031fd83ead092e35cea2d026 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Tue, 19 Sep 2023 10:55:58 +0800 Subject: [PATCH 180/186] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=20=E5=A2=9E=E5=8A=A0=E5=B1=82=E7=BA=A7=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=9B=E5=A2=9E=E5=8A=A0=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E5=85=B3=E8=81=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SaasProductModuleFeatureRelationDao.java | 11 +++++ .../impl/PermissionPointServiceImpl.java | 46 +++++++++++++++++-- 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasProductModuleFeatureRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasProductModuleFeatureRelationDao.java index 8f7bba44..ce3317c3 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasProductModuleFeatureRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasProductModuleFeatureRelationDao.java @@ -2,9 +2,13 @@ package cn.axzo.tyr.server.repository.dao; import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation; import cn.axzo.tyr.server.repository.mapper.SaasProductModuleFeatureRelationMapper; +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Repository; +import java.util.List; + /** * 产品-菜单关联关系(SaasProductModuleFeatureRelation)表服务实现类 * @@ -14,5 +18,12 @@ import org.springframework.stereotype.Repository; @Repository public class SaasProductModuleFeatureRelationDao extends ServiceImpl { + public void removeByPermissionPointIds(List permissionPointIds) { + if (CollectionUtil.isEmpty(permissionPointIds)) { + return; + } + this.remove(new LambdaQueryWrapper() + .in(SaasProductModuleFeatureRelation::getFeatureId, permissionPointIds)); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 18c69d8d..44b3d133 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -18,6 +18,8 @@ import cn.axzo.tyr.client.model.permission.PermissionPointMoveRequest; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.client.model.permission.PermissionPointVO; +import cn.axzo.tyr.server.common.util.Throws; +import cn.axzo.tyr.server.repository.dao.SaasProductModuleFeatureRelationDao; import cn.axzo.tyr.server.repository.entity.SaasFeature; import cn.axzo.tyr.server.repository.dao.SaasFeatureDao; import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao; @@ -36,6 +38,8 @@ import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; +import static cn.axzo.tyr.client.model.enums.FeatureType.BUTTON; +import static cn.axzo.tyr.client.model.enums.FeatureType.MODULE; import static cn.axzo.tyr.server.common.constants.PermissionConstant.*; /** @@ -53,6 +57,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { private final SaasFeatureDao saasFeatureDao; private final SaasBasicDictService saasBasicDictService; private final SaasPgroupPermissionRelationDao saasPgroupPermissionRelationDao; + private final SaasProductModuleFeatureRelationDao saasProductModuleFeatureRelationDao; @Override public List listTreeNodes(PermissionPointTreeQueryReq request) { @@ -330,7 +335,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { SaasFeature saasFeature = BeanMapper.copyBean(dto, SaasFeature.class); saasFeature.setFitOuTypeBit(dto.mergeFitOuTypeBit()); saasFeature.setFitOuNodeTypeBit(dto.mergeFitOuNodeTypeBit()); - SaasFeature parent; + SaasFeature parent = null; if (dto.getParentId() == null || dto.getParentId() < 1) { saasFeature.setParentId(0L); saasFeature.setPath(FEATURE_TOP_PATH); @@ -340,6 +345,8 @@ public class PermissionPointServiceImpl implements PermissionPointService { saasFeature.setPath(parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER); saasFeature.setParentBusinessNo(parent.getBusinessNo()); } + FeatureType featureType = FeatureType.apply(dto.getFeatureType()); + checkParentType(featureType, parent); //生成biz_no saasFeature.setBusinessNo(FEATURE_BIZ_NO_PREFIX + System.currentTimeMillis()); @@ -351,6 +358,34 @@ public class PermissionPointServiceImpl implements PermissionPointService { return dto; } + private void checkParentType(FeatureType featureType, SaasFeature parent) { + //检查父级元素类型 + switch (featureType) { + case MODULE: + if (parent != null) { + Throws.paramException(BaseCode.BAD_REQUEST, "菜单必须为顶级"); + } + break; + case MENU: + //MENU PAGE相同逻辑 + case PAGE: + if (parent == null + || FeatureType.apply(parent.getFeatureType()) == BUTTON) { + Throws.paramException(BaseCode.BAD_REQUEST, "页面层级错误"); + } + break; + case BUTTON: + if (parent == null + || FeatureType.apply(parent.getFeatureType()) == MODULE + || FeatureType.apply(parent.getFeatureType()) == BUTTON) { + Throws.paramException(BaseCode.BAD_REQUEST, "按钮层级错误"); + } + break; + default: + Throws.paramException(BaseCode.BAD_REQUEST, "不支持的元素类型"); + } + } + @Transactional(rollbackFor = Throwable.class) @Override public List delete(Long permissionPointId) { @@ -360,7 +395,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { //删除自己 this.saasFeatureDao.removeById(permissionPointId); delIds.add(feature.getId()); - if (feature.getFeatureType().equals(FeatureType.BUTTON.getCode())) { + if (feature.getFeatureType().equals(BUTTON.getCode())) { //bizNo返回用于删除路由 bizNoList.add(feature.getBusinessNo()); } @@ -371,12 +406,14 @@ public class PermissionPointServiceImpl implements PermissionPointService { this.saasFeatureDao.removeByIds(childrenIds); delIds.addAll(childrenIds); List buttonBizNoList = children.stream() - .filter(x -> x.getFeatureType().equals(FeatureType.BUTTON.getCode())) + .filter(x -> x.getFeatureType().equals(BUTTON.getCode())) .map(SaasFeature::getBusinessNo) .collect(Collectors.toList()); bizNoList.addAll(buttonBizNoList); } + //删除关联数据 this.saasPgroupPermissionRelationDao.removeByPermissionPointIds(delIds); + this.saasProductModuleFeatureRelationDao.removeByPermissionPointIds(delIds); return bizNoList; } @@ -458,6 +495,9 @@ public class PermissionPointServiceImpl implements PermissionPointService { throw new BizException(BaseCode.BAD_REQUEST, "不允许移到子级"); } } + //检查元素类型层级 + FeatureType featureType = FeatureType.apply(feature.getFeatureType()); + checkParentType(featureType, parent); //当前节点更新 SaasFeature entity = new SaasFeature(); From 79c33ce2f24fa7034ca9072c557e02d87d85970e Mon Sep 17 00:00:00 2001 From: yangsong Date: Tue, 19 Sep 2023 14:19:43 +0800 Subject: [PATCH 181/186] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=AF=B9=E8=A7=92=E8=89=B2=E9=80=9A?= =?UTF-8?q?=E7=94=A8=E6=9D=83=E9=99=90=E9=9B=86=E5=AD=98=E5=9C=A8=E9=AA=8C?= =?UTF-8?q?=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/model/vo/SaveOrUpdateRoleVO.java | 5 --- .../SaasPgroupRoleRelationService.java | 11 ----- .../service/impl/PermissionGroupImpl.java | 2 +- .../server/service/impl/RoleServiceImpl.java | 40 ++++++++++++------ .../SaasPgroupRoleRelationServiceImpl.java | 42 ------------------- 5 files changed, 29 insertions(+), 71 deletions(-) delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupRoleRelationService.java delete mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaveOrUpdateRoleVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaveOrUpdateRoleVO.java index cc317641..f8515d9f 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaveOrUpdateRoleVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaveOrUpdateRoleVO.java @@ -46,11 +46,6 @@ public class SaveOrUpdateRoleVO { @Valid private List groupTree; - /** - * 通用权限集id(编辑时有效) - */ - private Long permissionGroupId; - private String permissionGroupName; private String permissionGroupDescription; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupRoleRelationService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupRoleRelationService.java deleted file mode 100644 index 6be028f6..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPgroupRoleRelationService.java +++ /dev/null @@ -1,11 +0,0 @@ -package cn.axzo.tyr.server.service; - -import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; - -public interface SaasPgroupRoleRelationService { - /** - * 处理通用权限集 - * @param commonRelation - */ - void saveOrUpdateCommon(SaasPgroupRoleRelation commonRelation); -} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index a4f76b6f..91d47636 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -296,7 +296,7 @@ public class PermissionGroupImpl implements PermissionGroupService { // 验证角色是否存在 SaasRole saasRole = saasRoleDao.getById(permissionGroup.getRoleId()); if (Objects.isNull(saasRole)) { - throw new ServiceException("权限集不存在"); + throw new ServiceException("角色不存在"); } if (Objects.nonNull(permissionGroup.getId())) { int relationCount = pgroupRoleRelationDao.lambdaQuery() diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index eb4c6c61..42de05dd 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -16,7 +16,10 @@ import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; import cn.axzo.tyr.server.repository.dao.*; import cn.axzo.tyr.server.repository.entity.*; -import cn.axzo.tyr.server.service.*; +import cn.axzo.tyr.server.service.PermissionGroupService; +import cn.axzo.tyr.server.service.RoleService; +import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationService; +import cn.axzo.tyr.server.service.SaasRoleGroupRelationService; import cn.hutool.core.bean.BeanUtil; import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; @@ -50,7 +53,7 @@ public class RoleServiceImpl implements RoleService { @Autowired PermissionGroupService permissionGroupService; @Autowired - SaasPgroupRoleRelationDao permissionGroupRelation; + SaasPgroupRoleRelationDao saasPgroupRoleRelationDao; @Autowired SaasRoleGroupDao saasRoleGroupDao; @Autowired @@ -62,8 +65,6 @@ public class RoleServiceImpl implements RoleService { @Autowired SaasFeatureDao saasFeatureDao; @Autowired - SaasPgroupRoleRelationService saasPgroupRoleRelationService; - @Autowired SaasPgroupPermissionRelationService saasPgroupPermissionRelationService; @Override @@ -232,8 +233,10 @@ public class RoleServiceImpl implements RoleService { pgrr.setUpdateBy(saveOrUpdateRole.getOperatorId()); pgrr.setCreateAt(now); pgrr.setUpdateAt(now); - // 新增或保存角色通用权限映射 - saasPgroupRoleRelationService.saveOrUpdateCommon(pgrr); + // 保存角色通用权限映射,通用权限的映射关系不会被变更 + if (Objects.isNull(saveOrUpdateRole.getId())) { + saasPgroupRoleRelationDao.save(pgrr); + } // 保存权限集和权限点映射关系 List pgpRelations = Optional.ofNullable(saveOrUpdateRole.getSelectedPPIds()).orElse(new ArrayList<>()).stream().map(ppId -> { SaasPgroupPermissionRelation target = new SaasPgroupPermissionRelation(); @@ -281,9 +284,6 @@ public class RoleServiceImpl implements RoleService { if (Objects.isNull(saasRole)) { throw new ServiceException("角色不存在"); } - if (Objects.isNull(saveOrUpdateRole.getPermissionGroupId())) { - throw new ServiceException("更新角色时权限集不能为空不存在"); - } } saasRole.setName(saveOrUpdateRole.getName()); saasRole.setDescription(saasRole.getDescription()); @@ -332,13 +332,29 @@ public class RoleServiceImpl implements RoleService { private SaasPermissionGroup validPermissionGroupCommon(SaveOrUpdateRoleVO saveOrUpdateRole) { SaasPermissionGroup saasPermissionGroup; - if (Objects.isNull(saveOrUpdateRole.getPermissionGroupId())) { + if (Objects.isNull(saveOrUpdateRole.getId())) { + //新增 saasPermissionGroup = new SaasPermissionGroup(); saasPermissionGroup.setIsCommon(PermissionGroupType.COMMON.getCode()); saasPermissionGroup.setCreateBy(saveOrUpdateRole.getOperatorId()); saasPermissionGroup.setCreatorName(saveOrUpdateRole.getOperatorName()); } else { - saasPermissionGroup = permissionGroupService.getRequiredPermissionGroup(saveOrUpdateRole.getPermissionGroupId(), PermissionGroupType.COMMON); + // 修改验证 + List relations = saasPgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, saveOrUpdateRole.getId()) + .eq(SaasPgroupRoleRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + if (CollectionUtils.isEmpty(relations)) { + throw new ServiceException("数据错误,通用权限集不存在"); + } + List pgroupIds = relations.stream().map(SaasPgroupRoleRelation::getGroupId).sorted().collect(Collectors.toList()); + List commonGroups = saasPermissionGroupDao.lambdaQuery().in(SaasPermissionGroup::getId, pgroupIds).eq(SaasPermissionGroup::getIsCommon, PermissionGroupType.COMMON.getCode()) + .eq(SaasPermissionGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + if (CollectionUtils.isEmpty(commonGroups)) { + throw new ServiceException("数据错误,通用权限集不存在"); + } + if (commonGroups.size() > 1) { + throw new ServiceException("数据错误,存在多个通用权限集"); + } + saasPermissionGroup = commonGroups.get(0); } saasPermissionGroup.setName(saveOrUpdateRole.getPermissionGroupName()); saasPermissionGroup.setDescription(saveOrUpdateRole.getPermissionGroupDescription()); @@ -369,7 +385,7 @@ public class RoleServiceImpl implements RoleService { * 根据角色id查询权限集关联关系 */ public List queryPermissionGroupRelation(List roleIds) { - return permissionGroupRelation.lambdaQuery() + return saasPgroupRoleRelationDao.lambdaQuery() .in(SaasPgroupRoleRelation::getRoleId, roleIds) .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) .list(); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java deleted file mode 100644 index b29df383..00000000 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPgroupRoleRelationServiceImpl.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.axzo.tyr.server.service.impl; - -import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; -import cn.axzo.basics.common.exception.ServiceException; -import cn.axzo.tyr.server.repository.dao.SaasPgroupRoleRelationDao; -import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; -import cn.axzo.tyr.server.service.SaasPgroupRoleRelationService; -import cn.hutool.json.JSONUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -@Slf4j -@Service -@RequiredArgsConstructor -public class SaasPgroupRoleRelationServiceImpl implements SaasPgroupRoleRelationService { - private final SaasPgroupRoleRelationDao saasPgroupRoleRelationDao; - - @Override - @Transactional(rollbackFor = Exception.class) - public void saveOrUpdateCommon(SaasPgroupRoleRelation commonRelation) { - List relations = saasPgroupRoleRelationDao.lambdaQuery().eq(SaasPgroupRoleRelation::getRoleId, commonRelation.getRoleId()) - .eq(SaasPgroupRoleRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); - if (CollectionUtils.isEmpty(relations)) { - saasPgroupRoleRelationDao.save(commonRelation); - return; - } - List prr = relations.stream().filter(e -> Objects.equals(commonRelation.getGroupId(), e.getGroupId())).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(prr)) { - // 通用权限集已经 存在 - return; - }else { - throw new ServiceException(String.format("传入的权限集id与已存在的通用权限集id不一致 req : %s", JSONUtil.toJsonStr(commonRelation))); - } - } -} From 32b324a0a098991afff3fa7c19699be650e5c517 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Tue, 19 Sep 2023 15:57:55 +0800 Subject: [PATCH 182/186] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E9=87=8D=E5=90=8D=E6=96=87=E6=A1=88=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java | 2 +- .../java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java index a4f76b6f..b34d16d5 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionGroupImpl.java @@ -332,7 +332,7 @@ public class PermissionGroupImpl implements PermissionGroupService { Optional repeatName = groups.stream().filter(g -> !Objects.equals(g.getId(), saasPermissionGroup.getId()) && StringUtils.equalsIgnoreCase(saasPermissionGroup.getName(), g.getName())) .findFirst(); if (repeatName.isPresent()) { - throw new ServiceException("同角色,分组名称不能重复"); + throw new ServiceException("同角色,例外名称不能重复"); } } return saasPermissionGroup; diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index eb4c6c61..a49c291b 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -307,7 +307,7 @@ public class RoleServiceImpl implements RoleService { .filter(e -> Objects.nonNull(e) && !Objects.equals(e.getId(), saveOrUpdateRole.getId()) && StringUtils.equalsIgnoreCase(e.getName(), saasRole.getName())) .findFirst(); if (repeatNameRole.isPresent()) { - throw new ServiceException("同分组内不角色名称不能重复"); + throw new ServiceException("同分组内角色名称不能重复"); } }); } From 5909b04e27271c5e883e0835e6dd4ce08ee695af Mon Sep 17 00:00:00 2001 From: zhansihu Date: Tue, 19 Sep 2023 18:52:57 +0800 Subject: [PATCH 183/186] =?UTF-8?q?feature(=E6=9D=83=E9=99=90=E7=82=B9):?= =?UTF-8?q?=20=E5=A2=9E=E5=8A=A0BizEx=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/tyr/server/common/util/Throws.java | 4 +-- .../exception/BizExceptionResultHandler.java | 33 +++++++++++++++++++ .../impl/PermissionPointServiceImpl.java | 16 ++++----- 3 files changed, 43 insertions(+), 10 deletions(-) create mode 100644 tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/BizExceptionResultHandler.java diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/common/util/Throws.java b/tyr-server/src/main/java/cn/axzo/tyr/server/common/util/Throws.java index c63a9249..b1f898c7 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/common/util/Throws.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/common/util/Throws.java @@ -14,8 +14,8 @@ import cn.axzo.framework.domain.web.code.IRespCode; */ public class Throws { - /** 用于抛出请求参数类异常 **/ - public static BizException paramException(IRespCode code, String message) { + /** 用于抛出请求参数类异常 - 避免msg丢失 **/ + public static BizException bizException(IRespCode code, String message) { throw new BizException(ErrorLevel.P2, ErrorType.ERROR_BUSINESS, code, message); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/BizExceptionResultHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/BizExceptionResultHandler.java new file mode 100644 index 00000000..8c0e4837 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/config/exception/BizExceptionResultHandler.java @@ -0,0 +1,33 @@ +package cn.axzo.tyr.server.config.exception; + +import cn.axzo.framework.autoconfigure.web.exception.RespErrorCodeMappingProperties; +import cn.axzo.framework.autoconfigure.web.exception.handler.AbstractExceptionApiResultHandler; +import cn.axzo.framework.domain.web.BizException; +import cn.axzo.framework.domain.web.code.IRespCode; +import cn.axzo.framework.domain.web.code.RespCode; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; + +/** + * 业务异常处理器 + * 避免返回http 500,造成封装多余的消息 + * @version V1.0 + * @author: ZhanSiHu + * @date: 2023/9/19 16:12 + */ +@Component +public class BizExceptionResultHandler extends AbstractExceptionApiResultHandler { + public BizExceptionResultHandler(RespErrorCodeMappingProperties properties) { + super(properties); + } + + @Override + protected IRespCode decode(BizException ex, IRespCode fallbackCode) { + return new RespCode(ex.getCode(), ex.getMessage()); + } + + @Override + protected HttpStatus mappingHttpStatus(String code, BizException ex) { + return HttpStatus.OK; + } +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 44b3d133..3f70641e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -171,7 +171,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { SaasFeature parent = this.saasFeatureDao.getById(request.getParentId()); if (parent == null) { log.error("指定的父级节点不存在:{}", request.getParentId()); - throw new BizException(BaseCode.BAD_REQUEST); + Throws.bizException(BaseCode.BAD_REQUEST, "父级节点不存在"); } //追加条件path左匹配 queryWrapper.likeRight(SaasFeature::getPath, parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER); @@ -326,7 +326,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { SaasFeature feature = this.saasFeatureDao.getById(permissionId); if (feature == null) { log.error("未查询到权限点:{}", permissionId); - throw new BizException(BaseCode.BAD_REQUEST, "未查询到权限点"); + Throws.bizException(BaseCode.BAD_REQUEST, "未查询到权限点"); } return feature; } @@ -363,7 +363,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { switch (featureType) { case MODULE: if (parent != null) { - Throws.paramException(BaseCode.BAD_REQUEST, "菜单必须为顶级"); + Throws.bizException(BaseCode.BAD_REQUEST, "菜单必须为顶级"); } break; case MENU: @@ -371,18 +371,18 @@ public class PermissionPointServiceImpl implements PermissionPointService { case PAGE: if (parent == null || FeatureType.apply(parent.getFeatureType()) == BUTTON) { - Throws.paramException(BaseCode.BAD_REQUEST, "页面层级错误"); + Throws.bizException(BaseCode.BAD_REQUEST, "页面层级错误"); } break; case BUTTON: if (parent == null || FeatureType.apply(parent.getFeatureType()) == MODULE || FeatureType.apply(parent.getFeatureType()) == BUTTON) { - Throws.paramException(BaseCode.BAD_REQUEST, "按钮层级错误"); + Throws.bizException(BaseCode.BAD_REQUEST, "按钮层级错误"); } break; default: - Throws.paramException(BaseCode.BAD_REQUEST, "不支持的元素类型"); + Throws.bizException(BaseCode.BAD_REQUEST, "不支持的元素类型"); } } @@ -489,10 +489,10 @@ public class PermissionPointServiceImpl implements PermissionPointService { if (parentId > 0) { parent = this.saasFeatureDao.getById(parentId); if (!StrUtil.equals(feature.getTerminal(), parent.getTerminal())) { - throw new BizException(BaseCode.BAD_REQUEST, "不允许跨工作台"); + Throws.bizException(BaseCode.BAD_REQUEST, "不允许跨工作台"); } if (parent.getPath().contains(String.valueOf(request.getPermissionId()))) { - throw new BizException(BaseCode.BAD_REQUEST, "不允许移到子级"); + Throws.bizException(BaseCode.BAD_REQUEST, "不允许移到子级"); } } //检查元素类型层级 From 3310fdfd6f9d329986154e6021ce48f3a91b0f54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Wed, 20 Sep 2023 15:25:09 +0800 Subject: [PATCH 184/186] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E9=80=9A=E7=94=A8=E6=8E=A5=E5=8F=A3,=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E7=B1=BB=E5=9E=8B=E4=B8=BA=E6=95=B0=E7=BB=84?= =?UTF-8?q?,=E6=94=AF=E6=8C=81=E5=A4=9A=E7=B1=BB=E5=9E=8B=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java | 2 +- .../java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java index 26c4d6cf..56e2ce54 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java @@ -21,7 +21,7 @@ public class QuerySaasRoleReq { /** * 角色类型:common 自定义角色 admin管理员 init标准角色 */ - private String roleType; + private List roleType; /** * 工作台类型编码 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index dbbed493..36fd716a 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -178,7 +178,7 @@ public class RoleServiceImpl implements RoleService { List list = saasRoleDao.lambdaQuery() .in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId, req.getIds()) .in(CollectionUtils.isNotEmpty(groupRelation), BaseEntity::getId, groupRelation.stream().map(SaasRoleGroupRelation::getRoleId).collect(Collectors.toList())) - .eq(StringUtils.isNotBlank(req.getRoleType()), SaasRole::getRoleType, req.getRoleType()) + .in(CollectionUtils.isNotEmpty(req.getRoleType()), SaasRole::getRoleType, req.getRoleType()) .in(CollectionUtils.isNotEmpty(req.getWorkspaceId()),SaasRole::getWorkspaceId,req.getWorkspaceId()) .in(CollectionUtils.isNotEmpty(req.getOuId()),SaasRole::getOwnerOuId,req.getOuId()) .orderByDesc(BaseEntity::getId) From 2542153b2c1e84cfc1f86db30c88e1a71b7d936a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BB=B4=E4=BC=9F?= Date: Thu, 21 Sep 2023 16:05:48 +0800 Subject: [PATCH 185/186] =?UTF-8?q?fix=20bug:=E6=B7=BB=E5=8A=A0=E6=96=B0?= =?UTF-8?q?=E6=88=90=E5=91=98=E8=A7=92=E8=89=B2=E8=B5=8B=E4=BA=88=E6=8A=A5?= =?UTF-8?q?=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/service/impl/RoleUserService.java | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java index c5ab1f40..2e7130c5 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java @@ -13,6 +13,7 @@ import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; import cn.axzo.tyr.server.service.SaasRoleUserService; import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.nacos.common.utils.CollectionUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -49,21 +50,23 @@ public class RoleUserService implements SaasRoleUserService { } List existsRoleUser = roleUserRelationDao.query(req.getIdentityId(), req.getIdentityType().getCode(), req.getWorkspaceId(), req.getOuId()); - List existsRole = saasRoleDao.listByIds(existsRoleUser.stream().mapToLong(SaasRoleUserRelation::getRoleId).boxed().collect(Collectors.toList())); - List notAdminRole = existsRole.stream().filter(e -> !RoleTypeEnum.getRoleType(e.getRoleType()).isAdminRole()).collect(Collectors.toList()); - - roleUserRelationDao.deleteByUser(BaseWorkspaceModel.builder() - .workspaceId(req.getWorkspaceId()) - .ouId(req.getOuId()) - .identityId(req.getIdentityId()) - .identityType(req.getIdentityType()) - .build() + if (CollectionUtils.isNotEmpty(existsRoleUser)) { + List existsRole = saasRoleDao.listByIds(existsRoleUser.stream().mapToLong(SaasRoleUserRelation::getRoleId).boxed().collect(Collectors.toList())); + List notAdminRole = existsRole.stream().filter(e -> !RoleTypeEnum.getRoleType(e.getRoleType()).isAdminRole()).collect(Collectors.toList()); + // 删除现有非管理员的角色 + roleUserRelationDao.deleteByUser(BaseWorkspaceModel.builder() + .workspaceId(req.getWorkspaceId()) + .ouId(req.getOuId()) + .identityId(req.getIdentityId()) + .identityType(req.getIdentityType()) + .build() , notAdminRole - .stream() - .mapToLong(BaseEntity::getId) - .boxed() - .collect(Collectors.toList())); + .stream() + .mapToLong(BaseEntity::getId) + .boxed() + .collect(Collectors.toList())); + } roleUserRelationDao.saveBatch(req.getUpdateRoleIds().stream().map(e -> { SaasRoleUserRelation saasRoleUserRelation = new SaasRoleUserRelation(); From d928f54d8b0f3972fc9a09205f032b85103e08d4 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Fri, 22 Sep 2023 15:33:13 +0800 Subject: [PATCH 186/186] =?UTF-8?q?fix(=E6=9D=83=E9=99=90=E7=82=B9):=20?= =?UTF-8?q?=E5=85=BC=E5=AE=B9path=E7=88=B6=E7=BA=A7=E4=B8=8D=E5=AD=98?= =?UTF-8?q?=E5=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/server/service/impl/PermissionPointServiceImpl.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 3f70641e..8957f3cb 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -286,7 +286,10 @@ public class PermissionPointServiceImpl implements PermissionPointService { .collect(Collectors.toMap(SaasFeature::getId, Function.identity())); //填充层级父级名称 直接父级信息 for (Long parentId : ids) { - pathName.add(parentsMapping.get(parentId).getFeatureName()); + SaasFeature saasFeature = parentsMapping.get(parentId); + if (saasFeature != null) { + pathName.add(saasFeature.getFeatureName()); + } } vo.setPathName(pathName); SaasFeature parent = parentsMapping.get(vo.getParentId());