Commit 1464f7d399de68de75a6fb84aef8b58783982a16

Authored by YunaiV
1 parent 63983bba

code review 邮箱的实现代码

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
... ... @@ -34,5 +34,4 @@ public class MailReqVO { // TODO @wangjingqi:1), ä¸ç”¨ç©ºæ ¼ï¼›2)应该å
34 34 @ApiModelProperty(value = "附件",example = "附件编ç ")
35 35 private List<String> fileIds;
36 36  
37   -
38 37 }
... ...
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
... ... @@ -80,7 +80,6 @@ public class MailLogDO extends BaseDO implements Serializable {
80 80  
81 81 /**
82 82 * 发送结果
83   - *
84 83 */
85 84 private String sendResult;
86 85  
... ...
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);
... ...