缓存改造:SmsTemplate 使用 Redis 作为缓存
This commit is contained in:
parent
5dda7a3c05
commit
68b49c6dd6
|
@ -89,4 +89,12 @@ public interface RedisKeyConstants {
|
||||||
* VALUE 数据格式:String 模版信息
|
* VALUE 数据格式:String 模版信息
|
||||||
*/
|
*/
|
||||||
String MAIL_TEMPLATE = "mail_template";
|
String MAIL_TEMPLATE = "mail_template";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 短信模版的缓存
|
||||||
|
*
|
||||||
|
* KEY 格式:sms_template::{id}
|
||||||
|
* VALUE 数据格式:String 模版信息
|
||||||
|
*/
|
||||||
|
String SMS_TEMPLATE = "sms_template";
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
package cn.iocoder.yudao.module.system.mq.consumer.sms;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.system.mq.message.sms.SmsTemplateRefreshMessage;
|
|
||||||
import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener;
|
|
||||||
import cn.iocoder.yudao.module.system.service.sms.SmsTemplateService;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 针对 {@link SmsTemplateRefreshMessage} 的消费者
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
@Slf4j
|
|
||||||
public class SmsTemplateRefreshConsumer extends AbstractChannelMessageListener<SmsTemplateRefreshMessage> {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private SmsTemplateService smsTemplateService;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onMessage(SmsTemplateRefreshMessage message) {
|
|
||||||
log.info("[onMessage][收到 SmsTemplate 刷新消息]");
|
|
||||||
smsTemplateService.initLocalCache();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
package cn.iocoder.yudao.module.system.mq.message.sms;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.EqualsAndHashCode;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 短信模板的数据刷新 Message
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
|
||||||
public class SmsTemplateRefreshMessage extends AbstractChannelMessage {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getChannel() {
|
|
||||||
return "system.sms-template.refresh";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,10 +1,9 @@
|
||||||
package cn.iocoder.yudao.module.system.mq.producer.sms;
|
package cn.iocoder.yudao.module.system.mq.producer.sms;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.core.KeyValue;
|
import cn.iocoder.yudao.framework.common.core.KeyValue;
|
||||||
|
import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;
|
||||||
import cn.iocoder.yudao.module.system.mq.message.sms.SmsChannelRefreshMessage;
|
import cn.iocoder.yudao.module.system.mq.message.sms.SmsChannelRefreshMessage;
|
||||||
import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage;
|
import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage;
|
||||||
import cn.iocoder.yudao.module.system.mq.message.sms.SmsTemplateRefreshMessage;
|
|
||||||
import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@ -32,14 +31,6 @@ public class SmsProducer {
|
||||||
redisMQTemplate.send(message);
|
redisMQTemplate.send(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 发送 {@link SmsTemplateRefreshMessage} 消息
|
|
||||||
*/
|
|
||||||
public void sendSmsTemplateRefreshMessage() {
|
|
||||||
SmsTemplateRefreshMessage message = new SmsTemplateRefreshMessage();
|
|
||||||
redisMQTemplate.send(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送 {@link SmsSendMessage} 消息
|
* 发送 {@link SmsSendMessage} 消息
|
||||||
*
|
*
|
||||||
|
|
|
@ -16,40 +16,10 @@ import java.util.Map;
|
||||||
* 短信模板 Service 接口
|
* 短信模板 Service 接口
|
||||||
*
|
*
|
||||||
* @author zzf
|
* @author zzf
|
||||||
* @date 2021/1/25 9:24
|
* @since 2021/1/25 9:24
|
||||||
*/
|
*/
|
||||||
public interface SmsTemplateService {
|
public interface SmsTemplateService {
|
||||||
|
|
||||||
/**
|
|
||||||
* 初始化短信模板的本地缓存
|
|
||||||
*/
|
|
||||||
void initLocalCache();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获得短信模板,从缓存中
|
|
||||||
*
|
|
||||||
* @param code 模板编码
|
|
||||||
* @return 短信模板
|
|
||||||
*/
|
|
||||||
SmsTemplateDO getSmsTemplateByCodeFromCache(String code);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 格式化短信内容
|
|
||||||
*
|
|
||||||
* @param content 短信模板的内容
|
|
||||||
* @param params 内容的参数
|
|
||||||
* @return 格式化后的内容
|
|
||||||
*/
|
|
||||||
String formatSmsTemplateContent(String content, Map<String, Object> params);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获得短信模板
|
|
||||||
*
|
|
||||||
* @param code 模板编码
|
|
||||||
* @return 短信模板
|
|
||||||
*/
|
|
||||||
SmsTemplateDO getSmsTemplateByCode(String code);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建短信模板
|
* 创建短信模板
|
||||||
*
|
*
|
||||||
|
@ -81,12 +51,12 @@ public interface SmsTemplateService {
|
||||||
SmsTemplateDO getSmsTemplate(Long id);
|
SmsTemplateDO getSmsTemplate(Long id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得短信模板列表
|
* 获得短信模板,从缓存中
|
||||||
*
|
*
|
||||||
* @param ids 编号
|
* @param code 模板编码
|
||||||
* @return 短信模板列表
|
* @return 短信模板
|
||||||
*/
|
*/
|
||||||
List<SmsTemplateDO> getSmsTemplateList(Collection<Long> ids);
|
SmsTemplateDO getSmsTemplateByCodeFromCache(String code);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得短信模板分页
|
* 获得短信模板分页
|
||||||
|
@ -112,4 +82,14 @@ public interface SmsTemplateService {
|
||||||
*/
|
*/
|
||||||
Long countByChannelId(Long channelId);
|
Long countByChannelId(Long channelId);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 格式化短信内容
|
||||||
|
*
|
||||||
|
* @param content 短信模板的内容
|
||||||
|
* @param params 内容的参数
|
||||||
|
* @return 格式化后的内容
|
||||||
|
*/
|
||||||
|
String formatSmsTemplateContent(String content, Map<String, Object> params);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,6 @@ import cn.hutool.core.util.ReUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
|
||||||
import cn.iocoder.yudao.framework.sms.core.client.SmsClient;
|
import cn.iocoder.yudao.framework.sms.core.client.SmsClient;
|
||||||
import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory;
|
import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory;
|
||||||
import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult;
|
import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult;
|
||||||
|
@ -17,16 +16,15 @@ import cn.iocoder.yudao.module.system.convert.sms.SmsTemplateConvert;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsTemplateMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.sms.SmsTemplateMapper;
|
||||||
import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer;
|
import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants;
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
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.stereotype.Service;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
@ -59,49 +57,6 @@ public class SmsTemplateServiceImpl implements SmsTemplateService {
|
||||||
@Resource
|
@Resource
|
||||||
private SmsClientFactory smsClientFactory;
|
private SmsClientFactory smsClientFactory;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private SmsProducer smsProducer;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 短信模板缓存
|
|
||||||
* key:短信模板编码 {@link SmsTemplateDO#getCode()}
|
|
||||||
*
|
|
||||||
* 这里声明 volatile 修饰的原因是,每次刷新时,直接修改指向
|
|
||||||
*/
|
|
||||||
@Getter // 为了方便测试,这里提供 getter 方法
|
|
||||||
private volatile Map<String, SmsTemplateDO> smsTemplateCache;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@PostConstruct
|
|
||||||
public void initLocalCache() {
|
|
||||||
// 第一步:查询数据
|
|
||||||
List<SmsTemplateDO> smsTemplateList = smsTemplateMapper.selectList();
|
|
||||||
log.info("[initLocalCache][缓存短信模版,数量为:{}]", smsTemplateList.size());
|
|
||||||
|
|
||||||
// 第二步:构建缓存
|
|
||||||
smsTemplateCache = CollectionUtils.convertMap(smsTemplateList, SmsTemplateDO::getCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SmsTemplateDO getSmsTemplateByCodeFromCache(String code) {
|
|
||||||
return smsTemplateCache.get(code);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String formatSmsTemplateContent(String content, Map<String, Object> params) {
|
|
||||||
return StrUtil.format(content, params);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SmsTemplateDO getSmsTemplateByCode(String code) {
|
|
||||||
return smsTemplateMapper.selectByCode(code);
|
|
||||||
}
|
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
public List<String> parseTemplateContentParams(String content) {
|
|
||||||
return ReUtil.findAllGroup1(PATTERN_PARAMS, content);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createSmsTemplate(SmsTemplateCreateReqVO createReqVO) {
|
public Long createSmsTemplate(SmsTemplateCreateReqVO createReqVO) {
|
||||||
// 校验短信渠道
|
// 校验短信渠道
|
||||||
|
@ -116,13 +71,13 @@ public class SmsTemplateServiceImpl implements SmsTemplateService {
|
||||||
template.setParams(parseTemplateContentParams(template.getContent()));
|
template.setParams(parseTemplateContentParams(template.getContent()));
|
||||||
template.setChannelCode(channelDO.getCode());
|
template.setChannelCode(channelDO.getCode());
|
||||||
smsTemplateMapper.insert(template);
|
smsTemplateMapper.insert(template);
|
||||||
// 发送刷新消息
|
|
||||||
smsProducer.sendSmsTemplateRefreshMessage();
|
|
||||||
// 返回
|
// 返回
|
||||||
return template.getId();
|
return template.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@CacheEvict(cacheNames = RedisKeyConstants.SMS_TEMPLATE,
|
||||||
|
allEntries = true) // allEntries 清空所有缓存,因为可能修改到 code 字段,不好清理
|
||||||
public void updateSmsTemplate(SmsTemplateUpdateReqVO updateReqVO) {
|
public void updateSmsTemplate(SmsTemplateUpdateReqVO updateReqVO) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateSmsTemplateExists(updateReqVO.getId());
|
validateSmsTemplateExists(updateReqVO.getId());
|
||||||
|
@ -138,18 +93,16 @@ public class SmsTemplateServiceImpl implements SmsTemplateService {
|
||||||
updateObj.setParams(parseTemplateContentParams(updateObj.getContent()));
|
updateObj.setParams(parseTemplateContentParams(updateObj.getContent()));
|
||||||
updateObj.setChannelCode(channelDO.getCode());
|
updateObj.setChannelCode(channelDO.getCode());
|
||||||
smsTemplateMapper.updateById(updateObj);
|
smsTemplateMapper.updateById(updateObj);
|
||||||
// 发送刷新消息
|
|
||||||
smsProducer.sendSmsTemplateRefreshMessage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@CacheEvict(cacheNames = RedisKeyConstants.SMS_TEMPLATE,
|
||||||
|
allEntries = true) // allEntries 清空所有缓存,因为 id 不是直接的缓存 code,不好清理
|
||||||
public void deleteSmsTemplate(Long id) {
|
public void deleteSmsTemplate(Long id) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateSmsTemplateExists(id);
|
validateSmsTemplateExists(id);
|
||||||
// 更新
|
// 更新
|
||||||
smsTemplateMapper.deleteById(id);
|
smsTemplateMapper.deleteById(id);
|
||||||
// 发送刷新消息
|
|
||||||
smsProducer.sendSmsTemplateRefreshMessage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validateSmsTemplateExists(Long id) {
|
private void validateSmsTemplateExists(Long id) {
|
||||||
|
@ -164,8 +117,10 @@ public class SmsTemplateServiceImpl implements SmsTemplateService {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<SmsTemplateDO> getSmsTemplateList(Collection<Long> ids) {
|
@Cacheable(cacheNames = RedisKeyConstants.SMS_TEMPLATE, key = "#code",
|
||||||
return smsTemplateMapper.selectBatchIds(ids);
|
unless = "#result == null")
|
||||||
|
public SmsTemplateDO getSmsTemplateByCodeFromCache(String code) {
|
||||||
|
return smsTemplateMapper.selectByCode(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -217,7 +172,7 @@ public class SmsTemplateServiceImpl implements SmsTemplateService {
|
||||||
* @param apiTemplateId API 模板编号
|
* @param apiTemplateId API 模板编号
|
||||||
*/
|
*/
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public void validateApiTemplate(Long channelId, String apiTemplateId) {
|
void validateApiTemplate(Long channelId, String apiTemplateId) {
|
||||||
// 获得短信模板
|
// 获得短信模板
|
||||||
SmsClient smsClient = smsClientFactory.getSmsClient(channelId);
|
SmsClient smsClient = smsClientFactory.getSmsClient(channelId);
|
||||||
Assert.notNull(smsClient, String.format("短信客户端(%d) 不存在", channelId));
|
Assert.notNull(smsClient, String.format("短信客户端(%d) 不存在", channelId));
|
||||||
|
@ -226,4 +181,14 @@ public class SmsTemplateServiceImpl implements SmsTemplateService {
|
||||||
templateResult.checkError();
|
templateResult.checkError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String formatSmsTemplateContent(String content, Map<String, Object> params) {
|
||||||
|
return StrUtil.format(content, params);
|
||||||
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
List<String> parseTemplateContentParams(String content) {
|
||||||
|
return ReUtil.findAllGroup1(PATTERN_PARAMS, content);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,14 +7,12 @@ import cn.iocoder.yudao.module.system.controller.admin.mail.vo.account.MailAccou
|
||||||
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.dal.dataobject.mail.MailAccountDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO;
|
||||||
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.mq.producer.mail.MailProducer;
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||||
import org.springframework.context.annotation.Import;
|
import org.springframework.context.annotation.Import;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
|
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
|
||||||
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
|
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
|
||||||
|
@ -23,7 +21,6 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
|
||||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_ACCOUNT_NOT_EXISTS;
|
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_ACCOUNT_NOT_EXISTS;
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -42,23 +39,6 @@ public class MailAccountServiceImplTest extends BaseDbUnitTest {
|
||||||
|
|
||||||
@MockBean
|
@MockBean
|
||||||
private MailTemplateService mailTemplateService;
|
private MailTemplateService mailTemplateService;
|
||||||
@MockBean
|
|
||||||
private MailProducer mailProducer;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testInitLocalCache() {
|
|
||||||
MailAccountDO accountDO1 = randomPojo(MailAccountDO.class);
|
|
||||||
mailAccountMapper.insert(accountDO1);
|
|
||||||
MailAccountDO accountDO02 = randomPojo(MailAccountDO.class);
|
|
||||||
mailAccountMapper.insert(accountDO02);
|
|
||||||
|
|
||||||
// 调用
|
|
||||||
mailAccountService.initLocalCache();
|
|
||||||
// 断言 mailAccountCache 缓存
|
|
||||||
Map<Long, MailAccountDO> mailAccountCache = mailAccountService.getMailAccountCache();
|
|
||||||
assertPojoEquals(accountDO1, mailAccountCache.get(accountDO1.getId()));
|
|
||||||
assertPojoEquals(accountDO02, mailAccountCache.get(accountDO02.getId()));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCreateMailAccount_success() {
|
public void testCreateMailAccount_success() {
|
||||||
|
@ -72,7 +52,6 @@ public class MailAccountServiceImplTest extends BaseDbUnitTest {
|
||||||
// 校验记录的属性是否正确
|
// 校验记录的属性是否正确
|
||||||
MailAccountDO mailAccount = mailAccountMapper.selectById(mailAccountId);
|
MailAccountDO mailAccount = mailAccountMapper.selectById(mailAccountId);
|
||||||
assertPojoEquals(reqVO, mailAccount);
|
assertPojoEquals(reqVO, mailAccount);
|
||||||
verify(mailProducer).sendMailAccountRefreshMessage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -91,7 +70,6 @@ public class MailAccountServiceImplTest extends BaseDbUnitTest {
|
||||||
// 校验是否更新正确
|
// 校验是否更新正确
|
||||||
MailAccountDO mailAccount = mailAccountMapper.selectById(reqVO.getId()); // 获取最新的
|
MailAccountDO mailAccount = mailAccountMapper.selectById(reqVO.getId()); // 获取最新的
|
||||||
assertPojoEquals(reqVO, mailAccount);
|
assertPojoEquals(reqVO, mailAccount);
|
||||||
verify(mailProducer).sendMailAccountRefreshMessage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -117,7 +95,6 @@ public class MailAccountServiceImplTest extends BaseDbUnitTest {
|
||||||
mailAccountService.deleteMailAccount(id);
|
mailAccountService.deleteMailAccount(id);
|
||||||
// 校验数据不存在了
|
// 校验数据不存在了
|
||||||
assertNull(mailAccountMapper.selectById(id));
|
assertNull(mailAccountMapper.selectById(id));
|
||||||
verify(mailProducer).sendMailAccountRefreshMessage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -125,7 +102,6 @@ public class MailAccountServiceImplTest extends BaseDbUnitTest {
|
||||||
// mock 数据
|
// mock 数据
|
||||||
MailAccountDO dbMailAccount = randomPojo(MailAccountDO.class);
|
MailAccountDO dbMailAccount = randomPojo(MailAccountDO.class);
|
||||||
mailAccountMapper.insert(dbMailAccount);// @Sql: 先插入出一条存在的数据
|
mailAccountMapper.insert(dbMailAccount);// @Sql: 先插入出一条存在的数据
|
||||||
mailAccountService.initLocalCache();
|
|
||||||
// 准备参数
|
// 准备参数
|
||||||
Long id = dbMailAccount.getId();
|
Long id = dbMailAccount.getId();
|
||||||
|
|
||||||
|
|
|
@ -43,24 +43,6 @@ public class MailTemplateServiceImplTest extends BaseDbUnitTest {
|
||||||
@Resource
|
@Resource
|
||||||
private MailTemplateMapper mailTemplateMapper;
|
private MailTemplateMapper mailTemplateMapper;
|
||||||
|
|
||||||
@MockBean
|
|
||||||
private MailProducer mailProducer;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testInitLocalCache() {
|
|
||||||
MailTemplateDO templateDO01 = randomPojo(MailTemplateDO.class);
|
|
||||||
mailTemplateMapper.insert(templateDO01);
|
|
||||||
MailTemplateDO templateDO02 = randomPojo(MailTemplateDO.class);
|
|
||||||
mailTemplateMapper.insert(templateDO02);
|
|
||||||
|
|
||||||
// 调用
|
|
||||||
mailTemplateService.initLocalCache();
|
|
||||||
// 断言 mailTemplateCache 缓存
|
|
||||||
Map<String, MailTemplateDO> mailTemplateCache = mailTemplateService.getMailTemplateCache();
|
|
||||||
assertPojoEquals(templateDO01, mailTemplateCache.get(templateDO01.getCode()));
|
|
||||||
assertPojoEquals(templateDO02, mailTemplateCache.get(templateDO02.getCode()));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCreateMailTemplate_success() {
|
public void testCreateMailTemplate_success() {
|
||||||
// 准备参数
|
// 准备参数
|
||||||
|
@ -73,7 +55,6 @@ public class MailTemplateServiceImplTest extends BaseDbUnitTest {
|
||||||
// 校验记录的属性是否正确
|
// 校验记录的属性是否正确
|
||||||
MailTemplateDO mailTemplate = mailTemplateMapper.selectById(mailTemplateId);
|
MailTemplateDO mailTemplate = mailTemplateMapper.selectById(mailTemplateId);
|
||||||
assertPojoEquals(reqVO, mailTemplate);
|
assertPojoEquals(reqVO, mailTemplate);
|
||||||
verify(mailProducer).sendMailTemplateRefreshMessage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -91,7 +72,6 @@ public class MailTemplateServiceImplTest extends BaseDbUnitTest {
|
||||||
// 校验是否更新正确
|
// 校验是否更新正确
|
||||||
MailTemplateDO mailTemplate = mailTemplateMapper.selectById(reqVO.getId()); // 获取最新的
|
MailTemplateDO mailTemplate = mailTemplateMapper.selectById(reqVO.getId()); // 获取最新的
|
||||||
assertPojoEquals(reqVO, mailTemplate);
|
assertPojoEquals(reqVO, mailTemplate);
|
||||||
verify(mailProducer).sendMailTemplateRefreshMessage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -115,7 +95,6 @@ public class MailTemplateServiceImplTest extends BaseDbUnitTest {
|
||||||
mailTemplateService.deleteMailTemplate(id);
|
mailTemplateService.deleteMailTemplate(id);
|
||||||
// 校验数据不存在了
|
// 校验数据不存在了
|
||||||
assertNull(mailTemplateMapper.selectById(id));
|
assertNull(mailTemplateMapper.selectById(id));
|
||||||
verify(mailProducer).sendMailTemplateRefreshMessage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -199,7 +178,6 @@ public class MailTemplateServiceImplTest extends BaseDbUnitTest {
|
||||||
// mock 数据
|
// mock 数据
|
||||||
MailTemplateDO dbMailTemplate = randomPojo(MailTemplateDO.class);
|
MailTemplateDO dbMailTemplate = randomPojo(MailTemplateDO.class);
|
||||||
mailTemplateMapper.insert(dbMailTemplate);
|
mailTemplateMapper.insert(dbMailTemplate);
|
||||||
mailTemplateService.initLocalCache();
|
|
||||||
// 准备参数
|
// 准备参数
|
||||||
String code = dbMailTemplate.getCode();
|
String code = dbMailTemplate.getCode();
|
||||||
|
|
||||||
|
|
|
@ -55,25 +55,6 @@ public class SmsTemplateServiceImplTest extends BaseDbUnitTest {
|
||||||
private SmsClientFactory smsClientFactory;
|
private SmsClientFactory smsClientFactory;
|
||||||
@MockBean
|
@MockBean
|
||||||
private SmsClient smsClient;
|
private SmsClient smsClient;
|
||||||
@MockBean
|
|
||||||
private SmsProducer smsProducer;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testInitLocalCache() {
|
|
||||||
// mock 数据
|
|
||||||
SmsTemplateDO smsTemplate01 = randomSmsTemplateDO();
|
|
||||||
smsTemplateMapper.insert(smsTemplate01);
|
|
||||||
SmsTemplateDO smsTemplate02 = randomSmsTemplateDO();
|
|
||||||
smsTemplateMapper.insert(smsTemplate02);
|
|
||||||
|
|
||||||
// 调用
|
|
||||||
smsTemplateService.initLocalCache();
|
|
||||||
// 断言 deptCache 缓存
|
|
||||||
Map<String, SmsTemplateDO> smsTemplateCache = smsTemplateService.getSmsTemplateCache();
|
|
||||||
assertEquals(2, smsTemplateCache.size());
|
|
||||||
assertPojoEquals(smsTemplate01, smsTemplateCache.get(smsTemplate01.getCode()));
|
|
||||||
assertPojoEquals(smsTemplate02, smsTemplateCache.get(smsTemplate02.getCode()));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testParseTemplateContentParams() {
|
public void testParseTemplateContentParams() {
|
||||||
|
@ -116,8 +97,6 @@ public class SmsTemplateServiceImplTest extends BaseDbUnitTest {
|
||||||
assertPojoEquals(reqVO, smsTemplate);
|
assertPojoEquals(reqVO, smsTemplate);
|
||||||
assertEquals(Lists.newArrayList("operation", "code"), smsTemplate.getParams());
|
assertEquals(Lists.newArrayList("operation", "code"), smsTemplate.getParams());
|
||||||
assertEquals(channelDO.getCode(), smsTemplate.getChannelCode());
|
assertEquals(channelDO.getCode(), smsTemplate.getChannelCode());
|
||||||
// 校验调用
|
|
||||||
verify(smsProducer, times(1)).sendSmsTemplateRefreshMessage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -151,8 +130,6 @@ public class SmsTemplateServiceImplTest extends BaseDbUnitTest {
|
||||||
assertPojoEquals(reqVO, smsTemplate);
|
assertPojoEquals(reqVO, smsTemplate);
|
||||||
assertEquals(Lists.newArrayList("operation", "code"), smsTemplate.getParams());
|
assertEquals(Lists.newArrayList("operation", "code"), smsTemplate.getParams());
|
||||||
assertEquals(channelDO.getCode(), smsTemplate.getChannelCode());
|
assertEquals(channelDO.getCode(), smsTemplate.getChannelCode());
|
||||||
// 校验调用
|
|
||||||
verify(smsProducer, times(1)).sendSmsTemplateRefreshMessage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -176,8 +153,6 @@ public class SmsTemplateServiceImplTest extends BaseDbUnitTest {
|
||||||
smsTemplateService.deleteSmsTemplate(id);
|
smsTemplateService.deleteSmsTemplate(id);
|
||||||
// 校验数据不存在了
|
// 校验数据不存在了
|
||||||
assertNull(smsTemplateMapper.selectById(id));
|
assertNull(smsTemplateMapper.selectById(id));
|
||||||
// 校验调用
|
|
||||||
verify(smsProducer, times(1)).sendSmsTemplateRefreshMessage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -195,6 +195,7 @@ yudao:
|
||||||
- notify_template
|
- notify_template
|
||||||
- mail_account
|
- mail_account
|
||||||
- mail_template
|
- mail_template
|
||||||
|
- sms_template
|
||||||
sms-code: # 短信验证码相关的配置项
|
sms-code: # 短信验证码相关的配置项
|
||||||
expire-times: 10m
|
expire-times: 10m
|
||||||
send-frequency: 1m
|
send-frequency: 1m
|
||||||
|
|
Loading…
Reference in New Issue