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,7 +79,7 @@ public class TestDemoServiceImpl implements TestDemoService {
79 79
80 @Override 80 @Override
81 public PageResult<TestDemoDO> getTestDemoPage(TestDemoPageReqVO pageReqVO) { 81 public PageResult<TestDemoDO> getTestDemoPage(TestDemoPageReqVO pageReqVO) {
82 -// testDemoMapper.selectList2(); 82 + testDemoMapper.selectList2();
83 return testDemoMapper.selectPage(pageReqVO); 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,7 +128,7 @@ public interface ErrorCodeConstants {
128 ErrorCode MAIL_ACCOUNT_EXISTS = new ErrorCode(1002020001, "邮箱账号存在"); 128 ErrorCode MAIL_ACCOUNT_EXISTS = new ErrorCode(1002020001, "邮箱账号存在");
129 129
130 // ========== 邮箱模版 1002021000 ========== 130 // ========== 邮箱模版 1002021000 ==========
131 - ErrorCode MAIL_TEMPLATE_NOT_EXISTS = new ErrorCode(1002021000 , "邮箱模版不存在"); 131 + ErrorCode MAIL_TEMPLATE_NOT_EXISTS = new ErrorCode(1002021000, "邮箱模版不存在");
132 ErrorCode MAIL_TEMPLATE_EXISTS = new ErrorCode(1002021001, "邮箱模版存在"); 132 ErrorCode MAIL_TEMPLATE_EXISTS = new ErrorCode(1002021001, "邮箱模版存在");
133 ErrorCode MAIL_ACCOUNT_RELATE_TEMPLATE_EXISTS = new ErrorCode(1002021002, "存在关联邮箱模版"); 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,6 +17,9 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
17 @EqualsAndHashCode(callSuper = true) 17 @EqualsAndHashCode(callSuper = true)
18 @ToString(callSuper = true) 18 @ToString(callSuper = true)
19 public class MailLogPageReqVO extends PageParam { 19 public class MailLogPageReqVO extends PageParam {
  20 +
  21 + // TODO @wangjingyi:required 为 false 时,它是默认值,所以不用谢
  22 +
20 @ApiModelProperty(value = "邮箱" , required = false , example = "yudaoyuanma@123.com") 23 @ApiModelProperty(value = "邮箱" , required = false , example = "yudaoyuanma@123.com")
21 private String from; 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,5 +34,4 @@ public class MailReqVO { // TODO @wangjingqi:1), ä¸ç”¨ç©ºæ ¼ï¼›2)应该å
34 @ApiModelProperty(value = "附件",example = "附件编ç ") 34 @ApiModelProperty(value = "附件",example = "附件编ç ")
35 private List<String> fileIds; 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,6 +11,7 @@ import java.util.List;
11 11
12 @Mapper 12 @Mapper
13 public interface MailTemplateConvert { 13 public interface MailTemplateConvert {
  14 +
14 MailTemplateConvert INSTANCE = Mappers.getMapper(MailTemplateConvert.class); 15 MailTemplateConvert INSTANCE = Mappers.getMapper(MailTemplateConvert.class);
15 16
16 MailTemplateDO convert(MailTemplateBaseVO baseVO); 17 MailTemplateDO convert(MailTemplateBaseVO baseVO);
@@ -20,4 +21,5 @@ public interface MailTemplateConvert { @@ -20,4 +21,5 @@ public interface MailTemplateConvert {
20 PageResult<MailTemplateRespVO> convertPage(PageResult<MailTemplateDO> pageResult); 21 PageResult<MailTemplateRespVO> convertPage(PageResult<MailTemplateDO> pageResult);
21 22
22 List<MailTemplateRespVO> convertList02(List<MailTemplateDO> list); 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,7 +80,6 @@ public class MailLogDO extends BaseDO implements Serializable {
80 80
81 /** 81 /**
82 * 发送结果 82 * 发送结果
83 - *  
84 */ 83 */
85 private String sendResult; 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,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 PageResult<MailLogDO> getMailLogPage(MailLogPageReqVO pageVO); 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 List<MailLogDO> getMailLogList(MailLogExportReqVO exportReqVO); 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 void updateMailSendResult(Long logId, String result); 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 package cn.iocoder.yudao.module.system.service.mail; 1 package cn.iocoder.yudao.module.system.service.mail;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 -import cn.iocoder.yudao.module.system.controller.admin.mail.vo.send.MailReqVO;  
5 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateCreateReqVO; 4 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateCreateReqVO;
6 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO; 5 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO;
7 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateUpdateReqVO; 6 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateUpdateReqVO;
@@ -68,8 +67,9 @@ public interface MailTemplateService { @@ -68,8 +67,9 @@ public interface MailTemplateService {
68 * @return 模版数组 67 * @return 模版数组
69 */ 68 */
70 List<MailTemplateDO> getMailTemplateList(); 69 List<MailTemplateDO> getMailTemplateList();
  70 +
71 /** 71 /**
72 - *从缓存中获取邮箱模版 72 + * 从缓存中获取邮箱模版
73 * 73 *
74 * @param code 模板编码 74 * @param code 模板编码
75 * @return 邮箱模板 75 * @return 邮箱模板
@@ -78,9 +78,11 @@ public interface MailTemplateService { @@ -78,9 +78,11 @@ public interface MailTemplateService {
78 78
79 /** 79 /**
80 * 邮件模版内容合成 80 * 邮件模版内容合成
  81 + *
81 * @param content 邮箱模版 82 * @param content 邮箱模版
82 * @param params 合成参数 83 * @param params 合成参数
83 - * @return 84 + * @return 格式化后的内容
84 */ 85 */
85 String formatMailTemplateContent(String content, Map<String, String> params); 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,6 +27,7 @@ import java.util.Objects;
27 @Validated 27 @Validated
28 public class MailLogServiceImpl implements MailLogService { 28 public class MailLogServiceImpl implements MailLogService {
29 29
  30 + // TODO @wangjingyi:private,然后使用 @Resource
30 @Autowired 31 @Autowired
31 MailLogMapper mailLogMapper; 32 MailLogMapper mailLogMapper;
32 33
@@ -41,25 +42,34 @@ public class MailLogServiceImpl implements MailLogService { @@ -41,25 +42,34 @@ public class MailLogServiceImpl implements MailLogService {
41 } 42 }
42 43
43 @Override 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 MailLogDO.MailLogDOBuilder logDOBuilder = MailLogDO.builder(); 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 logDOBuilder.fromAddress(mailAccountDO.getFromAddress()); 53 logDOBuilder.fromAddress(mailAccountDO.getFromAddress());
47 logDOBuilder.accountId(mailAccountDO.getId()); 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 logDOBuilder.to(tos.toString()); 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 logDOBuilder.sendTime(new Date()); 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 @Override 73 @Override
64 public void updateMailSendResult(Long logId, String result) { 74 public void updateMailSendResult(Long logId, String result) {
65 MailLogDO.MailLogDOBuilder logDOBuilder = MailLogDO.builder(); 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,20 +3,13 @@ package cn.iocoder.yudao.module.system.service.mail.impl;
3 3
4 import cn.hutool.core.collection.CollUtil; 4 import cn.hutool.core.collection.CollUtil;
5 import cn.hutool.core.util.StrUtil; 5 import cn.hutool.core.util.StrUtil;
6 -import cn.hutool.extra.mail.MailAccount;  
7 -import cn.hutool.extra.mail.MailUtil;  
8 import cn.iocoder.yudao.framework.common.pojo.PageResult; 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
9 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 7 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
10 -import cn.iocoder.yudao.module.system.controller.admin.mail.vo.send.MailReqVO;  
11 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateCreateReqVO; 8 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateCreateReqVO;
12 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO; 9 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO;
13 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateUpdateReqVO; 10 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateUpdateReqVO;
14 -import cn.iocoder.yudao.module.system.convert.mail.MailAccountConvert;  
15 import cn.iocoder.yudao.module.system.convert.mail.MailTemplateConvert; 11 import cn.iocoder.yudao.module.system.convert.mail.MailTemplateConvert;
16 -import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO;  
17 import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO; 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 import cn.iocoder.yudao.module.system.dal.mysql.mail.MailTemplateMapper; 13 import cn.iocoder.yudao.module.system.dal.mysql.mail.MailTemplateMapper;
21 import cn.iocoder.yudao.module.system.mq.producer.mail.MailProducer; 14 import cn.iocoder.yudao.module.system.mq.producer.mail.MailProducer;
22 import cn.iocoder.yudao.module.system.service.mail.MailTemplateService; 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,7 +29,7 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_TEMPL
36 import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_TEMPLATE_NOT_EXISTS; 29 import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_TEMPLATE_NOT_EXISTS;
37 30
38 /** 31 /**
39 - * 邮箱模版 服务实现类 32 + * 邮箱模版 Service 实现类
40 * 33 *
41 * @author wangjingyi 34 * @author wangjingyi
42 * @since 2022-03-21 35 * @since 2022-03-21
@@ -48,6 +41,7 @@ public class MailTemplateServiceImpl implements MailTemplateService { @@ -48,6 +41,7 @@ public class MailTemplateServiceImpl implements MailTemplateService {
48 41
49 @Resource 42 @Resource
50 private MailTemplateMapper mailTemplateMapper; 43 private MailTemplateMapper mailTemplateMapper;
  44 +
51 @Resource 45 @Resource
52 private MailProducer mailProducer; 46 private MailProducer mailProducer;
53 47
@@ -61,7 +55,6 @@ public class MailTemplateServiceImpl implements MailTemplateService { @@ -61,7 +55,6 @@ public class MailTemplateServiceImpl implements MailTemplateService {
61 55
62 private volatile Date maxUpdateTime; 56 private volatile Date maxUpdateTime;
63 57
64 - // TODO @wangjingyi:参考下别的模块的 initLocalCache 的实现 DONE  
65 @Override 58 @Override
66 @PostConstruct 59 @PostConstruct
67 public void initLocalCache() { 60 public void initLocalCache() {
@@ -78,8 +71,8 @@ public class MailTemplateServiceImpl implements MailTemplateService { @@ -78,8 +71,8 @@ public class MailTemplateServiceImpl implements MailTemplateService {
78 71
79 @Override 72 @Override
80 public Long create(MailTemplateCreateReqVO createReqVO) { 73 public Long create(MailTemplateCreateReqVO createReqVO) {
81 - //要校验存在  
82 - this.validateMailTemplateExists(createReqVO.getId()); 74 + // 要校验存在
  75 + validateMailTemplateExists(createReqVO.getId());
83 MailTemplateDO mailTemplateDO = MailTemplateConvert.INSTANCE.convert(createReqVO); 76 MailTemplateDO mailTemplateDO = MailTemplateConvert.INSTANCE.convert(createReqVO);
84 mailTemplateMapper.insert(mailTemplateDO); 77 mailTemplateMapper.insert(mailTemplateDO);
85 // TODO @wangjingyi:mq 更新 DONE 78 // TODO @wangjingyi:mq 更新 DONE
@@ -123,7 +116,6 @@ public class MailTemplateServiceImpl implements MailTemplateService { @@ -123,7 +116,6 @@ public class MailTemplateServiceImpl implements MailTemplateService {
123 return mailTemplateCache.get(code); 116 return mailTemplateCache.get(code);
124 } 117 }
125 118
126 - // TODO @@wangjingyi:单词拼写错误 DONE  
127 @Override 119 @Override
128 public String formatMailTemplateContent(String content, Map<String, String> params) { 120 public String formatMailTemplateContent(String content, Map<String, String> params) {
129 return StrUtil.format(content, params); 121 return StrUtil.format(content, params);