From ec9e2823aada7b6958c047e0908716a90096f703 Mon Sep 17 00:00:00 2001 From: luofu Date: Tue, 17 Oct 2023 15:16:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-1465):=20=E6=B6=88=E6=81=AF=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E6=9B=B4=E6=96=B0=E6=8E=A5=E5=8F=A3=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 背景: https://jira.axzo.cn/browse/REQ-1465?goToView=1 修改: 1、消息模板更新接口实现 影响: 无 --- .../controller/MessageTemplateController.java | 12 ++-- ... => MessageTemplateSaveOrUpdateParam.java} | 26 ++++++- .../service/MessageTemplateGroupService.java | 15 +++++ .../service/MessageTemplateNewService.java | 21 +++++- .../service/MessageTemplateRouterService.java | 9 +++ .../impl/MessageTemplateGroupServiceImpl.java | 21 ++++++ .../impl/MessageTemplateNewServiceImpl.java | 67 +++++++++++++++++-- .../MessageTemplateRouterServiceImpl.java | 21 ++++++ .../request/MessageTemplateUpdateRequest.java | 10 +-- 9 files changed, 181 insertions(+), 21 deletions(-) rename inside-notices/src/main/java/cn/axzo/msg/center/message/domain/param/{MessageTemplateCreateParam.java => MessageTemplateSaveOrUpdateParam.java} (68%) diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageTemplateController.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageTemplateController.java index 8bccabcb..1e87ed82 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageTemplateController.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageTemplateController.java @@ -1,6 +1,6 @@ package cn.axzo.msg.center.message.controller; -import cn.axzo.msg.center.message.domain.param.MessageTemplateCreateParam; +import cn.axzo.msg.center.message.domain.param.MessageTemplateSaveOrUpdateParam; import cn.axzo.msg.center.message.service.MessageTemplateNewService; import cn.axzo.msg.center.service.template.client.MessageTemplateClient; import cn.axzo.msg.center.service.template.request.MessageTemplateCreateRequest; @@ -30,13 +30,13 @@ public class MessageTemplateController implements MessageTemplateClient { @Override public CommonResponse save(MessageTemplateCreateRequest request) { return CommonResponse.success( - messageTemplateNewService.createTemplate(MessageTemplateCreateParam.from(request))); + messageTemplateNewService.createTemplate(MessageTemplateSaveOrUpdateParam.from(request))); } @Override public CommonResponse update(MessageTemplateUpdateRequest request) { - // TODO:[cold_blade] [P0] update template - return null; + messageTemplateNewService.updateTemplate(MessageTemplateSaveOrUpdateParam.from(request)); + return CommonResponse.success(); } @Override @@ -51,7 +51,7 @@ public class MessageTemplateController implements MessageTemplateClient { @Override public CommonResponse updateStatus(MessageTemplateUpdateStatusRequest request) { - // TODO:[cold_blade] [P0] update template status - return null; + messageTemplateNewService.updateStatus(request.getOperatorId(), request.getTemplateCode(), request.getStatus()); + return CommonResponse.success(); } } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/domain/param/MessageTemplateCreateParam.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/domain/param/MessageTemplateSaveOrUpdateParam.java similarity index 68% rename from inside-notices/src/main/java/cn/axzo/msg/center/message/domain/param/MessageTemplateCreateParam.java rename to inside-notices/src/main/java/cn/axzo/msg/center/message/domain/param/MessageTemplateSaveOrUpdateParam.java index c516a122..c27944c1 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/domain/param/MessageTemplateCreateParam.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/domain/param/MessageTemplateSaveOrUpdateParam.java @@ -4,6 +4,7 @@ import cn.axzo.msg.center.service.dto.MessageRouterButtonDTO; import cn.axzo.msg.center.service.enums.MessageCategoryEnum; import cn.axzo.msg.center.service.enums.PushTerminalEnum; import cn.axzo.msg.center.service.template.request.MessageTemplateCreateRequest; +import cn.axzo.msg.center.service.template.request.MessageTemplateUpdateRequest; import cn.axzo.msg.center.utils.JSONObjectUtil; import com.alibaba.fastjson.JSON; import lombok.AllArgsConstructor; @@ -27,7 +28,7 @@ import java.util.List; @Builder @NoArgsConstructor @AllArgsConstructor -public class MessageTemplateCreateParam implements Serializable { +public class MessageTemplateSaveOrUpdateParam implements Serializable { private static final long serialVersionUID = 6657624182580261353L; @@ -35,6 +36,10 @@ public class MessageTemplateCreateParam implements Serializable { * 模板名称 */ private String templateName; + /** + * 模板编码 + */ + private String templateCode; /** * 消息分类树的叶结点的结点编码列表 */ @@ -76,8 +81,8 @@ public class MessageTemplateCreateParam implements Serializable { */ private List pushTerminals; - public static MessageTemplateCreateParam from(MessageTemplateCreateRequest request) { - return MessageTemplateCreateParam.builder() + public static MessageTemplateSaveOrUpdateParam from(MessageTemplateCreateRequest request) { + return MessageTemplateSaveOrUpdateParam.builder() .templateName(request.getTemplateName()) .msgCategory(request.getCategory()) .leafGroupNodes(request.getLeafGroupNodes()) @@ -91,6 +96,21 @@ public class MessageTemplateCreateParam implements Serializable { .build(); } + public static MessageTemplateSaveOrUpdateParam from(MessageTemplateUpdateRequest request) { + return MessageTemplateSaveOrUpdateParam.builder() + .templateName(request.getTemplateName()) + .templateCode(request.getTemplateCode()) + .leafGroupNodes(request.getLeafGroupNodes()) + .title(request.getMsgTitle()) + .content(request.getMsgContent()) + .cardContent(JSONObjectUtil.checkAndReturn(request.getMsgCardInfo())) + .icon(request.getMsgIcon()) + .operatorId(request.getOperatorId()) + .routers(request.getRouters()) + .pushTerminals(request.getPushTerminals()) + .build(); + } + @Override public String toString() { return JSON.toJSONString(this); diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateGroupService.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateGroupService.java index b966013e..ca7e4230 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateGroupService.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateGroupService.java @@ -29,6 +29,21 @@ public interface MessageTemplateGroupService { */ void templateGroup(String templateNode, Collection groupNodeCodes); + /** + * 更新模板的分类关系 + * + * @param templateNode 模板编码 + * @param groupNodeCodes 新的模板的分类结点编码 + */ + void updateTemplateGroup(String templateNode, Collection groupNodeCodes); + + /** + * 解除模板关联的分类 + * + * @param templateNode 模板编码 + */ + void deleteTemplateGroup(String templateNode); + /** * 通过消息模板编码查询其关联的分类的path * diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateNewService.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateNewService.java index cfac04f4..7644190d 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateNewService.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateNewService.java @@ -1,7 +1,8 @@ package cn.axzo.msg.center.message.service; import cn.axzo.msg.center.message.domain.dto.MessageTemplateDTO; -import cn.axzo.msg.center.message.domain.param.MessageTemplateCreateParam; +import cn.axzo.msg.center.message.domain.param.MessageTemplateSaveOrUpdateParam; +import cn.axzo.msg.center.service.enums.StatusEnum; import cn.axzo.msg.center.service.template.request.MessageTemplatePageRequest; import cn.axzo.msg.center.service.template.response.MessageTemplateDetailResponse; import cn.axzo.msg.center.service.template.response.MessageTemplatePageResponse; @@ -24,7 +25,14 @@ public interface MessageTemplateNewService { * * @param param 模板内容参数 */ - String createTemplate(MessageTemplateCreateParam param); + String createTemplate(MessageTemplateSaveOrUpdateParam param); + + /** + * 编辑模板 + * + * @param param 模板内容参数 + */ + void updateTemplate(MessageTemplateSaveOrUpdateParam param); /** * 通过模板便阿门查询模板详情 @@ -34,6 +42,15 @@ public interface MessageTemplateNewService { */ MessageTemplateDetailResponse detail(String templateCode); + /** + * 更新模板状态 + * + * @param operatorId 操作人id + * @param templateCode 模板编码 + * @param status 新的模板状态 + */ + void updateStatus(Long operatorId, String templateCode, StatusEnum status); + /** * 通过模板编码查询模板信息 * diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateRouterService.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateRouterService.java index 915b43c1..51d71044 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateRouterService.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateRouterService.java @@ -1,6 +1,7 @@ package cn.axzo.msg.center.message.service; import cn.axzo.msg.center.message.domain.dto.RawMessageRouterDTO; +import cn.axzo.msg.center.service.dto.MessageRouterButtonDTO; import java.util.List; import java.util.Map; @@ -30,6 +31,14 @@ public interface MessageTemplateRouterService { */ void batchInsert(List routers); + /** + * 更新模板的路由信息 + * + * @param templateCode 模板编码 + * @param routers 路由列表 + */ + void updateTemplateRoutes(String templateCode, List routers); + /** * 根据消息模板编码查询配置的路由列表 * diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateGroupServiceImpl.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateGroupServiceImpl.java index b733406c..5eb0a2ea 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateGroupServiceImpl.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateGroupServiceImpl.java @@ -48,6 +48,7 @@ public class MessageTemplateGroupServiceImpl implements MessageTemplateGroupServ public void templateGroup(String templateNode, Collection groupNodeCodes) { if (StringUtils.isBlank(templateNode) || CollectionUtils.isEmpty(groupNodeCodes)) { + log.info("the param is invalid. templateNode:[{}], groupNodeCodes:{}", templateNode, groupNodeCodes); return; } Map pathMap = messageGroupNodeService.leafGroupNodeCodePaths(groupNodeCodes); @@ -62,6 +63,26 @@ public class MessageTemplateGroupServiceImpl implements MessageTemplateGroupServ messageTemplateGroupDao.saveBatch(rows); } + @Override + public void updateTemplateGroup(String templateNode, Collection groupNodeCodes) { + // 先解除之前的关联关系 + deleteTemplateGroup(templateNode); + // 构建新的关联关系 + templateGroup(templateNode, groupNodeCodes); + } + + @Override + public void deleteTemplateGroup(String templateNode) { + if (StringUtils.isBlank(templateNode)) { + log.info("the templateNode is blank."); + return; + } + messageTemplateGroupDao.lambdaUpdate() + .eq(MessageTemplateGroup::getTemplateCode, templateNode) + .eq(MessageTemplateGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .remove(); + } + @Override public Map> listMessageTemplateGroupPaths(Collection templateCodes) { if (CollectionUtils.isEmpty(templateCodes)) { diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateNewServiceImpl.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateNewServiceImpl.java index 015851a8..55ed7fc6 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateNewServiceImpl.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateNewServiceImpl.java @@ -10,13 +10,14 @@ import cn.axzo.msg.center.domain.entity.MessageBaseTemplate; import cn.axzo.msg.center.message.domain.dto.GroupTreeNodePathDTO; import cn.axzo.msg.center.message.domain.dto.MessageTemplateDTO; import cn.axzo.msg.center.message.domain.dto.RawMessageRouterDTO; -import cn.axzo.msg.center.message.domain.param.MessageTemplateCreateParam; +import cn.axzo.msg.center.message.domain.param.MessageTemplateSaveOrUpdateParam; import cn.axzo.msg.center.message.service.MessageGroupNodeService; import cn.axzo.msg.center.message.service.MessageTemplateGroupService; import cn.axzo.msg.center.message.service.MessageTemplateNewService; import cn.axzo.msg.center.message.service.MessageTemplateRouterService; import cn.axzo.msg.center.service.dto.MessageRouterButtonDTO; import cn.axzo.msg.center.service.enums.PushTerminalEnum; +import cn.axzo.msg.center.service.enums.StatusEnum; import cn.axzo.msg.center.service.template.request.MessageTemplatePageRequest; import cn.axzo.msg.center.service.template.response.MessageTemplateDetailResponse; import cn.axzo.msg.center.service.template.response.MessageTemplatePageResponse; @@ -65,7 +66,7 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService @Override @Transactional(rollbackFor = Exception.class) - public String createTemplate(MessageTemplateCreateParam param) { + public String createTemplate(MessageTemplateSaveOrUpdateParam param) { // 创建模板基础数据 String templateCode = saveTemplate(param); // 创建模板的路由数据 @@ -75,6 +76,17 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService return templateCode; } + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTemplate(MessageTemplateSaveOrUpdateParam param) { + // 更新模板基础数据 + updateBaseTemplate(param); + // 更新模板分类信息 + updateTemplateGroupRelation(param); + // 更新模板路由信息 + updateTemplateRouters(param); + } + @Override public MessageTemplateDetailResponse detail(String templateCode) { if (StringUtils.isBlank(templateCode)) { @@ -95,6 +107,20 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService return convert(baseTemplate, groupNodePaths, routers); } + @Override + public void updateStatus(Long operatorId, String templateCode, StatusEnum status) { + if (Objects.isNull(operatorId) || StringUtils.isBlank(templateCode) || Objects.isNull(status)) { + log.info("the param is invalid. operatorId:[{}], code:[{}], status:[{}]", operatorId, templateCode, status); + return; + } + messageBaseTemplateDao.lambdaUpdate() + .eq(MessageBaseTemplate::getCode, templateCode) + .eq(MessageBaseTemplate::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .set(MessageBaseTemplate::getStatus, status) + .set(MessageBaseTemplate::getUpdaterId, operatorId) + .update(); + } + @Override public Optional queryByTemplateCode(String msgTemplateCode) { if (StringUtils.isBlank(msgTemplateCode)) { @@ -176,7 +202,7 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService return Page.toPage(request.getPage(), request.getPageSize(), result.getTotal(), records); } - private String saveTemplate(MessageTemplateCreateParam param) { + private String saveTemplate(MessageTemplateSaveOrUpdateParam param) { String templateCode = UUIDUtil.uuidString(); MessageBaseTemplate template = convert(param); boolean result = doSaveTemplate(template, templateCode); @@ -214,7 +240,7 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService .count() > 0; } - private MessageBaseTemplate convert(MessageTemplateCreateParam param) { + private MessageBaseTemplate convert(MessageTemplateSaveOrUpdateParam param) { MessageBaseTemplate template = new MessageBaseTemplate(); template.setName(param.getTemplateName()); template.setMsgCategory(param.getMsgCategory()); @@ -228,7 +254,7 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService return template; } - private void saveTemplateRouters(MessageTemplateCreateParam param, String templateCode) { + private void saveTemplateRouters(MessageTemplateSaveOrUpdateParam param, String templateCode) { if (CollectionUtils.isEmpty(param.getRouters())) { return; } @@ -238,6 +264,37 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService messageTemplateRouterService.batchInsert(routers); } + private void updateBaseTemplate(MessageTemplateSaveOrUpdateParam param) { + messageBaseTemplateDao.lambdaUpdate() + .eq(MessageBaseTemplate::getCode, param.getTemplateCode()) + .eq(MessageBaseTemplate::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .set(MessageBaseTemplate::getUpdaterId, param.getOperatorId()) + .set(StringUtils.isNotBlank(param.getTemplateName()), MessageBaseTemplate::getName, + param.getTemplateName()) + .set(CollectionUtils.isNotEmpty(param.getPushTerminals()), MessageBaseTemplate::getPushTerminal, + param.getPushTerminals()) + .set(StringUtils.isNotBlank(param.getTitle()), MessageBaseTemplate::getTitle, param.getTitle()) + .set(StringUtils.isNotBlank(param.getCardContent()), MessageBaseTemplate::getCardContent, + param.getCardContent()) + .set(StringUtils.isNotBlank(param.getContent()), MessageBaseTemplate::getContent, param.getContent()) + .set(StringUtils.isNotBlank(param.getIcon()), MessageBaseTemplate::getIcon, param.getIcon()) + .update(); + } + + private void updateTemplateGroupRelation(MessageTemplateSaveOrUpdateParam param) { + if (CollectionUtils.isEmpty(param.getLeafGroupNodes())) { + return; + } + messageTemplateGroupService.updateTemplateGroup(param.getTemplateCode(), param.getLeafGroupNodes()); + } + + private void updateTemplateRouters(MessageTemplateSaveOrUpdateParam param) { + if (CollectionUtils.isEmpty(param.getRouters())) { + return; + } + messageTemplateRouterService.updateTemplateRoutes(param.getTemplateCode(), param.getRouters()); + } + private MessageTemplatePageResponse convert(MessageBaseTemplate record, Map> groupNodePaths, Map codeNameMap) { MessageTemplatePageResponse response = new MessageTemplatePageResponse(); diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateRouterServiceImpl.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateRouterServiceImpl.java index 59e73f4a..078711c0 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateRouterServiceImpl.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateRouterServiceImpl.java @@ -1,9 +1,11 @@ package cn.axzo.msg.center.message.service.impl; +import cn.axzo.msg.center.common.enums.TableIsDeleteEnum; import cn.axzo.msg.center.dal.MessageTemplateRouterDao; import cn.axzo.msg.center.domain.entity.MessageTemplateRouter; import cn.axzo.msg.center.message.domain.dto.RawMessageRouterDTO; import cn.axzo.msg.center.message.service.MessageTemplateRouterService; +import cn.axzo.msg.center.service.dto.MessageRouterButtonDTO; import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -50,6 +52,25 @@ public class MessageTemplateRouterServiceImpl implements MessageTemplateRouterSe messageTemplateRouterDao.saveBatch(messageTemplateRouters); } + @Override + public void updateTemplateRoutes(String templateCode, List routers) { + if (StringUtils.isBlank(templateCode) + || CollectionUtils.isEmpty(routers)) { + log.info("the param is invalid. templateCode:[{}], routers:{}", templateCode, routers); + return; + } + // 移除之前的路由信息 + messageTemplateRouterDao.lambdaUpdate() + .eq(MessageTemplateRouter::getTemplateCode, templateCode) + .eq(MessageTemplateRouter::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .remove(); + // 创建信息的路由信息 + List newRouters = routers.stream() + .map(e -> RawMessageRouterDTO.from(e, templateCode)) + .collect(Collectors.toList()); + batchInsert(newRouters); + } + @Override public Map> groupByTemplateCode(List templateCodes) { if (CollectionUtils.isEmpty(templateCodes)) { diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/request/MessageTemplateUpdateRequest.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/request/MessageTemplateUpdateRequest.java index 52ca1801..d0e8429d 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/request/MessageTemplateUpdateRequest.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/request/MessageTemplateUpdateRequest.java @@ -7,7 +7,6 @@ import lombok.Getter; import lombok.Setter; import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.io.Serializable; import java.util.List; @@ -30,15 +29,18 @@ public class MessageTemplateUpdateRequest implements Serializable { */ @NotNull(message = "operatorId is required") private Long operatorId; + /** + * 模板编码 + */ + @NotBlank(message = "templateCode is required") + private String templateCode; /** * 模板名称 */ - @NotBlank(message = "templateName is required") private String templateName; /** * 消息分类树的叶结点的结点编码列表 */ - @NotEmpty(message = "leafGroupNodes is required") private List leafGroupNodes; /** * 推送终端配置 @@ -49,7 +51,6 @@ public class MessageTemplateUpdateRequest implements Serializable { /** * 消息标题 */ - @NotBlank(message = "msgTitle is required") private String msgTitle; /** * 消息卡片信息,JSON字串 @@ -58,7 +59,6 @@ public class MessageTemplateUpdateRequest implements Serializable { /** * 消息内容 */ - @NotBlank(message = "msgContent is required") private String msgContent; /** * 消息图标