【7.1.6】【scanner】更新devops资源汇报

pull/25/head
fengshuonan 2022-01-12 16:57:11 +08:00
parent 1b56ce2966
commit d88039c274
6 changed files with 212 additions and 17 deletions

View File

@ -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;
/**
* DevOpsapi
@ -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<String, Map<String, ResourceDefinition>> resourceDefinitions);
void reportResources(DevOpsReportProperties devOpsReportProperties, List<SysResourcePersistencePojo> sysResourcePersistencePojoList);
}

View File

@ -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);
/**
*
* <p>
*
* <p>
* consumersystem
*
* @param reportResourceReq
* @author fengshuonan
* @date 2020/10/19 22:02
*/
@RequestMapping(value = "/resourceService/reportResourcesAndGetResult", method = RequestMethod.POST)
List<SysResourcePersistencePojo> reportResourcesAndGetResult(@RequestBody ReportResourceParam reportResourceReq);
}

View File

@ -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 {
* <p>
* key
*/
private Map<String, Map<String, ResourceDefinition>> resourceDefinitions;
private List<SysResourcePersistencePojo> sysResourcePersistencePojoList;
/**
* FieldMetadata
*/
private String fieldMetadataClassPath;
public DevOpsReportResourceParam(String projectUniqueCode, String interactionToken, Map<String, Map<String, ResourceDefinition>> resourceDefinitions, String fieldMetadataClassPath) {
public DevOpsReportResourceParam(String projectUniqueCode, String interactionToken, List<SysResourcePersistencePojo> sysResourcePersistencePojoList, String fieldMetadataClassPath) {
this.projectUniqueCode = projectUniqueCode;
this.interactionToken = interactionToken;
this.resourceDefinitions = resourceDefinitions;
this.sysResourcePersistencePojoList = sysResourcePersistencePojoList;
this.fieldMetadataClassPath = fieldMetadataClassPath;
}
}

View File

@ -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.
*
* GunsAPACHE 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'
* htmljson
*
*/
@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;
/**
*
* <p>
* json
*/
@ChineseDescription("需要进行参数校验的分组")
private String validateGroups;
/**
*
* <p>
* json
*/
@ChineseDescription("接口参数的字段描述")
private String paramFieldDescriptions;
/**
*
* <p>
* json
*/
@ChineseDescription("接口返回结果的字段描述")
private String responseFieldDescriptions;
/**
*
*/
private transient String appName;
}

View File

@ -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<SysResourcePersistencePojo> 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);
}
// 设置标识已经扫描过

View File

@ -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<SysResourceMapper, SysRe
@Override
@Transactional(rollbackFor = Exception.class)
public void reportResources(@RequestBody ReportResourceParam reportResourceReq) {
this.reportResourcesAndGetResult(reportResourceReq);
}
@Override
public List<SysResourcePersistencePojo> reportResourcesAndGetResult(ReportResourceParam reportResourceReq) {
String projectCode = reportResourceReq.getProjectCode();
Map<String, Map<String, ResourceDefinition>> resourceDefinitions = reportResourceReq.getResourceDefinitions();
if (ObjectUtil.isEmpty(projectCode) || resourceDefinitions == null) {
return;
return new ArrayList<>();
}
//根据project删除该项目下的所有资源
@ -321,6 +326,16 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
for (Map.Entry<String, ResourceDefinition> entry : resourceDefinitionMap.entrySet()) {
resourceCache.put(entry.getKey(), entry.getValue());
}
// 组装返回结果
ArrayList<SysResourcePersistencePojo> 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<SysResourceMapper, SysRe
}
@Override
public void reportResources(DevOpsReportProperties devOpsReportProperties, Map<String, Map<String, ResourceDefinition>> resourceDefinitions) {
public void reportResources(DevOpsReportProperties devOpsReportProperties, List<SysResourcePersistencePojo> sysResourcePersistencePojoList) {
// 去掉请求地址结尾的左斜杠
String serverHost = devOpsReportProperties.getServerHost();
@ -407,11 +422,11 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
// 组装请求参数
DevOpsReportResourceParam devOpsReportResourceParam = new DevOpsReportResourceParam(
devOpsReportProperties.getProjectUniqueCode(), jwtToken, resourceDefinitions, devOpsReportProperties.getFieldMetadataClassPath());
devOpsReportProperties.getProjectUniqueCode(), jwtToken, sysResourcePersistencePojoList, devOpsReportProperties.getFieldMetadataClassPath());
// 进行post请求汇报资源
HttpRequest httpRequest = HttpUtil.createPost(devopsReportUrl);
httpRequest.body(JSON.toJSONString(devOpsReportResourceParam, SerializerFeature.WriteClassName));
httpRequest.body(JSON.toJSONString(devOpsReportResourceParam));
httpRequest.setConnectionTimeout(Convert.toInt(DEVOPS_REPORT_CONNECTION_TIMEOUT_SECONDS * 1000));
try {
HttpResponse execute = httpRequest.execute();