Commit 3acdec965d0b7ba9aa386f190faaf2f6c960039c
1 parent
162d6046
短信提交 2021-03-24,调整下短信发送 API
Showing
51 changed files
with
195 additions
and
354 deletions
src/main/java/cn/iocoder/dashboard/framework/redis/core/util/RedisStreamUtils.java deleted
| 1 | -package cn.iocoder.dashboard.framework.redis.core.util; | |
| 2 | - | |
| 3 | -import cn.iocoder.dashboard.modules.system.redis.stream.sms.SmsSendMessage; | |
| 4 | -import org.springframework.data.redis.connection.stream.StreamRecords; | |
| 5 | -import org.springframework.data.redis.core.RedisTemplate; | |
| 6 | - | |
| 7 | -/** | |
| 8 | - * Redis 消息工具类 | |
| 9 | - * | |
| 10 | - * @author 芋道源码 | |
| 11 | - */ | |
| 12 | -public class RedisStreamUtils { | |
| 13 | - | |
| 14 | - public static final String KEY_SMS_SEND = "stream_sms_send"; | |
| 15 | - | |
| 16 | - public static final String GROUP_SMS_SEND = "group_sms_send"; | |
| 17 | - | |
| 18 | - /** | |
| 19 | - * 发送 Redis 消息,基于 Redis pub/sub 实现 | |
| 20 | - * | |
| 21 | - * @param redisTemplate Redis 操作模板 | |
| 22 | - * @param message 消息 | |
| 23 | - */ | |
| 24 | - public static void sendChannelMessage(RedisTemplate<String, ?> redisTemplate, SmsSendMessage message) { | |
| 25 | - | |
| 26 | - redisTemplate.opsForStream().add(StreamRecords.newRecord().ofObject(message).withStreamKey(KEY_SMS_SEND)); | |
| 27 | - } | |
| 28 | - | |
| 29 | -} |
src/main/java/cn/iocoder/dashboard/framework/sms/core/SmsClientFactory.java
| ... | ... | @@ -102,7 +102,7 @@ public class SmsClientFactory { |
| 102 | 102 | public String getTemplateApiIdByCode(String templateCode) { |
| 103 | 103 | SmsTemplateProperty smsTemplateProperty = templatePropertyMap.get(templateCode); |
| 104 | 104 | if (smsTemplateProperty == null) { |
| 105 | - throw new ServiceException(SMS_TEMPLATE_NOT_FOUND); | |
| 105 | + throw new ServiceException(SMS_TEMPLATE_NOT_EXISTS); | |
| 106 | 106 | } |
| 107 | 107 | return smsTemplateProperty.getApiTemplateId(); |
| 108 | 108 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/controller/sms/SmsChannelController.java
| ... | ... | @@ -5,7 +5,7 @@ import cn.iocoder.dashboard.common.pojo.PageResult; |
| 5 | 5 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelCreateReqVO; |
| 6 | 6 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelPageReqVO; |
| 7 | 7 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.resp.SmsChannelEnumRespVO; |
| 8 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsChannelDO; | |
| 8 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsChannelDO; | |
| 9 | 9 | import cn.iocoder.dashboard.modules.system.service.sms.SysSmsChannelService; |
| 10 | 10 | import io.swagger.annotations.Api; |
| 11 | 11 | import io.swagger.annotations.ApiOperation; | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/controller/sms/SmsDefaultCallbackController.java
| 1 | 1 | package cn.iocoder.dashboard.modules.system.controller.sms; |
| 2 | 2 | |
| 3 | -import cn.iocoder.dashboard.framework.sms.core.SmsBody; | |
| 4 | -import cn.iocoder.dashboard.modules.system.redis.stream.sms.SmsSendStreamProducer; | |
| 5 | 3 | import cn.iocoder.dashboard.modules.system.service.sms.SysSmsService; |
| 6 | 4 | import io.swagger.annotations.Api; |
| 7 | 5 | import io.swagger.annotations.ApiOperation; |
| 8 | -import org.springframework.web.bind.annotation.GetMapping; | |
| 9 | 6 | import org.springframework.web.bind.annotation.PostMapping; |
| 10 | 7 | import org.springframework.web.bind.annotation.RequestMapping; |
| 11 | 8 | import org.springframework.web.bind.annotation.RestController; |
| 12 | 9 | |
| 13 | 10 | import javax.annotation.Resource; |
| 14 | 11 | import javax.servlet.ServletRequest; |
| 15 | -import java.util.Arrays; | |
| 16 | -import java.util.Map; | |
| 17 | 12 | |
| 18 | 13 | /** |
| 19 | 14 | * 短信默认回调接口 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/convert/sms/SmsChannelConvert.java
| ... | ... | @@ -7,7 +7,7 @@ import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsChannelAllVO; |
| 7 | 7 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelCreateReqVO; |
| 8 | 8 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.resp.SmsChannelEnumRespVO; |
| 9 | 9 | import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserUpdateReqVO; |
| 10 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsChannelDO; | |
| 10 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsChannelDO; | |
| 11 | 11 | import com.baomidou.mybatisplus.core.metadata.IPage; |
| 12 | 12 | import org.mapstruct.Mapper; |
| 13 | 13 | import org.mapstruct.Mapping; | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/convert/sms/SmsTemplateConvert.java
| ... | ... | @@ -3,8 +3,8 @@ package cn.iocoder.dashboard.modules.system.convert.sms; |
| 3 | 3 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 4 | 4 | import cn.iocoder.dashboard.framework.sms.core.property.SmsTemplateProperty; |
| 5 | 5 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsTemplateVO; |
| 6 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsChannelDO; | |
| 7 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsTemplateDO; | |
| 6 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsChannelDO; | |
| 7 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO; | |
| 8 | 8 | import com.baomidou.mybatisplus.core.metadata.IPage; |
| 9 | 9 | import org.mapstruct.Mapper; |
| 10 | 10 | import org.mapstruct.Mapping; | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/sms/SysSmsChannelDO.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/sms/SysSmsChannelDO.java
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/sms/SysSmsQueryLogDO.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/sms/SysSmsQueryLogDO.java
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/sms/SysSmsSendLogDO.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/sms/SysSmsSendLogDO.java
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/sms/SysSmsTemplateDO.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/dal/dataobject/sms/SysSmsTemplateDO.java
| 1 | -package cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms; | |
| 1 | +package cn.iocoder.dashboard.modules.system.dal.dataobject.sms; | |
| 2 | 2 | |
| 3 | +import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | |
| 3 | 4 | import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; |
| 5 | +import com.baomidou.mybatisplus.annotation.TableField; | |
| 4 | 6 | import com.baomidou.mybatisplus.annotation.TableName; |
| 7 | +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; | |
| 5 | 8 | import lombok.Data; |
| 6 | 9 | import lombok.EqualsAndHashCode; |
| 7 | 10 | |
| 8 | -import java.util.Date; | |
| 11 | +import java.util.List; | |
| 9 | 12 | |
| 10 | 13 | /** |
| 11 | 14 | * 短信模板 |
| ... | ... | @@ -44,7 +47,7 @@ public class SysSmsTemplateDO extends BaseDO { |
| 44 | 47 | private String bizCode; |
| 45 | 48 | |
| 46 | 49 | /** |
| 47 | - * 编码 | |
| 50 | + * 模板编码 | |
| 48 | 51 | */ |
| 49 | 52 | private String code; |
| 50 | 53 | |
| ... | ... | @@ -66,7 +69,8 @@ public class SysSmsTemplateDO extends BaseDO { |
| 66 | 69 | /** |
| 67 | 70 | * 参数数组(自动根据内容生成) |
| 68 | 71 | */ |
| 69 | - private String params; | |
| 72 | + @TableField(typeHandler = JacksonTypeHandler.class) | |
| 73 | + private List<String> params; | |
| 70 | 74 | |
| 71 | 75 | /** |
| 72 | 76 | * 备注 |
| ... | ... | @@ -74,7 +78,9 @@ public class SysSmsTemplateDO extends BaseDO { |
| 74 | 78 | private String remark; |
| 75 | 79 | |
| 76 | 80 | /** |
| 77 | - * 启用状态(0正常 1停用) | |
| 81 | + * 启用状态 | |
| 82 | + * | |
| 83 | + * 枚举 {@link CommonStatusEnum} | |
| 78 | 84 | */ |
| 79 | 85 | private Integer status; |
| 80 | 86 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/sms/SysSmsChannelMapper.java
| 1 | -package cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms; | |
| 1 | +package cn.iocoder.dashboard.modules.system.dal.mysql.sms; | |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.util.StrUtil; |
| 4 | 4 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; |
| 5 | 5 | import cn.iocoder.dashboard.framework.mybatis.core.util.MyBatisUtils; |
| 6 | 6 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelPageReqVO; |
| 7 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsChannelDO; | |
| 7 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsChannelDO; | |
| 8 | 8 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| 9 | 9 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| 10 | 10 | import com.baomidou.mybatisplus.core.metadata.IPage; | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/sms/SysSmsQueryLogMapper.java
| 1 | -package cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms; | |
| 1 | +package cn.iocoder.dashboard.modules.system.dal.mysql.sms; | |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.common.enums.DefaultBitFieldEnum; |
| 4 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsQueryLogDO; | |
| 4 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsQueryLogDO; | |
| 5 | 5 | import cn.iocoder.dashboard.modules.system.enums.sms.SmsSendStatusEnum; |
| 6 | 6 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| 7 | 7 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/sms/SysSmsSendLogMapper.java
| 1 | -package cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms; | |
| 1 | +package cn.iocoder.dashboard.modules.system.dal.mysql.sms; | |
| 2 | 2 | |
| 3 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsSendLogDO; | |
| 3 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsSendLogDO; | |
| 4 | 4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| 5 | 5 | import org.apache.ibatis.annotations.Mapper; |
| 6 | 6 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/sms/SysSmsTemplateMapper.java
| 1 | -package cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms; | |
| 2 | - | |
| 1 | +package cn.iocoder.dashboard.modules.system.dal.mysql.sms; | |
| 3 | 2 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; |
| 4 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsTemplateDO; | |
| 3 | +import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX; | |
| 4 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO; | |
| 5 | 5 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| 6 | -import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |
| 7 | 6 | import org.apache.ibatis.annotations.Mapper; |
| 8 | 7 | |
| 9 | 8 | import java.util.List; |
| 10 | 9 | |
| 11 | 10 | @Mapper |
| 12 | -public interface SysSmsTemplateMapper extends BaseMapper<SysSmsTemplateDO> { | |
| 11 | +public interface SysSmsTemplateMapper extends BaseMapperX<SysSmsTemplateDO> { | |
| 12 | + | |
| 13 | + default SysSmsTemplateDO selectOneByCode(String code) { | |
| 14 | + return selectOne("code", code); | |
| 15 | + } | |
| 13 | 16 | |
| 14 | 17 | /** |
| 15 | 18 | * 根据短信渠道id查询短信模板集合 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java
| ... | ... | @@ -79,11 +79,15 @@ public interface SysErrorCodeConstants { |
| 79 | 79 | ErrorCode FILE_IS_EMPTY= new ErrorCode(1002009003, "文件为空"); |
| 80 | 80 | |
| 81 | 81 | |
| 82 | - // ========== 消息 1003001000 ========== | |
| 82 | + // ========== 短信模板 1002010000 ========== | |
| 83 | + ErrorCode SMS_TEMPLATE_NOT_EXISTS = new ErrorCode(1002010000, "短信模板不存在"); | |
| 84 | + | |
| 85 | + // ========== 短信发送 1002011000 ========== | |
| 86 | + ErrorCode SMS_SEND_MOBILE_NOT_EXISTS = new ErrorCode(1002011000, "手机号不存在"); | |
| 87 | + | |
| 83 | 88 | ErrorCode SMS_CHANNEL_NOT_INIT = new ErrorCode(1003001001, |
| 84 | 89 | "短信渠道没有初始化, 请调用SmsClientWrapper#initSmsClient()或SmsClientWrapper#addSmsClient"); |
| 85 | 90 | ErrorCode SMS_CHANNEL_NOT_FOUND = new ErrorCode(1003001002, "没有短信渠道信息, 请初始化sms_channel表数据。"); |
| 86 | - ErrorCode SMS_TEMPLATE_NOT_FOUND = new ErrorCode(1003001003, "没有短信模板信息, 请初始化sms_template表数据。"); | |
| 87 | 91 | ErrorCode SMS_SENDER_NOT_FOUND = new ErrorCode(1003001004, "没有找到对应的短信发送对象,请检查sms_channel表和sms_template表数据"); |
| 88 | 92 | ErrorCode INVALID_CHANNEL_CODE = new ErrorCode(1003001005, "非法的短信渠道code,请检查sms_channel表的code值是否与SmsChannelEnum中的code值一致。"); |
| 89 | 93 | ErrorCode PARAM_VALUE_IS_NULL = new ErrorCode(1003001006, "参数【{}】不能为空"); | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/redis/mq/consumer/dept/SysDeptRefreshConsumer.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/mq/consumer/dept/SysDeptRefreshConsumer.java
| 1 | -package cn.iocoder.dashboard.modules.system.redis.mq.consumer.dept; | |
| 1 | +package cn.iocoder.dashboard.modules.system.mq.consumer.dept; | |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.framework.redis.core.pubsub.AbstractChannelMessageListener; |
| 4 | -import cn.iocoder.dashboard.modules.system.redis.mq.message.dept.SysDeptRefreshMessage; | |
| 4 | +import cn.iocoder.dashboard.modules.system.mq.message.dept.SysDeptRefreshMessage; | |
| 5 | 5 | import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService; |
| 6 | 6 | import lombok.extern.slf4j.Slf4j; |
| 7 | 7 | import org.springframework.stereotype.Component; | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/redis/mq/consumer/dict/SysDictDataRefreshConsumer.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/mq/consumer/dict/SysDictDataRefreshConsumer.java
| 1 | -package cn.iocoder.dashboard.modules.system.redis.mq.consumer.dict; | |
| 1 | +package cn.iocoder.dashboard.modules.system.mq.consumer.dict; | |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.framework.redis.core.pubsub.AbstractChannelMessageListener; |
| 4 | -import cn.iocoder.dashboard.modules.system.redis.mq.message.dict.SysDictDataRefreshMessage; | |
| 4 | +import cn.iocoder.dashboard.modules.system.mq.message.dict.SysDictDataRefreshMessage; | |
| 5 | 5 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictDataService; |
| 6 | 6 | import lombok.extern.slf4j.Slf4j; |
| 7 | 7 | import org.springframework.stereotype.Component; | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/redis/mq/consumer/permission/SysMenuRefreshConsumer.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/mq/consumer/permission/SysMenuRefreshConsumer.java
| 1 | -package cn.iocoder.dashboard.modules.system.redis.mq.consumer.permission; | |
| 1 | +package cn.iocoder.dashboard.modules.system.mq.consumer.permission; | |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.framework.redis.core.pubsub.AbstractChannelMessageListener; |
| 4 | -import cn.iocoder.dashboard.modules.system.redis.mq.message.permission.SysMenuRefreshMessage; | |
| 4 | +import cn.iocoder.dashboard.modules.system.mq.message.permission.SysMenuRefreshMessage; | |
| 5 | 5 | import cn.iocoder.dashboard.modules.system.service.permission.SysMenuService; |
| 6 | 6 | import lombok.extern.slf4j.Slf4j; |
| 7 | 7 | import org.springframework.stereotype.Component; | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/redis/mq/consumer/permission/SysRoleMenuRefreshConsumer.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/mq/consumer/permission/SysRoleMenuRefreshConsumer.java
| 1 | -package cn.iocoder.dashboard.modules.system.redis.mq.consumer.permission; | |
| 1 | +package cn.iocoder.dashboard.modules.system.mq.consumer.permission; | |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.framework.redis.core.pubsub.AbstractChannelMessageListener; |
| 4 | -import cn.iocoder.dashboard.modules.system.redis.mq.message.permission.SysRoleMenuRefreshMessage; | |
| 4 | +import cn.iocoder.dashboard.modules.system.mq.message.permission.SysRoleMenuRefreshMessage; | |
| 5 | 5 | import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; |
| 6 | 6 | import lombok.extern.slf4j.Slf4j; |
| 7 | 7 | import org.springframework.stereotype.Component; | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/redis/mq/consumer/permission/SysRoleRefreshConsumer.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/mq/consumer/permission/SysRoleRefreshConsumer.java
| 1 | -package cn.iocoder.dashboard.modules.system.redis.mq.consumer.permission; | |
| 1 | +package cn.iocoder.dashboard.modules.system.mq.consumer.permission; | |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.framework.redis.core.pubsub.AbstractChannelMessageListener; |
| 4 | -import cn.iocoder.dashboard.modules.system.redis.mq.message.permission.SysRoleRefreshMessage; | |
| 4 | +import cn.iocoder.dashboard.modules.system.mq.message.permission.SysRoleRefreshMessage; | |
| 5 | 5 | import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService; |
| 6 | 6 | import lombok.extern.slf4j.Slf4j; |
| 7 | 7 | import org.springframework.stereotype.Component; | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/redis/stream/sms/SmsSendStreamConsumer.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/mq/consumer/sms/SmsSendStreamConsumer.java
src/main/java/cn/iocoder/dashboard/modules/system/redis/mq/message/dept/SysDeptRefreshMessage.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/mq/message/dept/SysDeptRefreshMessage.java
src/main/java/cn/iocoder/dashboard/modules/system/redis/mq/message/dict/SysDictDataRefreshMessage.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/mq/message/dict/SysDictDataRefreshMessage.java
src/main/java/cn/iocoder/dashboard/modules/system/redis/mq/message/permission/SysMenuRefreshMessage.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/mq/message/permission/SysMenuRefreshMessage.java
src/main/java/cn/iocoder/dashboard/modules/system/redis/mq/message/permission/SysRoleMenuRefreshMessage.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/mq/message/permission/SysRoleMenuRefreshMessage.java
src/main/java/cn/iocoder/dashboard/modules/system/redis/mq/message/permission/SysRoleRefreshMessage.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/mq/message/permission/SysRoleRefreshMessage.java
src/main/java/cn/iocoder/dashboard/modules/system/redis/mq/producer/dept/SysDeptProducer.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/mq/producer/dept/SysDeptProducer.java
| 1 | -package cn.iocoder.dashboard.modules.system.redis.mq.producer.dept; | |
| 1 | +package cn.iocoder.dashboard.modules.system.mq.producer.dept; | |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.framework.redis.core.util.RedisMessageUtils; |
| 4 | -import cn.iocoder.dashboard.modules.system.redis.mq.message.dept.SysDeptRefreshMessage; | |
| 4 | +import cn.iocoder.dashboard.modules.system.mq.message.dept.SysDeptRefreshMessage; | |
| 5 | 5 | import org.springframework.data.redis.core.StringRedisTemplate; |
| 6 | 6 | import org.springframework.stereotype.Component; |
| 7 | 7 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/redis/mq/producer/dict/SysDictDataProducer.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/mq/producer/dict/SysDictDataProducer.java
| 1 | -package cn.iocoder.dashboard.modules.system.redis.mq.producer.dict; | |
| 1 | +package cn.iocoder.dashboard.modules.system.mq.producer.dict; | |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.framework.redis.core.util.RedisMessageUtils; |
| 4 | -import cn.iocoder.dashboard.modules.system.redis.mq.message.dict.SysDictDataRefreshMessage; | |
| 4 | +import cn.iocoder.dashboard.modules.system.mq.message.dict.SysDictDataRefreshMessage; | |
| 5 | 5 | import org.springframework.data.redis.core.StringRedisTemplate; |
| 6 | 6 | import org.springframework.stereotype.Component; |
| 7 | 7 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/redis/mq/producer/permission/SysMenuProducer.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/mq/producer/permission/SysMenuProducer.java
| 1 | -package cn.iocoder.dashboard.modules.system.redis.mq.producer.permission; | |
| 1 | +package cn.iocoder.dashboard.modules.system.mq.producer.permission; | |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.framework.redis.core.util.RedisMessageUtils; |
| 4 | -import cn.iocoder.dashboard.modules.system.redis.mq.message.permission.SysMenuRefreshMessage; | |
| 4 | +import cn.iocoder.dashboard.modules.system.mq.message.permission.SysMenuRefreshMessage; | |
| 5 | 5 | import org.springframework.data.redis.core.StringRedisTemplate; |
| 6 | 6 | import org.springframework.stereotype.Component; |
| 7 | 7 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/redis/mq/producer/permission/SysPermissionProducer.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/mq/producer/permission/SysPermissionProducer.java
| 1 | -package cn.iocoder.dashboard.modules.system.redis.mq.producer.permission; | |
| 1 | +package cn.iocoder.dashboard.modules.system.mq.producer.permission; | |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.framework.redis.core.util.RedisMessageUtils; |
| 4 | -import cn.iocoder.dashboard.modules.system.redis.mq.message.permission.SysRoleMenuRefreshMessage; | |
| 4 | +import cn.iocoder.dashboard.modules.system.mq.message.permission.SysRoleMenuRefreshMessage; | |
| 5 | 5 | import org.springframework.data.redis.core.StringRedisTemplate; |
| 6 | 6 | import org.springframework.stereotype.Component; |
| 7 | 7 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/redis/mq/producer/permission/SysRoleProducer.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/mq/producer/permission/SysRoleProducer.java
| 1 | -package cn.iocoder.dashboard.modules.system.redis.mq.producer.permission; | |
| 1 | +package cn.iocoder.dashboard.modules.system.mq.producer.permission; | |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.framework.redis.core.util.RedisMessageUtils; |
| 4 | -import cn.iocoder.dashboard.modules.system.redis.mq.message.permission.SysRoleRefreshMessage; | |
| 4 | +import cn.iocoder.dashboard.modules.system.mq.message.permission.SysRoleRefreshMessage; | |
| 5 | 5 | import org.springframework.data.redis.core.StringRedisTemplate; |
| 6 | 6 | import org.springframework.stereotype.Component; |
| 7 | 7 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/redis/stream/sms/SmsSendStreamProducer.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/mq/producer/sms/SmsSendStreamProducer.java
| 1 | -package cn.iocoder.dashboard.modules.system.redis.stream.sms; | |
| 1 | +package cn.iocoder.dashboard.modules.system.mq.producer.sms; | |
| 2 | 2 | |
| 3 | -import cn.iocoder.dashboard.framework.redis.core.util.RedisStreamUtils; | |
| 4 | -import cn.iocoder.dashboard.framework.sms.core.SmsBody; | |
| 3 | +import cn.iocoder.dashboard.framework.redis.core.util.RedisMessageUtils; | |
| 4 | +import cn.iocoder.dashboard.modules.system.mq.message.sms.SysSmsSendMessage; | |
| 5 | 5 | import lombok.extern.slf4j.Slf4j; |
| 6 | 6 | import org.springframework.data.redis.core.StringRedisTemplate; |
| 7 | 7 | import org.springframework.stereotype.Component; |
| 8 | 8 | |
| 9 | 9 | import javax.annotation.Resource; |
| 10 | +import java.util.Map; | |
| 10 | 11 | |
| 11 | 12 | /** |
| 12 | 13 | * 短信发送流消息监听器 |
| ... | ... | @@ -22,14 +23,20 @@ public class SmsSendStreamProducer { |
| 22 | 23 | private StringRedisTemplate stringRedisTemplate; |
| 23 | 24 | |
| 24 | 25 | /** |
| 25 | - * 发送 {@link SmsSendMessage} 消息 | |
| 26 | + * 发送短信 Message | |
| 27 | + * | |
| 28 | + * @param mobile 手机号 | |
| 29 | + * @param templateCode 短信模板编号 | |
| 30 | + * @param templateParams 短信模板参数 | |
| 31 | + * @param userId 用户编号 | |
| 32 | + * @param userType 用户类型 | |
| 26 | 33 | */ |
| 27 | - public void sendSmsSendMessage(SmsBody smsBody, String targetPhone) { | |
| 28 | - SmsSendMessage message = new SmsSendMessage(); | |
| 29 | - message.setSmsBody(smsBody); | |
| 30 | - message.setTargetPhone(targetPhone); | |
| 31 | - | |
| 32 | - RedisStreamUtils.sendChannelMessage(stringRedisTemplate, message); | |
| 34 | + public void sendSmsSendMessage(String mobile, String templateCode, Map<String, Object> templateParams, | |
| 35 | + Integer userId, Integer userType) { | |
| 36 | + SysSmsSendMessage message = new SysSmsSendMessage(); | |
| 37 | + message.setMobile(mobile).setTemplateCode(templateCode).setTemplateParams(templateParams); | |
| 38 | + message.setUserId(userId).setUserType(userType); | |
| 39 | + RedisMessageUtils.sendStreamMessage(stringRedisTemplate, message); | |
| 33 | 40 | } |
| 34 | 41 | |
| 35 | -} | |
| 36 | 42 | \ No newline at end of file |
| 43 | +} | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/redis/mq/consumer/sms/SmsSendConsumer.java deleted
| 1 | -//package cn.iocoder.dashboard.modules.system.redis.mq.consumer.sms; | |
| 2 | -// | |
| 3 | -//import cn.iocoder.dashboard.framework.redis.core.pubsub.AbstractChannelMessageListener; | |
| 4 | -//import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient; | |
| 5 | -//import cn.iocoder.dashboard.framework.sms.core.SmsResult; | |
| 6 | -//import cn.iocoder.dashboard.modules.system.redis.mq.message.dept.SysDeptRefreshMessage; | |
| 7 | -//import cn.iocoder.dashboard.modules.system.redis.stream.sms.SmsSendMessage; | |
| 8 | -//import cn.iocoder.dashboard.modules.system.service.sms.SysSmsChannelService; | |
| 9 | -//import cn.iocoder.dashboard.modules.system.service.sms.SysSmsQueryLogService; | |
| 10 | -//import lombok.extern.slf4j.Slf4j; | |
| 11 | -//import org.springframework.beans.factory.annotation.Autowired; | |
| 12 | -//import org.springframework.data.redis.connection.stream.Consumer; | |
| 13 | -//import org.springframework.data.redis.connection.stream.ObjectRecord; | |
| 14 | -//import org.springframework.data.redis.connection.stream.ReadOffset; | |
| 15 | -//import org.springframework.data.redis.connection.stream.StreamOffset; | |
| 16 | -//import org.springframework.data.redis.core.StringRedisTemplate; | |
| 17 | -//import org.springframework.stereotype.Component; | |
| 18 | -// | |
| 19 | -//import javax.annotation.Resource; | |
| 20 | -// | |
| 21 | -///** | |
| 22 | -// * 针对 {@link SysDeptRefreshMessage} 的消费者 | |
| 23 | -// * | |
| 24 | -// * @author 芋道源码 | |
| 25 | -// */ | |
| 26 | -//@Component | |
| 27 | -//@Slf4j | |
| 28 | -//public class SmsSendConsumer extends AbstractChannelMessageListener<SmsSendMessage> { | |
| 29 | -// | |
| 30 | -// @Resource | |
| 31 | -// private SysSmsChannelService smsChannelService; | |
| 32 | -// | |
| 33 | -// @Resource | |
| 34 | -// private SysSmsQueryLogService smsQueryLogService; | |
| 35 | -// | |
| 36 | -// @Autowired | |
| 37 | -// StringRedisTemplate redisTemplate; | |
| 38 | -// | |
| 39 | -// @Override | |
| 40 | -// public void onMessage(SmsSendMessage message) { | |
| 41 | -// | |
| 42 | -// redisTemplate.opsForStream().add(ObjectRecord.create("String", message)); | |
| 43 | -// | |
| 44 | -// redisTemplate.opsForStream().read(Consumer.from("",""), StreamOffset.create("", ReadOffset.lastConsumed())); | |
| 45 | -// | |
| 46 | -// | |
| 47 | -// | |
| 48 | -// log.info("[onMessage][收到 发送短信 消息], content: " + message.toString()); | |
| 49 | -// AbstractSmsClient smsClient = smsChannelService.getSmsClient(message.getSmsBody().getTemplateCode()); | |
| 50 | -// String templateApiId = smsChannelService.getSmsTemplateApiIdByCode(message.getSmsBody().getTemplateCode()); | |
| 51 | -// | |
| 52 | -// SmsResult result = smsClient.send(templateApiId, message.getSmsBody(), message.getTargetPhone()); | |
| 53 | -// smsQueryLogService.afterSendLog(message.getSmsBody().getSmsLogId(), result); | |
| 54 | -// } | |
| 55 | -// | |
| 56 | -//} |
src/main/java/cn/iocoder/dashboard/modules/system/redis/mq/producer/sms/SmsProducer.java deleted
| 1 | -//package cn.iocoder.dashboard.modules.system.redis.mq.producer.sms; | |
| 2 | -// | |
| 3 | -//import cn.iocoder.dashboard.framework.redis.core.util.RedisMessageUtils; | |
| 4 | -//import cn.iocoder.dashboard.framework.sms.core.SmsBody; | |
| 5 | -//import cn.iocoder.dashboard.modules.system.redis.stream.sms.SmsSendMessage; | |
| 6 | -//import org.springframework.data.redis.core.StringRedisTemplate; | |
| 7 | -//import org.springframework.stereotype.Component; | |
| 8 | -// | |
| 9 | -//import javax.annotation.Resource; | |
| 10 | -// | |
| 11 | -///** | |
| 12 | -// * 短信的 Producer | |
| 13 | -// */ | |
| 14 | -//@Component | |
| 15 | -//public class SmsProducer { | |
| 16 | -// | |
| 17 | -// @Resource | |
| 18 | -// private StringRedisTemplate stringRedisTemplate; | |
| 19 | -// | |
| 20 | -// /** | |
| 21 | -// * 发送 {@link SmsSendMessage} 消息 | |
| 22 | -// */ | |
| 23 | -// public void sendSmsSendMessage(SmsBody smsBody, String targetPhone) { | |
| 24 | -// SmsSendMessage message = new SmsSendMessage(); | |
| 25 | -// message.setSmsBody(smsBody); | |
| 26 | -// message.setTargetPhone(targetPhone); | |
| 27 | -// // TODO FROM 芋艿 TO ZZF:这块等未来改哈。这个方法目前是广播消费,会导致每个节点都发送一次。等后续封装出 redis stream 消息 | |
| 28 | -// RedisMessageUtils.sendChannelMessage(stringRedisTemplate, message); | |
| 29 | -// } | |
| 30 | -// | |
| 31 | -//} |
src/main/java/cn/iocoder/dashboard/modules/system/redis/stream/StreamConsumerRunner.java deleted
| 1 | -package cn.iocoder.dashboard.modules.system.redis.stream; | |
| 2 | - | |
| 3 | -import cn.iocoder.dashboard.framework.redis.core.util.RedisStreamUtils; | |
| 4 | -import cn.iocoder.dashboard.modules.system.redis.stream.sms.SmsSendMessage; | |
| 5 | -import cn.iocoder.dashboard.modules.system.redis.stream.sms.SmsSendStreamConsumer; | |
| 6 | -import lombok.extern.slf4j.Slf4j; | |
| 7 | -import org.springframework.beans.factory.DisposableBean; | |
| 8 | -import org.springframework.boot.ApplicationArguments; | |
| 9 | -import org.springframework.boot.ApplicationRunner; | |
| 10 | -import org.springframework.data.redis.connection.RedisConnectionFactory; | |
| 11 | -import org.springframework.data.redis.connection.stream.*; | |
| 12 | -import org.springframework.data.redis.core.StringRedisTemplate; | |
| 13 | -import org.springframework.data.redis.serializer.StringRedisSerializer; | |
| 14 | -import org.springframework.data.redis.stream.StreamMessageListenerContainer; | |
| 15 | -import org.springframework.data.redis.stream.StreamMessageListenerContainer.StreamMessageListenerContainerOptions; | |
| 16 | -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; | |
| 17 | -import org.springframework.stereotype.Component; | |
| 18 | -import org.springframework.util.ErrorHandler; | |
| 19 | - | |
| 20 | -import javax.annotation.Resource; | |
| 21 | -import java.net.InetAddress; | |
| 22 | -import java.net.UnknownHostException; | |
| 23 | -import java.time.Duration; | |
| 24 | - | |
| 25 | - | |
| 26 | -@Slf4j | |
| 27 | -@Component | |
| 28 | -public class StreamConsumerRunner implements ApplicationRunner, DisposableBean { | |
| 29 | - | |
| 30 | - @Resource | |
| 31 | - RedisConnectionFactory redisConnectionFactory; | |
| 32 | - | |
| 33 | - @Resource | |
| 34 | - ThreadPoolTaskExecutor threadPoolTaskExecutor; | |
| 35 | - | |
| 36 | - @Resource | |
| 37 | - SmsSendStreamConsumer streamMessageListener; | |
| 38 | - | |
| 39 | - @Resource | |
| 40 | - StringRedisTemplate stringRedisTemplate; | |
| 41 | - | |
| 42 | - private StreamMessageListenerContainer<String, ObjectRecord<String, SmsSendMessage>> streamMessageListenerContainer; | |
| 43 | - | |
| 44 | - @Override | |
| 45 | - public void run(ApplicationArguments args) throws UnknownHostException { | |
| 46 | - | |
| 47 | - StreamInfo.XInfoGroups groups = stringRedisTemplate.opsForStream().groups(RedisStreamUtils.KEY_SMS_SEND); | |
| 48 | - if (groups.isEmpty()) { | |
| 49 | - stringRedisTemplate.opsForStream().createGroup(RedisStreamUtils.KEY_SMS_SEND, RedisStreamUtils.GROUP_SMS_SEND); | |
| 50 | - } | |
| 51 | - | |
| 52 | - | |
| 53 | - // 创建配置对象 | |
| 54 | - StreamMessageListenerContainerOptions<String, ObjectRecord<String, SmsSendMessage>> streamMessageListenerContainerOptions = StreamMessageListenerContainerOptions | |
| 55 | - .builder() | |
| 56 | - // 一次性最多拉取多少条消息 | |
| 57 | - .batchSize(10) | |
| 58 | - // 执行消息轮询的执行器 | |
| 59 | - .executor(this.threadPoolTaskExecutor) | |
| 60 | - // 消息消费异常的handler | |
| 61 | - .errorHandler(new ErrorHandler() { | |
| 62 | - @Override | |
| 63 | - public void handleError(Throwable t) { | |
| 64 | - // throw new RuntimeException(t); | |
| 65 | - t.printStackTrace(); | |
| 66 | - } | |
| 67 | - }) | |
| 68 | - // 超时时间,设置为0,表示不超时(超时后会抛出异常) | |
| 69 | - .pollTimeout(Duration.ZERO) | |
| 70 | - // 序列化器 | |
| 71 | - .serializer(new StringRedisSerializer()) | |
| 72 | - .targetType(SmsSendMessage.class) | |
| 73 | - .build(); | |
| 74 | - | |
| 75 | - // 根据配置对象创建监听容器对象 | |
| 76 | - StreamMessageListenerContainer<String, ObjectRecord<String, SmsSendMessage>> streamMessageListenerContainer = StreamMessageListenerContainer | |
| 77 | - .create(this.redisConnectionFactory, streamMessageListenerContainerOptions); | |
| 78 | - | |
| 79 | - // 使用监听容器对象开始监听消费(使用的是手动确认方式) | |
| 80 | - streamMessageListenerContainer.receive(Consumer.from(RedisStreamUtils.GROUP_SMS_SEND, InetAddress.getLocalHost().getHostName()), | |
| 81 | - StreamOffset.create(RedisStreamUtils.KEY_SMS_SEND, ReadOffset.lastConsumed()), this.streamMessageListener); | |
| 82 | - | |
| 83 | - this.streamMessageListenerContainer = streamMessageListenerContainer; | |
| 84 | - // 启动监听 | |
| 85 | - this.streamMessageListenerContainer.start(); | |
| 86 | - | |
| 87 | - } | |
| 88 | - | |
| 89 | - @Override | |
| 90 | - public void destroy() throws Exception { | |
| 91 | - this.streamMessageListenerContainer.stop(); | |
| 92 | - } | |
| 93 | -} | |
| 94 | 0 | \ No newline at end of file |
src/main/java/cn/iocoder/dashboard/modules/system/redis/stream/sms/SmsSendMessage.java deleted
| 1 | -package cn.iocoder.dashboard.modules.system.redis.stream.sms; | |
| 2 | - | |
| 3 | -import cn.iocoder.dashboard.framework.sms.core.SmsBody; | |
| 4 | -import lombok.Data; | |
| 5 | - | |
| 6 | -/** | |
| 7 | - * 部门数据刷新 Message | |
| 8 | - */ | |
| 9 | -@Data | |
| 10 | -public class SmsSendMessage { | |
| 11 | - | |
| 12 | - private SmsBody smsBody; | |
| 13 | - | |
| 14 | - private String targetPhone; | |
| 15 | - | |
| 16 | -} |
src/main/java/cn/iocoder/dashboard/modules/system/service/dept/impl/SysDeptServiceImpl.java
| ... | ... | @@ -11,7 +11,7 @@ import cn.iocoder.dashboard.modules.system.convert.dept.SysDeptConvert; |
| 11 | 11 | import cn.iocoder.dashboard.modules.system.dal.mysql.dept.SysDeptMapper; |
| 12 | 12 | import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysDeptDO; |
| 13 | 13 | import cn.iocoder.dashboard.modules.system.enums.dept.DeptIdEnum; |
| 14 | -import cn.iocoder.dashboard.modules.system.redis.mq.producer.dept.SysDeptProducer; | |
| 14 | +import cn.iocoder.dashboard.modules.system.mq.producer.dept.SysDeptProducer; | |
| 15 | 15 | import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService; |
| 16 | 16 | import com.google.common.collect.ImmutableMap; |
| 17 | 17 | import com.google.common.collect.ImmutableMultimap; | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/dict/impl/SysDictDataServiceImpl.java
| ... | ... | @@ -12,7 +12,7 @@ import cn.iocoder.dashboard.modules.system.convert.dict.SysDictDataConvert; |
| 12 | 12 | import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictDataDO; |
| 13 | 13 | import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictTypeDO; |
| 14 | 14 | import cn.iocoder.dashboard.modules.system.dal.mysql.dict.SysDictDataMapper; |
| 15 | -import cn.iocoder.dashboard.modules.system.redis.mq.producer.dict.SysDictDataProducer; | |
| 15 | +import cn.iocoder.dashboard.modules.system.mq.producer.dict.SysDictDataProducer; | |
| 16 | 16 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictDataService; |
| 17 | 17 | import cn.iocoder.dashboard.modules.system.service.dict.SysDictTypeService; |
| 18 | 18 | import com.google.common.annotations.VisibleForTesting; | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysMenuServiceImpl.java
| ... | ... | @@ -11,7 +11,7 @@ import cn.iocoder.dashboard.modules.system.dal.mysql.permission.SysMenuMapper; |
| 11 | 11 | import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysMenuDO; |
| 12 | 12 | import cn.iocoder.dashboard.modules.system.enums.permission.MenuIdEnum; |
| 13 | 13 | import cn.iocoder.dashboard.modules.system.enums.permission.MenuTypeEnum; |
| 14 | -import cn.iocoder.dashboard.modules.system.redis.mq.producer.permission.SysMenuProducer; | |
| 14 | +import cn.iocoder.dashboard.modules.system.mq.producer.permission.SysMenuProducer; | |
| 15 | 15 | import cn.iocoder.dashboard.modules.system.service.permission.SysMenuService; |
| 16 | 16 | import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; |
| 17 | 17 | import cn.iocoder.dashboard.util.collection.CollectionUtils; | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysPermissionServiceImpl.java
| ... | ... | @@ -3,7 +3,6 @@ package cn.iocoder.dashboard.modules.system.service.permission.impl; |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.hutool.core.collection.CollectionUtil; |
| 5 | 5 | import cn.hutool.core.util.ArrayUtil; |
| 6 | -import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; | |
| 7 | 6 | import cn.iocoder.dashboard.framework.security.core.util.SecurityFrameworkUtils; |
| 8 | 7 | import cn.iocoder.dashboard.modules.system.dal.mysql.permission.SysRoleMenuMapper; |
| 9 | 8 | import cn.iocoder.dashboard.modules.system.dal.mysql.permission.SysUserRoleMapper; |
| ... | ... | @@ -11,7 +10,7 @@ import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysMenuDO; |
| 11 | 10 | import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleDO; |
| 12 | 11 | import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleMenuDO; |
| 13 | 12 | import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysUserRoleDO; |
| 14 | -import cn.iocoder.dashboard.modules.system.redis.mq.producer.permission.SysPermissionProducer; | |
| 13 | +import cn.iocoder.dashboard.modules.system.mq.producer.permission.SysPermissionProducer; | |
| 15 | 14 | import cn.iocoder.dashboard.modules.system.service.permission.SysMenuService; |
| 16 | 15 | import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; |
| 17 | 16 | import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService; | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysRoleServiceImpl.java
| ... | ... | @@ -15,7 +15,7 @@ import cn.iocoder.dashboard.modules.system.dal.mysql.permission.SysRoleMapper; |
| 15 | 15 | import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleDO; |
| 16 | 16 | import cn.iocoder.dashboard.modules.system.enums.permission.RoleCodeEnum; |
| 17 | 17 | import cn.iocoder.dashboard.modules.system.enums.permission.SysRoleTypeEnum; |
| 18 | -import cn.iocoder.dashboard.modules.system.redis.mq.producer.permission.SysRoleProducer; | |
| 18 | +import cn.iocoder.dashboard.modules.system.mq.producer.permission.SysRoleProducer; | |
| 19 | 19 | import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; |
| 20 | 20 | import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService; |
| 21 | 21 | import com.google.common.collect.ImmutableMap; | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SysSmsChannelService.java
| ... | ... | @@ -2,14 +2,12 @@ package cn.iocoder.dashboard.modules.system.service.sms; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 4 | 4 | import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient; |
| 5 | -import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail; | |
| 6 | 5 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsChannelAllVO; |
| 7 | 6 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelCreateReqVO; |
| 8 | 7 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelPageReqVO; |
| 9 | 8 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.resp.SmsChannelEnumRespVO; |
| 10 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsChannelDO; | |
| 9 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsChannelDO; | |
| 11 | 10 | |
| 12 | -import javax.servlet.ServletRequest; | |
| 13 | 11 | import java.util.List; |
| 14 | 12 | |
| 15 | 13 | /** | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SysSmsService.java
| 1 | 1 | package cn.iocoder.dashboard.modules.system.service.sms; |
| 2 | 2 | |
| 3 | -import cn.hutool.core.collection.CollectionUtil; | |
| 4 | -import cn.hutool.core.util.ArrayUtil; | |
| 5 | -import cn.iocoder.dashboard.framework.sms.core.SmsBody; | |
| 6 | -import cn.iocoder.dashboard.framework.sms.core.enums.SmsChannelEnum; | |
| 7 | - | |
| 8 | 3 | import javax.servlet.ServletRequest; |
| 9 | -import java.util.Arrays; | |
| 10 | 4 | import java.util.List; |
| 5 | +import java.util.Map; | |
| 11 | 6 | |
| 12 | 7 | /** |
| 13 | 8 | * 短信Service接口 |
| ... | ... | @@ -18,39 +13,11 @@ import java.util.List; |
| 18 | 13 | */ |
| 19 | 14 | public interface SysSmsService { |
| 20 | 15 | |
| 21 | - /** | |
| 22 | - * 发送消息 | |
| 23 | - * | |
| 24 | - * @param smsBody 消息内容 | |
| 25 | - * @param targetPhones 发送对象手机号列表 | |
| 26 | - */ | |
| 27 | - default void send(SmsBody smsBody, List<String> targetPhones) { | |
| 28 | - if (CollectionUtil.isEmpty(targetPhones)) { | |
| 29 | - return; | |
| 30 | - } | |
| 31 | - targetPhones.forEach(s -> this.send(smsBody, s)); | |
| 32 | - } | |
| 16 | + void sendSingleSms(String mobile, Long userId, Integer userType, | |
| 17 | + String templateCode, Map<String, Object> templateParams); | |
| 33 | 18 | |
| 34 | - /** | |
| 35 | - * 发送消息 | |
| 36 | - * | |
| 37 | - * @param smsBody 消息内容 | |
| 38 | - * @param targetPhone 发送对象手机号 | |
| 39 | - */ | |
| 40 | - void send(SmsBody smsBody, String targetPhone); | |
| 41 | - | |
| 42 | - /** | |
| 43 | - * 发送消息 | |
| 44 | - * | |
| 45 | - * @param smsBody 消息内容 | |
| 46 | - * @param targetPhones 发送对象手机号数组 | |
| 47 | - */ | |
| 48 | - default void send(SmsBody smsBody, String... targetPhones) { | |
| 49 | - if (ArrayUtil.isEmpty(targetPhones)) { | |
| 50 | - return; | |
| 51 | - } | |
| 52 | - send(smsBody, Arrays.asList(targetPhones)); | |
| 53 | - } | |
| 19 | + void sendBatchSms(List<String> mobiles, List<Long> userIds, Integer userType, | |
| 20 | + String templateCode, Map<String, Object> templateParams); | |
| 54 | 21 | |
| 55 | 22 | /** |
| 56 | 23 | * 处理短信发送回调函数 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SysSmsTemplateService.java
| 1 | 1 | package cn.iocoder.dashboard.modules.system.service.sms; |
| 2 | 2 | |
| 3 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO; | |
| 4 | + | |
| 3 | 5 | /** |
| 4 | - * 短信渠道Service接口 | |
| 6 | + * 短信模板 Service 接口 | |
| 5 | 7 | * |
| 6 | 8 | * @author zzf |
| 7 | 9 | * @date 2021/1/25 9:24 |
| 8 | 10 | */ |
| 9 | 11 | public interface SysSmsTemplateService { |
| 12 | + | |
| 13 | + /** | |
| 14 | + * 获得短信模板 | |
| 15 | + * | |
| 16 | + * @param code 模板编码 | |
| 17 | + * @return 短信模板 | |
| 18 | + */ | |
| 19 | + SysSmsTemplateDO getSmsTemplateByCode(String code); | |
| 20 | + | |
| 10 | 21 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SysSmsChannelServiceImpl.java
| ... | ... | @@ -8,7 +8,6 @@ import cn.iocoder.dashboard.framework.sms.core.enums.SmsChannelEnum; |
| 8 | 8 | import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty; |
| 9 | 9 | import cn.iocoder.dashboard.framework.sms.core.property.SmsTemplateProperty; |
| 10 | 10 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsChannelAllVO; |
| 11 | -import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsTemplateVO; | |
| 12 | 11 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelCreateReqVO; |
| 13 | 12 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelPageReqVO; |
| 14 | 13 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.resp.SmsChannelEnumRespVO; |
| ... | ... | @@ -16,10 +15,9 @@ import cn.iocoder.dashboard.modules.system.convert.sms.SmsChannelConvert; |
| 16 | 15 | import cn.iocoder.dashboard.modules.system.convert.sms.SmsTemplateConvert; |
| 17 | 16 | import cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms.SysSmsChannelMapper; |
| 18 | 17 | import cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms.SysSmsTemplateMapper; |
| 19 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsChannelDO; | |
| 20 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsTemplateDO; | |
| 18 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsChannelDO; | |
| 19 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO; | |
| 21 | 20 | import cn.iocoder.dashboard.modules.system.service.sms.SysSmsChannelService; |
| 22 | -import org.springframework.beans.factory.annotation.Autowired; | |
| 23 | 21 | import org.springframework.stereotype.Service; |
| 24 | 22 | |
| 25 | 23 | import javax.annotation.PostConstruct; | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SysSmsQueryLogServiceImpl.java
| ... | ... | @@ -6,7 +6,7 @@ import cn.iocoder.dashboard.framework.sms.core.SmsResult; |
| 6 | 6 | import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail; |
| 7 | 7 | import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty; |
| 8 | 8 | import cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms.SysSmsQueryLogMapper; |
| 9 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsQueryLogDO; | |
| 9 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsQueryLogDO; | |
| 10 | 10 | import cn.iocoder.dashboard.modules.system.enums.sms.SmsSendStatusEnum; |
| 11 | 11 | import cn.iocoder.dashboard.modules.system.service.sms.SysSmsQueryLogService; |
| 12 | 12 | import org.springframework.stereotype.Service; | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SysSmsSendLogServiceImpl.java
| ... | ... | @@ -2,11 +2,10 @@ package cn.iocoder.dashboard.modules.system.service.sms.impl; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollectionUtil; |
| 4 | 4 | import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient; |
| 5 | -import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail; | |
| 6 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms.SysSmsQueryLogMapper; | |
| 7 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms.SysSmsSendLogMapper; | |
| 8 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsQueryLogDO; | |
| 9 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsSendLogDO; | |
| 5 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsQueryLogDO; | |
| 6 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsSendLogDO; | |
| 7 | +import cn.iocoder.dashboard.modules.system.dal.mysql.sms.SysSmsQueryLogMapper; | |
| 8 | +import cn.iocoder.dashboard.modules.system.dal.mysql.sms.SysSmsSendLogMapper; | |
| 10 | 9 | import cn.iocoder.dashboard.modules.system.enums.sms.SmsSendStatusEnum; |
| 11 | 10 | import cn.iocoder.dashboard.modules.system.service.sms.SysSmsChannelService; |
| 12 | 11 | import cn.iocoder.dashboard.modules.system.service.sms.SysSmsSendLogService; | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SysSmsServiceImpl.java
| 1 | 1 | package cn.iocoder.dashboard.modules.system.service.sms.impl; |
| 2 | 2 | |
| 3 | +import cn.hutool.core.util.StrUtil; | |
| 4 | +import cn.iocoder.dashboard.common.enums.UserTypeEnum; | |
| 3 | 5 | import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient; |
| 4 | 6 | import cn.iocoder.dashboard.framework.sms.core.SmsBody; |
| 5 | 7 | import cn.iocoder.dashboard.framework.sms.core.SmsClientFactory; |
| 6 | 8 | import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail; |
| 7 | -import cn.iocoder.dashboard.modules.system.redis.stream.sms.SmsSendStreamProducer; | |
| 9 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO; | |
| 10 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO; | |
| 11 | +import cn.iocoder.dashboard.modules.system.mq.producer.sms.SmsSendStreamProducer; | |
| 8 | 12 | import cn.iocoder.dashboard.modules.system.service.sms.SysSmsChannelService; |
| 9 | 13 | import cn.iocoder.dashboard.modules.system.service.sms.SysSmsQueryLogService; |
| 10 | 14 | import cn.iocoder.dashboard.modules.system.service.sms.SysSmsService; |
| 15 | +import cn.iocoder.dashboard.modules.system.service.sms.SysSmsTemplateService; | |
| 16 | +import cn.iocoder.dashboard.modules.system.service.user.SysUserService; | |
| 11 | 17 | import org.springframework.stereotype.Service; |
| 12 | 18 | |
| 13 | 19 | import javax.annotation.Resource; |
| 14 | 20 | import javax.servlet.ServletRequest; |
| 21 | +import java.util.List; | |
| 22 | +import java.util.Map; | |
| 23 | +import java.util.Objects; | |
| 24 | + | |
| 25 | +import static cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil.exception; | |
| 26 | +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; | |
| 15 | 27 | |
| 16 | 28 | /** |
| 17 | 29 | * 短信日志Service实现类 |
| ... | ... | @@ -23,8 +35,14 @@ import javax.servlet.ServletRequest; |
| 23 | 35 | public class SysSmsServiceImpl implements SysSmsService { |
| 24 | 36 | |
| 25 | 37 | @Resource |
| 38 | + private SysSmsTemplateService smsTemplateService; | |
| 39 | + @Resource | |
| 40 | + private SysUserService userService; | |
| 41 | + | |
| 42 | + @Resource | |
| 26 | 43 | private SysSmsChannelService channelService; |
| 27 | 44 | |
| 45 | + | |
| 28 | 46 | @Resource |
| 29 | 47 | private SysSmsQueryLogService logService; |
| 30 | 48 | |
| ... | ... | @@ -35,6 +53,54 @@ public class SysSmsServiceImpl implements SysSmsService { |
| 35 | 53 | private SmsClientFactory smsClientFactory; |
| 36 | 54 | |
| 37 | 55 | @Override |
| 56 | + public void sendSingleSms(String mobile, Long userId, Integer userType, | |
| 57 | + String templateCode, Map<String, Object> templateParams) { | |
| 58 | + // 校验短信模板是否存在 | |
| 59 | + SysSmsTemplateDO template = this.checkSmsTemplateExists(templateCode); | |
| 60 | + // 校验手机号码是否存在 | |
| 61 | + mobile = this.checkMobile(mobile, userId, userType); | |
| 62 | + } | |
| 63 | + | |
| 64 | + @Override | |
| 65 | + public void sendBatchSms(List<String> mobiles, List<Long> userIds, Integer userType, | |
| 66 | + String templateCode, Map<String, Object> templateParams) { | |
| 67 | + // 校验短信模板是否存在 | |
| 68 | + SysSmsTemplateDO template = this.checkSmsTemplateExists(templateCode); | |
| 69 | + } | |
| 70 | + | |
| 71 | + private SysSmsTemplateDO checkSmsTemplateExists(String templateCode) { | |
| 72 | + SysSmsTemplateDO template = smsTemplateService.getSmsTemplateByCode(templateCode); | |
| 73 | + if (template == null) { | |
| 74 | + throw exception(SMS_TEMPLATE_NOT_EXISTS); | |
| 75 | + } | |
| 76 | + return template; | |
| 77 | + } | |
| 78 | + | |
| 79 | + private String checkMobile(String mobile, Long userId, Integer userType) { | |
| 80 | + mobile = getMobile(mobile, userId, userType); | |
| 81 | + if (StrUtil.isEmpty(mobile)) { | |
| 82 | + throw exception(SMS_SEND_MOBILE_NOT_EXISTS); | |
| 83 | + } | |
| 84 | + return mobile; | |
| 85 | + } | |
| 86 | + | |
| 87 | + private String getMobile(String mobile, Long userId, Integer userType) { | |
| 88 | + // 如果已经有手机号,则直接返回 | |
| 89 | + if (StrUtil.isNotEmpty(mobile)) { | |
| 90 | + return mobile; | |
| 91 | + } | |
| 92 | + // 没有手机号,则基于 userId 检索 | |
| 93 | + if (userId == null || userType == null) { | |
| 94 | + return null; | |
| 95 | + } | |
| 96 | + if (Objects.equals(userType, UserTypeEnum.ADMIN.getValue())) { | |
| 97 | + SysUserDO user = userService.getUser(userId); | |
| 98 | + return user != null ? user.getMobile() : null; | |
| 99 | + } | |
| 100 | + return null; | |
| 101 | + } | |
| 102 | + | |
| 103 | + @Override | |
| 38 | 104 | public void send(SmsBody smsBody, String targetPhone) { |
| 39 | 105 | AbstractSmsClient client = channelService.getSmsClient(smsBody.getTemplateCode()); |
| 40 | 106 | logService.beforeSendLog(smsBody, targetPhone, client); | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SysSmsTemplateServiceImpl.java
| 1 | 1 | package cn.iocoder.dashboard.modules.system.service.sms.impl; |
| 2 | 2 | |
| 3 | +import cn.iocoder.dashboard.modules.system.dal.dataobject.sms.SysSmsTemplateDO; | |
| 4 | +import cn.iocoder.dashboard.modules.system.dal.mysql.sms.SysSmsTemplateMapper; | |
| 3 | 5 | import cn.iocoder.dashboard.modules.system.service.sms.SysSmsTemplateService; |
| 4 | 6 | import org.springframework.stereotype.Service; |
| 5 | 7 | |
| 8 | +import javax.annotation.Resource; | |
| 9 | + | |
| 6 | 10 | /** |
| 7 | 11 | * 短信模板Service实现类 |
| 8 | 12 | * |
| ... | ... | @@ -11,4 +15,13 @@ import org.springframework.stereotype.Service; |
| 11 | 15 | */ |
| 12 | 16 | @Service |
| 13 | 17 | public class SysSmsTemplateServiceImpl implements SysSmsTemplateService { |
| 18 | + | |
| 19 | + @Resource | |
| 20 | + private SysSmsTemplateMapper smsTemplateMapper; | |
| 21 | + | |
| 22 | + @Override | |
| 23 | + public SysSmsTemplateDO getSmsTemplateByCode(String code) { | |
| 24 | + return smsTemplateMapper.selectOneByCode(code); | |
| 25 | + } | |
| 26 | + | |
| 14 | 27 | } | ... | ... |
src/test/java/cn/iocoder/dashboard/modules/system/service/dept/SysDeptServiceTest.java
| ... | ... | @@ -8,7 +8,7 @@ import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptUpdate |
| 8 | 8 | import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysDeptDO; |
| 9 | 9 | import cn.iocoder.dashboard.modules.system.dal.mysql.dept.SysDeptMapper; |
| 10 | 10 | import cn.iocoder.dashboard.modules.system.enums.dept.DeptIdEnum; |
| 11 | -import cn.iocoder.dashboard.modules.system.redis.mq.producer.dept.SysDeptProducer; | |
| 11 | +import cn.iocoder.dashboard.modules.system.mq.producer.dept.SysDeptProducer; | |
| 12 | 12 | import cn.iocoder.dashboard.modules.system.service.dept.impl.SysDeptServiceImpl; |
| 13 | 13 | import cn.iocoder.dashboard.util.collection.ArrayUtils; |
| 14 | 14 | import cn.iocoder.dashboard.util.object.ObjectUtils; | ... | ... |
src/test/java/cn/iocoder/dashboard/modules/system/service/dict/SysDictDataServiceTest.java
| ... | ... | @@ -10,7 +10,7 @@ import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataUp |
| 10 | 10 | import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictDataDO; |
| 11 | 11 | import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictTypeDO; |
| 12 | 12 | import cn.iocoder.dashboard.modules.system.dal.mysql.dict.SysDictDataMapper; |
| 13 | -import cn.iocoder.dashboard.modules.system.redis.mq.producer.dict.SysDictDataProducer; | |
| 13 | +import cn.iocoder.dashboard.modules.system.mq.producer.dict.SysDictDataProducer; | |
| 14 | 14 | import cn.iocoder.dashboard.modules.system.service.dict.impl.SysDictDataServiceImpl; |
| 15 | 15 | import cn.iocoder.dashboard.util.collection.ArrayUtils; |
| 16 | 16 | import cn.iocoder.dashboard.util.object.ObjectUtils; | ... | ... |