REQ-3046: 返回前端解析后的URL

This commit is contained in:
yanglin 2024-10-21 14:32:49 +08:00
parent b278bd09df
commit c7e9b91039
17 changed files with 173 additions and 155 deletions

View File

@ -7,26 +7,10 @@ import cn.axzo.msg.center.common.enums.TableIsDeleteEnum;
import cn.axzo.msg.center.common.utils.BizAssertions;
import cn.axzo.msg.center.dal.MessageGroupNodeDao;
import cn.axzo.msg.center.domain.entity.MessageGroupNode;
import cn.axzo.msg.center.domain.entity.PendingMessageRecord;
import cn.axzo.msg.center.domain.entity.PendingRecordAdapter;
import cn.axzo.msg.center.domain.persistence.BaseEntityExt;
import cn.axzo.msg.center.inside.notices.config.PendingMessageBizConfig;
import cn.axzo.msg.center.message.domain.dto.PendingMessageDTO;
import cn.axzo.msg.center.message.domain.dto.TemplateModelV3;
import cn.axzo.msg.center.message.service.impl.v3.ModelV3Parser;
import cn.axzo.msg.center.message.service.todo.MigrateUtils;
import cn.axzo.msg.center.message.service.todo.manage.TodoExt;
import cn.axzo.msg.center.service.domain.UrlConfig;
import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
import cn.axzo.msg.center.service.enums.BizCategoryEnum;
import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
import cn.axzo.msg.center.service.pending.response.v3.ParsedModel3Visitor;
import cn.axzo.msg.center.service.pending.response.v3.ParsedModel3Walker;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedModelV3;
import cn.axzo.msg.center.service.template.response.MessageDetailStyle;
import cn.axzo.msg.center.utils.JSONObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.ImmutableMap;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -92,82 +76,6 @@ public class PendingMessageNewServiceImpl {
return result;
}
public PendingMessageDTO convertV3(PendingRecordAdapter adapter, List<TemplateModelV3> templateModels) {
PendingMessageDTO pendingMessage;
if (adapter instanceof PendingMessageRecord) {
pendingMessage = PendingMessageDTO.from((PendingMessageRecord) adapter);
} else {
pendingMessage = PendingMessageDTO.from(MigrateUtils.convertAdapterToPending(adapter));
}
// 发起人单位项目信息
pendingMessage.setPromoterOuId(adapter.getPromoterOuId());
pendingMessage.setPromoterWorkspaceId(adapter.getPromoterOrgId());
pendingMessage.setPromoterWorkspaceName(adapter.getPromoterOrgName());
pendingMessage.setPromoterWorkspaceType(adapter.getPromoterOrgType());
// 接收者单位项目信息
pendingMessage.setExecutorOuId(adapter.getOuId());
pendingMessage.setExecutorWorkspaceId(adapter.getOrgId());
pendingMessage.setExecutorWorkspaceName(adapter.getOrgName());
pendingMessage.setExecutorWorkspaceType(adapter.getExecutorOrgType());
// 兼容页面老逻辑
pendingMessage.setOuId(adapter.getOuId());
pendingMessage.setWorkspaceId(adapter.getPromoterOrgId());
// 只有项目才设置发起人项目部名称, 单位的话不返回, 因为会导致待办详情中显示重复的单位信息
if (adapter.getPromoterOrgType() == OrganizationTypeEnum.PROJECT)
pendingMessage.setWorkspaceName(adapter.getPromoterOrgName());
else
pendingMessage.setWorkspaceName("");
// 其它信息
pendingMessage.setTodoType(adapter.getTodoType());
pendingMessage.setIsRead(adapter.isRead());
pendingMessage.setProposedButtons(adapter.getCustomButtons());
pendingMessage.setBizExtParamObj(adapter.getBizExtParamObj());
pendingMessage.setRouterExtParamObj(adapter.getRouterParamObj());
Map<String, TemplateModelV3> templateCode2Template = templateModels.stream()
.collect(toMap(TemplateModelV3::getTemplateCode, identity()));
TemplateModelV3 templateModel = templateCode2Template.get(adapter.getTemplateCode());
if (templateModel != null) {
pendingMessage.setTemplateCategory(templateModel.getTemplate().getMsgCategory());
}
if (templateModel != null && templateModel.getTemplate().getDetailStyleCode() != null) {
MessageDetailStyle detailStyle = pendingMessageBizConfig
.findMessageDetailType(templateModel.getTemplate().getDetailStyleCode())
.orElse(null);
pendingMessage.setDetailStyle(detailStyle);
}
// 解析并替换掉路由地址中的动态参数变量
JSONObject routerParam = JSONObjectUtil.parseObject(adapter.getRouterParams());
routerParam.put(TodoExt.CTX, ImmutableMap.of(
"business", adapter.getTodoBusiness(),
"todo", adapter.getTodo()));
JSONObject authParam = new JSONObject();
if (!routerParam.containsKey("ouId")) {
authParam.put("ouId", adapter.getOuId());
}
if (!routerParam.containsKey("workspaceId")) {
authParam.put("workspaceId", adapter.getOrgId());
}
authParam.putAll(routerParam);
// 流程待办 - url无身份ID手动拼接
if (adapter.getBizCategory() == BizCategoryEnum.FLOW && (!authParam.containsKey("identityCode") || null == authParam.get("identityCode"))) {
authParam.put("identityCode", adapter.getIdentityCode());
}
if (templateModel != null) {
ParsedModelV3 parsedModel = modelV3Parser.parseModel(templateModel, adapter,
adapter.getBizExtParamObj(), authParam, routerParam);
pendingMessage.setModelV3(parsedModel);
pendingMessage.setCardUrlOpenStrategy(templateModel.getTemplate().getCardUrlOpenStrategy());
ParsedModel3Walker.walkDown(parsedModel, new ParsedModel3Visitor() {
@Override
public void visitTemplateCardUrlConfig(UrlConfig urlConfig) {
pendingMessage.setCardUrl(urlConfig);
}
});
}
return pendingMessage;
}
@NotEmpty
public List<Long> determineOuIds(Long ouId) {
List<Long> ouIds = new ArrayList<>();

View File

@ -2,18 +2,22 @@ package cn.axzo.msg.center.message.service.impl.v3;
import cn.axzo.basics.common.BeanMapper;
import cn.axzo.framework.jackson.utility.JSON;
import cn.axzo.maokai.api.util.Ref;
import cn.axzo.msg.center.domain.entity.MessageEntity;
import cn.axzo.msg.center.domain.entity.MessageTemplateGroupV3;
import cn.axzo.msg.center.inside.notices.config.PendingMessageBizConfig;
import cn.axzo.msg.center.message.domain.dto.TemplateModelV3;
import cn.axzo.msg.center.message.service.todo.manage.TodoExt;
import cn.axzo.msg.center.service.domain.MobileUrlConfig;
import cn.axzo.msg.center.service.domain.UrlConfig;
import cn.axzo.msg.center.service.domain.UrlConfigVisitor;
import cn.axzo.msg.center.service.domain.UrlConfigWalker;
import cn.axzo.msg.center.service.domain.url.AppUrl;
import cn.axzo.msg.center.service.domain.url.WebUrl;
import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
import cn.axzo.msg.center.service.enums.GroupType;
import cn.axzo.msg.center.service.enums.KVContentType;
import cn.axzo.msg.center.service.pending.TerminalProvider;
import cn.axzo.msg.center.service.pending.response.v3.ParsedModel3Visitor;
import cn.axzo.msg.center.service.pending.response.v3.ParsedModel3Walker;
import cn.axzo.msg.center.service.pending.response.v3.model.ComponentWorkerGroup;
@ -23,6 +27,8 @@ import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupV3;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedKV;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedModelV3;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedTemplateV3;
import cn.axzo.msg.center.service.pending.response.v3.model.TerminalUrlSelector;
import cn.axzo.msg.center.service.pending.response.v3.model.UrlInfoForRequest;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -54,29 +60,33 @@ public class ModelV3Parser {
MessageEntity entity,
JSONObject bizParam,
JSONObject routerParam) {
return parseModel(templateModel, entity, bizParam, routerParam, routerParam);
return parseModel(templateModel, entity, bizParam, routerParam, routerParam, null);
}
public ParsedModelV3 parseModel(TemplateModelV3 templateModel,
MessageEntity entity,
JSONObject bizParam,
JSONObject routerParam,
JSONObject appendRouterParam) {
JSONObject appendRouterParam,
TerminalProvider terminalProvider) {
ParsedModelV3 parsedModel = new ParsedModelV3();
parsedModel.setTemplate(BeanMapper.copyBean(templateModel, ParsedTemplateV3.class));
parsedModel.setGroups(copyGroups(templateModel.getGroups()));
parsedModel.setButtons(BeanMapper.copyList(templateModel.getButtons(), ParsedButtonV3.class));
UrlParser urlParser = new UrlParser(entity, routerParam, appendRouterParam);
TerminalUrlSelector urlSelector = new TerminalUrlSelector(terminalProvider);
ParsedModel3Walker.walkDown(parsedModel, new ParsedModel3Visitor() {
@Override
public void visitTemplateCardUrlConfig(UrlConfig urlConfig) {
urlParser.parseUrlConfig(urlConfig);
parsedModel.getTemplate().getOrCreateCardUrl().setUrl(parseUrlInfoForRequest(urlConfig));
}
@Override
public void visitGroup(ParsedGroupV3 group) {
if (group.getGroupType() == GroupType.COMPONENT_WORKER) {
group.setName("工人信息");
Long personId = bizParam.getLong(CUSTOMER_PERSON_ID);
if (personId != null && personId > 0)
parsedModel.addComponentWorkerGroup(new ComponentWorkerGroup(group, personId));
@ -101,8 +111,9 @@ public class ModelV3Parser {
}
@Override
public void visitGroupDetailUrl(ParsedGroupV3 group, UrlConfig urlConfig) {
public void visitGroupDetailUrlConfig(ParsedGroupV3 group, UrlConfig urlConfig) {
urlParser.parseUrlConfig(urlConfig);
group.getGroupInfo().getOrCrateDetail().setUrl(parseUrlInfoForRequest(urlConfig));
}
@Override
@ -113,17 +124,67 @@ public class ModelV3Parser {
@Override
public void visitButtonUrlConfig(ParsedButtonV3 button, UrlConfig urlConfig) {
urlParser.parseUrlConfig(urlConfig);
button.setUrl(parseUrlInfoForRequest(urlConfig));
}
@Override
public void exitModel(ParsedModelV3 model) {
model.removeEmptyKVGroups();
}
private UrlInfoForRequest parseUrlInfoForRequest(UrlConfig urlConfig) {
UrlInfoForRequest urlInfo = new UrlInfoForRequest();
urlInfo.setHasAppUrl(hasAppUrl(urlConfig));
urlInfo.setCurrentTerminalCms(
terminalProvider.getAppTerminalType() == AppTerminalTypeEnum.CMS_WEB_PC);
urlSelector.select(urlConfig).ifPresent(terminalUrl -> {
urlInfo.setUrl(terminalUrl.getUrl().getUrl());
if (terminalUrl.getUrl() instanceof WebUrl)
urlInfo.setWebOpenStrategy(((WebUrl) terminalUrl.getUrl()).getOpenStrategy());
});
return urlInfo;
}
});
return parsedModel;
}
private boolean hasAppUrl(UrlConfig urlConfig) {
Ref<Boolean> ref = Ref.create(false);
UrlConfigWalker.walkDown(urlConfig, new UrlConfigVisitor() {
@Override
public void visitAppWorker(MobileUrlConfig appWorker) {
ref.set(true);
}
@Override
public void visitAppWorkerIos(AppUrl ios) {
ref.set(true);
}
@Override
public void visitAppWorkerAndroid(AppUrl android) {
ref.set(true);
}
@Override
public void visitAppManager(MobileUrlConfig appWorker) {
ref.set(true);
}
@Override
public void visitAppManagerIos(AppUrl ios) {
ref.set(true);
}
@Override
public void visitAppManagerAndroid(AppUrl android) {
ref.set(true);
}
});
return ref.get();
}
private List<ParsedGroupV3> copyGroups(List<MessageTemplateGroupV3> groups) {
ArrayList<ParsedGroupV3> parsedGroups = new ArrayList<>();
for (MessageTemplateGroupV3 group : groups) {

View File

@ -210,7 +210,7 @@ class TodoRespBuilder {
}
if (templateModel != null) {
ParsedModelV3 parsedModel = modelV3Parser.parseModel(templateModel, adapter,
adapter.getBizExtParamObj(), authParam, routerParam);
adapter.getBizExtParamObj(), authParam, routerParam, terminalProvider);
response.setModelV3(parsedModel);
ParsedModel3Walker.walkDown(parsedModel, new ModelV2PropsPopulator(response, terminalProvider));
response.setDisplayOnCardKeyValues(parsedModel.determineDisplayOnCardKeyValues());
@ -228,7 +228,7 @@ class TodoRespBuilder {
new TerminalUrlSelector(terminalProvider)
.select(urlConfig)
.ifPresent(terminalUrl -> {
detail.setUrl(terminalUrl.getUrl());
detail.setUrl(terminalUrl.getUrl().getUrl());
detail.setTerminalType(terminalUrl.getTerminalType());
detailSet.set(true);
});

View File

@ -1,5 +1,6 @@
package cn.axzo.msg.center.service.domain.parse;
import cn.axzo.msg.center.service.domain.url.UrlConfig;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
import lombok.Getter;
import lombok.NoArgsConstructor;
@ -13,7 +14,7 @@ import lombok.Setter;
@NoArgsConstructor
public class TerminalUrl {
public TerminalUrl(TerminalTypeEnum terminalType, String url) {
public TerminalUrl(TerminalTypeEnum terminalType, UrlConfig url) {
this.terminalType = terminalType;
this.url = url;
}
@ -31,6 +32,6 @@ public class TerminalUrl {
/**
* 路由地址
*/
private String url;
private UrlConfig url;
}

View File

@ -2,21 +2,11 @@ package cn.axzo.msg.center.service.domain.url;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
/**
* @author yanglin
*/
@Setter
@Getter
public class AppUrl {
/**
* url地址
*/
private String url;
public boolean hasUrl() {
return StringUtils.isNotBlank(url);
}
public class AppUrl extends UrlConfig {
}

View File

@ -0,0 +1,22 @@
package cn.axzo.msg.center.service.domain.url;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
/**
* @author yanglin
*/
@Setter
@Getter
public class UrlConfig {
/**
* url地址
*/
private String url;
public boolean hasUrl() {
return StringUtils.isNotBlank(url);
}
}

View File

@ -1,30 +1,19 @@
package cn.axzo.msg.center.service.domain.url;
import cn.axzo.msg.center.service.enums.WebPageOpenStrategy;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
/**
* @author yanglin
*/
@Setter
@Getter
public class WebUrl {
public class WebUrl extends UrlConfig {
/**
* 网页打开方式. NEW_PAGE: 新页面打开, CURRENT_PAGE: 当前页面打开, DRAWER: 抽屉
*/
private WebPageOpenStrategy openStrategy;
/**
* url地址
*/
private String url;
public boolean hasUrl() {
return StringUtils.isNotBlank(url);
}
}

View File

@ -67,7 +67,7 @@ public class ModelV2PropsPopulator implements ParsedModel3Visitor {
.select(buttonV3.getUrlConfig())
.ifPresent(terminalUrl -> {
ButtonRouterDTO buttonV2 = factory.get();
buttonV2.setUrl(terminalUrl.getUrl());
buttonV2.setUrl(terminalUrl.getUrl().getUrl());
buttonV2.setTerminalType(terminalUrl.getTerminalType());
});
}

View File

@ -3,11 +3,13 @@ package cn.axzo.msg.center.service.pending.response.v3;
import cn.axzo.msg.center.service.domain.DetailConfig;
import cn.axzo.msg.center.service.domain.UrlConfig;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedButtonV3;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupDetail;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupInfo;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupV3;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedKV;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedModelV3;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedTemplateV3;
import cn.axzo.msg.center.service.pending.response.v3.model.UrlInfoForRequest;
/**
* @author yanglin
@ -26,6 +28,10 @@ public interface ParsedModel3Visitor {
default void exitTemplateCardUrlConfig(UrlConfig urlConfig) {}
default void visitTemplateCardUrl(UrlInfoForRequest url) {}
default void exitTemplateCardUrl(UrlInfoForRequest url) {}
default void visitGroup(ParsedGroupV3 group) {}
default void exitGroup(ParsedGroupV3 group) {}
@ -38,13 +44,21 @@ public interface ParsedModel3Visitor {
default void exitGroupKeyValue(ParsedGroupV3 group, ParsedKV kv) {}
default void visitGroupDetail(ParsedGroupV3 group, DetailConfig detailConfig) {}
default void visitGroupDetailConfig(ParsedGroupV3 group, DetailConfig detailConfig) {}
default void exitGroupDetail(ParsedGroupV3 group, DetailConfig detailConfig) {}
default void exitGroupDetailConfig(ParsedGroupV3 group, DetailConfig detailConfig) {}
default void visitGroupDetailUrl(ParsedGroupV3 group, UrlConfig urlConfig) {}
default void visitGroupDetailUrlConfig(ParsedGroupV3 group, UrlConfig urlConfig) {}
default void exitGroupDetailUrl(ParsedGroupV3 group, UrlConfig urlConfig) {}
default void exitGroupDetailUrlConfig(ParsedGroupV3 group, UrlConfig urlConfig) {}
default void visitGroupDetail(ParsedGroupV3 group, ParsedGroupDetail detail) {}
default void exitGroupDetail(ParsedGroupV3 group, ParsedGroupDetail detail) {}
default void visitGroupDetailUrl(ParsedGroupV3 group, UrlInfoForRequest url) {}
default void exitGroupDetailUrl(ParsedGroupV3 group, UrlInfoForRequest url) {}
default void visitButton(ParsedButtonV3 button) {}
@ -54,4 +68,7 @@ public interface ParsedModel3Visitor {
default void exitButtonUrlConfig(ParsedButtonV3 button, UrlConfig urlConfig) {}
default void visitButtonUrl(ParsedButtonV3 button, UrlInfoForRequest url) {}
default void exitButtonUrl(ParsedButtonV3 button, UrlInfoForRequest url) {}
}

View File

@ -2,6 +2,7 @@ package cn.axzo.msg.center.service.pending.response.v3;
import cn.axzo.msg.center.service.domain.CardUrlConfig;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedButtonV3;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedCardUrl;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupInfo;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupV3;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedKV;
@ -34,6 +35,11 @@ public class ParsedModel3Walker {
visitor.visitTemplateCardUrlConfig(cardUrlConfig.getUrlConfig());
visitor.exitTemplateCardUrlConfig(cardUrlConfig.getUrlConfig());
}
ParsedCardUrl cardUrl = template.getCardUrl();
if (cardUrl != null && cardUrl.getUrl() != null) {
visitor.visitTemplateCardUrl(cardUrl.getUrl());
visitor.exitTemplateCardUrl(cardUrl.getUrl());
}
}
private static void visitGroup(ParsedModel3Visitor visitor, ParsedGroupV3 group) {
@ -42,6 +48,7 @@ public class ParsedModel3Walker {
if (groupInfo != null) {
visitor.visitGroupInfo(group, groupInfo);
visitGroupKeyValues(visitor, group, groupInfo);
visitGroupDetailConfig(visitor, group, groupInfo);
visitGroupDetail(visitor, group, groupInfo);
visitor.exitGroupInfo(group, groupInfo);
}
@ -58,16 +65,28 @@ public class ParsedModel3Walker {
}
}
private static void visitGroupDetailConfig(ParsedModel3Visitor visitor,
ParsedGroupV3 group,
ParsedGroupInfo groupInfo) {
if (groupInfo.getDetailConfig() == null) return;
visitor.visitGroupDetailConfig(group, groupInfo.getDetailConfig());
if (groupInfo.getDetailConfig().getUrlConfig() != null) {
visitor.visitGroupDetailUrlConfig(group, groupInfo.getDetailConfig().getUrlConfig());
visitor.exitGroupDetailUrlConfig(group, groupInfo.getDetailConfig().getUrlConfig());
}
visitor.exitGroupDetailConfig(group, groupInfo.getDetailConfig());
}
private static void visitGroupDetail(ParsedModel3Visitor visitor,
ParsedGroupV3 group,
ParsedGroupInfo groupInfo) {
if (groupInfo.getDetailConfig() == null) return;
visitor.visitGroupDetail(group, groupInfo.getDetailConfig());
if (groupInfo.getDetailConfig().getUrlConfig() != null) {
visitor.visitGroupDetailUrl(group, groupInfo.getDetailConfig().getUrlConfig());
visitor.exitGroupDetailUrl(group, groupInfo.getDetailConfig().getUrlConfig());
if (groupInfo.getDetail() == null) return;
visitor.visitGroupDetail(group, groupInfo.getDetail());
if (groupInfo.getDetail().getUrl() != null) {
visitor.visitGroupDetailUrl(group, groupInfo.getDetail().getUrl());
visitor.exitGroupDetailUrl(group, groupInfo.getDetail().getUrl());
}
visitor.exitGroupDetail(group, groupInfo.getDetailConfig());
visitor.exitGroupDetail(group, groupInfo.getDetail());
}
private static void visitButton(ParsedModel3Visitor visitor,
@ -77,6 +96,10 @@ public class ParsedModel3Walker {
visitor.visitButtonUrlConfig(button, button.getUrlConfig());
visitor.exitButtonUrlConfig(button, button.getUrlConfig());
}
if (button.getUrl() != null) {
visitor.visitButtonUrl(button, button.getUrl());
visitor.exitButtonUrl(button, button.getUrl());
}
visitor.exitButton(button);
}

View File

@ -64,7 +64,7 @@ public class ParsedButtonV3 implements MessageButton {
/**
* 按钮链接
*/
private ParsedUrl url;
private UrlInfoForRequest url;
/**
* 按钮style配置

View File

@ -12,5 +12,5 @@ public class ParsedCardUrl {
/**
* 链接信息
*/
private ParsedUrl url;
private UrlInfoForRequest url;
}

View File

@ -1,8 +1,5 @@
package cn.axzo.msg.center.service.pending.response.v3.model;
import cn.axzo.msg.center.service.domain.UrlConfig;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.Setter;
@ -18,15 +15,9 @@ public class ParsedGroupDetail {
*/
private String name;
/**
* 链接配置
*/
@JsonIgnore @JSONField(serialize = false)
private UrlConfig urlConfig;
/**
* 链接
*/
private ParsedUrl url;
private UrlInfoForRequest url;
}

View File

@ -38,6 +38,13 @@ public class ParsedGroupInfo {
*/
private List<ParsedKV> keyValuesForDebug = new ArrayList<>();
@JsonIgnore @JSONField(serialize = false)
public ParsedGroupDetail getOrCrateDetail() {
if (detail == null)
detail = new ParsedGroupDetail();
return detail;
}
public void removeEmptyValues() {
if (keyValues == null) return;
keyValues.removeIf(ParsedKV::isValueEmpty);

View File

@ -99,6 +99,13 @@ public class ParsedTemplateV3 {
*/
private YesOrNo displayOnList;
@JsonIgnore @JSONField(serialize = false)
public ParsedCardUrl getOrCreateCardUrl() {
if (cardUrl == null)
cardUrl = new ParsedCardUrl();
return cardUrl;
}
@Override
public String toString() {
return JSON.toJSONString(this);

View File

@ -55,7 +55,7 @@ public class TerminalUrlSelector {
return null;
if (webUrl == null)
return null;
return new TerminalUrl(TerminalTypeEnum.WEB, webUrl.getUrl());
return new TerminalUrl(TerminalTypeEnum.WEB, webUrl);
}
private TerminalUrl selectApp(
@ -68,9 +68,9 @@ public class TerminalUrlSelector {
return null;
TerminalTypeEnum terminalType = terminalProvider.getTerminalType();
if (mobileUrl.getIos() != null && terminalType == TerminalTypeEnum.IOS)
return new TerminalUrl(TerminalTypeEnum.IOS, mobileUrl.getIos().getUrl());
return new TerminalUrl(TerminalTypeEnum.IOS, mobileUrl.getIos());
if (mobileUrl.getAndroid() != null && terminalType == TerminalTypeEnum.ANDROID)
return new TerminalUrl(TerminalTypeEnum.ANDROID, mobileUrl.getAndroid().getUrl());
return new TerminalUrl(TerminalTypeEnum.ANDROID, mobileUrl.getAndroid());
return null;
}

View File

@ -9,21 +9,23 @@ import lombok.Setter;
*/
@Setter
@Getter
public class ParsedUrl {
public class UrlInfoForRequest {
/**
* 链接地址
*/
private String url;
/**
* web打开策略
* 网页打开方式. NEW_PAGE: 新页面打开, CURRENT_PAGE: 当前页面打开, DRAWER: 抽屉
*/
private WebPageOpenStrategy webOpenStrategy;
/**
* 当前端是否为web终端
*/
private boolean isCurrentTerminalCms;
/**
* 是否有安卓链接
*/
private boolean hasAndroidUrl;
/**
* 是否有ios链接
*/
private boolean hasIosUrl;
private boolean hasAppUrl;
}