fix: 邮件模板配置枚举字段获取

This commit is contained in:
bunny 2024-10-14 16:57:49 +08:00
parent 4c3a2e87d0
commit 50a42f842c
8 changed files with 62 additions and 61 deletions

View File

@ -1,23 +0,0 @@
package cn.bunny.common.service.utils.mail;
import cn.bunny.common.service.utils.EmptyUtil;
import cn.bunny.dao.pojo.common.EmailSend;
import cn.bunny.dao.pojo.constant.MailMessageConstant;
public class MailSendCheckUtil {
/**
* 检测发送对象是否为空的对象
*
* @param emailSend 邮件发送对象
*/
public static void check(EmailSend emailSend) {
// 空发送对象
EmptyUtil.isEmpty(emailSend, MailMessageConstant.EMPTY_SEND_OBJECT);
// 收件人不能为空
EmptyUtil.isEmpty(emailSend.getSendTo(), MailMessageConstant.ADDRESS_NOT_NULL);
// 标题不能为空
EmptyUtil.isEmpty(emailSend.getSubject(), MailMessageConstant.TITLE_NOT_NULL);
// 发送消息不能为空
EmptyUtil.isEmpty(emailSend.getMessage(), MailMessageConstant.SEND_MESSAGE_NOT_NULL);
}
}

View File

@ -1,15 +0,0 @@
package cn.bunny.dao.pojo.constant;
import lombok.Data;
/**
* 邮箱消息
*/
@Data
public class MailMessageConstant {
public static final String EMPTY_SEND_OBJECT = "空发送对象";
public static final String ADDRESS_NOT_NULL = "收件人不能为空";
public static final String TITLE_NOT_NULL = "标题不能为空";
public static final String SEND_MESSAGE_NOT_NULL = "发送消息不能为空";
public static final String EMAIL_CONFIG_NOT_FOUND = "邮箱配置为空";
}

View File

@ -40,6 +40,7 @@ public enum ResultCodeEnum {
DATA_ERROR(206, "数据异常"), DATA_ERROR(206, "数据异常"),
EMAIL_USER_TEMPLATE_IS_EMPTY(206, "邮件模板为空"), EMAIL_USER_TEMPLATE_IS_EMPTY(206, "邮件模板为空"),
EMAIL_TEMPLATE_IS_EMPTY(206, "邮件模板为空"), EMAIL_TEMPLATE_IS_EMPTY(206, "邮件模板为空"),
EMAIL_USER_IS_EMPTY(206, "关联邮件用户配置为空"),
DATA_EXIST(206, "数据已存在"), DATA_EXIST(206, "数据已存在"),
DATA_NOT_EXIST(206, "数据不存在"), DATA_NOT_EXIST(206, "数据不存在"),
USER_IS_EMPTY(206, "用户不存在"), USER_IS_EMPTY(206, "用户不存在"),

View File

@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* <p> * <p>
@ -28,7 +29,7 @@ import java.util.List;
* @author Bunny * @author Bunny
* @since 2024-10-10 21:24:08 * @since 2024-10-10 21:24:08
*/ */
@Tag(name = "邮件模板", description = "邮件模板相关接口") @Tag(name = "邮件模板", description = "邮件模板相关接口")
@RestController @RestController
@RequestMapping("admin/emailTemplate") @RequestMapping("admin/emailTemplate")
public class EmailTemplateController { public class EmailTemplateController {
@ -49,6 +50,13 @@ public class EmailTemplateController {
return Mono.just(Result.success(pageResult)); return Mono.just(Result.success(pageResult));
} }
@Operation(summary = "获取模板类型字段", description = "获取模板类型字段")
@GetMapping("getEmailTypes")
public Mono<Result<List<Map<String, String>>>> getEmailTypes() {
List<Map<String, String>> list = emailTemplateService.getEmailTypes();
return Mono.just(Result.success(list));
}
@Operation(summary = "添加邮件模板表", description = "添加邮件模板表") @Operation(summary = "添加邮件模板表", description = "添加邮件模板表")
@PostMapping("addEmailTemplate") @PostMapping("addEmailTemplate")
public Mono<Result<String>> addEmailTemplate(@Valid @RequestBody EmailTemplateAddDto dto) { public Mono<Result<String>> addEmailTemplate(@Valid @RequestBody EmailTemplateAddDto dto) {

View File

@ -15,6 +15,7 @@ import cn.hutool.captcha.CircleCaptcha;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.mail.MessagingException; import jakarta.mail.MessagingException;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -23,17 +24,16 @@ public class EmailFactory {
@Autowired @Autowired
private EmailTemplateMapper emailTemplateMapper; private EmailTemplateMapper emailTemplateMapper;
@Autowired @Autowired
private EmailUsersMapper emailUsersMapper; private EmailUsersMapper emailUsersMapper;
/** /**
* 生成邮箱验证码 * 生成邮箱验证码
* *
* @param email 接受者邮箱 * @param email 接受者邮箱
* @param emailSendInit 初始化发送参数
*/ */
public String sendmailCode(String email, EmailSendInit emailSendInit) { public String sendmailCode(String email) {
// 查询验证码邮件模板 // 查询验证码邮件模板
LambdaQueryWrapper<EmailTemplate> lambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<EmailTemplate> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(EmailTemplate::getIsDefault, true); lambdaQueryWrapper.eq(EmailTemplate::getIsDefault, true);
@ -41,14 +41,31 @@ public class EmailFactory {
EmailTemplate emailTemplate = emailTemplateMapper.selectOne(lambdaQueryWrapper); EmailTemplate emailTemplate = emailTemplateMapper.selectOne(lambdaQueryWrapper);
// 判断邮件模板是否为空 // 判断邮件模板是否为空
if (emailTemplate == null) { if (emailTemplate == null) throw new BunnyException(ResultCodeEnum.EMAIL_TEMPLATE_IS_EMPTY);
throw new BunnyException(ResultCodeEnum.EMAIL_TEMPLATE_IS_EMPTY);
// 查询配置发送邮箱
Long emailUser = emailTemplate.getEmailUser();
EmailUsers emailUsers;
// 如果没有配置发件者邮箱改用用户列表中默认的
if (emailUser == null) {
emailUsers = emailUsersMapper.selectOne(Wrappers.<EmailUsers>lambdaQuery().eq(EmailUsers::getIsDefault, true));
// 如果默认的也为空则报错
if (emailUsers == null) throw new BunnyException(ResultCodeEnum.EMAIL_USER_IS_EMPTY);
} else {
emailUsers = emailUsersMapper.selectOne(Wrappers.<EmailUsers>lambdaQuery().eq(EmailUsers::getId, emailUser));
} }
// 查询发件者信息
EmailSendInit emailSendInit = new EmailSendInit();
BeanUtils.copyProperties(emailUsers, emailSendInit);
emailSendInit.setUsername(emailUsers.getEmail());
// 生成验证码 // 生成验证码
CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(150, 48, 4, 2); CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(150, 48, 4, 2);
String code = captcha.getCode(); String code = captcha.getCode();
String htmlContent = emailTemplate.getBody().replace("${verifyCode}", code); String htmlContent = emailTemplate.getBody()
.replace("${sendEmailUser}", emailUsers.getEmail())
.replace("${verifyCode}", code);
// 发送验证码 // 发送验证码
MailSenderUtil mailSenderUtil = new MailSenderUtil(emailSendInit); MailSenderUtil mailSenderUtil = new MailSenderUtil(emailSendInit);

View File

@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* <p> * <p>
@ -49,4 +50,11 @@ public interface EmailTemplateService extends IService<EmailTemplate> {
* @param ids 删除id列表 * @param ids 删除id列表
*/ */
void deleteEmailTemplate(List<Long> ids); void deleteEmailTemplate(List<Long> ids);
/**
* * 获取模板类型字段
*
* @return 枚举字段列表
*/
List<Map<String, String>> getEmailTypes();
} }

View File

@ -5,6 +5,7 @@ import cn.bunny.dao.dto.system.email.EmailTemplateAddDto;
import cn.bunny.dao.dto.system.email.EmailTemplateDto; import cn.bunny.dao.dto.system.email.EmailTemplateDto;
import cn.bunny.dao.dto.system.email.EmailTemplateUpdateDto; import cn.bunny.dao.dto.system.email.EmailTemplateUpdateDto;
import cn.bunny.dao.entity.system.EmailTemplate; import cn.bunny.dao.entity.system.EmailTemplate;
import cn.bunny.dao.pojo.common.EmailTemplateTypes;
import cn.bunny.dao.pojo.result.PageResult; import cn.bunny.dao.pojo.result.PageResult;
import cn.bunny.dao.pojo.result.ResultCodeEnum; import cn.bunny.dao.pojo.result.ResultCodeEnum;
import cn.bunny.dao.vo.system.email.EmailTemplateVo; import cn.bunny.dao.vo.system.email.EmailTemplateVo;
@ -18,7 +19,10 @@ import jakarta.validation.Valid;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* <p> * <p>
@ -103,4 +107,19 @@ public class EmailTemplateServiceImpl extends ServiceImpl<EmailTemplateMapper, E
baseMapper.deleteBatchIdsWithPhysics(ids); baseMapper.deleteBatchIdsWithPhysics(ids);
} }
/**
* * 获取模板类型字段
*
* @return 枚举字段列表
*/
@Override
public List<Map<String, String>> getEmailTypes() {
return Arrays.stream(EmailTemplateTypes.values()).map(emailTemplateTypes -> {
Map<String, String> map = new HashMap<>();
map.put("key", emailTemplateTypes.getType());
map.put("value", emailTemplateTypes.getSummary());
return map;
}).toList();
}
} }

View File

@ -8,9 +8,7 @@ import cn.bunny.dao.dto.system.files.FileUploadDto;
import cn.bunny.dao.dto.system.user.*; import cn.bunny.dao.dto.system.user.*;
import cn.bunny.dao.entity.system.AdminUser; import cn.bunny.dao.entity.system.AdminUser;
import cn.bunny.dao.entity.system.AdminUserAndDept; import cn.bunny.dao.entity.system.AdminUserAndDept;
import cn.bunny.dao.entity.system.EmailUsers;
import cn.bunny.dao.entity.system.UserDept; import cn.bunny.dao.entity.system.UserDept;
import cn.bunny.dao.pojo.common.EmailSendInit;
import cn.bunny.dao.pojo.constant.MinioConstant; import cn.bunny.dao.pojo.constant.MinioConstant;
import cn.bunny.dao.pojo.constant.RedisUserConstant; import cn.bunny.dao.pojo.constant.RedisUserConstant;
import cn.bunny.dao.pojo.result.PageResult; import cn.bunny.dao.pojo.result.PageResult;
@ -22,7 +20,6 @@ import cn.bunny.dao.vo.system.user.RefreshTokenVo;
import cn.bunny.dao.vo.system.user.UserVo; import cn.bunny.dao.vo.system.user.UserVo;
import cn.bunny.services.factory.EmailFactory; import cn.bunny.services.factory.EmailFactory;
import cn.bunny.services.factory.UserFactory; import cn.bunny.services.factory.UserFactory;
import cn.bunny.services.mapper.EmailUsersMapper;
import cn.bunny.services.mapper.UserDeptMapper; import cn.bunny.services.mapper.UserDeptMapper;
import cn.bunny.services.mapper.UserMapper; import cn.bunny.services.mapper.UserMapper;
import cn.bunny.services.mapper.UserRoleMapper; import cn.bunny.services.mapper.UserRoleMapper;
@ -64,9 +61,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, AdminUser> implemen
@Autowired @Autowired
private RedisTemplate<String, Object> redisTemplate; private RedisTemplate<String, Object> redisTemplate;
@Autowired
private EmailUsersMapper emailUsersMapper;
@Autowired @Autowired
private EmailFactory emailFactory; private EmailFactory emailFactory;
@ -89,15 +83,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, AdminUser> implemen
*/ */
@Override @Override
public void sendLoginEmail(@NotNull String email) { public void sendLoginEmail(@NotNull String email) {
EmailUsers emailUsers = emailUsersMapper.selectOne(Wrappers.<EmailUsers>lambdaQuery().eq(EmailUsers::getIsDefault, true)); String emailCode = emailFactory.sendmailCode(email);
if (emailUsers == null) throw new BunnyException(ResultCodeEnum.EMAIL_USER_TEMPLATE_IS_EMPTY);
EmailSendInit emailSendInit = new EmailSendInit();
BeanUtils.copyProperties(emailUsers, emailSendInit);
emailSendInit.setUsername(emailUsers.getEmail());
String emailCode = emailFactory.sendmailCode(email, emailSendInit);
redisTemplate.opsForValue().set(RedisUserConstant.getAdminUserEmailCodePrefix(email), emailCode); redisTemplate.opsForValue().set(RedisUserConstant.getAdminUserEmailCodePrefix(email), emailCode);
} }