REQ-3201: move elements to precise location

This commit is contained in:
yanglin 2024-12-17 09:35:21 +08:00
parent eff05ecb6f
commit 67057bb340
3 changed files with 82 additions and 88 deletions

View File

@ -1,18 +1,11 @@
package cn.axzo.msg.center.message.service.impl.v3;
import cn.axzo.msg.center.domain.entity.MessageEntity;
import cn.axzo.msg.center.domain.entity.MessageTemplateButtonV3;
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.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.GroupType;
import cn.axzo.msg.center.service.enums.KVContentType;
import cn.axzo.msg.center.service.pending.ClientRequest;
import cn.axzo.msg.center.service.pending.card.domain.CardElementConfig;
import cn.axzo.msg.center.service.pending.response.v3.ParsedModel3Visitor;
import cn.axzo.msg.center.service.pending.response.v3.ParsedModelV3Walker;
@ -26,8 +19,6 @@ 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.PhoneInfo;
import cn.axzo.msg.center.service.pending.response.v3.model.SessionUrlInfo;
import cn.axzo.msg.center.service.pending.response.v3.model.SessionUrlSelector;
import cn.axzo.trade.datasecurity.core.util.DataSecurityHelper;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
@ -36,7 +27,6 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.jetbrains.annotations.Nullable;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
@ -54,44 +44,6 @@ public class ModelV3Parser {
private static final String CUSTOMER_PERSON_ID = "customerPersonId";
private final PendingMessageBizConfig cfg;
public ParsedModelV3 parseModelForTodo(TemplateModelV3 templateModel,
MessageEntity entity,
JSONObject bizParam,
JSONObject routerParam,
JSONObject appendRouterParam,
ClientRequest request) {
UrlParser urlParser = new TodoUrlParser(cfg, entity, routerParam, appendRouterParam);
ParsedModelV3 parsedModel = parseModel(templateModel, bizParam, urlParser);
ParsedModelV3Walker.walkDown(parsedModel, new ParsedModel3Visitor() {
@Override
public void visitTemplateCardUrlConfig(UrlConfig urlConfig) {
if (!urlConfig.hasUrl()) return;
parsedModel.getTemplate().getOrCreateCardUrl().setUrl(parseSessionUrlInfo(urlConfig));
}
@Override
public void visitGroupDetailUrlConfig(ParsedGroupV3 group, UrlConfig urlConfig) {
if (!urlConfig.hasUrl()) return;
ParsedGroupDetail parsedDetail = group.getGroupInfo().getParsedDetail();
if (parsedDetail != null)
parsedDetail.setUrl(parseSessionUrlInfo(urlConfig));
}
@Override
public void visitButtonUrlConfig(ParsedButtonV3 button, UrlConfig urlConfig) {
button.setUrl(parseSessionUrlInfo(urlConfig));
}
private SessionUrlInfo parseSessionUrlInfo(UrlConfig urlConfig) {
return ModelV3Parser.this.parseSessionUrlInfo(urlConfig, request);
}
});
return parsedModel;
}
public ParsedModelV3 parseModel(TemplateModelV3 templateModel,
JSONObject bizParam,
UrlParser urlParser) {
@ -238,33 +190,4 @@ public class ModelV3Parser {
return parsedGroups;
}
public SessionUrlInfo parseSessionUrlInfo(UrlConfig urlConfig,
@Nullable ClientRequest request) {
SessionUrlInfo url = new SessionUrlInfo();
UrlConfigWalker.walkDown(urlConfig, new UrlConfigVisitor() {
@Override
public void visitPcCms(WebUrl pcCms) {
url.setHasCmsUrl(pcCms.hasUrl());
}
@Override
public void visitAppManagerIos(AppUrl ios) {
url.setHasManagerAppUrl(ios.hasUrl());
}
@Override
public void visitAppManagerAndroid(AppUrl android) {
url.setHasManagerAppUrl(android.hasUrl());
}
});
url.setAppTerminalType(request == null ? null : request.getAppTerminalType());
new SessionUrlSelector(request).selectFrom(urlConfig).ifPresent(session -> {
url.setUrl(session.getUrl().getUrl());
if (session.getUrl() instanceof WebUrl)
url.setWebOpenStrategy(((WebUrl) session.getUrl()).getOpenStrategy());
});
return url;
}
}

View File

@ -5,6 +5,7 @@ import cn.axzo.msg.center.dal.SampleTodos;
import cn.axzo.msg.center.dal.TodoBusinessDao;
import cn.axzo.msg.center.dal.TodoBusinesses;
import cn.axzo.msg.center.dal.TodoDao;
import cn.axzo.msg.center.domain.entity.MessageEntity;
import cn.axzo.msg.center.domain.entity.PendingRecordAdapter;
import cn.axzo.msg.center.domain.entity.Todo;
import cn.axzo.msg.center.domain.entity.TodoBusiness;
@ -12,8 +13,14 @@ 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.impl.v3.ModelV3Parser;
import cn.axzo.msg.center.message.service.impl.v3.ModelV3Service;
import cn.axzo.msg.center.message.service.impl.v3.TodoUrlParser;
import cn.axzo.msg.center.message.service.impl.v3.UrlParser;
import cn.axzo.msg.center.message.service.todo.manage.TodoExt;
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.dto.IdentityDTO;
import cn.axzo.msg.center.service.enums.BizCategoryEnum;
import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
@ -23,8 +30,13 @@ import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
import cn.axzo.msg.center.service.pending.response.PendingMessageSimpleDTO;
import cn.axzo.msg.center.service.pending.response.v3.ParsedModel3Visitor;
import cn.axzo.msg.center.service.pending.response.v3.ParsedModelV3Walker;
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.ParsedGroupDetail;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupV3;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedModelV3;
import cn.axzo.msg.center.service.pending.response.v3.model.SessionUrlInfo;
import cn.axzo.msg.center.service.pending.response.v3.model.SessionUrlSelector;
import cn.axzo.msg.center.service.template.response.MessageDetailStyle;
import cn.axzo.msg.center.utils.JSONObjectUtil;
import cn.hutool.core.date.DateUtil;
@ -245,7 +257,7 @@ class TodoRespBuilder {
response.setDeadlineTimestamp(adapter.getDeadline() == null ? null : adapter.getDeadline().getTime());
if (templateModel != null) {
ParsedModelV3 parsedModel = modelV3Parser.parseModelForTodo(templateModel, adapter,
ParsedModelV3 parsedModel = parseModel(templateModel, adapter,
adapter.getBizExtParamObj(), authParam, routerParam, request);
Runnable modelV3Builder = () -> {
@ -256,7 +268,7 @@ class TodoRespBuilder {
@Override
public void visitTemplateCardUrlConfig(UrlConfig urlConfig) {
ParsedCardUrl cardUrl = new ParsedCardUrl();
cardUrl.setUrl(modelV3Parser.parseSessionUrlInfo(urlConfig, request));
cardUrl.setUrl(parseSessionUrlInfo(urlConfig, request));
response.setCardUrl(cardUrl);
}
});
@ -277,4 +289,68 @@ class TodoRespBuilder {
return response;
}
public ParsedModelV3 parseModel(TemplateModelV3 templateModel,
MessageEntity entity,
JSONObject bizParam,
JSONObject routerParam,
JSONObject appendRouterParam,
ClientRequest request) {
UrlParser urlParser = new TodoUrlParser(cfg, entity, routerParam, appendRouterParam);
ParsedModelV3 parsedModel = modelV3Parser.parseModel(templateModel, bizParam, urlParser);
ParsedModelV3Walker.walkDown(parsedModel, new ParsedModel3Visitor() {
@Override
public void visitTemplateCardUrlConfig(UrlConfig urlConfig) {
if (!urlConfig.hasUrl()) return;
parsedModel.getTemplate().getOrCreateCardUrl().setUrl(parseSessionUrlInfo(urlConfig));
}
@Override
public void visitGroupDetailUrlConfig(ParsedGroupV3 group, UrlConfig urlConfig) {
if (!urlConfig.hasUrl()) return;
ParsedGroupDetail parsedDetail = group.getGroupInfo().getParsedDetail();
if (parsedDetail != null)
parsedDetail.setUrl(parseSessionUrlInfo(urlConfig));
}
@Override
public void visitButtonUrlConfig(ParsedButtonV3 button, UrlConfig urlConfig) {
button.setUrl(parseSessionUrlInfo(urlConfig));
}
private SessionUrlInfo parseSessionUrlInfo(UrlConfig urlConfig) {
return TodoRespBuilder.this.parseSessionUrlInfo(urlConfig, request);
}
});
return parsedModel;
}
public SessionUrlInfo parseSessionUrlInfo(UrlConfig urlConfig,
@Nullable ClientRequest request) {
SessionUrlInfo url = new SessionUrlInfo();
UrlConfigWalker.walkDown(urlConfig, new UrlConfigVisitor() {
@Override
public void visitPcCms(WebUrl pcCms) {
url.setHasCmsUrl(pcCms.hasUrl());
}
@Override
public void visitAppManagerIos(AppUrl ios) {
url.setHasManagerAppUrl(ios.hasUrl());
}
@Override
public void visitAppManagerAndroid(AppUrl android) {
url.setHasManagerAppUrl(android.hasUrl());
}
});
url.setAppTerminalType(request == null ? null : request.getAppTerminalType());
new SessionUrlSelector(request).selectFrom(urlConfig).ifPresent(session -> {
url.setUrl(session.getUrl().getUrl());
if (session.getUrl() instanceof WebUrl)
url.setWebOpenStrategy(((WebUrl) session.getUrl()).getOpenStrategy());
});
return url;
}
}

View File

@ -10,8 +10,8 @@ import cn.axzo.msg.center.domain.entity.MessageEntity;
import cn.axzo.msg.center.domain.entity.MessageTemplateV3;
import cn.axzo.msg.center.domain.entity.Todo;
import cn.axzo.msg.center.inside.notices.service.impl.v3.msg.TerminalAppMapping;
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.impl.v3.UrlParser;
import cn.axzo.msg.center.nimpush.NimPushService;
import cn.axzo.msg.center.nimpush.PushChannel;
import cn.axzo.msg.center.nimpush.PushExecutorConfig;
@ -61,8 +61,9 @@ public class TodoPushSenderNim implements ApplicationListener<NewTodoEvent> {
List<PushTerminalEnum> pushTerminals = template.determinePushTerminals();
List<AppTypeEnum> appTypes = terminalAppMapping.toImTypes(pushTerminals);
if (CollectionUtils.isEmpty(appTypes)) return;
ParsedModelV3 parsedModelV3 = parseModelForTodoPush(
event.getTemplateModel(), event.getTodos().get(0));
MessageEntity entity = event.getTodos().get(0);
ParsedModelV3 parsedModelV3 = modelV3Parser.parseModel(
event.getTemplateModel(), entity.bizParam(), new UrlParser(entity.routerParam()));
PushData pushData = parsedModelV3.getPushData();
if (pushData != null && !pushData.determinePushable(log, parsedModelV3.getTemplateCode())) {
return;
@ -101,10 +102,4 @@ public class TodoPushSenderNim implements ApplicationListener<NewTodoEvent> {
}
}
public ParsedModelV3 parseModelForTodoPush(
TemplateModelV3 templateModel, MessageEntity entity) {
return modelV3Parser.parseModelForTodo(templateModel, entity,
entity.bizParam(), entity.routerParam(),
null, null);
}
}