|
@@ -1,10 +1,12 @@
|
|
|
package cn.iocoder.yudao.module.system.service.mail.impl;
|
|
|
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
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.util.collection.CollectionUtils;
|
|
|
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.send.MailReqVO;
|
|
|
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateCreateReqVO;
|
|
|
import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO;
|
|
@@ -13,14 +15,18 @@ import cn.iocoder.yudao.module.system.convert.mail.MailAccountConvert;
|
|
|
import cn.iocoder.yudao.module.system.convert.mail.MailTemplateConvert;
|
|
|
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.sms.SmsTemplateDO;
|
|
|
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.service.mail.MailTemplateService;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
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.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
@@ -36,6 +42,7 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_TEMPL
|
|
|
*/
|
|
|
@Service
|
|
|
@Validated
|
|
|
+@Slf4j
|
|
|
public class MailTemplateServiceImpl implements MailTemplateService {
|
|
|
|
|
|
@Resource
|
|
@@ -43,6 +50,38 @@ public class MailTemplateServiceImpl implements MailTemplateService {
|
|
|
@Resource
|
|
|
private MailAccountMapper mailAccountMapper;
|
|
|
|
|
|
+ private volatile List<MailTemplateDO> mailTemplateDOList;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 邮件模板缓存
|
|
|
+ * key:邮箱模板编码 {@link MailTemplateDO#getCode()}
|
|
|
+ *
|
|
|
+ * 这里声明 volatile 修饰的原因是,每次刷新时,直接修改指向
|
|
|
+ */
|
|
|
+ private volatile Map<String, MailTemplateDO> mailTemplateCache;
|
|
|
+
|
|
|
+ private volatile Date maxUpdateTime;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @PostConstruct
|
|
|
+ public void initLocalCache() {
|
|
|
+ if(maxUpdateTime == null){
|
|
|
+ mailTemplateDOList = mailTemplateMapper.selectList();
|
|
|
+ }else{
|
|
|
+ if(mailTemplateMapper.selectByMaxUpdateTime(maxUpdateTime)<=0){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (CollUtil.isEmpty(mailTemplateDOList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 写入缓存
|
|
|
+ mailTemplateCache = CollectionUtils.convertMap(mailTemplateDOList, MailTemplateDO::getCode);
|
|
|
+ maxUpdateTime = CollectionUtils.getMaxValue(mailTemplateDOList, MailTemplateDO::getUpdateTime);
|
|
|
+ log.info("[initLocalCache][初始化 mailTemplate 数量为 {}]", mailTemplateDOList.size());
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public Long create(MailTemplateCreateReqVO createReqVO) {
|
|
|
// code 要校验唯一
|
|
@@ -54,11 +93,9 @@ public class MailTemplateServiceImpl implements MailTemplateService {
|
|
|
|
|
|
@Override
|
|
|
public void update(@Valid MailTemplateUpdateReqVO updateReqVO) {
|
|
|
- // code 要校验唯一
|
|
|
- this.validateMailTemplateOnlyByCode(updateReqVO.getCode()); // TODO @wangjingyi:code 这样写,修改自己会有问题
|
|
|
- MailTemplateDO mailTemplateDO = MailTemplateConvert.INSTANCE.convert(updateReqVO);
|
|
|
// 校验是否存在
|
|
|
- this.validateMailTemplateExists(mailTemplateDO.getId());
|
|
|
+ this.validateMailTemplateExists(updateReqVO.getId());
|
|
|
+ MailTemplateDO mailTemplateDO = MailTemplateConvert.INSTANCE.convert(updateReqVO);
|
|
|
mailTemplateMapper.updateById(mailTemplateDO);
|
|
|
}
|
|
|
|
|
@@ -80,6 +117,11 @@ 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 void sendMail(MailReqVO mailReqVO) {
|
|
|
// TODO @@wangjingyi:发送的时候,参考下短信;
|
|
@@ -102,6 +144,11 @@ public class MailTemplateServiceImpl implements MailTemplateService {
|
|
|
MailUtil.send(account , mailReqVO.getTos() , mailReqVO.getTitle() , content , false);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public String formateMailTemplateContent(String content, Map<String, String> params) {
|
|
|
+ return StrUtil.format(content, params);
|
|
|
+ }
|
|
|
+
|
|
|
private void validateMailTemplateExists(Long id) {
|
|
|
if (mailTemplateMapper.selectById(id) == null) {
|
|
|
throw exception(MAIL_TEMPLATE_NOT_EXISTS);
|