feat: (feature/REQ-3167) 修改同步前端资源的问题

This commit is contained in:
李龙 2024-11-29 18:31:30 +08:00
parent 6e4a26f839
commit 00657cac9c
17 changed files with 405 additions and 86 deletions

View File

@ -0,0 +1,34 @@
package cn.axzo.tyr.client.model.req;
import cn.axzo.foundation.dao.support.wrapper.CriteriaField;
import cn.axzo.foundation.dao.support.wrapper.Operator;
import cn.axzo.foundation.page.IPageReq;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.Set;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PageElementCategoryV2Req implements IPageReq {
@CriteriaField(ignore = true)
Integer page;
@CriteriaField(ignore = true)
Integer pageSize;
/**
* 排序使用示例createTime__DESC
*/
@CriteriaField(ignore = true)
List<String> sort;
@CriteriaField(field = "itemCode", operator = Operator.IN)
private Set<String> itemCodes;
}

View File

@ -41,4 +41,16 @@ public class PageElementFeatureResourceRelationReq implements IPageReq {
@CriteriaField(ignore = true) @CriteriaField(ignore = true)
private Set<PageElementFeatureResourceRelationTypeEnum> types; private Set<PageElementFeatureResourceRelationTypeEnum> types;
@CriteriaField(ignore = true)
private Boolean needPageElement;
@CriteriaField(ignore = true)
private Boolean needFeatureResource;
/**
* 需要跟needPageElement一起使用
*/
@CriteriaField(ignore = true)
private Boolean needPageElementCategory;
} }

View File

@ -50,4 +50,10 @@ public class PageElementReq implements IPageReq {
@CriteriaField(ignore = true) @CriteriaField(ignore = true)
private Boolean needPageElementCategory; private Boolean needPageElementCategory;
/**
* 现在只有组件的父节点是页面
*/
@CriteriaField(ignore = true)
private Boolean needAncestor;
} }

View File

@ -92,6 +92,18 @@ public class PageSaasFeatureResourceReq implements IPageReq {
@CriteriaField(ignore = true) @CriteriaField(ignore = true)
private Set<PageElementFeatureResourceRelationTypeEnum> pageElementTypes; private Set<PageElementFeatureResourceRelationTypeEnum> pageElementTypes;
/**
* 是否需要所有子节点
*/
@CriteriaField(ignore = true)
private Boolean needChildren;
/**
* 是否需要所有父节点
*/
@CriteriaField(ignore = true)
private Boolean needAncestor;
public PageResp toEmpty() { public PageResp toEmpty() {
return PageResp.builder() return PageResp.builder()
.current(this.getPage()) .current(this.getPage())

View File

@ -0,0 +1,54 @@
package cn.axzo.tyr.client.model.res;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PageElementFeatureResourceRelationResp {
private Long id;
private Date createAt;
private Date updateAt;
private Long isDelete;
private Integer type;
/**
* 创建人
*/
private Long createBy;
/**
* 更新人
*/
private Long updateBy;
/**
* 页面元素code
*/
private String pageElementCode;
/**
* 菜单组件code
*/
private String featureResourceUniCode;
/**
* 所属端
*/
private String terminal;
private PageElementResp pageElement;
private SaasFeatureResourceResp saasFeatureResource;
}

View File

@ -132,6 +132,8 @@ public class PageElementResp {
*/ */
private PageElementCategoryResp pageElementCategory; private PageElementCategoryResp pageElementCategory;
private PageElementResp ancestor;
@Data @Data
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor

View File

@ -155,6 +155,16 @@ public class SaasFeatureResourceResp {
*/ */
private List<PageElementResp> saasPageElements; private List<PageElementResp> saasPageElements;
/**
* 所有父节点
*/
private List<SaasFeatureResourceResp> ancestors;
/**
* 所有子节点
*/
private List<SaasFeatureResourceResp> children;
public Set<Long> resolvePath() { public Set<Long> resolvePath() {
return Optional.ofNullable(this.getPath()) return Optional.ofNullable(this.getPath())
.map(e -> Arrays.stream(e.split(",")).map(Long::valueOf).collect(Collectors.toSet())) .map(e -> Arrays.stream(e.split(",")).map(Long::valueOf).collect(Collectors.toSet()))

View File

@ -20,7 +20,7 @@ import java.util.List;
* @author: ZhanSiHu * @author: ZhanSiHu
* @date: 2024/4/3 10:25 * @date: 2024/4/3 10:25
*/ */
@FeignClient(name = "tyr", url = "${axzo.service.base.tyr:https://pre-api.axzo.cn/tyr}") @FeignClient(name = "tyr", url = "${axzo.service.base.tyr:https://test-api.axzo.cn/tyr}")
public interface BaseFeatureResourceApi { public interface BaseFeatureResourceApi {

View File

@ -37,30 +37,40 @@ public interface SaasFeatureResourceService extends IService<SaasFeatureResource
void updateFeatureAuthType(Long featureId, Integer authType); void updateFeatureAuthType(Long featureId, Integer authType);
/**递归的**/ /**递归的**/
@Deprecated
List<SaasFeatureResource> batchListDescendant(List<Long> featureIds); List<SaasFeatureResource> batchListDescendant(List<Long> featureIds);
@Deprecated
SaasFeatureResource featureResourceById(Long featureId); SaasFeatureResource featureResourceById(Long featureId);
@Deprecated
FeatureResourceTreeNode getTreeFeatureDescendant(DetailFeatureResourceReq param); FeatureResourceTreeNode getTreeFeatureDescendant(DetailFeatureResourceReq param);
/**菜单重排序**/ /**菜单重排序**/
void reorderMenuFeature(Long featureId, Integer offset); void reorderMenuFeature(Long featureId, Integer offset);
@Deprecated
/** 根据ID查询导航菜单页面信息 仅可显示 - 限制查询字段 **/ /** 根据ID查询导航菜单页面信息 仅可显示 - 限制查询字段 **/
List<SaasFeatureResource> listNavByIds(List<Long> featureIds, List<Integer> featureTypes); List<SaasFeatureResource> listNavByIds(List<Long> featureIds, List<Integer> featureTypes);
/** 资源权限通用查询 **/ /** 资源权限通用查询 **/
@Deprecated
List<ResourcePermission> permissionQuery(ResourcePermissionQueryDTO param); List<ResourcePermission> permissionQuery(ResourcePermissionQueryDTO param);
/** 查询资源树 **/ /** 查询资源树 **/
@Deprecated
List<FeatureResourceTreeNode> getTree(GetFeatureResourceTreeReq req); List<FeatureResourceTreeNode> getTree(GetFeatureResourceTreeReq req);
@Deprecated
SaasFeatureResource getByCode(String featureCode); SaasFeatureResource getByCode(String featureCode);
@Deprecated
Set<Long> listAuthFree(); Set<Long> listAuthFree();
@Deprecated
List<SaasFeatureResource> listByParentIdAndTerminalAndIds(Long parentId, String terminal, List<Long> featureIds); List<SaasFeatureResource> listByParentIdAndTerminalAndIds(Long parentId, String terminal, List<Long> featureIds);
@Deprecated
List<SaasFeatureResource> listByParentIdAndBlurTerminalAndIds(Long parentId, String terminal, List<Long> featureIds); List<SaasFeatureResource> listByParentIdAndBlurTerminalAndIds(Long parentId, String terminal, List<Long> featureIds);
List<SaasFeatureResourceResp> list(PageSaasFeatureResourceReq param); List<SaasFeatureResourceResp> list(PageSaasFeatureResourceReq param);
@ -73,6 +83,7 @@ public interface SaasFeatureResourceService extends IService<SaasFeatureResource
void refreshCache(RefreshFeatureResourceCacheParam param); void refreshCache(RefreshFeatureResourceCacheParam param);
@Deprecated
List<SaasFeatureBO> listAllFeatureByTerminal(String terminal); List<SaasFeatureBO> listAllFeatureByTerminal(String terminal);
void clone(CloneTerminalReq req); void clone(CloneTerminalReq req);

View File

@ -4,9 +4,13 @@ import cn.axzo.foundation.page.PageResp;
import cn.axzo.tyr.client.model.req.BatchUpsertPageElementCategoryReq; import cn.axzo.tyr.client.model.req.BatchUpsertPageElementCategoryReq;
import cn.axzo.tyr.client.model.req.DeletePageElementCategoryReq; import cn.axzo.tyr.client.model.req.DeletePageElementCategoryReq;
import cn.axzo.tyr.client.model.req.PageElementCategoryReq; import cn.axzo.tyr.client.model.req.PageElementCategoryReq;
import cn.axzo.tyr.client.model.req.PageElementCategoryV2Req;
import cn.axzo.tyr.client.model.req.PageElementReq; import cn.axzo.tyr.client.model.req.PageElementReq;
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
import cn.axzo.tyr.client.model.req.SaveOrUpdatePageElementCategoryReq; import cn.axzo.tyr.client.model.req.SaveOrUpdatePageElementCategoryReq;
import cn.axzo.tyr.client.model.res.ListPageElementCategoryResp; import cn.axzo.tyr.client.model.res.ListPageElementCategoryResp;
import cn.axzo.tyr.client.model.res.PageElementCategoryResp;
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
import cn.axzo.tyr.server.repository.entity.SaasPageElementCategory; import cn.axzo.tyr.server.repository.entity.SaasPageElementCategory;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
@ -19,6 +23,7 @@ import java.util.List;
*/ */
public interface SaasPageElementCategoryService extends IService<SaasPageElementCategory> { public interface SaasPageElementCategoryService extends IService<SaasPageElementCategory> {
@Deprecated
List<ListPageElementCategoryResp> listGroupByTerminal(PageElementCategoryReq req); List<ListPageElementCategoryResp> listGroupByTerminal(PageElementCategoryReq req);
Long saveOrUpdate(SaveOrUpdatePageElementCategoryReq req); Long saveOrUpdate(SaveOrUpdatePageElementCategoryReq req);
@ -26,4 +31,8 @@ public interface SaasPageElementCategoryService extends IService<SaasPageElement
void delete(DeletePageElementCategoryReq req); void delete(DeletePageElementCategoryReq req);
void batchUpsert(BatchUpsertPageElementCategoryReq req); void batchUpsert(BatchUpsertPageElementCategoryReq req);
List<PageElementCategoryResp> list(PageElementCategoryV2Req param);
PageResp<PageElementCategoryResp> page(PageElementCategoryV2Req param);
} }

View File

@ -2,6 +2,7 @@ package cn.axzo.tyr.server.service;
import cn.axzo.foundation.page.PageResp; import cn.axzo.foundation.page.PageResp;
import cn.axzo.tyr.client.model.req.PageElementFeatureResourceRelationReq; import cn.axzo.tyr.client.model.req.PageElementFeatureResourceRelationReq;
import cn.axzo.tyr.client.model.res.PageElementFeatureResourceRelationResp;
import cn.axzo.tyr.server.repository.entity.SaasPageElementFeatureResourceRelation; import cn.axzo.tyr.server.repository.entity.SaasPageElementFeatureResourceRelation;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
@ -9,7 +10,7 @@ import java.util.List;
public interface SaasPageElementFeatureResourceRelationService extends IService<SaasPageElementFeatureResourceRelation> { public interface SaasPageElementFeatureResourceRelationService extends IService<SaasPageElementFeatureResourceRelation> {
List<SaasPageElementFeatureResourceRelation> list(PageElementFeatureResourceRelationReq param); List<PageElementFeatureResourceRelationResp> list(PageElementFeatureResourceRelationReq param);
PageResp<SaasPageElementFeatureResourceRelation> page(PageElementFeatureResourceRelationReq param); PageResp<PageElementFeatureResourceRelationResp> page(PageElementFeatureResourceRelationReq param);
} }

View File

@ -11,8 +11,10 @@ import cn.axzo.tyr.client.common.enums.FeatureResourceType;
import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogSceneEnum; import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogSceneEnum;
import cn.axzo.tyr.client.model.enums.RolePermissionTagEnum; import cn.axzo.tyr.client.model.enums.RolePermissionTagEnum;
import cn.axzo.tyr.client.model.req.GetFeatureResourceTreeReq; import cn.axzo.tyr.client.model.req.GetFeatureResourceTreeReq;
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
import cn.axzo.tyr.client.model.req.ResourceSyncReq; import cn.axzo.tyr.client.model.req.ResourceSyncReq;
import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode; import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode;
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
import cn.axzo.tyr.server.config.MqProducer; import cn.axzo.tyr.server.config.MqProducer;
import cn.axzo.tyr.server.event.payload.RolePermissionCreatedPayload; import cn.axzo.tyr.server.event.payload.RolePermissionCreatedPayload;
import cn.axzo.tyr.server.event.payload.SaasFeatureResourceUpsertPayload; import cn.axzo.tyr.server.event.payload.SaasFeatureResourceUpsertPayload;
@ -30,6 +32,7 @@ import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelationOperateL
import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation;
import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.entity.SaasRole;
import cn.axzo.tyr.server.service.FeatureResourceSyncService; import cn.axzo.tyr.server.service.FeatureResourceSyncService;
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationOperateLogService; import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationOperateLogService;
import cn.axzo.tyr.server.util.RpcInternalUtil; import cn.axzo.tyr.server.util.RpcInternalUtil;
import cn.azxo.framework.common.constatns.Constants; import cn.azxo.framework.common.constatns.Constants;
@ -95,6 +98,7 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
private final SaasPgroupPermissionRelationOperateLogService saasPgroupPermissionRelationOperateLogService; private final SaasPgroupPermissionRelationOperateLogService saasPgroupPermissionRelationOperateLogService;
private final UserProfileServiceApi userProfileServiceApi; private final UserProfileServiceApi userProfileServiceApi;
private final SaasFeatureResourceService saasFeatureResourceService;
@Qualifier("asyncExecutor") @Qualifier("asyncExecutor")
@Autowired @Autowired
@ -456,37 +460,26 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
return Collections.emptyMap(); return Collections.emptyMap();
} }
Map<Long, SaasRole> roleMap = roles.stream()
.filter(e -> StringUtils.isNotBlank(e.getRoleCode()))
.collect(Collectors.toMap(SaasRole::getId, Function.identity()));
Map<Long, List<Long>> groupIdToRoleIdsMap = roleRelations.stream() Map<Long, List<SaasRole>> groupRoleMap = roleRelations.stream()
.collect(Collectors.groupingBy(SaasPgroupRoleRelation::getGroupId, .collect(Collectors.groupingBy(SaasPgroupRoleRelation::getGroupId,
Collectors.mapping(SaasPgroupRoleRelation::getRoleId, Collectors.toList()))); Collectors.mapping(e -> roleMap.get(e.getRoleId()), Collectors.toList())));
Map<Long, String> roleIdToRoleCodeMap = Maps.newHashMap();
for (SaasRole role : roles) {
if (StringUtils.isNotBlank(role.getRoleCode())) {
roleIdToRoleCodeMap.put(role.getId(), role.getRoleCode());
}
}
return permissionRelations.stream() return permissionRelations.stream()
.map(e -> { .map(e -> {
List<Long> roleIds = groupIdToRoleIdsMap.get(e.getGroupId()); List<SaasRole> saasRoles = groupRoleMap.get(e.getGroupId());
if (CollectionUtils.isEmpty(roleIds)) { if (CollectionUtils.isEmpty(saasRoles)) {
return null; return null;
} }
return roleIds.stream() return saasRoles.stream()
.map(roleId -> { .map(role -> PermissionGroupRoleWrapper.builder()
String roleCode = roleIdToRoleCodeMap.get(roleId);
if (StringUtils.isBlank(roleCode)) {
return null;
}
return PermissionGroupRoleWrapper.builder()
.featureId(e.getFeatureId()) .featureId(e.getFeatureId())
.roleCode(roleCode) .roleCode(role.getRoleCode())
.tags(e.getTags()) .tags(e.getTags())
.build(); .build())
})
.filter(Objects::nonNull) .filter(Objects::nonNull)
.collect(Collectors.toList()); .collect(Collectors.toList());
}) })

View File

@ -26,12 +26,12 @@ import cn.axzo.tyr.client.model.req.GetFeatureResourceTreeReq;
import cn.axzo.tyr.client.model.req.ListRoleReq; import cn.axzo.tyr.client.model.req.ListRoleReq;
import cn.axzo.tyr.client.model.req.ModifyPageElementRelationDTO; import cn.axzo.tyr.client.model.req.ModifyPageElementRelationDTO;
import cn.axzo.tyr.client.model.req.PageElementFeatureResourceRelationReq; import cn.axzo.tyr.client.model.req.PageElementFeatureResourceRelationReq;
import cn.axzo.tyr.client.model.req.PageElementReq;
import cn.axzo.tyr.client.model.req.PagePgroupPermissionRelationReq; import cn.axzo.tyr.client.model.req.PagePgroupPermissionRelationReq;
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq; import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
import cn.axzo.tyr.client.model.res.FeatureResourceDTO; import cn.axzo.tyr.client.model.res.FeatureResourceDTO;
import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode; import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode;
import cn.axzo.tyr.client.model.res.PageElementBasicDTO; import cn.axzo.tyr.client.model.res.PageElementBasicDTO;
import cn.axzo.tyr.client.model.res.PageElementFeatureResourceRelationResp;
import cn.axzo.tyr.client.model.res.PageElementResp; import cn.axzo.tyr.client.model.res.PageElementResp;
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp; import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
import cn.axzo.tyr.client.model.res.SaasRoleRes; import cn.axzo.tyr.client.model.res.SaasRoleRes;
@ -45,7 +45,6 @@ import cn.axzo.tyr.server.repository.dao.SaasFeatureResourceDao;
import cn.axzo.tyr.server.repository.dao.SaasPgroupRoleRelationDao; import cn.axzo.tyr.server.repository.dao.SaasPgroupRoleRelationDao;
import cn.axzo.tyr.server.repository.entity.SaasFeature; import cn.axzo.tyr.server.repository.entity.SaasFeature;
import cn.axzo.tyr.server.repository.entity.SaasFeatureResource; import cn.axzo.tyr.server.repository.entity.SaasFeatureResource;
import cn.axzo.tyr.server.repository.entity.SaasPageElementFeatureResourceRelation;
import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation;
import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation;
import cn.axzo.tyr.server.repository.mapper.SaasFeatureResourceMapper; import cn.axzo.tyr.server.repository.mapper.SaasFeatureResourceMapper;
@ -403,19 +402,11 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
PageElementFeatureResourceRelationReq pageElementFeatureResourceRelationReq = PageElementFeatureResourceRelationReq.builder() PageElementFeatureResourceRelationReq pageElementFeatureResourceRelationReq = PageElementFeatureResourceRelationReq.builder()
.featureResourceUniCodes(Sets.newHashSet(featureResourceTreeNode.getUniCode())) .featureResourceUniCodes(Sets.newHashSet(featureResourceTreeNode.getUniCode()))
.types(Sets.newHashSet(PageElementFeatureResourceRelationTypeEnum.PAGE_ROUTE)) .types(Sets.newHashSet(PageElementFeatureResourceRelationTypeEnum.PAGE_ROUTE))
.needPageElement(true)
.build(); .build();
List<SaasPageElementFeatureResourceRelation> pageElementFeatureResourceRelations = saasPageElementFeatureResourceRelationService.list(pageElementFeatureResourceRelationReq); Optional<PageElementResp> pageElementOptional = saasPageElementFeatureResourceRelationService.list(pageElementFeatureResourceRelationReq)
.stream()
if (CollectionUtils.isEmpty(pageElementFeatureResourceRelations)) { .map(PageElementFeatureResourceRelationResp::getPageElement)
return;
}
PageElementReq pageElementReq = PageElementReq.builder()
.codes(pageElementFeatureResourceRelations.stream()
.map(SaasPageElementFeatureResourceRelation::getPageElementCode)
.collect(Collectors.toSet()))
.build();
Optional<PageElementResp> pageElementOptional = saasPageElementService.list(pageElementReq).stream()
.findFirst(); .findFirst();
if (!pageElementOptional.isPresent()) { if (!pageElementOptional.isPresent()) {
@ -821,20 +812,84 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
Map<String, List<PageElementResp>> pageElements = listPageElements(param, page.getRecords()); Map<String, List<PageElementResp>> pageElements = listPageElements(param, page.getRecords());
Map<Long, List<SaasFeatureResourceResp>> children = listChildren(param, page.getRecords());
Map<Long, List<SaasFeatureResourceResp>> ancestors = listAncestor(param, page.getRecords());
return PageConverter.toResp(page, e -> from(e, return PageConverter.toResp(page, e -> from(e,
uniCodeFeatureCodeMap, uniCodeFeatureCodeMap,
pageElements)); pageElements,
ancestors,
children));
}
private Map<Long, List<SaasFeatureResourceResp>> listAncestor(PageSaasFeatureResourceReq param,
List<SaasFeatureResource> saasFeatureResources) {
if (CollectionUtils.isEmpty(saasFeatureResources) || BooleanUtils.isNotTrue(param.getNeedAncestor())) {
return Collections.emptyMap();
}
List<Long> parentIds = saasFeatureResources.stream()
.map(SaasFeatureResource::splitPath)
.flatMap(Collection::stream)
.distinct()
.collect(Collectors.toList());
Map<Long, SaasFeatureResourceResp> parents = this.list(PageSaasFeatureResourceReq.builder()
.ids(parentIds)
.build())
.stream()
.collect(Collectors.toMap(SaasFeatureResourceResp::getId, Function.identity()));
return saasFeatureResources.stream()
.collect(Collectors.toMap(SaasFeatureResource::getId,
e -> e.splitPath().stream()
.filter(parentId -> !Objects.equals(parentId, e.getId()))
.map(parents::get)
.collect(Collectors.toList())));
}
private Map<Long, List<SaasFeatureResourceResp>> listChildren(PageSaasFeatureResourceReq param,
List<SaasFeatureResource> saasFeatureResources) {
if (CollectionUtils.isEmpty(saasFeatureResources) || BooleanUtils.isNotTrue(param.getNeedChildren())) {
return Collections.emptyMap();
}
Set<String> paths = saasFeatureResources.stream()
.map(SaasFeatureResource::getPath)
.collect(Collectors.toSet());
List<SaasFeatureResourceResp> children = this.list(PageSaasFeatureResourceReq.builder()
.paths(paths)
.build());
if (CollectionUtils.isEmpty(children)) {
return Collections.emptyMap();
}
return saasFeatureResources.stream()
.collect(Collectors.toMap(SaasFeatureResource::getId,
e -> children.stream()
.filter(c -> c.getPath().startsWith(e.getPath()) && !Objects.equals(e.getPath(), c.getPath()))
.collect(Collectors.toList())));
} }
private SaasFeatureResourceResp from(SaasFeatureResource featureResource, private SaasFeatureResourceResp from(SaasFeatureResource featureResource,
Map<String, Set<String>> uniCodeFeatureCodeMap, Map<String, Set<String>> uniCodeFeatureCodeMap,
Map<String, List<PageElementResp>> pageElements) { Map<String, List<PageElementResp>> pageElements,
Map<Long, List<SaasFeatureResourceResp>> children,
Map<Long, List<SaasFeatureResourceResp>> ancestors) {
SaasFeatureResourceResp saasFeatureResourceResp = SaasFeatureResourceResp.builder().build(); SaasFeatureResourceResp saasFeatureResourceResp = SaasFeatureResourceResp.builder().build();
BeanUtils.copyProperties(featureResource, saasFeatureResourceResp); BeanUtils.copyProperties(featureResource, saasFeatureResourceResp);
saasFeatureResourceResp.setFeatureCodes(uniCodeFeatureCodeMap.get(featureResource.getUniCode())); saasFeatureResourceResp.setFeatureCodes(uniCodeFeatureCodeMap.get(featureResource.getUniCode()));
saasFeatureResourceResp.setSaasPageElements(pageElements.get(saasFeatureResourceResp.getUniCode())); saasFeatureResourceResp.setSaasPageElements(pageElements.get(saasFeatureResourceResp.getUniCode()));
saasFeatureResourceResp.setChildren(children.get(saasFeatureResourceResp.getId()));
saasFeatureResourceResp.setAncestors(ancestors.get(saasFeatureResourceResp.getId()));
return saasFeatureResourceResp; return saasFeatureResourceResp;
} }
@ -853,12 +908,12 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
.build(); .build();
return saasPageElementFeatureResourceRelationService.list(pageElementFeatureResourceRelationReq) return saasPageElementFeatureResourceRelationService.list(pageElementFeatureResourceRelationReq)
.stream() .stream()
.collect(Collectors.groupingBy(SaasPageElementFeatureResourceRelation::getFeatureResourceUniCode, .collect(Collectors.groupingBy(PageElementFeatureResourceRelationResp::getFeatureResourceUniCode,
Collectors.mapping(SaasPageElementFeatureResourceRelation::getPageElementCode, Collectors.toSet()))); Collectors.mapping(PageElementFeatureResourceRelationResp::getPageElementCode, Collectors.toSet())));
} }
private Map<String, List<PageElementResp>> listPageElements(PageSaasFeatureResourceReq param, private Map<String, List<PageElementResp>> listPageElements(PageSaasFeatureResourceReq param,
List<SaasFeatureResource> saasFeatureResources) { List<SaasFeatureResource> saasFeatureResources) {
if (CollectionUtils.isEmpty(saasFeatureResources) || BooleanUtils.isNotTrue(param.getNeedPageElement())) { if (CollectionUtils.isEmpty(saasFeatureResources) || BooleanUtils.isNotTrue(param.getNeedPageElement())) {
return Collections.emptyMap(); return Collections.emptyMap();
@ -872,26 +927,12 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
.types(param.getPageElementTypes()) .types(param.getPageElementTypes())
.build(); .build();
List<SaasPageElementFeatureResourceRelation> pageElementFeatureResourceRelations = saasPageElementFeatureResourceRelationService.list(pageElementFeatureResourceRelationReq); List<PageElementFeatureResourceRelationResp> pageElementFeatureResourceRelations = saasPageElementFeatureResourceRelationService.list(pageElementFeatureResourceRelationReq);
if (CollectionUtils.isEmpty(pageElementFeatureResourceRelations)) {
return Collections.emptyMap();
}
Set<String> elementCodes = pageElementFeatureResourceRelations.stream()
.map(SaasPageElementFeatureResourceRelation::getPageElementCode)
.collect(Collectors.toSet());
PageElementReq pageElementReq = PageElementReq.builder()
.codes(elementCodes)
.build();
Map<String, PageElementResp> elementMap = saasPageElementService.list(pageElementReq).stream()
.collect(Collectors.toMap(PageElementResp::getCode, Function.identity()));
return pageElementFeatureResourceRelations.stream() return pageElementFeatureResourceRelations.stream()
.filter(e -> elementMap.get(e.getPageElementCode()) != null) .filter(e -> e.getPageElement() != null)
.collect(Collectors.groupingBy(SaasPageElementFeatureResourceRelation::getFeatureResourceUniCode, .collect(Collectors.groupingBy(PageElementFeatureResourceRelationResp::getFeatureResourceUniCode,
Collectors.mapping(e -> elementMap.get(e.getPageElementCode()), Collectors.toList()))); Collectors.mapping(PageElementFeatureResourceRelationResp::getPageElement, Collectors.toList())));
} }

View File

@ -2,7 +2,10 @@ package cn.axzo.tyr.server.service.impl;
import cn.axzo.basics.common.constant.enums.DeleteEnum; import cn.axzo.basics.common.constant.enums.DeleteEnum;
import cn.axzo.basics.common.util.AssertUtil; import cn.axzo.basics.common.util.AssertUtil;
import cn.axzo.foundation.dao.support.converter.PageConverter;
import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper;
import cn.axzo.foundation.exception.Axssert; import cn.axzo.foundation.exception.Axssert;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.framework.rocketmq.Event; import cn.axzo.framework.rocketmq.Event;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.client.common.enums.PageElementTypeEnum; import cn.axzo.tyr.client.common.enums.PageElementTypeEnum;
@ -10,10 +13,12 @@ import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogSceneEnum;
import cn.axzo.tyr.client.model.req.BatchUpsertPageElementCategoryReq; import cn.axzo.tyr.client.model.req.BatchUpsertPageElementCategoryReq;
import cn.axzo.tyr.client.model.req.DeletePageElementCategoryReq; import cn.axzo.tyr.client.model.req.DeletePageElementCategoryReq;
import cn.axzo.tyr.client.model.req.PageElementCategoryReq; import cn.axzo.tyr.client.model.req.PageElementCategoryReq;
import cn.axzo.tyr.client.model.req.PageElementCategoryV2Req;
import cn.axzo.tyr.client.model.req.PageElementReq; import cn.axzo.tyr.client.model.req.PageElementReq;
import cn.axzo.tyr.client.model.req.PermissionOperateLogReq; import cn.axzo.tyr.client.model.req.PermissionOperateLogReq;
import cn.axzo.tyr.client.model.req.SaveOrUpdatePageElementCategoryReq; import cn.axzo.tyr.client.model.req.SaveOrUpdatePageElementCategoryReq;
import cn.axzo.tyr.client.model.res.ListPageElementCategoryResp; import cn.axzo.tyr.client.model.res.ListPageElementCategoryResp;
import cn.axzo.tyr.client.model.res.PageElementCategoryResp;
import cn.axzo.tyr.client.model.res.PageElementResp; import cn.axzo.tyr.client.model.res.PageElementResp;
import cn.axzo.tyr.server.config.MqProducer; import cn.axzo.tyr.server.config.MqProducer;
import cn.axzo.tyr.server.event.payload.PageElementFeatureResourceUpsertPayload; import cn.axzo.tyr.server.event.payload.PageElementFeatureResourceUpsertPayload;
@ -27,12 +32,15 @@ import cn.axzo.tyr.server.service.SaasPageElementCategoryService;
import cn.axzo.tyr.server.service.SaasPageElementService; import cn.axzo.tyr.server.service.SaasPageElementService;
import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationOperateLogService; import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationOperateLogService;
import com.alibaba.nacos.common.utils.UuidUtils; import com.alibaba.nacos.common.utils.UuidUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -398,4 +406,28 @@ public class SaasPageElementCategoryServiceImpl extends ServiceImpl<SaasPageElem
.operateData(baseCategory) .operateData(baseCategory)
.build()); .build());
} }
@Override
public List<PageElementCategoryResp> list(PageElementCategoryV2Req param) {
return PageConverter.drainAll(pageNumber -> {
param.setPage(pageNumber);
param.setPageSize(1000);
return page(param);
});
}
@Override
public PageResp<PageElementCategoryResp> page(PageElementCategoryV2Req param) {
QueryWrapper<SaasPageElementCategory> wrapper = QueryWrapperHelper.fromBean(param, SaasPageElementCategory.class);
wrapper.eq("is_delete", 0);
IPage<SaasPageElementCategory> page = this.page(PageConverter.toMybatis(param, SaasPageElementCategory.class), wrapper);
return PageConverter.toResp(page, this::from);
}
private PageElementCategoryResp from(SaasPageElementCategory saasPageElementCategory) {
PageElementCategoryResp result = PageElementCategoryResp.builder().build();
BeanUtils.copyProperties(saasPageElementCategory, result);
return result;
}
} }

View File

@ -5,17 +5,30 @@ import cn.axzo.foundation.dao.support.mysql.QueryWrapperHelper;
import cn.axzo.foundation.page.PageResp; import cn.axzo.foundation.page.PageResp;
import cn.axzo.tyr.client.common.enums.PageElementFeatureResourceRelationTypeEnum; import cn.axzo.tyr.client.common.enums.PageElementFeatureResourceRelationTypeEnum;
import cn.axzo.tyr.client.model.req.PageElementFeatureResourceRelationReq; import cn.axzo.tyr.client.model.req.PageElementFeatureResourceRelationReq;
import cn.axzo.tyr.client.model.req.PageElementReq;
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
import cn.axzo.tyr.client.model.res.PageElementFeatureResourceRelationResp;
import cn.axzo.tyr.client.model.res.PageElementResp;
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
import cn.axzo.tyr.server.repository.entity.SaasPageElementFeatureResourceRelation; import cn.axzo.tyr.server.repository.entity.SaasPageElementFeatureResourceRelation;
import cn.axzo.tyr.server.repository.mapper.SaasPageElementFeatureResourceRelationMapper; import cn.axzo.tyr.server.repository.mapper.SaasPageElementFeatureResourceRelationMapper;
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
import cn.axzo.tyr.server.service.SaasPageElementFeatureResourceRelationService; import cn.axzo.tyr.server.service.SaasPageElementFeatureResourceRelationService;
import cn.axzo.tyr.server.service.SaasPageElementService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -24,8 +37,13 @@ import java.util.stream.Collectors;
public class SaasPageElementFeatureResourceRelationServiceImpl extends ServiceImpl<SaasPageElementFeatureResourceRelationMapper, SaasPageElementFeatureResourceRelation> public class SaasPageElementFeatureResourceRelationServiceImpl extends ServiceImpl<SaasPageElementFeatureResourceRelationMapper, SaasPageElementFeatureResourceRelation>
implements SaasPageElementFeatureResourceRelationService { implements SaasPageElementFeatureResourceRelationService {
@Autowired
private SaasPageElementService saasPageElementService;
@Autowired
private SaasFeatureResourceService saasFeatureResourceService;
@Override @Override
public List<SaasPageElementFeatureResourceRelation> list(PageElementFeatureResourceRelationReq param) { public List<PageElementFeatureResourceRelationResp> list(PageElementFeatureResourceRelationReq param) {
return PageConverter.drainAll(pageNumber -> { return PageConverter.drainAll(pageNumber -> {
param.setPage(pageNumber); param.setPage(pageNumber);
param.setPageSize(1000); param.setPageSize(1000);
@ -34,7 +52,7 @@ public class SaasPageElementFeatureResourceRelationServiceImpl extends ServiceIm
} }
@Override @Override
public PageResp<SaasPageElementFeatureResourceRelation> page(PageElementFeatureResourceRelationReq param) { public PageResp<PageElementFeatureResourceRelationResp> page(PageElementFeatureResourceRelationReq param) {
QueryWrapper<SaasPageElementFeatureResourceRelation> wrapper = QueryWrapperHelper.fromBean(param, SaasPageElementFeatureResourceRelation.class); QueryWrapper<SaasPageElementFeatureResourceRelation> wrapper = QueryWrapperHelper.fromBean(param, SaasPageElementFeatureResourceRelation.class);
wrapper.eq("is_delete", 0); wrapper.eq("is_delete", 0);
@ -45,6 +63,57 @@ public class SaasPageElementFeatureResourceRelationServiceImpl extends ServiceIm
IPage<SaasPageElementFeatureResourceRelation> page = this.page(PageConverter.toMybatis(param, SaasPageElementFeatureResourceRelation.class), wrapper); IPage<SaasPageElementFeatureResourceRelation> page = this.page(PageConverter.toMybatis(param, SaasPageElementFeatureResourceRelation.class), wrapper);
return PageConverter.toResp(page, Function.identity()); Map<String, PageElementResp> pageElements = listPageElement(page.getRecords(), param);
Map<String, SaasFeatureResourceResp> saasFeatureResources = listSaasFeatureResource(page.getRecords(), param);
return PageConverter.toResp(page, e -> from(e, pageElements, saasFeatureResources));
}
private PageElementFeatureResourceRelationResp from(SaasPageElementFeatureResourceRelation saasPageElementFeatureResourceRelation,
Map<String, PageElementResp> pageElements,
Map<String, SaasFeatureResourceResp> saasFeatureResources) {
PageElementFeatureResourceRelationResp result = PageElementFeatureResourceRelationResp.builder().build();
BeanUtils.copyProperties(saasPageElementFeatureResourceRelation, result);
result.setPageElement(pageElements.get(result.getPageElementCode()));
result.setSaasFeatureResource(saasFeatureResources.get(result.getFeatureResourceUniCode()));
return result;
}
private Map<String, PageElementResp> listPageElement(List<SaasPageElementFeatureResourceRelation> saasPageElementFeatureResourceRelations,
PageElementFeatureResourceRelationReq param) {
if (CollectionUtils.isEmpty(saasPageElementFeatureResourceRelations) || BooleanUtils.isNotTrue(param.getNeedPageElement())) {
return Collections.emptyMap();
}
return saasPageElementService.list(PageElementReq.builder()
.codes(saasPageElementFeatureResourceRelations.stream()
.map(SaasPageElementFeatureResourceRelation::getPageElementCode)
.collect(Collectors.toSet()))
.needPageElementCategory(param.getNeedPageElementCategory())
.build())
.stream()
.collect(Collectors.toMap(PageElementResp::getCode, Function.identity()));
}
private Map<String, SaasFeatureResourceResp> listSaasFeatureResource(List<SaasPageElementFeatureResourceRelation> saasPageElementFeatureResourceRelations,
PageElementFeatureResourceRelationReq param) {
if (CollectionUtils.isEmpty(saasPageElementFeatureResourceRelations) || BooleanUtils.isNotTrue(param.getNeedFeatureResource())) {
return Collections.emptyMap();
}
Set<String> uniCodes = saasPageElementFeatureResourceRelations.stream()
.map(SaasPageElementFeatureResourceRelation::getFeatureResourceUniCode)
.collect(Collectors.toSet());
PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder()
.uniCodes(uniCodes)
.build();
List<SaasFeatureResourceResp> featureResources = saasFeatureResourceService.list(pageSaasFeatureResourceReq);
return featureResources.stream()
.collect(Collectors.toMap(SaasFeatureResourceResp::getUniCode, Function.identity()));
} }
} }

View File

@ -26,6 +26,7 @@ import cn.axzo.tyr.client.model.req.GetPageElementReq;
import cn.axzo.tyr.client.model.req.GetUserHasPermissionPageElementReq; import cn.axzo.tyr.client.model.req.GetUserHasPermissionPageElementReq;
import cn.axzo.tyr.client.model.req.IdentityAuthReq; import cn.axzo.tyr.client.model.req.IdentityAuthReq;
import cn.axzo.tyr.client.model.req.ModifyPageElementRelationDTO; import cn.axzo.tyr.client.model.req.ModifyPageElementRelationDTO;
import cn.axzo.tyr.client.model.req.PageElementCategoryV2Req;
import cn.axzo.tyr.client.model.req.PageElementFeatureResourceRelationReq; import cn.axzo.tyr.client.model.req.PageElementFeatureResourceRelationReq;
import cn.axzo.tyr.client.model.req.PageElementImportDataReq; import cn.axzo.tyr.client.model.req.PageElementImportDataReq;
import cn.axzo.tyr.client.model.req.PageElementReportReq; import cn.axzo.tyr.client.model.req.PageElementReportReq;
@ -41,6 +42,7 @@ import cn.axzo.tyr.client.model.res.IdentityAuthRes;
import cn.axzo.tyr.client.model.res.PageElementBasicDTO; import cn.axzo.tyr.client.model.res.PageElementBasicDTO;
import cn.axzo.tyr.client.model.res.PageElementCategoryAndElementResp; import cn.axzo.tyr.client.model.res.PageElementCategoryAndElementResp;
import cn.axzo.tyr.client.model.res.PageElementCategoryResp; import cn.axzo.tyr.client.model.res.PageElementCategoryResp;
import cn.axzo.tyr.client.model.res.PageElementFeatureResourceRelationResp;
import cn.axzo.tyr.client.model.res.PageElementRelationFeatureResourceResp; import cn.axzo.tyr.client.model.res.PageElementRelationFeatureResourceResp;
import cn.axzo.tyr.client.model.res.PageElementResp; import cn.axzo.tyr.client.model.res.PageElementResp;
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp; import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
@ -881,10 +883,10 @@ public class SaasPageElementServiceImpl extends ServiceImpl<SaasPageElementMappe
.builder() .builder()
.pageElementCodes(pageElementCodes) .pageElementCodes(pageElementCodes)
.build(); .build();
List<SaasPageElementFeatureResourceRelation> elementFeatureResourceRelations = saasPageElementFeatureResourceRelationService.list(elementFeatureResourceRelationReq); List<PageElementFeatureResourceRelationResp> elementFeatureResourceRelations = saasPageElementFeatureResourceRelationService.list(elementFeatureResourceRelationReq);
Set<String> uniCodes = elementFeatureResourceRelations.stream() Set<String> uniCodes = elementFeatureResourceRelations.stream()
.map(SaasPageElementFeatureResourceRelation::getFeatureResourceUniCode) .map(PageElementFeatureResourceRelationResp::getFeatureResourceUniCode)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
if (CollectionUtils.isEmpty(uniCodes)) { if (CollectionUtils.isEmpty(uniCodes)) {
@ -899,7 +901,7 @@ public class SaasPageElementServiceImpl extends ServiceImpl<SaasPageElementMappe
.collect(Collectors.toMap(SaasFeatureResourceResp::getUniCode, Function.identity())); .collect(Collectors.toMap(SaasFeatureResourceResp::getUniCode, Function.identity()));
return elementFeatureResourceRelations.stream() return elementFeatureResourceRelations.stream()
.collect(Collectors.groupingBy(SaasPageElementFeatureResourceRelation::getPageElementCode, .collect(Collectors.groupingBy(PageElementFeatureResourceRelationResp::getPageElementCode,
Collectors.mapping(e -> featureResources.get(e.getFeatureResourceUniCode()), Collectors.toList()))); Collectors.mapping(e -> featureResources.get(e.getFeatureResourceUniCode()), Collectors.toList())));
} }
@ -1037,6 +1039,35 @@ public class SaasPageElementServiceImpl extends ServiceImpl<SaasPageElementMappe
.collect(Collectors.groupingBy(PageElementResp::getGroupCode)); .collect(Collectors.groupingBy(PageElementResp::getGroupCode));
} }
/**
* 目前saas_page_element上提现不出来层级关系只有通过type来确定只有type = COMPONENT时才有父节点的记录
* @param pageElements
* @param param
* @return
*/
private Map<String, PageElementResp> listAncestorPageElement(List<SaasPageElement> pageElements,
PageElementReq param) {
if (CollectionUtils.isEmpty(pageElements) || BooleanUtils.isNotTrue(param.getNeedAncestor())) {
return Collections.emptyMap();
}
Set<String> codes = pageElements.stream()
.map(SaasPageElement::getCode)
.collect(Collectors.toSet());
// 因为现在的数据结构type为PAGE的和type为COMPONENT的groupCode一样所以要排除type=PAGE的记录
// return this.lambdaQuery()
// .in(SaasPageElement::getGroupCode, codes)
// .ne(SaasPageElement::getType, PageElementTypeEnum.PAGE)
// .list()
// .stream()
// .map(SaasPageElement::to)
// .collect(Collectors.groupingBy(PageElementResp::getGroupCode));
return Collections.emptyMap();
}
private Map<String, PageElementCategoryResp> listPageElementCategory(List<SaasPageElement> pageElements, private Map<String, PageElementCategoryResp> listPageElementCategory(List<SaasPageElement> pageElements,
PageElementReq param) { PageElementReq param) {
@ -1079,11 +1110,10 @@ public class SaasPageElementServiceImpl extends ServiceImpl<SaasPageElementMappe
return; return;
} }
Map<String, PageElementResp> localDBPageElements = listLocalDBPageElement(prePageElements);
// upsert pageElementCategory // upsert pageElementCategory
upsertPageElementCategory(prePageElements, localDBPageElements, req); upsertPageElementCategory(prePageElements, req);
Map<String, PageElementResp> localDBPageElements = listLocalDBPageElement(prePageElements);
List<BatchUpsertPageElementReq.UpsertPageElementReq> preUpsertPageElements = prePageElements.stream() List<BatchUpsertPageElementReq.UpsertPageElementReq> preUpsertPageElements = prePageElements.stream()
.flatMap(e -> { .flatMap(e -> {
@ -1118,7 +1148,6 @@ public class SaasPageElementServiceImpl extends ServiceImpl<SaasPageElementMappe
} }
private void upsertPageElementCategory(List<PageElementResp> prePageElements, private void upsertPageElementCategory(List<PageElementResp> prePageElements,
Map<String, PageElementResp> localDBPageElements,
SyncPageElementReq req) { SyncPageElementReq req) {
List<PageElementCategoryResp> prePageElementCategories = prePageElements.stream() List<PageElementCategoryResp> prePageElementCategories = prePageElements.stream()
@ -1130,17 +1159,21 @@ public class SaasPageElementServiceImpl extends ServiceImpl<SaasPageElementMappe
log.info("no pageElementCategory need sync"); log.info("no pageElementCategory need sync");
return; return;
} }
Map<String, PageElementCategoryResp> localDBPageElementCategories = saasPageElementCategoryService.list(PageElementCategoryV2Req.builder()
Map<String, PageElementCategoryResp> localDBPageElementCategories = localDBPageElements.values().stream() .itemCodes(prePageElementCategories.stream()
.map(PageElementResp::getPageElementCategory) .map(PageElementCategoryResp::getItemCode)
.filter(Objects::nonNull) .collect(Collectors.toSet()))
.collect(Collectors.toMap(PageElementCategoryResp::getItemCode, Function.identity(), (f, s) -> f)); .build())
.stream()
.collect(Collectors.toMap(PageElementCategoryResp::getItemCode, Function.identity()));
List<BatchUpsertPageElementCategoryReq.UpsertPageElementCategory> upsert = prePageElementCategories.stream() List<BatchUpsertPageElementCategoryReq.UpsertPageElementCategory> upsert = prePageElementCategories.stream()
.map(e -> { .map(e -> {
PageElementCategoryResp localDBPageElementCategory = localDBPageElementCategories.get(e.getItemCode()); PageElementCategoryResp localDBPageElementCategory = localDBPageElementCategories.get(e.getItemCode());
return BatchUpsertPageElementCategoryReq.UpsertPageElementCategory.builder() return BatchUpsertPageElementCategoryReq.UpsertPageElementCategory.builder()
.id(Objects.nonNull(localDBPageElementCategory) ? localDBPageElementCategory.getId() : null) .id(Optional.ofNullable(localDBPageElementCategory)
.map(PageElementCategoryResp::getId)
.orElse(null))
.terminal(e.getTerminal()) .terminal(e.getTerminal())
.itemCode(e.getItemCode()) .itemCode(e.getItemCode())
.itemName(e.getItemName()) .itemName(e.getItemName())

View File

@ -25,6 +25,7 @@ import cn.axzo.tyr.client.model.req.WorkspacePermissionIdentityReq;
import cn.axzo.tyr.client.model.res.IdentityAuthRes; import cn.axzo.tyr.client.model.res.IdentityAuthRes;
import cn.axzo.tyr.client.model.res.ListIdentityFromPermissionResp; import cn.axzo.tyr.client.model.res.ListIdentityFromPermissionResp;
import cn.axzo.tyr.client.model.res.ListPermissionFromRoleGroupResp; import cn.axzo.tyr.client.model.res.ListPermissionFromRoleGroupResp;
import cn.axzo.tyr.client.model.res.PageElementFeatureResourceRelationResp;
import cn.axzo.tyr.client.model.res.QueryIdentityByPermissionResp; import cn.axzo.tyr.client.model.res.QueryIdentityByPermissionResp;
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp; import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
import cn.axzo.tyr.client.model.res.SaasRoleRes; import cn.axzo.tyr.client.model.res.SaasRoleRes;
@ -36,7 +37,6 @@ import cn.axzo.tyr.server.repository.entity.ProductFeatureQuery;
import cn.axzo.tyr.server.repository.entity.RolePermission; import cn.axzo.tyr.server.repository.entity.RolePermission;
import cn.axzo.tyr.server.repository.entity.SaasFeature; import cn.axzo.tyr.server.repository.entity.SaasFeature;
import cn.axzo.tyr.server.repository.entity.SaasFeatureResource; import cn.axzo.tyr.server.repository.entity.SaasFeatureResource;
import cn.axzo.tyr.server.repository.entity.SaasPageElementFeatureResourceRelation;
import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; import cn.axzo.tyr.server.repository.entity.SaasRoleGroup;
import cn.axzo.tyr.server.repository.entity.SaasRoleWithUser; import cn.axzo.tyr.server.repository.entity.SaasRoleWithUser;
import cn.axzo.tyr.server.repository.mapper.SaasRoleUserRelationMapper; import cn.axzo.tyr.server.repository.mapper.SaasRoleUserRelationMapper;
@ -380,8 +380,9 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService {
PageElementFeatureResourceRelationReq pageElementFeatureResourceRelationReq = PageElementFeatureResourceRelationReq.builder() PageElementFeatureResourceRelationReq pageElementFeatureResourceRelationReq = PageElementFeatureResourceRelationReq.builder()
.pageElementCodes(req.getFeatureCodes()) .pageElementCodes(req.getFeatureCodes())
.terminal(req.getTerminal()) .terminal(req.getTerminal())
.needFeatureResource(true)
.build(); .build();
List<SaasPageElementFeatureResourceRelation> relations = saasPageElementFeatureResourceRelationService.list(pageElementFeatureResourceRelationReq); List<PageElementFeatureResourceRelationResp> relations = saasPageElementFeatureResourceRelationService.list(pageElementFeatureResourceRelationReq);
if (CollectionUtils.isEmpty(relations)) { if (CollectionUtils.isEmpty(relations)) {
log.info("not found in SaasPageElementFeatureResourceRelation, featureCodes:{},terminal:{}", log.info("not found in SaasPageElementFeatureResourceRelation, featureCodes:{},terminal:{}",
@ -389,14 +390,13 @@ public class TyrSaasAuthServiceImpl implements TyrSaasAuthService {
return Collections.emptyList(); return Collections.emptyList();
} }
Set<String> uniCodes = relations.stream().map(SaasPageElementFeatureResourceRelation::getFeatureResourceUniCode).collect(Collectors.toSet()); List<SaasFeatureResourceResp> featureResources = relations.stream()
PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder() .map(PageElementFeatureResourceRelationResp::getSaasFeatureResource)
.uniCodes(uniCodes) .filter(Objects::nonNull)
.build(); .collect(Collectors.toList());
List<SaasFeatureResourceResp> featureResources = saasFeatureResourceService.list(pageSaasFeatureResourceReq);
if (CollectionUtils.isEmpty(featureResources)) { if (CollectionUtils.isEmpty(featureResources)) {
log.info("not found in SaasFeatureResource, unicode:{}", uniCodes); log.info("not found in SaasFeatureResource, pageElementCodes:{}", req.getFeatureCodes());
return Collections.emptyList(); return Collections.emptyList();
} }
return saasFeatureResourceService.list(PageSaasFeatureResourceReq.builder() return saasFeatureResourceService.list(PageSaasFeatureResourceReq.builder()