feat(REQ-1309): 代办详情&完成&撤回等功能的实现
背景: https://jira.axzo.cn/browse/REQ-1309?goToView=1 修改: 代办详情&完成&撤回等功能的实现 影响: 无
This commit is contained in:
parent
d30031477a
commit
47d369b767
@ -1,5 +1,9 @@
|
||||
package cn.axzo.msg.center.message.controller;
|
||||
|
||||
import cn.axzo.msg.center.message.domain.dto.MessageGroupNodeDTO;
|
||||
import cn.axzo.msg.center.message.domain.dto.PendingMessageDTO;
|
||||
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;
|
||||
@ -14,6 +18,8 @@ import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @description
|
||||
@ -30,31 +36,41 @@ public class PendingMessageNewController implements PendingMessageClient {
|
||||
|
||||
@Override
|
||||
public CommonResponse<List<MessageGroupNodeResponse>> groupStatistic(MessageGroupNodeStatisticRequest request) {
|
||||
return null;
|
||||
List<MessageGroupNodeDTO> groupNodes = pendingMessageNewService
|
||||
.groupStatistic(MessageGroupNodeStatisticParam.from(request));
|
||||
return CommonResponse.success(groupNodes.stream()
|
||||
.map(MessageGroupNodeDTO::toResponse)
|
||||
.collect(Collectors.toList())
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResponse<Page<PendingMessageResponse>> pageQuery(PendingMessagePageRequest request) {
|
||||
return null;
|
||||
return CommonResponse.success(pendingMessageNewService.pageQuery(request));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResponse<PendingMessageResponse> detail(String msgIdentityCode, TerminalTypeEnum terminalType) {
|
||||
return null;
|
||||
PendingMessageDTO pendingMessage = pendingMessageNewService.detail(msgIdentityCode, terminalType)
|
||||
.orElse(null);
|
||||
if (Objects.isNull(pendingMessage)) {
|
||||
return CommonResponse.success();
|
||||
}
|
||||
return CommonResponse.success(pendingMessage.toResponse());
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResponse<String> push(PendingMessagePushRequest request) {
|
||||
return CommonResponse.success(pendingMessageNewService.push(request));
|
||||
return CommonResponse.success(pendingMessageNewService.push(PendingMessagePushParam.from(request)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResponse<Boolean> complete(String msgIdentityCode) {
|
||||
return null;
|
||||
return CommonResponse.success(pendingMessageNewService.complete(msgIdentityCode));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResponse<Boolean> revoke(String msgIdentityCode) {
|
||||
return null;
|
||||
return CommonResponse.success(pendingMessageNewService.revoke(msgIdentityCode));
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,81 @@
|
||||
package cn.axzo.msg.center.message.domain.dto;
|
||||
|
||||
import cn.axzo.msg.center.domain.entity.MessageBaseTemplate;
|
||||
import cn.axzo.msg.center.service.enums.MessageCategoryEnum;
|
||||
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
|
||||
*
|
||||
* @author cold_blade
|
||||
* @date 2023/10/5
|
||||
* @version 1.0
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class MessageTemplateDTO implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -2658385672181452557L;
|
||||
|
||||
/**
|
||||
* 模板名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 系统自动生成的模板code
|
||||
*/
|
||||
private String code;
|
||||
/**
|
||||
* 模板标题
|
||||
*/
|
||||
private String title;
|
||||
/**
|
||||
* 模板类容
|
||||
*/
|
||||
private String content;
|
||||
/**
|
||||
* 卡片信息,json字串
|
||||
*/
|
||||
private String cardContent;
|
||||
/**
|
||||
* 所属消息类型
|
||||
*/
|
||||
private MessageCategoryEnum msgCategory;
|
||||
/**
|
||||
* 模板icon
|
||||
*/
|
||||
private String icon;
|
||||
/**
|
||||
* 模板路由信息
|
||||
*/
|
||||
private List<RawMessageRouterDTO> routers;
|
||||
|
||||
public static MessageTemplateDTO from(MessageBaseTemplate baseTemplate, List<RawMessageRouterDTO> routers) {
|
||||
return MessageTemplateDTO.builder()
|
||||
.name(baseTemplate.getName())
|
||||
.code(baseTemplate.getCode())
|
||||
.title(baseTemplate.getTitle())
|
||||
.content(baseTemplate.getContent())
|
||||
.cardContent(baseTemplate.getCardContent())
|
||||
.msgCategory(baseTemplate.getMsgCategory())
|
||||
.icon(baseTemplate.getIcon())
|
||||
.routers(routers)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JSON.toJSONString(this);
|
||||
}
|
||||
}
|
||||
@ -4,9 +4,8 @@ import cn.axzo.msg.center.domain.entity.PendingMessageRecord;
|
||||
import cn.axzo.msg.center.service.dto.IdentityDTO;
|
||||
import cn.axzo.msg.center.service.dto.MessageRouterDTO;
|
||||
import cn.axzo.msg.center.service.dto.PersonDTO;
|
||||
import cn.axzo.msg.center.service.pending.request.PendingMessagePushRequest;
|
||||
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
|
||||
import cn.axzo.msg.center.utils.DateFormatUtil;
|
||||
import cn.axzo.msg.center.utils.UUIDUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
@ -16,6 +15,7 @@ import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* @description
|
||||
@ -78,22 +78,6 @@ public class PendingMessageDTO implements Serializable {
|
||||
*/
|
||||
private MessageRouterDTO router;
|
||||
|
||||
public static PendingMessageDTO from(PendingMessagePushRequest request) {
|
||||
// TODO: [cold_blade]
|
||||
return PendingMessageDTO.builder()
|
||||
.identityCode(UUIDUtil.uuidString())
|
||||
.title("权限点发布申请")
|
||||
.content("${creator}提交了${businessTypeName},请尽快处理。")
|
||||
.promoter(request.getPromoter())
|
||||
.executor(request.getExecutor())
|
||||
.bizCode(request.getBizCode())
|
||||
.subBizCode(request.getSubBizCode())
|
||||
.bizDesc(request.getBizDesc())
|
||||
.createTime(LocalDateTime.now())
|
||||
.updateTime(LocalDateTime.now())
|
||||
.build();
|
||||
}
|
||||
|
||||
public static PendingMessageDTO from(PendingMessageRecord pendingMessageRecord) {
|
||||
// 代办发起者信息
|
||||
PersonDTO promoter = PersonDTO.builder()
|
||||
@ -125,6 +109,22 @@ public class PendingMessageDTO implements Serializable {
|
||||
.build();
|
||||
}
|
||||
|
||||
public PendingMessageResponse toResponse() {
|
||||
return PendingMessageResponse.builder()
|
||||
.identityCode(this.identityCode)
|
||||
.title(this.title)
|
||||
.content(this.content)
|
||||
.promoter(Optional.ofNullable(this.promoter).map(PersonDTO::getIdentity).orElse(null))
|
||||
.executor(Optional.ofNullable(this.executor).map(PersonDTO::getIdentity).orElse(null))
|
||||
.bizCode(this.bizCode)
|
||||
.subBizCode(this.subBizCode)
|
||||
.bizDesc(this.bizDesc)
|
||||
.createTimestamp(DateFormatUtil.toTimestamp(this.createTime))
|
||||
.updateTimestamp(DateFormatUtil.toTimestamp(this.updateTime))
|
||||
.router(this.router)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JSON.toJSONString(this);
|
||||
|
||||
@ -12,7 +12,6 @@ import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collection;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* @description
|
||||
@ -62,21 +61,18 @@ public class MessageGroupNodeStatisticParam implements Serializable {
|
||||
*/
|
||||
private String title;
|
||||
|
||||
public static Optional<MessageGroupNodeStatisticParam> from(MessageGroupNodeStatisticRequest request) {
|
||||
return Optional.ofNullable(request)
|
||||
.map(v -> {
|
||||
MessageGroupNodeStatisticParam param = BeanConverter.convert(v, MessageGroupNodeStatisticParam.class);
|
||||
IdentityDTO identity = IdentityDTO.builder()
|
||||
.id(request.getIdentityId())
|
||||
.type(request.getIdentityType())
|
||||
.build();
|
||||
PersonDTO person = PersonDTO.builder()
|
||||
.id(request.getPersonId())
|
||||
.identity(identity)
|
||||
.build();
|
||||
param.setOperator(person);
|
||||
return param;
|
||||
});
|
||||
public static MessageGroupNodeStatisticParam from(MessageGroupNodeStatisticRequest request) {
|
||||
MessageGroupNodeStatisticParam param = BeanConverter.convert(request, MessageGroupNodeStatisticParam.class);
|
||||
IdentityDTO identity = IdentityDTO.builder()
|
||||
.id(request.getIdentityId())
|
||||
.type(request.getIdentityType())
|
||||
.build();
|
||||
PersonDTO person = PersonDTO.builder()
|
||||
.id(request.getPersonId())
|
||||
.identity(identity)
|
||||
.build();
|
||||
param.setOperator(person);
|
||||
return param;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -0,0 +1,85 @@
|
||||
package cn.axzo.msg.center.message.domain.param;
|
||||
|
||||
import cn.axzo.core.utils.converter.BeanConverter;
|
||||
import cn.axzo.msg.center.service.dto.PersonDTO;
|
||||
import cn.axzo.msg.center.service.enums.BizCategoryEnum;
|
||||
import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
|
||||
import cn.axzo.msg.center.service.pending.request.PendingMessagePushRequest;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* @author cold_blade
|
||||
* @date 2023/10/5
|
||||
* @version 1.0
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PendingMessagePushParam implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 6308469943450138452L;
|
||||
|
||||
/**
|
||||
* 发起者
|
||||
*/
|
||||
private PersonDTO promoter;
|
||||
/**
|
||||
* 执行者
|
||||
*/
|
||||
private PersonDTO executor;
|
||||
/**
|
||||
* 模板编码
|
||||
*/
|
||||
private String templateCode;
|
||||
/**
|
||||
* 消息所属组织类型
|
||||
*/
|
||||
private OrganizationTypeEnum orgType;
|
||||
/**
|
||||
* 消息所属组织Id
|
||||
*/
|
||||
private Long orgId;
|
||||
/**
|
||||
* 消息所属组织名称
|
||||
*/
|
||||
private String orgName;
|
||||
/**
|
||||
* 业务类型
|
||||
*/
|
||||
private BizCategoryEnum bizCategory;
|
||||
/**
|
||||
* 关联业务主键
|
||||
*/
|
||||
private String bizCode;
|
||||
/**
|
||||
* 流程类代办的流程结点编码
|
||||
*/
|
||||
private String subBizCode;
|
||||
/**
|
||||
* 业务描述eg:流程结点描述
|
||||
*/
|
||||
private String bizDesc;
|
||||
/**
|
||||
* 路由参数(json string)
|
||||
*/
|
||||
private String routerParams;
|
||||
|
||||
public static PendingMessagePushParam from(PendingMessagePushRequest request) {
|
||||
return BeanConverter.convert(request, PendingMessagePushParam.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JSON.toJSONString(this);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
package cn.axzo.msg.center.message.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 消息模板分类管理
|
||||
*
|
||||
* @author cold_blade
|
||||
* @date 2023/10/5
|
||||
* @version 1.0
|
||||
*/
|
||||
public interface MessageTemplateGroupService {
|
||||
|
||||
/**
|
||||
* 通过分组结点编码查询关联的模板编码列表
|
||||
*
|
||||
* @param groupNodeCode 分组结点编码
|
||||
* @return 模板编码列表
|
||||
*/
|
||||
List<String> listMessageTemplateCodes(String groupNodeCode);
|
||||
}
|
||||
@ -1,7 +1,10 @@
|
||||
package cn.axzo.msg.center.message.service;
|
||||
|
||||
import cn.axzo.msg.center.message.domain.dto.MessageTemplateDTO;
|
||||
import cn.axzo.msg.center.message.domain.param.MessageTemplateCreateParam;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* @description
|
||||
* 消息模板管理
|
||||
@ -17,4 +20,12 @@ public interface MessageTemplateNewService {
|
||||
* @param param 模板内容参数
|
||||
*/
|
||||
void createTemplate(MessageTemplateCreateParam param);
|
||||
|
||||
/**
|
||||
* 通过模板编码查询模板信息
|
||||
*
|
||||
* @param msgTemplateCode 模板编码
|
||||
* @return 模板信息
|
||||
*/
|
||||
Optional<MessageTemplateDTO> queryByTemplateCode(String msgTemplateCode);
|
||||
}
|
||||
|
||||
@ -3,6 +3,7 @@ package cn.axzo.msg.center.message.service;
|
||||
import cn.axzo.msg.center.message.domain.dto.MessageGroupNodeDTO;
|
||||
import cn.axzo.msg.center.message.domain.dto.PendingMessageDTO;
|
||||
import cn.axzo.msg.center.message.domain.param.MessageGroupNodeStatisticParam;
|
||||
import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam;
|
||||
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
|
||||
import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest;
|
||||
import cn.axzo.msg.center.service.pending.request.PendingMessagePushRequest;
|
||||
@ -43,10 +44,10 @@ public interface PendingMessageNewService {
|
||||
/**
|
||||
* 发送代办
|
||||
*
|
||||
* @param request 代办核心参数
|
||||
* @param param 代办核心参数
|
||||
* @return 代办唯一标识
|
||||
*/
|
||||
String push(PendingMessagePushRequest request);
|
||||
String push(PendingMessagePushParam param);
|
||||
|
||||
/**
|
||||
* 完成代办
|
||||
|
||||
@ -0,0 +1,40 @@
|
||||
package cn.axzo.msg.center.message.service.impl;
|
||||
|
||||
import cn.axzo.msg.center.dal.MessageTemplateGroupDao;
|
||||
import cn.axzo.msg.center.domain.entity.MessageTemplateGroup;
|
||||
import cn.axzo.msg.center.message.service.MessageTemplateGroupService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author cold_blade
|
||||
* @date 2023/10/5
|
||||
* @version 1.0
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class MessageTemplateGroupServiceImpl implements MessageTemplateGroupService {
|
||||
|
||||
private final MessageTemplateGroupDao messageTemplateGroupDao;
|
||||
|
||||
@Override
|
||||
public List<String> listMessageTemplateCodes(String groupNodeCode) {
|
||||
if (StringUtils.isBlank(groupNodeCode)) {
|
||||
log.info("groupNodeCode is blank.");
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return messageTemplateGroupDao.lambdaQuery()
|
||||
.like(MessageTemplateGroup::getPath, groupNodeCode)
|
||||
.eq(MessageTemplateGroup::getIsDelete, 0)
|
||||
.list().stream()
|
||||
.map(MessageTemplateGroup::getTemplateCode)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
@ -3,6 +3,7 @@ package cn.axzo.msg.center.message.service.impl;
|
||||
import cn.axzo.core.utils.converter.BeanConverter;
|
||||
import cn.axzo.msg.center.dal.MessageBaseTemplateDao;
|
||||
import cn.axzo.msg.center.domain.entity.MessageBaseTemplate;
|
||||
import cn.axzo.msg.center.message.domain.dto.MessageTemplateDTO;
|
||||
import cn.axzo.msg.center.message.domain.dto.RawMessageRouterDTO;
|
||||
import cn.axzo.msg.center.message.domain.param.MessageTemplateCreateParam;
|
||||
import cn.axzo.msg.center.message.service.MessageTemplateNewService;
|
||||
@ -10,10 +11,13 @@ import cn.axzo.msg.center.message.service.MessageTemplateRouterService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -33,7 +37,7 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
|
||||
|
||||
@Override
|
||||
public void createTemplate(MessageTemplateCreateParam param) {
|
||||
// TODO: [cold_blade] 模板与分类的关系
|
||||
// TODO: [cold_blade] [P2] 模板与分类的关系
|
||||
messageBaseTemplateDao.save(convert(param));
|
||||
if (CollectionUtils.isNotEmpty(param.getRouters())) {
|
||||
List<RawMessageRouterDTO> routers = param.getRouters().stream()
|
||||
@ -43,6 +47,24 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<MessageTemplateDTO> queryByTemplateCode(String msgTemplateCode) {
|
||||
if (StringUtils.isBlank(msgTemplateCode)) {
|
||||
log.info("msgTemplateCode is blank.");
|
||||
return Optional.empty();
|
||||
}
|
||||
MessageBaseTemplate msgBaseTemplate = messageBaseTemplateDao.lambdaQuery()
|
||||
.eq(MessageBaseTemplate::getCode, msgTemplateCode)
|
||||
.eq(MessageBaseTemplate::getIsDelete, 0)
|
||||
.one();
|
||||
if (Objects.isNull(msgBaseTemplate)) {
|
||||
log.info("not find the [{}] template.", msgTemplateCode);
|
||||
return Optional.empty();
|
||||
}
|
||||
List<RawMessageRouterDTO> routers = messageTemplateRouterService.queryByTemplateCode(msgTemplateCode);
|
||||
return Optional.of(MessageTemplateDTO.from(msgBaseTemplate, routers));
|
||||
}
|
||||
|
||||
private MessageBaseTemplate convert(MessageTemplateCreateParam param) {
|
||||
MessageBaseTemplate template = BeanConverter.convert(param, MessageBaseTemplate.class);
|
||||
template.setName(param.getTemplateName());
|
||||
|
||||
@ -26,7 +26,7 @@ import java.util.stream.Collectors;
|
||||
@RequiredArgsConstructor
|
||||
public class MessageTemplateRouterServiceImpl implements MessageTemplateRouterService {
|
||||
|
||||
private final MessageTemplateRouterDao messageTemplateRouterDAO;
|
||||
private final MessageTemplateRouterDao messageTemplateRouterDao;
|
||||
|
||||
@Override
|
||||
public List<RawMessageRouterDTO> queryByTemplateCode(String templateCode) {
|
||||
@ -34,7 +34,7 @@ public class MessageTemplateRouterServiceImpl implements MessageTemplateRouterSe
|
||||
log.warn("the template code is blank.");
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return messageTemplateRouterDAO.listByTemplateCode(templateCode).stream()
|
||||
return messageTemplateRouterDao.listByTemplateCode(templateCode).stream()
|
||||
.map(RawMessageRouterDTO::from)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
@ -47,6 +47,6 @@ public class MessageTemplateRouterServiceImpl implements MessageTemplateRouterSe
|
||||
List<MessageTemplateRouter> messageTemplateRouters = routers.stream()
|
||||
.map(RawMessageRouterDTO::toMessageTemplateRouter)
|
||||
.collect(Collectors.toList());
|
||||
messageTemplateRouterDAO.saveBatch(messageTemplateRouters);
|
||||
messageTemplateRouterDao.saveBatch(messageTemplateRouters);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,25 +2,34 @@ package cn.axzo.msg.center.message.service.impl;
|
||||
|
||||
import cn.axzo.core.utils.converter.BeanConverter;
|
||||
import cn.axzo.msg.center.common.enums.TableIsDeleteEnum;
|
||||
import cn.axzo.msg.center.common.exception.ServiceException;
|
||||
import cn.axzo.msg.center.dal.MessageTemplateRouterDao;
|
||||
import cn.axzo.msg.center.dal.PendingMessageRecordDao;
|
||||
import cn.axzo.msg.center.domain.entity.PendingMessageRecord;
|
||||
import cn.axzo.msg.center.message.domain.dto.MessageGroupNodeDTO;
|
||||
import cn.axzo.msg.center.message.domain.dto.MessageTemplateDTO;
|
||||
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.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.QueryOrderByDTO;
|
||||
import cn.axzo.msg.center.service.enums.PendingMessageRoleCategoryEnum;
|
||||
import cn.axzo.msg.center.service.enums.PendingMessageStateEnum;
|
||||
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
|
||||
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.PendingMessageResponse;
|
||||
import cn.axzo.msg.center.utils.MessageRouterUtil;
|
||||
import cn.axzo.msg.center.utils.UUIDUtil;
|
||||
import cn.azxo.framework.common.model.Page;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@ -44,6 +53,8 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
||||
|
||||
private final PendingMessageRecordDao pendingMessageRecordDao;
|
||||
private final MessageTemplateRouterDao messageTemplateRouterDao;
|
||||
private final MessageTemplateNewService messageTemplateNewService;
|
||||
private final MessageTemplateGroupService messageTemplateGroupService;
|
||||
|
||||
@Override
|
||||
public List<MessageGroupNodeDTO> groupStatistic(MessageGroupNodeStatisticParam param) {
|
||||
@ -53,8 +64,47 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
||||
|
||||
@Override
|
||||
public Page<PendingMessageResponse> pageQuery(PendingMessagePageRequest request) {
|
||||
// TODO: [cold_blade] 消息分页查询
|
||||
return null;
|
||||
LambdaQueryChainWrapper<PendingMessageRecord> query = pendingMessageRecordDao.lambdaQuery();
|
||||
if (Objects.equals(request.getRoleCategory(), PendingMessageRoleCategoryEnum.PROMOTER)) {
|
||||
// 客户端指定查询代办发起者的代办消息
|
||||
query.eq(PendingMessageRecord::getPromoterPersonId, request.getPersonId());
|
||||
if (Objects.equals(request.getWithIdentify(), true)) {
|
||||
// 客户端查询消息时需要隔离身份
|
||||
query.eq(Objects.nonNull(request.getIdentityId()), PendingMessageRecord::getPromoterId,
|
||||
request.getIdentityId());
|
||||
query.eq(Objects.nonNull(request.getIdentityType()), PendingMessageRecord::getPromoterType,
|
||||
request.getIdentityType());
|
||||
}
|
||||
} else {
|
||||
// 客户端未指定代办角色,默认查询代办执行者的代办消息
|
||||
query.eq(PendingMessageRecord::getExecutorPersonId, request.getPersonId());
|
||||
if (Objects.equals(request.getWithIdentify(), true)) {
|
||||
// 客户端查询消息时需要隔离身份
|
||||
query.eq(Objects.nonNull(request.getIdentityId()), PendingMessageRecord::getExecutorId,
|
||||
request.getIdentityId());
|
||||
query.eq(Objects.nonNull(request.getIdentityType()), PendingMessageRecord::getExecutorType,
|
||||
request.getIdentityType());
|
||||
}
|
||||
}
|
||||
query.eq(Objects.nonNull(request.getMsgState()), PendingMessageRecord::getState, request.getMsgState());
|
||||
// 模板的分类,对代办进行分组过滤
|
||||
if (StringUtils.isNotBlank(request.getGroupNodeCode())) {
|
||||
List<String> templateCodes = messageTemplateGroupService
|
||||
.listMessageTemplateCodes(request.getGroupNodeCode());
|
||||
query.in(CollectionUtils.isNotEmpty(templateCodes), PendingMessageRecord::getTemplateCode, templateCodes);
|
||||
}
|
||||
query.like(StringUtils.isNotBlank(request.getTitle()), PendingMessageRecord::getTitle, request.getTitle());
|
||||
if (CollectionUtils.isNotEmpty(request.getOrderFields())) {
|
||||
for (QueryOrderByDTO orderBy : request.getOrderFields()) {
|
||||
// TODO:[cold_blade] [P2] 排序优化
|
||||
}
|
||||
}
|
||||
IPage<PendingMessageRecord> page = request.toPage();
|
||||
IPage<PendingMessageRecord> result = pendingMessageRecordDao.page(page, query);
|
||||
List<PendingMessageResponse> responseRecords = result.getRecords().stream()
|
||||
.map(e -> convert(e, request.getTerminalType()).toResponse())
|
||||
.collect(Collectors.toList());
|
||||
return Page.toPage(request.getPage(), request.getPageSize(), result.getTotal(), responseRecords);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -67,9 +117,11 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String push(PendingMessagePushRequest request) {
|
||||
// TODO: [cold_blade] 消息推送
|
||||
PendingMessageRecord record = convert(request);
|
||||
public String push(PendingMessagePushParam param) {
|
||||
MessageTemplateDTO msgTemplate = messageTemplateNewService
|
||||
.queryByTemplateCode(param.getTemplateCode())
|
||||
.orElseThrow(() -> new ServiceException("not found message template."));
|
||||
PendingMessageRecord record = convert(param, msgTemplate);
|
||||
pendingMessageRecordDao.save(record);
|
||||
return record.getIdentityCode();
|
||||
}
|
||||
@ -118,30 +170,32 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
||||
MessageRouterUtil.parseRouteUrl(router, pendingMessageRecord.getRouterParams());
|
||||
pendingMessage.setRouter(router);
|
||||
}
|
||||
// TODO: [cold_blade] [P1] 卡片信息的补充
|
||||
return pendingMessage;
|
||||
}
|
||||
|
||||
private PendingMessageRecord convert(PendingMessagePushRequest request) {
|
||||
private PendingMessageRecord convert(PendingMessagePushParam param, MessageTemplateDTO msgTemplate) {
|
||||
// TODO: [cold_blade] [P2] 待优化
|
||||
PendingMessageRecord record = new PendingMessageRecord();
|
||||
record.setIdentityCode(UUIDUtil.uuidString());
|
||||
record.setPromoterId(request.getPromoter().getIdentity().getId());
|
||||
record.setPromoterType(request.getPromoter().getIdentity().getType());
|
||||
record.setPromoterPersonId(request.getPromoter().getId());
|
||||
record.setExecutorId(request.getExecutor().getIdentity().getId());
|
||||
record.setExecutorType(request.getExecutor().getIdentity().getType());
|
||||
record.setExecutorPersonId(request.getExecutor().getId());
|
||||
record.setTemplateCode(request.getTemplateCode());
|
||||
record.setTitle("权限点发布申请");
|
||||
record.setContent("${creator}提交了${businessTypeName},请尽快处理。");
|
||||
record.setOrgType(request.getOrgType());
|
||||
record.setOrgId(request.getOrgId());
|
||||
record.setOrgName(request.getOrgName());
|
||||
record.setPromoterId(param.getPromoter().getIdentity().getId());
|
||||
record.setPromoterType(param.getPromoter().getIdentity().getType());
|
||||
record.setPromoterPersonId(param.getPromoter().getId());
|
||||
record.setExecutorId(param.getExecutor().getIdentity().getId());
|
||||
record.setExecutorType(param.getExecutor().getIdentity().getType());
|
||||
record.setExecutorPersonId(param.getExecutor().getId());
|
||||
record.setTemplateCode(param.getTemplateCode());
|
||||
record.setTitle(msgTemplate.getTitle());
|
||||
record.setContent(msgTemplate.getContent());
|
||||
record.setOrgType(param.getOrgType());
|
||||
record.setOrgId(param.getOrgId());
|
||||
record.setOrgName(param.getOrgName());
|
||||
record.setState(PendingMessageStateEnum.HAS_BEEN_SENT);
|
||||
record.setBizCategory(request.getBizCategory());
|
||||
record.setBizCode(request.getBizCode());
|
||||
record.setSubBizCode(request.getSubBizCode());
|
||||
record.setBizDesc(request.getBizDesc());
|
||||
record.setRouterParams(request.getRouterParams());
|
||||
record.setBizCategory(param.getBizCategory());
|
||||
record.setBizCode(param.getBizCode());
|
||||
record.setSubBizCode(param.getSubBizCode());
|
||||
record.setBizDesc(param.getBizDesc());
|
||||
record.setRouterParams(param.getRouterParams());
|
||||
Date now = new Date();
|
||||
record.setCreateAt(now);
|
||||
record.setUpdateAt(now);
|
||||
|
||||
@ -5,7 +5,9 @@ import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.ZoneOffset;
|
||||
import java.util.Date;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* @description
|
||||
@ -22,4 +24,10 @@ public final class DateFormatUtil {
|
||||
ZoneId zoneId = ZoneId.systemDefault();
|
||||
return date.toInstant().atZone(zoneId).toLocalDateTime();
|
||||
}
|
||||
|
||||
public static long toTimestamp(LocalDateTime dateTime) {
|
||||
return Optional.ofNullable(dateTime)
|
||||
.map(v -> v.atZone(ZoneOffset.systemDefault()).toInstant().toEpochMilli())
|
||||
.orElse(0L);
|
||||
}
|
||||
}
|
||||
|
||||
@ -15,7 +15,7 @@ import lombok.Getter;
|
||||
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public enum PendingMessageRoleCategoryEnum {
|
||||
|
||||
PROMOTER("发起者"), CREATOR("创建者"), EXECUTOR("执行者"),
|
||||
PROMOTER("发起者"), EXECUTOR("执行者"),
|
||||
;
|
||||
|
||||
private final String desc;
|
||||
|
||||
@ -59,7 +59,6 @@ public class PendingMessagePageRequest extends PageRequest implements Serializab
|
||||
/**
|
||||
* 代办角色
|
||||
* PROMOTER: 发起者
|
||||
* CREATOR: 创建者
|
||||
* EXECUTOR: 执行者
|
||||
*/
|
||||
private PendingMessageRoleCategoryEnum roleCategory;
|
||||
@ -85,6 +84,8 @@ public class PendingMessagePageRequest extends PageRequest implements Serializab
|
||||
*/
|
||||
private Collection<QueryOrderByDTO> orderFields;
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JSON.toJSONString(this);
|
||||
|
||||
@ -3,7 +3,10 @@ package cn.axzo.msg.center.service.pending.response;
|
||||
import cn.axzo.msg.center.service.dto.IdentityDTO;
|
||||
import cn.axzo.msg.center.service.dto.MessageRouterDTO;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
@ -17,6 +20,9 @@ import java.io.Serializable;
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PendingMessageResponse implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -4133864010679470398L;
|
||||
|
||||
@ -0,0 +1,17 @@
|
||||
package cn.axzo.msg.center.dal;
|
||||
|
||||
import cn.axzo.msg.center.dal.mapper.MessageTemplateGroupMapper;
|
||||
import cn.axzo.msg.center.domain.entity.MessageTemplateGroup;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author cold_blade
|
||||
* @date 2023/10/5
|
||||
* @version 1.0
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class MessageTemplateGroupDao extends ServiceImpl<MessageTemplateGroupMapper, MessageTemplateGroup> {
|
||||
}
|
||||
@ -28,9 +28,9 @@ public class MessageTemplateGroup extends BaseEntity<MessageTemplateGroup> imple
|
||||
*/
|
||||
private String templateCode;
|
||||
/**
|
||||
* 分组code
|
||||
* 分类路径
|
||||
*/
|
||||
private String groupCode;
|
||||
private String path;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user