feat(REQ-1507): 消息路由数据模型的重构

背景:
  https://jira.axzo.cn/browse/REQ-1507?goToView=1

修改:

1、消息路由数据模型的重构

影响:
  无
This commit is contained in:
luofu 2023-11-08 16:11:00 +08:00
parent 8c9909994a
commit 5a0e6eb3ed
2 changed files with 46 additions and 41 deletions

View File

@ -40,15 +40,15 @@ public class MessageTemplateRouterDTO implements Serializable {
/**
* 业务详情路由
*/
private MessageDetailRouterDTO detailRouter;
private MessageRouteDetailDTO routeDetail;
/**
* 按钮路由列表
*/
private List<MessageButtonRouterDTO> btnRouters;
private List<MessageRouteButtonDTO> routeButtons;
public boolean isValid() {
return Objects.nonNull(detailRouter)
|| CollectionUtils.isNotEmpty(btnRouters);
return Objects.nonNull(routeDetail)
|| CollectionUtils.isNotEmpty(routeButtons);
}
public boolean isInValid() {
@ -56,11 +56,11 @@ public class MessageTemplateRouterDTO implements Serializable {
}
public Optional<String> fetchTemplateCode() {
if (Objects.nonNull(detailRouter)) {
return Optional.ofNullable(detailRouter.getTemplateCode());
if (Objects.nonNull(routeDetail)) {
return Optional.ofNullable(routeDetail.getTemplateCode());
}
if (CollectionUtils.isNotEmpty(btnRouters)) {
return Optional.ofNullable(btnRouters.get(0).getTemplateCode());
if (CollectionUtils.isNotEmpty(routeButtons)) {
return Optional.ofNullable(routeButtons.get(0).getTemplateCode());
}
return Optional.empty();
}
@ -74,7 +74,7 @@ public class MessageTemplateRouterDTO implements Serializable {
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class MessageDetailRouterDTO implements Serializable {
public static class MessageRouteDetailDTO implements Serializable {
private static final long serialVersionUID = -6332526731908737802L;
@ -95,12 +95,12 @@ public class MessageTemplateRouterDTO implements Serializable {
*/
private List<MessageRouterConfigDTO> routerConfigs;
public static MessageDetailRouterDTO from(MessageRouteDetail msgRouteDetail,
List<MessageRouterConfig> routerConfigs) {
public static MessageRouteDetailDTO from(MessageRouteDetail msgRouteDetail,
List<MessageRouterConfig> routerConfigs) {
AssertUtil.notNull(msgRouteDetail, "msgRouteDetail can not be null");
AssertUtil.notEmpty(routerConfigs, "routerConfigs can not be empty");
return MessageDetailRouterDTO.builder()
return MessageRouteDetailDTO.builder()
.name(msgRouteDetail.getName())
.templateCode(msgRouteDetail.getTemplateCode())
.showStrategy(msgRouteDetail.getShowStrategy())
@ -133,7 +133,7 @@ public class MessageTemplateRouterDTO implements Serializable {
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class MessageButtonRouterDTO implements Serializable {
public static class MessageRouteButtonDTO implements Serializable {
private static final long serialVersionUID = -7544674409859277745L;
@ -169,15 +169,19 @@ public class MessageTemplateRouterDTO implements Serializable {
* 按钮style配置
*/
private JSONObject style;
/**
* 按钮优先级数值越大优先级越低
*/
private Integer priority;
public static MessageButtonRouterDTO from(MessageRouteButton routeButton,
List<MessageRouterConfig> routerConfigs) {
public static MessageRouteButtonDTO from(MessageRouteButton routeButton,
List<MessageRouterConfig> routerConfigs) {
AssertUtil.notNull(routeButton, "msgRouteDetail can not be null");
AssertUtil.notEmpty(routerConfigs, "routerConfigs can not be empty");
List<MessageRouterConfigDTO> configs = CollectionUtils.isEmpty(routerConfigs) ? Collections.emptyList() :
routerConfigs.stream().map(MessageRouterConfigDTO::from).collect(Collectors.toList());
return MessageButtonRouterDTO.builder()
return MessageRouteButtonDTO.builder()
.name(routeButton.getName())
.btnCode(routeButton.getBtnCode())
.templateCode(routeButton.getTemplateCode())
@ -185,6 +189,7 @@ public class MessageTemplateRouterDTO implements Serializable {
.category(routeButton.getCategory())
.apiUrl(routeButton.getApiUrl())
.style(routeButton.getStyle())
.priority(routeButton.getPriority())
.routerConfigs(configs)
.build();
}

View File

@ -8,8 +8,8 @@ import cn.axzo.msg.center.domain.entity.MessageRouteButton;
import cn.axzo.msg.center.domain.entity.MessageRouteDetail;
import cn.axzo.msg.center.domain.entity.MessageRouterConfig;
import cn.axzo.msg.center.message.domain.dto.MessageTemplateRouterDTO;
import cn.axzo.msg.center.message.domain.dto.MessageTemplateRouterDTO.MessageButtonRouterDTO;
import cn.axzo.msg.center.message.domain.dto.MessageTemplateRouterDTO.MessageDetailRouterDTO;
import cn.axzo.msg.center.message.domain.dto.MessageTemplateRouterDTO.MessageRouteButtonDTO;
import cn.axzo.msg.center.message.domain.dto.MessageTemplateRouterDTO.MessageRouteDetailDTO;
import cn.axzo.msg.center.message.service.MessageTemplateRouterService;
import cn.axzo.msg.center.service.enums.RouterButtonSourceEnum;
import cn.axzo.msg.center.service.enums.RouterCategoryEnum;
@ -58,8 +58,8 @@ public class MessageTemplateRouterServiceImpl implements MessageTemplateRouterSe
log.info("templateCode is blank.");
}
MessageTemplateRouterDTO router = MessageTemplateRouterDTO.builder()
.detailRouter(queryDetailRouter(templateCode))
.btnRouters(listButtonRouters(templateCode))
.routeDetail(queryDetailRouter(templateCode))
.routeButtons(listButtonRouters(templateCode))
.build();
return router.isValid() ? Optional.of(router) : Optional.empty();
}
@ -75,8 +75,8 @@ public class MessageTemplateRouterServiceImpl implements MessageTemplateRouterSe
// 更新的逻辑为删除旧的重新创建
remove(router.fetchTemplateCode().orElse(null));
}
saveDetailRouter(router.getDetailRouter());
batchSaveButtonRouter(router.getBtnRouters());
saveDetailRouter(router.getRouteDetail());
batchSaveButtonRouter(router.getRouteButtons());
}
@Override
@ -86,41 +86,41 @@ public class MessageTemplateRouterServiceImpl implements MessageTemplateRouterSe
return Collections.emptyMap();
}
Set<String> distinctTemplateCodes = Sets.newHashSet(templateCodes);
Map<String, MessageDetailRouterDTO> detailRouters = listDetailRoutersGroupingByTemplateCode(distinctTemplateCodes);
Map<String, List<MessageButtonRouterDTO>> buttonRouters = listButtonRoutersGroupingByTemplateCode(distinctTemplateCodes);
Map<String, MessageRouteDetailDTO> detailRouters = listDetailRoutersGroupingByTemplateCode(distinctTemplateCodes);
Map<String, List<MessageRouteButtonDTO>> buttonRouters = listButtonRoutersGroupingByTemplateCode(distinctTemplateCodes);
return distinctTemplateCodes.stream()
.filter(e -> detailRouters.containsKey(e) || buttonRouters.containsKey(e))
.collect(Collectors.toMap(Function.identity(), e -> MessageTemplateRouterDTO.builder()
.detailRouter(detailRouters.get(e))
.btnRouters(buttonRouters.get(e))
.routeDetail(detailRouters.get(e))
.routeButtons(buttonRouters.get(e))
.build())
);
}
private MessageDetailRouterDTO queryDetailRouter(String templateCode) {
private MessageRouteDetailDTO queryDetailRouter(String templateCode) {
MessageRouteDetail msgRouteDetail = selectRouteDetail(templateCode);
if (Objects.isNull(msgRouteDetail)) {
return null;
}
List<MessageRouterConfig> routerConfigs = listByRouterCode(msgRouteDetail.getTemplateCode());
return MessageDetailRouterDTO.from(msgRouteDetail, routerConfigs);
return MessageRouteDetailDTO.from(msgRouteDetail, routerConfigs);
}
private Map<String, MessageDetailRouterDTO> listDetailRoutersGroupingByTemplateCode(Collection<String> templateCodes) {
private Map<String, MessageRouteDetailDTO> listDetailRoutersGroupingByTemplateCode(Collection<String> templateCodes) {
Map<String, MessageRouteDetail> routeDetails = listRouteDetailsGroupingByTemplateCode(templateCodes);
if (MapUtil.isEmpty(routeDetails)) {
log.info("there is not any route detail. templateCodes:{}", templateCodes);
return Collections.emptyMap();
}
Map<String, List<MessageRouterConfig>> routerConfigs = groupingByRouterCode(templateCodes);
Map<String, MessageDetailRouterDTO> result = Maps.newHashMap();
Map<String, MessageRouteDetailDTO> result = Maps.newHashMap();
routeDetails.entrySet().stream()
.filter(e -> routerConfigs.containsKey(e.getKey()))
.forEach(e -> result.put(e.getKey(), MessageDetailRouterDTO.from(e.getValue(), routerConfigs.get(e.getKey()))));
.forEach(e -> result.put(e.getKey(), MessageRouteDetailDTO.from(e.getValue(), routerConfigs.get(e.getKey()))));
return result;
}
private List<MessageButtonRouterDTO> listButtonRouters(String templateCode) {
private List<MessageRouteButtonDTO> listButtonRouters(String templateCode) {
List<MessageRouteButton> routeButtons = messageRouteButtonDao.lambdaQuery()
.eq(MessageRouteButton::getTemplateCode, templateCode)
.list();
@ -131,11 +131,11 @@ public class MessageTemplateRouterServiceImpl implements MessageTemplateRouterSe
List<String> btnCodes = routeButtons.stream().map(MessageRouteButton::getBtnCode).collect(Collectors.toList());
Map<String, List<MessageRouterConfig>> btnRouterConfigs = groupingByRouterCode(btnCodes);
return routeButtons.stream()
.map(e -> MessageButtonRouterDTO.from(e, btnRouterConfigs.get(e.getBtnCode())))
.map(e -> MessageRouteButtonDTO.from(e, btnRouterConfigs.get(e.getBtnCode())))
.collect(Collectors.toList());
}
private Map<String, List<MessageButtonRouterDTO>> listButtonRoutersGroupingByTemplateCode(
private Map<String, List<MessageRouteButtonDTO>> listButtonRoutersGroupingByTemplateCode(
Collection<String> templateCodes) {
List<MessageRouteButton> routeButtons = messageRouteButtonDao.lambdaQuery()
.in(MessageRouteButton::getTemplateCode, templateCodes)
@ -147,8 +147,8 @@ public class MessageTemplateRouterServiceImpl implements MessageTemplateRouterSe
Set<String> btnCodes = routeButtons.stream().map(MessageRouteButton::getBtnCode).collect(Collectors.toSet());
Map<String, List<MessageRouterConfig>> btnRouterConfigs = groupingByRouterCode(btnCodes);
return routeButtons.stream()
.map(e -> MessageButtonRouterDTO.from(e, btnRouterConfigs.get(e.getBtnCode())))
.collect(Collectors.groupingBy(MessageButtonRouterDTO::getTemplateCode));
.map(e -> MessageRouteButtonDTO.from(e, btnRouterConfigs.get(e.getBtnCode())))
.collect(Collectors.groupingBy(MessageRouteButtonDTO::getTemplateCode));
}
private MessageRouteDetail selectRouteDetail(String templateCode) {
@ -208,7 +208,7 @@ public class MessageTemplateRouterServiceImpl implements MessageTemplateRouterSe
.collect(Collectors.groupingBy(MessageRouterConfig::getRouterCode));
}
private void saveDetailRouter(MessageDetailRouterDTO detailRouter) {
private void saveDetailRouter(MessageRouteDetailDTO detailRouter) {
if (Objects.isNull(detailRouter)) {
log.info("detailRouter is null.");
return;
@ -217,13 +217,13 @@ public class MessageTemplateRouterServiceImpl implements MessageTemplateRouterSe
messageRouterConfigDao.saveBatch(detailRouter.fetchMessageRouterConfigs());
}
private void batchSaveButtonRouter(List<MessageButtonRouterDTO> buttonRouters) {
private void batchSaveButtonRouter(List<MessageRouteButtonDTO> buttonRouters) {
if (CollectionUtils.isEmpty(buttonRouters)) {
log.info("buttonRouters is empty.");
return;
}
List<MessageRouteButtonWrapper> routeButtonWrappers = buttonRouters.stream()
.filter(MessageButtonRouterDTO::isValid)
.filter(MessageRouteButtonDTO::isValid)
.map(e -> MessageRouteButtonWrapper.of(e.fetchMessageRouteButton(), e))
.collect(Collectors.toList());
// 生成自定义按钮的唯一标识和顺序
@ -296,9 +296,9 @@ public class MessageTemplateRouterServiceImpl implements MessageTemplateRouterSe
@AllArgsConstructor
private static class MessageRouteButtonWrapper {
private MessageRouteButton routeButton;
private MessageButtonRouterDTO buttonRouter;
private MessageRouteButtonDTO buttonRouter;
static MessageRouteButtonWrapper of(MessageRouteButton routeButton, MessageButtonRouterDTO buttonRouter) {
static MessageRouteButtonWrapper of(MessageRouteButton routeButton, MessageRouteButtonDTO buttonRouter) {
return new MessageRouteButtonWrapper(routeButton, buttonRouter);
}
}