diff --git a/agt-module-system/agt-module-system-api/src/main/java/org/agt/module/system/api/mail/MailSendApi.java b/agt-module-system/agt-module-system-api/src/main/java/org/agt/module/system/api/mail/MailSendApi.java index 0a62da9..f145ef8 100644 --- a/agt-module-system/agt-module-system-api/src/main/java/org/agt/module/system/api/mail/MailSendApi.java +++ b/agt-module-system/agt-module-system-api/src/main/java/org/agt/module/system/api/mail/MailSendApi.java @@ -21,6 +21,10 @@ public interface MailSendApi { @Operation(summary = "发送单条邮件给 Admin 用户", description = "在 mail 为空时,使用 userId 加载对应 Admin 的邮箱") CommonResult sendSingleMailToAdmin(@Valid @RequestBody MailSendSingleToUserReqDTO reqDTO); + @PostMapping(PREFIX + "/send-single-admins") + @Operation(summary = "发送单条邮件多个内容给 Admin 用户", description = "在 mail 为空时,使用 userId 加载对应 Admin 的邮箱") + CommonResult sendSingleMailToAdmins(@Valid @RequestBody MailSendSingleToUserReqDTO reqDTO); + @PostMapping(PREFIX + "/send-single-member") @Operation(summary = "发送单条邮件给 Member 用户", description = "在 mail 为空时,使用 userId 加载对应 Member 的邮箱") CommonResult sendSingleMailToMember(@Valid @RequestBody MailSendSingleToUserReqDTO reqDTO); diff --git a/agt-module-system/agt-module-system-api/src/main/java/org/agt/module/system/api/mail/dto/MailSendSingleToUserReqDTO.java b/agt-module-system/agt-module-system-api/src/main/java/org/agt/module/system/api/mail/dto/MailSendSingleToUserReqDTO.java index f6819fd..ceff2db 100644 --- a/agt-module-system/agt-module-system-api/src/main/java/org/agt/module/system/api/mail/dto/MailSendSingleToUserReqDTO.java +++ b/agt-module-system/agt-module-system-api/src/main/java/org/agt/module/system/api/mail/dto/MailSendSingleToUserReqDTO.java @@ -1,10 +1,11 @@ package org.agt.module.system.api.mail.dto; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; import java.util.Map; @Schema(description = "RPC 服务 - 邮件发送给 Admin 或者 Member 用户 Request DTO") @@ -24,4 +25,6 @@ public class MailSendSingleToUserReqDTO { @Schema(description = "邮件模板参数") private Map templateParams; + @Schema(description = "邮件模板参数列表") + private List> templateParamsList; } diff --git a/agt-module-system/agt-module-system-server/src/main/java/org/agt/module/system/api/mail/MailSendApiImpl.java b/agt-module-system/agt-module-system-server/src/main/java/org/agt/module/system/api/mail/MailSendApiImpl.java index 4ea0f0a..0b89e62 100644 --- a/agt-module-system/agt-module-system-server/src/main/java/org/agt/module/system/api/mail/MailSendApiImpl.java +++ b/agt-module-system/agt-module-system-server/src/main/java/org/agt/module/system/api/mail/MailSendApiImpl.java @@ -23,6 +23,12 @@ public class MailSendApiImpl implements MailSendApi { reqDTO.getTemplateCode(), reqDTO.getTemplateParams())); } + @Override + public CommonResult sendSingleMailToAdmins(MailSendSingleToUserReqDTO reqDTO) { + return success(mailSendService.sendSingleMailToAdmins(reqDTO.getMail(), reqDTO.getUserId(), + reqDTO.getTemplateCode(), reqDTO.getTemplateParamsList())); + } + @Override public CommonResult sendSingleMailToMember(MailSendSingleToUserReqDTO reqDTO) { return success(mailSendService.sendSingleMailToMember(reqDTO.getMail(), reqDTO.getUserId(), diff --git a/agt-module-system/agt-module-system-server/src/main/java/org/agt/module/system/service/mail/MailSendService.java b/agt-module-system/agt-module-system-server/src/main/java/org/agt/module/system/service/mail/MailSendService.java index 691b392..b7643af 100644 --- a/agt-module-system/agt-module-system-server/src/main/java/org/agt/module/system/service/mail/MailSendService.java +++ b/agt-module-system/agt-module-system-server/src/main/java/org/agt/module/system/service/mail/MailSendService.java @@ -2,6 +2,7 @@ package org.agt.module.system.service.mail; import org.agt.module.system.mq.message.mail.MailSendMessage; +import java.util.List; import java.util.Map; /** @@ -24,6 +25,9 @@ public interface MailSendService { Long sendSingleMailToAdmin(String mail, Long userId, String templateCode, Map templateParams); + Long sendSingleMailToAdmins(String mail, Long userId, + String templateCode, List> templateParamsList); + /** * 发送单条邮件给用户 APP 的用户 * @@ -49,6 +53,9 @@ public interface MailSendService { Long sendSingleMail(String mail, Long userId, Integer userType, String templateCode, Map templateParams); + Long sendSingleMails(String mail, Long userId, Integer userType, + String templateCode, List> templateParamsList); + /** * 执行真正的邮件发送 * 注意,该方法仅仅提供给 MQ Consumer 使用 diff --git a/agt-module-system/agt-module-system-server/src/main/java/org/agt/module/system/service/mail/MailSendServiceImpl.java b/agt-module-system/agt-module-system-server/src/main/java/org/agt/module/system/service/mail/MailSendServiceImpl.java index f445b0a..31cc876 100644 --- a/agt-module-system/agt-module-system-server/src/main/java/org/agt/module/system/service/mail/MailSendServiceImpl.java +++ b/agt-module-system/agt-module-system-server/src/main/java/org/agt/module/system/service/mail/MailSendServiceImpl.java @@ -20,6 +20,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.util.List; import java.util.Map; 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); } + @Override + public Long sendSingleMailToAdmins(String mail, Long userId, + String templateCode, List> 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 public Long sendSingleMailToMember(String mail, Long userId, String templateCode, Map templateParams) { @@ -112,6 +127,35 @@ public class MailSendServiceImpl implements MailSendService { return sendLogId; } + @Override + public Long sendSingleMails(String mail, Long userId, Integer userType, + String templateCode, List> templateParamsList) { + // 校验邮箱模版是否合法 + MailTemplateDO template = validateMailTemplate(templateCode); + // 校验邮箱账号是否合法 + MailAccountDO account = validateMailAccount(template.getAccountId()); + + // 校验邮箱是否存在 + mail = validateMail(mail); + String content = ""; + for (Map 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 public void doSendMail(MailSendMessage message) { // 1. 创建发送账号