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

This commit is contained in:
luofu 2023-11-06 13:56:50 +08:00
commit 4c578f6bc3
14 changed files with 118 additions and 31 deletions

View File

@ -24,6 +24,6 @@ public class MessageSystemConfig {
*/ */
@Value("${message.common.record.divide-days:-1}") @Value("${message.common.record.divide-days:-1}")
private Integer dataDivideDays; private Integer dataDivideDays;
@Value("${message.common.icon.orgIcon:https://axzo-pro.oss-cn-hangzhou.aliyuncs.com/rs_app/ic_org_icon.png}") @Value("${message.common.icon.orgIcon:https://axzo-public.oss-cn-chengdu.aliyuncs.com/6253b72fdd8afe30b9f765494ce6a756.png}")
private String orgIcon; private String orgIcon;
} }

View File

@ -4,6 +4,7 @@ import cn.axzo.msg.center.message.domain.param.MessageGroupNodeSaveOrUpdateParam
import cn.axzo.msg.center.message.service.MessageGroupNodeService; import cn.axzo.msg.center.message.service.MessageGroupNodeService;
import cn.axzo.msg.center.service.dto.GroupTreeNodeDTO; import cn.axzo.msg.center.service.dto.GroupTreeNodeDTO;
import cn.axzo.msg.center.service.enums.MessageCategoryEnum; import cn.axzo.msg.center.service.enums.MessageCategoryEnum;
import cn.axzo.msg.center.service.enums.MessageGroupCategoryEnum;
import cn.axzo.msg.center.service.group.client.MessageGroupClient; import cn.axzo.msg.center.service.group.client.MessageGroupClient;
import cn.axzo.msg.center.service.group.request.MessageGroupNodeAddRequest; import cn.axzo.msg.center.service.group.request.MessageGroupNodeAddRequest;
import cn.axzo.msg.center.service.group.request.MessageGroupNodeUpdateRequest; import cn.axzo.msg.center.service.group.request.MessageGroupNodeUpdateRequest;
@ -47,7 +48,7 @@ public class MessageGroupController implements MessageGroupClient {
} }
@Override @Override
public CommonResponse<List<MessageGroupTreeNodeResponse>> list(MessageCategoryEnum category) { public CommonResponse<List<MessageGroupTreeNodeResponse>> list(MessageGroupCategoryEnum category) {
List<MessageGroupTreeNodeResponse> groupTreeNodes = messageGroupNodeService.listGroupTree(category).stream() List<MessageGroupTreeNodeResponse> groupTreeNodes = messageGroupNodeService.listGroupTree(category).stream()
.map(GroupTreeNodeDTO::toMessageGroupTreeNodeResponse) .map(GroupTreeNodeDTO::toMessageGroupTreeNodeResponse)
.collect(Collectors.toList()); .collect(Collectors.toList());

View File

@ -1,6 +1,5 @@
package cn.axzo.msg.center.message.controller; package cn.axzo.msg.center.message.controller;
import cn.axzo.core.utils.converter.BeanConverter;
import cn.axzo.msg.center.message.domain.param.MessageTemplateSaveOrUpdateParam; import cn.axzo.msg.center.message.domain.param.MessageTemplateSaveOrUpdateParam;
import cn.axzo.msg.center.message.domain.param.RelationTemplateMapInitParam; import cn.axzo.msg.center.message.domain.param.RelationTemplateMapInitParam;
import cn.axzo.msg.center.message.domain.vo.RelationTemplateMapInitRequest; import cn.axzo.msg.center.message.domain.vo.RelationTemplateMapInitRequest;
@ -74,7 +73,7 @@ public class MessageTemplateController implements MessageTemplateClient {
@PostMapping(value = "/message/template/relation/init", produces = {MediaType.APPLICATION_JSON_VALUE}) @PostMapping(value = "/message/template/relation/init", produces = {MediaType.APPLICATION_JSON_VALUE})
public CommonResponse<Void> initRelationTemplateMap(@RequestBody @Valid RelationTemplateMapInitRequest request) { public CommonResponse<Void> initRelationTemplateMap(@RequestBody @Valid RelationTemplateMapInitRequest request) {
RelationTemplateMapInitParam param = BeanConverter.convert(request, RelationTemplateMapInitParam.class); RelationTemplateMapInitParam param = request.toInitParam();
relationTemplateMapService.init(param); relationTemplateMapService.init(param);
return CommonResponse.success(); return CommonResponse.success();
} }

View File

@ -1,5 +1,6 @@
package cn.axzo.msg.center.message.domain.param; package cn.axzo.msg.center.message.domain.param;
import cn.axzo.msg.center.service.enums.PushTerminalEnum;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
@ -7,7 +8,8 @@ import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import java.util.Collection; import java.util.List;
import java.util.Map;
/** /**
* @author cold_blade * @author cold_blade
@ -21,7 +23,7 @@ import java.util.Collection;
@AllArgsConstructor @AllArgsConstructor
public class RelationTemplateMapInitParam { public class RelationTemplateMapInitParam {
private Collection<Long> relationIds; private Map<Long, List<PushTerminalEnum>> relationPushTerminalMap;
private String groupNodeCode; private String groupNodeCode;
@Override @Override

View File

@ -1,14 +1,22 @@
package cn.axzo.msg.center.message.domain.vo; package cn.axzo.msg.center.message.domain.vo;
import cn.axzo.msg.center.message.domain.param.RelationTemplateMapInitParam;
import cn.axzo.msg.center.service.enums.PushTerminalEnum;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import org.apache.commons.collections.CollectionUtils;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* @author cold_blade * @author cold_blade
@ -22,12 +30,37 @@ import java.util.Collection;
@AllArgsConstructor @AllArgsConstructor
public class RelationTemplateMapInitRequest { public class RelationTemplateMapInitRequest {
private Collection<Long> relationIds; private Collection<MapEntry> entries;
@NotBlank(message = "groupNodeCode is required") @NotBlank(message = "groupNodeCode is required")
private String groupNodeCode; private String groupNodeCode;
public RelationTemplateMapInitParam toInitParam() {
Map<Long, List<PushTerminalEnum>> map = Collections.emptyMap();
if (CollectionUtils.isNotEmpty(entries)) {
map = entries.stream()
.collect(Collectors.toMap(MapEntry::getKey, MapEntry::getValue));
}
return RelationTemplateMapInitParam.builder()
.groupNodeCode(groupNodeCode)
.relationPushTerminalMap(map)
.build();
}
@Override @Override
public String toString() { public String toString() {
return JSON.toJSONString(this); return JSON.toJSONString(this);
} }
@Data
static class MapEntry {
/**
* key
*/
private Long key;
/**
* value
*/
private List<PushTerminalEnum> value;
}
} }

View File

@ -2,7 +2,7 @@ package cn.axzo.msg.center.message.service;
import cn.axzo.msg.center.message.domain.param.MessageGroupNodeSaveOrUpdateParam; import cn.axzo.msg.center.message.domain.param.MessageGroupNodeSaveOrUpdateParam;
import cn.axzo.msg.center.service.dto.GroupTreeNodeDTO; import cn.axzo.msg.center.service.dto.GroupTreeNodeDTO;
import cn.axzo.msg.center.service.enums.MessageCategoryEnum; import cn.axzo.msg.center.service.enums.MessageGroupCategoryEnum;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@ -69,5 +69,5 @@ public interface MessageGroupNodeService {
* @param category 消息/待办 * @param category 消息/待办
* @return 分类树列表 * @return 分类树列表
*/ */
List<GroupTreeNodeDTO> listGroupTree(MessageCategoryEnum category); List<GroupTreeNodeDTO> listGroupTree(MessageGroupCategoryEnum category);
} }

View File

@ -12,7 +12,7 @@ import cn.axzo.msg.center.message.domain.param.MessageGroupNodeSaveOrUpdateParam
import cn.axzo.msg.center.message.service.MessageGroupNodeService; import cn.axzo.msg.center.message.service.MessageGroupNodeService;
import cn.axzo.msg.center.message.service.MessageGroupTreeNodeCacheService; import cn.axzo.msg.center.message.service.MessageGroupTreeNodeCacheService;
import cn.axzo.msg.center.service.dto.GroupTreeNodeDTO; import cn.axzo.msg.center.service.dto.GroupTreeNodeDTO;
import cn.axzo.msg.center.service.enums.MessageCategoryEnum; import cn.axzo.msg.center.service.enums.MessageGroupCategoryEnum;
import cn.axzo.msg.center.utils.TreeHelperUtil; import cn.axzo.msg.center.utils.TreeHelperUtil;
import cn.axzo.msg.center.utils.UUIDUtil; import cn.axzo.msg.center.utils.UUIDUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -124,11 +124,11 @@ public class MessageGroupNodeServiceImpl implements MessageGroupNodeService {
} }
@Override @Override
public List<GroupTreeNodeDTO> listGroupTree(MessageCategoryEnum category) { public List<GroupTreeNodeDTO> listGroupTree(MessageGroupCategoryEnum category) {
return messageGroupTreeNodeCacheService.listAllGroupTree().stream() return messageGroupTreeNodeCacheService.listAllGroupTree().stream()
// 查询消息/待办 OR 两者的分类树 // 查询消息/待办 OR 两者的分类树
.filter(e -> Objects.isNull(category) .filter(e -> Objects.isNull(category)
|| Objects.equals(e.getCategory().getMsgCategory(), category)) || category.getMsgGroupNodeCategories().contains(e.getCategory()))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }

View File

@ -1,5 +1,6 @@
package cn.axzo.msg.center.message.service.impl; package cn.axzo.msg.center.message.service.impl;
import cn.axzo.framework.core.util.MapUtil;
import cn.axzo.msg.center.common.enums.TableIsDeleteEnum; import cn.axzo.msg.center.common.enums.TableIsDeleteEnum;
import cn.axzo.msg.center.dal.MessageBaseTemplateDao; import cn.axzo.msg.center.dal.MessageBaseTemplateDao;
import cn.axzo.msg.center.dal.RelationTemplateMapDao; import cn.axzo.msg.center.dal.RelationTemplateMapDao;
@ -102,12 +103,16 @@ public class RelationTemplateMapServiceImpl implements RelationTemplateMapServic
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void init(RelationTemplateMapInitParam param) { public void init(RelationTemplateMapInitParam param) {
List<MessageRelation> allRelations = messageRelationService.getAllRelations(); List<MessageRelation> allRelations = messageRelationService.getAllRelations();
if (CollectionUtils.isNotEmpty(param.getRelationIds())) { if (MapUtil.isNotEmpty(param.getRelationPushTerminalMap())) {
// 指定了需要创建并关联的relationId // 指定了需要创建并关联的relationId
allRelations = allRelations.stream() allRelations = allRelations.stream()
.filter(e -> param.getRelationIds().contains(e.getId())) .filter(e -> param.getRelationPushTerminalMap().containsKey(e.getId()))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
if (CollectionUtils.isEmpty(allRelations)) {
log.info("not found any valid relation id.");
return;
}
// relationId与templateId的map // relationId与templateId的map
Map<Long, Long> relationIdTemplateIdMap = allRelations.stream() Map<Long, Long> relationIdTemplateIdMap = allRelations.stream()
.collect(Collectors.toMap(MessageRelation::getId, MessageRelation::getTemplateId)); .collect(Collectors.toMap(MessageRelation::getId, MessageRelation::getTemplateId));
@ -117,6 +122,10 @@ public class RelationTemplateMapServiceImpl implements RelationTemplateMapServic
relationIdTemplateIdMap = relationIdTemplateIdMap.entrySet().stream() relationIdTemplateIdMap = relationIdTemplateIdMap.entrySet().stream()
.filter(e -> !mappedRelationIds.contains(e.getKey())) .filter(e -> !mappedRelationIds.contains(e.getKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
if (MapUtil.isEmpty(relationIdTemplateIdMap)) {
log.info("{} has been mapped.", param.getRelationPushTerminalMap().keySet());
return;
}
// 获取生效中的模板 // 获取生效中的模板
Map<Long, MessageTemplate> messageTemplates = messageTemplateService.getAllTemplates().stream() Map<Long, MessageTemplate> messageTemplates = messageTemplateService.getAllTemplates().stream()
.collect(Collectors.toMap(MessageTemplate::getId, Function.identity())); .collect(Collectors.toMap(MessageTemplate::getId, Function.identity()));
@ -130,7 +139,8 @@ public class RelationTemplateMapServiceImpl implements RelationTemplateMapServic
.collect(Collectors.groupingBy(MessageRouter::getRelationId)); .collect(Collectors.groupingBy(MessageRouter::getRelationId));
// 转化为新模板的数据模型wrapper // 转化为新模板的数据模型wrapper
List<CreateNewTemplateAndMapWrapper> wrappers = relationIdTemplateIdMap.entrySet().stream() List<CreateNewTemplateAndMapWrapper> wrappers = relationIdTemplateIdMap.entrySet().stream()
.map(e -> convert(e.getKey(), messageTemplates.get(e.getValue()), messageRouters.get(e.getKey()))) .map(e -> convert(e.getKey(), messageTemplates.get(e.getValue()), messageRouters.get(e.getKey()),
param.getRelationPushTerminalMap()))
.collect(Collectors.toList()); .collect(Collectors.toList());
// 批量插入 // 批量插入
messageBaseTemplateDao.saveBatch(wrappers.stream() messageBaseTemplateDao.saveBatch(wrappers.stream()
@ -149,9 +159,12 @@ public class RelationTemplateMapServiceImpl implements RelationTemplateMapServic
mapRelationAndTemplate(relationIdTemplateCodeMap); mapRelationAndTemplate(relationIdTemplateCodeMap);
} }
private CreateNewTemplateAndMapWrapper convert(Long relationId, MessageTemplate template, private CreateNewTemplateAndMapWrapper convert(Long relationId, MessageTemplate template, List<MessageRouter> routers,
List<MessageRouter> routers) { Map<Long, List<PushTerminalEnum>> relationPushTerminalMap) {
MessageBaseTemplate baseTemplate = convert(template); MessageBaseTemplate baseTemplate = convert(template);
if (MapUtil.isNotEmpty(relationPushTerminalMap) && relationPushTerminalMap.containsKey(relationId)) {
baseTemplate.setPushTerminal(JSONObjectUtil.toJSONString(relationPushTerminalMap.get(relationId)));
}
CreateNewTemplateAndMapWrapper wrapper = CreateNewTemplateAndMapWrapper.builder() CreateNewTemplateAndMapWrapper wrapper = CreateNewTemplateAndMapWrapper.builder()
.baseTemplate(baseTemplate) .baseTemplate(baseTemplate)
.relationId(relationId) .relationId(relationId)

View File

@ -15,8 +15,9 @@ import lombok.Getter;
@AllArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PRIVATE)
public enum MessageCategoryEnum { public enum MessageCategoryEnum {
GENERAL_MESSAGE(1, "普通消息"), GENERAL_MESSAGE(1, "通知"),
PENDING_MESSAGE(2, "待办消息"); BIZ_PENDING_MESSAGE(2, "业务待办"),
APPROVAL_PENDING_MESSAGE(3, "审批待办");
private final Integer code; private final Integer code;
private final String message; private final String message;

View File

@ -0,0 +1,30 @@
package cn.axzo.msg.center.service.enums;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Set;
/**
* @description
* 消息分类的类型枚举
* @author cold_blade
* @date 2023/11/6
* @version 1.0
*/
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public enum MessageGroupCategoryEnum {
/**
* 通知
*/
NOTIFICATION(MessageGroupNodeCategoryEnum.NOTIFICATION),
/**
* 待办
*/
PENDING(MessageGroupNodeCategoryEnum.PENDING);
private final Set<MessageGroupNodeCategoryEnum> msgGroupNodeCategories;
}

View File

@ -1,9 +1,12 @@
package cn.axzo.msg.center.service.enums; package cn.axzo.msg.center.service.enums;
import com.google.common.collect.Sets;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import java.util.Set;
/** /**
* @description * @description
* *
@ -15,15 +18,20 @@ import lombok.Getter;
@AllArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PRIVATE)
public enum MessageGroupNodeCategoryEnum { public enum MessageGroupNodeCategoryEnum {
GENERAL_MESSAGE_CENTER("消息中心", 1, MessageCategoryEnum.GENERAL_MESSAGE), GENERAL_MESSAGE_CENTER("消息中心", 1),
GENERAL_MESSAGE_MODULE("消息模块", 2, MessageCategoryEnum.GENERAL_MESSAGE), GENERAL_MESSAGE_MODULE("消息模块", 2),
GENERAL_MESSAGE_CATEGORY("消息分类", 3, MessageCategoryEnum.GENERAL_MESSAGE), GENERAL_MESSAGE_CATEGORY("消息分类", 3),
PENDING_MESSAGE_CENTER("待办中心", 1, MessageCategoryEnum.PENDING_MESSAGE), PENDING_MESSAGE_CENTER("待办中心", 1),
PENDING_MESSAGE_MODULE("待办模块", 2, MessageCategoryEnum.PENDING_MESSAGE), PENDING_MESSAGE_MODULE("待办模块", 2),
PENDING_MESSAGE_CATEGORY("待办分类", 3, MessageCategoryEnum.PENDING_MESSAGE), PENDING_MESSAGE_CATEGORY("待办分类", 3),
; ;
private final String desc; private final String desc;
private final int level; private final int level;
private final MessageCategoryEnum msgCategory;
public static final Set<MessageGroupNodeCategoryEnum> NOTIFICATION =
Sets.newHashSet(GENERAL_MESSAGE_CENTER, GENERAL_MESSAGE_MODULE, GENERAL_MESSAGE_CATEGORY);
public static final Set<MessageGroupNodeCategoryEnum> PENDING =
Sets.newHashSet(PENDING_MESSAGE_CENTER, PENDING_MESSAGE_MODULE, PENDING_MESSAGE_CATEGORY);
} }

View File

@ -1,6 +1,6 @@
package cn.axzo.msg.center.service.group.client; package cn.axzo.msg.center.service.group.client;
import cn.axzo.msg.center.service.enums.MessageCategoryEnum; import cn.axzo.msg.center.service.enums.MessageGroupCategoryEnum;
import cn.axzo.msg.center.service.group.client.fallback.MessageGroupClientFallback; import cn.axzo.msg.center.service.group.client.fallback.MessageGroupClientFallback;
import cn.axzo.msg.center.service.group.request.MessageGroupNodeAddRequest; import cn.axzo.msg.center.service.group.request.MessageGroupNodeAddRequest;
import cn.axzo.msg.center.service.group.request.MessageGroupNodeUpdateRequest; import cn.axzo.msg.center.service.group.request.MessageGroupNodeUpdateRequest;
@ -61,5 +61,5 @@ public interface MessageGroupClient {
*/ */
@PostMapping(value = "/message/group/node/list", produces = {MediaType.APPLICATION_JSON_VALUE}) @PostMapping(value = "/message/group/node/list", produces = {MediaType.APPLICATION_JSON_VALUE})
CommonResponse<List<MessageGroupTreeNodeResponse>> list(@RequestParam(value = "category", required = false) CommonResponse<List<MessageGroupTreeNodeResponse>> list(@RequestParam(value = "category", required = false)
MessageCategoryEnum category); MessageGroupCategoryEnum category);
} }

View File

@ -1,6 +1,6 @@
package cn.axzo.msg.center.service.group.client.fallback; package cn.axzo.msg.center.service.group.client.fallback;
import cn.axzo.msg.center.service.enums.MessageCategoryEnum; import cn.axzo.msg.center.service.enums.MessageGroupCategoryEnum;
import cn.axzo.msg.center.service.group.client.MessageGroupClient; import cn.axzo.msg.center.service.group.client.MessageGroupClient;
import cn.axzo.msg.center.service.group.request.MessageGroupNodeAddRequest; import cn.axzo.msg.center.service.group.request.MessageGroupNodeAddRequest;
import cn.axzo.msg.center.service.group.request.MessageGroupNodeUpdateRequest; import cn.axzo.msg.center.service.group.request.MessageGroupNodeUpdateRequest;
@ -40,7 +40,7 @@ public class MessageGroupClientFallback implements MessageGroupClient {
} }
@Override @Override
public CommonResponse<List<MessageGroupTreeNodeResponse>> list(MessageCategoryEnum category) { public CommonResponse<List<MessageGroupTreeNodeResponse>> list(MessageGroupCategoryEnum category) {
log.error("fall back while listing message group node. category:[{}]", category); log.error("fall back while listing message group node. category:[{}]", category);
return CommonResponse.error("fall back while listing message group node"); return CommonResponse.error("fall back while listing message group node");
} }

View File

@ -30,7 +30,7 @@
<maven.compiler.source>8</maven.compiler.source> <maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target> <maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<revision>1.0.0-SNAPSHOT</revision> <revision>1.0.1-SNAPSHOT</revision>
<axzo-bom.version>2.0.0-SNAPSHOT</axzo-bom.version> <axzo-bom.version>2.0.0-SNAPSHOT</axzo-bom.version>
<axzo-dependencies.version>2.0.0-SNAPSHOT</axzo-dependencies.version> <axzo-dependencies.version>2.0.0-SNAPSHOT</axzo-dependencies.version>
<lombok.version>1.18.22</lombok.version> <lombok.version>1.18.22</lombok.version>