feat(REQ-2545): 分页查询页面元素接口

This commit is contained in:
李昆鹏 2024-06-19 15:22:02 +08:00
parent 6b10eacdd7
commit 25c39c86ba
8 changed files with 144 additions and 5 deletions

View File

@ -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<List<PageElementResp>> getPageElement(@RequestBody @Valid GetPageElementReq req);
/** 查询页面资源 **/
/** 编辑页面、页面组件的元素 **/
@PostMapping("/api/pageElement/modifyPageElementRelation")
ApiResult<Void> modifyPageElementRelation(@RequestBody @Valid ModifyPageElementRelationDTO req);
/** 分页查询页面资源 **/
@PostMapping("/api/pageElement/page")
ApiPageResult<PageElementResp> page(@RequestBody @Valid PageQueryElementReq req);
}

View File

@ -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<String> elementTypes;
/**
* 搜索条件
*/
private String searchKey;
/**
* 页码
*/
@Builder.Default
private Long page = 1L;
/**
* 每页大小
*/
@Builder.Default
private Long pageSize = 100L;
}

View File

@ -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;
/**
* 是否已勾选
*/

View File

@ -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<PageElementResp> page(PageQueryElementReq req) {
return ApiPageResult.ok(saasPageElementService.page(req));
}
}

View File

@ -33,10 +33,11 @@ public class SaasPageElementDao extends ServiceImpl<SaasPageElementMapper, SaasP
.list();
}
public List<SaasPageElement> listByGroupCodesAndExcludeIds(List<String> groupCodes, List<Long> excludeIds, String terminal) {
public List<SaasPageElement> listByGroupCodesAndExcludeIds(List<String> groupCodes, List<Long> excludeIds, String terminal, List<String> 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();
}

View File

@ -17,10 +17,11 @@ import java.util.Objects;
@Repository
public class SaasPageElementFeatureResourceRelationDao extends ServiceImpl<SaasPageElementFeatureResourceRelationMapper, SaasPageElementFeatureResourceRelation> {
public List<SaasPageElementFeatureResourceRelation> listByPageElementCode(String pageElementCode) {
public List<SaasPageElementFeatureResourceRelation> listByPageElementCode(String pageElementCode, String terminal) {
return lambdaQuery()
.eq(SaasPageElementFeatureResourceRelation::getIsDelete, DeleteEnum.NORMAL.getValue())
.eq(SaasPageElementFeatureResourceRelation::getPageElementCode, pageElementCode)
.eq(SaasPageElementFeatureResourceRelation::getTerminal, terminal)
.list();
}
public List<SaasPageElementFeatureResourceRelation> listByUniCodeAndTerminal(String featureResourceUniCode, String terminal) {

View File

@ -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<String> featureResourceUniCodes, Long operatorId);
/**
* 分页查询页面元素接口
*
* @param request 查询条件
* @return
*/
PageResp<PageElementResp> page(PageQueryElementReq request);
}

View File

@ -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<String> pageTypeCodes = selectedPageElements.stream().filter(e -> PageElementTypeEnum.PAGE.getCode().equals(e.getType())).map(SaasPageElement::getGroupCode).collect(Collectors.toList());
List<SaasPageElement> notSelectedComponents = saasPageElementDao.listByGroupCodesAndExcludeIds(pageTypeCodes, selectedIds, saasFeatureResource.getTerminal());
List<SaasPageElement> 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<PageElementResp> page(PageQueryElementReq request) {
IPage<SaasPageElement> 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<PageElementResp> list = BeanMapper.copyList(page.getRecords(), PageElementResp.class);
addComponentElement2Page(request.getTerminal(), list);
return PageResp.list(page.getCurrent(), page.getSize(), page.getTotal(), list);
}
private List<SaasPageElement> processParam2Entities(PageElementReportReq request) {
List<SaasPageElement> saasPageElements = Lists.newArrayList();
@ -172,7 +192,7 @@ public class SaasPageElementServiceImpl implements SaasPageElementService {
if (StringUtils.isBlank(pageElement.getLinkUrl())) {
continue;
}
List<SaasPageElementFeatureResourceRelation> relations = saasPageElementFeatureResourceRelationDao.listByPageElementCode(pageElement.getCode());
List<SaasPageElementFeatureResourceRelation> 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<PageElementResp> list) {
if (CollectionUtils.isEmpty(list)) {
return;
}
List<String> pageTypeCodes = Lists.newArrayList();
List<Long> excludeIds = Lists.newArrayList();
Map<String, PageElementResp> 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<SaasPageElement> 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());
}
});
}
}