Commit e1d79b5ea948afe1d8c5b7524061824fe0996f84

Authored by wangjingyi
1 parent 7d9a6cb2

邮件模块修改注释、注解、修改泛型方法

Showing 16 changed files with 204 additions and 127 deletions
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/MailAccountController.java
... ... @@ -52,7 +52,7 @@ public class MailAccountController {
52 52 @ApiOperation("删除邮箱账号")
53 53 @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class)
54 54 @PreAuthorize("@ss.hasPermission('system:mail-account:delete')")
55   - public CommonResult<Boolean> deleteMailAccount(@Valid @RequestParam Long id) { // TODO @wangjingyi:不需要 @Valid 这里。了解下 Validator
  55 + public CommonResult<Boolean> deleteMailAccount(@RequestParam Long id) {
56 56 mailAccountService.delete(id);
57 57 return success(true);
58 58 }
... ... @@ -83,11 +83,4 @@ public class MailAccountController {
83 83 return success(MailAccountConvert.INSTANCE.convertList02(list));
84 84 }
85 85  
86   - @PostMapping("/send")
87   - @ApiOperation("发送邮件")
88   - @PreAuthorize("@ss.hasPermission('system:mail-account:send')")
89   - public CommonResult<Boolean> sendMail(MailReqVO mailReqVO){ // TODO @wangjingyi:应该是测试短信模板,做到 MailTemplateController 里。参考下短信那的做法哈
90   - mailAccountService.sendMail(mailReqVO);
91   - return success(true);
92   - }
93 86 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/MailLogController.java
... ... @@ -28,6 +28,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
28 28 @RestController
29 29 @RequestMapping("/system/mail-log")
30 30 public class MailLogController {
  31 +
31 32 @Autowired
32 33 private MailLogService mailLogService;
33 34  
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/MailTemplateController.java
... ... @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.system.controller.admin.mail;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  5 +import cn.iocoder.yudao.module.system.controller.admin.mail.vo.send.MailReqVO;
5 6 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateBaseVO;
6 7 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateCreateReqVO;
7 8 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO;
... ... @@ -27,8 +28,9 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
27 28 @RestController
28 29 @RequestMapping("/system/mail-template")
29 30 public class MailTemplateController {
  31 +
30 32 @Autowired
31   - MailTemplateService mailTempleService; // TODO @wangjingyi:private;和上面要空一行;
  33 + MailTemplateService mailTempleService;
32 34  
33 35 @PostMapping("/create")
34 36 @ApiOperation("创建邮箱模版")
... ... @@ -64,7 +66,7 @@ public class MailTemplateController {
64 66  
65 67 @GetMapping("/page")
66 68 @ApiOperation("获得邮箱模版分页")
67   - @PreAuthorize("@ss.hasPermission('system:mail-account:query')")
  69 + @PreAuthorize("@ss.hasPermission('system:mail-template:query')")
68 70 public CommonResult<PageResult<MailTemplateBaseVO>> getMailTemplatePage(@Valid MailTemplatePageReqVO pageReqVO) {
69 71 PageResult<MailTemplateDO> pageResult = mailTempleService.getMailTemplatePage(pageReqVO);
70 72 return success(MailTemplateConvert.INSTANCE.convertPage(pageResult));
... ... @@ -78,4 +80,12 @@ public class MailTemplateController {
78 80 list.sort(Comparator.comparing(MailTemplateDO::getId));
79 81 return success(MailTemplateConvert.INSTANCE.convertList02(list));
80 82 }
  83 +
  84 + @PostMapping("/send")
  85 + @ApiOperation("发送邮件")
  86 + @PreAuthorize("@ss.hasPermission('system:mail-template:send')")
  87 + public CommonResult<Boolean> sendMail(@Valid @RequestBody MailReqVO mailReqVO){
  88 + mailTempleService.sendMail(mailReqVO);
  89 + return success(true);
  90 + }
81 91 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/vo/account/MailAccountBaseVO.java
... ... @@ -3,6 +3,9 @@ package cn.iocoder.yudao.module.system.controller.admin.mail.vo.account;
3 3 import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
5 5 import lombok.Data;
  6 +
  7 +import javax.validation.constraints.NotNull;
  8 +
6 9 @ApiModel("管理后台 - 邮箱账号基类 Base VO")
7 10 @Data
8 11 public class MailAccountBaseVO {
... ... @@ -11,6 +14,7 @@ public class MailAccountBaseVO {
11 14 private String from;
12 15  
13 16 @ApiModelProperty(value = "用户名" , required = true , example = "yudao")
  17 + @NotNull(message = "用户名必填")
14 18 private String username;
15 19  
16 20 @ApiModelProperty(value = "密码" , required = true , example = "123456")
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/vo/send/MailReqVO.java
... ... @@ -9,7 +9,7 @@ import java.util.List;
9 9  
10 10 @ApiModel("管理后台 - 邮件发送 Req VO")
11 11 @Data
12   -public class MailReqVO { // TODO @wangjingyi:1)参数校验;2)ReqVO
  12 +public class MailReqVO {
13 13  
14 14 @ApiModelProperty(value = "邮箱" , required = true , example = "yudaoyuanma@123.com")
15 15 @NotNull(message = "邮箱账号不能为空")
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/vo/template/MailTemplateBaseVO.java
... ... @@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
4 4 import io.swagger.annotations.ApiModelProperty;
5 5 import lombok.Data;
6 6  
  7 +import javax.validation.constraints.NotNull;
  8 +
7 9 @ApiModel("管理后台 - 邮箱模版基类 Base VO")
8 10 @Data
9 11 public class MailTemplateBaseVO {
... ... @@ -14,6 +16,7 @@ public class MailTemplateBaseVO {
14 16 private String name;
15 17  
16 18 @ApiModelProperty("标识")
  19 + @NotNull(message = "邮箱模版code不能为空")
17 20 private String code;
18 21  
19 22 @ApiModelProperty("发件人")
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/mail/MailAccountDO.java
... ... @@ -11,34 +11,45 @@ import lombok.experimental.Accessors;
11 11  
12 12 import java.io.Serializable;
13 13  
  14 +@TableName(value = "system_mail_account", autoResultMap = true)
14 15 @Data
15 16 @EqualsAndHashCode(callSuper = true)
16 17 @Accessors(chain = true)
17   -@ApiModel(value="MailAccount对象", description="邮箱账号") // TODO @wangjingyi:不需要 swagger 注解
18   -@TableName(value = "system_mail_account", autoResultMap = true) // TODO @wangjingyi:这个放在最上面,关键字段
19 18 public class MailAccountDO extends BaseDO implements Serializable {
20 19  
21   - // TODO @wangjingyi:每个字段的注释;字段名,如果一直,不用 @TableField
22   -
23   - @TableId
  20 + /**
  21 + * 主键
  22 + */
24 23 private Long id;
25 24  
26   - @TableField("from")
  25 + /**
  26 + * 邮箱
  27 + */
27 28 private String from;
28 29  
29   - @TableField("username")
  30 + /**
  31 + * 用户名
  32 + */
30 33 private String username;
31 34  
32   - @TableField("password")
  35 + /**
  36 + * 密码
  37 + */
33 38 private String password;
34 39  
35   - @TableField("host")
  40 + /**
  41 + * 主机
  42 + */
36 43 private String host;
37 44  
38   - @TableField("port")
  45 + /**
  46 + * 端口
  47 + */
39 48 private Integer port;
40 49  
41   - @TableField("sslEnable")
  50 + /**
  51 + * 是否开启ssl
  52 + */
42 53 private Boolean sslEnable;
43 54  
44 55  
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/mail/MailLogDO.java
... ... @@ -5,6 +5,8 @@ import java.sql.Timestamp;
5 5 import com.baomidou.mybatisplus.annotation.TableId;
6 6 import com.baomidou.mybatisplus.annotation.TableField;
7 7 import java.io.Serializable;
  8 +
  9 +import com.baomidou.mybatisplus.annotation.TableName;
8 10 import io.swagger.annotations.ApiModel;
9 11 import lombok.Data;
10 12 import lombok.EqualsAndHashCode;
... ... @@ -18,44 +20,65 @@ import lombok.experimental.Accessors;
18 20 * @author wangjingyi
19 21 * @since 2022-03-21
20 22 */
  23 +@TableName(value = "system_mail_log", autoResultMap = true)
21 24 @Data
22 25 @EqualsAndHashCode(callSuper = true)
23 26 @Accessors(chain = true)
24   -@ApiModel(value="SystemMailLog对象", description="")
25 27 public class MailLogDO extends BaseDO implements Serializable {
26 28  
27   - private static final long serialVersionUID = 1L;
28   - @TableId
  29 + /**
  30 + * 主键
  31 + */
29 32 private Long id;
30 33  
31   - @TableField("account_code")
  34 + /**
  35 + * 邮箱账号编号
  36 + */
32 37 private String accountCode;
33 38  
34   - @TableField("from")
  39 + /**
  40 + * 邮箱账号
  41 + */
35 42 private String from;
36 43  
37   - @TableField("template_id")
  44 + /**
  45 + * 模版主键
  46 + */
38 47 private String templateId;
39 48  
40   - @TableField("template_code")
  49 + /**
  50 + * 模版编号
  51 + */
41 52 private String templateCode;
42 53  
43   - @TableField("title")
  54 + /**
  55 + * 标题
  56 + */
44 57 private String title;
45 58  
46   - @TableField("content")
  59 + /**
  60 + * 内容
  61 + */
47 62 private String content;
48 63  
49   - @TableField("to")
  64 + /**
  65 + * 收件人
  66 + */
50 67 private String to;
51 68  
52   - @TableField("sendTime")
  69 + /**
  70 + * 发送时间
  71 + */
53 72 private Timestamp sendTime;
54 73  
55   - @TableField("sendStatus")
  74 + /**
  75 + * 发送状态
  76 + */
56 77 private Boolean sendStatus;
57 78  
58   - @TableField("sendResult")
  79 + /**
  80 + * 发送结果
  81 + */
59 82 private String sendResult;
60 83  
61 84  
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/mail/MailTemplateDO.java
... ... @@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
5 5 import com.baomidou.mybatisplus.annotation.TableId;
6 6 import com.baomidou.mybatisplus.annotation.TableField;
7 7 import java.io.Serializable;
  8 +
  9 +import com.baomidou.mybatisplus.annotation.TableName;
8 10 import io.swagger.annotations.ApiModel;
9 11 import io.swagger.annotations.ApiModelProperty;
10 12 import lombok.Data;
... ... @@ -19,35 +21,50 @@ import lombok.experimental.Accessors;
19 21 * @author wangjingyi
20 22 * @since 2022-03-21
21 23 */
  24 +@TableName(value = "system_mail_template", autoResultMap = true)
22 25 @Data
23 26 @EqualsAndHashCode(callSuper = true)
24 27 @Accessors(chain = true)
25   -@ApiModel(value="SystemMailTemplate对象", description="")
26 28 public class MailTemplateDO extends BaseDO implements Serializable {
27 29  
28   - private static final long serialVersionUID = 1L;
29   - @TableId
  30 + /**
  31 + * 主键
  32 + */
30 33 private Long id;
31 34  
32   - @TableField("name")
  35 + /**
  36 + * 模版名称
  37 + */
33 38 private String name;
34 39  
35   - @TableField("code")
  40 + /**
  41 + * 模版编号
  42 + */
36 43 private String code;
37 44  
38   - @TableField("username")
  45 + /**
  46 + * 用户名
  47 + */
39 48 private String username;
40 49  
41   - @TableField("title")
  50 + /**
  51 + * 标题
  52 + */
42 53 private String title;
43 54  
44   - @TableField("content")
  55 + /**
  56 + * 内容
  57 + */
45 58 private String content;
46 59  
47   - @TableField("status")
  60 + /**
  61 + * 状态
  62 + */
48 63 private String status;
49 64  
50   - @TableField("remark")
  65 + /**
  66 + * 备注
  67 + */
51 68 private String remark;
52 69  
53 70  
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/mail/MailAccountMapper.java
... ... @@ -22,12 +22,9 @@ public interface MailAccountMapper extends BaseMapperX&lt;MailAccountDO&gt; {
22 22 );
23 23 }
24 24  
25   - // TODO @wangjingyi:不要提供这样的泛的方法,而是明确的查询方法
26   - default MailAccountDO selectByParams(Map params){
  25 + default MailAccountDO selectByUserName(String userName){
27 26 QueryWrapperX queryWrapperX = new QueryWrapperX<MailAccountDO>();
28   - params.forEach((k , v)->{
29   - queryWrapperX.eqIfPresent((String) k, v);
30   - });
31   - return this.selecOne(queryWrapperX);
  27 + queryWrapperX.eqIfPresent("username", userName);
  28 + return this.selectOne(queryWrapperX);
32 29 };
33 30 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/mail/MailTemplateMapper.java
... ... @@ -22,4 +22,7 @@ public interface MailTemplateMapper extends BaseMapperX&lt;MailTemplateDO&gt; {
22 22 );
23 23 }
24 24  
  25 + default MailTemplateDO selectOneByCode(String code){
  26 + return selectOne("code" , code);
  27 + };
25 28 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailAccountService.java
... ... @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccou
7 7 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.send.MailReqVO;
8 8 import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO;
9 9  
  10 +import javax.validation.Valid;
10 11 import java.util.List;
11 12  
12 13  
... ... @@ -22,46 +23,47 @@ public interface MailAccountService {
22 23  
23 24 /**
24 25 * 创建邮箱账号 // TODO @wangjingyi:方法描述,和参数要空行
25   - * @param createReqVO
26   - * @return
  26 + *
  27 + * @param createReqVO 邮箱账号信息
  28 + * @return 编号
27 29 */
28   - Long create(MailAccountCreateReqVO createReqVO);
  30 + Long create(@Valid MailAccountCreateReqVO createReqVO);
29 31  
30 32 /**
31 33 * 修改邮箱账号
32   - * @param updateReqVO
  34 + *
  35 + * @param updateReqVO 邮箱账号信息
33 36 */
34   - void update(MailAccountUpdateReqVO updateReqVO);
  37 + void update(@Valid MailAccountUpdateReqVO updateReqVO);
35 38  
36 39 /**
37 40 * 删除邮箱账号
38   - * @param id
  41 + *
  42 + * @param id 编号
39 43 */
40 44 void delete(Long id);
41 45  
42 46 /**
43 47 * 获取邮箱账号信息
44   - * @param id
45   - * @return
  48 + *
  49 + * @param id 编号
  50 + * @return 邮箱账号信息
46 51 */
47 52 MailAccountDO getMailAccount(Long id);
48 53  
49 54 /**
50 55 * 获取邮箱账号分页信息
51   - * @param pageReqVO
52   - * @return
  56 + *
  57 + * @param pageReqVO 邮箱账号分页参数
  58 + * @return 邮箱账号分页信息
53 59 */
54 60 PageResult<MailAccountDO> getMailAccountPage(MailAccountPageReqVO pageReqVO);
55 61  
56 62 /**
57 63 * 获取邮箱数组信息
58   - * @return
  64 + *
  65 + * @return 邮箱账号信息数组
59 66 */
60 67 List<MailAccountDO> getMailAccountList();
61 68  
62   - /**
63   - * 发送邮件
64   - * @param mailReqVO
65   - */
66   - void sendMail(MailReqVO mailReqVO);
67 69 }
... ...
yudao-module-system/yudao-module-system-impl/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;
4 5 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateCreateReqVO;
5 6 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO;
6 7 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateUpdateReqVO;
7 8 import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO;
8 9  
  10 +import javax.validation.Valid;
9 11 import java.util.List;
10 12  
11 13 /**
... ... @@ -16,44 +18,52 @@ import java.util.List;
16 18 */
17 19 public interface MailTemplateService {
18 20  
19   - // TODO @wangjingyi:注释,完整;参数校验还是要做的;
20   -
21 21 /**
22 22 * 邮箱模版创建
23   - * @param createReqVO
24   - * @return
  23 + * @param createReqVO 邮箱信息
  24 + * @return 编号
25 25 */
26   - Long create(MailTemplateCreateReqVO createReqVO);
  26 + Long create(@Valid MailTemplateCreateReqVO createReqVO);
27 27  
28 28 /**
29 29 * 邮箱模版修改
30   - * @param updateReqVO
  30 + * @param updateReqVO 邮箱信息
31 31 */
32   - void update(MailTemplateUpdateReqVO updateReqVO);
  32 + void update(@Valid MailTemplateUpdateReqVO updateReqVO);
33 33  
34 34 /**
35 35 * 邮箱模版删除
36   - * @param id
  36 + * @param id 编号
37 37 */
38 38 void delete(Long id);
39 39  
40 40 /**
41 41 * 获取邮箱模版
42   - * @param id
43   - * @return
  42 + *
  43 + * @param id 编号
  44 + * @return 邮件模版
44 45 */
45 46 MailTemplateDO getMailTemplate(Long id);
46 47  
47 48 /**
48 49 * 获取邮箱模版分页
49   - * @param pageReqVO
50   - * @return
  50 + *
  51 + * @param pageReqVO 模版信息
  52 + * @return 邮箱模版分页信息
51 53 */
52 54 PageResult<MailTemplateDO> getMailTemplatePage(MailTemplatePageReqVO pageReqVO);
53 55  
54 56 /**
55 57 * 获取邮箱模板数组
56   - * @return
  58 + *
  59 + * @return 模版数组
57 60 */
58 61 List<MailTemplateDO> getMailTemplateList();
  62 +
  63 + /**
  64 + * 发送邮件
  65 + *
  66 + * @param mailReqVO 邮件发送信息
  67 + */
  68 + void sendMail(MailReqVO mailReqVO);
59 69 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/mail/impl/MailAccountServiceImpl.java
... ... @@ -15,6 +15,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.mail.MailAccountMapper;
15 15 import cn.iocoder.yudao.module.system.dal.mysql.mail.MailTemplateMapper;
16 16 import cn.iocoder.yudao.module.system.service.mail.MailAccountService;
17 17 import org.springframework.stereotype.Service;
  18 +import org.springframework.validation.annotation.Validated;
18 19  
19 20 import javax.annotation.Resource;
20 21 import java.util.HashMap;
... ... @@ -33,7 +34,7 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_ACCOU
33 34 * @since 2022-03-21
34 35 */
35 36 @Service
36   -// TODO @wangjingyi:需要 @Validated 注解,开启参数校验
  37 +@Validated
37 38 public class MailAccountServiceImpl implements MailAccountService {
38 39  
39 40 @Resource
... ... @@ -45,9 +46,7 @@ public class MailAccountServiceImpl implements MailAccountService {
45 46 @Override
46 47 public Long create(MailAccountCreateReqVO createReqVO) {
47 48 // username 要校验唯一
48   - Map<String , String> map = new HashMap<>();
49   - map.put("username" , createReqVO.getUsername());
50   - this.validateMailAccountOnly(map);
  49 + this.validateMailAccountOnlyByUserName(createReqVO.getUsername());
51 50 MailAccountDO mailAccountDO = MailAccountConvert.INSTANCE.convert(createReqVO);
52 51 mailAccountMapper.insert(mailAccountDO);
53 52 return mailAccountDO.getId();
... ... @@ -55,10 +54,8 @@ public class MailAccountServiceImpl implements MailAccountService {
55 54  
56 55 @Override
57 56 public void update(MailAccountUpdateReqVO updateReqVO) {
58   - // username 要校验唯一 TODO @wangjingyi:不要用 map 参数
59   - Map<String , String> map = new HashMap<>();
60   - map.put("username" , updateReqVO.getUsername());
61   - this.validateMailAccountOnly(map); // TODO @wangjingyi:如果 username 是自己用呢,要排除下自己呀
  57 + // username 要校验唯一
  58 + this.validateMailAccountOnlyByUserName(updateReqVO.getUsername());
62 59 MailAccountDO mailAccountDO = MailAccountConvert.INSTANCE.convert(updateReqVO);
63 60 // 校验是否存在
64 61 this.validateMailAccountExists(mailAccountDO.getId());
... ... @@ -87,35 +84,14 @@ public class MailAccountServiceImpl implements MailAccountService {
87 84 return mailAccountMapper.selectList();
88 85 }
89 86  
90   - @Override
91   - public void sendMail(MailReqVO mailReqVO) {
92   - MailTemplateDO mailTemplateDO = mailTemplateMapper.selectById(mailReqVO.getTemplateId());
93   - //查询账号信息
94   - MailAccountDO mailAccountDO = mailAccountMapper.selectOne(
95   - "from", mailReqVO.getFrom()
96   - );
97   - String content = mailReqVO.getContent();
98   - Map<String , String> params = MailAccountConvert.INSTANCE.convertToMap(mailAccountDO , content);
99   - content = StrUtil.format(mailTemplateDO.getContent(), params);
100   -
101   - // 后续功能 TODO :附件查询
102   - //List<String> fileIds = mailSendVO.getFileIds();
103   -
104   - //装载账号信息
105   - MailAccount account = MailAccountConvert.INSTANCE.convertAccount(mailAccountDO);
106   -
107   - //发送
108   - MailUtil.send(account , mailReqVO.getTos() , mailReqVO.getTitle() , content , false);
109   - }
110   -
111 87 private void validateMailAccountExists(Long id) {
112 88 if (mailAccountMapper.selectById(id) == null) {
113 89 throw exception(MAIL_ACCOUNT_NOT_EXISTS);
114 90 }
115 91 }
116 92  
117   - private void validateMailAccountOnly(Map params){
118   - MailAccountDO mailAccountDO = mailAccountMapper.selectByParams(params);
  93 + private void validateMailAccountOnlyByUserName(String userName){
  94 + MailAccountDO mailAccountDO = mailAccountMapper.selectByUserName(userName);
119 95 if (mailAccountDO != null) {
120 96 throw exception(MAIL_ACCOUNT_EXISTS);
121 97 }
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/mail/impl/MailLogServiceImpl.java
... ... @@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.mail.MailLogMapper;
9 9 import cn.iocoder.yudao.module.system.service.mail.MailLogService;
10 10 import org.springframework.beans.factory.annotation.Autowired;
11 11 import org.springframework.stereotype.Service;
  12 +import org.springframework.validation.annotation.Validated;
12 13  
13 14 import java.util.List;
14 15  
... ... @@ -19,6 +20,7 @@ import java.util.List;
19 20 * @since 2022-03-21
20 21 */
21 22 @Service
  23 +@Validated
22 24 public class MailLogServiceImpl implements MailLogService {
23 25  
24 26 @Autowired
... ...
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/mail/impl/MailTemplateServiceImpl.java
1 1 package cn.iocoder.yudao.module.system.service.mail.impl;
2 2  
3 3  
  4 +import cn.hutool.core.util.StrUtil;
  5 +import cn.hutool.extra.mail.MailAccount;
  6 +import cn.hutool.extra.mail.MailUtil;
4 7 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  8 +import cn.iocoder.yudao.module.system.controller.admin.mail.vo.send.MailReqVO;
5 9 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateCreateReqVO;
6 10 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO;
7 11 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateUpdateReqVO;
  12 +import cn.iocoder.yudao.module.system.convert.mail.MailAccountConvert;
8 13 import cn.iocoder.yudao.module.system.convert.mail.MailTemplateConvert;
  14 +import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO;
9 15 import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO;
  16 +import cn.iocoder.yudao.module.system.dal.mysql.mail.MailAccountMapper;
10 17 import cn.iocoder.yudao.module.system.dal.mysql.mail.MailTemplateMapper;
  18 +import cn.iocoder.yudao.module.system.service.mail.MailAccountService;
11 19 import cn.iocoder.yudao.module.system.service.mail.MailTemplateService;
12 20 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
13 21 import org.springframework.stereotype.Service;
  22 +import org.springframework.validation.annotation.Validated;
14 23  
15 24 import javax.annotation.Resource;
  25 +import javax.validation.Valid;
16 26 import java.util.HashMap;
17 27 import java.util.List;
18 28 import java.util.Map;
... ... @@ -28,29 +38,27 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_TEMPL
28 38 * @since 2022-03-21
29 39 */
30 40 @Service
31   -// TODO @wangjingyi:需要 @Validated 注解,开启参数校验
  41 +@Validated
32 42 public class MailTemplateServiceImpl implements MailTemplateService {
33 43  
34 44 @Resource
35 45 private MailTemplateMapper mailTemplateMapper;
  46 + @Resource
  47 + private MailAccountMapper mailAccountMapper;
36 48  
37 49 @Override
38 50 public Long create(MailTemplateCreateReqVO createReqVO) {
39   - // name 要校验唯一
40   - Map<String , String> map = new HashMap<>();
41   - map.put("name" , createReqVO.getName()); // TODO @wangjingyi:模板名重复没关系的;code 不能重复
42   - this.validateMailTemplateOnly(map);
  51 + // code 要校验唯一
  52 + this.validateMailTemplateOnlyByCode(createReqVO.getCode());
43 53 MailTemplateDO mailTemplateDO = MailTemplateConvert.INSTANCE.convert(createReqVO);
44 54 mailTemplateMapper.insert(mailTemplateDO);
45 55 return mailTemplateDO.getId();
46 56 }
47 57  
48 58 @Override
49   - public void update(MailTemplateUpdateReqVO updateReqVO) {
50   - // username 要校验唯一
51   - Map<String , String> map = new HashMap<>();
52   - map.put("username" , updateReqVO.getUsername()); // TODO @wangjingyi:模板名重复没关系的;code 不能重复
53   - this.validateMailTemplateOnly(map);
  59 + public void update(@Valid MailTemplateUpdateReqVO updateReqVO) {
  60 + // code 要校验唯一
  61 + this.validateMailTemplateOnlyByCode(updateReqVO.getCode());
54 62 MailTemplateDO mailTemplateDO = MailTemplateConvert.INSTANCE.convert(updateReqVO);
55 63 // 校验是否存在
56 64 this.validateMailTemplateExists(mailTemplateDO.getId());
... ... @@ -75,18 +83,35 @@ public class MailTemplateServiceImpl implements MailTemplateService {
75 83 @Override
76 84 public List<MailTemplateDO> getMailTemplateList() {return mailTemplateMapper.selectList();}
77 85  
  86 + @Override
  87 + public void sendMail(MailReqVO mailReqVO) {
  88 + MailTemplateDO mailTemplateDO = mailTemplateMapper.selectById(mailReqVO.getTemplateId());
  89 + //查询账号信息
  90 + MailAccountDO mailAccountDO = mailAccountMapper.selectOne(
  91 + "from", mailReqVO.getFrom()
  92 + );
  93 + String content = mailReqVO.getContent();
  94 + Map<String , String> params = MailAccountConvert.INSTANCE.convertToMap(mailAccountDO , content);
  95 + content = StrUtil.format(mailTemplateDO.getContent(), params);
  96 +
  97 + // 后续功能 TODO :附件查询
  98 + //List<String> fileIds = mailSendVO.getFileIds();
  99 +
  100 + //装载账号信息
  101 + MailAccount account = MailAccountConvert.INSTANCE.convertAccount(mailAccountDO);
  102 +
  103 + //发送
  104 + MailUtil.send(account , mailReqVO.getTos() , mailReqVO.getTitle() , content , false);
  105 + }
  106 +
78 107 private void validateMailTemplateExists(Long id) {
79 108 if (mailTemplateMapper.selectById(id) == null) {
80 109 throw exception(MAIL_TEMPLATE_NOT_EXISTS);
81 110 }
82 111 }
83 112  
84   - private void validateMailTemplateOnly(Map params){
85   - QueryWrapper queryWrapper = new QueryWrapper<MailTemplateDO>();
86   - params.forEach((k , v)->{
87   - queryWrapper.like(k , v);
88   - });
89   - if (mailTemplateMapper.selectOne(queryWrapper) != null) {
  113 + private void validateMailTemplateOnlyByCode(String code){
  114 + if (mailTemplateMapper.selectOneByCode(code) != null) {
90 115 throw exception(MAIL_TEMPLATE_EXISTS);
91 116 }
92 117 }
... ...