Commit 1464f7d399de68de75a6fb84aef8b58783982a16
1 parent
63983bba
code review 邮箱的实现代码
Showing
10 changed files
with
52 additions
and
44 deletions
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/test/TestDemoServiceImpl.java
| ... | ... | @@ -79,7 +79,7 @@ public class TestDemoServiceImpl implements TestDemoService { |
| 79 | 79 | |
| 80 | 80 | @Override |
| 81 | 81 | public PageResult<TestDemoDO> getTestDemoPage(TestDemoPageReqVO pageReqVO) { |
| 82 | -// testDemoMapper.selectList2(); | |
| 82 | + testDemoMapper.selectList2(); | |
| 83 | 83 | return testDemoMapper.selectPage(pageReqVO); |
| 84 | 84 | } |
| 85 | 85 | ... | ... |
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java
| ... | ... | @@ -128,7 +128,7 @@ public interface ErrorCodeConstants { |
| 128 | 128 | ErrorCode MAIL_ACCOUNT_EXISTS = new ErrorCode(1002020001, "邮箱账号存在"); |
| 129 | 129 | |
| 130 | 130 | // ========== 邮箱模版 1002021000 ========== |
| 131 | - ErrorCode MAIL_TEMPLATE_NOT_EXISTS = new ErrorCode(1002021000 , "邮箱模版不存在"); | |
| 131 | + ErrorCode MAIL_TEMPLATE_NOT_EXISTS = new ErrorCode(1002021000, "邮箱模版不存在"); | |
| 132 | 132 | ErrorCode MAIL_TEMPLATE_EXISTS = new ErrorCode(1002021001, "邮箱模版存在"); |
| 133 | 133 | ErrorCode MAIL_ACCOUNT_RELATE_TEMPLATE_EXISTS = new ErrorCode(1002021002, "存在关联邮箱模版"); |
| 134 | 134 | ... | ... |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/vo/log/MailLogPageReqVO.java
| ... | ... | @@ -17,6 +17,9 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ |
| 17 | 17 | @EqualsAndHashCode(callSuper = true) |
| 18 | 18 | @ToString(callSuper = true) |
| 19 | 19 | public class MailLogPageReqVO extends PageParam { |
| 20 | + | |
| 21 | + // TODO @wangjingyi:required 为 false 时,它是默认值,所以不用谢 | |
| 22 | + | |
| 20 | 23 | @ApiModelProperty(value = "邮箱" , required = false , example = "yudaoyuanma@123.com") |
| 21 | 24 | private String from; |
| 22 | 25 | ... | ... |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/vo/send/MailReqVO.java
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/mail/MailTemplateConvert.java
| ... | ... | @@ -11,6 +11,7 @@ import java.util.List; |
| 11 | 11 | |
| 12 | 12 | @Mapper |
| 13 | 13 | public interface MailTemplateConvert { |
| 14 | + | |
| 14 | 15 | MailTemplateConvert INSTANCE = Mappers.getMapper(MailTemplateConvert.class); |
| 15 | 16 | |
| 16 | 17 | MailTemplateDO convert(MailTemplateBaseVO baseVO); |
| ... | ... | @@ -20,4 +21,5 @@ public interface MailTemplateConvert { |
| 20 | 21 | PageResult<MailTemplateRespVO> convertPage(PageResult<MailTemplateDO> pageResult); |
| 21 | 22 | |
| 22 | 23 | List<MailTemplateRespVO> convertList02(List<MailTemplateDO> list); |
| 24 | + | |
| 23 | 25 | } | ... | ... |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/mail/MailLogDO.java
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailLogService.java
| ... | ... | @@ -20,37 +20,38 @@ public interface MailLogService { |
| 20 | 20 | /** |
| 21 | 21 | * 邮箱日志分页 |
| 22 | 22 | * |
| 23 | - * @param pageVO | |
| 24 | - * @return | |
| 23 | + * @param pageVO 分页参数 | |
| 24 | + * @return 分页结果 | |
| 25 | 25 | */ |
| 26 | 26 | PageResult<MailLogDO> getMailLogPage(MailLogPageReqVO pageVO); |
| 27 | 27 | |
| 28 | 28 | /** |
| 29 | 29 | * 邮箱日志数组信息 |
| 30 | 30 | * |
| 31 | - * @param exportReqVO | |
| 32 | - * @return | |
| 31 | + * @param exportReqVO 导出筛选请求 | |
| 32 | + * @return 导出的日志数据 | |
| 33 | 33 | */ |
| 34 | 34 | List<MailLogDO> getMailLogList(MailLogExportReqVO exportReqVO); |
| 35 | 35 | |
| 36 | 36 | /** |
| 37 | 37 | * 创建邮箱日志 |
| 38 | 38 | * |
| 39 | - * @param mailAccountDO 邮箱账号信息 | |
| 40 | - * @param mailTemplateDO 模版信息 | |
| 41 | - * @param from 邮箱 | |
| 42 | - * @param content 内容 | |
| 43 | - * @param tos 收件人 | |
| 44 | - * @param title 标题 | |
| 45 | - * @param isSend 是否发送成功 | |
| 39 | + * @param mailAccountDO 邮箱账号信息 | |
| 40 | + * @param template 模版信息 | |
| 41 | + * @param from 邮箱 | |
| 42 | + * @param content 内容 | |
| 43 | + * @param tos 收件人 | |
| 44 | + * @param title 标题 | |
| 45 | + * @param isSend 是否发送成功 | |
| 46 | 46 | */ |
| 47 | - Long createMailLog(MailAccountDO mailAccountDO, MailTemplateDO mailTemplateDO, String from, String content, List<String> tos, String title, Boolean isSend); | |
| 47 | + Long createMailLog(MailAccountDO mailAccountDO, MailTemplateDO template, String from, String content, List<String> tos, String title, Boolean isSend); | |
| 48 | 48 | |
| 49 | 49 | /** |
| 50 | 50 | * 更新邮件发送结果 |
| 51 | 51 | * |
| 52 | - * @param logId 发送日志Id | |
| 53 | - * @param result 发送结果 默认返回messageId | |
| 52 | + * @param logId 发送日志Id | |
| 53 | + * @param result 发送结果 默认返回messageId | |
| 54 | 54 | */ |
| 55 | 55 | void updateMailSendResult(Long logId, String result); |
| 56 | + | |
| 56 | 57 | } | ... | ... |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailTemplateService.java
| 1 | 1 | package cn.iocoder.yudao.module.system.service.mail; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 4 | -import cn.iocoder.yudao.module.system.controller.admin.mail.vo.send.MailReqVO; | |
| 5 | 4 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateCreateReqVO; |
| 6 | 5 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO; |
| 7 | 6 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateUpdateReqVO; |
| ... | ... | @@ -68,8 +67,9 @@ public interface MailTemplateService { |
| 68 | 67 | * @return 模版数组 |
| 69 | 68 | */ |
| 70 | 69 | List<MailTemplateDO> getMailTemplateList(); |
| 70 | + | |
| 71 | 71 | /** |
| 72 | - *从缓存中获取邮箱模版 | |
| 72 | + * 从缓存中获取邮箱模版 | |
| 73 | 73 | * |
| 74 | 74 | * @param code 模板编码 |
| 75 | 75 | * @return 邮箱模板 |
| ... | ... | @@ -78,9 +78,11 @@ public interface MailTemplateService { |
| 78 | 78 | |
| 79 | 79 | /** |
| 80 | 80 | * 邮件模版内容合成 |
| 81 | + * | |
| 81 | 82 | * @param content 邮箱模版 |
| 82 | 83 | * @param params 合成参数 |
| 83 | - * @return | |
| 84 | + * @return 格式化后的内容 | |
| 84 | 85 | */ |
| 85 | 86 | String formatMailTemplateContent(String content, Map<String, String> params); |
| 87 | + | |
| 86 | 88 | } | ... | ... |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/mail/impl/MailLogServiceImpl.java
| ... | ... | @@ -27,6 +27,7 @@ import java.util.Objects; |
| 27 | 27 | @Validated |
| 28 | 28 | public class MailLogServiceImpl implements MailLogService { |
| 29 | 29 | |
| 30 | + // TODO @wangjingyi:private,然后使用 @Resource | |
| 30 | 31 | @Autowired |
| 31 | 32 | MailLogMapper mailLogMapper; |
| 32 | 33 | |
| ... | ... | @@ -41,25 +42,34 @@ public class MailLogServiceImpl implements MailLogService { |
| 41 | 42 | } |
| 42 | 43 | |
| 43 | 44 | @Override |
| 44 | - public Long createMailLog(MailAccountDO mailAccountDO , MailTemplateDO mailTemplateDO , String from, String content, List<String> tos, String title, Boolean isSend) { | |
| 45 | + public Long createMailLog(MailAccountDO mailAccountDO, MailTemplateDO template, String from, String content, List<String> tos, String title, Boolean isSend) { | |
| 45 | 46 | MailLogDO.MailLogDOBuilder logDOBuilder = MailLogDO.builder(); |
| 47 | + // TODO @wangjingyi:使用 builder 的时候,不用每个 set 是一行。 | |
| 48 | + // 根据是否要发送,设置状态 | |
| 49 | + logDOBuilder.sendStatus(Objects.equals(isSend, true) ? MailSendStatusEnum.INIT.getStatus() | |
| 50 | + : MailSendStatusEnum.IGNORE.getStatus()); | |
| 51 | + // 设置邮箱相关字段 | |
| 52 | + // TODO @wangjingyi:userId、userType | |
| 46 | 53 | logDOBuilder.fromAddress(mailAccountDO.getFromAddress()); |
| 47 | 54 | logDOBuilder.accountId(mailAccountDO.getId()); |
| 48 | - logDOBuilder.content(content); | |
| 49 | - logDOBuilder.title(title); | |
| 50 | - logDOBuilder.templateCode(mailTemplateDO.getCode()); | |
| 51 | - logDOBuilder.templateId(mailTemplateDO.getId()); | |
| 55 | + // TODO @wangjingyi:每个接收人一条日志。发送多个人,就调用多次,业务方。因为某个邮箱有问题,会导致所有都发送失败。 | |
| 52 | 56 | logDOBuilder.to(tos.toString()); |
| 57 | + // 设置模板相关字段 | |
| 58 | + // TODO @wangjingyi:可以参考下 sms 短信的逻辑,templateContent、templateParams | |
| 59 | + logDOBuilder.templateId(template.getId()); | |
| 60 | + logDOBuilder.templateCode(template.getCode()); | |
| 61 | + logDOBuilder.title(title); | |
| 62 | + logDOBuilder.content(content); | |
| 63 | + // TODO @wangjingyi:有结果的时候,才是 sendTime 哈 | |
| 53 | 64 | logDOBuilder.sendTime(new Date()); |
| 54 | - logDOBuilder.sendStatus(Objects.equals(isSend, true) ? MailSendStatusEnum.INIT.getStatus() | |
| 55 | - : MailSendStatusEnum.IGNORE.getStatus()); | |
| 56 | 65 | |
| 57 | - MailLogDO mailLogDO = logDOBuilder.build(); | |
| 58 | - mailLogMapper.insert(mailLogDO); | |
| 59 | - return mailLogDO.getId(); | |
| 66 | + // 插入数据库 | |
| 67 | + MailLogDO logDO = logDOBuilder.build(); | |
| 68 | + mailLogMapper.insert(logDO); | |
| 69 | + return logDO.getId(); | |
| 60 | 70 | } |
| 61 | 71 | |
| 62 | - // TODO @wangjingyi:不需要返回 id 呀 DONE | |
| 72 | + // TODO @wangjingyi:还是加几个字段哈,日志上。sendStatus,成功、失败;messageId 消息标号。sendException 记录发送的异常。这样界面才好筛选邮件的发送结果。 | |
| 63 | 73 | @Override |
| 64 | 74 | public void updateMailSendResult(Long logId, String result) { |
| 65 | 75 | MailLogDO.MailLogDOBuilder logDOBuilder = MailLogDO.builder(); | ... | ... |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/mail/impl/MailTemplateServiceImpl.java
| ... | ... | @@ -3,20 +3,13 @@ package cn.iocoder.yudao.module.system.service.mail.impl; |
| 3 | 3 | |
| 4 | 4 | import cn.hutool.core.collection.CollUtil; |
| 5 | 5 | import cn.hutool.core.util.StrUtil; |
| 6 | -import cn.hutool.extra.mail.MailAccount; | |
| 7 | -import cn.hutool.extra.mail.MailUtil; | |
| 8 | 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 9 | 7 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 10 | -import cn.iocoder.yudao.module.system.controller.admin.mail.vo.send.MailReqVO; | |
| 11 | 8 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateCreateReqVO; |
| 12 | 9 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO; |
| 13 | 10 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateUpdateReqVO; |
| 14 | -import cn.iocoder.yudao.module.system.convert.mail.MailAccountConvert; | |
| 15 | 11 | import cn.iocoder.yudao.module.system.convert.mail.MailTemplateConvert; |
| 16 | -import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; | |
| 17 | 12 | import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO; |
| 18 | -import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO; | |
| 19 | -import cn.iocoder.yudao.module.system.dal.mysql.mail.MailAccountMapper; | |
| 20 | 13 | import cn.iocoder.yudao.module.system.dal.mysql.mail.MailTemplateMapper; |
| 21 | 14 | import cn.iocoder.yudao.module.system.mq.producer.mail.MailProducer; |
| 22 | 15 | import cn.iocoder.yudao.module.system.service.mail.MailTemplateService; |
| ... | ... | @@ -36,7 +29,7 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_TEMPL |
| 36 | 29 | import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_TEMPLATE_NOT_EXISTS; |
| 37 | 30 | |
| 38 | 31 | /** |
| 39 | - * 邮箱模版 服务实现类 | |
| 32 | + * 邮箱模版 Service 实现类 | |
| 40 | 33 | * |
| 41 | 34 | * @author wangjingyi |
| 42 | 35 | * @since 2022-03-21 |
| ... | ... | @@ -48,6 +41,7 @@ public class MailTemplateServiceImpl implements MailTemplateService { |
| 48 | 41 | |
| 49 | 42 | @Resource |
| 50 | 43 | private MailTemplateMapper mailTemplateMapper; |
| 44 | + | |
| 51 | 45 | @Resource |
| 52 | 46 | private MailProducer mailProducer; |
| 53 | 47 | |
| ... | ... | @@ -61,7 +55,6 @@ public class MailTemplateServiceImpl implements MailTemplateService { |
| 61 | 55 | |
| 62 | 56 | private volatile Date maxUpdateTime; |
| 63 | 57 | |
| 64 | - // TODO @wangjingyi:参考下别的模块的 initLocalCache 的实现 DONE | |
| 65 | 58 | @Override |
| 66 | 59 | @PostConstruct |
| 67 | 60 | public void initLocalCache() { |
| ... | ... | @@ -78,8 +71,8 @@ public class MailTemplateServiceImpl implements MailTemplateService { |
| 78 | 71 | |
| 79 | 72 | @Override |
| 80 | 73 | public Long create(MailTemplateCreateReqVO createReqVO) { |
| 81 | - //要校验存在 | |
| 82 | - this.validateMailTemplateExists(createReqVO.getId()); | |
| 74 | + // 要校验存在 | |
| 75 | + validateMailTemplateExists(createReqVO.getId()); | |
| 83 | 76 | MailTemplateDO mailTemplateDO = MailTemplateConvert.INSTANCE.convert(createReqVO); |
| 84 | 77 | mailTemplateMapper.insert(mailTemplateDO); |
| 85 | 78 | // TODO @wangjingyi:mq 更新 DONE |
| ... | ... | @@ -123,7 +116,6 @@ public class MailTemplateServiceImpl implements MailTemplateService { |
| 123 | 116 | return mailTemplateCache.get(code); |
| 124 | 117 | } |
| 125 | 118 | |
| 126 | - // TODO @@wangjingyi:单词拼写错误 DONE | |
| 127 | 119 | @Override |
| 128 | 120 | public String formatMailTemplateContent(String content, Map<String, String> params) { |
| 129 | 121 | return StrUtil.format(content, params); | ... | ... |