REQ-3046: 兼容老逻辑
This commit is contained in:
parent
d5a78772d4
commit
bd5d2e1c68
@ -8,10 +8,12 @@ import cn.axzo.msg.center.message.domain.vo.GeneralMessagePushVO.CardExtensionIt
|
||||
import cn.axzo.msg.center.message.domain.vo.GeneralMessagePushVO.Subtitle;
|
||||
import cn.axzo.msg.center.message.service.impl.v3.AppLink;
|
||||
import cn.axzo.msg.center.message.service.impl.v3.AppLinkUrlConfigVisitor;
|
||||
import cn.axzo.msg.center.message.service.impl.v3.ModelV3ExtPopulator;
|
||||
import cn.axzo.msg.center.message.service.impl.v3.ModelV3Parser;
|
||||
import cn.axzo.msg.center.service.domain.UrlConfig;
|
||||
import cn.axzo.msg.center.service.domain.UrlConfigWalker;
|
||||
import cn.axzo.msg.center.service.enums.ButtonStyleEnum;
|
||||
import cn.axzo.msg.center.service.enums.KVContentType;
|
||||
import cn.axzo.msg.center.service.enums.RouterCategoryEnum;
|
||||
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
|
||||
import cn.axzo.msg.center.service.pending.response.v3.ParsedModel3Visitor;
|
||||
@ -20,6 +22,7 @@ import cn.axzo.msg.center.service.pending.response.v3.model.ParsedButtonV3;
|
||||
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.PersonInfo;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@ -35,6 +38,7 @@ import java.util.List;
|
||||
public class MessageTemplateParserV3 {
|
||||
|
||||
private final ModelV3Parser modelV3Parser;
|
||||
private final ModelV3ExtPopulator modelV3ExtPopulator;
|
||||
|
||||
GeneralMessagePushVO parse(MessageRecordV3 message, TemplateModelV3 templateModel) {
|
||||
String orgIcon = templateModel.getTemplate().getIcon();
|
||||
@ -73,7 +77,16 @@ public class MessageTemplateParserV3 {
|
||||
return;
|
||||
if (im.getCardExtension() == null)
|
||||
im.setCardExtension(new ArrayList<>());
|
||||
im.getCardExtension().add(new CardExtensionItem(kv.getKey(), kv.getValue()));
|
||||
CardExtensionItem item = new CardExtensionItem(kv.getKey(), kv.getValue());
|
||||
// IM人员: 张三(130****5556)
|
||||
if (kv.getContentType() == KVContentType.PERSON_ID) {
|
||||
modelV3ExtPopulator.populatePersonKV(kv);
|
||||
PersonInfo person = kv.getPersonInfo();
|
||||
if (person != null)
|
||||
item = new CardExtensionItem(kv.getKey(), String.format(
|
||||
"%s(%s)", person.getRealName(), person.getMobilePhoneCiphertext()));
|
||||
}
|
||||
im.getCardExtension().add(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -20,6 +20,7 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
@ -52,6 +53,10 @@ public class ModelV3ExtPopulator {
|
||||
populateComponentWorkGroup(componentWorkerGroups);
|
||||
}
|
||||
|
||||
public void populatePersonKV(ParsedKV keyValue) {
|
||||
populatePersonKV(Collections.singletonList(keyValue));
|
||||
}
|
||||
|
||||
private void populatePersonKV(List<ParsedKV> keyValues) {
|
||||
if (CollectionUtils.isEmpty(keyValues)) return;
|
||||
List<Long> personIds = keyValues.stream()
|
||||
|
||||
@ -101,7 +101,7 @@ public class TodoRangeQueryService {
|
||||
// 可执行的/抄送我的
|
||||
pageResult = pageQueryTodo(request, templateCodes);
|
||||
List<PendingMessageResponse> messages = todoRespBuilder
|
||||
.convertAdapter2MessageResponse(pageResult.getList(), request);
|
||||
.toResponse(pageResult.getList(), request);
|
||||
if (request.determineQueryTemplateTerminals())
|
||||
todoTerminalHelper.populateTemplateTerminals(messages);
|
||||
messages.forEach(message -> message.setQueryType(request.getQueryType()));
|
||||
@ -380,7 +380,7 @@ public class TodoRangeQueryService {
|
||||
.in(CollectionUtils.isNotEmpty(request.getTemplateCodes()), Todo::getTemplateCode, request.getTemplateCodes())
|
||||
.last("LIMIT " + request.determineLimit()));
|
||||
List<PendingRecordAdapter> message = todoRespBuilder.buildTodoAdapters(todos);
|
||||
return todoRespBuilder.convertAdapter2MessageResponse(message, request);
|
||||
return todoRespBuilder.toResponse(message, request);
|
||||
}
|
||||
|
||||
@RequiredArgsConstructor
|
||||
|
||||
@ -7,12 +7,26 @@ import cn.axzo.msg.center.dal.TodoDao;
|
||||
import cn.axzo.msg.center.domain.entity.PendingRecordAdapter;
|
||||
import cn.axzo.msg.center.domain.entity.Todo;
|
||||
import cn.axzo.msg.center.domain.entity.TodoBusiness;
|
||||
import cn.axzo.msg.center.message.domain.dto.PendingMessageDTO;
|
||||
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.PendingMessageNewServiceImpl;
|
||||
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.todo.manage.TodoExt;
|
||||
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.response.PendingMessageResponse;
|
||||
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.ParsedModelV3;
|
||||
import cn.axzo.msg.center.service.template.response.MessageDetailStyle;
|
||||
import cn.axzo.msg.center.utils.JSONObjectUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
@ -21,10 +35,14 @@ import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import static java.util.function.UnaryOperator.identity;
|
||||
import static java.util.stream.Collectors.toList;
|
||||
import static java.util.stream.Collectors.toMap;
|
||||
|
||||
/**
|
||||
* 尽量使用已有的逻辑
|
||||
@ -38,26 +56,21 @@ class TodoRespBuilder {
|
||||
|
||||
private final TodoBusinessDao todoBusinessDao;
|
||||
private final TodoDao todoDao;
|
||||
private final PendingMessageNewServiceImpl pendingMessageNewServiceImpl;
|
||||
private final ModelV3Service modelV3Service;
|
||||
private final PendingMessageBizConfig pendingMessageBizConfig;
|
||||
private final ModelV3Parser modelV3Parser;
|
||||
|
||||
// batch convert to old model to reuse the code and save some time
|
||||
|
||||
PendingMessageResponse convertAdapter2MessageResponse(
|
||||
PendingRecordAdapter adapter, TerminalProvider terminalProvider) {
|
||||
List<PendingMessageResponse> responses = convertAdapter2MessageResponse(
|
||||
PendingMessageResponse toResponse(PendingRecordAdapter adapter,
|
||||
TerminalProvider terminalProvider) {
|
||||
List<PendingMessageResponse> responses = toResponse(
|
||||
Collections.singletonList(adapter), terminalProvider);
|
||||
return responses.get(0);
|
||||
}
|
||||
|
||||
List<PendingMessageResponse> convertAdapter2MessageResponse(
|
||||
List<PendingRecordAdapter> adapters, TerminalProvider terminalProvider) {
|
||||
return convertAdapter2MessageDTO(adapters).stream()
|
||||
.map(i -> i.toResponse(terminalProvider))
|
||||
.collect(toList());
|
||||
}
|
||||
|
||||
List<PendingMessageDTO> convertAdapter2MessageDTO(List<PendingRecordAdapter> adapters) {
|
||||
List<PendingMessageResponse> toResponse(List<PendingRecordAdapter> adapters,
|
||||
TerminalProvider terminalProvider) {
|
||||
List<String> templateCodes = adapters.stream()
|
||||
.map(PendingRecordAdapter::getTemplateCode)
|
||||
.filter(Objects::nonNull)
|
||||
@ -66,18 +79,21 @@ class TodoRespBuilder {
|
||||
// 重新查询模版的收益大于成本
|
||||
List<TemplateModelV3> templateModels = modelV3Service.getByCodes(templateCodes);
|
||||
return adapters.stream()
|
||||
.map(adapter -> pendingMessageNewServiceImpl.convertV3(adapter, templateModels))
|
||||
.map(adapter -> toResponse(adapter, templateModels, terminalProvider))
|
||||
.collect(toList());
|
||||
}
|
||||
|
||||
// convert to old model to reuse the code and save some time
|
||||
|
||||
PendingMessageDTO convertTodoToMessage(Todo todo) {
|
||||
PendingMessageResponse toResponse(Todo todo,
|
||||
TerminalProvider terminalProvider) {
|
||||
TodoBusiness business = todoBusinessDao.getById(todo.getTodoBusinessId());
|
||||
return convertTodoToMessage(business, todo);
|
||||
return toResponse(business, todo, terminalProvider);
|
||||
}
|
||||
|
||||
PendingMessageDTO convertTodoToMessage(TodoBusiness business, Todo todo) {
|
||||
PendingMessageResponse toResponse(TodoBusiness business,
|
||||
Todo todo,
|
||||
TerminalProvider terminalProvider) {
|
||||
TodoRecordAdapter adapter = TodoRecordAdapter.adaptTodo(business, todo);
|
||||
ArrayList<String> templateCodes = new ArrayList<>(2);
|
||||
if (business != null)
|
||||
@ -85,7 +101,7 @@ class TodoRespBuilder {
|
||||
if (todo != null)
|
||||
templateCodes.add(todo.getTemplateCode());
|
||||
List<TemplateModelV3> templateModels = modelV3Service.getByCodes(templateCodes);
|
||||
return pendingMessageNewServiceImpl.convertV3(adapter, templateModels);
|
||||
return toResponse(adapter, templateModels, terminalProvider);
|
||||
}
|
||||
|
||||
// !! build adapters
|
||||
@ -131,4 +147,106 @@ class TodoRespBuilder {
|
||||
.collect(toList());
|
||||
}
|
||||
|
||||
private PendingMessageResponse toResponse(PendingRecordAdapter adapter,
|
||||
List<TemplateModelV3> templateModels,
|
||||
TerminalProvider terminalProvider) {
|
||||
PendingMessageResponse response = new PendingMessageResponse();
|
||||
|
||||
// 发起人单位、项目信息
|
||||
response.setPromoterOuId(adapter.getPromoterOuId());
|
||||
response.setPromoterWorkspaceId(adapter.getPromoterOrgId());
|
||||
response.setPromoterWorkspaceName(adapter.getPromoterOrgName());
|
||||
response.setPromoterWorkspaceType(adapter.getPromoterOrgType());
|
||||
// 接收者单位、项目信息
|
||||
response.setExecutorOuId(adapter.getOuId());
|
||||
response.setExecutorWorkspaceId(adapter.getOrgId());
|
||||
response.setExecutorWorkspaceName(adapter.getOrgName());
|
||||
response.setExecutorWorkspaceType(adapter.getExecutorOrgType());
|
||||
// 兼容页面老逻辑
|
||||
response.setWorkspaceId(adapter.getPromoterOrgId());
|
||||
// 只有项目才设置发起人项目部名称, 单位的话不返回, 因为会导致待办详情中显示重复的单位信息
|
||||
if (adapter.getPromoterOrgType() == OrganizationTypeEnum.PROJECT)
|
||||
response.setWorkspaceName(adapter.getPromoterOrgName());
|
||||
else
|
||||
response.setWorkspaceName("");
|
||||
// 其它信息
|
||||
response.setTodoType(adapter.getTodoType());
|
||||
response.setIsRead(adapter.isRead());
|
||||
response.setProposedButtons(adapter.getCustomButtons());
|
||||
response.setBizExtParamObj(adapter.getBizExtParamObj());
|
||||
response.setRouterExtParamObj(adapter.getRouterParamObj());
|
||||
|
||||
Map<String, TemplateModelV3> templateCode2Template = templateModels.stream()
|
||||
.collect(toMap(TemplateModelV3::getTemplateCode, identity()));
|
||||
TemplateModelV3 templateModel = templateCode2Template.get(adapter.getTemplateCode());
|
||||
if (templateModel != null)
|
||||
response.setTemplateCategory(templateModel.getTemplate().getMsgCategory());
|
||||
if (templateModel != null && templateModel.getTemplate().getDetailStyleCode() != null) {
|
||||
MessageDetailStyle detailStyle = pendingMessageBizConfig
|
||||
.findMessageDetailType(templateModel.getTemplate().getDetailStyleCode())
|
||||
.orElse(null);
|
||||
response.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);
|
||||
response.setModelV3(parsedModel);
|
||||
ParsedModel3Walker.walkDown(parsedModel, new ModelV2PropsPopulator(response, terminalProvider));
|
||||
response.setDisplayOnCardKeyValues(parsedModel.determineDisplayOnCardKeyValues());
|
||||
response.setCardUrlOpenStrategy(templateModel.getTemplate().getCardUrlOpenStrategy());
|
||||
ParsedModel3Walker.walkDown(parsedModel, new ParsedModel3Visitor() {
|
||||
@Override
|
||||
public void visitTemplateCardUrlConfig(UrlConfig urlConfig) {
|
||||
response.setCardUrl(urlConfig);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
response.setIdentityCode(adapter.getIdentityCode());
|
||||
response.setTemplateCode(adapter.getTemplateCode());
|
||||
response.setTitle(adapter.getTitle());
|
||||
response.setContent(adapter.getContent());
|
||||
response.setState(adapter.getState());
|
||||
response.setBizCode(adapter.getBizCode());
|
||||
response.setSubBizCode(adapter.getSubBizCode());
|
||||
response.setBizDesc(adapter.getBizDesc());
|
||||
response.setBizFlag(adapter.getBizFlag());
|
||||
response.setOuId(adapter.getOuId());
|
||||
response.setBizCategory(adapter.getBizCategory());
|
||||
response.setBizFinalState(adapter.getBizFinalState());
|
||||
if (adapter.getBizFinalState() != null)
|
||||
response.setBizFinalStateIcon(response.getBizFinalState().getIcon());
|
||||
|
||||
response.setIsCreatedToday(adapter.getCreateAt() != null
|
||||
&& DateUtil.isSameDay(adapter.getCreateAt(), new Date()));
|
||||
response.setPromoterPersonId(adapter.getPromoterPersonId());
|
||||
response.setPromoterName(adapter.getPromoterName());
|
||||
response.setPromoterIdentity(IdentityDTO.builder()
|
||||
.id(adapter.getPromoterId()).type(adapter.getPromoterType()).build());
|
||||
response.setExecutorPersonId(adapter.getExecutorPersonId());
|
||||
response.setExecutorName(adapter.getExecutorName());
|
||||
response.setExecutorIdentity(IdentityDTO.builder()
|
||||
.id(adapter.getExecutorId()).type(adapter.getExecutorType()).build());
|
||||
response.setCreateTimestamp(adapter.getCreateAt() == null ? null : adapter.getCreateAt().getTime());
|
||||
response.setUpdateTimestamp(adapter.getUpdateAt() == null ? null : adapter.getUpdateAt().getTime());
|
||||
response.setDeadlineTimestamp(adapter.getDeadline() == null ? null : adapter.getDeadline().getTime());
|
||||
return response;
|
||||
}
|
||||
|
||||
}
|
||||
@ -12,7 +12,6 @@ import cn.axzo.msg.center.inside.notices.config.PendingMessageBizConfig;
|
||||
import cn.axzo.msg.center.message.service.impl.v3.ModelV3ExtPopulator;
|
||||
import cn.axzo.msg.center.service.enums.TodoQueryType;
|
||||
import cn.axzo.msg.center.service.enums.TodoType;
|
||||
import cn.axzo.msg.center.service.pending.TerminalProvider;
|
||||
import cn.axzo.msg.center.service.pending.request.PendingMessageByBizCodeRequest;
|
||||
import cn.axzo.msg.center.service.pending.request.PendingMessageDetailRequestV3;
|
||||
import cn.axzo.msg.center.service.pending.request.PendingMessageQueryRequest;
|
||||
@ -64,9 +63,7 @@ public class TodoSimpleQueryService {
|
||||
.like(StringUtils.isNotBlank(req.getTitle()), TodoBusiness::getTitle, req.getTitle())
|
||||
.last("LIMIT 1")
|
||||
.one();
|
||||
PendingMessageResponse response = todoRespBuilder
|
||||
.convertTodoToMessage(business, todo)
|
||||
.toResponse(req);
|
||||
PendingMessageResponse response = todoRespBuilder.toResponse(business, todo, req);
|
||||
modelV3ExtPopulator.populate(response.getModelV3());
|
||||
return response;
|
||||
}
|
||||
@ -78,11 +75,9 @@ public class TodoSimpleQueryService {
|
||||
if (request.getQueryType() == TodoQueryType.SEND_BY_ME) {
|
||||
TodoBusiness business = todoBusinessDao.getById(todo.getTodoBusinessId());
|
||||
PendingRecordAdapter adapter = todoRespBuilder.buildBusinessAdapter(business);
|
||||
return todoRespBuilder.convertAdapter2MessageResponse(adapter, request);
|
||||
return todoRespBuilder.toResponse(adapter, request);
|
||||
}
|
||||
PendingMessageResponse response = todoRespBuilder
|
||||
.convertTodoToMessage(todo)
|
||||
.toResponse(request);
|
||||
PendingMessageResponse response = todoRespBuilder.toResponse(todo, request);
|
||||
modelV3ExtPopulator.populate(response.getModelV3());
|
||||
return response;
|
||||
}
|
||||
@ -92,11 +87,7 @@ public class TodoSimpleQueryService {
|
||||
Todo todo = todoDao
|
||||
.getLatestByBiz(templateCode, bizCode, subBizCode, todoType)
|
||||
.orElse(null);
|
||||
if (todo == null)
|
||||
return null;
|
||||
return todoRespBuilder
|
||||
.convertTodoToMessage(todo)
|
||||
.toResponse((TerminalProvider) null);
|
||||
return todo == null ? null : todoRespBuilder.toResponse(todo, null);
|
||||
}
|
||||
|
||||
public List<PendingMessageSimpleDTO> getLatestTodosByBiz(PendingMessageByBizCodeRequest param) {
|
||||
|
||||
@ -141,7 +141,7 @@ public class TodoWorkerQueryService {
|
||||
});
|
||||
}
|
||||
List<PendingRecordAdapter> adapters = todoRespBuilder.buildTodoAdapters(todos);
|
||||
return todoRespBuilder.convertAdapter2MessageResponse(adapters, request);
|
||||
return todoRespBuilder.toResponse(adapters, request);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user