feat(REQ-2899):新增导入接口,暂没实现。。

This commit is contained in:
李昆鹏 2024-08-30 20:24:48 +08:00
parent 07b8226692
commit 293897e697
10 changed files with 169 additions and 250 deletions

View File

@ -70,9 +70,9 @@ public interface PageElementApi {
/** 查询页面元素关联关系 **/
@PostMapping("/api/pageElement/getFeatureResourceRelations")
ApiResult<FeatureResourcePageElementRelationViewResp> getFeatureResourceRelations(@RequestBody @Valid IdReq req);
ApiResult<List<PageElementRelationFeatureResourceResp>> getFeatureResourceRelations(@RequestBody @Valid IdReq req);
/** 查询页面元素关联关系 **/
@PostMapping("/api/pageElement/importData")
ApiResult<Void> importData(@RequestBody @Valid PageElementImportDataReq req);
ApiResult<Void> importData(@RequestBody @Valid List<PageElementImportDataReq> req);
}

View File

@ -26,7 +26,7 @@ public class SaveOrUpdatePageElementReq {
private String itemCode;
/** 分组ID **/
private Long pageId;
private String groupCode;
/** 页面元素类型PAGE/COMPONENT **/
@NotBlank(message = "页面元素类型不能为空")

View File

@ -1,97 +0,0 @@
package cn.axzo.tyr.client.model.res;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author likunpeng
* @version 1.0
* @date 2024/8/23
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class FeatureResourcePageElementRelationViewResp {
/** 菜单资源列表 **/
private List<FeatureResourceBasicDTO> featureResources;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class FeatureResourceBasicDTO {
private Long id;
/**
* 资源编码-权限码
*/
private String uniCode;
/**
* 资源名称
*/
private String featureName;
/**
* 资源类型1-菜单 2-页面 3-应用入口 4-组件 5-root 6-分组
*/
private Integer featureType;
/** 前端元素资源列表 **/
private PageElementBasicDTO pageElement;
private List<FeatureResourceBasicDTO> children;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class PageElementBasicDTO {
private Long id;
/**
* 元素的组编码
*/
private String groupCode;
/**
* 元素的组编码
*/
private String groupName;
/**
* 元素编码
*/
private String code;
/**
* 元素名称
*/
private String name;
/**
* 元素类型
*/
private String type;
/**
* 是否关联
*/
private Boolean hasRelation;
/**
* 1路由页面
*/
private Integer relationType;
private List<PageElementBasicDTO> children;
}
}

View File

@ -35,5 +35,7 @@ public class ListPageElementCategoryResp {
private String itemCode;
/** 项目名称 **/
private String itemName;
/** 端 **/
private String terminal;
}
}

View File

@ -0,0 +1,82 @@
package cn.axzo.tyr.client.model.res;
import cn.axzo.basics.common.model.IBaseTree;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author likunpeng
* @date 2024/8/30
* @version 1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PageElementRelationFeatureResourceResp implements IBaseTree<PageElementRelationFeatureResourceResp, Long> {
private Long id;
/**
* 上级资源ID
*/
private Long parentId;
/**
* 资源编码-权限码
*/
private String uniCode;
/**
* 资源名称
*/
private String featureName;
/**
* 资源类型1-菜单 2-页面 3-应用入口 4-组件 5-root 6-分组
*/
private Integer featureType;
/**
* 子节点
*/
private List<PageElementRelationFeatureResourceResp> children;
/**
* 是否关联
*/
private Boolean hasRelation;
/**
* 1路由页面
*/
private Integer relationType;
@JsonIgnore
@Override
public Long getNodeCode() {
return this.getId();
}
@JsonIgnore
@Override
public Long getParentNodeCode() {
return this.getParentId();
}
@JsonIgnore
@Override
public List<PageElementRelationFeatureResourceResp> getNodeChildren() {
return this.children;
}
@Override
public void setNodeChildren(List<PageElementRelationFeatureResourceResp> nodeChildren) {
this.children = nodeChildren;
}
}

View File

@ -31,6 +31,7 @@ public class TyrServerDevApplication {
System.setProperty("spring.redis.host","172.16.2.23");
System.setProperty("xxl.job.admin.addresses","http://dev-xxl-job.axzo.cn/xxl-job-admin");
System.setProperty("rocketmq.name-server", "172.16.2.82:9876");
System.setProperty("spring.datasource.url", "jdbc:mysql://172.16.2.171:3306/pudge?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=true&verifyServerCertificate=false&rewriteBatchedStatements=true");
SpringApplication application = new SpringApplication(TyrServerDevApplication.class);
ApplicationContext applicationContext = application.run(args);
Environment env = applicationContext.getEnvironment();

View File

@ -92,12 +92,12 @@ public class PageElementController implements PageElementApi {
}
@Override
public ApiResult<FeatureResourcePageElementRelationViewResp> getFeatureResourceRelations(IdReq req) {
public ApiResult<List<PageElementRelationFeatureResourceResp>> getFeatureResourceRelations(IdReq req) {
return ApiResult.ok(saasPageElementService.getFeatureResourceRelations(req.getId()));
}
@Override
public ApiResult<Void> importData(PageElementImportDataReq req) {
public ApiResult<Void> importData(List<PageElementImportDataReq> req) {
saasPageElementService.importData(req);
return ApiResult.ok();
}

View File

@ -82,7 +82,7 @@ public interface SaasPageElementService extends IService<SaasPageElement> {
void delete(DeletePageElementReq req);
FeatureResourcePageElementRelationViewResp getFeatureResourceRelations(Long pageElementId);
List<PageElementRelationFeatureResourceResp> getFeatureResourceRelations(Long pageElementId);
void importData(PageElementImportDataReq req);
void importData(List<PageElementImportDataReq> req);
}

View File

@ -61,6 +61,7 @@ public class SaasPageElementCategoryServiceImpl implements SaasPageElementCatego
.id(c.getId())
.itemCode(c.getItemCode())
.itemName(c.getItemName())
.terminal(c.getTerminal())
.build()).collect(Collectors.toList())).build());
});
return categoryResps;

View File

@ -4,6 +4,7 @@ import cn.axzo.basics.common.BeanMapper;
import cn.axzo.basics.common.constant.enums.DeleteEnum;
import cn.axzo.basics.common.util.AssertUtil;
import cn.axzo.basics.common.util.StopWatchUtil;
import cn.axzo.basics.common.util.TreeUtil;
import cn.axzo.basics.profiles.api.UserProfileServiceApi;
import cn.axzo.basics.profiles.dto.basic.PersonProfileDto;
import cn.axzo.foundation.dao.support.converter.PageConverter;
@ -562,10 +563,10 @@ public class SaasPageElementServiceImpl extends ServiceImpl<SaasPageElementMappe
basePageElement.setTerminal(category.getTerminal());
basePageElement.setItemName(category.getItemName());
} else if (PageElementTypeEnum.COMPONENT.getCode().equals(req.getType())) {
AssertUtil.isTrue(Objects.nonNull(req.getPageId()) && req.getPageId() > 0, "页面元素不存在");
AssertUtil.isTrue(StringUtils.isNotBlank(req.getGroupCode()), "页面元素不存在");
List<SaasPageElement> pageElements = saasPageElementDao.lambdaQuery()
.eq(BaseEntity::getIsDelete, DeleteEnum.NORMAL.getValue())
.eq(SaasPageElement::getId, req.getPageId()).list();
.eq(SaasPageElement::getCode, req.getGroupCode()).list();
AssertUtil.notEmpty(pageElements, "父级元素不存在。");
SaasPageElement pageElement = pageElements.get(0);
@ -622,38 +623,95 @@ public class SaasPageElementServiceImpl extends ServiceImpl<SaasPageElementMappe
}
@Override
public FeatureResourcePageElementRelationViewResp getFeatureResourceRelations(Long pageElementId) {
public List<PageElementRelationFeatureResourceResp> getFeatureResourceRelations(Long pageElementId) {
SaasPageElement dbPageElement = saasPageElementDao.getById(pageElementId);
AssertUtil.notNull(dbPageElement, "页面元素资源不存在");
List<SaasPageElement> pageElements = saasPageElementDao.listByGroupCodesAndExcludeIds(Lists.newArrayList(dbPageElement.getGroupCode()), null, dbPageElement.getTerminal(), null);
FeatureResourcePageElementRelationViewResp.PageElementBasicDTO elementBasic = getPageElementBasic(pageElements);
if (Objects.isNull(elementBasic)) {
return null;
}
List<SaasPageElementFeatureResourceRelation> relations = saasPageElementFeatureResourceRelationDao.lambdaQuery()
.eq(SaasPageElementFeatureResourceRelation::getIsDelete, DeleteEnum.NORMAL.getValue())
.in(SaasPageElementFeatureResourceRelation::getPageElementCode, pageElements.stream().map(SaasPageElement::getCode).collect(Collectors.toSet()))
.eq(SaasPageElementFeatureResourceRelation::getPageElementCode, dbPageElement.getCode())
.eq(SaasPageElementFeatureResourceRelation::getTerminal, dbPageElement.getTerminal())
.list();
if (CollectionUtils.isEmpty(relations)) {
return null;
}
List<FeatureResourcePageElementRelationViewResp.FeatureResourceBasicDTO> featureResourceBasics = getFeatureResourceBasic(relations.stream().map(SaasPageElementFeatureResourceRelation::getFeatureResourceUniCode).collect(Collectors.toList()), dbPageElement.getTerminal());
if (CollectionUtils.isEmpty(featureResourceBasics)) {
return null;
return Collections.emptyList();
}
fillElementToResource(featureResourceBasics, relations, elementBasic);
List<SaasFeatureResource> pageFeatureResources = saasFeatureResourceDao.lambdaQuery()
.eq(SaasFeatureResource::getTerminal, dbPageElement.getTerminal())
.in(SaasFeatureResource::getUniCode, relations.stream().map(SaasPageElementFeatureResourceRelation::getFeatureResourceUniCode).collect(Collectors.toSet()))
.in(SaasFeatureResource::getFeatureType, Lists.newArrayList(FeatureResourceType.PAGE.getCode(), FeatureResourceType.APP_ENTRY.getCode()))
.eq(BaseEntity::getIsDelete, DeleteEnum.NORMAL.getValue())
.list();
if (CollectionUtils.isEmpty(pageFeatureResources)) {
return Collections.emptyList();
}
List<SaasFeatureResource> pageParentFeatureResources = saasFeatureResourceDao.lambdaQuery()
.eq(SaasFeatureResource::getTerminal, dbPageElement.getTerminal())
.in(SaasFeatureResource::getId, pageFeatureResources.stream().map(SaasFeatureResource::getParentId).collect(Collectors.toSet()))
.eq(BaseEntity::getIsDelete, DeleteEnum.NORMAL.getValue())
.list();
List<SaasFeatureResource> pageChildrenFeatureResources = saasFeatureResourceDao.lambdaQuery()
.eq(BaseEntity::getIsDelete,0)
.and(i -> pageFeatureResources.forEach(f -> i.or().likeRight(SaasFeatureResource::getPath, f.getPath())))
.list();
List<SaasFeatureResource> allFeatureResources = Lists.newArrayList(pageFeatureResources);
if (CollectionUtils.isNotEmpty(pageParentFeatureResources)) {
allFeatureResources.addAll(pageParentFeatureResources);
}
if (CollectionUtils.isNotEmpty(pageChildrenFeatureResources)) {
allFeatureResources.addAll(pageChildrenFeatureResources);
}
return FeatureResourcePageElementRelationViewResp.builder().featureResources(featureResourceBasics).build();
Map<String, SaasPageElementFeatureResourceRelation> uniCodeRelationMap = relations.stream()
.collect(Collectors.toMap(SaasPageElementFeatureResourceRelation::getFeatureResourceUniCode, Function.identity(), (v1, v2) -> v1));
List<PageElementRelationFeatureResourceResp> reps = allFeatureResources.stream().map(e -> PageElementRelationFeatureResourceResp.builder()
.id(e.getId())
.parentId(e.getParentId())
.uniCode(e.getUniCode())
.featureName(e.getFeatureName())
.featureType(e.getFeatureType())
.hasRelation(uniCodeRelationMap.containsKey(e.getUniCode()))
.relationType(Optional.ofNullable(uniCodeRelationMap.get(e.getUniCode())).map(SaasPageElementFeatureResourceRelation::getType).orElse(null))
.build()).distinct().collect(Collectors.toList());
return TreeUtil.buildTree(reps);
}
@Override
public void importData(PageElementImportDataReq req) {
saasPageElementDao.lambdaQuery()
public void importData(List<PageElementImportDataReq> req) {
Integer codeCount = saasPageElementDao.lambdaQuery()
.eq(BaseEntity::getIsDelete, DeleteEnum.NORMAL.getValue())
.in(SaasPageElement::getCode, req.stream().map(PageElementImportDataReq::getCode).collect(Collectors.toList()))
.count();
AssertUtil.isTrue(codeCount <= 0, "导入的资源编码已存在。");
Set<String> itemCodes = req.stream().map(PageElementImportDataReq::getItemCode).collect(Collectors.toSet());
List<SaasPageElementCategory> categories = saasPageElementCategoryDao.lambdaQuery()
.eq(BaseEntity::getIsDelete, DeleteEnum.NORMAL.getValue())
.in(SaasPageElementCategory::getItemCode, itemCodes)
.list();
AssertUtil.isTrue(itemCodes.size() == categories.size(), "元素分类编码系统中有未存在的。");
Map<String, SaasPageElementCategory> categoryMap = categories.stream().collect(Collectors.toMap(SaasPageElementCategory::getItemCode, Function.identity(), (v1, v2) -> v1));
List<SaasPageElement> elements = req.stream().map(e -> {
SaasPageElementCategory category = categoryMap.get(e.getItemCode());
AssertUtil.notNull(category, e.getItemCode() + "不存在。");
return SaasPageElement.builder()
.version(e.getVersion())
.groupCode(e.getGroupCode())
.code(e.getCode())
.name(e.getName())
.type(e.getType())
.linkUrl(e.getLinkUrl())
.terminal(e.getTerminal())
.appType(e.getAppType())
.itemCode(e.getItemCode())
.itemName(category.getItemName())
.createName(Optional.ofNullable(e.getOperatorId()).map(Objects::toString).orElse(StringUtils.EMPTY))
.appId(e.getAppId())
.build();
}).collect(Collectors.toList());
Lists.partition(elements,500).forEach(saasPageElementDao::saveBatch);
}
private PageElementResp from(SaasPageElement saasPageElement,
@ -767,134 +825,6 @@ public class SaasPageElementServiceImpl extends ServiceImpl<SaasPageElementMappe
.build());
}
private FeatureResourcePageElementRelationViewResp.PageElementBasicDTO getPageElementBasic(List<SaasPageElement> pageElements) {
SaasPageElement pageTypeElement = pageElements.stream().filter(e -> PageElementTypeEnum.PAGE.getCode().equals(e.getType())).findFirst().orElse(null);
if (Objects.isNull(pageTypeElement)) {
return null;
}
return FeatureResourcePageElementRelationViewResp.PageElementBasicDTO.builder()
.id(pageTypeElement.getId())
.groupCode(pageTypeElement.getGroupCode())
.groupName(pageTypeElement.getName())
.code(pageTypeElement.getCode())
.name(pageTypeElement.getName())
.type(pageTypeElement.getType())
.children(pageElements.stream().filter(e -> PageElementTypeEnum.COMPONENT.getCode().equals(e.getType())).map(e -> FeatureResourcePageElementRelationViewResp.PageElementBasicDTO.builder()
.id(e.getId())
.groupCode(pageTypeElement.getGroupCode())
.groupName(pageTypeElement.getName())
.code(e.getCode())
.name(e.getName())
.type(e.getType()).build()).collect(Collectors.toList()))
.build();
}
private List<FeatureResourcePageElementRelationViewResp.FeatureResourceBasicDTO> getFeatureResourceBasic(List<String> uniCodes, String terminal) {
List<SaasFeatureResource> featureResources = saasFeatureResourceDao.lambdaQuery()
.eq(SaasFeatureResource::getTerminal, terminal)
.in(SaasFeatureResource::getUniCode, uniCodes)
.eq(BaseEntity::getIsDelete, DeleteEnum.NORMAL.getValue())
.list();
List<SaasFeatureResource> parentFrs = featureResources.stream().filter(e -> {
if (Objects.isNull(e.getFeatureType())) {
return false;
}
return FeatureResourceType.PAGE.getCode().equals(e.getFeatureType());
}).collect(Collectors.toList());
List<Long> componentAndAppEntityParentIds = featureResources.stream().filter(e -> {
if (Objects.isNull(e.getFeatureType())) {
return false;
}
return FeatureResourceType.COMPONENT.getCode().equals(e.getFeatureType()) || FeatureResourceType.APP_ENTRY.getCode().equals(e.getFeatureType());
}).map(SaasFeatureResource::getParentId).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(componentAndAppEntityParentIds)) {
List<SaasFeatureResource> parentResources = saasFeatureResourceDao.lambdaQuery()
.eq(SaasFeatureResource::getTerminal, terminal)
.in(SaasFeatureResource::getId, componentAndAppEntityParentIds)
.eq(BaseEntity::getIsDelete, DeleteEnum.NORMAL.getValue())
.list();
if (CollectionUtils.isNotEmpty(parentResources)) {
parentFrs.addAll(parentResources);
}
}
parentFrs = parentFrs.stream().distinct().collect(Collectors.toList());
Map<Long, List<SaasFeatureResource>> childrenMap = featureResources.stream().filter(e -> FeatureResourceType.COMPONENT.getCode().equals(e.getFeatureType())
|| FeatureResourceType.APP_ENTRY.getCode().equals(e.getFeatureType())).collect(Collectors.groupingBy(SaasFeatureResource::getParentId));
List<FeatureResourcePageElementRelationViewResp.FeatureResourceBasicDTO> allParents = parentFrs.stream().map(e -> FeatureResourcePageElementRelationViewResp.FeatureResourceBasicDTO.builder()
.id(e.getId())
.uniCode(e.getUniCode())
.featureName(e.getFeatureName())
.featureType(e.getFeatureType())
.children(Lists.newArrayList())
.build()).distinct().collect(Collectors.toList());
if (CollectionUtils.isEmpty(allParents)) {
return null;
}
for (FeatureResourcePageElementRelationViewResp.FeatureResourceBasicDTO basic : allParents) {
List<SaasFeatureResource> children = childrenMap.get(basic.getId());
if (CollectionUtils.isEmpty(children)) {
continue;
}
basic.setChildren(children.stream().map(e -> FeatureResourcePageElementRelationViewResp.FeatureResourceBasicDTO.builder()
.id(e.getId())
.uniCode(e.getUniCode())
.featureName(e.getFeatureName())
.featureType(e.getFeatureType())
.build()).collect(Collectors.toList()));
}
return allParents;
}
private void fillElementToResource(List<FeatureResourcePageElementRelationViewResp.FeatureResourceBasicDTO> resources, List<SaasPageElementFeatureResourceRelation> relations,
FeatureResourcePageElementRelationViewResp.PageElementBasicDTO elementBasic) {
Map<String, SaasPageElementFeatureResourceRelation> relationMap = relations.stream().collect(Collectors.toMap(r -> r.getFeatureResourceUniCode() + "_" + r.getPageElementCode(), Function.identity(), (v1, v2) -> v1));
for (FeatureResourcePageElementRelationViewResp.FeatureResourceBasicDTO resource : resources) {
recursiveSetElementToResource(resource, relationMap, elementBasic);
}
}
private void recursiveSetElementToResource(FeatureResourcePageElementRelationViewResp.FeatureResourceBasicDTO resource, Map<String, SaasPageElementFeatureResourceRelation> relationMap,
FeatureResourcePageElementRelationViewResp.PageElementBasicDTO elementBasic) {
if (Objects.isNull(resource)) {
return;
}
if (!FeatureResourceType.GROUP.getCode().equals(resource.getFeatureType())) {
FeatureResourcePageElementRelationViewResp.PageElementBasicDTO newPageElementBasic = FeatureResourcePageElementRelationViewResp.PageElementBasicDTO.builder()
.id(elementBasic.getId())
.groupCode(elementBasic.getGroupCode())
.groupName(elementBasic.getGroupName())
.code(elementBasic.getCode())
.name(elementBasic.getName())
.type(elementBasic.getType())
.hasRelation(Optional.ofNullable(relationMap.get(resource.getUniCode() + "_" + elementBasic.getCode())).isPresent())
.relationType(Optional.ofNullable(relationMap.get(resource.getUniCode() + "_" + elementBasic.getCode())).map(SaasPageElementFeatureResourceRelation::getType).orElse(0))
.build();
if (CollectionUtils.isNotEmpty(elementBasic.getChildren())) {
newPageElementBasic.setChildren(elementBasic.getChildren().stream().map(e -> FeatureResourcePageElementRelationViewResp.PageElementBasicDTO.builder()
.id(e.getId())
.groupCode(e.getGroupCode())
.groupName(e.getGroupName())
.code(e.getCode())
.name(e.getName())
.type(e.getType())
.hasRelation(Optional.ofNullable(relationMap.get(resource.getUniCode() + "_" + e.getCode())).isPresent())
.relationType(Optional.ofNullable(relationMap.get(resource.getUniCode() + "_" + e.getCode())).map(SaasPageElementFeatureResourceRelation::getType).orElse(0))
.build()).collect(Collectors.toList()));
}
resource.setPageElement(newPageElementBasic);
}
if (CollectionUtils.isNotEmpty(resource.getChildren())) {
resource.getChildren().forEach(e -> recursiveSetElementToResource(e, relationMap, elementBasic));
}
}
private List<PageElementCategoryAndElementResp> changeElementWithCategories(List<PageElementResp> list) {
List<PageElementCategoryAndElementResp> resps = Lists.newArrayList();
if (CollectionUtils.isEmpty(list)) {