feat: (feature/REQ-3167) 菜单详情接口支持返回版本号

This commit is contained in:
李龙 2024-11-27 20:04:25 +08:00
parent b6393f963d
commit 32d3790076
7 changed files with 162 additions and 8 deletions

View File

@ -54,6 +54,9 @@ public class PageSaasFeatureResourceReq implements IPageReq {
@CriteriaField(field = "featureType", operator = Operator.IN)
private List<Integer> featureResourceTypes;
@CriteriaField(field = "featureType", operator = Operator.EQ)
private Integer featureResourceType;
@CriteriaField(field = "path", operator = Operator.SW)
private String path;

View File

@ -41,4 +41,34 @@ public class PageElementBasicDTO {
* @see cn.axzo.tyr.client.common.enums.PageElementFeatureResourceRelationTypeEnum
*/
private Integer relationType;
/**
* ios 最低版本要求
*/
private Integer iosMinVersion;
/**
* ios 最高版本要求
*/
private Integer iosMaxVersion;
/**
* ios 是否开启最高版本要求:true-开启false-关闭
*/
private Boolean iosMaxVersionEnabled;
/**
* android 最低版本要求
*/
private Integer androidMinVersion;
/**
* android 最高版本要求
*/
private Integer androidMaxVersion;
/**
* android 是否开启最高版本要求:true-开启false-关闭
*/
private Boolean androidMaxVersionEnabled;
}

View File

@ -55,5 +55,10 @@ public class TerminalConfigRes {
* 端业务类型的code用于业务处理GOVAXZO_MANAGERAXZO_WORKEROMS
*/
private String code;
/**
* 是否允许克隆
*/
private Boolean allowClone;
}
}

View File

@ -19,7 +19,16 @@ public class TerminalRes {
private String terminalType;
private String terminalTypeDesc;
private String terminalBizType;
private String terminalBizTypeDesc;
private Integer featureType;
/**
* 是否允许克隆
*/
private Boolean allowClone;
}

View File

@ -19,11 +19,14 @@ import cn.axzo.tyr.server.service.SaasFeatureResourceService;
import cn.axzo.tyr.server.service.TerminalService;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
import static cn.axzo.tyr.client.model.res.SaasFeatureResourceResp.ROOT_PARENT_ID;
@ -45,24 +48,49 @@ public class TerminalController implements TerminalApi {
public ApiResult<List<TerminalRes>> list(ListTerminalReq req) {
PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder()
.ids(Lists.newArrayList(req.getIds()))
.ids(Optional.ofNullable(req.getIds())
.map(Lists::newArrayList)
.orElse(null))
.build();
List<SaasFeatureResourceResp> saasFeatureResources = featureResourceService.list(pageSaasFeatureResourceReq);
if (CollectionUtils.isEmpty(saasFeatureResources)) {
return ApiResult.ok();
}
Map<String, String> terminalTypes = terminalService.getConfig().getTerminalTypes().stream()
.collect(Collectors.toMap(TerminalConfigRes.TerminalType::getCode, TerminalConfigRes.TerminalType::getDesc));
Map<String, TerminalConfigRes.TerminalBizType> terminalBizTypes = terminalService.getConfig().getTerminalBizTypes().stream()
.collect(Collectors.toMap(TerminalConfigRes.TerminalBizType::getCode, Function.identity()));
return ApiResult.ok(saasFeatureResources.stream()
.map(e -> {
FeatureResourceExtraDO extra = e.getExtra();
String terminalTypeCode = Optional.ofNullable(extra)
.map(FeatureResourceExtraDO::getTerminalType)
.orElse(null);
String terminalBizTypeCode = Optional.ofNullable(extra)
.map(FeatureResourceExtraDO::getTerminalBizType)
.orElse(null);
TerminalConfigRes.TerminalBizType terminalBizType = terminalBizTypes.get(terminalBizTypeCode);
return TerminalRes.builder()
.id(e.getId())
.code(e.getTerminal())
.name(e.getFeatureName())
.terminalType(Optional.ofNullable(extra)
.map(FeatureResourceExtraDO::getTerminalType)
.terminalType(terminalTypeCode)
.terminalTypeDesc(Optional.ofNullable(terminalTypeCode)
.map(terminalTypes::get)
.orElse(null))
.terminalBizType(Optional.ofNullable(extra)
.map(FeatureResourceExtraDO::getTerminalBizType)
.terminalBizType(terminalBizTypeCode)
.terminalBizTypeDesc(Optional.ofNullable(terminalBizType)
.map(TerminalConfigRes.TerminalBizType::getDesc)
.orElse(null))
.allowClone(Optional.ofNullable(terminalBizType)
.map(TerminalConfigRes.TerminalBizType::getAllowClone)
.orElse(false))
.featureType(e.getFeatureType())
.build();
})

View File

@ -384,9 +384,49 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
List<String> allUniCodes = descendants.stream().map(SaasFeatureResource::getUniCode).filter(StringUtils::isNotBlank).collect(Collectors.toList());
fillPageElement2PageFeatureResource(treeList, allUniCodes, param);
// 查询页面关联资源的版本号
assemblePageRouteVersion(featureResourceTreeNode);
return featureResourceTreeNode;
}
private void assemblePageRouteVersion(FeatureResourceTreeNode featureResourceTreeNode) {
if (Objects.isNull(featureResourceTreeNode)) {
return;
}
PageElementFeatureResourceRelationReq pageElementFeatureResourceRelationReq = PageElementFeatureResourceRelationReq.builder()
.featureResourceUniCodes(Sets.newHashSet(featureResourceTreeNode.getUniCode()))
.types(Sets.newHashSet(PageElementFeatureResourceRelationTypeEnum.PAGE_ROUTE))
.build();
List<SaasPageElementFeatureResourceRelation> pageElementFeatureResourceRelations = saasPageElementFeatureResourceRelationService.list(pageElementFeatureResourceRelationReq);
if (CollectionUtils.isEmpty(pageElementFeatureResourceRelations)) {
return;
}
PageElementReq pageElementReq = PageElementReq.builder()
.codes(pageElementFeatureResourceRelations.stream()
.map(SaasPageElementFeatureResourceRelation::getPageElementCode)
.collect(Collectors.toSet()))
.build();
Optional<PageElementResp> pageElementOptional = saasPageElementService.list(pageElementReq).stream()
.findFirst();
if (!pageElementOptional.isPresent()) {
return;
}
PageElementResp pageElementResp = pageElementOptional.get();
featureResourceTreeNode.setAndroidMinVersion(pageElementResp.getAndroidMinVersion());
featureResourceTreeNode.setAndroidMaxVersion(pageElementResp.getAndroidMaxVersion());
featureResourceTreeNode.setAndroidMaxVersionEnabled(pageElementResp.getAndroidMaxVersionEnabled());
featureResourceTreeNode.setIosMinVersion(pageElementResp.getIosMinVersion());
featureResourceTreeNode.setIosMaxVersion(pageElementResp.getIosMaxVersion());
featureResourceTreeNode.setIosMaxVersionEnabled(pageElementResp.getIosMaxVersionEnabled());
}
@Override
@Transactional(rollbackFor = Exception.class)
@CacheEvict(value = SaasFeatureResourceCacheService.CACHE_FEATURE_RESOURCE_TREE,allEntries = true)
@ -1178,7 +1218,7 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
// 通过旧端的层级关系找到对应新端的记录然后更新path和parentId
List<SaasFeatureResource> children = oldChildren.stream()
.map(e -> {
SaasFeatureResourceResp saasFeatureResourceResp = newUnicodeMap.get(req.getNewTerminalFeatureCodePrefix() + ":" + e.getUniCode());
SaasFeatureResourceResp saasFeatureResourceResp = newUnicodeMap.get(replaceUnicode(req.getNewTerminalFeatureCodePrefix(), e.getUniCode()));
SaasFeatureResource saasFeatureResource = new SaasFeatureResource();
saasFeatureResource.setId(saasFeatureResourceResp.getId());
@ -1193,7 +1233,7 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
children.forEach(e -> {
List<FeatureResourceTreeNode> oldNextChildren = oldChildren.stream()
.filter(old -> Objects.equals(req.getNewTerminalFeatureCodePrefix() + ":" + old.getUniCode(), e.getUniCode()))
.filter(old -> Objects.equals(replaceUnicode(req.getNewTerminalFeatureCodePrefix(), old.getUniCode()), e.getUniCode()))
.map(FeatureResourceTreeNode::getChildren)
.filter(Objects::nonNull)
.flatMap(Collection::stream)
@ -1221,7 +1261,8 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
saasFeatureResource.setFeatureCode(req.getNewTerminalCode());
saasFeatureResource.setFeatureName(req.getNewTerminalName());
} else {
saasFeatureResource.setUniCode(req.getNewTerminalFeatureCodePrefix() + ":" + e.getUniCode());
saasFeatureResource.setUniCode(replaceUnicode(req.getNewTerminalFeatureCodePrefix(), e.getUniCode()));
saasFeatureResource.setFeatureCode(saasFeatureResource.getUniCode());
saasFeatureResource.setFeatureName(e.getFeatureName());
}
@ -1230,4 +1271,18 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
.collect(Collectors.toList());
this.saveBatch(inserts);
}
/**
* 新code的解析
* 原code第一个":"前的字符串替换成newTerminalFeatureCodePrefix
* 如果原code没有":"则直接把newTerminalFeatureCodePrefix + ":" + oldUniCode
* @param newTerminalFeatureCodePrefix
* @param oldUniCode
* @return
*/
private String replaceUnicode(String newTerminalFeatureCodePrefix, String oldUniCode) {
int i = oldUniCode.indexOf(":");
return i < 0 ? newTerminalFeatureCodePrefix + ":" + oldUniCode : newTerminalFeatureCodePrefix + oldUniCode.substring(i);
}
}

View File

@ -857,6 +857,30 @@ public class SaasPageElementServiceImpl extends ServiceImpl<SaasPageElementMappe
PageElementResp pageElementResp = PageElementResp.builder().build();
BeanUtils.copyProperties(saasPageElement, pageElementResp);
List<SaasPageElement.Application> applications = saasPageElement.covertToExt().getApplications();
// 把这个平铺出去方便使用
if (CollectionUtils.isNotEmpty(applications)) {
SaasPageElement.Application iosApplication = applications.stream()
.filter(application -> Objects.equals(application.getType(), SaasPageElement.ApplicationTypeEnum.IOS))
.findFirst()
.orElse(null);
if (Objects.nonNull(iosApplication)) {
pageElementResp.setIosMinVersion(iosApplication.getMinVersion());
pageElementResp.setIosMaxVersion(iosApplication.getMaxVersion());
pageElementResp.setIosMaxVersionEnabled(iosApplication.getMaxVersionEnabled());
}
SaasPageElement.Application androidApplication = applications.stream()
.filter(application -> Objects.equals(application.getType(), SaasPageElement.ApplicationTypeEnum.ANDROID))
.findFirst()
.orElse(null);
if (Objects.nonNull(androidApplication)) {
pageElementResp.setAndroidMinVersion(androidApplication.getMinVersion());
pageElementResp.setAndroidMaxVersion(androidApplication.getMaxVersion());
pageElementResp.setAndroidMaxVersionEnabled(androidApplication.getMaxVersionEnabled());
}
}
pageElementResp.setFeatureResources(featureResources.get(saasPageElement.getCode()));
pageElementResp.setChildren(childrenPageElements.get(saasPageElement.getCode()));