mirror of https://gitee.com/stylefeng/roses
【7.6.0】【sys】【resource】资源汇报实现
parent
05834f88e7
commit
d1786fb474
|
@ -0,0 +1,86 @@
|
|||
package cn.stylefeng.roses.kernel.sys.modular.resource.service;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi;
|
||||
import cn.stylefeng.roses.kernel.scanner.api.ResourceReportApi;
|
||||
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.sys.modular.resource.entity.SysResource;
|
||||
import cn.stylefeng.roses.kernel.sys.modular.resource.factory.ResourceFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 资源扫描的搜集
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2023/6/18 10:34
|
||||
*/
|
||||
@Service
|
||||
public class DefaultResourceReporter implements ResourceReportApi {
|
||||
|
||||
@Resource
|
||||
private SysResourceService sysResourceService;
|
||||
|
||||
@Resource(name = "resourceCache")
|
||||
private CacheOperatorApi<ResourceDefinition> resourceCache;
|
||||
|
||||
@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 new ArrayList<>();
|
||||
}
|
||||
|
||||
// 根据project删除该项目下的所有资源
|
||||
this.sysResourceService.deleteResourceByProjectCode(projectCode);
|
||||
|
||||
// 获取当前应用的所有资源
|
||||
ArrayList<SysResource> allResources = new ArrayList<>();
|
||||
ArrayList<ResourceDefinition> resourceDefinitionArrayList = new ArrayList<>();
|
||||
for (Map.Entry<String, Map<String, ResourceDefinition>> appModularResources : resourceDefinitions.entrySet()) {
|
||||
Map<String, ResourceDefinition> value = appModularResources.getValue();
|
||||
for (Map.Entry<String, ResourceDefinition> modularResources : value.entrySet()) {
|
||||
resourceDefinitionArrayList.add(modularResources.getValue());
|
||||
SysResource resource = ResourceFactory.createResource(modularResources.getValue());
|
||||
allResources.add(resource);
|
||||
}
|
||||
}
|
||||
|
||||
// 将资源存入库中
|
||||
sysResourceService.batchSaveResourceList(allResources);
|
||||
|
||||
// 将资源存入缓存一份
|
||||
Map<String, ResourceDefinition> resourceDefinitionMap = ResourceFactory.orderedResourceDefinition(resourceDefinitionArrayList);
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
|
@ -30,6 +30,8 @@ import cn.stylefeng.roses.kernel.sys.modular.resource.entity.SysResource;
|
|||
import cn.stylefeng.roses.kernel.sys.modular.resource.pojo.ResourceRequest;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 资源服务类
|
||||
*
|
||||
|
@ -48,4 +50,21 @@ public interface SysResourceService extends IService<SysResource>, ResourceServi
|
|||
*/
|
||||
PageResult<SysResource> findPage(ResourceRequest resourceRequest);
|
||||
|
||||
/**
|
||||
* 删除某个项目的所有资源
|
||||
*
|
||||
* @param projectCode 项目编码,一般为spring application name
|
||||
* @author fengshuonan
|
||||
* @since 2020/11/24 20:46
|
||||
*/
|
||||
void deleteResourceByProjectCode(String projectCode);
|
||||
|
||||
/**
|
||||
* 批量保存系统资源
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2023/6/18 10:37
|
||||
*/
|
||||
void batchSaveResourceList(List<SysResource> sysResourceList);
|
||||
|
||||
}
|
||||
|
|
|
@ -24,12 +24,16 @@
|
|||
*/
|
||||
package cn.stylefeng.roses.kernel.sys.modular.resource.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.ListUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi;
|
||||
import cn.stylefeng.roses.kernel.db.api.context.DbOperatorContext;
|
||||
import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
|
||||
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
|
||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
||||
import cn.stylefeng.roses.kernel.rule.constants.RuleConstants;
|
||||
import cn.stylefeng.roses.kernel.rule.enums.DbTypeEnum;
|
||||
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
|
||||
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceDefinition;
|
||||
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceUrlParam;
|
||||
|
@ -73,6 +77,27 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
|
|||
return PageResultFactory.createPageResult(page);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteResourceByProjectCode(String projectCode) {
|
||||
LambdaQueryWrapper<SysResource> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(SysResource::getProjectCode, projectCode);
|
||||
this.remove(wrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void batchSaveResourceList(List<SysResource> sysResourceList) {
|
||||
DbTypeEnum currentDbType = DbOperatorContext.me().getCurrentDbType();
|
||||
if (DbTypeEnum.MYSQL.equals(currentDbType)) {
|
||||
// 分批插入记录
|
||||
List<List<SysResource>> split = ListUtil.split(sysResourceList, RuleConstants.DEFAULT_BATCH_INSERT_SIZE);
|
||||
for (List<SysResource> sysResources : split) {
|
||||
this.getBaseMapper().insertBatchSomeColumn(sysResources);
|
||||
}
|
||||
} else {
|
||||
this.saveBatch(sysResourceList, sysResourceList.size());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceDefinition getResourceByUrl(ResourceUrlParam resourceUrlReq) {
|
||||
|
||||
|
|
Loading…
Reference in New Issue