Commit 3acdec965d0b7ba9aa386f190faaf2f6c960039c

Authored by YunaiV
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,7 +102,7 @@ public class SmsClientFactory {
102 public String getTemplateApiIdByCode(String templateCode) { 102 public String getTemplateApiIdByCode(String templateCode) {
103 SmsTemplateProperty smsTemplateProperty = templatePropertyMap.get(templateCode); 103 SmsTemplateProperty smsTemplateProperty = templatePropertyMap.get(templateCode);
104 if (smsTemplateProperty == null) { 104 if (smsTemplateProperty == null) {
105 - throw new ServiceException(SMS_TEMPLATE_NOT_FOUND); 105 + throw new ServiceException(SMS_TEMPLATE_NOT_EXISTS);
106 } 106 }
107 return smsTemplateProperty.getApiTemplateId(); 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,7 +5,7 @@ import cn.iocoder.dashboard.common.pojo.PageResult;
5 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelCreateReqVO; 5 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelCreateReqVO;
6 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelPageReqVO; 6 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelPageReqVO;
7 import cn.iocoder.dashboard.modules.system.controller.sms.vo.resp.SmsChannelEnumRespVO; 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 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsChannelService; 9 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsChannelService;
10 import io.swagger.annotations.Api; 10 import io.swagger.annotations.Api;
11 import io.swagger.annotations.ApiOperation; 11 import io.swagger.annotations.ApiOperation;
src/main/java/cn/iocoder/dashboard/modules/system/controller/sms/SmsDefaultCallbackController.java
1 package cn.iocoder.dashboard.modules.system.controller.sms; 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 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsService; 3 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsService;
6 import io.swagger.annotations.Api; 4 import io.swagger.annotations.Api;
7 import io.swagger.annotations.ApiOperation; 5 import io.swagger.annotations.ApiOperation;
8 -import org.springframework.web.bind.annotation.GetMapping;  
9 import org.springframework.web.bind.annotation.PostMapping; 6 import org.springframework.web.bind.annotation.PostMapping;
10 import org.springframework.web.bind.annotation.RequestMapping; 7 import org.springframework.web.bind.annotation.RequestMapping;
11 import org.springframework.web.bind.annotation.RestController; 8 import org.springframework.web.bind.annotation.RestController;
12 9
13 import javax.annotation.Resource; 10 import javax.annotation.Resource;
14 import javax.servlet.ServletRequest; 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 +7,7 @@ import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsChannelAllVO;
7 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelCreateReqVO; 7 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelCreateReqVO;
8 import cn.iocoder.dashboard.modules.system.controller.sms.vo.resp.SmsChannelEnumRespVO; 8 import cn.iocoder.dashboard.modules.system.controller.sms.vo.resp.SmsChannelEnumRespVO;
9 import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserUpdateReqVO; 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 import com.baomidou.mybatisplus.core.metadata.IPage; 11 import com.baomidou.mybatisplus.core.metadata.IPage;
12 import org.mapstruct.Mapper; 12 import org.mapstruct.Mapper;
13 import org.mapstruct.Mapping; 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,8 +3,8 @@ package cn.iocoder.dashboard.modules.system.convert.sms;
3 import cn.iocoder.dashboard.common.pojo.PageResult; 3 import cn.iocoder.dashboard.common.pojo.PageResult;
4 import cn.iocoder.dashboard.framework.sms.core.property.SmsTemplateProperty; 4 import cn.iocoder.dashboard.framework.sms.core.property.SmsTemplateProperty;
5 import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsTemplateVO; 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 import com.baomidou.mybatisplus.core.metadata.IPage; 8 import com.baomidou.mybatisplus.core.metadata.IPage;
9 import org.mapstruct.Mapper; 9 import org.mapstruct.Mapper;
10 import org.mapstruct.Mapping; 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
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.framework.mybatis.core.dataobject.BaseDO; 3 import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
4 import com.baomidou.mybatisplus.annotation.TableName; 4 import com.baomidou.mybatisplus.annotation.TableName;
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
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 com.baomidou.mybatisplus.annotation.TableName; 3 import com.baomidou.mybatisplus.annotation.TableName;
4 import lombok.Data; 4 import lombok.Data;
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
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.modules.system.enums.sms.SmsSendStatusEnum; 3 import cn.iocoder.dashboard.modules.system.enums.sms.SmsSendStatusEnum;
4 import com.baomidou.mybatisplus.annotation.TableName; 4 import com.baomidou.mybatisplus.annotation.TableName;
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 import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; 4 import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
  5 +import com.baomidou.mybatisplus.annotation.TableField;
4 import com.baomidou.mybatisplus.annotation.TableName; 6 import com.baomidou.mybatisplus.annotation.TableName;
  7 +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
5 import lombok.Data; 8 import lombok.Data;
6 import lombok.EqualsAndHashCode; 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,7 +47,7 @@ public class SysSmsTemplateDO extends BaseDO {
44 private String bizCode; 47 private String bizCode;
45 48
46 /** 49 /**
47 - * 编码 50 + * 模板编码
48 */ 51 */
49 private String code; 52 private String code;
50 53
@@ -66,7 +69,8 @@ public class SysSmsTemplateDO extends BaseDO { @@ -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,7 +78,9 @@ public class SysSmsTemplateDO extends BaseDO {
74 private String remark; 78 private String remark;
75 79
76 /** 80 /**
77 - * 启用状态(0正常 1停用) 81 + * 启用状态
  82 + *
  83 + * 枚举 {@link CommonStatusEnum}
78 */ 84 */
79 private Integer status; 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 import cn.hutool.core.util.StrUtil; 3 import cn.hutool.core.util.StrUtil;
4 import cn.iocoder.dashboard.common.enums.CommonStatusEnum; 4 import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
5 import cn.iocoder.dashboard.framework.mybatis.core.util.MyBatisUtils; 5 import cn.iocoder.dashboard.framework.mybatis.core.util.MyBatisUtils;
6 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelPageReqVO; 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 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 8 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
9 import com.baomidou.mybatisplus.core.mapper.BaseMapper; 9 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
10 import com.baomidou.mybatisplus.core.metadata.IPage; 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 import cn.iocoder.dashboard.common.enums.DefaultBitFieldEnum; 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 import cn.iocoder.dashboard.modules.system.enums.sms.SmsSendStatusEnum; 5 import cn.iocoder.dashboard.modules.system.enums.sms.SmsSendStatusEnum;
6 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 6 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
7 import com.baomidou.mybatisplus.core.mapper.BaseMapper; 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 import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 import org.apache.ibatis.annotations.Mapper; 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 import cn.iocoder.dashboard.common.enums.CommonStatusEnum; 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 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 5 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
6 -import com.baomidou.mybatisplus.core.mapper.BaseMapper;  
7 import org.apache.ibatis.annotations.Mapper; 6 import org.apache.ibatis.annotations.Mapper;
8 7
9 import java.util.List; 8 import java.util.List;
10 9
11 @Mapper 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 * 根据短信渠道id查询短信模板集合 18 * 根据短信渠道id查询短信模板集合
src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java
@@ -79,11 +79,15 @@ public interface SysErrorCodeConstants { @@ -79,11 +79,15 @@ public interface SysErrorCodeConstants {
79 ErrorCode FILE_IS_EMPTY= new ErrorCode(1002009003, "文件为空"); 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 ErrorCode SMS_CHANNEL_NOT_INIT = new ErrorCode(1003001001, 88 ErrorCode SMS_CHANNEL_NOT_INIT = new ErrorCode(1003001001,
84 "短信渠道没有初始化, 请调用SmsClientWrapper#initSmsClient()或SmsClientWrapper#addSmsClient"); 89 "短信渠道没有初始化, 请调用SmsClientWrapper#initSmsClient()或SmsClientWrapper#addSmsClient");
85 ErrorCode SMS_CHANNEL_NOT_FOUND = new ErrorCode(1003001002, "没有短信渠道信息, 请初始化sms_channel表数据。"); 90 ErrorCode SMS_CHANNEL_NOT_FOUND = new ErrorCode(1003001002, "没有短信渠道信息, 请初始化sms_channel表数据。");
86 - ErrorCode SMS_TEMPLATE_NOT_FOUND = new ErrorCode(1003001003, "没有短信模板信息, 请初始化sms_template表数据。");  
87 ErrorCode SMS_SENDER_NOT_FOUND = new ErrorCode(1003001004, "没有找到对应的短信发送对象,请检查sms_channel表和sms_template表数据"); 91 ErrorCode SMS_SENDER_NOT_FOUND = new ErrorCode(1003001004, "没有找到对应的短信发送对象,请检查sms_channel表和sms_template表数据");
88 ErrorCode INVALID_CHANNEL_CODE = new ErrorCode(1003001005, "非法的短信渠道code,请检查sms_channel表的code值是否与SmsChannelEnum中的code值一致。"); 92 ErrorCode INVALID_CHANNEL_CODE = new ErrorCode(1003001005, "非法的短信渠道code,请检查sms_channel表的code值是否与SmsChannelEnum中的code值一致。");
89 ErrorCode PARAM_VALUE_IS_NULL = new ErrorCode(1003001006, "参数【{}】不能为空"); 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 import cn.iocoder.dashboard.framework.redis.core.pubsub.AbstractChannelMessageListener; 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 import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService; 5 import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService;
6 import lombok.extern.slf4j.Slf4j; 6 import lombok.extern.slf4j.Slf4j;
7 import org.springframework.stereotype.Component; 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 import cn.iocoder.dashboard.framework.redis.core.pubsub.AbstractChannelMessageListener; 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 import cn.iocoder.dashboard.modules.system.service.dict.SysDictDataService; 5 import cn.iocoder.dashboard.modules.system.service.dict.SysDictDataService;
6 import lombok.extern.slf4j.Slf4j; 6 import lombok.extern.slf4j.Slf4j;
7 import org.springframework.stereotype.Component; 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 import cn.iocoder.dashboard.framework.redis.core.pubsub.AbstractChannelMessageListener; 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 import cn.iocoder.dashboard.modules.system.service.permission.SysMenuService; 5 import cn.iocoder.dashboard.modules.system.service.permission.SysMenuService;
6 import lombok.extern.slf4j.Slf4j; 6 import lombok.extern.slf4j.Slf4j;
7 import org.springframework.stereotype.Component; 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 import cn.iocoder.dashboard.framework.redis.core.pubsub.AbstractChannelMessageListener; 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 import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; 5 import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService;
6 import lombok.extern.slf4j.Slf4j; 6 import lombok.extern.slf4j.Slf4j;
7 import org.springframework.stereotype.Component; 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 import cn.iocoder.dashboard.framework.redis.core.pubsub.AbstractChannelMessageListener; 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 import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService; 5 import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService;
6 import lombok.extern.slf4j.Slf4j; 6 import lombok.extern.slf4j.Slf4j;
7 import org.springframework.stereotype.Component; 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
1 -package cn.iocoder.dashboard.modules.system.redis.stream.sms; 1 +package cn.iocoder.dashboard.modules.system.mq.consumer.sms;
2 2
3 import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient; 3 import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient;
4 import cn.iocoder.dashboard.framework.sms.core.SmsBody; 4 import cn.iocoder.dashboard.framework.sms.core.SmsBody;
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
1 -package cn.iocoder.dashboard.modules.system.redis.mq.message.dept; 1 +package cn.iocoder.dashboard.modules.system.mq.message.dept;
2 2
3 import cn.iocoder.dashboard.framework.redis.core.pubsub.ChannelMessage; 3 import cn.iocoder.dashboard.framework.redis.core.pubsub.ChannelMessage;
4 import lombok.Data; 4 import lombok.Data;
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
1 -package cn.iocoder.dashboard.modules.system.redis.mq.message.dict; 1 +package cn.iocoder.dashboard.modules.system.mq.message.dict;
2 2
3 import cn.iocoder.dashboard.framework.redis.core.pubsub.ChannelMessage; 3 import cn.iocoder.dashboard.framework.redis.core.pubsub.ChannelMessage;
4 import lombok.Data; 4 import lombok.Data;
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
1 -package cn.iocoder.dashboard.modules.system.redis.mq.message.permission; 1 +package cn.iocoder.dashboard.modules.system.mq.message.permission;
2 2
3 import cn.iocoder.dashboard.framework.redis.core.pubsub.ChannelMessage; 3 import cn.iocoder.dashboard.framework.redis.core.pubsub.ChannelMessage;
4 import lombok.Data; 4 import lombok.Data;
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
1 -package cn.iocoder.dashboard.modules.system.redis.mq.message.permission; 1 +package cn.iocoder.dashboard.modules.system.mq.message.permission;
2 2
3 import cn.iocoder.dashboard.framework.redis.core.pubsub.ChannelMessage; 3 import cn.iocoder.dashboard.framework.redis.core.pubsub.ChannelMessage;
4 import lombok.Data; 4 import lombok.Data;
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
1 -package cn.iocoder.dashboard.modules.system.redis.mq.message.permission; 1 +package cn.iocoder.dashboard.modules.system.mq.message.permission;
2 2
3 import cn.iocoder.dashboard.framework.redis.core.pubsub.ChannelMessage; 3 import cn.iocoder.dashboard.framework.redis.core.pubsub.ChannelMessage;
4 import lombok.Data; 4 import lombok.Data;
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 import cn.iocoder.dashboard.framework.redis.core.util.RedisMessageUtils; 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 import org.springframework.data.redis.core.StringRedisTemplate; 5 import org.springframework.data.redis.core.StringRedisTemplate;
6 import org.springframework.stereotype.Component; 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 import cn.iocoder.dashboard.framework.redis.core.util.RedisMessageUtils; 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 import org.springframework.data.redis.core.StringRedisTemplate; 5 import org.springframework.data.redis.core.StringRedisTemplate;
6 import org.springframework.stereotype.Component; 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 import cn.iocoder.dashboard.framework.redis.core.util.RedisMessageUtils; 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 import org.springframework.data.redis.core.StringRedisTemplate; 5 import org.springframework.data.redis.core.StringRedisTemplate;
6 import org.springframework.stereotype.Component; 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 import cn.iocoder.dashboard.framework.redis.core.util.RedisMessageUtils; 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 import org.springframework.data.redis.core.StringRedisTemplate; 5 import org.springframework.data.redis.core.StringRedisTemplate;
6 import org.springframework.stereotype.Component; 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 import cn.iocoder.dashboard.framework.redis.core.util.RedisMessageUtils; 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 import org.springframework.data.redis.core.StringRedisTemplate; 5 import org.springframework.data.redis.core.StringRedisTemplate;
6 import org.springframework.stereotype.Component; 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 import lombok.extern.slf4j.Slf4j; 5 import lombok.extern.slf4j.Slf4j;
6 import org.springframework.data.redis.core.StringRedisTemplate; 6 import org.springframework.data.redis.core.StringRedisTemplate;
7 import org.springframework.stereotype.Component; 7 import org.springframework.stereotype.Component;
8 8
9 import javax.annotation.Resource; 9 import javax.annotation.Resource;
  10 +import java.util.Map;
10 11
11 /** 12 /**
12 * 短信发送流消息监听器 13 * 短信发送流消息监听器
@@ -22,14 +23,20 @@ public class SmsSendStreamProducer { @@ -22,14 +23,20 @@ public class SmsSendStreamProducer {
22 private StringRedisTemplate stringRedisTemplate; 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 \ No newline at end of file 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 \ No newline at end of file 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,7 +11,7 @@ import cn.iocoder.dashboard.modules.system.convert.dept.SysDeptConvert;
11 import cn.iocoder.dashboard.modules.system.dal.mysql.dept.SysDeptMapper; 11 import cn.iocoder.dashboard.modules.system.dal.mysql.dept.SysDeptMapper;
12 import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysDeptDO; 12 import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysDeptDO;
13 import cn.iocoder.dashboard.modules.system.enums.dept.DeptIdEnum; 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 import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService; 15 import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService;
16 import com.google.common.collect.ImmutableMap; 16 import com.google.common.collect.ImmutableMap;
17 import com.google.common.collect.ImmutableMultimap; 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,7 +12,7 @@ import cn.iocoder.dashboard.modules.system.convert.dict.SysDictDataConvert;
12 import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictDataDO; 12 import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictDataDO;
13 import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictTypeDO; 13 import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictTypeDO;
14 import cn.iocoder.dashboard.modules.system.dal.mysql.dict.SysDictDataMapper; 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 import cn.iocoder.dashboard.modules.system.service.dict.SysDictDataService; 16 import cn.iocoder.dashboard.modules.system.service.dict.SysDictDataService;
17 import cn.iocoder.dashboard.modules.system.service.dict.SysDictTypeService; 17 import cn.iocoder.dashboard.modules.system.service.dict.SysDictTypeService;
18 import com.google.common.annotations.VisibleForTesting; 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,7 +11,7 @@ import cn.iocoder.dashboard.modules.system.dal.mysql.permission.SysMenuMapper;
11 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysMenuDO; 11 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysMenuDO;
12 import cn.iocoder.dashboard.modules.system.enums.permission.MenuIdEnum; 12 import cn.iocoder.dashboard.modules.system.enums.permission.MenuIdEnum;
13 import cn.iocoder.dashboard.modules.system.enums.permission.MenuTypeEnum; 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 import cn.iocoder.dashboard.modules.system.service.permission.SysMenuService; 15 import cn.iocoder.dashboard.modules.system.service.permission.SysMenuService;
16 import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; 16 import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService;
17 import cn.iocoder.dashboard.util.collection.CollectionUtils; 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,7 +3,6 @@ package cn.iocoder.dashboard.modules.system.service.permission.impl;
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.collection.CollectionUtil; 4 import cn.hutool.core.collection.CollectionUtil;
5 import cn.hutool.core.util.ArrayUtil; 5 import cn.hutool.core.util.ArrayUtil;
6 -import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;  
7 import cn.iocoder.dashboard.framework.security.core.util.SecurityFrameworkUtils; 6 import cn.iocoder.dashboard.framework.security.core.util.SecurityFrameworkUtils;
8 import cn.iocoder.dashboard.modules.system.dal.mysql.permission.SysRoleMenuMapper; 7 import cn.iocoder.dashboard.modules.system.dal.mysql.permission.SysRoleMenuMapper;
9 import cn.iocoder.dashboard.modules.system.dal.mysql.permission.SysUserRoleMapper; 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,7 +10,7 @@ import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysMenuDO;
11 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleDO; 10 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleDO;
12 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleMenuDO; 11 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleMenuDO;
13 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysUserRoleDO; 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 import cn.iocoder.dashboard.modules.system.service.permission.SysMenuService; 14 import cn.iocoder.dashboard.modules.system.service.permission.SysMenuService;
16 import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; 15 import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService;
17 import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService; 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,7 +15,7 @@ import cn.iocoder.dashboard.modules.system.dal.mysql.permission.SysRoleMapper;
15 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleDO; 15 import cn.iocoder.dashboard.modules.system.dal.dataobject.permission.SysRoleDO;
16 import cn.iocoder.dashboard.modules.system.enums.permission.RoleCodeEnum; 16 import cn.iocoder.dashboard.modules.system.enums.permission.RoleCodeEnum;
17 import cn.iocoder.dashboard.modules.system.enums.permission.SysRoleTypeEnum; 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 import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService; 19 import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService;
20 import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService; 20 import cn.iocoder.dashboard.modules.system.service.permission.SysRoleService;
21 import com.google.common.collect.ImmutableMap; 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,14 +2,12 @@ package cn.iocoder.dashboard.modules.system.service.sms;
2 2
3 import cn.iocoder.dashboard.common.pojo.PageResult; 3 import cn.iocoder.dashboard.common.pojo.PageResult;
4 import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient; 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.controller.sms.vo.SmsChannelAllVO; 5 import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsChannelAllVO;
7 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelCreateReqVO; 6 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelCreateReqVO;
8 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelPageReqVO; 7 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelPageReqVO;
9 import cn.iocoder.dashboard.modules.system.controller.sms.vo.resp.SmsChannelEnumRespVO; 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 import java.util.List; 11 import java.util.List;
14 12
15 /** 13 /**
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SysSmsService.java
1 package cn.iocoder.dashboard.modules.system.service.sms; 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 import javax.servlet.ServletRequest; 3 import javax.servlet.ServletRequest;
9 -import java.util.Arrays;  
10 import java.util.List; 4 import java.util.List;
  5 +import java.util.Map;
11 6
12 /** 7 /**
13 * 短信Service接口 8 * 短信Service接口
@@ -18,39 +13,11 @@ import java.util.List; @@ -18,39 +13,11 @@ import java.util.List;
18 */ 13 */
19 public interface SysSmsService { 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 package cn.iocoder.dashboard.modules.system.service.sms; 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 * @author zzf 8 * @author zzf
7 * @date 2021/1/25 9:24 9 * @date 2021/1/25 9:24
8 */ 10 */
9 public interface SysSmsTemplateService { 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,7 +8,6 @@ import cn.iocoder.dashboard.framework.sms.core.enums.SmsChannelEnum;
8 import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty; 8 import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty;
9 import cn.iocoder.dashboard.framework.sms.core.property.SmsTemplateProperty; 9 import cn.iocoder.dashboard.framework.sms.core.property.SmsTemplateProperty;
10 import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsChannelAllVO; 10 import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsChannelAllVO;
11 -import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsTemplateVO;  
12 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelCreateReqVO; 11 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelCreateReqVO;
13 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelPageReqVO; 12 import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelPageReqVO;
14 import cn.iocoder.dashboard.modules.system.controller.sms.vo.resp.SmsChannelEnumRespVO; 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,10 +15,9 @@ import cn.iocoder.dashboard.modules.system.convert.sms.SmsChannelConvert;
16 import cn.iocoder.dashboard.modules.system.convert.sms.SmsTemplateConvert; 15 import cn.iocoder.dashboard.modules.system.convert.sms.SmsTemplateConvert;
17 import cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms.SysSmsChannelMapper; 16 import cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms.SysSmsChannelMapper;
18 import cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms.SysSmsTemplateMapper; 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 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsChannelService; 20 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsChannelService;
22 -import org.springframework.beans.factory.annotation.Autowired;  
23 import org.springframework.stereotype.Service; 21 import org.springframework.stereotype.Service;
24 22
25 import javax.annotation.PostConstruct; 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,7 +6,7 @@ import cn.iocoder.dashboard.framework.sms.core.SmsResult;
6 import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail; 6 import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail;
7 import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty; 7 import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty;
8 import cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms.SysSmsQueryLogMapper; 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 import cn.iocoder.dashboard.modules.system.enums.sms.SmsSendStatusEnum; 10 import cn.iocoder.dashboard.modules.system.enums.sms.SmsSendStatusEnum;
11 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsQueryLogService; 11 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsQueryLogService;
12 import org.springframework.stereotype.Service; 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,11 +2,10 @@ package cn.iocoder.dashboard.modules.system.service.sms.impl;
2 2
3 import cn.hutool.core.collection.CollectionUtil; 3 import cn.hutool.core.collection.CollectionUtil;
4 import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient; 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 import cn.iocoder.dashboard.modules.system.enums.sms.SmsSendStatusEnum; 9 import cn.iocoder.dashboard.modules.system.enums.sms.SmsSendStatusEnum;
11 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsChannelService; 10 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsChannelService;
12 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsSendLogService; 11 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsSendLogService;
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SysSmsServiceImpl.java
1 package cn.iocoder.dashboard.modules.system.service.sms.impl; 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 import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient; 5 import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient;
4 import cn.iocoder.dashboard.framework.sms.core.SmsBody; 6 import cn.iocoder.dashboard.framework.sms.core.SmsBody;
5 import cn.iocoder.dashboard.framework.sms.core.SmsClientFactory; 7 import cn.iocoder.dashboard.framework.sms.core.SmsClientFactory;
6 import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail; 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 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsChannelService; 12 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsChannelService;
9 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsQueryLogService; 13 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsQueryLogService;
10 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsService; 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 import org.springframework.stereotype.Service; 17 import org.springframework.stereotype.Service;
12 18
13 import javax.annotation.Resource; 19 import javax.annotation.Resource;
14 import javax.servlet.ServletRequest; 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 * 短信日志Service实现类 29 * 短信日志Service实现类
@@ -23,8 +35,14 @@ import javax.servlet.ServletRequest; @@ -23,8 +35,14 @@ import javax.servlet.ServletRequest;
23 public class SysSmsServiceImpl implements SysSmsService { 35 public class SysSmsServiceImpl implements SysSmsService {
24 36
25 @Resource 37 @Resource
  38 + private SysSmsTemplateService smsTemplateService;
  39 + @Resource
  40 + private SysUserService userService;
  41 +
  42 + @Resource
26 private SysSmsChannelService channelService; 43 private SysSmsChannelService channelService;
27 44
  45 +
28 @Resource 46 @Resource
29 private SysSmsQueryLogService logService; 47 private SysSmsQueryLogService logService;
30 48
@@ -35,6 +53,54 @@ public class SysSmsServiceImpl implements SysSmsService { @@ -35,6 +53,54 @@ public class SysSmsServiceImpl implements SysSmsService {
35 private SmsClientFactory smsClientFactory; 53 private SmsClientFactory smsClientFactory;
36 54
37 @Override 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 public void send(SmsBody smsBody, String targetPhone) { 104 public void send(SmsBody smsBody, String targetPhone) {
39 AbstractSmsClient client = channelService.getSmsClient(smsBody.getTemplateCode()); 105 AbstractSmsClient client = channelService.getSmsClient(smsBody.getTemplateCode());
40 logService.beforeSendLog(smsBody, targetPhone, client); 106 logService.beforeSendLog(smsBody, targetPhone, client);
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SysSmsTemplateServiceImpl.java
1 package cn.iocoder.dashboard.modules.system.service.sms.impl; 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 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsTemplateService; 5 import cn.iocoder.dashboard.modules.system.service.sms.SysSmsTemplateService;
4 import org.springframework.stereotype.Service; 6 import org.springframework.stereotype.Service;
5 7
  8 +import javax.annotation.Resource;
  9 +
6 /** 10 /**
7 * 短信模板Service实现类 11 * 短信模板Service实现类
8 * 12 *
@@ -11,4 +15,13 @@ import org.springframework.stereotype.Service; @@ -11,4 +15,13 @@ import org.springframework.stereotype.Service;
11 */ 15 */
12 @Service 16 @Service
13 public class SysSmsTemplateServiceImpl implements SysSmsTemplateService { 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,7 +8,7 @@ import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptUpdate
8 import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysDeptDO; 8 import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysDeptDO;
9 import cn.iocoder.dashboard.modules.system.dal.mysql.dept.SysDeptMapper; 9 import cn.iocoder.dashboard.modules.system.dal.mysql.dept.SysDeptMapper;
10 import cn.iocoder.dashboard.modules.system.enums.dept.DeptIdEnum; 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 import cn.iocoder.dashboard.modules.system.service.dept.impl.SysDeptServiceImpl; 12 import cn.iocoder.dashboard.modules.system.service.dept.impl.SysDeptServiceImpl;
13 import cn.iocoder.dashboard.util.collection.ArrayUtils; 13 import cn.iocoder.dashboard.util.collection.ArrayUtils;
14 import cn.iocoder.dashboard.util.object.ObjectUtils; 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,7 +10,7 @@ import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataUp
10 import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictDataDO; 10 import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictDataDO;
11 import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictTypeDO; 11 import cn.iocoder.dashboard.modules.system.dal.dataobject.dict.SysDictTypeDO;
12 import cn.iocoder.dashboard.modules.system.dal.mysql.dict.SysDictDataMapper; 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 import cn.iocoder.dashboard.modules.system.service.dict.impl.SysDictDataServiceImpl; 14 import cn.iocoder.dashboard.modules.system.service.dict.impl.SysDictDataServiceImpl;
15 import cn.iocoder.dashboard.util.collection.ArrayUtils; 15 import cn.iocoder.dashboard.util.collection.ArrayUtils;
16 import cn.iocoder.dashboard.util.object.ObjectUtils; 16 import cn.iocoder.dashboard.util.object.ObjectUtils;