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

This commit is contained in:
luofu 2023-10-17 15:16:59 +08:00
commit cc87013d2e
9 changed files with 181 additions and 21 deletions

View File

@ -1,6 +1,6 @@
package cn.axzo.msg.center.message.controller; 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.message.service.MessageTemplateNewService;
import cn.axzo.msg.center.service.template.client.MessageTemplateClient; import cn.axzo.msg.center.service.template.client.MessageTemplateClient;
import cn.axzo.msg.center.service.template.request.MessageTemplateCreateRequest; import cn.axzo.msg.center.service.template.request.MessageTemplateCreateRequest;
@ -30,13 +30,13 @@ public class MessageTemplateController implements MessageTemplateClient {
@Override @Override
public CommonResponse<String> save(MessageTemplateCreateRequest request) { public CommonResponse<String> save(MessageTemplateCreateRequest request) {
return CommonResponse.success( return CommonResponse.success(
messageTemplateNewService.createTemplate(MessageTemplateCreateParam.from(request))); messageTemplateNewService.createTemplate(MessageTemplateSaveOrUpdateParam.from(request)));
} }
@Override @Override
public CommonResponse<Void> update(MessageTemplateUpdateRequest request) { public CommonResponse<Void> update(MessageTemplateUpdateRequest request) {
// TODO:[cold_blade] [P0] update template messageTemplateNewService.updateTemplate(MessageTemplateSaveOrUpdateParam.from(request));
return null; return CommonResponse.success();
} }
@Override @Override
@ -51,7 +51,7 @@ public class MessageTemplateController implements MessageTemplateClient {
@Override @Override
public CommonResponse<Void> updateStatus(MessageTemplateUpdateStatusRequest request) { public CommonResponse<Void> updateStatus(MessageTemplateUpdateStatusRequest request) {
// TODO:[cold_blade] [P0] update template status messageTemplateNewService.updateStatus(request.getOperatorId(), request.getTemplateCode(), request.getStatus());
return null; return CommonResponse.success();
} }
} }

View File

@ -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.MessageCategoryEnum;
import cn.axzo.msg.center.service.enums.PushTerminalEnum; 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.MessageTemplateCreateRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplateUpdateRequest;
import cn.axzo.msg.center.utils.JSONObjectUtil; import cn.axzo.msg.center.utils.JSONObjectUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -27,7 +28,7 @@ import java.util.List;
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class MessageTemplateCreateParam implements Serializable { public class MessageTemplateSaveOrUpdateParam implements Serializable {
private static final long serialVersionUID = 6657624182580261353L; private static final long serialVersionUID = 6657624182580261353L;
@ -35,6 +36,10 @@ public class MessageTemplateCreateParam implements Serializable {
* 模板名称 * 模板名称
*/ */
private String templateName; private String templateName;
/**
* 模板编码
*/
private String templateCode;
/** /**
* 消息分类树的叶结点的结点编码列表 * 消息分类树的叶结点的结点编码列表
*/ */
@ -76,8 +81,8 @@ public class MessageTemplateCreateParam implements Serializable {
*/ */
private List<PushTerminalEnum> pushTerminals; private List<PushTerminalEnum> pushTerminals;
public static MessageTemplateCreateParam from(MessageTemplateCreateRequest request) { public static MessageTemplateSaveOrUpdateParam from(MessageTemplateCreateRequest request) {
return MessageTemplateCreateParam.builder() return MessageTemplateSaveOrUpdateParam.builder()
.templateName(request.getTemplateName()) .templateName(request.getTemplateName())
.msgCategory(request.getCategory()) .msgCategory(request.getCategory())
.leafGroupNodes(request.getLeafGroupNodes()) .leafGroupNodes(request.getLeafGroupNodes())
@ -91,6 +96,21 @@ public class MessageTemplateCreateParam implements Serializable {
.build(); .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 @Override
public String toString() { public String toString() {
return JSON.toJSONString(this); return JSON.toJSONString(this);

View File

@ -29,6 +29,21 @@ public interface MessageTemplateGroupService {
*/ */
void templateGroup(String templateNode, Collection<String> groupNodeCodes); void templateGroup(String templateNode, Collection<String> groupNodeCodes);
/**
* 更新模板的分类关系
*
* @param templateNode 模板编码
* @param groupNodeCodes 新的模板的分类结点编码
*/
void updateTemplateGroup(String templateNode, Collection<String> groupNodeCodes);
/**
* 解除模板关联的分类
*
* @param templateNode 模板编码
*/
void deleteTemplateGroup(String templateNode);
/** /**
* 通过消息模板编码查询其关联的分类的path * 通过消息模板编码查询其关联的分类的path
* *

View File

@ -1,7 +1,8 @@
package cn.axzo.msg.center.message.service; package cn.axzo.msg.center.message.service;
import cn.axzo.msg.center.message.domain.dto.MessageTemplateDTO; 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.request.MessageTemplatePageRequest;
import cn.axzo.msg.center.service.template.response.MessageTemplateDetailResponse; import cn.axzo.msg.center.service.template.response.MessageTemplateDetailResponse;
import cn.axzo.msg.center.service.template.response.MessageTemplatePageResponse; import cn.axzo.msg.center.service.template.response.MessageTemplatePageResponse;
@ -24,7 +25,14 @@ public interface MessageTemplateNewService {
* *
* @param param 模板内容参数 * @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); MessageTemplateDetailResponse detail(String templateCode);
/**
* 更新模板状态
*
* @param operatorId 操作人id
* @param templateCode 模板编码
* @param status 新的模板状态
*/
void updateStatus(Long operatorId, String templateCode, StatusEnum status);
/** /**
* 通过模板编码查询模板信息 * 通过模板编码查询模板信息
* *

View File

@ -1,6 +1,7 @@
package cn.axzo.msg.center.message.service; package cn.axzo.msg.center.message.service;
import cn.axzo.msg.center.message.domain.dto.RawMessageRouterDTO; import cn.axzo.msg.center.message.domain.dto.RawMessageRouterDTO;
import cn.axzo.msg.center.service.dto.MessageRouterButtonDTO;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -30,6 +31,14 @@ public interface MessageTemplateRouterService {
*/ */
void batchInsert(List<RawMessageRouterDTO> routers); void batchInsert(List<RawMessageRouterDTO> routers);
/**
* 更新模板的路由信息
*
* @param templateCode 模板编码
* @param routers 路由列表
*/
void updateTemplateRoutes(String templateCode, List<MessageRouterButtonDTO> routers);
/** /**
* 根据消息模板编码查询配置的路由列表 * 根据消息模板编码查询配置的路由列表
* *

View File

@ -48,6 +48,7 @@ public class MessageTemplateGroupServiceImpl implements MessageTemplateGroupServ
public void templateGroup(String templateNode, Collection<String> groupNodeCodes) { public void templateGroup(String templateNode, Collection<String> groupNodeCodes) {
if (StringUtils.isBlank(templateNode) if (StringUtils.isBlank(templateNode)
|| CollectionUtils.isEmpty(groupNodeCodes)) { || CollectionUtils.isEmpty(groupNodeCodes)) {
log.info("the param is invalid. templateNode:[{}], groupNodeCodes:{}", templateNode, groupNodeCodes);
return; return;
} }
Map<String, String> pathMap = messageGroupNodeService.leafGroupNodeCodePaths(groupNodeCodes); Map<String, String> pathMap = messageGroupNodeService.leafGroupNodeCodePaths(groupNodeCodes);
@ -62,6 +63,26 @@ public class MessageTemplateGroupServiceImpl implements MessageTemplateGroupServ
messageTemplateGroupDao.saveBatch(rows); messageTemplateGroupDao.saveBatch(rows);
} }
@Override
public void updateTemplateGroup(String templateNode, Collection<String> 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 @Override
public Map<String, List<String>> listMessageTemplateGroupPaths(Collection<String> templateCodes) { public Map<String, List<String>> listMessageTemplateGroupPaths(Collection<String> templateCodes) {
if (CollectionUtils.isEmpty(templateCodes)) { if (CollectionUtils.isEmpty(templateCodes)) {

View File

@ -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.GroupTreeNodePathDTO;
import cn.axzo.msg.center.message.domain.dto.MessageTemplateDTO; 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.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.MessageGroupNodeService;
import cn.axzo.msg.center.message.service.MessageTemplateGroupService; import cn.axzo.msg.center.message.service.MessageTemplateGroupService;
import cn.axzo.msg.center.message.service.MessageTemplateNewService; import cn.axzo.msg.center.message.service.MessageTemplateNewService;
import cn.axzo.msg.center.message.service.MessageTemplateRouterService; import cn.axzo.msg.center.message.service.MessageTemplateRouterService;
import cn.axzo.msg.center.service.dto.MessageRouterButtonDTO; import cn.axzo.msg.center.service.dto.MessageRouterButtonDTO;
import cn.axzo.msg.center.service.enums.PushTerminalEnum; 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.request.MessageTemplatePageRequest;
import cn.axzo.msg.center.service.template.response.MessageTemplateDetailResponse; import cn.axzo.msg.center.service.template.response.MessageTemplateDetailResponse;
import cn.axzo.msg.center.service.template.response.MessageTemplatePageResponse; import cn.axzo.msg.center.service.template.response.MessageTemplatePageResponse;
@ -65,7 +66,7 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public String createTemplate(MessageTemplateCreateParam param) { public String createTemplate(MessageTemplateSaveOrUpdateParam param) {
// 创建模板基础数据 // 创建模板基础数据
String templateCode = saveTemplate(param); String templateCode = saveTemplate(param);
// 创建模板的路由数据 // 创建模板的路由数据
@ -75,6 +76,17 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
return templateCode; return templateCode;
} }
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTemplate(MessageTemplateSaveOrUpdateParam param) {
// 更新模板基础数据
updateBaseTemplate(param);
// 更新模板分类信息
updateTemplateGroupRelation(param);
// 更新模板路由信息
updateTemplateRouters(param);
}
@Override @Override
public MessageTemplateDetailResponse detail(String templateCode) { public MessageTemplateDetailResponse detail(String templateCode) {
if (StringUtils.isBlank(templateCode)) { if (StringUtils.isBlank(templateCode)) {
@ -95,6 +107,20 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
return convert(baseTemplate, groupNodePaths, routers); 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 @Override
public Optional<MessageTemplateDTO> queryByTemplateCode(String msgTemplateCode) { public Optional<MessageTemplateDTO> queryByTemplateCode(String msgTemplateCode) {
if (StringUtils.isBlank(msgTemplateCode)) { if (StringUtils.isBlank(msgTemplateCode)) {
@ -176,7 +202,7 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
return Page.toPage(request.getPage(), request.getPageSize(), result.getTotal(), records); return Page.toPage(request.getPage(), request.getPageSize(), result.getTotal(), records);
} }
private String saveTemplate(MessageTemplateCreateParam param) { private String saveTemplate(MessageTemplateSaveOrUpdateParam param) {
String templateCode = UUIDUtil.uuidString(); String templateCode = UUIDUtil.uuidString();
MessageBaseTemplate template = convert(param); MessageBaseTemplate template = convert(param);
boolean result = doSaveTemplate(template, templateCode); boolean result = doSaveTemplate(template, templateCode);
@ -214,7 +240,7 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
.count() > 0; .count() > 0;
} }
private MessageBaseTemplate convert(MessageTemplateCreateParam param) { private MessageBaseTemplate convert(MessageTemplateSaveOrUpdateParam param) {
MessageBaseTemplate template = new MessageBaseTemplate(); MessageBaseTemplate template = new MessageBaseTemplate();
template.setName(param.getTemplateName()); template.setName(param.getTemplateName());
template.setMsgCategory(param.getMsgCategory()); template.setMsgCategory(param.getMsgCategory());
@ -228,7 +254,7 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
return template; return template;
} }
private void saveTemplateRouters(MessageTemplateCreateParam param, String templateCode) { private void saveTemplateRouters(MessageTemplateSaveOrUpdateParam param, String templateCode) {
if (CollectionUtils.isEmpty(param.getRouters())) { if (CollectionUtils.isEmpty(param.getRouters())) {
return; return;
} }
@ -238,6 +264,37 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
messageTemplateRouterService.batchInsert(routers); 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<String, List<String>> groupNodePaths, private MessageTemplatePageResponse convert(MessageBaseTemplate record, Map<String, List<String>> groupNodePaths,
Map<String, String> codeNameMap) { Map<String, String> codeNameMap) {
MessageTemplatePageResponse response = new MessageTemplatePageResponse(); MessageTemplatePageResponse response = new MessageTemplatePageResponse();

View File

@ -1,9 +1,11 @@
package cn.axzo.msg.center.message.service.impl; 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.dal.MessageTemplateRouterDao;
import cn.axzo.msg.center.domain.entity.MessageTemplateRouter; import cn.axzo.msg.center.domain.entity.MessageTemplateRouter;
import cn.axzo.msg.center.message.domain.dto.RawMessageRouterDTO; import cn.axzo.msg.center.message.domain.dto.RawMessageRouterDTO;
import cn.axzo.msg.center.message.service.MessageTemplateRouterService; import cn.axzo.msg.center.message.service.MessageTemplateRouterService;
import cn.axzo.msg.center.service.dto.MessageRouterButtonDTO;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -50,6 +52,25 @@ public class MessageTemplateRouterServiceImpl implements MessageTemplateRouterSe
messageTemplateRouterDao.saveBatch(messageTemplateRouters); messageTemplateRouterDao.saveBatch(messageTemplateRouters);
} }
@Override
public void updateTemplateRoutes(String templateCode, List<MessageRouterButtonDTO> 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<RawMessageRouterDTO> newRouters = routers.stream()
.map(e -> RawMessageRouterDTO.from(e, templateCode))
.collect(Collectors.toList());
batchInsert(newRouters);
}
@Override @Override
public Map<String, List<RawMessageRouterDTO>> groupByTemplateCode(List<String> templateCodes) { public Map<String, List<RawMessageRouterDTO>> groupByTemplateCode(List<String> templateCodes) {
if (CollectionUtils.isEmpty(templateCodes)) { if (CollectionUtils.isEmpty(templateCodes)) {

View File

@ -7,7 +7,6 @@ import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
@ -30,15 +29,18 @@ public class MessageTemplateUpdateRequest implements Serializable {
*/ */
@NotNull(message = "operatorId is required") @NotNull(message = "operatorId is required")
private Long operatorId; private Long operatorId;
/**
* 模板编码
*/
@NotBlank(message = "templateCode is required")
private String templateCode;
/** /**
* 模板名称 * 模板名称
*/ */
@NotBlank(message = "templateName is required")
private String templateName; private String templateName;
/** /**
* 消息分类树的叶结点的结点编码列表 * 消息分类树的叶结点的结点编码列表
*/ */
@NotEmpty(message = "leafGroupNodes is required")
private List<String> leafGroupNodes; private List<String> leafGroupNodes;
/** /**
* 推送终端配置 * 推送终端配置
@ -49,7 +51,6 @@ public class MessageTemplateUpdateRequest implements Serializable {
/** /**
* 消息标题 * 消息标题
*/ */
@NotBlank(message = "msgTitle is required")
private String msgTitle; private String msgTitle;
/** /**
* 消息卡片信息,JSON字串 * 消息卡片信息,JSON字串
@ -58,7 +59,6 @@ public class MessageTemplateUpdateRequest implements Serializable {
/** /**
* 消息内容 * 消息内容
*/ */
@NotBlank(message = "msgContent is required")
private String msgContent; private String msgContent;
/** /**
* 消息图标 * 消息图标