1、配置邮件发送的账号
2、编辑邮件的内容模板
如何新建邮箱,直接查看芋道官网即可,已经讲解的很详细了,可以直接点击下方链接
这里我们讲一下如何结合在工作流当中 。
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 {
@Resource
private MailSendApi mailSendApi;
@Resource
private WebProperties webProperties;
@Override
public 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、调用: