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;
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<String> save(MessageTemplateCreateRequest request) {
return CommonResponse.success(
messageTemplateNewService.createTemplate(MessageTemplateCreateParam.from(request)));
messageTemplateNewService.createTemplate(MessageTemplateSaveOrUpdateParam.from(request)));
}
@Override
public CommonResponse<Void> 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<Void> updateStatus(MessageTemplateUpdateStatusRequest request) {
// TODO:[cold_blade] [P0] update template status
return null;
messageTemplateNewService.updateStatus(request.getOperatorId(), request.getTemplateCode(), request.getStatus());
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.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<PushTerminalEnum> 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);

View File

@ -29,6 +29,21 @@ public interface MessageTemplateGroupService {
*/
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
*

View File

@ -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);
/**
* 通过模板编码查询模板信息
*

View File

@ -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<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) {
if (StringUtils.isBlank(templateNode)
|| CollectionUtils.isEmpty(groupNodeCodes)) {
log.info("the param is invalid. templateNode:[{}], groupNodeCodes:{}", templateNode, groupNodeCodes);
return;
}
Map<String, String> pathMap = messageGroupNodeService.leafGroupNodeCodePaths(groupNodeCodes);
@ -62,6 +63,26 @@ public class MessageTemplateGroupServiceImpl implements MessageTemplateGroupServ
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
public Map<String, List<String>> listMessageTemplateGroupPaths(Collection<String> 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.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<MessageTemplateDTO> 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<String, List<String>> groupNodePaths,
Map<String, String> codeNameMap) {
MessageTemplatePageResponse response = new MessageTemplatePageResponse();

View File

@ -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<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
public Map<String, List<RawMessageRouterDTO>> groupByTemplateCode(List<String> templateCodes) {
if (CollectionUtils.isEmpty(templateCodes)) {

View File

@ -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<String> 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;
/**
* 消息图标