refactor: 支持邮件发送模板组合
This commit is contained in:
@@ -21,6 +21,10 @@ public interface MailSendApi {
|
|||||||
@Operation(summary = "发送单条邮件给 Admin 用户", description = "在 mail 为空时,使用 userId 加载对应 Admin 的邮箱")
|
@Operation(summary = "发送单条邮件给 Admin 用户", description = "在 mail 为空时,使用 userId 加载对应 Admin 的邮箱")
|
||||||
CommonResult<Long> sendSingleMailToAdmin(@Valid @RequestBody MailSendSingleToUserReqDTO reqDTO);
|
CommonResult<Long> sendSingleMailToAdmin(@Valid @RequestBody MailSendSingleToUserReqDTO reqDTO);
|
||||||
|
|
||||||
|
@PostMapping(PREFIX + "/send-single-admins")
|
||||||
|
@Operation(summary = "发送单条邮件多个内容给 Admin 用户", description = "在 mail 为空时,使用 userId 加载对应 Admin 的邮箱")
|
||||||
|
CommonResult<Long> sendSingleMailToAdmins(@Valid @RequestBody MailSendSingleToUserReqDTO reqDTO);
|
||||||
|
|
||||||
@PostMapping(PREFIX + "/send-single-member")
|
@PostMapping(PREFIX + "/send-single-member")
|
||||||
@Operation(summary = "发送单条邮件给 Member 用户", description = "在 mail 为空时,使用 userId 加载对应 Member 的邮箱")
|
@Operation(summary = "发送单条邮件给 Member 用户", description = "在 mail 为空时,使用 userId 加载对应 Member 的邮箱")
|
||||||
CommonResult<Long> sendSingleMailToMember(@Valid @RequestBody MailSendSingleToUserReqDTO reqDTO);
|
CommonResult<Long> sendSingleMailToMember(@Valid @RequestBody MailSendSingleToUserReqDTO reqDTO);
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
package org.agt.module.system.api.mail.dto;
|
package org.agt.module.system.api.mail.dto;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import jakarta.validation.constraints.Email;
|
import jakarta.validation.constraints.Email;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@Schema(description = "RPC 服务 - 邮件发送给 Admin 或者 Member 用户 Request DTO")
|
@Schema(description = "RPC 服务 - 邮件发送给 Admin 或者 Member 用户 Request DTO")
|
||||||
@@ -24,4 +25,6 @@ public class MailSendSingleToUserReqDTO {
|
|||||||
@Schema(description = "邮件模板参数")
|
@Schema(description = "邮件模板参数")
|
||||||
private Map<String, Object> templateParams;
|
private Map<String, Object> templateParams;
|
||||||
|
|
||||||
|
@Schema(description = "邮件模板参数列表")
|
||||||
|
private List<Map<String, Object>> templateParamsList;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,12 @@ public class MailSendApiImpl implements MailSendApi {
|
|||||||
reqDTO.getTemplateCode(), reqDTO.getTemplateParams()));
|
reqDTO.getTemplateCode(), reqDTO.getTemplateParams()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonResult<Long> sendSingleMailToAdmins(MailSendSingleToUserReqDTO reqDTO) {
|
||||||
|
return success(mailSendService.sendSingleMailToAdmins(reqDTO.getMail(), reqDTO.getUserId(),
|
||||||
|
reqDTO.getTemplateCode(), reqDTO.getTemplateParamsList()));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommonResult<Long> sendSingleMailToMember(MailSendSingleToUserReqDTO reqDTO) {
|
public CommonResult<Long> sendSingleMailToMember(MailSendSingleToUserReqDTO reqDTO) {
|
||||||
return success(mailSendService.sendSingleMailToMember(reqDTO.getMail(), reqDTO.getUserId(),
|
return success(mailSendService.sendSingleMailToMember(reqDTO.getMail(), reqDTO.getUserId(),
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package org.agt.module.system.service.mail;
|
|||||||
|
|
||||||
import org.agt.module.system.mq.message.mail.MailSendMessage;
|
import org.agt.module.system.mq.message.mail.MailSendMessage;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -24,6 +25,9 @@ public interface MailSendService {
|
|||||||
Long sendSingleMailToAdmin(String mail, Long userId,
|
Long sendSingleMailToAdmin(String mail, Long userId,
|
||||||
String templateCode, Map<String, Object> templateParams);
|
String templateCode, Map<String, Object> templateParams);
|
||||||
|
|
||||||
|
Long sendSingleMailToAdmins(String mail, Long userId,
|
||||||
|
String templateCode, List<Map<String, Object>> templateParamsList);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送单条邮件给用户 APP 的用户
|
* 发送单条邮件给用户 APP 的用户
|
||||||
*
|
*
|
||||||
@@ -49,6 +53,9 @@ public interface MailSendService {
|
|||||||
Long sendSingleMail(String mail, Long userId, Integer userType,
|
Long sendSingleMail(String mail, Long userId, Integer userType,
|
||||||
String templateCode, Map<String, Object> templateParams);
|
String templateCode, Map<String, Object> templateParams);
|
||||||
|
|
||||||
|
Long sendSingleMails(String mail, Long userId, Integer userType,
|
||||||
|
String templateCode, List<Map<String, Object>> templateParamsList);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 执行真正的邮件发送
|
* 执行真正的邮件发送
|
||||||
* 注意,该方法仅仅提供给 MQ Consumer 使用
|
* 注意,该方法仅仅提供给 MQ Consumer 使用
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import org.springframework.beans.factory.annotation.Value;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.agt.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static org.agt.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
@@ -75,6 +76,20 @@ public class MailSendServiceImpl implements MailSendService {
|
|||||||
return sendSingleMail(mail, userId, UserTypeEnum.ADMIN.getValue(), templateCode, templateParams);
|
return sendSingleMail(mail, userId, UserTypeEnum.ADMIN.getValue(), templateCode, templateParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long sendSingleMailToAdmins(String mail, Long userId,
|
||||||
|
String templateCode, List<Map<String, Object>> templateParamsList) {
|
||||||
|
// 如果 mail 为空,则加载用户编号对应的邮箱
|
||||||
|
if (StrUtil.isEmpty(mail)) {
|
||||||
|
AdminUserDO user = adminUserService.getUser(userId);
|
||||||
|
if (user != null) {
|
||||||
|
mail = user.getEmail();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 执行发送
|
||||||
|
return sendSingleMails(mail, userId, UserTypeEnum.ADMIN.getValue(), templateCode, templateParamsList);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long sendSingleMailToMember(String mail, Long userId,
|
public Long sendSingleMailToMember(String mail, Long userId,
|
||||||
String templateCode, Map<String, Object> templateParams) {
|
String templateCode, Map<String, Object> templateParams) {
|
||||||
@@ -112,6 +127,35 @@ public class MailSendServiceImpl implements MailSendService {
|
|||||||
return sendLogId;
|
return sendLogId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long sendSingleMails(String mail, Long userId, Integer userType,
|
||||||
|
String templateCode, List<Map<String, Object>> templateParamsList) {
|
||||||
|
// 校验邮箱模版是否合法
|
||||||
|
MailTemplateDO template = validateMailTemplate(templateCode);
|
||||||
|
// 校验邮箱账号是否合法
|
||||||
|
MailAccountDO account = validateMailAccount(template.getAccountId());
|
||||||
|
|
||||||
|
// 校验邮箱是否存在
|
||||||
|
mail = validateMail(mail);
|
||||||
|
String content = "";
|
||||||
|
for (Map<String, Object> templateParams : templateParamsList) {
|
||||||
|
validateTemplateParams(template, templateParams);
|
||||||
|
content += mailTemplateService.formatMailTemplateContent(template.getContent(), templateParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建发送日志。如果模板被禁用,则不发送短信,只记录日志
|
||||||
|
Boolean isSend = CommonStatusEnum.ENABLE.getStatus().equals(template.getStatus());
|
||||||
|
String title = mailTemplateService.formatMailTemplateContent(template.getTitle(), templateParamsList.get(0));
|
||||||
|
Long sendLogId = mailLogService.createMailLog(userId, userType, mail,
|
||||||
|
account, template, content, templateParamsList.get(0), isSend);
|
||||||
|
// 发送 MQ 消息,异步执行发送短信
|
||||||
|
if (isSend && mailEnable) {
|
||||||
|
mailProducer.sendMailSendMessage(sendLogId, mail, account.getId(),
|
||||||
|
template.getNickname(), title, content);
|
||||||
|
}
|
||||||
|
return sendLogId;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doSendMail(MailSendMessage message) {
|
public void doSendMail(MailSendMessage message) {
|
||||||
// 1. 创建发送账号
|
// 1. 创建发送账号
|
||||||
|
|||||||
Reference in New Issue
Block a user