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,7 +52,7 @@ public class MailAccountController {
52 @ApiOperation("删除邮箱账号") 52 @ApiOperation("删除邮箱账号")
53 @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class) 53 @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class)
54 @PreAuthorize("@ss.hasPermission('system:mail-account:delete')") 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 mailAccountService.delete(id); 56 mailAccountService.delete(id);
57 return success(true); 57 return success(true);
58 } 58 }
@@ -83,11 +83,4 @@ public class MailAccountController { @@ -83,11 +83,4 @@ public class MailAccountController {
83 return success(MailAccountConvert.INSTANCE.convertList02(list)); 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,6 +28,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
28 @RestController 28 @RestController
29 @RequestMapping("/system/mail-log") 29 @RequestMapping("/system/mail-log")
30 public class MailLogController { 30 public class MailLogController {
  31 +
31 @Autowired 32 @Autowired
32 private MailLogService mailLogService; 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,6 +2,7 @@ package cn.iocoder.yudao.module.system.controller.admin.mail;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 3 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  5 +import cn.iocoder.yudao.module.system.controller.admin.mail.vo.send.MailReqVO;
5 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateBaseVO; 6 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateBaseVO;
6 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateCreateReqVO; 7 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateCreateReqVO;
7 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO; 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,8 +28,9 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
27 @RestController 28 @RestController
28 @RequestMapping("/system/mail-template") 29 @RequestMapping("/system/mail-template")
29 public class MailTemplateController { 30 public class MailTemplateController {
  31 +
30 @Autowired 32 @Autowired
31 - MailTemplateService mailTempleService; // TODO @wangjingyi:private;和上面要空一行; 33 + MailTemplateService mailTempleService;
32 34
33 @PostMapping("/create") 35 @PostMapping("/create")
34 @ApiOperation("创建邮箱模版") 36 @ApiOperation("创建邮箱模版")
@@ -64,7 +66,7 @@ public class MailTemplateController { @@ -64,7 +66,7 @@ public class MailTemplateController {
64 66
65 @GetMapping("/page") 67 @GetMapping("/page")
66 @ApiOperation("获得邮箱模版分页") 68 @ApiOperation("获得邮箱模版分页")
67 - @PreAuthorize("@ss.hasPermission('system:mail-account:query')") 69 + @PreAuthorize("@ss.hasPermission('system:mail-template:query')")
68 public CommonResult<PageResult<MailTemplateBaseVO>> getMailTemplatePage(@Valid MailTemplatePageReqVO pageReqVO) { 70 public CommonResult<PageResult<MailTemplateBaseVO>> getMailTemplatePage(@Valid MailTemplatePageReqVO pageReqVO) {
69 PageResult<MailTemplateDO> pageResult = mailTempleService.getMailTemplatePage(pageReqVO); 71 PageResult<MailTemplateDO> pageResult = mailTempleService.getMailTemplatePage(pageReqVO);
70 return success(MailTemplateConvert.INSTANCE.convertPage(pageResult)); 72 return success(MailTemplateConvert.INSTANCE.convertPage(pageResult));
@@ -78,4 +80,12 @@ public class MailTemplateController { @@ -78,4 +80,12 @@ public class MailTemplateController {
78 list.sort(Comparator.comparing(MailTemplateDO::getId)); 80 list.sort(Comparator.comparing(MailTemplateDO::getId));
79 return success(MailTemplateConvert.INSTANCE.convertList02(list)); 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,6 +3,9 @@ package cn.iocoder.yudao.module.system.controller.admin.mail.vo.account;
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
5 import lombok.Data; 5 import lombok.Data;
  6 +
  7 +import javax.validation.constraints.NotNull;
  8 +
6 @ApiModel("管理后台 - 邮箱账号基类 Base VO") 9 @ApiModel("管理后台 - 邮箱账号基类 Base VO")
7 @Data 10 @Data
8 public class MailAccountBaseVO { 11 public class MailAccountBaseVO {
@@ -11,6 +14,7 @@ public class MailAccountBaseVO { @@ -11,6 +14,7 @@ public class MailAccountBaseVO {
11 private String from; 14 private String from;
12 15
13 @ApiModelProperty(value = "用户名" , required = true , example = "yudao") 16 @ApiModelProperty(value = "用户名" , required = true , example = "yudao")
  17 + @NotNull(message = "用户名必填")
14 private String username; 18 private String username;
15 19
16 @ApiModelProperty(value = "密码" , required = true , example = "123456") 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,7 +9,7 @@ import java.util.List;
9 9
10 @ApiModel("管理后台 - 邮件发送 Req VO") 10 @ApiModel("管理后台 - 邮件发送 Req VO")
11 @Data 11 @Data
12 -public class MailReqVO { // TODO @wangjingyi:1)参数校验;2)ReqVO 12 +public class MailReqVO {
13 13
14 @ApiModelProperty(value = "邮箱" , required = true , example = "yudaoyuanma@123.com") 14 @ApiModelProperty(value = "邮箱" , required = true , example = "yudaoyuanma@123.com")
15 @NotNull(message = "邮箱账号不能为空") 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,6 +4,8 @@ import io.swagger.annotations.ApiModel;
4 import io.swagger.annotations.ApiModelProperty; 4 import io.swagger.annotations.ApiModelProperty;
5 import lombok.Data; 5 import lombok.Data;
6 6
  7 +import javax.validation.constraints.NotNull;
  8 +
7 @ApiModel("管理后台 - 邮箱模版基类 Base VO") 9 @ApiModel("管理后台 - 邮箱模版基类 Base VO")
8 @Data 10 @Data
9 public class MailTemplateBaseVO { 11 public class MailTemplateBaseVO {
@@ -14,6 +16,7 @@ public class MailTemplateBaseVO { @@ -14,6 +16,7 @@ public class MailTemplateBaseVO {
14 private String name; 16 private String name;
15 17
16 @ApiModelProperty("标识") 18 @ApiModelProperty("标识")
  19 + @NotNull(message = "邮箱模版code不能为空")
17 private String code; 20 private String code;
18 21
19 @ApiModelProperty("发件人") 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,34 +11,45 @@ import lombok.experimental.Accessors;
11 11
12 import java.io.Serializable; 12 import java.io.Serializable;
13 13
  14 +@TableName(value = "system_mail_account", autoResultMap = true)
14 @Data 15 @Data
15 @EqualsAndHashCode(callSuper = true) 16 @EqualsAndHashCode(callSuper = true)
16 @Accessors(chain = true) 17 @Accessors(chain = true)
17 -@ApiModel(value="MailAccount对象", description="邮箱账号") // TODO @wangjingyi:不需要 swagger 注解  
18 -@TableName(value = "system_mail_account", autoResultMap = true) // TODO @wangjingyi:这个放在最上面,关键字段  
19 public class MailAccountDO extends BaseDO implements Serializable { 18 public class MailAccountDO extends BaseDO implements Serializable {
20 19
21 - // TODO @wangjingyi:每个字段的注释;字段名,如果一直,不用 @TableField  
22 -  
23 - @TableId 20 + /**
  21 + * 主键
  22 + */
24 private Long id; 23 private Long id;
25 24
26 - @TableField("from") 25 + /**
  26 + * 邮箱
  27 + */
27 private String from; 28 private String from;
28 29
29 - @TableField("username") 30 + /**
  31 + * 用户名
  32 + */
30 private String username; 33 private String username;
31 34
32 - @TableField("password") 35 + /**
  36 + * 密码
  37 + */
33 private String password; 38 private String password;
34 39
35 - @TableField("host") 40 + /**
  41 + * 主机
  42 + */
36 private String host; 43 private String host;
37 44
38 - @TableField("port") 45 + /**
  46 + * 端口
  47 + */
39 private Integer port; 48 private Integer port;
40 49
41 - @TableField("sslEnable") 50 + /**
  51 + * 是否开启ssl
  52 + */
42 private Boolean sslEnable; 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,6 +5,8 @@ import java.sql.Timestamp;
5 import com.baomidou.mybatisplus.annotation.TableId; 5 import com.baomidou.mybatisplus.annotation.TableId;
6 import com.baomidou.mybatisplus.annotation.TableField; 6 import com.baomidou.mybatisplus.annotation.TableField;
7 import java.io.Serializable; 7 import java.io.Serializable;
  8 +
  9 +import com.baomidou.mybatisplus.annotation.TableName;
8 import io.swagger.annotations.ApiModel; 10 import io.swagger.annotations.ApiModel;
9 import lombok.Data; 11 import lombok.Data;
10 import lombok.EqualsAndHashCode; 12 import lombok.EqualsAndHashCode;
@@ -18,44 +20,65 @@ import lombok.experimental.Accessors; @@ -18,44 +20,65 @@ import lombok.experimental.Accessors;
18 * @author wangjingyi 20 * @author wangjingyi
19 * @since 2022-03-21 21 * @since 2022-03-21
20 */ 22 */
  23 +@TableName(value = "system_mail_log", autoResultMap = true)
21 @Data 24 @Data
22 @EqualsAndHashCode(callSuper = true) 25 @EqualsAndHashCode(callSuper = true)
23 @Accessors(chain = true) 26 @Accessors(chain = true)
24 -@ApiModel(value="SystemMailLog对象", description="")  
25 public class MailLogDO extends BaseDO implements Serializable { 27 public class MailLogDO extends BaseDO implements Serializable {
26 28
27 - private static final long serialVersionUID = 1L;  
28 - @TableId 29 + /**
  30 + * 主键
  31 + */
29 private Long id; 32 private Long id;
30 33
31 - @TableField("account_code") 34 + /**
  35 + * 邮箱账号编号
  36 + */
32 private String accountCode; 37 private String accountCode;
33 38
34 - @TableField("from") 39 + /**
  40 + * 邮箱账号
  41 + */
35 private String from; 42 private String from;
36 43
37 - @TableField("template_id") 44 + /**
  45 + * 模版主键
  46 + */
38 private String templateId; 47 private String templateId;
39 48
40 - @TableField("template_code") 49 + /**
  50 + * 模版编号
  51 + */
41 private String templateCode; 52 private String templateCode;
42 53
43 - @TableField("title") 54 + /**
  55 + * 标题
  56 + */
44 private String title; 57 private String title;
45 58
46 - @TableField("content") 59 + /**
  60 + * 内容
  61 + */
47 private String content; 62 private String content;
48 63
49 - @TableField("to") 64 + /**
  65 + * 收件人
  66 + */
50 private String to; 67 private String to;
51 68
52 - @TableField("sendTime") 69 + /**
  70 + * 发送时间
  71 + */
53 private Timestamp sendTime; 72 private Timestamp sendTime;
54 73
55 - @TableField("sendStatus") 74 + /**
  75 + * 发送状态
  76 + */
56 private Boolean sendStatus; 77 private Boolean sendStatus;
57 78
58 - @TableField("sendResult") 79 + /**
  80 + * 发送结果
  81 + */
59 private String sendResult; 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,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.IdType;
5 import com.baomidou.mybatisplus.annotation.TableId; 5 import com.baomidou.mybatisplus.annotation.TableId;
6 import com.baomidou.mybatisplus.annotation.TableField; 6 import com.baomidou.mybatisplus.annotation.TableField;
7 import java.io.Serializable; 7 import java.io.Serializable;
  8 +
  9 +import com.baomidou.mybatisplus.annotation.TableName;
8 import io.swagger.annotations.ApiModel; 10 import io.swagger.annotations.ApiModel;
9 import io.swagger.annotations.ApiModelProperty; 11 import io.swagger.annotations.ApiModelProperty;
10 import lombok.Data; 12 import lombok.Data;
@@ -19,35 +21,50 @@ import lombok.experimental.Accessors; @@ -19,35 +21,50 @@ import lombok.experimental.Accessors;
19 * @author wangjingyi 21 * @author wangjingyi
20 * @since 2022-03-21 22 * @since 2022-03-21
21 */ 23 */
  24 +@TableName(value = "system_mail_template", autoResultMap = true)
22 @Data 25 @Data
23 @EqualsAndHashCode(callSuper = true) 26 @EqualsAndHashCode(callSuper = true)
24 @Accessors(chain = true) 27 @Accessors(chain = true)
25 -@ApiModel(value="SystemMailTemplate对象", description="")  
26 public class MailTemplateDO extends BaseDO implements Serializable { 28 public class MailTemplateDO extends BaseDO implements Serializable {
27 29
28 - private static final long serialVersionUID = 1L;  
29 - @TableId 30 + /**
  31 + * 主键
  32 + */
30 private Long id; 33 private Long id;
31 34
32 - @TableField("name") 35 + /**
  36 + * 模版名称
  37 + */
33 private String name; 38 private String name;
34 39
35 - @TableField("code") 40 + /**
  41 + * 模版编号
  42 + */
36 private String code; 43 private String code;
37 44
38 - @TableField("username") 45 + /**
  46 + * 用户名
  47 + */
39 private String username; 48 private String username;
40 49
41 - @TableField("title") 50 + /**
  51 + * 标题
  52 + */
42 private String title; 53 private String title;
43 54
44 - @TableField("content") 55 + /**
  56 + * 内容
  57 + */
45 private String content; 58 private String content;
46 59
47 - @TableField("status") 60 + /**
  61 + * 状态
  62 + */
48 private String status; 63 private String status;
49 64
50 - @TableField("remark") 65 + /**
  66 + * 备注
  67 + */
51 private String remark; 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,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 QueryWrapperX queryWrapperX = new QueryWrapperX<MailAccountDO>(); 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,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,6 +7,7 @@ import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccou
7 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.send.MailReqVO; 7 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.send.MailReqVO;
8 import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; 8 import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO;
9 9
  10 +import javax.validation.Valid;
10 import java.util.List; 11 import java.util.List;
11 12
12 13
@@ -22,46 +23,47 @@ public interface MailAccountService { @@ -22,46 +23,47 @@ public interface MailAccountService {
22 23
23 /** 24 /**
24 * 创建邮箱账号 // TODO @wangjingyi:方法描述,和参数要空行 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 void delete(Long id); 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 MailAccountDO getMailAccount(Long id); 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 PageResult<MailAccountDO> getMailAccountPage(MailAccountPageReqVO pageReqVO); 60 PageResult<MailAccountDO> getMailAccountPage(MailAccountPageReqVO pageReqVO);
55 61
56 /** 62 /**
57 * 获取邮箱数组信息 63 * 获取邮箱数组信息
58 - * @return 64 + *
  65 + * @return 邮箱账号信息数组
59 */ 66 */
60 List<MailAccountDO> getMailAccountList(); 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 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;
4 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateCreateReqVO; 5 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateCreateReqVO;
5 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO; 6 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO;
6 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateUpdateReqVO; 7 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateUpdateReqVO;
7 import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO; 8 import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO;
8 9
  10 +import javax.validation.Valid;
9 import java.util.List; 11 import java.util.List;
10 12
11 /** 13 /**
@@ -16,44 +18,52 @@ import java.util.List; @@ -16,44 +18,52 @@ import java.util.List;
16 */ 18 */
17 public interface MailTemplateService { 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 void delete(Long id); 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 MailTemplateDO getMailTemplate(Long id); 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 PageResult<MailTemplateDO> getMailTemplatePage(MailTemplatePageReqVO pageReqVO); 54 PageResult<MailTemplateDO> getMailTemplatePage(MailTemplatePageReqVO pageReqVO);
53 55
54 /** 56 /**
55 * 获取邮箱模板数组 57 * 获取邮箱模板数组
56 - * @return 58 + *
  59 + * @return 模版数组
57 */ 60 */
58 List<MailTemplateDO> getMailTemplateList(); 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,6 +15,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.mail.MailAccountMapper;
15 import cn.iocoder.yudao.module.system.dal.mysql.mail.MailTemplateMapper; 15 import cn.iocoder.yudao.module.system.dal.mysql.mail.MailTemplateMapper;
16 import cn.iocoder.yudao.module.system.service.mail.MailAccountService; 16 import cn.iocoder.yudao.module.system.service.mail.MailAccountService;
17 import org.springframework.stereotype.Service; 17 import org.springframework.stereotype.Service;
  18 +import org.springframework.validation.annotation.Validated;
18 19
19 import javax.annotation.Resource; 20 import javax.annotation.Resource;
20 import java.util.HashMap; 21 import java.util.HashMap;
@@ -33,7 +34,7 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_ACCOU @@ -33,7 +34,7 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_ACCOU
33 * @since 2022-03-21 34 * @since 2022-03-21
34 */ 35 */
35 @Service 36 @Service
36 -// TODO @wangjingyi:需要 @Validated 注解,开启参数校验 37 +@Validated
37 public class MailAccountServiceImpl implements MailAccountService { 38 public class MailAccountServiceImpl implements MailAccountService {
38 39
39 @Resource 40 @Resource
@@ -45,9 +46,7 @@ public class MailAccountServiceImpl implements MailAccountService { @@ -45,9 +46,7 @@ public class MailAccountServiceImpl implements MailAccountService {
45 @Override 46 @Override
46 public Long create(MailAccountCreateReqVO createReqVO) { 47 public Long create(MailAccountCreateReqVO createReqVO) {
47 // username 要校验唯一 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 MailAccountDO mailAccountDO = MailAccountConvert.INSTANCE.convert(createReqVO); 50 MailAccountDO mailAccountDO = MailAccountConvert.INSTANCE.convert(createReqVO);
52 mailAccountMapper.insert(mailAccountDO); 51 mailAccountMapper.insert(mailAccountDO);
53 return mailAccountDO.getId(); 52 return mailAccountDO.getId();
@@ -55,10 +54,8 @@ public class MailAccountServiceImpl implements MailAccountService { @@ -55,10 +54,8 @@ public class MailAccountServiceImpl implements MailAccountService {
55 54
56 @Override 55 @Override
57 public void update(MailAccountUpdateReqVO updateReqVO) { 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 MailAccountDO mailAccountDO = MailAccountConvert.INSTANCE.convert(updateReqVO); 59 MailAccountDO mailAccountDO = MailAccountConvert.INSTANCE.convert(updateReqVO);
63 // 校验是否存在 60 // 校验是否存在
64 this.validateMailAccountExists(mailAccountDO.getId()); 61 this.validateMailAccountExists(mailAccountDO.getId());
@@ -87,35 +84,14 @@ public class MailAccountServiceImpl implements MailAccountService { @@ -87,35 +84,14 @@ public class MailAccountServiceImpl implements MailAccountService {
87 return mailAccountMapper.selectList(); 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 private void validateMailAccountExists(Long id) { 87 private void validateMailAccountExists(Long id) {
112 if (mailAccountMapper.selectById(id) == null) { 88 if (mailAccountMapper.selectById(id) == null) {
113 throw exception(MAIL_ACCOUNT_NOT_EXISTS); 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 if (mailAccountDO != null) { 95 if (mailAccountDO != null) {
120 throw exception(MAIL_ACCOUNT_EXISTS); 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,6 +9,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.mail.MailLogMapper;
9 import cn.iocoder.yudao.module.system.service.mail.MailLogService; 9 import cn.iocoder.yudao.module.system.service.mail.MailLogService;
10 import org.springframework.beans.factory.annotation.Autowired; 10 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.stereotype.Service; 11 import org.springframework.stereotype.Service;
  12 +import org.springframework.validation.annotation.Validated;
12 13
13 import java.util.List; 14 import java.util.List;
14 15
@@ -19,6 +20,7 @@ import java.util.List; @@ -19,6 +20,7 @@ import java.util.List;
19 * @since 2022-03-21 20 * @since 2022-03-21
20 */ 21 */
21 @Service 22 @Service
  23 +@Validated
22 public class MailLogServiceImpl implements MailLogService { 24 public class MailLogServiceImpl implements MailLogService {
23 25
24 @Autowired 26 @Autowired
yudao-module-system/yudao-module-system-impl/src/main/java/cn/iocoder/yudao/module/system/service/mail/impl/MailTemplateServiceImpl.java
1 package cn.iocoder.yudao.module.system.service.mail.impl; 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 import cn.iocoder.yudao.framework.common.pojo.PageResult; 7 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  8 +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; 9 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; 10 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; 11 import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateUpdateReqVO;
  12 +import cn.iocoder.yudao.module.system.convert.mail.MailAccountConvert;
8 import cn.iocoder.yudao.module.system.convert.mail.MailTemplateConvert; 13 import cn.iocoder.yudao.module.system.convert.mail.MailTemplateConvert;
  14 +import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO;
9 import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO; 15 import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO;
  16 +import cn.iocoder.yudao.module.system.dal.mysql.mail.MailAccountMapper;
10 import cn.iocoder.yudao.module.system.dal.mysql.mail.MailTemplateMapper; 17 import cn.iocoder.yudao.module.system.dal.mysql.mail.MailTemplateMapper;
  18 +import cn.iocoder.yudao.module.system.service.mail.MailAccountService;
11 import cn.iocoder.yudao.module.system.service.mail.MailTemplateService; 19 import cn.iocoder.yudao.module.system.service.mail.MailTemplateService;
12 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 20 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
13 import org.springframework.stereotype.Service; 21 import org.springframework.stereotype.Service;
  22 +import org.springframework.validation.annotation.Validated;
14 23
15 import javax.annotation.Resource; 24 import javax.annotation.Resource;
  25 +import javax.validation.Valid;
16 import java.util.HashMap; 26 import java.util.HashMap;
17 import java.util.List; 27 import java.util.List;
18 import java.util.Map; 28 import java.util.Map;
@@ -28,29 +38,27 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_TEMPL @@ -28,29 +38,27 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_TEMPL
28 * @since 2022-03-21 38 * @since 2022-03-21
29 */ 39 */
30 @Service 40 @Service
31 -// TODO @wangjingyi:需要 @Validated 注解,开启参数校验 41 +@Validated
32 public class MailTemplateServiceImpl implements MailTemplateService { 42 public class MailTemplateServiceImpl implements MailTemplateService {
33 43
34 @Resource 44 @Resource
35 private MailTemplateMapper mailTemplateMapper; 45 private MailTemplateMapper mailTemplateMapper;
  46 + @Resource
  47 + private MailAccountMapper mailAccountMapper;
36 48
37 @Override 49 @Override
38 public Long create(MailTemplateCreateReqVO createReqVO) { 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 MailTemplateDO mailTemplateDO = MailTemplateConvert.INSTANCE.convert(createReqVO); 53 MailTemplateDO mailTemplateDO = MailTemplateConvert.INSTANCE.convert(createReqVO);
44 mailTemplateMapper.insert(mailTemplateDO); 54 mailTemplateMapper.insert(mailTemplateDO);
45 return mailTemplateDO.getId(); 55 return mailTemplateDO.getId();
46 } 56 }
47 57
48 @Override 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 MailTemplateDO mailTemplateDO = MailTemplateConvert.INSTANCE.convert(updateReqVO); 62 MailTemplateDO mailTemplateDO = MailTemplateConvert.INSTANCE.convert(updateReqVO);
55 // 校验是否存在 63 // 校验是否存在
56 this.validateMailTemplateExists(mailTemplateDO.getId()); 64 this.validateMailTemplateExists(mailTemplateDO.getId());
@@ -75,18 +83,35 @@ public class MailTemplateServiceImpl implements MailTemplateService { @@ -75,18 +83,35 @@ public class MailTemplateServiceImpl implements MailTemplateService {
75 @Override 83 @Override
76 public List<MailTemplateDO> getMailTemplateList() {return mailTemplateMapper.selectList();} 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 private void validateMailTemplateExists(Long id) { 107 private void validateMailTemplateExists(Long id) {
79 if (mailTemplateMapper.selectById(id) == null) { 108 if (mailTemplateMapper.selectById(id) == null) {
80 throw exception(MAIL_TEMPLATE_NOT_EXISTS); 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 throw exception(MAIL_TEMPLATE_EXISTS); 115 throw exception(MAIL_TEMPLATE_EXISTS);
91 } 116 }
92 } 117 }