|
@@ -10,14 +10,14 @@ import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemp
|
|
|
import cn.iocoder.yudao.module.system.convert.mail.MailTemplateConvert;
|
|
|
import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO;
|
|
|
import cn.iocoder.yudao.module.system.dal.mysql.mail.MailTemplateMapper;
|
|
|
-import cn.iocoder.yudao.module.system.mq.producer.mail.MailProducer;
|
|
|
+import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants;
|
|
|
import com.google.common.annotations.VisibleForTesting;
|
|
|
-import lombok.Getter;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.cache.annotation.CacheEvict;
|
|
|
+import org.springframework.cache.annotation.Cacheable;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
-import javax.annotation.PostConstruct;
|
|
|
import javax.annotation.Resource;
|
|
|
import javax.validation.Valid;
|
|
|
import java.util.List;
|
|
@@ -25,8 +25,8 @@ import java.util.Map;
|
|
|
import java.util.regex.Pattern;
|
|
|
|
|
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
-import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
|
|
|
-import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
|
|
|
+import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_TEMPLATE_CODE_EXISTS;
|
|
|
+import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_TEMPLATE_NOT_EXISTS;
|
|
|
|
|
|
/**
|
|
|
* 邮箱模版 Service 实现类
|
|
@@ -47,29 +47,6 @@ public class MailTemplateServiceImpl implements MailTemplateService {
|
|
|
@Resource
|
|
|
private MailTemplateMapper mailTemplateMapper;
|
|
|
|
|
|
- @Resource
|
|
|
- private MailProducer mailProducer;
|
|
|
-
|
|
|
- /**
|
|
|
- * 邮件模板缓存
|
|
|
- * key:邮件模版标识 {@link MailTemplateDO#getCode()}
|
|
|
- *
|
|
|
- * 这里声明 volatile 修饰的原因是,每次刷新时,直接修改指向
|
|
|
- */
|
|
|
- @Getter
|
|
|
- private volatile Map<String, MailTemplateDO> mailTemplateCache;
|
|
|
-
|
|
|
- @Override
|
|
|
- @PostConstruct
|
|
|
- public void initLocalCache() {
|
|
|
- // 第一步:查询数据
|
|
|
- List<MailTemplateDO> templates = mailTemplateMapper.selectList();
|
|
|
- log.info("[initLocalCache][缓存邮件模版,数量:{}]", templates.size());
|
|
|
-
|
|
|
- // 第二步:构建缓存
|
|
|
- mailTemplateCache = convertMap(templates, MailTemplateDO::getCode);
|
|
|
- }
|
|
|
-
|
|
|
@Override
|
|
|
public Long createMailTemplate(MailTemplateCreateReqVO createReqVO) {
|
|
|
// 校验 code 是否唯一
|
|
@@ -79,12 +56,12 @@ public class MailTemplateServiceImpl implements MailTemplateService {
|
|
|
MailTemplateDO template = MailTemplateConvert.INSTANCE.convert(createReqVO)
|
|
|
.setParams(parseTemplateContentParams(createReqVO.getContent()));
|
|
|
mailTemplateMapper.insert(template);
|
|
|
- // 发送刷新消息
|
|
|
- mailProducer.sendMailTemplateRefreshMessage();
|
|
|
return template.getId();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @CacheEvict(cacheNames = RedisKeyConstants.NOTIFY_TEMPLATE,
|
|
|
+ allEntries = true) // allEntries 清空所有缓存,因为可能修改到 code 字段,不好清理
|
|
|
public void updateMailTemplate(@Valid MailTemplateUpdateReqVO updateReqVO) {
|
|
|
// 校验是否存在
|
|
|
validateMailTemplateExists(updateReqVO.getId());
|
|
@@ -95,12 +72,10 @@ public class MailTemplateServiceImpl implements MailTemplateService {
|
|
|
MailTemplateDO updateObj = MailTemplateConvert.INSTANCE.convert(updateReqVO)
|
|
|
.setParams(parseTemplateContentParams(updateReqVO.getContent()));
|
|
|
mailTemplateMapper.updateById(updateObj);
|
|
|
- // 发送刷新消息
|
|
|
- mailProducer.sendMailTemplateRefreshMessage();
|
|
|
}
|
|
|
|
|
|
@VisibleForTesting
|
|
|
- public void validateCodeUnique(Long id, String code) {
|
|
|
+ void validateCodeUnique(Long id, String code) {
|
|
|
MailTemplateDO template = mailTemplateMapper.selectByCode(code);
|
|
|
if (template == null) {
|
|
|
return;
|
|
@@ -113,14 +88,14 @@ public class MailTemplateServiceImpl implements MailTemplateService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @CacheEvict(cacheNames = RedisKeyConstants.NOTIFY_TEMPLATE,
|
|
|
+ allEntries = true) // allEntries 清空所有缓存,因为 id 不是直接的缓存 code,不好清理
|
|
|
public void deleteMailTemplate(Long id) {
|
|
|
// 校验是否存在
|
|
|
validateMailTemplateExists(id);
|
|
|
|
|
|
// 删除
|
|
|
mailTemplateMapper.deleteById(id);
|
|
|
- // 发送刷新消息
|
|
|
- mailProducer.sendMailTemplateRefreshMessage();
|
|
|
}
|
|
|
|
|
|
private void validateMailTemplateExists(Long id) {
|
|
@@ -132,6 +107,12 @@ public class MailTemplateServiceImpl implements MailTemplateService {
|
|
|
@Override
|
|
|
public MailTemplateDO getMailTemplate(Long id) {return mailTemplateMapper.selectById(id);}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Cacheable(value = RedisKeyConstants.MAIL_TEMPLATE, key = "#code", unless = "#result == null")
|
|
|
+ public MailTemplateDO getMailTemplateByCodeFromCache(String code) {
|
|
|
+ return mailTemplateMapper.selectByCode(code);
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public PageResult<MailTemplateDO> getMailTemplatePage(MailTemplatePageReqVO pageReqVO) {
|
|
|
return mailTemplateMapper.selectPage(pageReqVO);
|
|
@@ -140,11 +121,6 @@ public class MailTemplateServiceImpl implements MailTemplateService {
|
|
|
@Override
|
|
|
public List<MailTemplateDO> getMailTemplateList() {return mailTemplateMapper.selectList();}
|
|
|
|
|
|
- @Override
|
|
|
- public MailTemplateDO getMailTemplateByCodeFromCache(String code) {
|
|
|
- return mailTemplateCache.get(code);
|
|
|
- }
|
|
|
-
|
|
|
@Override
|
|
|
public String formatMailTemplateContent(String content, Map<String, Object> params) {
|
|
|
return StrUtil.format(content, params);
|