Merge branch 'feature/REQ-1465' of axzsource.com:universal/infrastructure/backend/msg-center-plat into dev
This commit is contained in:
commit
d75d0e24a3
@ -6,6 +6,7 @@ import lombok.AccessLevel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collection;
|
||||
@ -40,6 +41,15 @@ public class GroupTreeNodePathDTO implements Serializable {
|
||||
*/
|
||||
private String nodeCodePath;
|
||||
|
||||
public static String parseLeafNodeCode(String nodeCodePath) {
|
||||
if (StringUtils.isBlank(nodeCodePath)) {
|
||||
return null;
|
||||
}
|
||||
String[] nodeCodes = nodeCodePath.split(NODE_CODE_PATH_SPLITER);
|
||||
// 最后一个为叶节点的结点编码
|
||||
return nodeCodes[nodeCodes.length - 1];
|
||||
}
|
||||
|
||||
public static GroupTreeNodePathDTO of(String nodeCode, Collection<GroupTreeNodeDTO> nodes) {
|
||||
String nodeNamePath = formatPath(GroupTreeNodeDTO::getNodeName, nodes, NODE_NAME_PATH_SPLITER);
|
||||
String nodeCodePath = formatPath(GroupTreeNodeDTO::getNodeCode, nodes, NODE_CODE_PATH_SPLITER);
|
||||
|
||||
@ -18,10 +18,10 @@ public interface MessageGroupNodeService {
|
||||
/**
|
||||
* 获取分类结点(叶结点)名称的路径
|
||||
*
|
||||
* @param leafGroupNodeCodes 分类结点(叶结点)的编码列表
|
||||
* @param groupNodeCodePaths 分类结点(叶结点)的编码列表
|
||||
* @return 分类结点(叶结点)名称的路径
|
||||
*/
|
||||
Map<String, String> leafGroupNodeNamePaths(Collection<String> leafGroupNodeCodes);
|
||||
Map<String, String> groupNodeNamePaths(Collection<String> groupNodeCodePaths);
|
||||
|
||||
/**
|
||||
* 获取分类结点(叶结点)编码的路径
|
||||
|
||||
@ -2,6 +2,7 @@ package cn.axzo.msg.center.message.service;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 消息模板分类管理
|
||||
@ -27,4 +28,12 @@ public interface MessageTemplateGroupService {
|
||||
* @param groupNodeCodes 分类结点编码列表
|
||||
*/
|
||||
void templateGroup(String templateNode, Collection<String> groupNodeCodes);
|
||||
|
||||
/**
|
||||
* 通过消息模板编码查询其关联的分类的path
|
||||
*
|
||||
* @param templateCodes 消息模板编码集合
|
||||
* @return 模板编码与分类的path列表的映射关系
|
||||
*/
|
||||
Map<String, List<String>> listMessageTemplateGroupPaths(Collection<String> templateCodes);
|
||||
}
|
||||
|
||||
@ -2,6 +2,9 @@ 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.service.template.request.MessageTemplatePageRequest;
|
||||
import cn.axzo.msg.center.service.template.response.MessageTemplatePageResponse;
|
||||
import cn.azxo.framework.common.model.Page;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
@ -37,4 +40,12 @@ public interface MessageTemplateNewService {
|
||||
* @return 模板信息
|
||||
*/
|
||||
List<MessageTemplateDTO> listByTemplateCodes(List<String> msgTemplateCodes);
|
||||
|
||||
/**
|
||||
* 分页查询模板数据
|
||||
*
|
||||
* @param request 分页请求参数
|
||||
* @return 模板数据列表
|
||||
*/
|
||||
Page<MessageTemplatePageResponse> page(MessageTemplatePageRequest request);
|
||||
}
|
||||
|
||||
@ -28,12 +28,13 @@ public class MessageGroupNodeServiceImpl implements MessageGroupNodeService {
|
||||
private final MessageGroupTreeNodeCacheService messageGroupTreeNodeCacheService;
|
||||
|
||||
@Override
|
||||
public Map<String, String> leafGroupNodeNamePaths(Collection<String> leafGroupNodeCodes) {
|
||||
if (CollectionUtils.isEmpty(leafGroupNodeCodes)) {
|
||||
public Map<String, String> groupNodeNamePaths(Collection<String> groupNodeCodePaths) {
|
||||
if (CollectionUtils.isEmpty(groupNodeCodePaths)) {
|
||||
log.info("leafGroupNodeCodes is empty.");
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
return leafGroupNodeCodes.stream()
|
||||
return groupNodeCodePaths.stream()
|
||||
.map(GroupTreeNodePathDTO::parseLeafNodeCode)
|
||||
.map(messageGroupTreeNodeCacheService::queryLeafNodePath)
|
||||
.filter(Optional::isPresent)
|
||||
.map(Optional::get)
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package cn.axzo.msg.center.message.service.impl;
|
||||
|
||||
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;
|
||||
@ -60,4 +61,17 @@ public class MessageTemplateGroupServiceImpl implements MessageTemplateGroupServ
|
||||
}).collect(Collectors.toList());
|
||||
messageTemplateGroupDao.saveBatch(rows);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, List<String>> listMessageTemplateGroupPaths(Collection<String> templateCodes) {
|
||||
if (CollectionUtils.isEmpty(templateCodes)) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
return messageTemplateGroupDao.lambdaQuery()
|
||||
.in(MessageTemplateGroup::getTemplateCode, templateCodes)
|
||||
.eq(MessageTemplateGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value)
|
||||
.list().stream()
|
||||
.collect(Collectors.groupingBy(MessageTemplateGroup::getTemplateCode,
|
||||
Collectors.mapping(MessageTemplateGroup::getPath, Collectors.toList())));
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,17 +2,24 @@ package cn.axzo.msg.center.message.service.impl;
|
||||
|
||||
import cn.axzo.basics.common.util.AssertUtil;
|
||||
import cn.axzo.msg.center.common.enums.ServiceErrorCodeEnum;
|
||||
import cn.axzo.msg.center.common.utils.PageHelperUtil;
|
||||
import cn.axzo.msg.center.common.utils.RedisUtil;
|
||||
import cn.axzo.msg.center.dal.MessageBaseTemplateDao;
|
||||
import cn.axzo.msg.center.domain.entity.MessageBaseTemplate;
|
||||
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.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.template.request.MessageTemplatePageRequest;
|
||||
import cn.axzo.msg.center.service.template.response.MessageTemplatePageResponse;
|
||||
import cn.axzo.msg.center.utils.JSONObjectUtil;
|
||||
import cn.axzo.msg.center.utils.UUIDUtil;
|
||||
import cn.azxo.framework.common.model.Page;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
@ -20,6 +27,7 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -44,6 +52,7 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
|
||||
private static final int RETRY_CNT_MAX = 3;
|
||||
|
||||
private final MessageBaseTemplateDao messageBaseTemplateDao;
|
||||
private final MessageGroupNodeService messageGroupNodeService;
|
||||
private final MessageTemplateGroupService messageTemplateGroupService;
|
||||
private final MessageTemplateRouterService messageTemplateRouterService;
|
||||
|
||||
@ -98,6 +107,48 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<MessageTemplatePageResponse> page(MessageTemplatePageRequest request) {
|
||||
List<String> templateCodes = Lists.newArrayList();
|
||||
if (StringUtils.isNotBlank(request.getGroupNodeCode())) {
|
||||
templateCodes = messageTemplateGroupService.listMessageTemplateCodes(request.getGroupNodeCode());
|
||||
if (CollectionUtils.isEmpty(templateCodes)) {
|
||||
// 入参中的分类没有关联任何模板,直接返回查询结果
|
||||
return PageHelperUtil.emptyPage(request.getPage(), request.getPageSize());
|
||||
}
|
||||
}
|
||||
if (StringUtils.isNotBlank(request.getTemplateCode())) {
|
||||
if (CollectionUtils.isNotEmpty(templateCodes)
|
||||
&& !templateCodes.contains(request.getTemplateCode())) {
|
||||
// 分页查询的入参中没指定的模板编码与分类映射的模板编码无交集
|
||||
return PageHelperUtil.emptyPage(request.getPage(), request.getPageSize());
|
||||
}
|
||||
// 取两者的交集
|
||||
templateCodes = Lists.newArrayList(request.getTemplateCode());
|
||||
}
|
||||
IPage<MessageBaseTemplate> pageRequest = request.toPage();
|
||||
IPage<MessageBaseTemplate> result = messageBaseTemplateDao.lambdaQuery()
|
||||
.like(StringUtils.isNotBlank(request.getTemplateName()),
|
||||
MessageBaseTemplate::getName, request.getTemplateName())
|
||||
.in(CollectionUtils.isNotEmpty(templateCodes),
|
||||
MessageBaseTemplate::getCode, request.getTemplateCode())
|
||||
.eq(Objects.nonNull(request.getCategory()), MessageBaseTemplate::getMsgCategory, request.getCategory())
|
||||
.eq(Objects.nonNull(request.getStatus()), MessageBaseTemplate::getStatus, request.getStatus())
|
||||
.page(pageRequest);
|
||||
if (CollectionUtils.isEmpty(result.getRecords())) {
|
||||
return PageHelperUtil.emptyPage(request.getPage(), request.getPageSize());
|
||||
}
|
||||
templateCodes = result.getRecords().stream().map(MessageBaseTemplate::getCode).collect(Collectors.toList());
|
||||
Map<String, List<String>> groupNodePaths = messageTemplateGroupService
|
||||
.listMessageTemplateGroupPaths(templateCodes);
|
||||
Map<String, String> codeNameMap = messageGroupNodeService.groupNodeNamePaths(groupNodePaths.values().stream()
|
||||
.flatMap(Collection::stream).collect(Collectors.toList()));
|
||||
List<MessageTemplatePageResponse> records = result.getRecords().stream()
|
||||
.map(e -> convert(e, groupNodePaths, codeNameMap))
|
||||
.collect(Collectors.toList());
|
||||
return Page.toPage(request.getPage(), request.getPageSize(), result.getTotal(), records);
|
||||
}
|
||||
|
||||
private String saveTemplate(MessageTemplateCreateParam param) {
|
||||
String templateCode = UUIDUtil.uuidString();
|
||||
MessageBaseTemplate template = convert(param);
|
||||
@ -150,6 +201,23 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
|
||||
return template;
|
||||
}
|
||||
|
||||
private MessageTemplatePageResponse convert(MessageBaseTemplate record, Map<String, List<String>> groupNodePaths,
|
||||
Map<String, String> codeNameMap) {
|
||||
MessageTemplatePageResponse response = new MessageTemplatePageResponse();
|
||||
response.setTemplateName(record.getName());
|
||||
response.setTemplateCode(record.getCode());
|
||||
response.setTitle(record.getTitle());
|
||||
response.setContent(record.getContent());
|
||||
response.setCategory(record.getMsgCategory());
|
||||
response.setStatus(record.getStatus());
|
||||
List<String> nodeNamePaths = groupNodePaths.getOrDefault(record.getCode(), Collections.emptyList()).stream()
|
||||
.filter(codeNameMap::containsKey)
|
||||
.map(codeNameMap::get)
|
||||
.collect(Collectors.toList());
|
||||
response.setGroupNodeNamePaths(nodeNamePaths);
|
||||
return response;
|
||||
}
|
||||
|
||||
private void saveTemplateRouters(MessageTemplateCreateParam param, String templateCode) {
|
||||
if (CollectionUtils.isEmpty(param.getRouters())) {
|
||||
return;
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package cn.axzo.msg.center.service.template.request;
|
||||
|
||||
import cn.axzo.basics.common.page.PageRequest;
|
||||
import cn.axzo.msg.center.service.enums.MessageCategoryEnum;
|
||||
import cn.axzo.msg.center.service.enums.StatusEnum;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
@ -15,7 +16,7 @@ import java.io.Serializable;
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
public class MessageTemplatePageRequest implements Serializable {
|
||||
public class MessageTemplatePageRequest extends PageRequest implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 3501567663122621175L;
|
||||
|
||||
|
||||
@ -7,6 +7,7 @@ import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author cold_blade
|
||||
@ -44,7 +45,7 @@ public class MessageTemplatePageResponse implements Serializable {
|
||||
/**
|
||||
* 分类路径,eg:发薪管理/发薪提醒/提醒工人
|
||||
*/
|
||||
private String groupNodePath;
|
||||
private List<String> groupNodeNamePaths;
|
||||
/**
|
||||
* 模板状态
|
||||
* ENABLE: 启用
|
||||
|
||||
@ -0,0 +1,20 @@
|
||||
package cn.axzo.msg.center.common.utils;
|
||||
|
||||
import cn.azxo.framework.common.model.Page;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
/**
|
||||
* @author cold_blade
|
||||
* @date 2023/10/16
|
||||
* @version 1.0
|
||||
*/
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public final class PageHelperUtil {
|
||||
|
||||
public static <T> Page<T> emptyPage(Long pageNum, Long pageSize) {
|
||||
return Page.toPage(pageNum, pageSize, 0L, Collections.emptyList());
|
||||
}
|
||||
}
|
||||
@ -2,6 +2,7 @@ package cn.axzo.msg.center.domain.entity;
|
||||
|
||||
import cn.axzo.msg.center.domain.persistence.BaseEntity;
|
||||
import cn.axzo.msg.center.service.enums.MessageCategoryEnum;
|
||||
import cn.axzo.msg.center.service.enums.StatusEnum;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Getter;
|
||||
@ -51,6 +52,12 @@ public class MessageBaseTemplate extends BaseEntity<MessageBaseTemplate> impleme
|
||||
* 模板icon
|
||||
*/
|
||||
private String icon;
|
||||
/**
|
||||
* 模板状态
|
||||
* ENABLE: 启用
|
||||
* DISABLE: 禁用
|
||||
*/
|
||||
private StatusEnum status;
|
||||
/**
|
||||
* 推送终端配置 JSON字串
|
||||
*/
|
||||
|
||||
Loading…
Reference in New Issue
Block a user