feat(REQ-2899):前端资源删除接口
This commit is contained in:
parent
50e2543702
commit
4c95776eb0
@ -3,6 +3,7 @@ package cn.axzo.tyr.client.feign;
|
||||
import cn.axzo.framework.domain.web.result.ApiPageResult;
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.tyr.client.model.req.*;
|
||||
import cn.axzo.tyr.client.model.res.FeatureResourcePageElementRelationViewResp;
|
||||
import cn.axzo.tyr.client.model.res.GetUserHasPermissionPageElementResp;
|
||||
import cn.axzo.tyr.client.model.res.ListPageElementCategoryResp;
|
||||
import cn.axzo.tyr.client.model.res.PageElementResp;
|
||||
@ -69,4 +70,8 @@ public interface PageElementApi {
|
||||
/** 删除页面元素 **/
|
||||
@PostMapping("/api/pageElement/delete")
|
||||
ApiResult<Void> delete(@RequestBody @Valid DeletePageElementReq req);
|
||||
|
||||
/** 删除页面元素 **/
|
||||
@PostMapping("/api/pageElement/getFeatureResourceRelations")
|
||||
ApiResult<FeatureResourcePageElementRelationViewResp> getFeatureResourceRelations(@RequestBody @Valid IdReq req);
|
||||
}
|
||||
|
||||
@ -0,0 +1,25 @@
|
||||
package cn.axzo.tyr.client.model.req;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* @author likunpeng
|
||||
* @version 1.0
|
||||
* @date 2024/8/21
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class IdReq {
|
||||
|
||||
@NotNull(message = "ID不能为空")
|
||||
@Min(value = 1, message = "ID有误")
|
||||
private Long id;
|
||||
}
|
||||
@ -19,6 +19,8 @@ import java.util.List;
|
||||
@AllArgsConstructor
|
||||
public class PageQueryElementV2Req {
|
||||
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 端
|
||||
*/
|
||||
|
||||
@ -0,0 +1,97 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
@ -86,6 +86,11 @@ public class PageElementResp {
|
||||
*/
|
||||
private List<SaasFeatureResourceResp> featureResources;
|
||||
|
||||
/** ios挑战地址 **/
|
||||
private String iosRouterUrl;
|
||||
|
||||
/** android挑战地址 **/
|
||||
private String androidRouterUrl;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
|
||||
@ -4,6 +4,7 @@ import cn.axzo.framework.domain.web.result.ApiPageResult;
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.tyr.client.feign.PageElementApi;
|
||||
import cn.axzo.tyr.client.model.req.*;
|
||||
import cn.axzo.tyr.client.model.res.FeatureResourcePageElementRelationViewResp;
|
||||
import cn.axzo.tyr.client.model.res.GetUserHasPermissionPageElementResp;
|
||||
import cn.axzo.tyr.client.model.res.ListPageElementCategoryResp;
|
||||
import cn.axzo.tyr.client.model.res.PageElementResp;
|
||||
@ -92,4 +93,9 @@ public class PageElementController implements PageElementApi {
|
||||
saasPageElementService.delete(req);
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<FeatureResourcePageElementRelationViewResp> getFeatureResourceRelations(IdReq req) {
|
||||
return ApiResult.ok(saasPageElementService.getFeatureResourceRelations(req.getId()));
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@ package cn.axzo.tyr.server.service;
|
||||
|
||||
import cn.axzo.framework.domain.page.PageResp;
|
||||
import cn.axzo.tyr.client.model.req.*;
|
||||
import cn.axzo.tyr.client.model.res.FeatureResourcePageElementRelationViewResp;
|
||||
import cn.axzo.tyr.client.model.res.GetUserHasPermissionPageElementResp;
|
||||
import cn.axzo.tyr.client.model.res.PageElementBasicDTO;
|
||||
import cn.axzo.tyr.client.model.res.PageElementResp;
|
||||
@ -83,4 +84,6 @@ public interface SaasPageElementService extends IService<SaasPageElement> {
|
||||
Long saveOrUpdate(SaveOrUpdatePageElementReq req);
|
||||
|
||||
void delete(DeletePageElementReq req);
|
||||
|
||||
FeatureResourcePageElementRelationViewResp getFeatureResourceRelations(Long pageElementId);
|
||||
}
|
||||
|
||||
@ -17,11 +17,7 @@ import cn.axzo.tyr.client.common.enums.PageElementFeatureResourceRelationTypeEnu
|
||||
import cn.axzo.tyr.client.common.enums.PageElementTypeEnum;
|
||||
import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogSceneEnum;
|
||||
import cn.axzo.tyr.client.model.req.*;
|
||||
import cn.axzo.tyr.client.model.res.GetUserHasPermissionPageElementResp;
|
||||
import cn.axzo.tyr.client.model.res.IdentityAuthRes;
|
||||
import cn.axzo.tyr.client.model.res.PageElementBasicDTO;
|
||||
import cn.axzo.tyr.client.model.res.PageElementResp;
|
||||
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
|
||||
import cn.axzo.tyr.client.model.res.*;
|
||||
import cn.axzo.tyr.server.config.MqProducer;
|
||||
import cn.axzo.tyr.server.event.payload.PageElementFeatureResourceUpsertPayload;
|
||||
import cn.axzo.tyr.server.model.RelationOperateLogResourceBindElementDO;
|
||||
@ -497,6 +493,7 @@ public class SaasPageElementServiceImpl extends ServiceImpl<SaasPageElementMappe
|
||||
@Override
|
||||
public PageResp<PageElementResp> pageV2(PageQueryElementV2Req request) {
|
||||
IPage<SaasPageElement> page = saasPageElementDao.lambdaQuery()
|
||||
.eq(Objects.nonNull(request.getId()), SaasPageElement::getId, request.getId())
|
||||
.eq(StringUtils.isNotBlank(request.getTerminal()), SaasPageElement::getTerminal, request.getTerminal())
|
||||
.in(CollectionUtils.isNotEmpty(request.getElementTypes()), SaasPageElement::getType, request.getElementTypes())
|
||||
.and(StringUtils.isNotBlank(request.getPageElementCodeOrName()), w -> w.like(SaasPageElement::getCode, request.getPageElementCodeOrName())
|
||||
@ -508,7 +505,10 @@ public class SaasPageElementServiceImpl extends ServiceImpl<SaasPageElementMappe
|
||||
.orderByDesc(BaseEntity::getId)
|
||||
.page(new Page<>(request.getPage(), request.getPageSize()));
|
||||
List<PageElementResp> list = BeanMapper.copyList(page.getRecords(), PageElementResp.class);
|
||||
// 补充元素组名
|
||||
fillGroupName(list);
|
||||
// 补充元素ios、android路由地址
|
||||
fillIosAndAndroidRouteUrl(list);
|
||||
return PageResp.list(page.getCurrent(), page.getSize(), page.getTotal(), list);
|
||||
}
|
||||
|
||||
@ -613,6 +613,34 @@ public class SaasPageElementServiceImpl extends ServiceImpl<SaasPageElementMappe
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public FeatureResourcePageElementRelationViewResp 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::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;
|
||||
}
|
||||
|
||||
fillElementToResource(featureResourceBasics, relations, elementBasic);
|
||||
|
||||
return FeatureResourcePageElementRelationViewResp.builder().featureResources(featureResourceBasics).build();
|
||||
}
|
||||
|
||||
private PageElementResp from(SaasPageElement saasPageElement,
|
||||
Map<String, List<SaasFeatureResourceResp>> featureResources) {
|
||||
PageElementResp pageElementResp = PageElementResp.builder().build();
|
||||
@ -689,6 +717,19 @@ public class SaasPageElementServiceImpl extends ServiceImpl<SaasPageElementMappe
|
||||
return JSONObject.toJSONString(exts);
|
||||
}
|
||||
|
||||
private void fillIosAndAndroidRouteUrl(List<PageElementResp> list) {
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
return;
|
||||
}
|
||||
for (PageElementResp resp : list) {
|
||||
if (StringUtils.isBlank(resp.getLinkExt())) {
|
||||
continue;
|
||||
}
|
||||
resp.setIosRouterUrl(resp.resolveIosRouterUrl());
|
||||
resp.setAndroidRouterUrl(resp.resolveAndroidRouterUrl());
|
||||
}
|
||||
}
|
||||
|
||||
private void saveOrUpdateOperateLog(SaveOrUpdatePageElementReq req, SaasPageElement basePageElement) {
|
||||
saasPgroupPermissionRelationOperateLogService.save(PermissionOperateLogReq.builder()
|
||||
.tableName(PAGE_ELEMENT_TABLE_NAME)
|
||||
@ -710,4 +751,133 @@ public class SaasPageElementServiceImpl extends ServiceImpl<SaasPageElementMappe
|
||||
.operateData(basePageElement)
|
||||
.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));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user