Merge branch 'feature/REQ-1465' of axzsource.com:universal/infrastructure/backend/msg-center-plat into dev

This commit is contained in:
luofu 2023-10-18 17:57:16 +08:00
commit db18279ed0
7 changed files with 98 additions and 9 deletions

View File

@ -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<Void> move(MessageTemplateGroupRelationMoveRequest request) {
return null;
messageTemplateGroupService.move(request.getCurNodeCode(), request.getTargetNodeCode(),
request.getTemplateCodes());
return CommonResponse.success();
}
@Override
public CommonResponse<List<String>> remove(MessageTemplateGroupRelationRemoveRequest request) {
return null;
public CommonResponse<Void> remove(MessageTemplateGroupRelationRemoveRequest request) {
messageTemplateGroupService.remove(request.getCurNodeCode(), request.getTemplateCodes());
return CommonResponse.success();
}
private MessageTemplateGroupRelationResponse convert(MessageBaseTemplateDTO dto) {

View File

@ -51,4 +51,23 @@ public interface MessageTemplateGroupService {
* @return 模板编码与分类的path列表的映射关系
*/
Map<String, List<String>> listMessageTemplateGroupPaths(Collection<String> templateCodes);
/**
* 解除模板与当前分类的关联关系
* 当模板只关联一个分类时该关联关系不能解除
*
* @param curGroupNodeCode 当前分类结点的编码
* @param templateCodes 待解除关连关系的模板编码
*/
void remove(String curGroupNodeCode, Collection<String> templateCodes);
/**
* 解除模板与当前分类的关联关系
* 当模板只关联一个分类时该关联关系不能解除
*
* @param srcGroupNodeCode 源分类结点的编码
* @param tgtGroupNodeCode 目标分类结点的编码
* @param templateCodes 待变更关连关系的模板编码
*/
void move(String srcGroupNodeCode, String tgtGroupNodeCode, Collection<String> templateCodes);
}

View File

@ -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) {
// 刷新缓存

View File

@ -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<String> templateCodes) {
// TODO: [cold_blade]
// 参数校验
AssertUtil.isTrue(StringUtils.isNotBlank(curGroupNodeCode), "curGroupNodeCode can not be blank");
AssertUtil.notEmpty(templateCodes, "templateCodes can not be empty");
// 通过分类结点编码获取其对应的结点编码的路径
Map<String, String> nodeCodePathMap = messageGroupNodeService
.leafGroupNodeCodePaths(Lists.newArrayList(curGroupNodeCode));
// 通过能否成功获取到其树路径来校验其有效性
AssertUtil.isFalse(nodeCodePathMap.isEmpty(), "curGroupNodeCode is invalid");
// 统计指定的模板编码关联的分类数量
Map<String, Long> 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<String> 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<String> 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<String, String> 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<String> onlyContainsOneTemplateCodes) {
return String.format("模板:%s。解除关联后将无关联分类本次操作无效",
String.join("", onlyContainsOneTemplateCodes));
}
}

View File

@ -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<RawMessageRouterDTO> newRouters = routers.stream()

View File

@ -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<Void> move(@RequestBody @Valid MessageTemplateGroupRelationMoveRequest request);
/**
* 变更模板与分类的关联关系
* 解除分类与模板的关联关系
*
* @param request 变更分类的相关参数
* @return 关联关系解除失败的模板编码
*/
@PostMapping(value = "/message/template/group-relation/remove", produces = {MediaType.APPLICATION_JSON_VALUE})
CommonResponse<List<String>> remove(@RequestBody @Valid MessageTemplateGroupRelationRemoveRequest request);
CommonResponse<Void> remove(@RequestBody @Valid MessageTemplateGroupRelationRemoveRequest request);
}

View File

@ -35,7 +35,7 @@ public class MessageTemplateGroupRelationClientFallback implements MessageTempla
}
@Override
public CommonResponse<List<String>> remove(MessageTemplateGroupRelationRemoveRequest request) {
public CommonResponse<Void> 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");
}