feat(REQ-1309): 代办详情&完成&撤回等功能的实现
背景: https://jira.axzo.cn/browse/REQ-1309?goToView=1 修改: 代办详情&完成&撤回等功能的实现 影响: 无
This commit is contained in:
parent
47d369b767
commit
ad551c4611
@ -1,13 +1,18 @@
|
||||
package cn.axzo.msg.center.message.domain.dto;
|
||||
|
||||
import cn.axzo.core.utils.converter.BeanConverter;
|
||||
import cn.axzo.msg.center.domain.entity.MessageGroupNode;
|
||||
import cn.axzo.msg.center.service.enums.MessageGroupNodeCategoryEnum;
|
||||
import cn.axzo.msg.center.service.pending.response.MessageGroupNodeResponse;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @description
|
||||
@ -19,6 +24,9 @@ import java.io.Serializable;
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class MessageGroupNodeDTO implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 5171436359992401120L;
|
||||
@ -49,6 +57,19 @@ public class MessageGroupNodeDTO implements Serializable {
|
||||
* 结点对应的代办数量
|
||||
*/
|
||||
private Integer pendingCount;
|
||||
/**
|
||||
* 子节点列表
|
||||
*/
|
||||
private List<MessageGroupNodeDTO> children;
|
||||
|
||||
public static MessageGroupNodeDTO from(MessageGroupNode groupNode) {
|
||||
return MessageGroupNodeDTO.builder()
|
||||
.category(groupNode.getCategory())
|
||||
.nodeName(groupNode.getName())
|
||||
.nodeCode(groupNode.getCode())
|
||||
.parentNodeCode(groupNode.getParentCode())
|
||||
.build();
|
||||
}
|
||||
|
||||
public MessageGroupNodeResponse toResponse() {
|
||||
return BeanConverter.convert(this, MessageGroupNodeResponse.class);
|
||||
|
||||
@ -1,12 +1,32 @@
|
||||
package cn.axzo.msg.center.message.service;
|
||||
|
||||
import cn.axzo.msg.center.message.domain.dto.MessageGroupNodeDTO;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* 消息分类Service
|
||||
* 消息分类管理
|
||||
*
|
||||
* @author cold_blade
|
||||
* @date 2023/9/20
|
||||
* @version 1.0
|
||||
*/
|
||||
public interface MessageGroupService {
|
||||
|
||||
/**
|
||||
* 通过结点编码查询结点信息
|
||||
*
|
||||
* @param nodeCode 结点编码
|
||||
* @return 结点信息
|
||||
*/
|
||||
Optional<MessageGroupNodeDTO> queryByNodeCode(String nodeCode);
|
||||
|
||||
/**
|
||||
* 查询指定结点的字节的信息
|
||||
*
|
||||
* @param nodeCode 指定结点编码
|
||||
* @return 子节点列表信息
|
||||
*/
|
||||
List<MessageGroupNodeDTO> listChildren(String nodeCode);
|
||||
}
|
||||
|
||||
@ -0,0 +1,49 @@
|
||||
package cn.axzo.msg.center.message.service.impl;
|
||||
|
||||
import cn.axzo.msg.center.dal.MessageGroupNodeDao;
|
||||
import cn.axzo.msg.center.domain.entity.MessageGroupNode;
|
||||
import cn.axzo.msg.center.message.domain.dto.MessageGroupNodeDTO;
|
||||
import cn.axzo.msg.center.message.service.MessageGroupService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author cold_blade
|
||||
* @date 2023/10/6
|
||||
* @version 1.0
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class MessageGroupServiceImpl implements MessageGroupService {
|
||||
|
||||
private final MessageGroupNodeDao messageGroupNodeDao;
|
||||
|
||||
@Override
|
||||
public Optional<MessageGroupNodeDTO> queryByNodeCode(String nodeCode) {
|
||||
if (StringUtils.isBlank(nodeCode)) {
|
||||
return Optional.empty();
|
||||
}
|
||||
MessageGroupNode groupNode = messageGroupNodeDao.lambdaQuery()
|
||||
.eq(MessageGroupNode::getCode, nodeCode)
|
||||
.eq(MessageGroupNode::getIsDelete, 0)
|
||||
.one();
|
||||
return Optional.ofNullable(groupNode).map(MessageGroupNodeDTO::from);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MessageGroupNodeDTO> listChildren(String nodeCode) {
|
||||
return messageGroupNodeDao.lambdaQuery()
|
||||
.eq(MessageGroupNode::getParentCode, nodeCode)
|
||||
.eq(MessageGroupNode::getIsDelete, 0)
|
||||
.list().stream()
|
||||
.map(MessageGroupNodeDTO::from)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
@ -12,10 +12,12 @@ import cn.axzo.msg.center.message.domain.dto.PendingMessageDTO;
|
||||
import cn.axzo.msg.center.message.domain.dto.RawMessageRouterDTO;
|
||||
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.MessageGroupService;
|
||||
import cn.axzo.msg.center.message.service.MessageTemplateGroupService;
|
||||
import cn.axzo.msg.center.message.service.MessageTemplateNewService;
|
||||
import cn.axzo.msg.center.message.service.PendingMessageNewService;
|
||||
import cn.axzo.msg.center.service.dto.MessageRouterDTO;
|
||||
import cn.axzo.msg.center.service.dto.PersonDTO;
|
||||
import cn.axzo.msg.center.service.dto.QueryOrderByDTO;
|
||||
import cn.axzo.msg.center.service.enums.PendingMessageRoleCategoryEnum;
|
||||
import cn.axzo.msg.center.service.enums.PendingMessageStateEnum;
|
||||
@ -37,6 +39,7 @@ import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Stack;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -51,6 +54,7 @@ import java.util.stream.Collectors;
|
||||
@RequiredArgsConstructor
|
||||
public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
||||
|
||||
private final MessageGroupService messageGroupService;
|
||||
private final PendingMessageRecordDao pendingMessageRecordDao;
|
||||
private final MessageTemplateRouterDao messageTemplateRouterDao;
|
||||
private final MessageTemplateNewService messageTemplateNewService;
|
||||
@ -58,8 +62,10 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
||||
|
||||
@Override
|
||||
public List<MessageGroupNodeDTO> groupStatistic(MessageGroupNodeStatisticParam param) {
|
||||
// TODO: [cold_blade] 消息分类统计
|
||||
return null;
|
||||
// TODO: [cold_blade] 消息分类统计这里只统计代办执行人的
|
||||
return param.getGroupNodeCodes().stream()
|
||||
.map(e -> statistic(e, param.getOperator()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -202,4 +208,36 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
||||
record.setIsDelete(0);
|
||||
return record;
|
||||
}
|
||||
|
||||
private MessageGroupNodeDTO statistic(String groupNodeCode, PersonDTO operator) {
|
||||
MessageGroupNodeDTO groupNode = messageGroupService.queryByNodeCode(groupNodeCode)
|
||||
.orElseThrow(() -> new ServiceException("groupNodeCode is invalid."));
|
||||
MessageGroupNodeDTO root = groupNode;
|
||||
Stack<MessageGroupNodeDTO> stack = new Stack<>();
|
||||
stack.push(groupNode);
|
||||
List<MessageGroupNodeDTO> children;
|
||||
while (!stack.isEmpty()) {
|
||||
groupNode = stack.pop();
|
||||
statistic(groupNode, operator);
|
||||
children = messageGroupService.listChildren(groupNode.getNodeCode());
|
||||
groupNode.setChildren(children);
|
||||
children.forEach(stack::push);
|
||||
}
|
||||
return root;
|
||||
}
|
||||
|
||||
private void statistic(MessageGroupNodeDTO groupNode, PersonDTO operator) {
|
||||
List<String> templateCodes = messageTemplateGroupService.listMessageTemplateCodes(groupNode.getNodeCode());
|
||||
if (CollectionUtils.isEmpty(templateCodes)) {
|
||||
groupNode.setPendingCount(0);
|
||||
return;
|
||||
}
|
||||
int cnt = pendingMessageRecordDao.lambdaQuery()
|
||||
.in(PendingMessageRecord::getTemplateCode, templateCodes)
|
||||
.eq(PendingMessageRecord::getExecutorPersonId, operator.getId())
|
||||
.eq(PendingMessageRecord::getState, PendingMessageStateEnum.HAS_BEEN_SENT)
|
||||
.eq(PendingMessageRecord::getIsDelete, 0)
|
||||
.count();
|
||||
groupNode.setPendingCount(cnt);
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,17 @@
|
||||
package cn.axzo.msg.center.dal;
|
||||
|
||||
import cn.axzo.msg.center.dal.mapper.MessageGroupNodeMapper;
|
||||
import cn.axzo.msg.center.domain.entity.MessageGroupNode;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author cold_blade
|
||||
* @date 2023/10/6
|
||||
* @version 1.0
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class MessageGroupNodeDao extends ServiceImpl<MessageGroupNodeMapper, MessageGroupNode> {
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user