Commit 0b0e37a3d50f05b6518acdaed2f761a81f9bfd17
1 parent
0189993a
code review 短信的实现
Showing
10 changed files
with
44 additions
and
19 deletions
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/MailAccountController.java
| @@ -24,7 +24,6 @@ import java.util.List; | @@ -24,7 +24,6 @@ import java.util.List; | ||
| 24 | 24 | ||
| 25 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 25 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 26 | 26 | ||
| 27 | - | ||
| 28 | @Api(tags = "管理后台 - 邮件账号") | 27 | @Api(tags = "管理后台 - 邮件账号") |
| 29 | @RestController | 28 | @RestController |
| 30 | @RequestMapping("/system/mail-account") | 29 | @RequestMapping("/system/mail-account") |
| @@ -57,6 +56,9 @@ public class MailAccountController { | @@ -57,6 +56,9 @@ public class MailAccountController { | ||
| 57 | return success(true); | 56 | return success(true); |
| 58 | } | 57 | } |
| 59 | 58 | ||
| 59 | + // TODO @wangjingyi:getMailAccount 和 getMailAccountPage 这两个接口,定义一个对应的 Resp 类哈,参考别的模块。主要不要返回 password 字段。 | ||
| 60 | + // 一个可以的做法,是 MailAccountBaseVO 不返回 password,然后 MailAccountCreateReqVO、MailAccountUpdateReqVO 添加这个字段 | ||
| 61 | + | ||
| 60 | @GetMapping("/get") | 62 | @GetMapping("/get") |
| 61 | @ApiOperation("获得邮箱账号") | 63 | @ApiOperation("获得邮箱账号") |
| 62 | @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) | 64 | @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) |
| @@ -74,6 +76,8 @@ public class MailAccountController { | @@ -74,6 +76,8 @@ public class MailAccountController { | ||
| 74 | return success(MailAccountConvert.INSTANCE.convertPage(pageResult)); | 76 | return success(MailAccountConvert.INSTANCE.convertPage(pageResult)); |
| 75 | } | 77 | } |
| 76 | 78 | ||
| 79 | + // TODO @wangjingyi:getSimpleMailAccountList 单独定义一个类,只返回精简的信息,id,from 即可。像密码之类都是敏感信息,不应该返回 | ||
| 80 | + | ||
| 77 | @GetMapping("/list-all-simple") | 81 | @GetMapping("/list-all-simple") |
| 78 | @ApiOperation(value = "获得邮箱账号精简列表") | 82 | @ApiOperation(value = "获得邮箱账号精简列表") |
| 79 | public CommonResult<List<MailAccountBaseVO>> getSimpleMailAccountList() { | 83 | public CommonResult<List<MailAccountBaseVO>> getSimpleMailAccountList() { |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/MailTemplateController.java
| @@ -29,6 +29,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | @@ -29,6 +29,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ||
| 29 | @RequestMapping("/system/mail-template") | 29 | @RequestMapping("/system/mail-template") |
| 30 | public class MailTemplateController { | 30 | public class MailTemplateController { |
| 31 | 31 | ||
| 32 | + // TODO @wangjingyi:private | ||
| 32 | @Autowired | 33 | @Autowired |
| 33 | MailTemplateService mailTempleService; | 34 | MailTemplateService mailTempleService; |
| 34 | 35 | ||
| @@ -55,6 +56,8 @@ public class MailTemplateController { | @@ -55,6 +56,8 @@ public class MailTemplateController { | ||
| 55 | return success(true); | 56 | return success(true); |
| 56 | } | 57 | } |
| 57 | 58 | ||
| 59 | + // TODO @wangjingyi:下面几个 VO 也参考我在 account 给的建议 | ||
| 60 | + | ||
| 58 | @GetMapping("/get") | 61 | @GetMapping("/get") |
| 59 | @ApiOperation("获得邮箱模版") | 62 | @ApiOperation("获得邮箱模版") |
| 60 | @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) | 63 | @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/vo/account/MailAccountPageReqVO.java
| @@ -12,6 +12,7 @@ import lombok.ToString; | @@ -12,6 +12,7 @@ import lombok.ToString; | ||
| 12 | @EqualsAndHashCode(callSuper = true) | 12 | @EqualsAndHashCode(callSuper = true) |
| 13 | @ToString(callSuper = true) | 13 | @ToString(callSuper = true) |
| 14 | public class MailAccountPageReqVO extends PageParam { | 14 | public class MailAccountPageReqVO extends PageParam { |
| 15 | + | ||
| 15 | @ApiModelProperty(value = "邮箱" , required = true , example = "yudaoyuanma@123.com") | 16 | @ApiModelProperty(value = "邮箱" , required = true , example = "yudaoyuanma@123.com") |
| 16 | private String from; | 17 | private String from; |
| 17 | 18 |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailAccountService.java
| @@ -9,7 +9,6 @@ import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; | @@ -9,7 +9,6 @@ import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; | ||
| 9 | import javax.validation.Valid; | 9 | import javax.validation.Valid; |
| 10 | import java.util.List; | 10 | import java.util.List; |
| 11 | 11 | ||
| 12 | - | ||
| 13 | /** | 12 | /** |
| 14 | * 邮箱账号 Service 接口 | 13 | * 邮箱账号 Service 接口 |
| 15 | * | 14 | * |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailLogService.java
| 1 | package cn.iocoder.yudao.module.system.service.mail; | 1 | package cn.iocoder.yudao.module.system.service.mail; |
| 2 | 2 | ||
| 3 | - | ||
| 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.MailLogExportReqVO; | 4 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.MailLogExportReqVO; |
| 6 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.MailLogPageReqVO; | 5 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.MailLogPageReqVO; |
| @@ -11,14 +10,16 @@ import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO; | @@ -11,14 +10,16 @@ import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO; | ||
| 11 | import java.util.List; | 10 | import java.util.List; |
| 12 | 11 | ||
| 13 | /** | 12 | /** |
| 14 | - * 邮箱日志服务类 | 13 | + * 邮箱日志服务类 |
| 15 | * | 14 | * |
| 16 | * @author wangjingyi | 15 | * @author wangjingyi |
| 17 | * @since 2022-03-21 | 16 | * @since 2022-03-21 |
| 18 | */ | 17 | */ |
| 19 | public interface MailLogService { | 18 | public interface MailLogService { |
| 19 | + | ||
| 20 | /** | 20 | /** |
| 21 | * 邮箱日志分页 | 21 | * 邮箱日志分页 |
| 22 | + * | ||
| 22 | * @param pageVO | 23 | * @param pageVO |
| 23 | * @return | 24 | * @return |
| 24 | */ | 25 | */ |
| @@ -26,6 +27,7 @@ public interface MailLogService { | @@ -26,6 +27,7 @@ public interface MailLogService { | ||
| 26 | 27 | ||
| 27 | /** | 28 | /** |
| 28 | * 邮箱日志数组信息 | 29 | * 邮箱日志数组信息 |
| 30 | + * | ||
| 29 | * @param exportReqVO | 31 | * @param exportReqVO |
| 30 | * @return | 32 | * @return |
| 31 | */ | 33 | */ |
| @@ -33,13 +35,14 @@ public interface MailLogService { | @@ -33,13 +35,14 @@ public interface MailLogService { | ||
| 33 | 35 | ||
| 34 | /** | 36 | /** |
| 35 | * 创建邮箱日志 | 37 | * 创建邮箱日志 |
| 36 | - * @param mailAccountDO 邮箱账号信息 | 38 | + * |
| 39 | + * @param mailAccountDO 邮箱账号信息 | ||
| 37 | * @param mailTemplateDO 模版信息 | 40 | * @param mailTemplateDO 模版信息 |
| 38 | - * @param from 邮箱 | ||
| 39 | - * @param content 内容 | ||
| 40 | - * @param tos 收件人 | ||
| 41 | - * @param title 标题 | ||
| 42 | - * @param isSend 是否发送成功 | 41 | + * @param from 邮箱 |
| 42 | + * @param content 内容 | ||
| 43 | + * @param tos 收件人 | ||
| 44 | + * @param title 标题 | ||
| 45 | + * @param isSend 是否发送成功 | ||
| 43 | */ | 46 | */ |
| 44 | Long createMailLog(MailAccountDO mailAccountDO, MailTemplateDO mailTemplateDO, String from, String content, List<String> tos, String title, Boolean isSend); | 47 | Long createMailLog(MailAccountDO mailAccountDO, MailTemplateDO mailTemplateDO, String from, String content, List<String> tos, String title, Boolean isSend); |
| 45 | 48 |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailTemplateService.java
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/mail/impl/MailAccountServiceImpl.java
| @@ -21,7 +21,7 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; | @@ -21,7 +21,7 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; | ||
| 21 | 21 | ||
| 22 | 22 | ||
| 23 | /** | 23 | /** |
| 24 | - * 邮箱账号 Service 实现类 | 24 | + * 邮箱账号 Service 实现类 |
| 25 | * | 25 | * |
| 26 | * @author wangjingyi | 26 | * @author wangjingyi |
| 27 | * @since 2022-03-21 | 27 | * @since 2022-03-21 |
| @@ -39,28 +39,34 @@ public class MailAccountServiceImpl implements MailAccountService { | @@ -39,28 +39,34 @@ public class MailAccountServiceImpl implements MailAccountService { | ||
| 39 | @Override | 39 | @Override |
| 40 | public Long create(MailAccountCreateReqVO createReqVO) { | 40 | public Long create(MailAccountCreateReqVO createReqVO) { |
| 41 | // username 要校验唯一 | 41 | // username 要校验唯一 |
| 42 | - this.validateMailAccountOnlyByUserName(createReqVO.getUsername()); | 42 | + validateMailAccountOnlyByUserName(createReqVO.getUsername()); |
| 43 | MailAccountDO mailAccountDO = MailAccountConvert.INSTANCE.convert(createReqVO); | 43 | MailAccountDO mailAccountDO = MailAccountConvert.INSTANCE.convert(createReqVO); |
| 44 | mailAccountMapper.insert(mailAccountDO); | 44 | mailAccountMapper.insert(mailAccountDO); |
| 45 | + | ||
| 46 | + // 更新 | ||
| 45 | return mailAccountDO.getId(); | 47 | return mailAccountDO.getId(); |
| 46 | } | 48 | } |
| 47 | 49 | ||
| 48 | @Override | 50 | @Override |
| 49 | public void update(MailAccountUpdateReqVO updateReqVO) { | 51 | public void update(MailAccountUpdateReqVO updateReqVO) { |
| 50 | - // username 要校验唯一 | ||
| 51 | - this.validateMailAccountExists(updateReqVO.getId()); | 52 | + // username 要校验唯一 TODO @wangjingyi:校验唯一的时候,需要排除掉自己 |
| 53 | + validateMailAccountExists(updateReqVO.getId()); | ||
| 52 | MailAccountDO mailAccountDO = MailAccountConvert.INSTANCE.convert(updateReqVO); | 54 | MailAccountDO mailAccountDO = MailAccountConvert.INSTANCE.convert(updateReqVO); |
| 53 | // 校验是否存在 | 55 | // 校验是否存在 |
| 54 | - this.validateMailAccountExists(mailAccountDO.getId()); | 56 | + validateMailAccountExists(mailAccountDO.getId()); |
| 57 | + | ||
| 58 | + // 更新 | ||
| 55 | mailAccountMapper.updateById(mailAccountDO); | 59 | mailAccountMapper.updateById(mailAccountDO); |
| 56 | } | 60 | } |
| 57 | 61 | ||
| 58 | @Override | 62 | @Override |
| 59 | public void delete(Long id) { | 63 | public void delete(Long id) { |
| 60 | // 校验是否存在账号 | 64 | // 校验是否存在账号 |
| 61 | - this.validateMailAccountExists(id); | 65 | + validateMailAccountExists(id); |
| 62 | // 校验是否存在关联模版 | 66 | // 校验是否存在关联模版 |
| 63 | - this.validateMailTemplateByAccountId(id); | 67 | + validateMailTemplateByAccountId(id); |
| 68 | + | ||
| 69 | + // 删除 | ||
| 64 | mailAccountMapper.deleteById(id); | 70 | mailAccountMapper.deleteById(id); |
| 65 | } | 71 | } |
| 66 | 72 | ||
| @@ -95,6 +101,7 @@ public class MailAccountServiceImpl implements MailAccountService { | @@ -95,6 +101,7 @@ public class MailAccountServiceImpl implements MailAccountService { | ||
| 95 | private void validateMailTemplateByAccountId(Long accountId){ | 101 | private void validateMailTemplateByAccountId(Long accountId){ |
| 96 | MailTemplateDO mailTemplateDO = mailTemplateMapper.selectOneByAccountId(accountId); | 102 | MailTemplateDO mailTemplateDO = mailTemplateMapper.selectOneByAccountId(accountId); |
| 97 | if (mailTemplateDO != null) { | 103 | if (mailTemplateDO != null) { |
| 104 | + // TODO wangjingyi:MAIL_ACCOUNT_RELATE_TEMPLATE_EXISTS | ||
| 98 | throw exception(MAIL_RELATE_TEMPLATE_EXISTS); | 105 | throw exception(MAIL_RELATE_TEMPLATE_EXISTS); |
| 99 | } | 106 | } |
| 100 | } | 107 | } |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/mail/impl/MailLogServiceImpl.java
| 1 | package cn.iocoder.yudao.module.system.service.mail.impl; | 1 | package cn.iocoder.yudao.module.system.service.mail.impl; |
| 2 | 2 | ||
| 3 | - | ||
| 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 3 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.MailLogExportReqVO; | 4 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.MailLogExportReqVO; |
| 6 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.MailLogPageReqVO; | 5 | import cn.iocoder.yudao.module.system.controller.admin.mail.vo.log.MailLogPageReqVO; |
| @@ -62,6 +61,7 @@ public class MailLogServiceImpl implements MailLogService { | @@ -62,6 +61,7 @@ public class MailLogServiceImpl implements MailLogService { | ||
| 62 | return mailLogDO.getId(); | 61 | return mailLogDO.getId(); |
| 63 | } | 62 | } |
| 64 | 63 | ||
| 64 | + // TODO @wangjingyi:不需要返回 id 呀 | ||
| 65 | @Override | 65 | @Override |
| 66 | public Long updateSmsSendResult(Long logId, String result) { | 66 | public Long updateSmsSendResult(Long logId, String result) { |
| 67 | MailLogDO.MailLogDOBuilder logDOBuilder = MailLogDO.builder(); | 67 | MailLogDO.MailLogDOBuilder logDOBuilder = MailLogDO.builder(); |
| @@ -72,6 +72,7 @@ public class MailLogServiceImpl implements MailLogService { | @@ -72,6 +72,7 @@ public class MailLogServiceImpl implements MailLogService { | ||
| 72 | return logId; | 72 | return logId; |
| 73 | } | 73 | } |
| 74 | 74 | ||
| 75 | + // TODO @wangjingyi:无用的方法,需要进行删除 | ||
| 75 | public Long create(){ | 76 | public Long create(){ |
| 76 | MailLogDO mailLogDO = new MailLogDO(); | 77 | MailLogDO mailLogDO = new MailLogDO(); |
| 77 | mailLogMapper.insert(mailLogDO); | 78 | mailLogMapper.insert(mailLogDO); |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/mail/impl/MailSendServiceImpl.java
| 1 | package cn.iocoder.yudao.module.system.service.mail.impl; | 1 | package cn.iocoder.yudao.module.system.service.mail.impl; |
| 2 | 2 | ||
| 3 | - | ||
| 4 | import cn.hutool.extra.mail.MailAccount; | 3 | import cn.hutool.extra.mail.MailAccount; |
| 5 | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | 4 | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
| 6 | import cn.iocoder.yudao.module.system.convert.mail.MailAccountConvert; | 5 | import cn.iocoder.yudao.module.system.convert.mail.MailAccountConvert; |
| @@ -80,6 +79,7 @@ public class MailSendServiceImpl implements MailSendService { | @@ -80,6 +79,7 @@ public class MailSendServiceImpl implements MailSendService { | ||
| 80 | 79 | ||
| 81 | @Override | 80 | @Override |
| 82 | public void doSendMail(MailSendMessage message) { | 81 | public void doSendMail(MailSendMessage message) { |
| 82 | + // TODO @wangjingyi:直接使用 hutool 发送,不要封装 mail client 哈,因为短信的客户端都是比较统一的 | ||
| 83 | MailClient mailClient = mailClientFactory.getMailClient(); | 83 | MailClient mailClient = mailClientFactory.getMailClient(); |
| 84 | String result = mailClient.sendMail(message.getFrom() , message.getContent() , message.getTitle() , message.getTos()); | 84 | String result = mailClient.sendMail(message.getFrom() , message.getContent() , message.getTitle() , message.getTos()); |
| 85 | mailLogService.updateSmsSendResult(message.getLogId() , result); | 85 | mailLogService.updateSmsSendResult(message.getLogId() , result); |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/mail/impl/MailTemplateServiceImpl.java
| @@ -62,6 +62,7 @@ public class MailTemplateServiceImpl implements MailTemplateService { | @@ -62,6 +62,7 @@ public class MailTemplateServiceImpl implements MailTemplateService { | ||
| 62 | 62 | ||
| 63 | private volatile Date maxUpdateTime; | 63 | private volatile Date maxUpdateTime; |
| 64 | 64 | ||
| 65 | + // TODO @wangjingyi:参考下别的模块的 initLocalCache 的实现 | ||
| 65 | @Override | 66 | @Override |
| 66 | @PostConstruct | 67 | @PostConstruct |
| 67 | public void initLocalCache() { | 68 | public void initLocalCache() { |
| @@ -85,9 +86,11 @@ public class MailTemplateServiceImpl implements MailTemplateService { | @@ -85,9 +86,11 @@ public class MailTemplateServiceImpl implements MailTemplateService { | ||
| 85 | @Override | 86 | @Override |
| 86 | public Long create(MailTemplateCreateReqVO createReqVO) { | 87 | public Long create(MailTemplateCreateReqVO createReqVO) { |
| 87 | // code 要校验唯一 | 88 | // code 要校验唯一 |
| 89 | + // TODO @wangjingyi:参考下我在 account 给的唯一校验的说明。 | ||
| 88 | this.validateMailTemplateOnlyByCode(createReqVO.getCode()); | 90 | this.validateMailTemplateOnlyByCode(createReqVO.getCode()); |
| 89 | MailTemplateDO mailTemplateDO = MailTemplateConvert.INSTANCE.convert(createReqVO); | 91 | MailTemplateDO mailTemplateDO = MailTemplateConvert.INSTANCE.convert(createReqVO); |
| 90 | mailTemplateMapper.insert(mailTemplateDO); | 92 | mailTemplateMapper.insert(mailTemplateDO); |
| 93 | + // TODO @wangjingyi:mq 更新 | ||
| 91 | return mailTemplateDO.getId(); | 94 | return mailTemplateDO.getId(); |
| 92 | } | 95 | } |
| 93 | 96 | ||
| @@ -97,6 +100,7 @@ public class MailTemplateServiceImpl implements MailTemplateService { | @@ -97,6 +100,7 @@ public class MailTemplateServiceImpl implements MailTemplateService { | ||
| 97 | this.validateMailTemplateExists(updateReqVO.getId()); | 100 | this.validateMailTemplateExists(updateReqVO.getId()); |
| 98 | MailTemplateDO mailTemplateDO = MailTemplateConvert.INSTANCE.convert(updateReqVO); | 101 | MailTemplateDO mailTemplateDO = MailTemplateConvert.INSTANCE.convert(updateReqVO); |
| 99 | mailTemplateMapper.updateById(mailTemplateDO); | 102 | mailTemplateMapper.updateById(mailTemplateDO); |
| 103 | + // TODO @wangjingyi:mq 更新 | ||
| 100 | } | 104 | } |
| 101 | 105 | ||
| 102 | @Override | 106 | @Override |
| @@ -104,6 +108,7 @@ public class MailTemplateServiceImpl implements MailTemplateService { | @@ -104,6 +108,7 @@ public class MailTemplateServiceImpl implements MailTemplateService { | ||
| 104 | // 校验是否存在 | 108 | // 校验是否存在 |
| 105 | this.validateMailTemplateExists(id); | 109 | this.validateMailTemplateExists(id); |
| 106 | mailTemplateMapper.deleteById(id); | 110 | mailTemplateMapper.deleteById(id); |
| 111 | + // TODO @wangjingyi:mq 更新 | ||
| 107 | } | 112 | } |
| 108 | 113 | ||
| 109 | @Override | 114 | @Override |
| @@ -144,6 +149,7 @@ public class MailTemplateServiceImpl implements MailTemplateService { | @@ -144,6 +149,7 @@ public class MailTemplateServiceImpl implements MailTemplateService { | ||
| 144 | MailUtil.send(account , mailReqVO.getTos() , mailReqVO.getTitle() , content , false); | 149 | MailUtil.send(account , mailReqVO.getTos() , mailReqVO.getTitle() , content , false); |
| 145 | } | 150 | } |
| 146 | 151 | ||
| 152 | + // TODO @@wangjingyi:单词拼写错误 | ||
| 147 | @Override | 153 | @Override |
| 148 | public String formateMailTemplateContent(String content, Map<String, String> params) { | 154 | public String formateMailTemplateContent(String content, Map<String, String> params) { |
| 149 | return StrUtil.format(content, params); | 155 | return StrUtil.format(content, params); |