本文主要是介绍芋道----工作流中添加邮件通知,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、配置邮件发送的账号
2、编辑邮件的内容模板
如何新建邮箱,直接查看芋道官网即可,已经讲解的很详细了,可以直接点击下方链接
邮件配置 | ruoyi-vue-pro 开发指南 (iocoder.cn)https://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、调用:
这篇关于芋道----工作流中添加邮件通知的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!