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 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
1   -package cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms;
  1 +package cn.iocoder.dashboard.modules.system.dal.dataobject.sms;
2 2  
3 3 import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
4 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 3 import com.baomidou.mybatisplus.annotation.TableName;
4 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 3 import cn.iocoder.dashboard.modules.system.enums.sms.SmsSendStatusEnum;
4 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 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
1   -package cn.iocoder.dashboard.modules.system.redis.stream.sms;
  1 +package cn.iocoder.dashboard.modules.system.mq.consumer.sms;
2 2  
3 3 import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient;
4 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 3 import cn.iocoder.dashboard.framework.redis.core.pubsub.ChannelMessage;
4 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 3 import cn.iocoder.dashboard.framework.redis.core.pubsub.ChannelMessage;
4 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 3 import cn.iocoder.dashboard.framework.redis.core.pubsub.ChannelMessage;
4 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 3 import cn.iocoder.dashboard.framework.redis.core.pubsub.ChannelMessage;
4 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 3 import cn.iocoder.dashboard.framework.redis.core.pubsub.ChannelMessage;
4 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 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;
... ...