REQ-3045: 减少响应大小

This commit is contained in:
yanglin 2024-10-23 19:18:38 +08:00
parent acffc921cf
commit 3af80289da
12 changed files with 65 additions and 56 deletions

View File

@ -14,7 +14,7 @@ import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
import cn.axzo.msg.center.service.enums.PendingMessageStateEnum;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
import cn.axzo.msg.center.service.enums.TodoType;
import cn.axzo.msg.center.service.pending.TerminalProvider;
import cn.axzo.msg.center.service.pending.ClientRequest;
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedModelV3;
import cn.axzo.msg.center.service.template.response.MessageDetailStyle;
@ -285,7 +285,7 @@ public class PendingMessageDTO implements Serializable {
return null;
}
public PendingMessageResponse toResponse(TerminalProvider terminalProvider) {
public PendingMessageResponse toResponse(ClientRequest request) {
boolean isCreatedToday = false;
if (createTime != null) {
Date createAt = DateFormatUtil.toDate(createTime);

View File

@ -13,7 +13,7 @@ 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.TerminalProvider;
import cn.axzo.msg.center.service.pending.ClientRequest;
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;
@ -68,7 +68,7 @@ public class ModelV3Parser {
JSONObject bizParam,
JSONObject routerParam,
JSONObject appendRouterParam,
@Nullable TerminalProvider terminalProvider) {
@Nullable ClientRequest request) {
ParsedModelV3 parsedModel = new ParsedModelV3();
parsedModel.setTemplate(BeanMapper.copyBean(templateModel.getTemplate(), ParsedTemplateV3.class));
parsedModel.setGroups(copyGroups(templateModel.getGroups()));
@ -151,7 +151,7 @@ public class ModelV3Parser {
}
private SessionUrlInfo parseSessionUrlInfo(UrlConfig urlConfig) {
return ModelV3Parser.this.parseSessionUrlInfo(urlConfig, terminalProvider);
return ModelV3Parser.this.parseSessionUrlInfo(urlConfig, request);
}
});
@ -159,7 +159,7 @@ public class ModelV3Parser {
}
public SessionUrlInfo parseSessionUrlInfo(UrlConfig urlConfig,
@Nullable TerminalProvider terminalProvider) {
@Nullable ClientRequest request) {
SessionUrlInfo url = new SessionUrlInfo();
UrlConfigWalker.walkDown(urlConfig, new UrlConfigVisitor() {
@Override
@ -178,8 +178,8 @@ public class ModelV3Parser {
}
});
url.setAppTerminalType(terminalProvider == null ? null : terminalProvider.getAppTerminalType());
new SessionUrlSelector(terminalProvider).selectFrom(urlConfig).ifPresent(session -> {
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());

View File

@ -17,10 +17,11 @@ import cn.axzo.msg.center.service.domain.UrlConfig;
import cn.axzo.msg.center.service.dto.IdentityDTO;
import cn.axzo.msg.center.service.enums.BizCategoryEnum;
import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
import cn.axzo.msg.center.service.pending.TerminalProvider;
import cn.axzo.msg.center.service.pending.ClientRequest;
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.ModelV2PropsPopulator;
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.ParsedCardUrl;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedModelV3;
@ -65,14 +66,14 @@ class TodoRespBuilder {
// batch convert to old model to reuse the code and save some time
PendingMessageResponse toResponse(PendingRecordAdapter adapter,
TerminalProvider terminalProvider) {
ClientRequest request) {
List<PendingMessageResponse> responses = toResponse(
Collections.singletonList(adapter), terminalProvider);
Collections.singletonList(adapter), request);
return responses.get(0);
}
List<PendingMessageResponse> toResponse(List<PendingRecordAdapter> adapters,
TerminalProvider terminalProvider) {
ClientRequest request) {
List<String> templateCodes = adapters.stream()
.map(PendingRecordAdapter::getTemplateCode)
.filter(Objects::nonNull)
@ -81,21 +82,21 @@ class TodoRespBuilder {
// 重新查询模版的收益大于成本
List<TemplateModelV3> templateModels = modelV3Service.getByCodes(templateCodes);
return adapters.stream()
.map(adapter -> toResponse(adapter, templateModels, terminalProvider))
.map(adapter -> toResponse(adapter, templateModels, request))
.collect(toList());
}
// convert to old model to reuse the code and save some time
PendingMessageResponse toResponse(Todo todo,
TerminalProvider terminalProvider) {
ClientRequest request) {
TodoBusiness business = todoBusinessDao.getById(todo.getTodoBusinessId());
return toResponse(business, todo, terminalProvider);
return toResponse(business, todo, request);
}
PendingMessageResponse toResponse(TodoBusiness business,
Todo todo,
TerminalProvider terminalProvider) {
ClientRequest request) {
TodoRecordAdapter adapter = TodoRecordAdapter.adaptTodo(business, todo);
ArrayList<String> templateCodes = new ArrayList<>(2);
if (business != null)
@ -103,7 +104,7 @@ class TodoRespBuilder {
if (todo != null)
templateCodes.add(todo.getTemplateCode());
List<TemplateModelV3> templateModels = modelV3Service.getByCodes(templateCodes);
return toResponse(adapter, templateModels, terminalProvider);
return toResponse(adapter, templateModels, request);
}
// !! build adapters
@ -159,7 +160,7 @@ class TodoRespBuilder {
private PendingMessageResponse toResponse(PendingRecordAdapter adapter,
List<TemplateModelV3> templateModels,
TerminalProvider terminalProvider) {
ClientRequest request) {
PendingMessageResponse response = new PendingMessageResponse();
// 发起人单位项目信息
@ -215,20 +216,23 @@ class TodoRespBuilder {
}
if (templateModel != null) {
ParsedModelV3 parsedModel = modelV3Parser.parseModel(templateModel, adapter,
adapter.getBizExtParamObj(), authParam, routerParam, terminalProvider);
adapter.getBizExtParamObj(), authParam, routerParam, request);
if (request.getModelVersion() == null) {
ParsedModel3Walker.walkDown(parsedModel, new ModelV2PropsPopulator(response, request));
} else if (request.getModelVersion().equals(ClientRequest.CURRENT_VERSION)) {
response.setModelV3(parsedModel);
response.setDisplayOnCardKeyValues(parsedModel.determineDisplayOnCardKeyValues());
response.setCardUrlOpenStrategy(templateModel.getTemplate().getCardUrlOpenStrategy());
ParsedModel3Walker.walkDown(parsedModel, new ModelV2PropsPopulator(response, terminalProvider) {
ParsedModel3Walker.walkDown(parsedModel, new ParsedModel3Visitor() {
@Override
public void visitTemplateCardUrlConfig(UrlConfig urlConfig) {
super.visitTemplateCardUrlConfig(urlConfig);
ParsedCardUrl cardUrl = new ParsedCardUrl();
cardUrl.setUrl(modelV3Parser.parseSessionUrlInfo(urlConfig, terminalProvider));
cardUrl.setUrl(modelV3Parser.parseSessionUrlInfo(urlConfig, request));
response.setCardUrl(cardUrl);
}
});
}
}
response.setIdentityCode(adapter.getIdentityCode());
response.setTemplateCode(adapter.getTemplateCode());

View File

@ -6,10 +6,16 @@ import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
/**
* @author yanglin
*/
public interface TerminalProvider {
public interface ClientRequest {
Integer CURRENT_VERSION = 3;
TerminalTypeEnum getTerminalType();
AppTerminalTypeEnum getAppTerminalType();
default Integer getModelVersion() {
return CURRENT_VERSION;
}
}

View File

@ -2,7 +2,7 @@ package cn.axzo.msg.center.service.pending.request;
import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
import cn.axzo.msg.center.service.pending.TerminalProvider;
import cn.axzo.msg.center.service.pending.ClientRequest;
import lombok.Getter;
import lombok.Setter;
@ -14,7 +14,7 @@ import java.util.Set;
*/
@Setter
@Getter
public class GetPendingTodosRequest implements TerminalProvider {
public class GetPendingTodosRequest implements ClientRequest {
/**
* 待办执行人id
*/

View File

@ -3,7 +3,7 @@ package cn.axzo.msg.center.service.pending.request;
import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
import cn.axzo.msg.center.service.enums.TodoQueryType;
import cn.axzo.msg.center.service.pending.TerminalProvider;
import cn.axzo.msg.center.service.pending.ClientRequest;
import lombok.Getter;
import lombok.Setter;
@ -12,7 +12,7 @@ import lombok.Setter;
*/
@Setter
@Getter
public class PendingMessageDetailRequestV3 implements TerminalProvider {
public class PendingMessageDetailRequestV3 implements ClientRequest {
private String msgIdentityCode;
private TerminalTypeEnum terminalType;
private AppTerminalTypeEnum appTerminalType;

View File

@ -1,10 +1,9 @@
package cn.axzo.msg.center.service.pending.request;
import cn.axzo.basics.common.page.PageRequest;
import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
import cn.axzo.msg.center.service.enums.IdentityTypeEnum;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
import cn.axzo.msg.center.service.pending.TerminalProvider;
import cn.axzo.msg.center.service.pending.ClientRequest;
import com.alibaba.fastjson.JSON;
import lombok.Getter;
import lombok.Setter;
@ -22,7 +21,7 @@ import java.util.Date;
*/
@Setter
@Getter
public class PendingMessageFixedTemplatePageRequest implements TerminalProvider, Serializable {
public class PendingMessageFixedTemplatePageRequest implements ClientRequest, Serializable {
private static final long serialVersionUID = 7172093131252325437L;
/**

View File

@ -11,7 +11,7 @@ import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
import cn.axzo.msg.center.service.enums.TodoQueryType;
import cn.axzo.msg.center.service.enums.TodoType;
import cn.axzo.msg.center.service.enums.YesOrNo;
import cn.axzo.msg.center.service.pending.TerminalProvider;
import cn.axzo.msg.center.service.pending.ClientRequest;
import com.alibaba.fastjson.JSON;
import lombok.Data;
import lombok.Getter;
@ -33,7 +33,7 @@ import java.util.Collections;
*/
@Setter
@Getter
public class PendingMessagePageRequest extends PageRequest implements TerminalProvider, Serializable {
public class PendingMessagePageRequest extends PageRequest implements ClientRequest, Serializable {
private static final long serialVersionUID = 7172093131252325437L;

View File

@ -5,7 +5,7 @@ import cn.axzo.msg.center.service.enums.BizFinalStateEnum;
import cn.axzo.msg.center.service.enums.PendingMessageStateEnum;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
import cn.axzo.msg.center.service.enums.TodoQueryType;
import cn.axzo.msg.center.service.pending.TerminalProvider;
import cn.axzo.msg.center.service.pending.ClientRequest;
import com.alibaba.fastjson.JSON;
import lombok.Getter;
import lombok.Setter;
@ -22,7 +22,7 @@ import java.io.Serializable;
*/
@Setter
@Getter
public class PendingMessageQueryRequest implements TerminalProvider, Serializable {
public class PendingMessageQueryRequest implements ClientRequest, Serializable {
private static final long serialVersionUID = 3981382821433771344L;

View File

@ -2,7 +2,7 @@ package cn.axzo.msg.center.service.pending.request;
import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
import cn.axzo.msg.center.service.pending.TerminalProvider;
import cn.axzo.msg.center.service.pending.ClientRequest;
import com.alibaba.fastjson.JSON;
import lombok.Getter;
import lombok.Setter;
@ -19,7 +19,7 @@ import java.util.Collection;
*/
@Setter
@Getter
public class PendingMessageStatisticForWorkerRequest implements TerminalProvider, Serializable {
public class PendingMessageStatisticForWorkerRequest implements ClientRequest, Serializable {
private static final long serialVersionUID = 9160942889637654608L;

View File

@ -8,7 +8,7 @@ import cn.axzo.msg.center.service.enums.BizDetailJumpStrategyEnum;
import cn.axzo.msg.center.service.enums.BizDetailShowStrategyEnum;
import cn.axzo.msg.center.service.enums.KVContentType;
import cn.axzo.msg.center.service.enums.RouterCategoryEnum;
import cn.axzo.msg.center.service.pending.TerminalProvider;
import cn.axzo.msg.center.service.pending.ClientRequest;
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedButtonV3;
import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupV3;
@ -28,11 +28,11 @@ public class ModelV2PropsPopulator implements ParsedModel3Visitor {
@Nullable private final SessionUrlSelector sessionUrlSelector;
public ModelV2PropsPopulator(PendingMessageResponse response,
TerminalProvider terminalProvider) {
ClientRequest request) {
this.response = response;
this.sessionUrlSelector = terminalProvider == null
this.sessionUrlSelector = request == null
? null
: new SessionUrlSelector(terminalProvider);
: new SessionUrlSelector(request);
}
@Override

View File

@ -6,7 +6,7 @@ import cn.axzo.msg.center.service.domain.parse.SessionUrl;
import cn.axzo.msg.center.service.domain.url.WebUrl;
import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
import cn.axzo.msg.center.service.pending.TerminalProvider;
import cn.axzo.msg.center.service.pending.ClientRequest;
import lombok.RequiredArgsConstructor;
import javax.annotation.Nullable;
@ -24,7 +24,7 @@ import static cn.axzo.msg.center.service.enums.AppTerminalTypeEnum.PC_GA_GENERAL
@RequiredArgsConstructor
public class SessionUrlSelector {
@Nullable private final TerminalProvider terminalProvider;
@Nullable private final ClientRequest request;
/**
* 根据请求客户端真实的终端类型来选择对应的URL
@ -50,9 +50,9 @@ public class SessionUrlSelector {
private SessionUrl selectWeb(
AppTerminalTypeEnum selectAppType, WebUrl webUrl) {
if (terminalProvider == null)
if (request == null)
return null;
if (terminalProvider.getAppTerminalType() != selectAppType)
if (request.getAppTerminalType() != selectAppType)
return null;
if (webUrl == null)
return null;
@ -61,13 +61,13 @@ public class SessionUrlSelector {
private SessionUrl selectApp(
AppTerminalTypeEnum selectAppType, MobileUrlConfig mobileUrl) {
if (terminalProvider == null)
if (request == null)
return null;
if (terminalProvider.getAppTerminalType() != selectAppType)
if (request.getAppTerminalType() != selectAppType)
return null;
if (mobileUrl == null)
return null;
TerminalTypeEnum terminalType = terminalProvider.getTerminalType();
TerminalTypeEnum terminalType = request.getTerminalType();
if (mobileUrl.getIos() != null && terminalType == TerminalTypeEnum.IOS)
return new SessionUrl(TerminalTypeEnum.IOS, mobileUrl.getIos());
if (mobileUrl.getAndroid() != null && terminalType == TerminalTypeEnum.ANDROID)