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

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.hqwc.cn/news/685883.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android项目转为鸿蒙,真就这么简单?

最近做了一个有关Android转换成鸿蒙的项目。经不少开发者的反馈&#xff1b;许多公司的业务都增加了鸿蒙板块。 对此想分享一下这个项目转换的流程结构&#xff0c;希望能够给大家在工作中带来一些帮助。转换流程示意图如下&#xff1a; 下面我就给大家介绍&#xff0c;Android…

26、Qt使用QFontDatabase类加载ttf文件更改图标颜色

一、图标下载 iconfont-阿里巴巴矢量图标库 点击上面的链接&#xff0c;在打开的网页中搜索自己要使用的图标&#xff0c;如&#xff1a;最大化 找到一个自己想用图标&#xff0c;选择“添加入库” 点击“购物车”图标 能看到刚才添加的图标&#xff0c;点击“下载代码”(需要…

手撕C语言题典——移除链表元素(单链表)

目录 前言 一.思路 1&#xff09;遍历原链表&#xff0c;找到值为 val 的节点并释放 2&#xff09;创建新链表 二.代码实现 1)大胆去try一下思路 2&#xff09;竟然报错了&#xff1f;&#xff01; 3&#xff09;完善之后的成品代码 搭配食用更佳哦~~ 数据结构之单…

双向链表(详解)

在单链表专题中我们提到链表的分类&#xff0c;其中提到了带头双向循环链表&#xff0c;今天小编将详细讲下双向链表。 话不多说&#xff0c;直接上货。 1.双向链表的结构 带头双向循环链表 注意 这几的“带头”跟前面我们说的“头节点”是两个概念&#xff0c;实际前面的在…

【机器学习与实现】线性回归分析

目录 一、相关和回归的概念&#xff08;一&#xff09;变量间的关系&#xff08;二&#xff09;Pearson&#xff08;皮尔逊&#xff09;相关系数 二、线性回归的概念和方程&#xff08;一&#xff09;回归分析概述&#xff08;二&#xff09;线性回归方程 三、线性回归模型的损…

vue开发网站—①调用$notify弹窗、②$notify弹窗层级问题、③js判断两个数组是否相同等。

一、vue中如何使用vant的 $notify&#xff08;展示通知&#xff09; 在Vue中使用Vant组件库的$notify方法来展示通知&#xff0c;首先确保正确安装了Vant并在项目中引入了Notify组件。 1.安装vant npm install vant --save# 或者使用yarn yarn add vant2.引入&#xff1a;在ma…

springboot整合redis多数据源(附带RedisUtil)

单数据源RedisUtil(静态) 单数据源RedisUtil,我这里implements ApplicationContextAware在setApplicationContext注入redisTemplate,工具类可以直接类RedisUtil.StringOps.get()使用 package com.vehicle.manager.core.util;import com.alibaba.fastjson.JSON; import lombok.e…

信息系统项目管理基础

目录 一、项目管理概论 1、定义 2、项目管理的十二原则 3、SMART原则 4、项目经理 5、项目的生命周期 二、项目立项管理 1、项目启动过程 三、项目整合管理 1、管理基础 2、项目整合管理过程 ①制定项目章程 ②制定项目管理计划 ③指导与管理项目工作 ④管理项目…

stm32之hal库spi驱动封装(实现阻塞,中断,dma三种方式)

前言 配置功能参考rt-thread驱动代码将中断配置和dma配置单独分开管理 代码 中断管理 头文件 /** Copyright (c) 2024-2024,shchl** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date Author Notes* 2024-5-3 shchl first version*/#ifnd…

Python图形复刻——绘制母亲节花束

各位小伙伴&#xff0c;好久不见&#xff0c;今天学习用Python绘制花束。 有一种爱&#xff0c;不求回报&#xff0c;有一种情&#xff0c;无私奉献&#xff0c;这就是母爱。祝天下妈妈节日快乐&#xff0c;幸福永远&#xff01; 图形展示&#xff1a; 代码展示&#xff1a; …

06.线程同步

互斥锁&#xff08;互斥量&#xff09; 描述 一个进程下的线程是共享资源的&#xff0c;通信便利的同时也造成了许多麻烦&#xff0c;线程程和线程之间如果同时访问一块资源就会出错&#xff0c;所以要引入一个互斥变量给它加锁&#xff0c;让它去协同不同线程程之间的访问&am…

【软件测试】3.开发模型

目录 1.常见的开发模型 1.1瀑布模型 1.2螺旋模型 1.3增量模型和迭代模型 1.4敏捷模型 1.4.1特点&#xff1a; 1.5Scrum模型&#xff08;三个角色和五个重要会议&#xff09; 1.5.1三个角色&#xff1a; 1.5.2Scrum工作流程&#xff08;五个会议&#xff09; 1.6测试模…