code review 邮件模块 second

This commit is contained in:
YunaiV 2022-03-31 21:40:10 +08:00
parent e1d79b5ea9
commit d1812761db
12 changed files with 36 additions and 69 deletions

View File

@ -8,7 +8,7 @@ import javax.validation.constraints.NotNull;
@ApiModel("管理后台 - 邮箱账号基类 Base VO") @ApiModel("管理后台 - 邮箱账号基类 Base VO")
@Data @Data
public class MailAccountBaseVO { public class MailAccountBaseVO { // TODO @wangjingqi1, 不用空格2fromusernamepasswordhostsslEnable 都要参数校验非空3username Email 格式port Integer
@ApiModelProperty(value = "邮箱" , required = true , example = "yudaoyuanma@123.com") @ApiModelProperty(value = "邮箱" , required = true , example = "yudaoyuanma@123.com")
private String from; private String from;

View File

@ -9,7 +9,7 @@ import java.util.List;
@ApiModel("管理后台 - 邮件发送 Req VO") @ApiModel("管理后台 - 邮件发送 Req VO")
@Data @Data
public class MailReqVO { public class MailReqVO { // TODO @wangjingqi1, 不用空格2应该只要传递 templateCode参数就好titlefromcontent附件应该都是参数里的
@ApiModelProperty(value = "邮箱" , required = true , example = "yudaoyuanma@123.com") @ApiModelProperty(value = "邮箱" , required = true , example = "yudaoyuanma@123.com")
@NotNull(message = "邮箱账号不能为空") @NotNull(message = "邮箱账号不能为空")

View File

@ -8,7 +8,7 @@ import javax.validation.constraints.NotNull;
@ApiModel("管理后台 - 邮箱模版基类 Base VO") @ApiModel("管理后台 - 邮箱模版基类 Base VO")
@Data @Data
public class MailTemplateBaseVO { public class MailTemplateBaseVO { // TODO @wangjingqi1swagger 注解不完善2idnamecodeusernametitlecontentstatus 是不是要参数校验呀
@ApiModelProperty("主键") @ApiModelProperty("主键")
private Long id; private Long id;

View File

@ -1,56 +1,49 @@
package cn.iocoder.yudao.module.system.dal.dataobject.mail; package cn.iocoder.yudao.module.system.dal.dataobject.mail;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 邮箱账号
* 配置发送邮箱的账号
*
* @author wangjingyi
* @since 2022-03-21
*/
@TableName(value = "system_mail_account", autoResultMap = true) @TableName(value = "system_mail_account", autoResultMap = true)
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Accessors(chain = true) public class MailAccountDO extends BaseDO {
public class MailAccountDO extends BaseDO implements Serializable {
/** /**
* 主键 * 主键
*/ */
private Long id; private Long id;
/** /**
* 邮箱 * 邮箱
*/ */
private String from; private String from;
/** /**
* 用户名 * 用户名
*/ */
private String username; private String username;
/** /**
* 密码 * 密码
*/ */
private String password; private String password;
/** /**
* 主机 * 主机
*/ */
private String host; private String host;
/** /**
* 端口 * 端口
*/ */
private Integer port; private Integer port;
/** /**
* 是否开启ssl * 是否开启 SSL
*/ */
private Boolean sslEnable; private Boolean sslEnable;
} }

View File

@ -1,21 +1,16 @@
package cn.iocoder.yudao.module.system.dal.dataobject.mail; package cn.iocoder.yudao.module.system.dal.dataobject.mail;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import java.sql.Timestamp;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.sql.Timestamp;
/** /**
* <p>
* 邮箱日志 * 邮箱日志
* </p> * 记录每一次邮件的发送
* *
* @author wangjingyi * @author wangjingyi
* @since 2022-03-21 * @since 2022-03-21
@ -23,7 +18,6 @@ import lombok.experimental.Accessors;
@TableName(value = "system_mail_log", autoResultMap = true) @TableName(value = "system_mail_log", autoResultMap = true)
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
public class MailLogDO extends BaseDO implements Serializable { public class MailLogDO extends BaseDO implements Serializable {
/** /**
@ -31,11 +25,13 @@ public class MailLogDO extends BaseDO implements Serializable {
*/ */
private Long id; private Long id;
// TODO @wangjingyiaccountId
/** /**
* 邮箱账号编号 * 邮箱账号编号
*/ */
private String accountCode; private String accountCode;
// TODO @wangjingyi如果是冗余字段记得 @
/** /**
* 邮箱账号 * 邮箱账号
*/ */
@ -74,6 +70,7 @@ public class MailLogDO extends BaseDO implements Serializable {
/** /**
* 发送状态 * 发送状态
*/ */
// TODO @wangjingyi四个状态参考短信模块
private Boolean sendStatus; private Boolean sendStatus;
/** /**

View File

@ -1,22 +1,13 @@
package cn.iocoder.yudao.module.system.dal.dataobject.mail; package cn.iocoder.yudao.module.system.dal.dataobject.mail;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/** /**
* <p>
* 邮箱模版 * 邮箱模版
* </p>
* *
* @author wangjingyi * @author wangjingyi
* @since 2022-03-21 * @since 2022-03-21
@ -24,48 +15,42 @@ import lombok.experimental.Accessors;
@TableName(value = "system_mail_template", autoResultMap = true) @TableName(value = "system_mail_template", autoResultMap = true)
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Accessors(chain = true) public class MailTemplateDO extends BaseDO {
public class MailTemplateDO extends BaseDO implements Serializable {
/** /**
* 主键 * 主键
*/ */
private Long id; private Long id;
/** /**
* 模版名称 * 模版名称
*/ */
private String name; private String name;
/** /**
* 模版编号 * 模版编号
*/ */
private String code; private String code;
// TODO @wangjingyi应该使用 accountId
/** /**
* 用户名 * 用户名
*/ */
private String username; private String username;
/** /**
* 标题 * 标题
*/ */
private String title; private String title;
/** /**
* 内容 * 内容
*/ */
private String content; private String content;
/** /**
* 状态 * 状态
*
* 枚举 {@link CommonStatusEnum}
*/ */
private String status; private String status; // TODO @wangjingyiInteger
/** /**
* 备注 * 备注
*/ */
private String remark; private String remark;
} }

View File

@ -7,8 +7,6 @@ import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccou
import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.Map;
@Mapper @Mapper
public interface MailAccountMapper extends BaseMapperX<MailAccountDO> { public interface MailAccountMapper extends BaseMapperX<MailAccountDO> {
@ -23,7 +21,8 @@ public interface MailAccountMapper extends BaseMapperX<MailAccountDO> {
} }
default MailAccountDO selectByUserName(String userName){ default MailAccountDO selectByUserName(String userName){
QueryWrapperX queryWrapperX = new QueryWrapperX<MailAccountDO>(); // TODO @wangjingyiselectOne 有封装的方法然后编码一定要学会使用泛型呀例如说 QueryWrapperX<MailAccountDO> queryWrapperX = new QueryWrapperX<>();
QueryWrapperX<MailAccountDO> queryWrapperX = new QueryWrapperX<>();
queryWrapperX.eqIfPresent("username", userName); queryWrapperX.eqIfPresent("username", userName);
return this.selectOne(queryWrapperX); return this.selectOne(queryWrapperX);
}; };

View File

@ -23,6 +23,7 @@ public interface MailTemplateMapper extends BaseMapperX<MailTemplateDO> {
} }
default MailTemplateDO selectOneByCode(String code){ default MailTemplateDO selectOneByCode(String code){
// TODO @wangjingyi优先使用 lambada 查询
return selectOne("code" , code); return selectOne("code" , code);
}; };
} }

View File

@ -4,7 +4,6 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountCreateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountUpdateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.send.MailReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO;
import javax.validation.Valid; import javax.validation.Valid;
@ -19,10 +18,8 @@ import java.util.List;
*/ */
public interface MailAccountService { public interface MailAccountService {
// TODO @wangjingyi注释完整参数校验还是要做的
/** /**
* 创建邮箱账号 // TODO @wangjingyi方法描述和参数要空行 * 创建邮箱账号
* *
* @param createReqVO 邮箱账号信息 * @param createReqVO 邮箱账号信息
* @return 编号 * @return 编号

View File

@ -20,6 +20,7 @@ public interface MailTemplateService {
/** /**
* 邮箱模版创建 * 邮箱模版创建
*
* @param createReqVO 邮箱信息 * @param createReqVO 邮箱信息
* @return 编号 * @return 编号
*/ */
@ -27,12 +28,14 @@ public interface MailTemplateService {
/** /**
* 邮箱模版修改 * 邮箱模版修改
*
* @param updateReqVO 邮箱信息 * @param updateReqVO 邮箱信息
*/ */
void update(@Valid MailTemplateUpdateReqVO updateReqVO); void update(@Valid MailTemplateUpdateReqVO updateReqVO);
/** /**
* 邮箱模版删除 * 邮箱模版删除
*
* @param id 编号 * @param id 编号
*/ */
void delete(Long id); void delete(Long id);

View File

@ -1,16 +1,11 @@
package cn.iocoder.yudao.module.system.service.mail.impl; package cn.iocoder.yudao.module.system.service.mail.impl;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.mail.MailAccount;
import cn.hutool.extra.mail.MailUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountCreateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccountUpdateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.send.MailReqVO;
import cn.iocoder.yudao.module.system.convert.mail.MailAccountConvert; import cn.iocoder.yudao.module.system.convert.mail.MailAccountConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO;
import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO;
import cn.iocoder.yudao.module.system.dal.mysql.mail.MailAccountMapper; import cn.iocoder.yudao.module.system.dal.mysql.mail.MailAccountMapper;
import cn.iocoder.yudao.module.system.dal.mysql.mail.MailTemplateMapper; import cn.iocoder.yudao.module.system.dal.mysql.mail.MailTemplateMapper;
import cn.iocoder.yudao.module.system.service.mail.MailAccountService; import cn.iocoder.yudao.module.system.service.mail.MailAccountService;
@ -18,9 +13,7 @@ import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_ACCOUNT_EXISTS; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_ACCOUNT_EXISTS;
@ -54,7 +47,7 @@ public class MailAccountServiceImpl implements MailAccountService {
@Override @Override
public void update(MailAccountUpdateReqVO updateReqVO) { public void update(MailAccountUpdateReqVO updateReqVO) {
// username 要校验唯一 // username 要校验唯一 // TODO @wangjingyi更新的就是自己username 这样写会重复呀
this.validateMailAccountOnlyByUserName(updateReqVO.getUsername()); this.validateMailAccountOnlyByUserName(updateReqVO.getUsername());
MailAccountDO mailAccountDO = MailAccountConvert.INSTANCE.convert(updateReqVO); MailAccountDO mailAccountDO = MailAccountConvert.INSTANCE.convert(updateReqVO);
// 校验是否存在 // 校验是否存在
@ -64,6 +57,7 @@ public class MailAccountServiceImpl implements MailAccountService {
@Override @Override
public void delete(Long id) { public void delete(Long id) {
// TODO @wangjingyi删除时要判断是否有使用的模板
// 校验是否存在 // 校验是否存在
this.validateMailAccountExists(id); this.validateMailAccountExists(id);
mailAccountMapper.deleteById(id); mailAccountMapper.deleteById(id);

View File

@ -15,15 +15,12 @@ import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO;
import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO; import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO;
import cn.iocoder.yudao.module.system.dal.mysql.mail.MailAccountMapper; import cn.iocoder.yudao.module.system.dal.mysql.mail.MailAccountMapper;
import cn.iocoder.yudao.module.system.dal.mysql.mail.MailTemplateMapper; import cn.iocoder.yudao.module.system.dal.mysql.mail.MailTemplateMapper;
import cn.iocoder.yudao.module.system.service.mail.MailAccountService;
import cn.iocoder.yudao.module.system.service.mail.MailTemplateService; import cn.iocoder.yudao.module.system.service.mail.MailTemplateService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -58,7 +55,7 @@ public class MailTemplateServiceImpl implements MailTemplateService {
@Override @Override
public void update(@Valid MailTemplateUpdateReqVO updateReqVO) { public void update(@Valid MailTemplateUpdateReqVO updateReqVO) {
// code 要校验唯一 // code 要校验唯一
this.validateMailTemplateOnlyByCode(updateReqVO.getCode()); this.validateMailTemplateOnlyByCode(updateReqVO.getCode()); // TODO @wangjingyicode 这样写修改自己会有问题
MailTemplateDO mailTemplateDO = MailTemplateConvert.INSTANCE.convert(updateReqVO); MailTemplateDO mailTemplateDO = MailTemplateConvert.INSTANCE.convert(updateReqVO);
// 校验是否存在 // 校验是否存在
this.validateMailTemplateExists(mailTemplateDO.getId()); this.validateMailTemplateExists(mailTemplateDO.getId());
@ -85,6 +82,7 @@ public class MailTemplateServiceImpl implements MailTemplateService {
@Override @Override
public void sendMail(MailReqVO mailReqVO) { public void sendMail(MailReqVO mailReqVO) {
// TODO @@wangjingyi发送的时候参考下短信
MailTemplateDO mailTemplateDO = mailTemplateMapper.selectById(mailReqVO.getTemplateId()); MailTemplateDO mailTemplateDO = mailTemplateMapper.selectById(mailReqVO.getTemplateId());
//查询账号信息 //查询账号信息
MailAccountDO mailAccountDO = mailAccountMapper.selectOne( MailAccountDO mailAccountDO = mailAccountMapper.selectOne(