From d88039c27481daee7ff98667be4a3b1ef3cbb919 Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Wed, 12 Jan 2022 16:57:11 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=907.1.6=E3=80=91=E3=80=90scanner?= =?UTF-8?q?=E3=80=91=E6=9B=B4=E6=96=B0devops=E8=B5=84=E6=BA=90=E6=B1=87?= =?UTF-8?q?=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kernel/scanner/api/DevOpsReportApi.java | 10 +- .../kernel/scanner/api/ResourceReportApi.java | 17 ++ .../devops/DevOpsReportResourceParam.java | 10 +- .../resource/SysResourcePersistencePojo.java | 161 ++++++++++++++++++ .../scanner/ResourceReportListener.java | 6 +- .../service/impl/SysResourceServiceImpl.java | 25 ++- 6 files changed, 212 insertions(+), 17 deletions(-) create mode 100644 kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/pojo/resource/SysResourcePersistencePojo.java diff --git a/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/DevOpsReportApi.java b/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/DevOpsReportApi.java index 8d942b169..e31a1b920 100644 --- a/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/DevOpsReportApi.java +++ b/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/DevOpsReportApi.java @@ -25,9 +25,9 @@ package cn.stylefeng.roses.kernel.scanner.api; import cn.stylefeng.roses.kernel.scanner.api.pojo.devops.DevOpsReportProperties; -import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceDefinition; +import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.SysResourcePersistencePojo; -import java.util.Map; +import java.util.List; /** * 向DevOps一体化平台汇报资源的api @@ -40,11 +40,11 @@ public interface DevOpsReportApi { /** * 向DevOps一体化平台汇报资源 * - * @param devOpsReportProperties DevOps平台的系统配置 - * @param resourceDefinitions 资源汇报具体数据 + * @param devOpsReportProperties DevOps平台的系统配置 + * @param sysResourcePersistencePojoList 资源汇报具体数据 * @author fengshuonan * @date 2022/1/11 15:02 */ - void reportResources(DevOpsReportProperties devOpsReportProperties, Map> resourceDefinitions); + void reportResources(DevOpsReportProperties devOpsReportProperties, List sysResourcePersistencePojoList); } diff --git a/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/ResourceReportApi.java b/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/ResourceReportApi.java index 8ea8ae225..c56a9b37f 100644 --- a/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/ResourceReportApi.java +++ b/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/ResourceReportApi.java @@ -25,10 +25,13 @@ package cn.stylefeng.roses.kernel.scanner.api; import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ReportResourceParam; +import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.SysResourcePersistencePojo; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import java.util.List; + /** * 资源持久化服务api,将扫描的资源汇报给系统管理用 * @@ -51,4 +54,18 @@ public interface ResourceReportApi { @RequestMapping(value = "/resourceService/reportResources", method = RequestMethod.POST) void reportResources(@RequestBody ReportResourceParam reportResourceReq); + /** + * 持久化资源集合到某个服务中 + *

+ * 如果是单体项目,则吧资源汇报给本服务 + *

+ * 如果是微服务项目,则会有个consumer会将本服务的资源发送给资源管理者(一般为system服务) + * + * @param reportResourceReq 资源汇报接口 + * @author fengshuonan + * @date 2020/10/19 22:02 + */ + @RequestMapping(value = "/resourceService/reportResourcesAndGetResult", method = RequestMethod.POST) + List reportResourcesAndGetResult(@RequestBody ReportResourceParam reportResourceReq); + } diff --git a/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/pojo/devops/DevOpsReportResourceParam.java b/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/pojo/devops/DevOpsReportResourceParam.java index 07a2db2fe..a01401d7e 100644 --- a/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/pojo/devops/DevOpsReportResourceParam.java +++ b/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/pojo/devops/DevOpsReportResourceParam.java @@ -25,11 +25,11 @@ package cn.stylefeng.roses.kernel.scanner.api.pojo.devops; import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest; -import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceDefinition; +import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.SysResourcePersistencePojo; import lombok.Data; import lombok.EqualsAndHashCode; -import java.util.Map; +import java.util.List; /** * 资源发送到DevOps一体化平台的参数 @@ -56,17 +56,17 @@ public class DevOpsReportResourceParam extends BaseRequest { *

* 第二个key是资源的编码 */ - private Map> resourceDefinitions; + private List sysResourcePersistencePojoList; /** * FieldMetadata类的全路径 */ private String fieldMetadataClassPath; - public DevOpsReportResourceParam(String projectUniqueCode, String interactionToken, Map> resourceDefinitions, String fieldMetadataClassPath) { + public DevOpsReportResourceParam(String projectUniqueCode, String interactionToken, List sysResourcePersistencePojoList, String fieldMetadataClassPath) { this.projectUniqueCode = projectUniqueCode; this.interactionToken = interactionToken; - this.resourceDefinitions = resourceDefinitions; + this.sysResourcePersistencePojoList = sysResourcePersistencePojoList; this.fieldMetadataClassPath = fieldMetadataClassPath; } } diff --git a/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/pojo/resource/SysResourcePersistencePojo.java b/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/pojo/resource/SysResourcePersistencePojo.java new file mode 100644 index 000000000..843c28a3b --- /dev/null +++ b/kernel-d-scanner/scanner-api/src/main/java/cn/stylefeng/roses/kernel/scanner/api/pojo/resource/SysResourcePersistencePojo.java @@ -0,0 +1,161 @@ +/* + * Copyright [2020-2030] [https://www.stylefeng.cn] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Guns源码头部的版权声明。 + * 3.请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns + * 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns + * 6.若您的项目无法满足以上几点,可申请商业授权 + */ +package cn.stylefeng.roses.kernel.scanner.api.pojo.resource; + +import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription; +import lombok.Data; + +/** + * 资源表 + * + * @author fengshuonan + * @date 2020/11/23 22:45 + */ +@Data +public class SysResourcePersistencePojo { + + /** + * 资源id + */ + @ChineseDescription("资源id") + private Long resourceId; + + /** + * 应用编码 + */ + @ChineseDescription("应用编码") + private String appCode; + + /** + * 资源编码 + */ + @ChineseDescription("资源编码") + private String resourceCode; + + /** + * 资源名称 + */ + @ChineseDescription("资源名称") + private String resourceName; + + /** + * 项目编码 + */ + @ChineseDescription("项目编码") + private String projectCode; + + /** + * 类名称 + */ + @ChineseDescription("类名称") + private String className; + + /** + * 方法名称 + */ + @ChineseDescription("方法名称") + private String methodName; + + /** + * 资源模块编码 + */ + @ChineseDescription("资源模块编码") + private String modularCode; + + /** + * 资源模块名称 + */ + @ChineseDescription("资源模块名称") + private String modularName; + + /** + * 资源初始化的服务器ip地址 + */ + @ChineseDescription("资源初始化的服务器ip地址") + private String ipAddress; + + /** + * 是否是视图类型:Y-是,N-否 + * 如果是视图类型,url需要以 '/view' 开头, + * 视图类型的接口会渲染出html界面,而不是json数据, + * 视图层一般会在前后端不分离项目出现 + */ + @ChineseDescription("是否是视图类型") + private String viewFlag; + + /** + * 资源url + */ + @ChineseDescription("资源url") + private String url; + + /** + * http请求方法 + */ + @ChineseDescription("http请求方法") + private String httpMethod; + + /** + * 是否需要登录:Y-是,N-否 + */ + @ChineseDescription("是否需要登录:Y-是,N-否") + private String requiredLoginFlag; + + /** + * 是否需要鉴权:Y-是,N-否 + */ + @ChineseDescription("是否需要鉴权:Y-是,N-否") + private String requiredPermissionFlag; + + /** + * 需要进行参数校验的分组 + *

+ * json形式存储 + */ + @ChineseDescription("需要进行参数校验的分组") + private String validateGroups; + + /** + * 接口参数的字段描述 + *

+ * json形式存储 + */ + @ChineseDescription("接口参数的字段描述") + private String paramFieldDescriptions; + + /** + * 接口返回结果的字段描述 + *

+ * json形式存储 + */ + @ChineseDescription("接口返回结果的字段描述") + private String responseFieldDescriptions; + + /** + * 应用名称 + */ + private transient String appName; + +} diff --git a/kernel-d-scanner/scanner-sdk-scanner/src/main/java/cn/stylefeng/roses/kernel/scanner/ResourceReportListener.java b/kernel-d-scanner/scanner-sdk-scanner/src/main/java/cn/stylefeng/roses/kernel/scanner/ResourceReportListener.java index aea51f249..d25340b45 100644 --- a/kernel-d-scanner/scanner-sdk-scanner/src/main/java/cn/stylefeng/roses/kernel/scanner/ResourceReportListener.java +++ b/kernel-d-scanner/scanner-sdk-scanner/src/main/java/cn/stylefeng/roses/kernel/scanner/ResourceReportListener.java @@ -34,12 +34,14 @@ import cn.stylefeng.roses.kernel.scanner.api.holder.InitScanFlagHolder; import cn.stylefeng.roses.kernel.scanner.api.pojo.devops.DevOpsReportProperties; import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ReportResourceParam; import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceDefinition; +import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.SysResourcePersistencePojo; import cn.stylefeng.roses.kernel.scanner.api.pojo.scanner.ScannerProperties; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.Ordered; +import java.util.List; import java.util.Map; /** @@ -71,7 +73,7 @@ public class ResourceReportListener extends ApplicationReadyListener implements // 持久化资源,发送资源到资源服务或本项目 ResourceReportApi resourceService = applicationContext.getBean(ResourceReportApi.class); - resourceService.reportResources(new ReportResourceParam(scannerProperties.getAppCode(), modularResources)); + List persistencePojos = resourceService.reportResourcesAndGetResult(new ReportResourceParam(scannerProperties.getAppCode(), modularResources)); // 向DevOps一体化平台汇报资源 DevOpsReportProperties devOpsReportProperties = applicationContext.getBean(DevOpsReportProperties.class); @@ -82,7 +84,7 @@ public class ResourceReportListener extends ApplicationReadyListener implements devOpsReportProperties.getProjectUniqueCode(), devOpsReportProperties.getServerHost())) { DevOpsReportApi devOpsReportApi = applicationContext.getBean(DevOpsReportApi.class); - devOpsReportApi.reportResources(devOpsReportProperties, modularResources); + devOpsReportApi.reportResources(devOpsReportProperties, persistencePojos); } // 设置标识已经扫描过 diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/SysResourceServiceImpl.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/SysResourceServiceImpl.java index 53684c460..9db501b5f 100644 --- a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/SysResourceServiceImpl.java +++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/SysResourceServiceImpl.java @@ -24,6 +24,7 @@ */ package cn.stylefeng.roses.kernel.system.modular.resource.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -53,6 +54,7 @@ import cn.stylefeng.roses.kernel.scanner.api.pojo.devops.DevOpsReportResourcePar import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ReportResourceParam; import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceDefinition; import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceUrlParam; +import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.SysResourcePersistencePojo; import cn.stylefeng.roses.kernel.system.api.ResourceServiceApi; import cn.stylefeng.roses.kernel.system.api.RoleServiceApi; import cn.stylefeng.roses.kernel.system.api.pojo.resource.LayuiApiResourceTreeNode; @@ -64,7 +66,6 @@ import cn.stylefeng.roses.kernel.system.modular.resource.mapper.SysResourceMappe import cn.stylefeng.roses.kernel.system.modular.resource.pojo.ResourceTreeNode; import cn.stylefeng.roses.kernel.system.modular.resource.service.SysResourceService; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.serializer.SerializerFeature; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; @@ -290,12 +291,16 @@ public class SysResourceServiceImpl extends ServiceImpl reportResourcesAndGetResult(ReportResourceParam reportResourceReq) { String projectCode = reportResourceReq.getProjectCode(); Map> resourceDefinitions = reportResourceReq.getResourceDefinitions(); if (ObjectUtil.isEmpty(projectCode) || resourceDefinitions == null) { - return; + return new ArrayList<>(); } //根据project删除该项目下的所有资源 @@ -321,6 +326,16 @@ public class SysResourceServiceImpl extends ServiceImpl entry : resourceDefinitionMap.entrySet()) { resourceCache.put(entry.getKey(), entry.getValue()); } + + // 组装返回结果 + ArrayList finalResult = new ArrayList<>(); + for (SysResource item : allResources) { + SysResourcePersistencePojo sysResourcePersistencePojo = new SysResourcePersistencePojo(); + BeanUtil.copyProperties(item, sysResourcePersistencePojo); + finalResult.add(sysResourcePersistencePojo); + } + + return finalResult; } @Override @@ -386,7 +401,7 @@ public class SysResourceServiceImpl extends ServiceImpl> resourceDefinitions) { + public void reportResources(DevOpsReportProperties devOpsReportProperties, List sysResourcePersistencePojoList) { // 去掉请求地址结尾的左斜杠 String serverHost = devOpsReportProperties.getServerHost(); @@ -407,11 +422,11 @@ public class SysResourceServiceImpl extends ServiceImpl