Merge branch 'feature/REQ-1507' of axzsource.com:universal/infrastructure/backend/msg-center-plat into dev
This commit is contained in:
commit
bda8a0f478
@ -2,6 +2,7 @@ package cn.axzo.msg.center.inside.notices.config;
|
|||||||
|
|
||||||
import cn.axzo.msg.center.api.enums.MsgTempBizCategoryEnum;
|
import cn.axzo.msg.center.api.enums.MsgTempBizCategoryEnum;
|
||||||
import cn.axzo.msg.center.api.response.PendingMessageTemporarilyTypeRes;
|
import cn.axzo.msg.center.api.response.PendingMessageTemporarilyTypeRes;
|
||||||
|
import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
@ -15,6 +16,7 @@ import org.springframework.context.annotation.Configuration;
|
|||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -44,6 +46,8 @@ public class PendingMessageBizConfig {
|
|||||||
|
|
||||||
private Map<MsgTempBizCategoryEnum, String> categoryJumpUrl;
|
private Map<MsgTempBizCategoryEnum, String> categoryJumpUrl;
|
||||||
|
|
||||||
|
private Map<AppTerminalTypeEnum, List<Long>> msgGroupConfig;
|
||||||
|
|
||||||
public List<MsgTempBizCategoryConfig> tempCategoriesConfig() {
|
public List<MsgTempBizCategoryConfig> tempCategoriesConfig() {
|
||||||
return Arrays.stream(MsgTempBizCategoryEnum.values())
|
return Arrays.stream(MsgTempBizCategoryEnum.values())
|
||||||
.filter(e -> category.containsKey(e))
|
.filter(e -> category.containsKey(e))
|
||||||
@ -59,6 +63,14 @@ public class PendingMessageBizConfig {
|
|||||||
categoryJumpUrl.get(category));
|
categoryJumpUrl.get(category));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Long> fetchMessageGroupTreeNodeIds(AppTerminalTypeEnum appTerminalType) {
|
||||||
|
if (Objects.isNull(appTerminalType)) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
// TODO: [cold_blade] [P2] 需要配置各个应用终端映射的业务中心分类的结点id
|
||||||
|
return msgGroupConfig.getOrDefault(appTerminalType, Collections.emptyList());
|
||||||
|
}
|
||||||
|
|
||||||
@Setter
|
@Setter
|
||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
|
|||||||
@ -1,17 +1,17 @@
|
|||||||
package cn.axzo.msg.center.message.controller;
|
package cn.axzo.msg.center.message.controller;
|
||||||
|
|
||||||
import cn.axzo.msg.center.message.domain.dto.PendingMessageStatisticDTO;
|
|
||||||
import cn.axzo.msg.center.message.domain.dto.PendingMessageDTO;
|
import cn.axzo.msg.center.message.domain.dto.PendingMessageDTO;
|
||||||
|
import cn.axzo.msg.center.message.domain.dto.PendingMessageStatisticDTO;
|
||||||
import cn.axzo.msg.center.message.domain.param.MessageGroupNodeStatisticParam;
|
import cn.axzo.msg.center.message.domain.param.MessageGroupNodeStatisticParam;
|
||||||
import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam;
|
import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam;
|
||||||
import cn.axzo.msg.center.message.service.PendingMessageNewService;
|
import cn.axzo.msg.center.message.service.PendingMessageNewService;
|
||||||
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
|
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
|
||||||
import cn.axzo.msg.center.service.pending.client.PendingMessageClient;
|
import cn.axzo.msg.center.service.pending.client.PendingMessageClient;
|
||||||
import cn.axzo.msg.center.service.pending.request.PendingMessageStatisticRequest;
|
|
||||||
import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest;
|
import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest;
|
||||||
import cn.axzo.msg.center.service.pending.request.PendingMessagePushRequest;
|
import cn.axzo.msg.center.service.pending.request.PendingMessagePushRequest;
|
||||||
import cn.axzo.msg.center.service.pending.response.PendingMessageStatisticResponse;
|
import cn.axzo.msg.center.service.pending.request.PendingMessageStatisticRequest;
|
||||||
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
|
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
|
||||||
|
import cn.axzo.msg.center.service.pending.response.PendingMessageStatisticResponse;
|
||||||
import cn.azxo.framework.common.model.CommonResponse;
|
import cn.azxo.framework.common.model.CommonResponse;
|
||||||
import cn.azxo.framework.common.model.Page;
|
import cn.azxo.framework.common.model.Page;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|||||||
@ -2,6 +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.AppTerminalTypeEnum;
|
||||||
import cn.axzo.msg.center.service.enums.MessageGroupCategoryEnum;
|
import cn.axzo.msg.center.service.enums.MessageGroupCategoryEnum;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
@ -72,4 +73,13 @@ public interface MessageGroupNodeService {
|
|||||||
* @return 分类树列表
|
* @return 分类树列表
|
||||||
*/
|
*/
|
||||||
List<GroupTreeNodeDTO> listGroupTree(@Nullable MessageGroupCategoryEnum category, @Nullable String nodeName);
|
List<GroupTreeNodeDTO> listGroupTree(@Nullable MessageGroupCategoryEnum category, @Nullable String nodeName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取各个应用端对应的业务中心分类结点编码配置
|
||||||
|
*
|
||||||
|
* @param category 分类树的种类
|
||||||
|
* @param appTerminalType 应用终端类型
|
||||||
|
* @return 对应的分类树的根节点编码列表
|
||||||
|
*/
|
||||||
|
List<String> listGroupTreeRootNodeCodes(MessageGroupCategoryEnum category, AppTerminalTypeEnum appTerminalType);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,11 +7,13 @@ import cn.axzo.msg.center.dal.MessageGroupNodeDao;
|
|||||||
import cn.axzo.msg.center.dal.MessageTemplateGroupDao;
|
import cn.axzo.msg.center.dal.MessageTemplateGroupDao;
|
||||||
import cn.axzo.msg.center.domain.entity.MessageGroupNode;
|
import cn.axzo.msg.center.domain.entity.MessageGroupNode;
|
||||||
import cn.axzo.msg.center.domain.entity.MessageTemplateGroup;
|
import cn.axzo.msg.center.domain.entity.MessageTemplateGroup;
|
||||||
|
import cn.axzo.msg.center.inside.notices.config.PendingMessageBizConfig;
|
||||||
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.param.MessageGroupNodeSaveOrUpdateParam;
|
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.AppTerminalTypeEnum;
|
||||||
import cn.axzo.msg.center.service.enums.MessageGroupCategoryEnum;
|
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;
|
||||||
@ -41,6 +43,7 @@ public class MessageGroupNodeServiceImpl implements MessageGroupNodeService {
|
|||||||
|
|
||||||
private final MessageGroupNodeDao messageGroupNodeDao;
|
private final MessageGroupNodeDao messageGroupNodeDao;
|
||||||
private final MessageTemplateGroupDao messageTemplateGroupDao;
|
private final MessageTemplateGroupDao messageTemplateGroupDao;
|
||||||
|
private final PendingMessageBizConfig pendingMessageBizConfig;
|
||||||
private final MessageGroupTreeNodeCacheService messageGroupTreeNodeCacheService;
|
private final MessageGroupTreeNodeCacheService messageGroupTreeNodeCacheService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -134,6 +137,18 @@ public class MessageGroupNodeServiceImpl implements MessageGroupNodeService {
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> listGroupTreeRootNodeCodes(MessageGroupCategoryEnum category, AppTerminalTypeEnum appTerminalType) {
|
||||||
|
AssertUtil.notNull(category, "category can not be null");
|
||||||
|
List<Long> nodeIds = MessageGroupCategoryEnum.PENDING.equals(category) ?
|
||||||
|
pendingMessageBizConfig.fetchMessageGroupTreeNodeIds(appTerminalType) : Collections.emptyList();
|
||||||
|
return messageGroupTreeNodeCacheService.listAllGroupTree().stream()
|
||||||
|
.filter(e -> category.getMsgGroupNodeCategories().contains(e.getCategory()))
|
||||||
|
.filter(e -> CollectionUtils.isEmpty(nodeIds) || nodeIds.contains(e.getNodeId()))
|
||||||
|
.map(GroupTreeNodeDTO::getNodeCode)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
private MessageGroupNode convert(MessageGroupNodeSaveOrUpdateParam param) {
|
private MessageGroupNode convert(MessageGroupNodeSaveOrUpdateParam param) {
|
||||||
MessageGroupNode groupNode = new MessageGroupNode();
|
MessageGroupNode groupNode = new MessageGroupNode();
|
||||||
groupNode.setCode(UUIDUtil.uuidString());
|
groupNode.setCode(UUIDUtil.uuidString());
|
||||||
|
|||||||
@ -154,6 +154,7 @@ public class MessageGroupTreeNodeCacheServiceImpl implements MessageGroupTreeNod
|
|||||||
|
|
||||||
private GroupTreeNodeDTO convert(MessageGroupNode groupNode) {
|
private GroupTreeNodeDTO convert(MessageGroupNode groupNode) {
|
||||||
return GroupTreeNodeDTO.builder()
|
return GroupTreeNodeDTO.builder()
|
||||||
|
.nodeId(groupNode.getId())
|
||||||
.nodeName(groupNode.getName())
|
.nodeName(groupNode.getName())
|
||||||
.nodeCode(groupNode.getCode())
|
.nodeCode(groupNode.getCode())
|
||||||
.nodeIcon(groupNode.getIcon())
|
.nodeIcon(groupNode.getIcon())
|
||||||
|
|||||||
@ -20,6 +20,7 @@ import cn.axzo.msg.center.service.dto.IdentityDTO;
|
|||||||
import cn.axzo.msg.center.service.dto.PersonDTO;
|
import cn.axzo.msg.center.service.dto.PersonDTO;
|
||||||
import cn.axzo.msg.center.service.dto.QueryOrderByDTO;
|
import cn.axzo.msg.center.service.dto.QueryOrderByDTO;
|
||||||
import cn.axzo.msg.center.service.enums.IdentityTypeEnum;
|
import cn.axzo.msg.center.service.enums.IdentityTypeEnum;
|
||||||
|
import cn.axzo.msg.center.service.enums.MessageGroupCategoryEnum;
|
||||||
import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
|
import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
|
||||||
import cn.axzo.msg.center.service.enums.PendingMessageRoleCategoryEnum;
|
import cn.axzo.msg.center.service.enums.PendingMessageRoleCategoryEnum;
|
||||||
import cn.axzo.msg.center.service.enums.PendingMessageStateEnum;
|
import cn.axzo.msg.center.service.enums.PendingMessageStateEnum;
|
||||||
@ -68,8 +69,9 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<PendingMessageStatisticDTO> groupStatistic(MessageGroupNodeStatisticParam param) {
|
public List<PendingMessageStatisticDTO> groupStatistic(MessageGroupNodeStatisticParam param) {
|
||||||
// TODO: [cold_blade] [P0] 获取待统计的业务中心分类结点的编码
|
List<String> groupTreeRootNodeCodes = messageGroupNodeService
|
||||||
return param.getGroupNodeCodes().stream()
|
.listGroupTreeRootNodeCodes(MessageGroupCategoryEnum.PENDING, param.getTerminalType());
|
||||||
|
return groupTreeRootNodeCodes.stream()
|
||||||
.flatMap(e -> statistic(e, param).stream())
|
.flatMap(e -> statistic(e, param).stream())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
@ -127,6 +129,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
|||||||
.orElseThrow(() -> new ServiceException("not found message template."));
|
.orElseThrow(() -> new ServiceException("not found message template."));
|
||||||
PendingMessageRecord record = convert(param, msgTemplate);
|
PendingMessageRecord record = convert(param, msgTemplate);
|
||||||
pendingMessageRecordDao.save(record);
|
pendingMessageRecordDao.save(record);
|
||||||
|
// TODO 补偿消息推送 @luofu
|
||||||
return record.getIdentityCode();
|
return record.getIdentityCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,7 +188,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<PendingMessageStatisticDTO> statistic(String rootNodeCode, MessageGroupNodeStatisticParam param) {
|
private List<PendingMessageStatisticDTO> statistic(String rootNodeCode, MessageGroupNodeStatisticParam param) {
|
||||||
// TODO:[cold_blade] [P0] 异常捕获处理记忆功能实现
|
// TODO:[cold_blade] [P0] 异常捕获处理功能实现
|
||||||
GroupTreeNodeDTO rootNode = messageGroupNodeService.queryRootNode(rootNodeCode)
|
GroupTreeNodeDTO rootNode = messageGroupNodeService.queryRootNode(rootNodeCode)
|
||||||
.orElseThrow(() -> new ServiceException("groupNodeCode is invalid."));
|
.orElseThrow(() -> new ServiceException("groupNodeCode is invalid."));
|
||||||
// 外部传的是根节点,但是前端希望只返回根节点的字节的
|
// 外部传的是根节点,但是前端希望只返回根节点的字节的
|
||||||
|
|||||||
@ -9,12 +9,10 @@ import lombok.Builder;
|
|||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@ -32,6 +30,10 @@ public class GroupTreeNodeDTO implements IBaseTree<GroupTreeNodeDTO, String>, Se
|
|||||||
|
|
||||||
private static final long serialVersionUID = -3244632155934087302L;
|
private static final long serialVersionUID = -3244632155934087302L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 存储模型的主键id
|
||||||
|
*/
|
||||||
|
private Long nodeId;
|
||||||
/**
|
/**
|
||||||
* 模板分组结点名称
|
* 模板分组结点名称
|
||||||
*/
|
*/
|
||||||
@ -83,13 +85,4 @@ public class GroupTreeNodeDTO implements IBaseTree<GroupTreeNodeDTO, String>, Se
|
|||||||
.children(children)
|
.children(children)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<GroupTreeNodeDTO> getChild(String treeNodeCode) {
|
|
||||||
if (StringUtils.isBlank(treeNodeCode) || Objects.isNull(nodeChildren)) {
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
return nodeChildren.stream()
|
|
||||||
.filter(e -> Objects.equals(e.getNodeCode(), treeNodeCode))
|
|
||||||
.findFirst();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -51,6 +51,10 @@ public class PendingMessageResponse implements Serializable {
|
|||||||
* 代办发起者自然人id
|
* 代办发起者自然人id
|
||||||
*/
|
*/
|
||||||
private Long promoterPersonId;
|
private Long promoterPersonId;
|
||||||
|
/**
|
||||||
|
* 发起者姓名
|
||||||
|
*/
|
||||||
|
private String promoterName;
|
||||||
/**
|
/**
|
||||||
* 代办发起者身份
|
* 代办发起者身份
|
||||||
*/
|
*/
|
||||||
@ -59,6 +63,10 @@ public class PendingMessageResponse implements Serializable {
|
|||||||
* 代办执行者自然人id
|
* 代办执行者自然人id
|
||||||
*/
|
*/
|
||||||
private Long executorPersonId;
|
private Long executorPersonId;
|
||||||
|
/**
|
||||||
|
* 执行者姓名
|
||||||
|
*/
|
||||||
|
private String executorName;
|
||||||
/**
|
/**
|
||||||
* 代办执行者身份
|
* 代办执行者身份
|
||||||
*/
|
*/
|
||||||
@ -79,6 +87,14 @@ public class PendingMessageResponse implements Serializable {
|
|||||||
* 业务标签
|
* 业务标签
|
||||||
*/
|
*/
|
||||||
private String bizFlag;
|
private String bizFlag;
|
||||||
|
/**
|
||||||
|
* 项目部图标
|
||||||
|
*/
|
||||||
|
private String projectIcon;
|
||||||
|
/**
|
||||||
|
* 项目部名称
|
||||||
|
*/
|
||||||
|
private String projectName;
|
||||||
/**
|
/**
|
||||||
* 业务类型
|
* 业务类型
|
||||||
*/
|
*/
|
||||||
@ -106,7 +122,7 @@ public class PendingMessageResponse implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* 业务终态的印章图片地址
|
* 业务终态的印章图片地址
|
||||||
*/
|
*/
|
||||||
private String bizFinalStateIconUrl;
|
private String bizFinalStateIcon;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
|||||||
@ -44,6 +44,10 @@ public class PendingMessageRecord extends BaseEntityExt<PendingMessageRecord> im
|
|||||||
* 发起者的自然人ID
|
* 发起者的自然人ID
|
||||||
*/
|
*/
|
||||||
private Long promoterPersonId;
|
private Long promoterPersonId;
|
||||||
|
/**
|
||||||
|
* 发起者姓名
|
||||||
|
*/
|
||||||
|
private String promoterName;
|
||||||
/**
|
/**
|
||||||
* 发起者身份
|
* 发起者身份
|
||||||
*/
|
*/
|
||||||
@ -56,6 +60,10 @@ public class PendingMessageRecord extends BaseEntityExt<PendingMessageRecord> im
|
|||||||
* 执行者的自然人ID
|
* 执行者的自然人ID
|
||||||
*/
|
*/
|
||||||
private Long executorPersonId;
|
private Long executorPersonId;
|
||||||
|
/**
|
||||||
|
* 执行者姓名
|
||||||
|
*/
|
||||||
|
private String executorName;
|
||||||
/**
|
/**
|
||||||
* 执行者身份
|
* 执行者身份
|
||||||
*/
|
*/
|
||||||
@ -104,6 +112,10 @@ public class PendingMessageRecord extends BaseEntityExt<PendingMessageRecord> im
|
|||||||
* 业务描述eg:流程结点描述
|
* 业务描述eg:流程结点描述
|
||||||
*/
|
*/
|
||||||
private String bizDesc;
|
private String bizDesc;
|
||||||
|
/**
|
||||||
|
* 业务标签
|
||||||
|
*/
|
||||||
|
private String bizFlag;
|
||||||
/**
|
/**
|
||||||
* 业务扩展参数
|
* 业务扩展参数
|
||||||
*/
|
*/
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user