Commit a50db6bf7ff76dc3b323adedea3ef9ab979b3cd6

Authored by YunaiV
1 parent 0fd757fb

短信代码的 code review 2020-02-22

src/main/java/cn/iocoder/dashboard/common/enums/SmsChannelEnum.java
@@ -3,8 +3,11 @@ package cn.iocoder.dashboard.common.enums; @@ -3,8 +3,11 @@ package cn.iocoder.dashboard.common.enums;
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 +
6 /** 9 /**
7 - * 短信渠道枚举 10 + * 短信渠道枚举 TODO FROM 芋艿 TO zzf:属于短信的枚举类,可以放到 framework/sms 下
8 * 11 *
9 * @author zzf 12 * @author zzf
10 * @date 2021/1/25 10:56 13 * @date 2021/1/25 10:56
@@ -16,7 +19,7 @@ public enum SmsChannelEnum { @@ -16,7 +19,7 @@ public enum SmsChannelEnum {
16 ALI("ALI", "阿里"), 19 ALI("ALI", "阿里"),
17 HUA_WEI("HUA_WEI", "华为"), 20 HUA_WEI("HUA_WEI", "华为"),
18 QI_NIU("QI_NIU", "七牛"), 21 QI_NIU("QI_NIU", "七牛"),
19 - TEN_XUN("TEN_XUN", "腾讯"); 22 + TEN_XUN("TEN_XUN", "腾讯"); // TODO FROM 芋艿 to zzf:TEN 有后鼻音哈,要被马爸爸打了。。。
20 23
21 private final String code; 24 private final String code;
22 25
src/main/java/cn/iocoder/dashboard/framework/sms/client/AliyunSmsClient.java
@@ -60,7 +60,7 @@ public class AliyunSmsClient extends AbstractSmsClient<SendSmsResponse> { @@ -60,7 +60,7 @@ public class AliyunSmsClient extends AbstractSmsClient<SendSmsResponse> {
60 request.setSignName(channelVO.getApiSignatureId()); 60 request.setSignName(channelVO.getApiSignatureId());
61 request.setTemplateCode(channelVO.getTemplateByTemplateCode(smsBody.getTemplateCode()).getApiTemplateId()); 61 request.setTemplateCode(channelVO.getTemplateByTemplateCode(smsBody.getTemplateCode()).getApiTemplateId());
62 request.setTemplateParam(smsBody.getParamsStr()); 62 request.setTemplateParam(smsBody.getParamsStr());
63 - 63 + // TODO FROM 芋艿 TO zzf:try catch 咱是不是可以交给 abstract 来做。这样,异常处理,重试,限流等等,都可以酱紫
64 try { 64 try {
65 SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); 65 SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
66 66
src/main/java/cn/iocoder/dashboard/framework/sms/core/SmsClientFactory.java
@@ -33,6 +33,7 @@ public class SmsClientFactory { @@ -33,6 +33,7 @@ public class SmsClientFactory {
33 * @return 客户端id(默认channelId) 33 * @return 客户端id(默认channelId)
34 */ 34 */
35 public Long createClient(SmsChannelProperty propertyVO) { 35 public Long createClient(SmsChannelProperty propertyVO) {
  36 + // TODO FROM 芋艿 TO zzf:参数的校验,可以考虑统一使用 validation。
36 if (StrUtil.isBlank(propertyVO.getCode())) { 37 if (StrUtil.isBlank(propertyVO.getCode())) {
37 throw ServiceExceptionUtil.exception(PARAM_VALUE_IS_NULL, "短信渠道编码"); 38 throw ServiceExceptionUtil.exception(PARAM_VALUE_IS_NULL, "短信渠道编码");
38 } 39 }
src/main/java/cn/iocoder/dashboard/framework/sms/core/SmsResult.java
@@ -13,7 +13,7 @@ public class SmsResult<T> implements Serializable { @@ -13,7 +13,7 @@ public class SmsResult<T> implements Serializable {
13 /** 13 /**
14 * 是否成功 14 * 是否成功
15 */ 15 */
16 - private Boolean success; 16 + private Boolean success; // TODO FROM 芋艿 to zzf:未来要加一个 code,将不同平台的短信失败的情况,做一次统一的收敛。
17 17
18 /** 18 /**
19 * 提示 19 * 提示
@@ -23,5 +23,5 @@ public class SmsResult<T> implements Serializable { @@ -23,5 +23,5 @@ public class SmsResult<T> implements Serializable {
23 /** 23 /**
24 * 返回值 24 * 返回值
25 */ 25 */
26 - private T result; 26 + private T result; // TODO FROM 芋艿 to zzf:是不是统一各个平台的返回结果,这样对调用方来说统一。因为作为统一的短信客户端,最好让上层不太需要知道太具体。黑河诶
27 } 27 }
src/main/java/cn/iocoder/dashboard/framework/sms/core/property/SmsTemplateProperty.java
@@ -4,7 +4,7 @@ import lombok.Data; @@ -4,7 +4,7 @@ import lombok.Data;
4 import lombok.EqualsAndHashCode; 4 import lombok.EqualsAndHashCode;
5 5
6 /** 6 /**
7 - * 渠道模板VO类 7 + * 渠道模板VO类 TODO FROM 芋艿 TO zzf:模板是不是不要提供到 client 里面,而是交给 factory 统一维护就好。不然,模板修改时候,刷新 client 会比较麻烦。
8 * 8 *
9 * @author zzf 9 * @author zzf
10 * @date 2021/1/25 17:03 10 * @date 2021/1/25 17:03
src/main/java/cn/iocoder/dashboard/modules/system/mq/producer/sms/SmsProducer.java
@@ -25,6 +25,7 @@ public class SmsProducer { @@ -25,6 +25,7 @@ public class SmsProducer {
25 SmsSendMessage message = new SmsSendMessage(); 25 SmsSendMessage message = new SmsSendMessage();
26 message.setSmsBody(smsBody); 26 message.setSmsBody(smsBody);
27 message.setTargetPhones(targetPhoneList); 27 message.setTargetPhones(targetPhoneList);
  28 + // TODO FROM 芋艿 TO ZZF:这块等未来改哈。这个方法目前是广播消费,会导致每个节点都发送一次。等后续封装出 redis stream 消息
28 RedisMessageUtils.sendChannelMessage(stringRedisTemplate, message); 29 RedisMessageUtils.sendChannelMessage(stringRedisTemplate, message);
29 } 30 }
30 31
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SmsChannelService.java
@@ -18,6 +18,9 @@ import java.util.List; @@ -18,6 +18,9 @@ import java.util.List;
18 */ 18 */
19 public interface SmsChannelService { 19 public interface SmsChannelService {
20 20
  21 + // TODO FROM 芋艿 to ZZF:SmsChannelService=》SysSmsChannelService,增加 Sys 前缀,算在系统模块里
  22 + // TODO FROM 芋艿 to ZZF:方法名,保持不去掉 Sms 前缀。虽然长点,嘿嘿
  23 +
21 /** 24 /**
22 * 初始化短信渠道 25 * 初始化短信渠道
23 */ 26 */
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SmsLogService.java
@@ -22,6 +22,8 @@ public interface SmsLogService { @@ -22,6 +22,8 @@ public interface SmsLogService {
22 * @param isAsync 是否异步发送 22 * @param isAsync 是否异步发送
23 * @return 生成的日志id 23 * @return 生成的日志id
24 */ 24 */
  25 + // TODO FROM 芋艿 to ZZF: async 是针对发送的方式,对于日志不一定需要关心。这样,短信日志,实际就发送前插入,发送后更新结果
  26 + // TODO FROM 芋艿 to ZZF:短信日志,群发的情况,应该是每个手机一条哈。虽然是群发,但是可能部分成功,部分失败;对应到短信平台,实际也是多条。
25 Long beforeSendLog(SmsBody smsBody, List<String> targetPhones, AbstractSmsClient<?> client, Boolean isAsync); 27 Long beforeSendLog(SmsBody smsBody, List<String> targetPhones, AbstractSmsClient<?> client, Boolean isAsync);
26 28
27 /** 29 /**
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SmsChannelServiceImpl.java
@@ -61,7 +61,7 @@ public class SmsChannelServiceImpl implements SmsChannelService { @@ -61,7 +61,7 @@ public class SmsChannelServiceImpl implements SmsChannelService {
61 }); 61 });
62 } 62 }
63 63
64 - 64 + // TODO FROM 芋艿 to ZZF:channelMapper 嘿,保持命名统一。
65 @Resource 65 @Resource
66 private SmsChannelMapper mapper; 66 private SmsChannelMapper mapper;
67 67
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SmsServiceImpl.java
@@ -42,6 +42,7 @@ public class SmsServiceImpl implements SmsService { @@ -42,6 +42,7 @@ public class SmsServiceImpl implements SmsService {
42 return result; 42 return result;
43 } 43 }
44 44
  45 + // TODO FROM 芋艿 to ZZF:可能要讨论下,对于短信发送来说,貌似只提供异步发送即可。对于业务来说,一定不能依赖短信的发送结果。
45 @Override 46 @Override
46 public void sendAsync(SmsBody smsBody, List<String> targetPhones) { 47 public void sendAsync(SmsBody smsBody, List<String> targetPhones) {
47 AbstractSmsClient<?> client = channelService.getClient(smsBody.getTemplateCode()); 48 AbstractSmsClient<?> client = channelService.getClient(smsBody.getTemplateCode());