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

This commit is contained in:
luofu 2023-11-10 14:41:45 +08:00
commit bda8a0f478
9 changed files with 80 additions and 18 deletions

View File

@ -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.response.PendingMessageTemporarilyTypeRes;
import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
import com.alibaba.fastjson.JSON;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
@ -15,6 +16,7 @@ import org.springframework.context.annotation.Configuration;
import javax.annotation.Nullable;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@ -44,6 +46,8 @@ public class PendingMessageBizConfig {
private Map<MsgTempBizCategoryEnum, String> categoryJumpUrl;
private Map<AppTerminalTypeEnum, List<Long>> msgGroupConfig;
public List<MsgTempBizCategoryConfig> tempCategoriesConfig() {
return Arrays.stream(MsgTempBizCategoryEnum.values())
.filter(e -> category.containsKey(e))
@ -59,6 +63,14 @@ public class PendingMessageBizConfig {
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
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)

View File

@ -1,17 +1,17 @@
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.PendingMessageStatisticDTO;
import cn.axzo.msg.center.message.domain.param.MessageGroupNodeStatisticParam;
import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam;
import cn.axzo.msg.center.message.service.PendingMessageNewService;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
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.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.PendingMessageStatisticResponse;
import cn.azxo.framework.common.model.CommonResponse;
import cn.azxo.framework.common.model.Page;
import lombok.RequiredArgsConstructor;

View File

@ -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.service.dto.GroupTreeNodeDTO;
import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
import cn.axzo.msg.center.service.enums.MessageGroupCategoryEnum;
import javax.annotation.Nullable;
@ -72,4 +73,13 @@ public interface MessageGroupNodeService {
* @return 分类树列表
*/
List<GroupTreeNodeDTO> listGroupTree(@Nullable MessageGroupCategoryEnum category, @Nullable String nodeName);
/**
* 获取各个应用端对应的业务中心分类结点编码配置
*
* @param category 分类树的种类
* @param appTerminalType 应用终端类型
* @return 对应的分类树的根节点编码列表
*/
List<String> listGroupTreeRootNodeCodes(MessageGroupCategoryEnum category, AppTerminalTypeEnum appTerminalType);
}

View File

@ -7,11 +7,13 @@ import cn.axzo.msg.center.dal.MessageGroupNodeDao;
import cn.axzo.msg.center.dal.MessageTemplateGroupDao;
import cn.axzo.msg.center.domain.entity.MessageGroupNode;
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.param.MessageGroupNodeSaveOrUpdateParam;
import cn.axzo.msg.center.message.service.MessageGroupNodeService;
import cn.axzo.msg.center.message.service.MessageGroupTreeNodeCacheService;
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.utils.TreeHelperUtil;
import cn.axzo.msg.center.utils.UUIDUtil;
@ -41,6 +43,7 @@ public class MessageGroupNodeServiceImpl implements MessageGroupNodeService {
private final MessageGroupNodeDao messageGroupNodeDao;
private final MessageTemplateGroupDao messageTemplateGroupDao;
private final PendingMessageBizConfig pendingMessageBizConfig;
private final MessageGroupTreeNodeCacheService messageGroupTreeNodeCacheService;
@Override
@ -134,6 +137,18 @@ public class MessageGroupNodeServiceImpl implements MessageGroupNodeService {
.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) {
MessageGroupNode groupNode = new MessageGroupNode();
groupNode.setCode(UUIDUtil.uuidString());

View File

@ -154,6 +154,7 @@ public class MessageGroupTreeNodeCacheServiceImpl implements MessageGroupTreeNod
private GroupTreeNodeDTO convert(MessageGroupNode groupNode) {
return GroupTreeNodeDTO.builder()
.nodeId(groupNode.getId())
.nodeName(groupNode.getName())
.nodeCode(groupNode.getCode())
.nodeIcon(groupNode.getIcon())

View File

@ -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.QueryOrderByDTO;
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.PendingMessageRoleCategoryEnum;
import cn.axzo.msg.center.service.enums.PendingMessageStateEnum;
@ -68,8 +69,9 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
@Override
public List<PendingMessageStatisticDTO> groupStatistic(MessageGroupNodeStatisticParam param) {
// TODO: [cold_blade] [P0] 获取待统计的业务中心分类结点的编码
return param.getGroupNodeCodes().stream()
List<String> groupTreeRootNodeCodes = messageGroupNodeService
.listGroupTreeRootNodeCodes(MessageGroupCategoryEnum.PENDING, param.getTerminalType());
return groupTreeRootNodeCodes.stream()
.flatMap(e -> statistic(e, param).stream())
.collect(Collectors.toList());
}
@ -127,6 +129,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
.orElseThrow(() -> new ServiceException("not found message template."));
PendingMessageRecord record = convert(param, msgTemplate);
pendingMessageRecordDao.save(record);
// TODO 补偿消息推送 @luofu
return record.getIdentityCode();
}
@ -185,7 +188,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
}
private List<PendingMessageStatisticDTO> statistic(String rootNodeCode, MessageGroupNodeStatisticParam param) {
// TODO:[cold_blade] [P0] 异常捕获处理记忆功能实现
// TODO:[cold_blade] [P0] 异常捕获处理功能实现
GroupTreeNodeDTO rootNode = messageGroupNodeService.queryRootNode(rootNodeCode)
.orElseThrow(() -> new ServiceException("groupNodeCode is invalid."));
// 外部传的是根节点但是前端希望只返回根节点的字节的

View File

@ -9,12 +9,10 @@ import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
@ -32,6 +30,10 @@ public class GroupTreeNodeDTO implements IBaseTree<GroupTreeNodeDTO, String>, Se
private static final long serialVersionUID = -3244632155934087302L;
/**
* 存储模型的主键id
*/
private Long nodeId;
/**
* 模板分组结点名称
*/
@ -83,13 +85,4 @@ public class GroupTreeNodeDTO implements IBaseTree<GroupTreeNodeDTO, String>, Se
.children(children)
.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();
}
}

View File

@ -51,6 +51,10 @@ public class PendingMessageResponse implements Serializable {
* 代办发起者自然人id
*/
private Long promoterPersonId;
/**
* 发起者姓名
*/
private String promoterName;
/**
* 代办发起者身份
*/
@ -59,6 +63,10 @@ public class PendingMessageResponse implements Serializable {
* 代办执行者自然人id
*/
private Long executorPersonId;
/**
* 执行者姓名
*/
private String executorName;
/**
* 代办执行者身份
*/
@ -79,6 +87,14 @@ public class PendingMessageResponse implements Serializable {
* 业务标签
*/
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
public String toString() {

View File

@ -44,6 +44,10 @@ public class PendingMessageRecord extends BaseEntityExt<PendingMessageRecord> im
* 发起者的自然人ID
*/
private Long promoterPersonId;
/**
* 发起者姓名
*/
private String promoterName;
/**
* 发起者身份
*/
@ -56,6 +60,10 @@ public class PendingMessageRecord extends BaseEntityExt<PendingMessageRecord> im
* 执行者的自然人ID
*/
private Long executorPersonId;
/**
* 执行者姓名
*/
private String executorName;
/**
* 执行者身份
*/
@ -104,6 +112,10 @@ public class PendingMessageRecord extends BaseEntityExt<PendingMessageRecord> im
* 业务描述eg:流程结点描述
*/
private String bizDesc;
/**
* 业务标签
*/
private String bizFlag;
/**
* 业务扩展参数
*/