Commit b4be8e987a3dfbee6a830ff90733de7cf6d29f6c
1 parent
a50db6bf
临时提交
Showing
27 changed files
with
353 additions
and
198 deletions
src/main/java/cn/iocoder/dashboard/framework/sms/client/AbstractSmsClient.java
| 1 | package cn.iocoder.dashboard.framework.sms.client; | 1 | package cn.iocoder.dashboard.framework.sms.client; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.dashboard.framework.sms.core.SmsBody; | ||
| 4 | +import cn.iocoder.dashboard.framework.sms.core.SmsResult; | ||
| 3 | import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty; | 5 | import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty; |
| 6 | +import lombok.extern.slf4j.Slf4j; | ||
| 7 | + | ||
| 8 | +import java.util.Collection; | ||
| 4 | 9 | ||
| 5 | /** | 10 | /** |
| 6 | * 抽象短息客户端 | 11 | * 抽象短息客户端 |
| @@ -8,7 +13,8 @@ import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty; | @@ -8,7 +13,8 @@ import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty; | ||
| 8 | * @author zzf | 13 | * @author zzf |
| 9 | * @date 2021/2/1 9:28 | 14 | * @date 2021/2/1 9:28 |
| 10 | */ | 15 | */ |
| 11 | -public abstract class AbstractSmsClient<R> implements SmsClient<R> { | 16 | +@Slf4j |
| 17 | +public abstract class AbstractSmsClient implements SmsClient { | ||
| 12 | 18 | ||
| 13 | /** | 19 | /** |
| 14 | * 短信渠道参数 | 20 | * 短信渠道参数 |
| @@ -29,4 +35,43 @@ public abstract class AbstractSmsClient<R> implements SmsClient<R> { | @@ -29,4 +35,43 @@ public abstract class AbstractSmsClient<R> implements SmsClient<R> { | ||
| 29 | return channelVO; | 35 | return channelVO; |
| 30 | } | 36 | } |
| 31 | 37 | ||
| 38 | + @Override | ||
| 39 | + public SmsResult send(String templateApiId, SmsBody smsBody, Collection<String> targets) { | ||
| 40 | + SmsResult result; | ||
| 41 | + try { | ||
| 42 | + beforeSend(templateApiId, smsBody, targets); | ||
| 43 | + result = doSend(templateApiId, smsBody, targets); | ||
| 44 | + afterSend(templateApiId, smsBody, targets, result); | ||
| 45 | + } catch (Exception e) { | ||
| 46 | + // exception handle | ||
| 47 | + log.debug(e.getMessage(), e); | ||
| 48 | + return failResult("发送异常: " + e.getMessage()); | ||
| 49 | + } | ||
| 50 | + return result; | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + | ||
| 54 | + /** | ||
| 55 | + * 发送消息 | ||
| 56 | + * | ||
| 57 | + * @param templateApiId 短信模板唯一标识 | ||
| 58 | + * @param smsBody 消息内容 | ||
| 59 | + * @param targets 发送对象列表 | ||
| 60 | + * @return 短信发送结果 | ||
| 61 | + */ | ||
| 62 | + public abstract SmsResult doSend(String templateApiId, SmsBody smsBody, Collection<String> targets) throws Exception; | ||
| 63 | + | ||
| 64 | + protected void beforeSend(String templateApiId, SmsBody smsBody, Collection<String> targets) throws Exception { | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + protected void afterSend(String templateApiId, SmsBody smsBody, Collection<String> targets, SmsResult result) throws Exception { | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + | ||
| 71 | + SmsResult failResult(String message) { | ||
| 72 | + SmsResult resultBody = new SmsResult(); | ||
| 73 | + resultBody.setSuccess(false); | ||
| 74 | + resultBody.setMessage(message); | ||
| 75 | + return resultBody; | ||
| 76 | + } | ||
| 32 | } | 77 | } |
src/main/java/cn/iocoder/dashboard/framework/sms/client/AliyunSmsClient.java
| 1 | package cn.iocoder.dashboard.framework.sms.client; | 1 | package cn.iocoder.dashboard.framework.sms.client; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.date.DateUtil; | ||
| 3 | import cn.iocoder.dashboard.framework.sms.core.SmsBody; | 4 | import cn.iocoder.dashboard.framework.sms.core.SmsBody; |
| 4 | import cn.iocoder.dashboard.framework.sms.core.SmsResult; | 5 | import cn.iocoder.dashboard.framework.sms.core.SmsResult; |
| 6 | +import cn.iocoder.dashboard.framework.sms.core.SmsResultDetail; | ||
| 5 | import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty; | 7 | import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty; |
| 6 | import com.aliyuncs.DefaultAcsClient; | 8 | import com.aliyuncs.DefaultAcsClient; |
| 7 | import com.aliyuncs.IAcsClient; | 9 | import com.aliyuncs.IAcsClient; |
| 10 | +import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest; | ||
| 11 | +import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse; | ||
| 8 | import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; | 12 | import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; |
| 9 | import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; | 13 | import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; |
| 10 | import com.aliyuncs.http.MethodType; | 14 | import com.aliyuncs.http.MethodType; |
| @@ -13,7 +17,9 @@ import com.aliyuncs.profile.IClientProfile; | @@ -13,7 +17,9 @@ import com.aliyuncs.profile.IClientProfile; | ||
| 13 | import lombok.extern.slf4j.Slf4j; | 17 | import lombok.extern.slf4j.Slf4j; |
| 14 | import org.apache.commons.lang3.StringUtils; | 18 | import org.apache.commons.lang3.StringUtils; |
| 15 | 19 | ||
| 20 | +import java.util.ArrayList; | ||
| 16 | import java.util.Collection; | 21 | import java.util.Collection; |
| 22 | +import java.util.List; | ||
| 17 | 23 | ||
| 18 | /** | 24 | /** |
| 19 | * 阿里短信实现类 | 25 | * 阿里短信实现类 |
| @@ -22,7 +28,7 @@ import java.util.Collection; | @@ -22,7 +28,7 @@ import java.util.Collection; | ||
| 22 | * @date 2021/1/25 14:17 | 28 | * @date 2021/1/25 14:17 |
| 23 | */ | 29 | */ |
| 24 | @Slf4j | 30 | @Slf4j |
| 25 | -public class AliyunSmsClient extends AbstractSmsClient<SendSmsResponse> { | 31 | +public class AliyunSmsClient extends AbstractSmsClient { |
| 26 | 32 | ||
| 27 | private static final String OK = "OK"; | 33 | private static final String OK = "OK"; |
| 28 | 34 | ||
| @@ -53,35 +59,36 @@ public class AliyunSmsClient extends AbstractSmsClient<SendSmsResponse> { | @@ -53,35 +59,36 @@ public class AliyunSmsClient extends AbstractSmsClient<SendSmsResponse> { | ||
| 53 | 59 | ||
| 54 | 60 | ||
| 55 | @Override | 61 | @Override |
| 56 | - public SmsResult<SendSmsResponse> send(SmsBody smsBody, Collection<String> targets) { | 62 | + public SmsResult doSend(String templateApiId, SmsBody smsBody, Collection<String> targets) throws Exception { |
| 57 | SendSmsRequest request = new SendSmsRequest(); | 63 | SendSmsRequest request = new SendSmsRequest(); |
| 58 | request.setSysMethod(MethodType.POST); | 64 | request.setSysMethod(MethodType.POST); |
| 59 | request.setPhoneNumbers(StringUtils.join(targets, ",")); | 65 | request.setPhoneNumbers(StringUtils.join(targets, ",")); |
| 60 | request.setSignName(channelVO.getApiSignatureId()); | 66 | request.setSignName(channelVO.getApiSignatureId()); |
| 61 | - request.setTemplateCode(channelVO.getTemplateByTemplateCode(smsBody.getTemplateCode()).getApiTemplateId()); | 67 | + request.setTemplateCode(templateApiId); |
| 62 | request.setTemplateParam(smsBody.getParamsStr()); | 68 | request.setTemplateParam(smsBody.getParamsStr()); |
| 63 | - // TODO FROM 芋艿 TO zzf:try catch 咱是不是可以交给 abstract 来做。这样,异常处理,重试,限流等等,都可以酱紫 | ||
| 64 | - try { | ||
| 65 | - SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); | ||
| 66 | - | ||
| 67 | - boolean result = OK.equals(sendSmsResponse.getCode()); | ||
| 68 | - if (!result) { | ||
| 69 | - log.debug("send fail[code={}, message={}]", sendSmsResponse.getCode(), sendSmsResponse.getMessage()); | ||
| 70 | - } | ||
| 71 | - SmsResult<SendSmsResponse> resultBody = new SmsResult<>(); | ||
| 72 | - resultBody.setSuccess(result); | ||
| 73 | - resultBody.setResult(sendSmsResponse); | ||
| 74 | - return resultBody; | ||
| 75 | - } catch (Exception e) { | ||
| 76 | - log.debug(e.getMessage(), e); | ||
| 77 | - return failResult("发送异常: " + e.getMessage()); | ||
| 78 | - } | ||
| 79 | - } | 69 | + // TODO FROM 芋艿 TO zzf:try catch 咱是不是可以交给 abstract 来做。这样,异常处理,重试,限流等等,都可以酱紫 DONE |
| 70 | + SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); | ||
| 80 | 71 | ||
| 81 | - SmsResult<SendSmsResponse> failResult(String message) { | ||
| 82 | - SmsResult<SendSmsResponse> resultBody = new SmsResult<>(); | ||
| 83 | - resultBody.setSuccess(false); | ||
| 84 | - resultBody.setMessage(message); | 72 | + boolean result = OK.equals(sendSmsResponse.getCode()); |
| 73 | + if (!result) { | ||
| 74 | + log.debug("send fail[code={}, message={}]", sendSmsResponse.getCode(), sendSmsResponse.getMessage()); | ||
| 75 | + } | ||
| 76 | + SmsResult resultBody = new SmsResult(); | ||
| 77 | + resultBody.setSuccess(result); | ||
| 78 | + QuerySendDetailsRequest querySendDetailsRequest = new QuerySendDetailsRequest(); | ||
| 79 | + querySendDetailsRequest.setBizId(sendSmsResponse.getBizId()); | ||
| 80 | + | ||
| 81 | + QuerySendDetailsResponse acsResponse = acsClient.getAcsResponse(querySendDetailsRequest); | ||
| 82 | + List<SmsResultDetail> resultDetailList = new ArrayList<>(Integer.parseInt(acsResponse.getTotalCount())); | ||
| 83 | + acsResponse.getSmsSendDetailDTOs().forEach(s -> { | ||
| 84 | + SmsResultDetail resultDetail = new SmsResultDetail(); | ||
| 85 | + resultDetail.setCreateTime(DateUtil.parseDateTime(s.getSendDate())); | ||
| 86 | + resultDetail.setMessage(s.getContent()); | ||
| 87 | + resultDetail.setPhone(s.getPhoneNum()); | ||
| 88 | + resultDetail.setStatus(Math.toIntExact(s.getSendStatus())); | ||
| 89 | + resultDetailList.add(resultDetail); | ||
| 90 | + }); | ||
| 91 | + resultBody.setResult(resultDetailList); | ||
| 85 | return resultBody; | 92 | return resultBody; |
| 86 | } | 93 | } |
| 87 | 94 |
src/main/java/cn/iocoder/dashboard/framework/sms/client/SmsClient.java
| @@ -11,15 +11,16 @@ import java.util.Collection; | @@ -11,15 +11,16 @@ import java.util.Collection; | ||
| 11 | * @author zzf | 11 | * @author zzf |
| 12 | * @date 2021/1/25 14:14 | 12 | * @date 2021/1/25 14:14 |
| 13 | */ | 13 | */ |
| 14 | -public interface SmsClient<R> { | 14 | +public interface SmsClient { |
| 15 | 15 | ||
| 16 | /** | 16 | /** |
| 17 | * 发送消息 | 17 | * 发送消息 |
| 18 | * | 18 | * |
| 19 | - * @param smsBody 消息内容 | ||
| 20 | - * @param targets 发送对象列表 | ||
| 21 | - * @return 是否发送成功 | 19 | + * @param templateApiId 短信模板唯一标识 |
| 20 | + * @param smsBody 消息内容 | ||
| 21 | + * @param targets 发送对象列表 | ||
| 22 | + * @return 短信发送结果 | ||
| 22 | */ | 23 | */ |
| 23 | - SmsResult<R> send(SmsBody smsBody, Collection<String> targets); | 24 | + SmsResult send(String templateApiId, SmsBody smsBody, Collection<String> targets); |
| 24 | 25 | ||
| 25 | } | 26 | } |
| 26 | \ No newline at end of file | 27 | \ No newline at end of file |
src/main/java/cn/iocoder/dashboard/framework/sms/core/SmsClientFactory.java
| 1 | package cn.iocoder.dashboard.framework.sms.core; | 1 | package cn.iocoder.dashboard.framework.sms.core; |
| 2 | 2 | ||
| 3 | -import cn.hutool.core.util.ObjectUtil; | ||
| 4 | -import cn.hutool.core.util.StrUtil; | ||
| 5 | -import cn.iocoder.dashboard.common.enums.SmsChannelEnum; | ||
| 6 | import cn.iocoder.dashboard.common.exception.ServiceException; | 3 | import cn.iocoder.dashboard.common.exception.ServiceException; |
| 7 | -import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; | ||
| 8 | import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient; | 4 | import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient; |
| 9 | import cn.iocoder.dashboard.framework.sms.client.AliyunSmsClient; | 5 | import cn.iocoder.dashboard.framework.sms.client.AliyunSmsClient; |
| 6 | +import cn.iocoder.dashboard.framework.sms.core.enums.SmsChannelEnum; | ||
| 10 | import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty; | 7 | import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty; |
| 8 | +import cn.iocoder.dashboard.framework.sms.core.property.SmsTemplateProperty; | ||
| 11 | import org.springframework.stereotype.Component; | 9 | import org.springframework.stereotype.Component; |
| 12 | 10 | ||
| 11 | +import java.util.Collection; | ||
| 13 | import java.util.Map; | 12 | import java.util.Map; |
| 14 | import java.util.concurrent.ConcurrentHashMap; | 13 | import java.util.concurrent.ConcurrentHashMap; |
| 15 | 14 | ||
| @@ -24,7 +23,17 @@ import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; | @@ -24,7 +23,17 @@ import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; | ||
| 24 | @Component | 23 | @Component |
| 25 | public class SmsClientFactory { | 24 | public class SmsClientFactory { |
| 26 | 25 | ||
| 27 | - private final Map<Long, AbstractSmsClient<?>> smsSenderMap = new ConcurrentHashMap<>(8); | 26 | + /** |
| 27 | + * channelId: client map | ||
| 28 | + * 保存 渠道id: 对应短信客户端 的map | ||
| 29 | + */ | ||
| 30 | + private final Map<Long, AbstractSmsClient> smsSenderMap = new ConcurrentHashMap<>(8); | ||
| 31 | + | ||
| 32 | + /** | ||
| 33 | + * templateCode: TemplateProperty map | ||
| 34 | + * 保存 模板编码:模板信息 的map | ||
| 35 | + */ | ||
| 36 | + private final Map<String, SmsTemplateProperty> templatePropertyMap = new ConcurrentHashMap<>(16); | ||
| 28 | 37 | ||
| 29 | /** | 38 | /** |
| 30 | * 创建短信客户端 | 39 | * 创建短信客户端 |
| @@ -33,20 +42,13 @@ public class SmsClientFactory { | @@ -33,20 +42,13 @@ public class SmsClientFactory { | ||
| 33 | * @return 客户端id(默认channelId) | 42 | * @return 客户端id(默认channelId) |
| 34 | */ | 43 | */ |
| 35 | public Long createClient(SmsChannelProperty propertyVO) { | 44 | public Long createClient(SmsChannelProperty propertyVO) { |
| 36 | - // TODO FROM 芋艿 TO zzf:参数的校验,可以考虑统一使用 validation。 | ||
| 37 | - if (StrUtil.isBlank(propertyVO.getCode())) { | ||
| 38 | - throw ServiceExceptionUtil.exception(PARAM_VALUE_IS_NULL, "短信渠道编码"); | ||
| 39 | - } | ||
| 40 | - if (ObjectUtil.isNull(propertyVO.getId())) { | ||
| 41 | - throw ServiceExceptionUtil.exception(PARAM_VALUE_IS_NULL, "短信渠道ID"); | ||
| 42 | - } | ||
| 43 | - | ||
| 44 | - AbstractSmsClient<?> sender = createClient(SmsChannelEnum.getByCode(propertyVO.getCode()), propertyVO); | 45 | + // TODO FROM 芋艿 TO zzf:参数的校验,可以考虑统一使用 validation。 DONE |
| 46 | + AbstractSmsClient sender = createClient(SmsChannelEnum.getByCode(propertyVO.getCode()), propertyVO); | ||
| 45 | smsSenderMap.put(propertyVO.getId(), sender); | 47 | smsSenderMap.put(propertyVO.getId(), sender); |
| 46 | return propertyVO.getId(); | 48 | return propertyVO.getId(); |
| 47 | } | 49 | } |
| 48 | 50 | ||
| 49 | - private AbstractSmsClient<?> createClient(SmsChannelEnum channelEnum, SmsChannelProperty channelVO) { | 51 | + private AbstractSmsClient createClient(SmsChannelEnum channelEnum, SmsChannelProperty channelVO) { |
| 50 | if (channelEnum == null) { | 52 | if (channelEnum == null) { |
| 51 | throw new ServiceException(INVALID_CHANNEL_CODE); | 53 | throw new ServiceException(INVALID_CHANNEL_CODE); |
| 52 | } | 54 | } |
| @@ -66,7 +68,38 @@ public class SmsClientFactory { | @@ -66,7 +68,38 @@ public class SmsClientFactory { | ||
| 66 | * @param channelId 渠道id | 68 | * @param channelId 渠道id |
| 67 | * @return 短信id | 69 | * @return 短信id |
| 68 | */ | 70 | */ |
| 69 | - public AbstractSmsClient<?> getClient(Long channelId) { | 71 | + public AbstractSmsClient getClient(Long channelId) { |
| 70 | return smsSenderMap.get(channelId); | 72 | return smsSenderMap.get(channelId); |
| 71 | } | 73 | } |
| 74 | + | ||
| 75 | + | ||
| 76 | + /** | ||
| 77 | + * 添加或修改短信模板信息缓存 | ||
| 78 | + */ | ||
| 79 | + public void addOrUpdateTemplateCache(Collection<SmsTemplateProperty> templateProperties) { | ||
| 80 | + templateProperties.forEach(s -> templatePropertyMap.put(s.getCode(), s)); | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + | ||
| 84 | + /** | ||
| 85 | + * 添加或修改短信模板信息缓存 | ||
| 86 | + */ | ||
| 87 | + public void addOrUpdateTemplateCache(SmsTemplateProperty templateProperty) { | ||
| 88 | + templatePropertyMap.put(templateProperty.getCode(), templateProperty); | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + | ||
| 92 | + /** | ||
| 93 | + * 根据短信模板编码获取模板唯一标识 | ||
| 94 | + * | ||
| 95 | + * @param templateCode 短信模板编码 | ||
| 96 | + * @return 短信id | ||
| 97 | + */ | ||
| 98 | + public String getTemplateApiIdByCode(String templateCode) { | ||
| 99 | + SmsTemplateProperty smsTemplateProperty = templatePropertyMap.get(templateCode); | ||
| 100 | + if (smsTemplateProperty == null) { | ||
| 101 | + throw new ServiceException(SMS_TEMPLATE_NOT_FOUND); | ||
| 102 | + } | ||
| 103 | + return smsTemplateProperty.getApiTemplateId(); | ||
| 104 | + } | ||
| 72 | } | 105 | } |
src/main/java/cn/iocoder/dashboard/framework/sms/core/SmsResult.java
| @@ -3,17 +3,24 @@ package cn.iocoder.dashboard.framework.sms.core; | @@ -3,17 +3,24 @@ package cn.iocoder.dashboard.framework.sms.core; | ||
| 3 | import lombok.Data; | 3 | import lombok.Data; |
| 4 | 4 | ||
| 5 | import java.io.Serializable; | 5 | import java.io.Serializable; |
| 6 | +import java.util.List; | ||
| 6 | 7 | ||
| 7 | /** | 8 | /** |
| 8 | * 消息内容实体类 | 9 | * 消息内容实体类 |
| 9 | */ | 10 | */ |
| 10 | @Data | 11 | @Data |
| 11 | -public class SmsResult<T> implements Serializable { | 12 | +public class SmsResult implements Serializable { |
| 12 | 13 | ||
| 13 | /** | 14 | /** |
| 14 | * 是否成功 | 15 | * 是否成功 |
| 15 | */ | 16 | */ |
| 16 | - private Boolean success; // TODO FROM 芋艿 to zzf:未来要加一个 code,将不同平台的短信失败的情况,做一次统一的收敛。 | 17 | + // TODO FROM 芋艿 to zzf:未来要加一个 code,将不同平台的短信失败的情况,做一次统一的收敛。 DONE |
| 18 | + private Boolean success; | ||
| 19 | + | ||
| 20 | + /** | ||
| 21 | + * 状态码 | ||
| 22 | + */ | ||
| 23 | + private String code; | ||
| 17 | 24 | ||
| 18 | /** | 25 | /** |
| 19 | * 提示 | 26 | * 提示 |
| @@ -23,5 +30,7 @@ public class SmsResult<T> implements Serializable { | @@ -23,5 +30,7 @@ public class SmsResult<T> implements Serializable { | ||
| 23 | /** | 30 | /** |
| 24 | * 返回值 | 31 | * 返回值 |
| 25 | */ | 32 | */ |
| 26 | - private T result; // TODO FROM 芋艿 to zzf:是不是统一各个平台的返回结果,这样对调用方来说统一。因为作为统一的短信客户端,最好让上层不太需要知道太具体。黑河诶 | 33 | + // TODO FROM 芋艿 to zzf:是不是统一各个平台的返回结果,这样对调用方来说统一。因为作为统一的短信客户端,最好让上层不太需要知道太具体。黑河诶 DONE |
| 34 | + private List<SmsResultDetail> result; | ||
| 35 | + | ||
| 27 | } | 36 | } |
src/main/java/cn/iocoder/dashboard/framework/sms/core/SmsResultDetail.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.framework.sms.core; | ||
| 2 | + | ||
| 3 | +import lombok.Data; | ||
| 4 | + | ||
| 5 | +import java.io.Serializable; | ||
| 6 | +import java.util.Date; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | + * 消息内容实体类 | ||
| 10 | + */ | ||
| 11 | +@Data | ||
| 12 | +public class SmsResultDetail implements Serializable { | ||
| 13 | + | ||
| 14 | + /** | ||
| 15 | + * 状态 1成功 2失败 3等待回执 | ||
| 16 | + */ | ||
| 17 | + private Integer status; | ||
| 18 | + | ||
| 19 | + /** | ||
| 20 | + * 接收手机号 | ||
| 21 | + */ | ||
| 22 | + private String phone; | ||
| 23 | + | ||
| 24 | + /** | ||
| 25 | + * 提示 | ||
| 26 | + */ | ||
| 27 | + private String message; | ||
| 28 | + | ||
| 29 | + /** | ||
| 30 | + * 时间 | ||
| 31 | + */ | ||
| 32 | + private Date createTime; | ||
| 33 | +} |
src/main/java/cn/iocoder/dashboard/common/enums/SmsChannelEnum.java renamed to src/main/java/cn/iocoder/dashboard/framework/sms/core/enums/SmsChannelEnum.java
| 1 | -package cn.iocoder.dashboard.common.enums; | 1 | +package cn.iocoder.dashboard.framework.sms.core.enums; |
| 2 | 2 | ||
| 3 | import lombok.AllArgsConstructor; | 3 | import lombok.AllArgsConstructor; |
| 4 | import lombok.Getter; | 4 | import lombok.Getter; |
| 5 | 5 | ||
| 6 | -import java.util.function.Predicate; | ||
| 7 | -import java.util.stream.Stream; | ||
| 8 | - | ||
| 9 | /** | 6 | /** |
| 10 | - * 短信渠道枚举 TODO FROM 芋艿 TO zzf:属于短信的枚举类,可以放到 framework/sms 下 | 7 | + * 短信渠道枚举 TODO FROM 芋艿 TO zzf:属于短信的枚举类,可以放到 framework/sms 下 DONE |
| 11 | * | 8 | * |
| 12 | * @author zzf | 9 | * @author zzf |
| 13 | * @date 2021/1/25 10:56 | 10 | * @date 2021/1/25 10:56 |
| @@ -19,7 +16,7 @@ public enum SmsChannelEnum { | @@ -19,7 +16,7 @@ public enum SmsChannelEnum { | ||
| 19 | ALI("ALI", "阿里"), | 16 | ALI("ALI", "阿里"), |
| 20 | HUA_WEI("HUA_WEI", "华为"), | 17 | HUA_WEI("HUA_WEI", "华为"), |
| 21 | QI_NIU("QI_NIU", "七牛"), | 18 | QI_NIU("QI_NIU", "七牛"), |
| 22 | - TEN_XUN("TEN_XUN", "腾讯"); // TODO FROM 芋艿 to zzf:TEN 有后鼻音哈,要被马爸爸打了。。。 | 19 | + TENCENT("TENCENT", "腾讯"); // TODO FROM 芋艿 to zzf:TEN 有后鼻音哈,要被马爸爸打了。。。 DONE |
| 23 | 20 | ||
| 24 | private final String code; | 21 | private final String code; |
| 25 | 22 |
src/main/java/cn/iocoder/dashboard/framework/sms/core/property/SmsChannelProperty.java
| @@ -3,6 +3,8 @@ package cn.iocoder.dashboard.framework.sms.core.property; | @@ -3,6 +3,8 @@ package cn.iocoder.dashboard.framework.sms.core.property; | ||
| 3 | import lombok.Data; | 3 | import lombok.Data; |
| 4 | import lombok.EqualsAndHashCode; | 4 | import lombok.EqualsAndHashCode; |
| 5 | 5 | ||
| 6 | +import javax.validation.constraints.NotEmpty; | ||
| 7 | +import javax.validation.constraints.NotNull; | ||
| 6 | import java.io.Serializable; | 8 | import java.io.Serializable; |
| 7 | import java.util.List; | 9 | import java.util.List; |
| 8 | 10 | ||
| @@ -19,40 +21,37 @@ public class SmsChannelProperty implements Serializable { | @@ -19,40 +21,37 @@ public class SmsChannelProperty implements Serializable { | ||
| 19 | /** | 21 | /** |
| 20 | * id | 22 | * id |
| 21 | */ | 23 | */ |
| 24 | + @NotNull(message = "短信渠道ID不能为空") | ||
| 22 | private Long id; | 25 | private Long id; |
| 23 | 26 | ||
| 24 | /** | 27 | /** |
| 25 | * 编码(来自枚举类 阿里、华为、七牛等) | 28 | * 编码(来自枚举类 阿里、华为、七牛等) |
| 26 | */ | 29 | */ |
| 30 | + @NotEmpty(message = "短信渠道编码不能为空") | ||
| 27 | private String code; | 31 | private String code; |
| 28 | 32 | ||
| 29 | /** | 33 | /** |
| 30 | * 渠道账号id | 34 | * 渠道账号id |
| 31 | */ | 35 | */ |
| 36 | + @NotEmpty(message = "渠道账号id不能为空") | ||
| 32 | private String apiKey; | 37 | private String apiKey; |
| 33 | 38 | ||
| 34 | /** | 39 | /** |
| 35 | * 渠道账号秘钥 | 40 | * 渠道账号秘钥 |
| 36 | */ | 41 | */ |
| 42 | + @NotEmpty(message = "渠道账号秘钥不能为空") | ||
| 37 | private String apiSecret; | 43 | private String apiSecret; |
| 38 | 44 | ||
| 39 | /** | 45 | /** |
| 40 | * 实际渠道签名唯一标识 | 46 | * 实际渠道签名唯一标识 |
| 41 | */ | 47 | */ |
| 48 | + @NotEmpty(message = "实际渠道签名唯一标识不能为空") | ||
| 42 | private String apiSignatureId; | 49 | private String apiSignatureId; |
| 43 | 50 | ||
| 44 | /** | 51 | /** |
| 45 | * 签名值 | 52 | * 签名值 |
| 46 | */ | 53 | */ |
| 54 | + @NotEmpty(message = "签名值不能为空") | ||
| 47 | private String signature; | 55 | private String signature; |
| 48 | 56 | ||
| 49 | - /** | ||
| 50 | - * 该渠道名下的短信模板集合 | ||
| 51 | - */ | ||
| 52 | - private List<SmsTemplateProperty> templateList; | ||
| 53 | - | ||
| 54 | - public SmsTemplateProperty getTemplateByTemplateCode(String tempCode) { | ||
| 55 | - return templateList.stream().filter(s -> s.getCode().equals(tempCode)).findFirst().get(); | ||
| 56 | - } | ||
| 57 | - | ||
| 58 | } | 57 | } |
src/main/java/cn/iocoder/dashboard/framework/sms/core/property/SmsTemplateProperty.java
| @@ -3,8 +3,12 @@ package cn.iocoder.dashboard.framework.sms.core.property; | @@ -3,8 +3,12 @@ package cn.iocoder.dashboard.framework.sms.core.property; | ||
| 3 | import lombok.Data; | 3 | import lombok.Data; |
| 4 | import lombok.EqualsAndHashCode; | 4 | import lombok.EqualsAndHashCode; |
| 5 | 5 | ||
| 6 | +import javax.validation.constraints.NotEmpty; | ||
| 7 | + | ||
| 6 | /** | 8 | /** |
| 7 | - * 渠道模板VO类 TODO FROM 芋艿 TO zzf:模板是不是不要提供到 client 里面,而是交给 factory 统一维护就好。不然,模板修改时候,刷新 client 会比较麻烦。 | 9 | + * 渠道模板VO类 |
| 10 | + * TODO FROM 芋艿 TO zzf:模板是不是不要提供到 client 里面,而是交给 factory 统一维护就好。不然,模板修改时候,刷新 client 会比较麻烦。 | ||
| 11 | + * | ||
| 8 | * | 12 | * |
| 9 | * @author zzf | 13 | * @author zzf |
| 10 | * @date 2021/1/25 17:03 | 14 | * @date 2021/1/25 17:03 |
| @@ -14,6 +18,12 @@ import lombok.EqualsAndHashCode; | @@ -14,6 +18,12 @@ import lombok.EqualsAndHashCode; | ||
| 14 | public class SmsTemplateProperty { | 18 | public class SmsTemplateProperty { |
| 15 | 19 | ||
| 16 | /** | 20 | /** |
| 21 | + * 渠道id | ||
| 22 | + */ | ||
| 23 | + @NotEmpty(message = "短信渠道编码不能为空") | ||
| 24 | + private Long channelId; | ||
| 25 | + | ||
| 26 | + /** | ||
| 17 | * 业务编码(来自数据字典, 用户自定义业务场景 一个场景可以有多个模板) | 27 | * 业务编码(来自数据字典, 用户自定义业务场景 一个场景可以有多个模板) |
| 18 | */ | 28 | */ |
| 19 | private String bizCode; | 29 | private String bizCode; |
| @@ -21,18 +31,19 @@ public class SmsTemplateProperty { | @@ -21,18 +31,19 @@ public class SmsTemplateProperty { | ||
| 21 | /** | 31 | /** |
| 22 | * 编码 | 32 | * 编码 |
| 23 | */ | 33 | */ |
| 34 | + @NotEmpty(message = "短信模板编码不能为空") | ||
| 24 | private String code; | 35 | private String code; |
| 25 | 36 | ||
| 26 | /** | 37 | /** |
| 27 | * 实际渠道模板唯一标识 | 38 | * 实际渠道模板唯一标识 |
| 28 | */ | 39 | */ |
| 40 | + @NotEmpty(message = "短信模板唯一标识不能为空") | ||
| 29 | private String apiTemplateId; | 41 | private String apiTemplateId; |
| 30 | 42 | ||
| 31 | /** | 43 | /** |
| 32 | * 内容 | 44 | * 内容 |
| 33 | */ | 45 | */ |
| 46 | + @NotEmpty(message = "短信模板内容不能为空") | ||
| 34 | private String content; | 47 | private String content; |
| 35 | 48 | ||
| 36 | - | ||
| 37 | - | ||
| 38 | } | 49 | } |
src/main/java/cn/iocoder/dashboard/modules/system/controller/sms/SmsChannelController.java
| @@ -5,8 +5,8 @@ import cn.iocoder.dashboard.common.pojo.PageResult; | @@ -5,8 +5,8 @@ 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.SmsChannelDO; | ||
| 9 | -import cn.iocoder.dashboard.modules.system.service.sms.SmsChannelService; | 8 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsChannelDO; |
| 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; |
| 12 | import org.springframework.validation.annotation.Validated; | 12 | import org.springframework.validation.annotation.Validated; |
| @@ -23,25 +23,25 @@ import static cn.iocoder.dashboard.common.pojo.CommonResult.success; | @@ -23,25 +23,25 @@ import static cn.iocoder.dashboard.common.pojo.CommonResult.success; | ||
| 23 | public class SmsChannelController { | 23 | public class SmsChannelController { |
| 24 | 24 | ||
| 25 | @Resource | 25 | @Resource |
| 26 | - private SmsChannelService service; | 26 | + private SysSmsChannelService service; |
| 27 | 27 | ||
| 28 | @ApiOperation("获取渠道/签名分页") | 28 | @ApiOperation("获取渠道/签名分页") |
| 29 | @GetMapping("/page") | 29 | @GetMapping("/page") |
| 30 | - public CommonResult<PageResult<SmsChannelDO>> getPermissionInfo(@Validated SmsChannelPageReqVO reqVO) { | ||
| 31 | - return success(service.pageChannels(reqVO)); | 30 | + public CommonResult<PageResult<SysSmsChannelDO>> getPermissionInfo(@Validated SmsChannelPageReqVO reqVO) { |
| 31 | + return success(service.pageSmsChannels(reqVO)); | ||
| 32 | } | 32 | } |
| 33 | 33 | ||
| 34 | @ApiOperation("获取渠道枚举") | 34 | @ApiOperation("获取渠道枚举") |
| 35 | @GetMapping("/list/channel-enum") | 35 | @GetMapping("/list/channel-enum") |
| 36 | public CommonResult<List<SmsChannelEnumRespVO>> getChannelEnums() { | 36 | public CommonResult<List<SmsChannelEnumRespVO>> getChannelEnums() { |
| 37 | - return success(service.getChannelEnums()); | 37 | + return success(service.getSmsChannelEnums()); |
| 38 | } | 38 | } |
| 39 | 39 | ||
| 40 | 40 | ||
| 41 | @ApiOperation("添加消息渠道") | 41 | @ApiOperation("添加消息渠道") |
| 42 | @PostMapping("/create") | 42 | @PostMapping("/create") |
| 43 | public CommonResult<Long> add(@Validated @RequestBody SmsChannelCreateReqVO reqVO) { | 43 | public CommonResult<Long> add(@Validated @RequestBody SmsChannelCreateReqVO reqVO) { |
| 44 | - return success(service.createChannel(reqVO)); | 44 | + return success(service.createSmsChannel(reqVO)); |
| 45 | } | 45 | } |
| 46 | 46 | ||
| 47 | 47 |
src/main/java/cn/iocoder/dashboard/modules/system/convert/sms/SmsChannelConvert.java
| 1 | package cn.iocoder.dashboard.modules.system.convert.sms; | 1 | package cn.iocoder.dashboard.modules.system.convert.sms; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.dashboard.common.enums.SmsChannelEnum; | 3 | +import cn.iocoder.dashboard.framework.sms.core.enums.SmsChannelEnum; |
| 4 | import cn.iocoder.dashboard.common.pojo.PageResult; | 4 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 5 | import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty; | 5 | import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty; |
| 6 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsChannelAllVO; | 6 | 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.SmsChannelDO; | 10 | +import cn.iocoder.dashboard.modules.system.dal.mysql.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; |
| @@ -21,17 +21,19 @@ public interface SmsChannelConvert { | @@ -21,17 +21,19 @@ public interface SmsChannelConvert { | ||
| 21 | SmsChannelConvert INSTANCE = Mappers.getMapper(SmsChannelConvert.class); | 21 | SmsChannelConvert INSTANCE = Mappers.getMapper(SmsChannelConvert.class); |
| 22 | 22 | ||
| 23 | @Mapping(source = "records", target = "list") | 23 | @Mapping(source = "records", target = "list") |
| 24 | - PageResult<SmsChannelDO> convertPage(IPage<SmsChannelDO> page); | 24 | + PageResult<SysSmsChannelDO> convertPage(IPage<SysSmsChannelDO> page); |
| 25 | 25 | ||
| 26 | - SmsChannelDO convert(SmsChannelCreateReqVO bean); | 26 | + SysSmsChannelDO convert(SmsChannelCreateReqVO bean); |
| 27 | 27 | ||
| 28 | - SmsChannelDO convert(SysUserUpdateReqVO bean); | 28 | + SysSmsChannelDO convert(SysUserUpdateReqVO bean); |
| 29 | 29 | ||
| 30 | List<SmsChannelEnumRespVO> convertEnum(List<SmsChannelEnum> bean); | 30 | List<SmsChannelEnumRespVO> convertEnum(List<SmsChannelEnum> bean); |
| 31 | 31 | ||
| 32 | - List<SmsChannelAllVO> convert(List<SmsChannelDO> bean); | 32 | + List<SmsChannelAllVO> convert(List<SysSmsChannelDO> bean); |
| 33 | 33 | ||
| 34 | List<SmsChannelProperty> convertProperty(List<SmsChannelAllVO> list); | 34 | List<SmsChannelProperty> convertProperty(List<SmsChannelAllVO> list); |
| 35 | 35 | ||
| 36 | + List<SmsChannelProperty> convertProperties(List<SysSmsChannelDO> list); | ||
| 37 | + | ||
| 36 | 38 | ||
| 37 | } | 39 | } |
src/main/java/cn/iocoder/dashboard/modules/system/convert/sms/SmsTemplateConvert.java
| @@ -2,8 +2,8 @@ package cn.iocoder.dashboard.modules.system.convert.sms; | @@ -2,8 +2,8 @@ package cn.iocoder.dashboard.modules.system.convert.sms; | ||
| 2 | 2 | ||
| 3 | import cn.iocoder.dashboard.common.pojo.PageResult; | 3 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 4 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsTemplateVO; | 4 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsTemplateVO; |
| 5 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SmsChannelDO; | ||
| 6 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SmsTemplateDO; | 5 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsChannelDO; |
| 6 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsTemplateDO; | ||
| 7 | import com.baomidou.mybatisplus.core.metadata.IPage; | 7 | import com.baomidou.mybatisplus.core.metadata.IPage; |
| 8 | import org.mapstruct.Mapper; | 8 | import org.mapstruct.Mapper; |
| 9 | import org.mapstruct.Mapping; | 9 | import org.mapstruct.Mapping; |
| @@ -17,10 +17,10 @@ public interface SmsTemplateConvert { | @@ -17,10 +17,10 @@ public interface SmsTemplateConvert { | ||
| 17 | SmsTemplateConvert INSTANCE = Mappers.getMapper(SmsTemplateConvert.class); | 17 | SmsTemplateConvert INSTANCE = Mappers.getMapper(SmsTemplateConvert.class); |
| 18 | 18 | ||
| 19 | @Mapping(source = "records", target = "list") | 19 | @Mapping(source = "records", target = "list") |
| 20 | - PageResult<SmsChannelDO> convertPage(IPage<SmsChannelDO> page); | 20 | + PageResult<SysSmsChannelDO> convertPage(IPage<SysSmsChannelDO> page); |
| 21 | 21 | ||
| 22 | - List<SmsTemplateVO> convert(List<SmsTemplateDO> bean); | 22 | + List<SmsTemplateVO> convert(List<SysSmsTemplateDO> bean); |
| 23 | 23 | ||
| 24 | - SmsTemplateVO convert(SmsTemplateDO bean); | 24 | + SmsTemplateVO convert(SysSmsTemplateDO bean); |
| 25 | 25 | ||
| 26 | } | 26 | } |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/sms/SmsChannelMapper.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/sms/SysSmsChannelMapper.java
| @@ -4,7 +4,7 @@ import cn.hutool.core.util.StrUtil; | @@ -4,7 +4,7 @@ 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.SmsChannelDO; | 7 | +import cn.iocoder.dashboard.modules.system.dal.mysql.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; |
| @@ -13,19 +13,19 @@ import org.apache.ibatis.annotations.Mapper; | @@ -13,19 +13,19 @@ import org.apache.ibatis.annotations.Mapper; | ||
| 13 | import java.util.List; | 13 | import java.util.List; |
| 14 | 14 | ||
| 15 | @Mapper | 15 | @Mapper |
| 16 | -public interface SmsChannelMapper extends BaseMapper<SmsChannelDO> { | 16 | +public interface SysSmsChannelMapper extends BaseMapper<SysSmsChannelDO> { |
| 17 | 17 | ||
| 18 | - default IPage<SmsChannelDO> selectChannelPage(SmsChannelPageReqVO reqVO) { | ||
| 19 | - return selectPage(MyBatisUtils.buildPage(reqVO), new LambdaQueryWrapper<SmsChannelDO>() | ||
| 20 | - .like(StrUtil.isNotBlank(reqVO.getName()), SmsChannelDO::getName, reqVO.getName()) | ||
| 21 | - .like(StrUtil.isNotBlank(reqVO.getSignature()), SmsChannelDO::getName, reqVO.getSignature()) | 18 | + default IPage<SysSmsChannelDO> selectChannelPage(SmsChannelPageReqVO reqVO) { |
| 19 | + return selectPage(MyBatisUtils.buildPage(reqVO), new LambdaQueryWrapper<SysSmsChannelDO>() | ||
| 20 | + .like(StrUtil.isNotBlank(reqVO.getName()), SysSmsChannelDO::getName, reqVO.getName()) | ||
| 21 | + .like(StrUtil.isNotBlank(reqVO.getSignature()), SysSmsChannelDO::getName, reqVO.getSignature()) | ||
| 22 | ); | 22 | ); |
| 23 | } | 23 | } |
| 24 | 24 | ||
| 25 | - default List<SmsChannelDO> selectEnabledList() { | ||
| 26 | - return selectList(new LambdaQueryWrapper<SmsChannelDO>() | ||
| 27 | - .eq(SmsChannelDO::getStatus, CommonStatusEnum.ENABLE.getStatus()) | ||
| 28 | - .orderByAsc(SmsChannelDO::getId) | 25 | + default List<SysSmsChannelDO> selectEnabledList() { |
| 26 | + return selectList(new LambdaQueryWrapper<SysSmsChannelDO>() | ||
| 27 | + .eq(SysSmsChannelDO::getStatus, CommonStatusEnum.ENABLE.getStatus()) | ||
| 28 | + .orderByAsc(SysSmsChannelDO::getId) | ||
| 29 | ); | 29 | ); |
| 30 | } | 30 | } |
| 31 | } | 31 | } |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/sms/SmsLogMapper.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/sms/SysSmsLogMapper.java
| 1 | package cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms; | 1 | package cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SmsLogDO; | 3 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsLogDO; |
| 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 | ||
| 7 | @Mapper | 7 | @Mapper |
| 8 | -public interface SmsLogMapper extends BaseMapper<SmsLogDO> { | 8 | +public interface SysSmsLogMapper extends BaseMapper<SysSmsLogDO> { |
| 9 | 9 | ||
| 10 | } | 10 | } |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/sms/SmsTemplateMapper.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/sms/SysSmsTemplateMapper.java
| 1 | package cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms; | 1 | package cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms; |
| 2 | 2 | ||
| 3 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | 3 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; |
| 4 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SmsTemplateDO; | 4 | +import cn.iocoder.dashboard.modules.system.dal.mysql.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; | 6 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| 7 | import org.apache.ibatis.annotations.Mapper; | 7 | import org.apache.ibatis.annotations.Mapper; |
| @@ -9,7 +9,7 @@ import org.apache.ibatis.annotations.Mapper; | @@ -9,7 +9,7 @@ import org.apache.ibatis.annotations.Mapper; | ||
| 9 | import java.util.List; | 9 | import java.util.List; |
| 10 | 10 | ||
| 11 | @Mapper | 11 | @Mapper |
| 12 | -public interface SmsTemplateMapper extends BaseMapper<SmsTemplateDO> { | 12 | +public interface SysSmsTemplateMapper extends BaseMapper<SysSmsTemplateDO> { |
| 13 | 13 | ||
| 14 | /** | 14 | /** |
| 15 | * 根据短信渠道id查询短信模板集合 | 15 | * 根据短信渠道id查询短信模板集合 |
| @@ -17,11 +17,11 @@ public interface SmsTemplateMapper extends BaseMapper<SmsTemplateDO> { | @@ -17,11 +17,11 @@ public interface SmsTemplateMapper extends BaseMapper<SmsTemplateDO> { | ||
| 17 | * @param channelId 渠道id | 17 | * @param channelId 渠道id |
| 18 | * @return 模板集合 | 18 | * @return 模板集合 |
| 19 | */ | 19 | */ |
| 20 | - default List<SmsTemplateDO> selectListByChannelId(Long channelId) { | ||
| 21 | - return selectList(new LambdaQueryWrapper<SmsTemplateDO>() | ||
| 22 | - .eq(SmsTemplateDO::getChannelId, channelId) | ||
| 23 | - .eq(SmsTemplateDO::getStatus, CommonStatusEnum.ENABLE.getStatus()) | ||
| 24 | - .orderByAsc(SmsTemplateDO::getId) | 20 | + default List<SysSmsTemplateDO> selectListByChannelId(Long channelId) { |
| 21 | + return selectList(new LambdaQueryWrapper<SysSmsTemplateDO>() | ||
| 22 | + .eq(SysSmsTemplateDO::getChannelId, channelId) | ||
| 23 | + .eq(SysSmsTemplateDO::getStatus, CommonStatusEnum.ENABLE.getStatus()) | ||
| 24 | + .orderByAsc(SysSmsTemplateDO::getId) | ||
| 25 | ); | 25 | ); |
| 26 | } | 26 | } |
| 27 | 27 | ||
| @@ -30,10 +30,10 @@ public interface SmsTemplateMapper extends BaseMapper<SmsTemplateDO> { | @@ -30,10 +30,10 @@ public interface SmsTemplateMapper extends BaseMapper<SmsTemplateDO> { | ||
| 30 | * | 30 | * |
| 31 | * @return 有效短信模板集合 | 31 | * @return 有效短信模板集合 |
| 32 | */ | 32 | */ |
| 33 | - default List<SmsTemplateDO> selectEnabledList() { | ||
| 34 | - return selectList(new LambdaQueryWrapper<SmsTemplateDO>() | ||
| 35 | - .eq(SmsTemplateDO::getStatus, CommonStatusEnum.ENABLE.getStatus()) | ||
| 36 | - .orderByAsc(SmsTemplateDO::getId) | 33 | + default List<SysSmsTemplateDO> selectEnabledList() { |
| 34 | + return selectList(new LambdaQueryWrapper<SysSmsTemplateDO>() | ||
| 35 | + .eq(SysSmsTemplateDO::getStatus, CommonStatusEnum.ENABLE.getStatus()) | ||
| 36 | + .orderByAsc(SysSmsTemplateDO::getId) | ||
| 37 | ); | 37 | ); |
| 38 | } | 38 | } |
| 39 | } | 39 | } |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/sms/SmsChannelDO.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/sms/SysSmsChannelDO.java
| @@ -15,7 +15,7 @@ import lombok.EqualsAndHashCode; | @@ -15,7 +15,7 @@ import lombok.EqualsAndHashCode; | ||
| 15 | @Data | 15 | @Data |
| 16 | @EqualsAndHashCode(callSuper = true) | 16 | @EqualsAndHashCode(callSuper = true) |
| 17 | @TableName(value = "sms_channel", autoResultMap = true) | 17 | @TableName(value = "sms_channel", autoResultMap = true) |
| 18 | -public class SmsChannelDO extends BaseDO { | 18 | +public class SysSmsChannelDO extends BaseDO { |
| 19 | 19 | ||
| 20 | /** | 20 | /** |
| 21 | * 自增编号 | 21 | * 自增编号 |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/sms/SmsLogDO.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/sms/SysSmsLogDO.java
| @@ -18,7 +18,7 @@ import java.util.Date; | @@ -18,7 +18,7 @@ import java.util.Date; | ||
| 18 | @EqualsAndHashCode | 18 | @EqualsAndHashCode |
| 19 | @Accessors(chain = true) | 19 | @Accessors(chain = true) |
| 20 | @TableName(value = "sms_log", autoResultMap = true) | 20 | @TableName(value = "sms_log", autoResultMap = true) |
| 21 | -public class SmsLogDO implements Serializable { | 21 | +public class SysSmsLogDO implements Serializable { |
| 22 | 22 | ||
| 23 | /** | 23 | /** |
| 24 | * 自增编号 | 24 | * 自增编号 |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/sms/SmsTemplateDO.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/sms/SysSmsTemplateDO.java
| @@ -16,7 +16,7 @@ import java.util.Date; | @@ -16,7 +16,7 @@ import java.util.Date; | ||
| 16 | @Data | 16 | @Data |
| 17 | @EqualsAndHashCode(callSuper = true) | 17 | @EqualsAndHashCode(callSuper = true) |
| 18 | @TableName(value = "sms_template", autoResultMap = true) | 18 | @TableName(value = "sms_template", autoResultMap = true) |
| 19 | -public class SmsTemplateDO extends BaseDO { | 19 | +public class SysSmsTemplateDO extends BaseDO { |
| 20 | 20 | ||
| 21 | /** | 21 | /** |
| 22 | * 自增编号 | 22 | * 自增编号 |
src/main/java/cn/iocoder/dashboard/modules/system/mq/consumer/sms/SmsSendConsumer.java
| @@ -4,7 +4,7 @@ import cn.iocoder.dashboard.framework.redis.core.pubsub.AbstractChannelMessageLi | @@ -4,7 +4,7 @@ import cn.iocoder.dashboard.framework.redis.core.pubsub.AbstractChannelMessageLi | ||
| 4 | import cn.iocoder.dashboard.framework.sms.core.SmsResult; | 4 | import cn.iocoder.dashboard.framework.sms.core.SmsResult; |
| 5 | import cn.iocoder.dashboard.modules.system.mq.message.dept.SysDeptRefreshMessage; | 5 | import cn.iocoder.dashboard.modules.system.mq.message.dept.SysDeptRefreshMessage; |
| 6 | import cn.iocoder.dashboard.modules.system.mq.message.sms.SmsSendMessage; | 6 | import cn.iocoder.dashboard.modules.system.mq.message.sms.SmsSendMessage; |
| 7 | -import cn.iocoder.dashboard.modules.system.service.sms.SmsService; | 7 | +import cn.iocoder.dashboard.modules.system.service.sms.SysSmsService; |
| 8 | import lombok.extern.slf4j.Slf4j; | 8 | import lombok.extern.slf4j.Slf4j; |
| 9 | import org.springframework.stereotype.Component; | 9 | import org.springframework.stereotype.Component; |
| 10 | 10 | ||
| @@ -20,12 +20,12 @@ import javax.annotation.Resource; | @@ -20,12 +20,12 @@ import javax.annotation.Resource; | ||
| 20 | public class SmsSendConsumer extends AbstractChannelMessageListener<SmsSendMessage> { | 20 | public class SmsSendConsumer extends AbstractChannelMessageListener<SmsSendMessage> { |
| 21 | 21 | ||
| 22 | @Resource | 22 | @Resource |
| 23 | - private SmsService smsService; | 23 | + private SysSmsService sysSmsService; |
| 24 | 24 | ||
| 25 | @Override | 25 | @Override |
| 26 | public void onMessage(SmsSendMessage message) { | 26 | public void onMessage(SmsSendMessage message) { |
| 27 | log.info("[onMessage][收到 发送短信 消息]"); | 27 | log.info("[onMessage][收到 发送短信 消息]"); |
| 28 | - SmsResult<?> send = smsService.send(message.getSmsBody(), message.getTargetPhones()); | 28 | + SmsResult send = sysSmsService.send(message.getSmsBody(), message.getTargetPhones()); |
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | } | 31 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SmsChannelService.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SysSmsChannelService.java
| @@ -6,7 +6,7 @@ import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsChannelAllVO; | @@ -6,7 +6,7 @@ import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsChannelAllVO; | ||
| 6 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelCreateReqVO; | 6 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelCreateReqVO; |
| 7 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelPageReqVO; | 7 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelPageReqVO; |
| 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.dal.mysql.dataobject.sms.SmsChannelDO; | 9 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsChannelDO; |
| 10 | 10 | ||
| 11 | import java.util.List; | 11 | import java.util.List; |
| 12 | 12 | ||
| @@ -16,7 +16,7 @@ import java.util.List; | @@ -16,7 +16,7 @@ import java.util.List; | ||
| 16 | * @author zzf | 16 | * @author zzf |
| 17 | * @date 2021/1/25 9:24 | 17 | * @date 2021/1/25 9:24 |
| 18 | */ | 18 | */ |
| 19 | -public interface SmsChannelService { | 19 | +public interface SysSmsChannelService { |
| 20 | 20 | ||
| 21 | // TODO FROM 芋艿 to ZZF:SmsChannelService=》SysSmsChannelService,增加 Sys 前缀,算在系统模块里 | 21 | // TODO FROM 芋艿 to ZZF:SmsChannelService=》SysSmsChannelService,增加 Sys 前缀,算在系统模块里 |
| 22 | // TODO FROM 芋艿 to ZZF:方法名,保持不去掉 Sms 前缀。虽然长点,嘿嘿 | 22 | // TODO FROM 芋艿 to ZZF:方法名,保持不去掉 Sms 前缀。虽然长点,嘿嘿 |
| @@ -32,7 +32,7 @@ public interface SmsChannelService { | @@ -32,7 +32,7 @@ public interface SmsChannelService { | ||
| 32 | * @param reqVO 参数对象 | 32 | * @param reqVO 参数对象 |
| 33 | * @return 短信渠道分页对象 | 33 | * @return 短信渠道分页对象 |
| 34 | */ | 34 | */ |
| 35 | - PageResult<SmsChannelDO> pageChannels(SmsChannelPageReqVO reqVO); | 35 | + PageResult<SysSmsChannelDO> pageSmsChannels(SmsChannelPageReqVO reqVO); |
| 36 | 36 | ||
| 37 | /** | 37 | /** |
| 38 | * 创建新的渠道信息 | 38 | * 创建新的渠道信息 |
| @@ -40,14 +40,14 @@ public interface SmsChannelService { | @@ -40,14 +40,14 @@ public interface SmsChannelService { | ||
| 40 | * @param reqVO 参数对象 | 40 | * @param reqVO 参数对象 |
| 41 | * @return 渠道id | 41 | * @return 渠道id |
| 42 | */ | 42 | */ |
| 43 | - Long createChannel(SmsChannelCreateReqVO reqVO); | 43 | + Long createSmsChannel(SmsChannelCreateReqVO reqVO); |
| 44 | 44 | ||
| 45 | /** | 45 | /** |
| 46 | * 获取短信渠道枚举/渠道编码 | 46 | * 获取短信渠道枚举/渠道编码 |
| 47 | * | 47 | * |
| 48 | * @return 短信渠道枚举/渠道编码 | 48 | * @return 短信渠道枚举/渠道编码 |
| 49 | */ | 49 | */ |
| 50 | - List<SmsChannelEnumRespVO> getChannelEnums(); | 50 | + List<SmsChannelEnumRespVO> getSmsChannelEnums(); |
| 51 | 51 | ||
| 52 | /** | 52 | /** |
| 53 | * 根据短信模板编码获取短信客户端 | 53 | * 根据短信模板编码获取短信客户端 |
| @@ -55,12 +55,20 @@ public interface SmsChannelService { | @@ -55,12 +55,20 @@ public interface SmsChannelService { | ||
| 55 | * @param templateCode 短信模板编码 | 55 | * @param templateCode 短信模板编码 |
| 56 | * @return 短信客户端 | 56 | * @return 短信客户端 |
| 57 | */ | 57 | */ |
| 58 | - AbstractSmsClient<?> getClient(String templateCode); | 58 | + AbstractSmsClient getSmsClient(String templateCode); |
| 59 | + | ||
| 60 | + /** | ||
| 61 | + * 根据短信模板编码获取模板唯一标识 | ||
| 62 | + * | ||
| 63 | + * @param templateCode 短信模板编码 | ||
| 64 | + * @return 短信客户端 | ||
| 65 | + */ | ||
| 66 | + String getSmsTemplateApiIdByCode(String templateCode); | ||
| 59 | 67 | ||
| 60 | /** | 68 | /** |
| 61 | * 查询渠道(包含名下模块)信息集合 | 69 | * 查询渠道(包含名下模块)信息集合 |
| 62 | * | 70 | * |
| 63 | * @return 渠道(包含名下模块)信息集合 | 71 | * @return 渠道(包含名下模块)信息集合 |
| 64 | */ | 72 | */ |
| 65 | - List<SmsChannelAllVO> listChannelAllEnabledInfo(); | 73 | + List<SmsChannelAllVO> listSmsChannelAllEnabledInfo(); |
| 66 | } | 74 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SmsLogService.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SysSmsLogService.java
| @@ -12,7 +12,7 @@ import java.util.List; | @@ -12,7 +12,7 @@ import java.util.List; | ||
| 12 | * @author zzf | 12 | * @author zzf |
| 13 | * @date 2021/1/25 9:24 | 13 | * @date 2021/1/25 9:24 |
| 14 | */ | 14 | */ |
| 15 | -public interface SmsLogService { | 15 | +public interface SysSmsLogService { |
| 16 | /** | 16 | /** |
| 17 | * 发送短信前的日志处理 | 17 | * 发送短信前的日志处理 |
| 18 | * | 18 | * |
| @@ -22,9 +22,11 @@ public interface SmsLogService { | @@ -22,9 +22,11 @@ public interface SmsLogService { | ||
| 22 | * @param isAsync 是否异步发送 | 22 | * @param isAsync 是否异步发送 |
| 23 | * @return 生成的日志id | 23 | * @return 生成的日志id |
| 24 | */ | 24 | */ |
| 25 | - // TODO FROM 芋艿 to ZZF: async 是针对发送的方式,对于日志不一定需要关心。这样,短信日志,实际就发送前插入,发送后更新结果 | 25 | + // TODO FROM 芋艿 to ZZF: async 是针对发送的方式,对于日志不一定需要关心。这样,短信日志,实际就发送前插入,发送后更新结果. |
| 26 | + // 这里只用于记录状态,毕竟异步可能推送失败,此时日志可记录该状态。 | ||
| 27 | + | ||
| 26 | // TODO FROM 芋艿 to ZZF:短信日志,群发的情况,应该是每个手机一条哈。虽然是群发,但是可能部分成功,部分失败;对应到短信平台,实际也是多条。 | 28 | // TODO FROM 芋艿 to ZZF:短信日志,群发的情况,应该是每个手机一条哈。虽然是群发,但是可能部分成功,部分失败;对应到短信平台,实际也是多条。 |
| 27 | - Long beforeSendLog(SmsBody smsBody, List<String> targetPhones, AbstractSmsClient<?> client, Boolean isAsync); | 29 | + Long beforeSendLog(SmsBody smsBody, List<String> targetPhones, AbstractSmsClient client, Boolean isAsync); |
| 28 | 30 | ||
| 29 | /** | 31 | /** |
| 30 | * 发送消息后的日志处理 | 32 | * 发送消息后的日志处理 |
| @@ -32,6 +34,6 @@ public interface SmsLogService { | @@ -32,6 +34,6 @@ public interface SmsLogService { | ||
| 32 | * @param logId 日志id | 34 | * @param logId 日志id |
| 33 | * @param result 消息结果 | 35 | * @param result 消息结果 |
| 34 | */ | 36 | */ |
| 35 | - void afterSendLog(Long logId, SmsResult<?> result); | 37 | + void afterSendLog(Long logId, SmsResult result); |
| 36 | 38 | ||
| 37 | } | 39 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SmsService.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SysSmsService.java
| @@ -14,7 +14,7 @@ import java.util.List; | @@ -14,7 +14,7 @@ import java.util.List; | ||
| 14 | * @author zzf | 14 | * @author zzf |
| 15 | * @date 2021/1/25 9:24 | 15 | * @date 2021/1/25 9:24 |
| 16 | */ | 16 | */ |
| 17 | -public interface SmsService { | 17 | +public interface SysSmsService { |
| 18 | 18 | ||
| 19 | /** | 19 | /** |
| 20 | * 发送消息 | 20 | * 发送消息 |
| @@ -23,7 +23,7 @@ public interface SmsService { | @@ -23,7 +23,7 @@ public interface SmsService { | ||
| 23 | * @param targetPhones 发送对象手机号列表 | 23 | * @param targetPhones 发送对象手机号列表 |
| 24 | * @return 是否发送成功 | 24 | * @return 是否发送成功 |
| 25 | */ | 25 | */ |
| 26 | - SmsResult<?> send(SmsBody smsBody, List<String> targetPhones); | 26 | + SmsResult send(SmsBody smsBody, List<String> targetPhones); |
| 27 | 27 | ||
| 28 | /** | 28 | /** |
| 29 | * 发送消息 | 29 | * 发送消息 |
| @@ -32,7 +32,7 @@ public interface SmsService { | @@ -32,7 +32,7 @@ public interface SmsService { | ||
| 32 | * @param targetPhone 发送对象手机号 | 32 | * @param targetPhone 发送对象手机号 |
| 33 | * @return 是否发送成功 | 33 | * @return 是否发送成功 |
| 34 | */ | 34 | */ |
| 35 | - default SmsResult<?> send(SmsBody smsBody, String targetPhone) { | 35 | + default SmsResult send(SmsBody smsBody, String targetPhone) { |
| 36 | if (StringUtils.isBlank(targetPhone)) { | 36 | if (StringUtils.isBlank(targetPhone)) { |
| 37 | return failResult("targetPhone must not null."); | 37 | return failResult("targetPhone must not null."); |
| 38 | } | 38 | } |
| @@ -47,7 +47,7 @@ public interface SmsService { | @@ -47,7 +47,7 @@ public interface SmsService { | ||
| 47 | * @param targetPhones 发送对象手机号数组 | 47 | * @param targetPhones 发送对象手机号数组 |
| 48 | * @return 是否发送成功 | 48 | * @return 是否发送成功 |
| 49 | */ | 49 | */ |
| 50 | - default SmsResult<?> send(SmsBody smsBody, String... targetPhones) { | 50 | + default SmsResult send(SmsBody smsBody, String... targetPhones) { |
| 51 | if (targetPhones == null) { | 51 | if (targetPhones == null) { |
| 52 | return failResult("targetPhones must not null."); | 52 | return failResult("targetPhones must not null."); |
| 53 | } | 53 | } |
| @@ -91,8 +91,8 @@ public interface SmsService { | @@ -91,8 +91,8 @@ public interface SmsService { | ||
| 91 | } | 91 | } |
| 92 | 92 | ||
| 93 | 93 | ||
| 94 | - default SmsResult<?> failResult(String message) { | ||
| 95 | - SmsResult<?> resultBody = new SmsResult<>(); | 94 | + default SmsResult failResult(String message) { |
| 95 | + SmsResult resultBody = new SmsResult(); | ||
| 96 | resultBody.setSuccess(false); | 96 | resultBody.setSuccess(false); |
| 97 | resultBody.setMessage(message); | 97 | resultBody.setMessage(message); |
| 98 | return resultBody; | 98 | return resultBody; |
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SmsTemplateService.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SysSmsTemplateService.java
| @@ -6,5 +6,5 @@ package cn.iocoder.dashboard.modules.system.service.sms; | @@ -6,5 +6,5 @@ package cn.iocoder.dashboard.modules.system.service.sms; | ||
| 6 | * @author zzf | 6 | * @author zzf |
| 7 | * @date 2021/1/25 9:24 | 7 | * @date 2021/1/25 9:24 |
| 8 | */ | 8 | */ |
| 9 | -public interface SmsTemplateService { | 9 | +public interface SysSmsTemplateService { |
| 10 | } | 10 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SmsChannelServiceImpl.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SysSmsChannelServiceImpl.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.ObjectUtil; | 3 | import cn.hutool.core.util.ObjectUtil; |
| 4 | -import cn.iocoder.dashboard.common.enums.SmsChannelEnum; | ||
| 5 | import cn.iocoder.dashboard.common.pojo.PageResult; | 4 | import cn.iocoder.dashboard.common.pojo.PageResult; |
| 6 | import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient; | 5 | import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient; |
| 7 | import cn.iocoder.dashboard.framework.sms.core.SmsClientFactory; | 6 | import cn.iocoder.dashboard.framework.sms.core.SmsClientFactory; |
| 7 | +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.modules.system.controller.sms.vo.SmsChannelAllVO; | 9 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsChannelAllVO; |
| 10 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelCreateReqVO; | 10 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelCreateReqVO; |
| @@ -12,11 +12,11 @@ import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelPageR | @@ -12,11 +12,11 @@ import cn.iocoder.dashboard.modules.system.controller.sms.vo.req.SmsChannelPageR | ||
| 12 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.resp.SmsChannelEnumRespVO; | 12 | import cn.iocoder.dashboard.modules.system.controller.sms.vo.resp.SmsChannelEnumRespVO; |
| 13 | import cn.iocoder.dashboard.modules.system.convert.sms.SmsChannelConvert; | 13 | import cn.iocoder.dashboard.modules.system.convert.sms.SmsChannelConvert; |
| 14 | import cn.iocoder.dashboard.modules.system.convert.sms.SmsTemplateConvert; | 14 | import cn.iocoder.dashboard.modules.system.convert.sms.SmsTemplateConvert; |
| 15 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms.SmsChannelMapper; | ||
| 16 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms.SmsTemplateMapper; | ||
| 17 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SmsChannelDO; | ||
| 18 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SmsTemplateDO; | ||
| 19 | -import cn.iocoder.dashboard.modules.system.service.sms.SmsChannelService; | 15 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms.SysSmsChannelMapper; |
| 16 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms.SysSmsTemplateMapper; | ||
| 17 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsChannelDO; | ||
| 18 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsTemplateDO; | ||
| 19 | +import cn.iocoder.dashboard.modules.system.service.sms.SysSmsChannelService; | ||
| 20 | import org.springframework.beans.factory.annotation.Autowired; | 20 | import org.springframework.beans.factory.annotation.Autowired; |
| 21 | import org.springframework.stereotype.Service; | 21 | import org.springframework.stereotype.Service; |
| 22 | 22 | ||
| @@ -35,12 +35,12 @@ import java.util.concurrent.ConcurrentHashMap; | @@ -35,12 +35,12 @@ import java.util.concurrent.ConcurrentHashMap; | ||
| 35 | * @date 2021/1/25 9:25 | 35 | * @date 2021/1/25 9:25 |
| 36 | */ | 36 | */ |
| 37 | @Service | 37 | @Service |
| 38 | -public class SmsChannelServiceImpl implements SmsChannelService { | 38 | +public class SysSmsChannelServiceImpl implements SysSmsChannelService { |
| 39 | 39 | ||
| 40 | private final Map<String, Long> templateCode2ChannelIdMap = new ConcurrentHashMap<>(32); | 40 | private final Map<String, Long> templateCode2ChannelIdMap = new ConcurrentHashMap<>(32); |
| 41 | 41 | ||
| 42 | @Autowired | 42 | @Autowired |
| 43 | - private SmsClientFactory smsClientFactory; | 43 | + private SmsClientFactory clientFactory; |
| 44 | 44 | ||
| 45 | /** | 45 | /** |
| 46 | * 初始化短信客户端 | 46 | * 初始化短信客户端 |
| @@ -48,51 +48,60 @@ public class SmsChannelServiceImpl implements SmsChannelService { | @@ -48,51 +48,60 @@ public class SmsChannelServiceImpl implements SmsChannelService { | ||
| 48 | @PostConstruct | 48 | @PostConstruct |
| 49 | @Override | 49 | @Override |
| 50 | public void initSmsClient() { | 50 | public void initSmsClient() { |
| 51 | - List<SmsChannelAllVO> smsChannelAllVOList = listChannelAllEnabledInfo(); | ||
| 52 | - if (ObjectUtil.isEmpty(smsChannelAllVOList)) { | ||
| 53 | - return; | ||
| 54 | - } | ||
| 55 | - List<SmsChannelProperty> channelPropertyList = SmsChannelConvert.INSTANCE.convertProperty(smsChannelAllVOList); | ||
| 56 | - channelPropertyList.forEach(smsChannelProperty -> { | ||
| 57 | - Long clientId = smsClientFactory.createClient(smsChannelProperty); | ||
| 58 | - smsChannelProperty.getTemplateList().forEach(smsTemplateVO -> { | ||
| 59 | - templateCode2ChannelIdMap.put(smsTemplateVO.getCode(), clientId); | ||
| 60 | - }); | 51 | + // 查询有效渠道信息 |
| 52 | + List<SysSmsChannelDO> channelDOList = channelMapper.selectEnabledList(); | ||
| 53 | + List<SmsChannelProperty> propertyList = SmsChannelConvert.INSTANCE.convertProperties(channelDOList); | ||
| 54 | + | ||
| 55 | + // 遍历渠道生成client并获取模板缓存 | ||
| 56 | + propertyList.forEach(channelProperty -> { | ||
| 57 | + Long clientId = clientFactory.createClient(channelProperty); | ||
| 58 | + List<SysSmsTemplateDO> templateDOList = templateMapper.selectListByChannelId(channelProperty.getId()); | ||
| 59 | + if (ObjectUtil.isNotEmpty(templateDOList)) { | ||
| 60 | + templateDOList.forEach(template -> { | ||
| 61 | + templateCode2ChannelIdMap.put(template.getCode(), clientId); | ||
| 62 | + }); | ||
| 63 | + SmsTemplateConvert.INSTANCE.convert(templateDOList); | ||
| 64 | + } | ||
| 61 | }); | 65 | }); |
| 62 | } | 66 | } |
| 63 | 67 | ||
| 64 | - // TODO FROM 芋艿 to ZZF:channelMapper 嘿,保持命名统一。 | 68 | + // TODO FROM 芋艿 to ZZF:channelMapper 嘿,保持命名统一。 DONE |
| 65 | @Resource | 69 | @Resource |
| 66 | - private SmsChannelMapper mapper; | 70 | + private SysSmsChannelMapper channelMapper; |
| 67 | 71 | ||
| 68 | @Resource | 72 | @Resource |
| 69 | - private SmsTemplateMapper templateMapper; | 73 | + private SysSmsTemplateMapper templateMapper; |
| 70 | 74 | ||
| 71 | @Override | 75 | @Override |
| 72 | - public PageResult<SmsChannelDO> pageChannels(SmsChannelPageReqVO reqVO) { | ||
| 73 | - return SmsChannelConvert.INSTANCE.convertPage(mapper.selectChannelPage(reqVO)); | 76 | + public PageResult<SysSmsChannelDO> pageSmsChannels(SmsChannelPageReqVO reqVO) { |
| 77 | + return SmsChannelConvert.INSTANCE.convertPage(channelMapper.selectChannelPage(reqVO)); | ||
| 74 | } | 78 | } |
| 75 | 79 | ||
| 76 | @Override | 80 | @Override |
| 77 | - public Long createChannel(SmsChannelCreateReqVO reqVO) { | ||
| 78 | - SmsChannelDO channelDO = SmsChannelConvert.INSTANCE.convert(reqVO); | ||
| 79 | - mapper.insert(channelDO); | 81 | + public Long createSmsChannel(SmsChannelCreateReqVO reqVO) { |
| 82 | + SysSmsChannelDO channelDO = SmsChannelConvert.INSTANCE.convert(reqVO); | ||
| 83 | + channelMapper.insert(channelDO); | ||
| 80 | return channelDO.getId(); | 84 | return channelDO.getId(); |
| 81 | } | 85 | } |
| 82 | 86 | ||
| 83 | @Override | 87 | @Override |
| 84 | - public List<SmsChannelEnumRespVO> getChannelEnums() { | 88 | + public List<SmsChannelEnumRespVO> getSmsChannelEnums() { |
| 85 | return SmsChannelConvert.INSTANCE.convertEnum(Arrays.asList(SmsChannelEnum.values())); | 89 | return SmsChannelConvert.INSTANCE.convertEnum(Arrays.asList(SmsChannelEnum.values())); |
| 86 | } | 90 | } |
| 87 | 91 | ||
| 88 | @Override | 92 | @Override |
| 89 | - public AbstractSmsClient<?> getClient(String templateCode) { | ||
| 90 | - return smsClientFactory.getClient(templateCode2ChannelIdMap.get(templateCode)); | 93 | + public AbstractSmsClient getSmsClient(String templateCode) { |
| 94 | + return clientFactory.getClient(templateCode2ChannelIdMap.get(templateCode)); | ||
| 95 | + } | ||
| 96 | + | ||
| 97 | + @Override | ||
| 98 | + public String getSmsTemplateApiIdByCode(String templateCode) { | ||
| 99 | + return clientFactory.getTemplateApiIdByCode(templateCode); | ||
| 91 | } | 100 | } |
| 92 | 101 | ||
| 93 | @Override | 102 | @Override |
| 94 | - public List<SmsChannelAllVO> listChannelAllEnabledInfo() { | ||
| 95 | - List<SmsChannelDO> channelDOList = mapper.selectEnabledList(); | 103 | + public List<SmsChannelAllVO> listSmsChannelAllEnabledInfo() { |
| 104 | + List<SysSmsChannelDO> channelDOList = channelMapper.selectEnabledList(); | ||
| 96 | if (ObjectUtil.isNull(channelDOList)) { | 105 | if (ObjectUtil.isNull(channelDOList)) { |
| 97 | return null; | 106 | return null; |
| 98 | } | 107 | } |
| @@ -100,7 +109,7 @@ public class SmsChannelServiceImpl implements SmsChannelService { | @@ -100,7 +109,7 @@ public class SmsChannelServiceImpl implements SmsChannelService { | ||
| 100 | 109 | ||
| 101 | channelAllVOList.forEach(smsChannelDO -> { | 110 | channelAllVOList.forEach(smsChannelDO -> { |
| 102 | 111 | ||
| 103 | - List<SmsTemplateDO> templateDOList = templateMapper.selectListByChannelId(smsChannelDO.getId()); | 112 | + List<SysSmsTemplateDO> templateDOList = templateMapper.selectListByChannelId(smsChannelDO.getId()); |
| 104 | if (ObjectUtil.isNull(templateDOList)) { | 113 | if (ObjectUtil.isNull(templateDOList)) { |
| 105 | templateDOList = new ArrayList<>(); | 114 | templateDOList = new ArrayList<>(); |
| 106 | } | 115 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SmsLogServiceImpl.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SysSmsLogServiceImpl.java
| @@ -3,14 +3,12 @@ package cn.iocoder.dashboard.modules.system.service.sms.impl; | @@ -3,14 +3,12 @@ package cn.iocoder.dashboard.modules.system.service.sms.impl; | ||
| 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; |
| 5 | import cn.iocoder.dashboard.framework.sms.core.SmsResult; | 5 | import cn.iocoder.dashboard.framework.sms.core.SmsResult; |
| 6 | -import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsChannelAllVO; | ||
| 7 | -import cn.iocoder.dashboard.modules.system.controller.sms.vo.SmsTemplateVO; | ||
| 8 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms.SmsLogMapper; | ||
| 9 | -import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SmsLogDO; | 6 | +import cn.iocoder.dashboard.framework.sms.core.property.SmsChannelProperty; |
| 7 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dao.sms.SysSmsLogMapper; | ||
| 8 | +import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.sms.SysSmsLogDO; | ||
| 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.SmsLogService; | 10 | +import cn.iocoder.dashboard.modules.system.service.sms.SysSmsLogService; |
| 12 | import cn.iocoder.dashboard.util.json.JsonUtils; | 11 | import cn.iocoder.dashboard.util.json.JsonUtils; |
| 13 | -import cn.iocoder.dashboard.util.string.StrUtils; | ||
| 14 | import org.springframework.stereotype.Service; | 12 | import org.springframework.stereotype.Service; |
| 15 | 13 | ||
| 16 | import javax.annotation.Resource; | 14 | import javax.annotation.Resource; |
| @@ -23,42 +21,41 @@ import java.util.List; | @@ -23,42 +21,41 @@ import java.util.List; | ||
| 23 | * @date 2021/1/25 9:25 | 21 | * @date 2021/1/25 9:25 |
| 24 | */ | 22 | */ |
| 25 | @Service | 23 | @Service |
| 26 | -public class SmsLogServiceImpl implements SmsLogService { | 24 | +public class SysSmsLogServiceImpl implements SysSmsLogService { |
| 27 | 25 | ||
| 28 | @Resource | 26 | @Resource |
| 29 | - private SmsLogMapper smsLogMapper; | 27 | + private SysSmsLogMapper logMapper; |
| 30 | 28 | ||
| 31 | @Override | 29 | @Override |
| 32 | - public Long beforeSendLog(SmsBody smsBody, List<String> targetPhones, AbstractSmsClient<?> client, Boolean isAsync) { | ||
| 33 | - SmsLogDO smsLog = new SmsLogDO(); | 30 | + public Long beforeSendLog(SmsBody smsBody, List<String> targetPhones, AbstractSmsClient client, Boolean isAsync) { |
| 31 | + SysSmsLogDO smsLog = new SysSmsLogDO(); | ||
| 34 | if (smsBody.getSmsLogId() != null) { | 32 | if (smsBody.getSmsLogId() != null) { |
| 35 | smsLog.setId(smsBody.getSmsLogId()); | 33 | smsLog.setId(smsBody.getSmsLogId()); |
| 36 | smsLog.setSendStatus(SmsSendStatusEnum.SENDING.getStatus()); | 34 | smsLog.setSendStatus(SmsSendStatusEnum.SENDING.getStatus()); |
| 37 | - smsLogMapper.updateById(smsLog); | 35 | + logMapper.updateById(smsLog); |
| 38 | return smsBody.getSmsLogId(); | 36 | return smsBody.getSmsLogId(); |
| 39 | } else { | 37 | } else { |
| 40 | - SmsChannelAllVO property = client.getProperty(); | ||
| 41 | - SmsTemplateVO smsTemplate = property.getTemplateByTemplateCode(smsBody.getTemplateCode()); | 38 | + SmsChannelProperty property = client.getProperty(); |
| 42 | 39 | ||
| 43 | smsLog.setChannelCode(property.getCode()) | 40 | smsLog.setChannelCode(property.getCode()) |
| 44 | .setChannelId(property.getId()) | 41 | .setChannelId(property.getId()) |
| 45 | - .setTemplateCode(smsTemplate.getCode()) | 42 | + .setTemplateCode(smsBody.getTemplateCode()) |
| 46 | .setPhones(JsonUtils.toJsonString(targetPhones)) | 43 | .setPhones(JsonUtils.toJsonString(targetPhones)) |
| 47 | - .setContent(StrUtils.replace(smsTemplate.getContent(), smsBody.getParams())); | 44 | + .setContent(smsBody.getParams().toString()); |
| 48 | 45 | ||
| 49 | if (isAsync) { | 46 | if (isAsync) { |
| 50 | smsLog.setSendStatus(SmsSendStatusEnum.ASYNC.getStatus()); | 47 | smsLog.setSendStatus(SmsSendStatusEnum.ASYNC.getStatus()); |
| 51 | } else { | 48 | } else { |
| 52 | smsLog.setSendStatus(SmsSendStatusEnum.SENDING.getStatus()); | 49 | smsLog.setSendStatus(SmsSendStatusEnum.SENDING.getStatus()); |
| 53 | } | 50 | } |
| 54 | - smsLogMapper.insert(smsLog); | 51 | + logMapper.insert(smsLog); |
| 55 | return smsLog.getId(); | 52 | return smsLog.getId(); |
| 56 | } | 53 | } |
| 57 | } | 54 | } |
| 58 | 55 | ||
| 59 | @Override | 56 | @Override |
| 60 | - public void afterSendLog(Long logId, SmsResult<?> result) { | ||
| 61 | - SmsLogDO smsLog = new SmsLogDO(); | 57 | + public void afterSendLog(Long logId, SmsResult result) { |
| 58 | + SysSmsLogDO smsLog = new SysSmsLogDO(); | ||
| 62 | smsLog.setId(logId); | 59 | smsLog.setId(logId); |
| 63 | if (result.getSuccess()) { | 60 | if (result.getSuccess()) { |
| 64 | smsLog.setSendStatus(SmsSendStatusEnum.SUCCESS.getStatus()); | 61 | smsLog.setSendStatus(SmsSendStatusEnum.SUCCESS.getStatus()); |
| @@ -66,7 +63,7 @@ public class SmsLogServiceImpl implements SmsLogService { | @@ -66,7 +63,7 @@ public class SmsLogServiceImpl implements SmsLogService { | ||
| 66 | smsLog.setSendStatus(SmsSendStatusEnum.FAIL.getStatus()); | 63 | smsLog.setSendStatus(SmsSendStatusEnum.FAIL.getStatus()); |
| 67 | smsLog.setRemark(result.getMessage() + JsonUtils.toJsonString(result.getResult())); | 64 | smsLog.setRemark(result.getMessage() + JsonUtils.toJsonString(result.getResult())); |
| 68 | } | 65 | } |
| 69 | - smsLogMapper.updateById(smsLog); | 66 | + logMapper.updateById(smsLog); |
| 70 | } | 67 | } |
| 71 | 68 | ||
| 72 | } | 69 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SmsServiceImpl.java renamed to src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SysSmsServiceImpl.java
| @@ -4,9 +4,9 @@ import cn.iocoder.dashboard.framework.sms.client.AbstractSmsClient; | @@ -4,9 +4,9 @@ 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; |
| 5 | import cn.iocoder.dashboard.framework.sms.core.SmsResult; | 5 | import cn.iocoder.dashboard.framework.sms.core.SmsResult; |
| 6 | import cn.iocoder.dashboard.modules.system.mq.producer.sms.SmsProducer; | 6 | import cn.iocoder.dashboard.modules.system.mq.producer.sms.SmsProducer; |
| 7 | -import cn.iocoder.dashboard.modules.system.service.sms.SmsChannelService; | ||
| 8 | -import cn.iocoder.dashboard.modules.system.service.sms.SmsLogService; | ||
| 9 | -import cn.iocoder.dashboard.modules.system.service.sms.SmsService; | 7 | +import cn.iocoder.dashboard.modules.system.service.sms.SysSmsChannelService; |
| 8 | +import cn.iocoder.dashboard.modules.system.service.sms.SysSmsLogService; | ||
| 9 | +import cn.iocoder.dashboard.modules.system.service.sms.SysSmsService; | ||
| 10 | import org.springframework.stereotype.Service; | 10 | import org.springframework.stereotype.Service; |
| 11 | 11 | ||
| 12 | import javax.annotation.Resource; | 12 | import javax.annotation.Resource; |
| @@ -19,34 +19,36 @@ import java.util.List; | @@ -19,34 +19,36 @@ import java.util.List; | ||
| 19 | * @date 2021/1/25 9:25 | 19 | * @date 2021/1/25 9:25 |
| 20 | */ | 20 | */ |
| 21 | @Service | 21 | @Service |
| 22 | -public class SmsServiceImpl implements SmsService { | 22 | +public class SysSmsServiceImpl implements SysSmsService { |
| 23 | 23 | ||
| 24 | @Resource | 24 | @Resource |
| 25 | - private SmsChannelService channelService; | 25 | + private SysSmsChannelService channelService; |
| 26 | 26 | ||
| 27 | @Resource | 27 | @Resource |
| 28 | - private SmsLogService smsLogService; | 28 | + private SysSmsLogService logService; |
| 29 | 29 | ||
| 30 | @Resource | 30 | @Resource |
| 31 | private SmsProducer smsProducer; | 31 | private SmsProducer smsProducer; |
| 32 | 32 | ||
| 33 | @Override | 33 | @Override |
| 34 | - public SmsResult<?> send(SmsBody smsBody, List<String> targetPhones) { | ||
| 35 | - AbstractSmsClient<?> client = channelService.getClient(smsBody.getTemplateCode()); | ||
| 36 | - Long logId = smsLogService.beforeSendLog(smsBody, targetPhones, client, false); | 34 | + public SmsResult send(SmsBody smsBody, List<String> targetPhones) { |
| 35 | + AbstractSmsClient client = channelService.getSmsClient(smsBody.getTemplateCode()); | ||
| 36 | + String templateApiId = channelService.getSmsTemplateApiIdByCode(smsBody.getTemplateCode()); | ||
| 37 | + Long logId = logService.beforeSendLog(smsBody, targetPhones, client, false); | ||
| 37 | 38 | ||
| 38 | - SmsResult<?> result = client.send(smsBody, targetPhones); | 39 | + SmsResult result = client.send(templateApiId, smsBody, targetPhones); |
| 39 | 40 | ||
| 40 | - smsLogService.afterSendLog(logId, result); | 41 | + logService.afterSendLog(logId, result); |
| 41 | 42 | ||
| 42 | return result; | 43 | return result; |
| 43 | } | 44 | } |
| 44 | 45 | ||
| 45 | // TODO FROM 芋艿 to ZZF:可能要讨论下,对于短信发送来说,貌似只提供异步发送即可。对于业务来说,一定不能依赖短信的发送结果。 | 46 | // TODO FROM 芋艿 to ZZF:可能要讨论下,对于短信发送来说,貌似只提供异步发送即可。对于业务来说,一定不能依赖短信的发送结果。 |
| 47 | + // 我的想法是1、很多短信,比如验证码,总还是需要知道是否发送成功的。2、别人可以不用,我们不能没有。3、实现挺简单的,个人觉得无需纠结。 | ||
| 46 | @Override | 48 | @Override |
| 47 | public void sendAsync(SmsBody smsBody, List<String> targetPhones) { | 49 | public void sendAsync(SmsBody smsBody, List<String> targetPhones) { |
| 48 | - AbstractSmsClient<?> client = channelService.getClient(smsBody.getTemplateCode()); | ||
| 49 | - smsLogService.beforeSendLog(smsBody, targetPhones, client, true); | 50 | + AbstractSmsClient client = channelService.getSmsClient(smsBody.getTemplateCode()); |
| 51 | + logService.beforeSendLog(smsBody, targetPhones, client, true); | ||
| 50 | smsProducer.sendSmsSendMessage(smsBody, targetPhones); | 52 | smsProducer.sendSmsSendMessage(smsBody, targetPhones); |
| 51 | } | 53 | } |
| 52 | } | 54 | } |
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SmsTemplateServiceImpl.java renamed to 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.service.sms.SmsTemplateService; | 3 | +import cn.iocoder.dashboard.modules.system.service.sms.SysSmsTemplateService; |
| 4 | import org.springframework.stereotype.Service; | 4 | import org.springframework.stereotype.Service; |
| 5 | 5 | ||
| 6 | /** | 6 | /** |
| @@ -10,5 +10,5 @@ import org.springframework.stereotype.Service; | @@ -10,5 +10,5 @@ import org.springframework.stereotype.Service; | ||
| 10 | * @date 2021/1/25 9:25 | 10 | * @date 2021/1/25 9:25 |
| 11 | */ | 11 | */ |
| 12 | @Service | 12 | @Service |
| 13 | -public class SmsTemplateServiceImpl implements SmsTemplateService { | 13 | +public class SysSmsTemplateServiceImpl implements SysSmsTemplateService { |
| 14 | } | 14 | } |