【7.6.0】【sys】【resource】资源汇报实现

pull/57/head
fengshuonan 2023-06-18 10:50:15 +08:00
parent 05834f88e7
commit d1786fb474
3 changed files with 130 additions and 0 deletions

View File

@ -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;
}
}

View File

@ -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);
}

View File

@ -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) {