From eccd88fca64178e54566214f0ed6075d48476699 Mon Sep 17 00:00:00 2001 From: luofu Date: Wed, 18 Oct 2023 17:56:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-1465):=20=E6=B6=88=E6=81=AF=E5=88=86?= =?UTF-8?q?=E7=B1=BB=E6=A0=91=E6=93=8D=E4=BD=9C=E6=A8=A1=E5=9D=97=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E8=B0=83=E6=95=B4?= 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、消息分类树操作模块功能调整 影响: 无 --- ...essageTemplateGroupRelationController.java | 11 +-- .../service/MessageTemplateGroupService.java | 19 ++++++ .../impl/MessageGroupNodeServiceImpl.java | 1 + .../impl/MessageTemplateGroupServiceImpl.java | 68 +++++++++++++++++++ .../MessageTemplateRouterServiceImpl.java | 1 + .../MessageTemplateGroupRelationClient.java | 5 +- ...geTemplateGroupRelationClientFallback.java | 2 +- 7 files changed, 98 insertions(+), 9 deletions(-) diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageTemplateGroupRelationController.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageTemplateGroupRelationController.java index 19f03b33..a72a10cd 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageTemplateGroupRelationController.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageTemplateGroupRelationController.java @@ -15,8 +15,6 @@ import cn.azxo.framework.common.model.Page; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.RestController; -import java.util.List; - /** * @author cold_blade * @date 2023/10/17 @@ -42,12 +40,15 @@ public class MessageTemplateGroupRelationController implements MessageTemplateGr @Override public CommonResponse move(MessageTemplateGroupRelationMoveRequest request) { - return null; + messageTemplateGroupService.move(request.getCurNodeCode(), request.getTargetNodeCode(), + request.getTemplateCodes()); + return CommonResponse.success(); } @Override - public CommonResponse> remove(MessageTemplateGroupRelationRemoveRequest request) { - return null; + public CommonResponse remove(MessageTemplateGroupRelationRemoveRequest request) { + messageTemplateGroupService.remove(request.getCurNodeCode(), request.getTemplateCodes()); + return CommonResponse.success(); } private MessageTemplateGroupRelationResponse convert(MessageBaseTemplateDTO dto) { 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 ca7e4230..0c7e2ec1 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 @@ -51,4 +51,23 @@ public interface MessageTemplateGroupService { * @return 模板编码与分类的path列表的映射关系 */ Map> listMessageTemplateGroupPaths(Collection templateCodes); + + /** + * 解除模板与当前分类的关联关系 + * 注:当模板只关联一个分类时,该关联关系不能解除 + * + * @param curGroupNodeCode 当前分类结点的编码 + * @param templateCodes 待解除关连关系的模板编码 + */ + void remove(String curGroupNodeCode, Collection templateCodes); + + /** + * 解除模板与当前分类的关联关系 + * 注:当模板只关联一个分类时,该关联关系不能解除 + * + * @param srcGroupNodeCode 源分类结点的编码 + * @param tgtGroupNodeCode 目标分类结点的编码 + * @param templateCodes 待变更关连关系的模板编码 + */ + void move(String srcGroupNodeCode, String tgtGroupNodeCode, Collection templateCodes); } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageGroupNodeServiceImpl.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageGroupNodeServiceImpl.java index 58a9d7ca..0f642542 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageGroupNodeServiceImpl.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageGroupNodeServiceImpl.java @@ -117,6 +117,7 @@ public class MessageGroupNodeServiceImpl implements MessageGroupNodeService { boolean removeResult = messageGroupNodeDao.lambdaUpdate() .eq(MessageGroupNode::getCode, nodeCode) .eq(MessageGroupNode::getIsDelete, TableIsDeleteEnum.NORMAL.value) + // TODO: [cold_blade] [P2] 这里需要逻辑删除而非物理删除 .remove(); if (removeResult) { // 刷新缓存 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 5eb0a2ea..3ab0d607 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 @@ -1,10 +1,12 @@ package cn.axzo.msg.center.message.service.impl; +import cn.axzo.basics.common.util.AssertUtil; import cn.axzo.msg.center.common.enums.TableIsDeleteEnum; import cn.axzo.msg.center.dal.MessageTemplateGroupDao; import cn.axzo.msg.center.domain.entity.MessageTemplateGroup; import cn.axzo.msg.center.message.service.MessageGroupNodeService; import cn.axzo.msg.center.message.service.MessageTemplateGroupService; +import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; @@ -15,6 +17,8 @@ import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -80,6 +84,7 @@ public class MessageTemplateGroupServiceImpl implements MessageTemplateGroupServ messageTemplateGroupDao.lambdaUpdate() .eq(MessageTemplateGroup::getTemplateCode, templateNode) .eq(MessageTemplateGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value) + // TODO: [cold_blade] [P2] 这里需要逻辑删除而非物理删除 .remove(); } @@ -95,4 +100,67 @@ public class MessageTemplateGroupServiceImpl implements MessageTemplateGroupServ .collect(Collectors.groupingBy(MessageTemplateGroup::getTemplateCode, Collectors.mapping(MessageTemplateGroup::getPath, Collectors.toList()))); } + + @Override + public void remove(String curGroupNodeCode, Collection templateCodes) { + // TODO: [cold_blade] + // 参数校验 + AssertUtil.isTrue(StringUtils.isNotBlank(curGroupNodeCode), "curGroupNodeCode can not be blank"); + AssertUtil.notEmpty(templateCodes, "templateCodes can not be empty"); + // 通过分类结点编码获取其对应的结点编码的路径 + Map nodeCodePathMap = messageGroupNodeService + .leafGroupNodeCodePaths(Lists.newArrayList(curGroupNodeCode)); + // 通过能否成功获取到其树路径来校验其有效性 + AssertUtil.isFalse(nodeCodePathMap.isEmpty(), "curGroupNodeCode is invalid"); + // 统计指定的模板编码关联的分类数量 + Map templateCodeList = messageTemplateGroupDao.lambdaQuery() + .in(MessageTemplateGroup::getTemplateCode, templateCodes) + .eq(MessageTemplateGroup::getPath, nodeCodePathMap.get(curGroupNodeCode)) + .eq(MessageTemplateGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value) + // 这里仅查询模板编码字段即可 + .select(MessageTemplateGroup::getTemplateCode) + .list().stream() + .map(MessageTemplateGroup::getTemplateCode) + // 内存中来做groupingBy操作 + .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); + // 筛选出仅关联了一个分类的模板编码 + List onlyContainsOneTemplateCodes = templateCodeList.entrySet().stream() + .filter(e -> Objects.equals(e.getValue(), 1L)) + .map(Map.Entry::getKey) + .collect(Collectors.toList()); + AssertUtil.isEmpty(onlyContainsOneTemplateCodes, removeErrorStr(onlyContainsOneTemplateCodes)); + // 解除关联关系 + messageTemplateGroupDao.lambdaUpdate() + .in(MessageTemplateGroup::getTemplateCode, templateCodes) + .eq(MessageTemplateGroup::getPath, nodeCodePathMap.get(curGroupNodeCode)) + .eq(MessageTemplateGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value) + // TODO: [cold_blade] [P2] 这里需要逻辑删除而非物理删除 + .remove(); + } + + @Override + public void move(String srcGroupNodeCode, String tgtGroupNodeCode, Collection templateCodes) { + // 参数校验 + AssertUtil.isTrue(StringUtils.isNotBlank(srcGroupNodeCode), "srcGroupNodeCode can not be blank"); + AssertUtil.isTrue(StringUtils.isNotBlank(tgtGroupNodeCode), "tgtGroupNodeCode can not be blank"); + AssertUtil.notEmpty(templateCodes, "templateCodes can not be empty"); + // 通过分类结点编码获取其对应的结点编码的路径 + Map nodeCodePathMap = messageGroupNodeService + .leafGroupNodeCodePaths(Lists.newArrayList(srcGroupNodeCode, tgtGroupNodeCode)); + // 通过能否成功获取到其树路径来校验其有效性 + AssertUtil.isTrue(StringUtils.isNotBlank(nodeCodePathMap.get(srcGroupNodeCode)), "srcGroupNodeCode is invalid"); + AssertUtil.isTrue(StringUtils.isNotBlank(nodeCodePathMap.get(tgtGroupNodeCode)), "tgtGroupNodeCode is invalid"); + // 更新分类路径与模板编码的映射关系 + messageTemplateGroupDao.lambdaUpdate() + .eq(MessageTemplateGroup::getPath, nodeCodePathMap.get(srcGroupNodeCode)) + .in(MessageTemplateGroup::getTemplateCode, templateCodes) + .eq(MessageTemplateGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .set(MessageTemplateGroup::getPath, nodeCodePathMap.get(tgtGroupNodeCode)) + .update(); + } + + private String removeErrorStr(List onlyContainsOneTemplateCodes) { + return String.format("模板:%s。解除关联后,将无关联分类!本次操作无效!", + String.join("、", onlyContainsOneTemplateCodes)); + } } 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 078711c0..553ca5c0 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 @@ -63,6 +63,7 @@ public class MessageTemplateRouterServiceImpl implements MessageTemplateRouterSe messageTemplateRouterDao.lambdaUpdate() .eq(MessageTemplateRouter::getTemplateCode, templateCode) .eq(MessageTemplateRouter::getIsDelete, TableIsDeleteEnum.NORMAL.value) + // TODO: [cold_blade] [P2] 这里需要逻辑删除而非物理删除 .remove(); // 创建信息的路由信息 List newRouters = routers.stream() diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/group/client/MessageTemplateGroupRelationClient.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/group/client/MessageTemplateGroupRelationClient.java index 634b843f..4b96fd86 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/group/client/MessageTemplateGroupRelationClient.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/group/client/MessageTemplateGroupRelationClient.java @@ -12,7 +12,6 @@ import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; import javax.validation.Valid; import java.util.List; @@ -47,11 +46,11 @@ public interface MessageTemplateGroupRelationClient { CommonResponse move(@RequestBody @Valid MessageTemplateGroupRelationMoveRequest request); /** - * 变更模板与分类的关联关系 + * 解除分类与模板的关联关系 * * @param request 变更分类的相关参数 * @return 关联关系解除失败的模板编码 */ @PostMapping(value = "/message/template/group-relation/remove", produces = {MediaType.APPLICATION_JSON_VALUE}) - CommonResponse> remove(@RequestBody @Valid MessageTemplateGroupRelationRemoveRequest request); + CommonResponse remove(@RequestBody @Valid MessageTemplateGroupRelationRemoveRequest request); } diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/group/client/fallback/MessageTemplateGroupRelationClientFallback.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/group/client/fallback/MessageTemplateGroupRelationClientFallback.java index e4a07054..36fe2be7 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/group/client/fallback/MessageTemplateGroupRelationClientFallback.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/group/client/fallback/MessageTemplateGroupRelationClientFallback.java @@ -35,7 +35,7 @@ public class MessageTemplateGroupRelationClientFallback implements MessageTempla } @Override - public CommonResponse> remove(MessageTemplateGroupRelationRemoveRequest request) { + public CommonResponse remove(MessageTemplateGroupRelationRemoveRequest request) { log.error("fall back while removing message template group relation. request:{}", request); return CommonResponse.error("fall back while removing message template group relation"); }