多模块重构 4:system 模块的创建,去除 Sys
parent
117914d92b
commit
ab6ec2f0ed
@ -1,15 +0,0 @@
|
|||||||
package cn.iocoder.yudao.coreservice.modules.system.convert.logger;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
|
|
||||||
import org.mapstruct.Mapper;
|
|
||||||
import org.mapstruct.factory.Mappers;
|
|
||||||
|
|
||||||
@Mapper
|
|
||||||
public interface SysLoginLogCoreConvert {
|
|
||||||
|
|
||||||
SysLoginLogCoreConvert INSTANCE = Mappers.getMapper(SysLoginLogCoreConvert.class);
|
|
||||||
|
|
||||||
SysLoginLogDO convert(SysLoginLogCreateReqDTO bean);
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
/**
|
|
||||||
* 提供 POJO 类的实体转换
|
|
||||||
*
|
|
||||||
* 目前使用 MapStruct 框架
|
|
||||||
*/
|
|
||||||
package cn.iocoder.yudao.coreservice.modules.system.convert;
|
|
||||||
@ -1 +0,0 @@
|
|||||||
<http://www.iocoder.cn/Spring-Boot/MapStruct/?yudao>
|
|
||||||
@ -1 +0,0 @@
|
|||||||
package cn.iocoder.yudao.coreservice.modules.system.dal.dataobject;
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.dict;
|
|
||||||
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
@Mapper
|
|
||||||
public interface SysDictDataCoreMapper extends BaseMapperX<SysDictDataDO> {
|
|
||||||
|
|
||||||
default boolean selectExistsByUpdateTimeAfter(Date maxUpdateTime) {
|
|
||||||
return selectOne(new QueryWrapper<SysDictDataDO>().select("id")
|
|
||||||
.gt("update_time", maxUpdateTime).last("LIMIT 1")) != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
package cn.iocoder.yudao.coreservice.modules.system.dal.mysql;
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.sms;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
|
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Mapper
|
|
||||||
public interface SysSmsLogCoreMapper extends BaseMapperX<SysSmsLogDO> {
|
|
||||||
}
|
|
||||||
@ -1,16 +0,0 @@
|
|||||||
package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.sms;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
|
||||||
import org.apache.ibatis.annotations.Select;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
@Mapper
|
|
||||||
public interface SysSmsTemplateCoreMapper extends BaseMapperX<SysSmsTemplateDO> {
|
|
||||||
|
|
||||||
@Select("SELECT id FROM sys_sms_template WHERE update_time > #{maxUpdateTime} LIMIT 1")
|
|
||||||
Long selectExistsByUpdateTimeAfter(Date maxUpdateTime);
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
package cn.iocoder.yudao.coreservice.modules.system.dal.mysql.user;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Mapper
|
|
||||||
public interface SysUserCoreMapper extends BaseMapperX<SysUserDO> {
|
|
||||||
|
|
||||||
default List<SysUserDO> selectListByDeptIds(Collection<Long> deptIds) {
|
|
||||||
return selectList(SysUserDO::getDeptId, deptIds);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
/**
|
|
||||||
* 占位
|
|
||||||
*/
|
|
||||||
package cn.iocoder.yudao.coreservice.modules.system.mq.message;
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
/**
|
|
||||||
* 占位
|
|
||||||
*/
|
|
||||||
package cn.iocoder.yudao.coreservice.modules.system.mq.producer;
|
|
||||||
@ -1,41 +0,0 @@
|
|||||||
package cn.iocoder.yudao.coreservice.modules.system.mq.producer.sms;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage;
|
|
||||||
import cn.iocoder.yudao.framework.common.core.KeyValue;
|
|
||||||
import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sms 短信相关消息的 Core Producer
|
|
||||||
*
|
|
||||||
* @author zzf
|
|
||||||
* @date 2021/3/9 16:35
|
|
||||||
*/
|
|
||||||
@Slf4j
|
|
||||||
@Component
|
|
||||||
public class SysSmsCoreProducer {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private RedisMQTemplate redisMQTemplate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 发送 {@link SysSmsSendMessage} 消息
|
|
||||||
*
|
|
||||||
* @param logId 短信日志编号
|
|
||||||
* @param mobile 手机号
|
|
||||||
* @param channelId 渠道编号
|
|
||||||
* @param apiTemplateId 短信模板编号
|
|
||||||
* @param templateParams 短信模板参数
|
|
||||||
*/
|
|
||||||
public void sendSmsSendMessage(Long logId, String mobile,
|
|
||||||
Long channelId, String apiTemplateId, List<KeyValue<String, Object>> templateParams) {
|
|
||||||
SysSmsSendMessage message = new SysSmsSendMessage().setLogId(logId).setMobile(mobile);
|
|
||||||
message.setChannelId(channelId).setApiTemplateId(apiTemplateId).setTemplateParams(templateParams);
|
|
||||||
redisMQTemplate.send(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
package cn.iocoder.yudao.coreservice.modules.system.service.logger;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 登录日志 Core Service 接口
|
|
||||||
*/
|
|
||||||
public interface SysLoginLogCoreService {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建登录日志
|
|
||||||
*
|
|
||||||
* @param reqDTO 日志信息
|
|
||||||
*/
|
|
||||||
void createLoginLog(SysLoginLogCreateReqDTO reqDTO);
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,30 +0,0 @@
|
|||||||
package cn.iocoder.yudao.coreservice.modules.system.service.logger.impl;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.convert.logger.SysLoginLogCoreConvert;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.logger.SysLoginLogCoreMapper;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.service.logger.SysLoginLogCoreService;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 登录日志 Service Core 实现
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class SysLoginLogCoreServiceImpl implements SysLoginLogCoreService {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private SysLoginLogCoreMapper loginLogMapper;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void createLoginLog(SysLoginLogCreateReqDTO reqDTO) {
|
|
||||||
SysLoginLogDO loginLog = SysLoginLogCoreConvert.INSTANCE.convert(reqDTO);
|
|
||||||
// 插入
|
|
||||||
loginLogMapper.insert(loginLog);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,56 +0,0 @@
|
|||||||
package cn.iocoder.yudao.coreservice.modules.system.service.sms;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 短信日志 Core Service 接口
|
|
||||||
*
|
|
||||||
* @author zzf
|
|
||||||
* @date 13:48 2021/3/2
|
|
||||||
*/
|
|
||||||
public interface SysSmsLogCoreService {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建短信日志
|
|
||||||
*
|
|
||||||
* @param mobile 手机号
|
|
||||||
* @param userId 用户编号
|
|
||||||
* @param userType 用户类型
|
|
||||||
* @param isSend 是否发送
|
|
||||||
* @param template 短信模板
|
|
||||||
* @param templateContent 短信内容
|
|
||||||
* @param templateParams 短信参数
|
|
||||||
* @return 发送日志编号
|
|
||||||
*/
|
|
||||||
Long createSmsLog(String mobile, Long userId, Integer userType, Boolean isSend,
|
|
||||||
SysSmsTemplateDO template, String templateContent, Map<String, Object> templateParams);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新日志的发送结果
|
|
||||||
*
|
|
||||||
* @param id 日志编号
|
|
||||||
* @param sendCode 发送结果的编码
|
|
||||||
* @param sendMsg 发送结果的提示
|
|
||||||
* @param apiSendCode 短信 API 发送结果的编码
|
|
||||||
* @param apiSendMsg 短信 API 发送失败的提示
|
|
||||||
* @param apiRequestId 短信 API 发送返回的唯一请求 ID
|
|
||||||
* @param apiSerialNo 短信 API 发送返回的序号
|
|
||||||
*/
|
|
||||||
void updateSmsSendResult(Long id, Integer sendCode, String sendMsg,
|
|
||||||
String apiSendCode, String apiSendMsg, String apiRequestId, String apiSerialNo);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新日志的接收结果
|
|
||||||
*
|
|
||||||
* @param id 日志编号
|
|
||||||
* @param success 是否接收成功
|
|
||||||
* @param receiveTime 用户接收时间
|
|
||||||
* @param apiReceiveCode API 接收结果的编码
|
|
||||||
* @param apiReceiveMsg API 接收结果的说明
|
|
||||||
*/
|
|
||||||
void updateSmsReceiveResult(Long id, Boolean success, Date receiveTime, String apiReceiveCode, String apiReceiveMsg);
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,72 +0,0 @@
|
|||||||
package cn.iocoder.yudao.coreservice.modules.system.service.sms.impl;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.sms.SysSmsLogCoreMapper;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsReceiveStatusEnum;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsSendStatusEnum;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.service.sms.SysSmsLogCoreService;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 短信日志 Core Service 实现类
|
|
||||||
*
|
|
||||||
* @author zzf
|
|
||||||
* @date 2021/1/25 9:25
|
|
||||||
*/
|
|
||||||
@Slf4j
|
|
||||||
@Service
|
|
||||||
public class SysSmsLogCoreServiceImpl implements SysSmsLogCoreService {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private SysSmsLogCoreMapper smsLogCoreMapper;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Long createSmsLog(String mobile, Long userId, Integer userType, Boolean isSend,
|
|
||||||
SysSmsTemplateDO template, String templateContent, Map<String, Object> templateParams) {
|
|
||||||
SysSmsLogDO.SysSmsLogDOBuilder logBuilder = SysSmsLogDO.builder();
|
|
||||||
// 根据是否要发送,设置状态
|
|
||||||
logBuilder.sendStatus(Objects.equals(isSend, true) ? SysSmsSendStatusEnum.INIT.getStatus()
|
|
||||||
: SysSmsSendStatusEnum.IGNORE.getStatus());
|
|
||||||
// 设置手机相关字段
|
|
||||||
logBuilder.mobile(mobile).userId(userId).userType(userType);
|
|
||||||
// 设置模板相关字段
|
|
||||||
logBuilder.templateId(template.getId()).templateCode(template.getCode()).templateType(template.getType());
|
|
||||||
logBuilder.templateContent(templateContent).templateParams(templateParams).apiTemplateId(template.getApiTemplateId());
|
|
||||||
// 设置渠道相关字段
|
|
||||||
logBuilder.channelId(template.getChannelId()).channelCode(template.getChannelCode());
|
|
||||||
// 设置接收相关字段
|
|
||||||
logBuilder.receiveStatus(SysSmsReceiveStatusEnum.INIT.getStatus());
|
|
||||||
|
|
||||||
// 插入数据库
|
|
||||||
SysSmsLogDO logDO = logBuilder.build();
|
|
||||||
smsLogCoreMapper.insert(logDO);
|
|
||||||
return logDO.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateSmsSendResult(Long id, Integer sendCode, String sendMsg,
|
|
||||||
String apiSendCode, String apiSendMsg, String apiRequestId, String apiSerialNo) {
|
|
||||||
SysSmsSendStatusEnum sendStatus = CommonResult.isSuccess(sendCode) ? SysSmsSendStatusEnum.SUCCESS
|
|
||||||
: SysSmsSendStatusEnum.FAILURE;
|
|
||||||
smsLogCoreMapper.updateById(SysSmsLogDO.builder().id(id).sendStatus(sendStatus.getStatus()).sendTime(new Date())
|
|
||||||
.sendCode(sendCode).sendMsg(sendMsg).apiSendCode(apiSendCode).apiSendMsg(apiSendMsg)
|
|
||||||
.apiRequestId(apiRequestId).apiSerialNo(apiSerialNo).build());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateSmsReceiveResult(Long id, Boolean success, Date receiveTime, String apiReceiveCode, String apiReceiveMsg) {
|
|
||||||
SysSmsReceiveStatusEnum receiveStatus = Objects.equals(success, true) ? SysSmsReceiveStatusEnum.SUCCESS
|
|
||||||
: SysSmsReceiveStatusEnum.FAILURE;
|
|
||||||
smsLogCoreMapper.updateById(SysSmsLogDO.builder().id(id).receiveStatus(receiveStatus.getStatus()).receiveTime(receiveTime)
|
|
||||||
.apiReceiveCode(apiReceiveCode).apiReceiveMsg(apiReceiveMsg).build());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,78 +0,0 @@
|
|||||||
package cn.iocoder.yudao.coreservice.modules.system.service.dict;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.coreservice.BaseDbUnitTest;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dict.SysDictDataDO;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.dict.SysDictDataCoreMapper;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.service.dict.impl.SysDictDataCoreServiceImpl;
|
|
||||||
import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
|
|
||||||
import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
|
|
||||||
import com.google.common.collect.ImmutableTable;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.springframework.context.annotation.Import;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
import static cn.hutool.core.bean.BeanUtil.getFieldValue;
|
|
||||||
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
|
|
||||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomCommonStatus;
|
|
||||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@link SysDictDataCoreServiceImpl} 的单元测试类
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
@Import(SysDictDataCoreServiceImpl.class)
|
|
||||||
public class SysDictDataCoreServiceTest extends BaseDbUnitTest {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private SysDictDataCoreServiceImpl dictDataCoreService;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private SysDictDataCoreMapper dictDataMapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 测试加载到新的字典数据的情况
|
|
||||||
*/
|
|
||||||
@Test
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public void testInitLocalCache() {
|
|
||||||
// mock 数据
|
|
||||||
SysDictDataDO dictData01 = randomDictDataDO();
|
|
||||||
dictDataMapper.insert(dictData01);
|
|
||||||
SysDictDataDO dictData02 = randomDictDataDO();
|
|
||||||
dictDataMapper.insert(dictData02);
|
|
||||||
|
|
||||||
// 调用
|
|
||||||
dictDataCoreService.initLocalCache();
|
|
||||||
// 断言 labelDictDataCache 缓存
|
|
||||||
ImmutableTable<String, String, SysDictDataDO> labelDictDataCache =
|
|
||||||
(ImmutableTable<String, String, SysDictDataDO>) getFieldValue(dictDataCoreService, "labelDictDataCache");
|
|
||||||
assertEquals(2, labelDictDataCache.size());
|
|
||||||
assertPojoEquals(dictData01, labelDictDataCache.get(dictData01.getDictType(), dictData01.getLabel()));
|
|
||||||
assertPojoEquals(dictData02, labelDictDataCache.get(dictData02.getDictType(), dictData02.getLabel()));
|
|
||||||
// 断言 valueDictDataCache 缓存
|
|
||||||
ImmutableTable<String, String, SysDictDataDO> valueDictDataCache =
|
|
||||||
(ImmutableTable<String, String, SysDictDataDO>) getFieldValue(dictDataCoreService, "valueDictDataCache");
|
|
||||||
assertEquals(2, valueDictDataCache.size());
|
|
||||||
assertPojoEquals(dictData01, valueDictDataCache.get(dictData01.getDictType(), dictData01.getValue()));
|
|
||||||
assertPojoEquals(dictData02, valueDictDataCache.get(dictData02.getDictType(), dictData02.getValue()));
|
|
||||||
// 断言 maxUpdateTime 缓存
|
|
||||||
Date maxUpdateTime = (Date) getFieldValue(dictDataCoreService, "maxUpdateTime");
|
|
||||||
assertEquals(ObjectUtils.max(dictData01.getUpdateTime(), dictData02.getUpdateTime()), maxUpdateTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ========== 随机对象 ==========
|
|
||||||
|
|
||||||
@SafeVarargs
|
|
||||||
private static SysDictDataDO randomDictDataDO(Consumer<SysDictDataDO>... consumers) {
|
|
||||||
Consumer<SysDictDataDO> consumer = (o) -> {
|
|
||||||
o.setStatus(randomCommonStatus()); // 保证 status 的范围
|
|
||||||
};
|
|
||||||
return randomPojo(SysDictDataDO.class, ArrayUtils.append(consumer, consumers));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,47 +0,0 @@
|
|||||||
package cn.iocoder.yudao.coreservice.modules.system.service.logger;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.coreservice.BaseDbUnitTest;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.logger.SysLoginLogDO;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.logger.SysLoginLogCoreMapper;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginLogTypeEnum;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.enums.logger.SysLoginResultEnum;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.service.logger.dto.SysLoginLogCreateReqDTO;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.service.logger.impl.SysLoginLogCoreServiceImpl;
|
|
||||||
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
|
|
||||||
import cn.iocoder.yudao.framework.common.util.monitor.TracerUtils;
|
|
||||||
import cn.iocoder.yudao.framework.test.core.util.RandomUtils;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.springframework.context.annotation.Import;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
|
|
||||||
import static cn.hutool.core.util.RandomUtil.randomEle;
|
|
||||||
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
|
|
||||||
|
|
||||||
@Import(SysLoginLogCoreServiceImpl.class)
|
|
||||||
public class SysLoginLogServiceImplTest extends BaseDbUnitTest {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private SysLoginLogCoreServiceImpl loginLogCoreService;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private SysLoginLogCoreMapper loginLogCoreMapper;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testCreateLoginLog() {
|
|
||||||
SysLoginLogCreateReqDTO reqDTO = RandomUtils.randomPojo(SysLoginLogCreateReqDTO.class, vo -> {
|
|
||||||
// 指定随机的范围,避免超出范围入库失败
|
|
||||||
vo.setUserType(randomEle(UserTypeEnum.values()).getValue());
|
|
||||||
vo.setLogType(randomEle(SysLoginLogTypeEnum.values()).getType());
|
|
||||||
vo.setResult(randomEle(SysLoginResultEnum.values()).getResult());
|
|
||||||
vo.setTraceId(TracerUtils.getTraceId());
|
|
||||||
});
|
|
||||||
|
|
||||||
// 调用
|
|
||||||
loginLogCoreService.createLoginLog(reqDTO);
|
|
||||||
// 断言,忽略基本字段
|
|
||||||
SysLoginLogDO sysLoginLogDO = loginLogCoreMapper.selectOne(null);
|
|
||||||
assertPojoEquals(reqDTO, sysLoginLogDO);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
package cn.iocoder.yudao.coreservice.modules.system.service;
|
|
||||||
@ -1,149 +0,0 @@
|
|||||||
package cn.iocoder.yudao.coreservice.modules.system.service.sms;
|
|
||||||
|
|
||||||
import cn.hutool.core.map.MapUtil;
|
|
||||||
import cn.iocoder.yudao.coreservice.BaseDbUnitTest;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsLogDO;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.sms.SysSmsLogCoreMapper;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsReceiveStatusEnum;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsSendStatusEnum;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsTemplateTypeEnum;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.service.sms.impl.SysSmsLogCoreServiceImpl;
|
|
||||||
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
|
||||||
import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.springframework.context.annotation.Import;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
import static cn.hutool.core.util.RandomUtil.randomBoolean;
|
|
||||||
import static cn.hutool.core.util.RandomUtil.randomEle;
|
|
||||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@link SysSmsLogCoreServiceImpl} 的单元测试类
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
@Import(SysSmsLogCoreServiceImpl.class)
|
|
||||||
public class SysSmsLogCoreServiceTest extends BaseDbUnitTest {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private SysSmsLogCoreServiceImpl smsLogCoreService;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private SysSmsLogCoreMapper smsLogCoreMapper;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testCreateSmsLog() {
|
|
||||||
// 准备参数
|
|
||||||
String mobile = randomString();
|
|
||||||
Long userId = randomLongId();
|
|
||||||
Integer userType = randomEle(UserTypeEnum.values()).getValue();
|
|
||||||
Boolean isSend = randomBoolean();
|
|
||||||
SysSmsTemplateDO templateDO = randomPojo(SysSmsTemplateDO.class,
|
|
||||||
o -> o.setType(randomEle(SysSmsTemplateTypeEnum.values()).getType()));
|
|
||||||
String templateContent = randomString();
|
|
||||||
Map<String, Object> templateParams = randomTemplateParams();
|
|
||||||
// mock 方法
|
|
||||||
|
|
||||||
// 调用
|
|
||||||
Long logId = smsLogCoreService.createSmsLog(mobile, userId, userType, isSend,
|
|
||||||
templateDO, templateContent, templateParams);
|
|
||||||
// 断言
|
|
||||||
SysSmsLogDO logDO = smsLogCoreMapper.selectById(logId);
|
|
||||||
assertEquals(isSend ? SysSmsSendStatusEnum.INIT.getStatus() : SysSmsSendStatusEnum.IGNORE.getStatus(),
|
|
||||||
logDO.getSendStatus());
|
|
||||||
assertEquals(mobile, logDO.getMobile());
|
|
||||||
assertEquals(userType, logDO.getUserType());
|
|
||||||
assertEquals(userId, logDO.getUserId());
|
|
||||||
assertEquals(templateDO.getId(), logDO.getTemplateId());
|
|
||||||
assertEquals(templateDO.getCode(), logDO.getTemplateCode());
|
|
||||||
assertEquals(templateDO.getType(), logDO.getTemplateType());
|
|
||||||
assertEquals(templateDO.getChannelId(), logDO.getChannelId());
|
|
||||||
assertEquals(templateDO.getChannelCode(), logDO.getChannelCode());
|
|
||||||
assertEquals(templateContent, logDO.getTemplateContent());
|
|
||||||
assertEquals(templateParams, logDO.getTemplateParams());
|
|
||||||
assertEquals(SysSmsReceiveStatusEnum.INIT.getStatus(), logDO.getReceiveStatus());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testUpdateSmsSendResult() {
|
|
||||||
// mock 数据
|
|
||||||
SysSmsLogDO dbSmsLog = randomSmsLogDO(
|
|
||||||
o -> o.setSendStatus(SysSmsSendStatusEnum.IGNORE.getStatus()));
|
|
||||||
smsLogCoreMapper.insert(dbSmsLog);
|
|
||||||
// 准备参数
|
|
||||||
Long id = dbSmsLog.getId();
|
|
||||||
Integer sendCode = randomInteger();
|
|
||||||
String sendMsg = randomString();
|
|
||||||
String apiSendCode = randomString();
|
|
||||||
String apiSendMsg = randomString();
|
|
||||||
String apiRequestId = randomString();
|
|
||||||
String apiSerialNo = randomString();
|
|
||||||
|
|
||||||
// 调用
|
|
||||||
smsLogCoreService.updateSmsSendResult(id, sendCode, sendMsg,
|
|
||||||
apiSendCode, apiSendMsg, apiRequestId, apiSerialNo);
|
|
||||||
// 断言
|
|
||||||
dbSmsLog = smsLogCoreMapper.selectById(id);
|
|
||||||
assertEquals(CommonResult.isSuccess(sendCode) ? SysSmsSendStatusEnum.SUCCESS.getStatus()
|
|
||||||
: SysSmsSendStatusEnum.FAILURE.getStatus(), dbSmsLog.getSendStatus());
|
|
||||||
assertNotNull(dbSmsLog.getSendTime());
|
|
||||||
assertEquals(sendMsg, dbSmsLog.getSendMsg());
|
|
||||||
assertEquals(apiSendCode, dbSmsLog.getApiSendCode());
|
|
||||||
assertEquals(apiSendMsg, dbSmsLog.getApiSendMsg());
|
|
||||||
assertEquals(apiRequestId, dbSmsLog.getApiRequestId());
|
|
||||||
assertEquals(apiSerialNo, dbSmsLog.getApiSerialNo());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testUpdateSmsReceiveResult() {
|
|
||||||
// mock 数据
|
|
||||||
SysSmsLogDO dbSmsLog = randomSmsLogDO(
|
|
||||||
o -> o.setReceiveStatus(SysSmsReceiveStatusEnum.INIT.getStatus()));
|
|
||||||
smsLogCoreMapper.insert(dbSmsLog);
|
|
||||||
// 准备参数
|
|
||||||
Long id = dbSmsLog.getId();
|
|
||||||
Boolean success = randomBoolean();
|
|
||||||
Date receiveTime = randomDate();
|
|
||||||
String apiReceiveCode = randomString();
|
|
||||||
String apiReceiveMsg = randomString();
|
|
||||||
|
|
||||||
// 调用
|
|
||||||
smsLogCoreService.updateSmsReceiveResult(id, success, receiveTime, apiReceiveCode, apiReceiveMsg);
|
|
||||||
// 断言
|
|
||||||
dbSmsLog = smsLogCoreMapper.selectById(id);
|
|
||||||
assertEquals(success ? SysSmsReceiveStatusEnum.SUCCESS.getStatus()
|
|
||||||
: SysSmsReceiveStatusEnum.FAILURE.getStatus(), dbSmsLog.getReceiveStatus());
|
|
||||||
assertEquals(receiveTime, dbSmsLog.getReceiveTime());
|
|
||||||
assertEquals(apiReceiveCode, dbSmsLog.getApiReceiveCode());
|
|
||||||
assertEquals(apiReceiveMsg, dbSmsLog.getApiReceiveMsg());
|
|
||||||
}
|
|
||||||
|
|
||||||
// ========== 随机对象 ==========
|
|
||||||
|
|
||||||
@SafeVarargs
|
|
||||||
private static SysSmsLogDO randomSmsLogDO(Consumer<SysSmsLogDO>... consumers) {
|
|
||||||
Consumer<SysSmsLogDO> consumer = (o) -> {
|
|
||||||
o.setTemplateParams(randomTemplateParams());
|
|
||||||
o.setTemplateType(randomEle(SysSmsTemplateTypeEnum.values()).getType()); // 保证 templateType 的范围
|
|
||||||
o.setUserType(randomEle(UserTypeEnum.values()).getValue()); // 保证 userType 的范围
|
|
||||||
o.setSendStatus(randomEle(SysSmsSendStatusEnum.values()).getStatus()); // 保证 sendStatus 的范围
|
|
||||||
o.setReceiveStatus(randomEle(SysSmsReceiveStatusEnum.values()).getStatus()); // 保证 receiveStatus 的范围
|
|
||||||
};
|
|
||||||
return randomPojo(SysSmsLogDO.class, ArrayUtils.append(consumer, consumers));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private static Map<String, Object> randomTemplateParams() {
|
|
||||||
return MapUtil.<String, Object>builder().put(randomString(), randomString())
|
|
||||||
.put(randomString(), randomString()).build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,71 +0,0 @@
|
|||||||
package cn.iocoder.yudao.coreservice.modules.system.service.sms;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.coreservice.BaseDbUnitTest;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.sms.SysSmsTemplateDO;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.dal.mysql.sms.SysSmsTemplateCoreMapper;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.enums.sms.SysSmsTemplateTypeEnum;
|
|
||||||
import cn.iocoder.yudao.coreservice.modules.system.service.sms.impl.SysSmsTemplateCoreServiceImpl;
|
|
||||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
|
||||||
import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.springframework.context.annotation.Import;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
import static cn.hutool.core.bean.BeanUtil.getFieldValue;
|
|
||||||
import static cn.hutool.core.util.RandomUtil.randomEle;
|
|
||||||
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.max;
|
|
||||||
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
|
|
||||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@link SysSmsTemplateCoreServiceImpl} 的单元测试类
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
@Import(SysSmsTemplateCoreServiceImpl.class)
|
|
||||||
public class SysSmsTemplateServiceTest extends BaseDbUnitTest {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private SysSmsTemplateCoreServiceImpl smsTemplateCoreService;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private SysSmsTemplateCoreMapper smsTemplateCoreMapper;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
void testInitLocalCache() {
|
|
||||||
// mock 数据
|
|
||||||
SysSmsTemplateDO smsTemplate01 = randomSmsTemplateDO();
|
|
||||||
smsTemplateCoreMapper.insert(smsTemplate01);
|
|
||||||
SysSmsTemplateDO smsTemplate02 = randomSmsTemplateDO();
|
|
||||||
smsTemplateCoreMapper.insert(smsTemplate02);
|
|
||||||
|
|
||||||
// 调用
|
|
||||||
smsTemplateCoreService.initLocalCache();
|
|
||||||
// 断言 deptCache 缓存
|
|
||||||
Map<String, SysSmsTemplateDO> smsTemplateCache = (Map<String, SysSmsTemplateDO>) getFieldValue(smsTemplateCoreService, "smsTemplateCache");
|
|
||||||
assertEquals(2, smsTemplateCache.size());
|
|
||||||
assertPojoEquals(smsTemplate01, smsTemplateCache.get(smsTemplate01.getCode()));
|
|
||||||
assertPojoEquals(smsTemplate02, smsTemplateCache.get(smsTemplate02.getCode()));
|
|
||||||
// 断言 maxUpdateTime 缓存
|
|
||||||
Date maxUpdateTime = (Date) getFieldValue(smsTemplateCoreService, "maxUpdateTime");
|
|
||||||
assertEquals(max(smsTemplate01.getUpdateTime(), smsTemplate02.getUpdateTime()), maxUpdateTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ========== 随机对象 ==========
|
|
||||||
|
|
||||||
@SafeVarargs
|
|
||||||
private static SysSmsTemplateDO randomSmsTemplateDO(Consumer<SysSmsTemplateDO>... consumers) {
|
|
||||||
Consumer<SysSmsTemplateDO> consumer = (o) -> {
|
|
||||||
o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围
|
|
||||||
o.setType(randomEle(SysSmsTemplateTypeEnum.values()).getType()); // 保证 type 的 范围
|
|
||||||
};
|
|
||||||
return randomPojo(SysSmsTemplateDO.class, ArrayUtils.append(consumer, consumers));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue