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

This commit is contained in:
luofu 2023-11-07 16:52:31 +08:00
commit a8de65d20b
6 changed files with 153 additions and 76 deletions

View File

@ -1,5 +1,6 @@
package cn.axzo.msg.center.message.domain.param;
import cn.axzo.msg.center.common.exception.ServiceException;
import cn.axzo.msg.center.service.dto.BizDetailShowStrategyDTO;
import cn.axzo.msg.center.service.dto.MessageCardContentItemDTO;
import cn.axzo.msg.center.service.dto.MessageRouterButtonDTO;
@ -7,6 +8,7 @@ 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.MessageTemplateCategoryUtil;
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Builder;
@ -92,9 +94,12 @@ public class MessageTemplateSaveOrUpdateParam implements Serializable {
private List<MessageRouterButtonDTO> routers;
public static MessageTemplateSaveOrUpdateParam from(MessageTemplateCreateRequest request) {
MessageCategoryEnum category = MessageTemplateCategoryUtil
.checkAndReturnSubCategory(request.getCategory(), request.getSubCategory())
.orElseThrow(() -> new ServiceException("无效的参数"));
return MessageTemplateSaveOrUpdateParam.builder()
.templateName(request.getTemplateName())
.msgCategory(request.getSubCategory())
.msgCategory(category)
.leafGroupNodes(request.getLeafGroupNodes())
.title(request.getMsgTitle())
.content(request.getMsgContent())

View File

@ -27,6 +27,7 @@ import cn.axzo.msg.center.service.template.response.MessageTemplateDetailRespons
import cn.axzo.msg.center.service.template.response.MessageTemplatePageResponse;
import cn.axzo.msg.center.utils.JSONObjectUtil;
import cn.axzo.msg.center.utils.MessageRouterUtil;
import cn.axzo.msg.center.utils.MessageTemplateCategoryUtil;
import cn.axzo.msg.center.utils.UUIDUtil;
import cn.azxo.framework.common.model.Page;
import com.alibaba.fastjson.JSON;
@ -169,36 +170,14 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
@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())) {
IPage<MessageBaseTemplate> result = pageQueryBaseTemplate(request);
if (Objects.isNull(result)
|| CollectionUtils.isEmpty(result.getRecords())) {
return PageHelperUtil.emptyPage(request.getPage(), request.getPageSize());
}
templateCodes = result.getRecords().stream().map(MessageBaseTemplate::getCode).collect(Collectors.toList());
List<String> 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()
@ -211,33 +190,9 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
@Override
public Page<MessageBaseTemplateDTO> pageBaseTemplate(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())) {
IPage<MessageBaseTemplate> result = pageQueryBaseTemplate(request);
if (Objects.isNull(result)
|| CollectionUtils.isEmpty(result.getRecords())) {
return PageHelperUtil.emptyPage(request.getPage(), request.getPageSize());
}
List<MessageBaseTemplateDTO> records = result.getRecords().stream()
@ -333,6 +288,7 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
&& CollectionUtils.isNotEmpty(param.getBizDetailShowStrategy().getTerminals())) {
routers.add(RawMessageRouterDTO.from(param.getBizDetailShowStrategy(), templateCode));
}
// TODO: [cold_blade] P0 路由按钮需要解析并新增按钮标识
if (CollectionUtils.isNotEmpty(param.getRouters())) {
List<RawMessageRouterDTO> btnRouters = param.getRouters().stream()
.map(e -> RawMessageRouterDTO.from(e, templateCode))
@ -371,6 +327,7 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
}
private void updateTemplateRouters(MessageTemplateSaveOrUpdateParam param) {
// TODO: [cold_blade] P0 路由按钮需要解析并新增按钮标识
List<MessageRouterButtonDTO> routers = Lists.newArrayList();
if (Objects.nonNull(param.getBizDetailShowStrategy())
&& CollectionUtils.isNotEmpty(param.getBizDetailShowStrategy().getTerminals())) {
@ -387,6 +344,36 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
messageTemplateRouterService.updateTemplateRoutes(param.getTemplateCode(), routers);
}
private IPage<MessageBaseTemplate> pageQueryBaseTemplate(MessageTemplatePageRequest request) {
List<String> templateCodes = Lists.newArrayList();
if (StringUtils.isNotBlank(request.getGroupNodeCode())) {
templateCodes = messageTemplateGroupService.listMessageTemplateCodes(request.getGroupNodeCode());
if (CollectionUtils.isEmpty(templateCodes)) {
// 入参中的分类没有关联任何模板,直接返回查询结果
return null;
}
}
if (StringUtils.isNotBlank(request.getTemplateCode())) {
if (CollectionUtils.isNotEmpty(templateCodes)
&& !templateCodes.contains(request.getTemplateCode())) {
// 分页查询的入参中没指定的模板编码与分类映射的模板编码无交集
return null;
}
// 取两者的交集
templateCodes = Lists.newArrayList(request.getTemplateCode());
}
IPage<MessageBaseTemplate> pageRequest = request.toPage();
return messageBaseTemplateDao.lambdaQuery()
.like(StringUtils.isNotBlank(request.getTemplateName()),
MessageBaseTemplate::getName, request.getTemplateName())
.in(CollectionUtils.isNotEmpty(templateCodes),
MessageBaseTemplate::getCode, request.getTemplateCode())
.in(CollectionUtils.isNotEmpty(request.getCategories()), MessageBaseTemplate::getMsgCategory,
request.getCategories())
.eq(Objects.nonNull(request.getStatus()), MessageBaseTemplate::getStatus, request.getStatus())
.page(pageRequest);
}
private MessageBaseTemplateDTO convert(MessageBaseTemplate record) {
return MessageBaseTemplateDTO.builder()
.name(record.getName())
@ -408,7 +395,7 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
response.setTemplateCode(record.getCode());
response.setTitle(record.getTitle());
response.setContent(record.getContent());
// response.setCategory(record.get);
response.setCategory(record.getMsgCategory());
response.setStatus(record.getStatus());
List<String> nodeNamePaths = groupNodePaths.getOrDefault(record.getCode(), Collections.emptyList()).stream()
.filter(codeNameMap::containsKey)
@ -431,7 +418,8 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
record.getBizDetailShowStrategy(), routers).orElse(null);
return MessageTemplateDetailResponse.builder()
.templateName(record.getName())
// .category(record.getMsgCategory())
.category(MessageTemplateCategoryUtil.parentCategory(record.getMsgCategory()))
.subCategory(MessageTemplateCategoryUtil.parseAndReturnSubCategory(record.getMsgCategory()))
.leafGroupNodes(groupNodeCodes)
.pushTerminals(JSON.parseArray(record.getPushTerminal(), PushTerminalEnum.class))
.msgTitle(record.getTitle())

View File

@ -0,0 +1,92 @@
package cn.axzo.msg.center.utils;
import cn.axzo.basics.common.util.AssertUtil;
import cn.axzo.msg.center.common.exception.ServiceException;
import cn.axzo.msg.center.service.enums.MessageCategoryEnum;
import cn.axzo.msg.center.service.enums.MessageGroupCategoryEnum;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import java.util.Arrays;
import java.util.Collections;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author cold_blade
* @date 2023/11/7
* @version 1.0
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class MessageTemplateCategoryUtil {
/**
* 校验并返回对应的消息模板子类型
*
* @param category 消息模板类型
* @param subCategory 消息模板子类型
* @return 消息模板子类型
*/
public static Optional<MessageCategoryEnum> checkAndReturnSubCategory(MessageGroupCategoryEnum category,
MessageCategoryEnum subCategory) {
AssertUtil.notNull(category, "category is null.");
if (Objects.isNull(subCategory) && MessageGroupCategoryEnum.NOTIFICATION.equals(category)) {
// 通知类型的消息模板无二级分类
return category.getMsgCategories().stream().findFirst();
}
return category.getMsgCategories().stream()
.filter(e -> e.equals(subCategory))
.findFirst();
}
/**
* 返回消息模板子类型对应的父类型
*
* @param subCategory 消息模板子类型
* @return 消息模板父类型
*/
public static MessageGroupCategoryEnum parentCategory(MessageCategoryEnum subCategory) {
AssertUtil.notNull(subCategory, "subCategory is null.");
return Arrays.stream(MessageGroupCategoryEnum.values())
.filter(e -> e.getMsgCategories().contains(subCategory))
.findFirst()
.orElseThrow(() -> new ServiceException("无效的参数"));
}
/**
* 返回消息模板子类型
*
* @param subCategory 消息模板子类型
* @return 消息模板子类型
*/
public static MessageCategoryEnum parseAndReturnSubCategory(MessageCategoryEnum subCategory) {
AssertUtil.notNull(subCategory, "subCategory is null.");
MessageGroupCategoryEnum parent = parentCategory(subCategory);
if (MessageGroupCategoryEnum.NOTIFICATION.equals(parent)) {
return null;
}
return subCategory;
}
/**
* 解析消息模板类型查询条件
*
* @param category 消息模板类型
* @param subCategory 消息模板子类型
* @return 消息模板子类型
*/
public static Set<MessageCategoryEnum> parseCategoryCondition(MessageGroupCategoryEnum category,
MessageCategoryEnum subCategory) {
if (Objects.isNull(category)) {
return Collections.emptySet();
}
if (Objects.isNull(subCategory)) {
return category.getMsgCategories();
}
return category.getMsgCategories().stream()
.filter(e -> e.equals(subCategory))
.collect(Collectors.toSet());
}
}

View File

@ -1,5 +1,6 @@
package cn.axzo.msg.center.service.enums;
import com.google.common.collect.Sets;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
@ -20,11 +21,13 @@ public enum MessageGroupCategoryEnum {
/**
* 通知
*/
NOTIFICATION(MessageGroupNodeCategoryEnum.NOTIFICATION),
NOTIFICATION(MessageGroupNodeCategoryEnum.NOTIFICATION, Sets.newHashSet(MessageCategoryEnum.GENERAL_MESSAGE)),
/**
* 待办
*/
PENDING(MessageGroupNodeCategoryEnum.PENDING);
PENDING(MessageGroupNodeCategoryEnum.PENDING,
Sets.newHashSet(MessageCategoryEnum.BIZ_PENDING_MESSAGE, MessageCategoryEnum.APPROVAL_PENDING_MESSAGE));
private final Set<MessageGroupNodeCategoryEnum> msgGroupNodeCategories;
private final Set<MessageCategoryEnum> msgCategories;
}

View File

@ -2,13 +2,13 @@ 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.MessageGroupCategoryEnum;
import cn.axzo.msg.center.service.enums.StatusEnum;
import com.alibaba.fastjson.JSON;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Collection;
/**
* @author cold_blade
@ -29,18 +29,13 @@ public class MessageTemplatePageRequest extends PageRequest implements Serializa
* 模板编码
*/
private String templateCode;
/**
* 消息类型
* NOTIFICATION: 通知
* PENDING: 待办
*/
private MessageGroupCategoryEnum category;
/**
* 消息子类型
* GENERAL_MESSAGE: 通知
* BIZ_PENDING_MESSAGE: 业务待办
* APPROVAL_PENDING_MESSAGE: 审批待办
*/
private MessageCategoryEnum subCategory;
private Collection<MessageCategoryEnum> categories;
/**
* 分类树的结点编码
*/

View File

@ -1,7 +1,6 @@
package cn.axzo.msg.center.service.template.response;
import cn.axzo.msg.center.service.enums.MessageCategoryEnum;
import cn.axzo.msg.center.service.enums.MessageGroupCategoryEnum;
import cn.axzo.msg.center.service.enums.StatusEnum;
import com.alibaba.fastjson.JSON;
import lombok.Getter;
@ -31,16 +30,11 @@ public class MessageTemplatePageResponse implements Serializable {
private String templateCode;
/**
* 消息类型
* NOTIFICATION: 通知
* PENDING: 待办
*/
private MessageGroupCategoryEnum category;
/**
* 消息子类型
* GENERAL_MESSAGE: 通知
* BIZ_PENDING_MESSAGE: 业务待办
* APPROVAL_PENDING_MESSAGE: 审批待办
*/
private MessageCategoryEnum subCategory;
private MessageCategoryEnum category;
/**
* 消息标题
*/