芋道----工作流中添加邮件通知

2024-05-11 06:04

本文主要是介绍芋道----工作流中添加邮件通知,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、配置邮件发送的账号

2、编辑邮件的内容模板

如何新建邮箱,直接查看芋道官网即可,已经讲解的很详细了,可以直接点击下方链接

邮件配置 | ruoyi-vue-pro 开发指南 (iocoder.cn)icon-default.png?t=N7T8https://doc.iocoder.cn/mail/#_3-1-%E6%96%B0%E5%BB%BA%E9%82%AE%E7%AE%B1%E8%B4%A6%E5%8F%B7

这里我们讲一下如何结合在工作流当中 。

1、引入依赖

我们编辑好邮箱模板后,即可以使用MailSendApi进行邮件的发送了,首先我们在yudao-module-bpm模块的pom.xml中引入yudao-module-system-api依赖,如图:

<dependency><groupId>cn.iocoder.boot</groupId><artifactId>yudao-module-system-api</artifactId><version>${revision}</version>
</dependency>

2、新建BpmEmailEnum枚举类,用于引入邮箱模板

package cn.iocoder.yudao.module.bpm.enums.mail;import lombok.AllArgsConstructor;
import lombok.Getter;/*** Bpm 消息的枚举** @author 芋道源码*/
@AllArgsConstructor
@Getter
public enum BpmEmailEnum {PROCESS_INSTANCE_APPROVE("bpm_process_instance_approve"), // 流程任务被审批通过时,发送给申请人PROCESS_INSTANCE_REJECT("bpm_process_instance_reject"), // 流程任务被审批不通过时,发送给申请人TASK_ASSIGNED("test01"); // 任务被分配时,发送给审批人/*** 邮箱模板的标识** 关联 EmailTemplateDO 的 code 属性*/private final String emailTemplateCode;}

 2、新建BpmEmailConvert 转换器

由于前台传过来的类型并不完全我们的需求,因此需要进行转换。

package cn.iocoder.yudao.module.bpm.convert.mail;import cn.iocoder.yudao.module.system.api.mail.dto.MailSendSingleToUserReqDTO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;import java.util.Map;@Mapper
public interface BpmEmailConvert {BpmEmailConvert INSTANCE = Mappers.getMapper(BpmEmailConvert.class);@Mapping(target = "mail", ignore = true)@Mapping(source = "userId", target = "userId")@Mapping(source = "templateCode", target = "templateCode")@Mapping(source = "templateParams", target = "templateParams")MailSendSingleToUserReqDTO convert(Long userId, String templateCode, Map<String, Object> templateParams);}

 3、新建dto实体类

   这里以任务被签收为例,实体类按照模板中需要哪些变量来设计如:

package cn.iocoder.yudao.module.bpm.service.email.dto;import lombok.Data;import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;/*** BPM 发送任务被分配 Request DTO*/
@Data
public class BpmEmailSendWhenTaskCreatedReqDTO {/*** 流程实例的编号*/@NotEmpty(message = "流程实例的编号不能为空")private String processInstanceId;/*** 流程实例的名字*/@NotEmpty(message = "流程实例的名字不能为空")private String processInstanceName;@NotNull(message = "发起人的用户编号")private Long startUserId;@NotEmpty(message = "发起人的昵称")private String startUserNickname;/*** 流程任务的编号*/@NotEmpty(message = "流程任务的编号不能为空")private String taskId;/*** 流程任务的名字*/@NotEmpty(message = "流程任务的名字不能为空")private String taskName;/*** 审批人的用户编号*/@NotNull(message = "审批人的用户编号不能为空")private Long assigneeUserId;}

4、Service类:

package cn.iocoder.yudao.module.bpm.service.email;import cn.iocoder.yudao.module.bpm.service.email.dto.BpmEmailSendWhenProcessInstanceApproveReqDTO;
import cn.iocoder.yudao.module.bpm.service.email.dto.BpmEmailSendWhenProcessInstanceRejectReqDTO;
import cn.iocoder.yudao.module.bpm.service.email.dto.BpmEmailSendWhenTaskCreatedReqDTO;import javax.validation.Valid;/*** BPM 消息 Service 接口** TODO 芋艿:未来支持消息的可配置;不同的流程,在什么场景下,需要发送什么消息,消息的内容是什么;** @author 芋道源码*/
public interface BpmEmailService {/*** 发送任务被分配的消息** @param reqDTO 发送信息*/void sendEmailWhenTaskAssigned(@Valid BpmEmailSendWhenTaskCreatedReqDTO reqDTO);}

5、实现类:

package cn.iocoder.yudao.module.bpm.service.email;import cn.iocoder.yudao.framework.web.config.WebProperties;
import cn.iocoder.yudao.module.bpm.convert.mail.BpmEmailConvert;
import cn.iocoder.yudao.module.bpm.convert.message.BpmMessageConvert;
import cn.iocoder.yudao.module.bpm.enums.message.BpmMessageEnum;
import cn.iocoder.yudao.module.bpm.service.email.dto.BpmEmailSendWhenProcessInstanceApproveReqDTO;
import cn.iocoder.yudao.module.bpm.service.email.dto.BpmEmailSendWhenProcessInstanceRejectReqDTO;
import cn.iocoder.yudao.module.bpm.service.email.dto.BpmEmailSendWhenTaskCreatedReqDTO;
import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO;
import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO;
import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO;
import cn.iocoder.yudao.module.system.api.mail.MailSendApi;
import cn.iocoder.yudao.module.system.api.sms.SmsSendApi;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;/*** BPM 消息 Service 实现类** @author 芋道源码*/
@Service
@Validated
@Slf4j
public class BpmEmailServiceImpl implements BpmEmailService {@Resourceprivate MailSendApi mailSendApi;@Resourceprivate WebProperties webProperties;@Overridepublic void sendEmailWhenTaskAssigned(BpmEmailSendWhenTaskCreatedReqDTO reqDTO) {Map<String, Object> templateParams = new HashMap<>();templateParams.put("processInstanceName", reqDTO.getProcessInstanceName());templateParams.put("taskName", reqDTO.getTaskName());templateParams.put("startUserNickname", reqDTO.getStartUserNickname());templateParams.put("detailUrl", getProcessInstanceDetailUrl(reqDTO.getProcessInstanceId()));mailSendApi.sendSingleMailToAdmin(BpmEmailConvert.INSTANCE.convert(reqDTO.getAssigneeUserId(),BpmMessageEnum.TASK_ASSIGNED.getSmsTemplateCode(), templateParams));}private String getProcessInstanceDetailUrl(String taskId) {return webProperties.getAdminUi().getUrl() + "/bpm/process-instance/detail?id=" + taskId;}}

6、调用:

这篇关于芋道----工作流中添加邮件通知的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/978708

相关文章

C#利用Free Spire.XLS for .NET复制Excel工作表

《C#利用FreeSpire.XLSfor.NET复制Excel工作表》在日常的.NET开发中,我们经常需要操作Excel文件,本文将详细介绍C#如何使用FreeSpire.XLSfor.NET... 目录1. 环境准备2. 核心功能3. android示例代码3.1 在同一工作簿内复制工作表3.2 在不同

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2