feat(REQ-1309): 代办详情&完成&撤回等功能的实现

背景:
  https://jira.axzo.cn/browse/REQ-1309?goToView=1

修改:
  代办详情&完成&撤回等功能的实现

影响:
  无
This commit is contained in:
luofu 2023-10-06 10:55:51 +08:00
parent 47d369b767
commit ad551c4611
5 changed files with 149 additions and 4 deletions

View File

@ -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);

View File

@ -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);
}

View File

@ -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());
}
}

View File

@ -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);
}
}

View File

@ -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> {
}