From 25c39c86bab35f17e147fd2c555d5d274718d116 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=98=86=E9=B9=8F?= Date: Wed, 19 Jun 2024 15:22:02 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-2545):=20=E5=88=86=E9=A1=B5=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E9=A1=B5=E9=9D=A2=E5=85=83=E7=B4=A0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/tyr/client/feign/PageElementApi.java | 8 ++- .../client/model/req/PageQueryElementReq.java | 49 +++++++++++++++ .../tyr/client/model/res/PageElementResp.java | 10 ++++ .../permission/PageElementController.java | 7 +++ .../repository/dao/SaasPageElementDao.java | 3 +- ...PageElementFeatureResourceRelationDao.java | 3 +- .../service/SaasPageElementService.java | 10 ++++ .../impl/SaasPageElementServiceImpl.java | 59 ++++++++++++++++++- 8 files changed, 144 insertions(+), 5 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/req/PageQueryElementReq.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PageElementApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PageElementApi.java index fd59bfd1..07166076 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PageElementApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/PageElementApi.java @@ -1,9 +1,11 @@ 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.GetPageElementReq; import cn.axzo.tyr.client.model.req.ModifyPageElementRelationDTO; import cn.axzo.tyr.client.model.req.PageElementReportReq; +import cn.axzo.tyr.client.model.req.PageQueryElementReq; import cn.axzo.tyr.client.model.res.PageElementResp; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -30,7 +32,11 @@ public interface PageElementApi { @PostMapping("/api/pageElement/getPageElement") ApiResult> getPageElement(@RequestBody @Valid GetPageElementReq req); - /** 查询页面资源 **/ + /** 编辑页面、页面组件的元素 **/ @PostMapping("/api/pageElement/modifyPageElementRelation") ApiResult modifyPageElementRelation(@RequestBody @Valid ModifyPageElementRelationDTO req); + + /** 分页查询页面资源 **/ + @PostMapping("/api/pageElement/page") + ApiPageResult page(@RequestBody @Valid PageQueryElementReq req); } diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/PageQueryElementReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/PageQueryElementReq.java new file mode 100644 index 00000000..21706a88 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/PageQueryElementReq.java @@ -0,0 +1,49 @@ +package cn.axzo.tyr.client.model.req; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; +import java.util.List; + +/** + * @author likunpeng + * @version 1.0 + * @date 2024/6/14 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PageQueryElementReq { + + /** + * 端 + */ + @NotBlank(message = "端不能为空") + private String terminal; + + /** + * 页面元素组件类型 + */ + private List elementTypes; + + /** + * 搜索条件 + */ + private String searchKey; + + /** + * 页码 + */ + @Builder.Default + private Long page = 1L; + + /** + * 每页大小 + */ + @Builder.Default + private Long pageSize = 100L; +} diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/PageElementResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/PageElementResp.java index dbac024e..311b7c28 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/PageElementResp.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/PageElementResp.java @@ -23,6 +23,11 @@ public class PageElementResp { */ private Long id; + /** + * 元素的组编码 + */ + private String groupCode; + /** * 元素编码 */ @@ -38,6 +43,11 @@ public class PageElementResp { */ private String type; + /** + * 页面路由地址 + */ + private String linkUr; + /** * 是否已勾选 */ diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PageElementController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PageElementController.java index 0653502f..f708e574 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PageElementController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/PageElementController.java @@ -1,10 +1,12 @@ package cn.axzo.tyr.server.controller.permission; +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.GetPageElementReq; import cn.axzo.tyr.client.model.req.ModifyPageElementRelationDTO; import cn.axzo.tyr.client.model.req.PageElementReportReq; +import cn.axzo.tyr.client.model.req.PageQueryElementReq; import cn.axzo.tyr.client.model.res.PageElementResp; import cn.axzo.tyr.server.service.SaasPageElementService; import lombok.RequiredArgsConstructor; @@ -41,4 +43,9 @@ public class PageElementController implements PageElementApi { saasPageElementService.modifyPageElementRelation(req); return ApiResult.ok(); } + + @Override + public ApiPageResult page(PageQueryElementReq req) { + return ApiPageResult.ok(saasPageElementService.page(req)); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPageElementDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPageElementDao.java index 347a2b09..cefcefed 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPageElementDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPageElementDao.java @@ -33,10 +33,11 @@ public class SaasPageElementDao extends ServiceImpl listByGroupCodesAndExcludeIds(List groupCodes, List excludeIds, String terminal) { + public List listByGroupCodesAndExcludeIds(List groupCodes, List excludeIds, String terminal, List types) { return lambdaQuery() .eq(SaasPageElement::getTerminal, terminal) .in(SaasPageElement::getGroupCode, groupCodes) + .in(CollectionUtils.isNotEmpty(types), SaasPageElement::getType, types) .notIn(CollectionUtils.isNotEmpty(excludeIds), SaasPageElement::getId, excludeIds) .list(); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPageElementFeatureResourceRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPageElementFeatureResourceRelationDao.java index 105b8441..0036cdaa 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPageElementFeatureResourceRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasPageElementFeatureResourceRelationDao.java @@ -17,10 +17,11 @@ import java.util.Objects; @Repository public class SaasPageElementFeatureResourceRelationDao extends ServiceImpl { - public List listByPageElementCode(String pageElementCode) { + public List listByPageElementCode(String pageElementCode, String terminal) { return lambdaQuery() .eq(SaasPageElementFeatureResourceRelation::getIsDelete, DeleteEnum.NORMAL.getValue()) .eq(SaasPageElementFeatureResourceRelation::getPageElementCode, pageElementCode) + .eq(SaasPageElementFeatureResourceRelation::getTerminal, terminal) .list(); } public List listByUniCodeAndTerminal(String featureResourceUniCode, String terminal) { diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPageElementService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPageElementService.java index 13d35ef7..02a2f6cf 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPageElementService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasPageElementService.java @@ -1,8 +1,10 @@ package cn.axzo.tyr.server.service; +import cn.axzo.framework.domain.page.PageResp; import cn.axzo.tyr.client.model.req.GetPageElementReq; import cn.axzo.tyr.client.model.req.ModifyPageElementRelationDTO; import cn.axzo.tyr.client.model.req.PageElementReportReq; +import cn.axzo.tyr.client.model.req.PageQueryElementReq; import cn.axzo.tyr.client.model.res.PageElementResp; import cn.axzo.tyr.server.repository.entity.SaasPageElement; @@ -54,4 +56,12 @@ public interface SaasPageElementService { * @param operatorId 操作人 */ void deleteRelationByTerminalAndUniCodes(String terminal, List featureResourceUniCodes, Long operatorId); + + /** + * 分页查询页面元素接口 + * + * @param request 查询条件 + * @return + */ + PageResp page(PageQueryElementReq request); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPageElementServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPageElementServiceImpl.java index 60316cc7..6ae88c25 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPageElementServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasPageElementServiceImpl.java @@ -1,13 +1,16 @@ package cn.axzo.tyr.server.service.impl; +import cn.axzo.basics.common.BeanMapper; import cn.axzo.basics.common.util.AssertUtil; import cn.axzo.basics.common.util.StopWatchUtil; +import cn.axzo.framework.domain.page.PageResp; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.common.enums.FeatureResourceType; import cn.axzo.tyr.client.common.enums.PageElementTypeEnum; import cn.axzo.tyr.client.model.req.GetPageElementReq; import cn.axzo.tyr.client.model.req.ModifyPageElementRelationDTO; import cn.axzo.tyr.client.model.req.PageElementReportReq; +import cn.axzo.tyr.client.model.req.PageQueryElementReq; import cn.axzo.tyr.client.model.res.PageElementResp; import cn.axzo.tyr.server.repository.dao.SaasFeatureResourceDao; import cn.axzo.tyr.server.repository.dao.SaasPageElementDao; @@ -17,7 +20,10 @@ import cn.axzo.tyr.server.repository.entity.SaasPageElement; import cn.axzo.tyr.server.repository.entity.SaasPageElementFeatureResourceRelation; import cn.axzo.tyr.server.service.SaasPageElementService; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -91,7 +97,7 @@ public class SaasPageElementServiceImpl implements SaasPageElementService { // 如果查询不仅仅是已勾选的,需要把已勾选的页面下未选择的组件也返回 if (!Boolean.TRUE.equals(request.getQuerySelectedOnly())) { List pageTypeCodes = selectedPageElements.stream().filter(e -> PageElementTypeEnum.PAGE.getCode().equals(e.getType())).map(SaasPageElement::getGroupCode).collect(Collectors.toList()); - List notSelectedComponents = saasPageElementDao.listByGroupCodesAndExcludeIds(pageTypeCodes, selectedIds, saasFeatureResource.getTerminal()); + List notSelectedComponents = saasPageElementDao.listByGroupCodesAndExcludeIds(pageTypeCodes, selectedIds, saasFeatureResource.getTerminal(), null); if (CollectionUtils.isNotEmpty(notSelectedComponents)) { selectedPageElements.addAll(notSelectedComponents); } @@ -141,6 +147,20 @@ public class SaasPageElementServiceImpl implements SaasPageElementService { saasPageElementFeatureResourceRelationDao.deleteByTerminalAndUniCodes(terminal, featureResourceUniCodes, operatorId); } + @Override + public PageResp page(PageQueryElementReq request) { + IPage page = saasPageElementDao.lambdaQuery() + .eq(SaasPageElement::getTerminal, request.getTerminal()) + .in(CollectionUtils.isNotEmpty(request.getElementTypes()), SaasPageElement::getType, request.getElementTypes()) + .and(StringUtils.isNotBlank(request.getSearchKey()), w -> w.eq(BaseEntity::getId, request.getSearchKey()) + .or().like(SaasPageElement::getName, request.getSearchKey()) + .or().like(SaasPageElement::getLinkUr, request.getSearchKey())) + .page(new Page<>(request.getPage(), request.getPageSize())); + List list = BeanMapper.copyList(page.getRecords(), PageElementResp.class); + addComponentElement2Page(request.getTerminal(), list); + return PageResp.list(page.getCurrent(), page.getSize(), page.getTotal(), list); + } + private List processParam2Entities(PageElementReportReq request) { List saasPageElements = Lists.newArrayList(); @@ -172,7 +192,7 @@ public class SaasPageElementServiceImpl implements SaasPageElementService { if (StringUtils.isBlank(pageElement.getLinkUrl())) { continue; } - List relations = saasPageElementFeatureResourceRelationDao.listByPageElementCode(pageElement.getCode()); + List relations = saasPageElementFeatureResourceRelationDao.listByPageElementCode(pageElement.getCode(), request.getTerminal()); if (CollectionUtils.isEmpty(relations)) { continue; } @@ -226,4 +246,39 @@ public class SaasPageElementServiceImpl implements SaasPageElementService { return pageTypeElements; } + + private void addComponentElement2Page(String terminal, List list) { + if (CollectionUtils.isEmpty(list)) { + return; + } + List pageTypeCodes = Lists.newArrayList(); + List excludeIds = Lists.newArrayList(); + Map pageTypeCodeMap = Maps.newHashMap(); + for (PageElementResp element : list) { + if (PageElementTypeEnum.PAGE.getCode().equals(element.getType())) { + pageTypeCodes.add(element.getGroupCode()); + pageTypeCodeMap.put(element.getCode(), element); + } + excludeIds.add(element.getId()); + element.setChildren(Lists.newArrayList()); + } + + List componentElements = saasPageElementDao.listByGroupCodesAndExcludeIds(pageTypeCodes, excludeIds, terminal, Lists.newArrayList(PageElementTypeEnum.COMPONENT.getCode())); + if (CollectionUtils.isEmpty(componentElements)) { + return; + } + + componentElements.forEach(e -> { + PageElementResp pageTypeElement = pageTypeCodeMap.get(e.getGroupCode()); + if (Objects.nonNull(pageTypeElement)) { + pageTypeElement.getChildren().add(PageElementResp.builder() + .id(e.getId()) + .groupCode(e.getGroupCode()) + .code(e.getCode()) + .name(e.getName()) + .type(e.getType()) + .build()); + } + }); + } }