Commit cd2a01819b98cd43bcee34db0e48d23f9d3b810a

Authored by YunaiV
1 parent 2a4d9f43

短信 code review 2020-02-25

src/main/java/cn/iocoder/dashboard/framework/sms/client/AbstractSmsClient.java
@@ -22,7 +22,7 @@ public abstract class AbstractSmsClient implements SmsClient { @@ -22,7 +22,7 @@ public abstract class AbstractSmsClient implements SmsClient {
22 protected final SmsChannelProperty channelVO; 22 protected final SmsChannelProperty channelVO;
23 23
24 /** 24 /**
25 - * 构造阿里云短信发送处理 25 + * 构造阿里云短信发送处理 TODO FROM 芋艿 to zzf:貌似注释不对
26 * 26 *
27 * @param property 阿里云短信配置 27 * @param property 阿里云短信配置
28 */ 28 */
@@ -30,13 +30,12 @@ public abstract class AbstractSmsClient implements SmsClient { @@ -30,13 +30,12 @@ public abstract class AbstractSmsClient implements SmsClient {
30 this.channelVO = property; 30 this.channelVO = property;
31 } 31 }
32 32
33 -  
34 public SmsChannelProperty getProperty() { 33 public SmsChannelProperty getProperty() {
35 return channelVO; 34 return channelVO;
36 } 35 }
37 36
38 @Override 37 @Override
39 - public SmsResult send(String templateApiId, SmsBody smsBody, Collection<String> targets) { 38 + public final SmsResult send(String templateApiId, SmsBody smsBody, Collection<String> targets) {
40 SmsResult result; 39 SmsResult result;
41 try { 40 try {
42 beforeSend(templateApiId, smsBody, targets); 41 beforeSend(templateApiId, smsBody, targets);
@@ -50,13 +49,13 @@ public abstract class AbstractSmsClient implements SmsClient { @@ -50,13 +49,13 @@ public abstract class AbstractSmsClient implements SmsClient {
50 return result; 49 return result;
51 } 50 }
52 51
53 -  
54 /** 52 /**
55 * 发送消息 53 * 发送消息
56 * 54 *
57 * @param templateApiId 短信模板唯一标识 55 * @param templateApiId 短信模板唯一标识
58 * @param smsBody 消息内容 56 * @param smsBody 消息内容
59 * @param targets 发送对象列表 57 * @param targets 发送对象列表
  58 + * @throws Exception 调用发送失败,抛出异常
60 * @return 短信发送结果 59 * @return 短信发送结果
61 */ 60 */
62 public abstract SmsResult doSend(String templateApiId, SmsBody smsBody, Collection<String> targets) throws Exception; 61 public abstract SmsResult doSend(String templateApiId, SmsBody smsBody, Collection<String> targets) throws Exception;
@@ -67,7 +66,7 @@ public abstract class AbstractSmsClient implements SmsClient { @@ -67,7 +66,7 @@ public abstract class AbstractSmsClient implements SmsClient {
67 protected void afterSend(String templateApiId, SmsBody smsBody, Collection<String> targets, SmsResult result) throws Exception { 66 protected void afterSend(String templateApiId, SmsBody smsBody, Collection<String> targets, SmsResult result) throws Exception {
68 } 67 }
69 68
70 - 69 + // TODO FROM 芋艿 to zzf:可以考虑抽到 SmsResult 里
71 SmsResult failResult(String message) { 70 SmsResult failResult(String message) {
72 SmsResult resultBody = new SmsResult(); 71 SmsResult resultBody = new SmsResult();
73 resultBody.setSuccess(false); 72 resultBody.setSuccess(false);
src/main/java/cn/iocoder/dashboard/framework/sms/client/AliyunSmsClient.java
@@ -58,16 +58,14 @@ public class AliyunSmsClient extends AbstractSmsClient { @@ -58,16 +58,14 @@ public class AliyunSmsClient extends AbstractSmsClient {
58 acsClient = new DefaultAcsClient(profile); 58 acsClient = new DefaultAcsClient(profile);
59 } 59 }
60 60
61 -  
62 @Override 61 @Override
63 public SmsResult doSend(String templateApiId, SmsBody smsBody, Collection<String> targets) throws Exception { 62 public SmsResult doSend(String templateApiId, SmsBody smsBody, Collection<String> targets) throws Exception {
64 SendSmsRequest request = new SendSmsRequest(); 63 SendSmsRequest request = new SendSmsRequest();
65 request.setSysMethod(MethodType.POST); 64 request.setSysMethod(MethodType.POST);
66 - request.setPhoneNumbers(StringUtils.join(targets, ",")); 65 + request.setPhoneNumbers(StringUtils.join(targets, ",")); // TODO FROM 芋艿 to zzf:统一使用 Hutool 工具类嘿。
67 request.setSignName(channelVO.getApiSignatureId()); 66 request.setSignName(channelVO.getApiSignatureId());
68 request.setTemplateCode(templateApiId); 67 request.setTemplateCode(templateApiId);
69 request.setTemplateParam(smsBody.getParamsStr()); 68 request.setTemplateParam(smsBody.getParamsStr());
70 - // TODO FROM 芋艿 TO zzf:try catch 咱是不是可以交给 abstract 来做。这样,异常处理,重试,限流等等,都可以酱紫 DONE  
71 SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); 69 SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
72 70
73 boolean result = OK.equals(sendSmsResponse.getCode()); 71 boolean result = OK.equals(sendSmsResponse.getCode());
@@ -78,7 +76,7 @@ public class AliyunSmsClient extends AbstractSmsClient { @@ -78,7 +76,7 @@ public class AliyunSmsClient extends AbstractSmsClient {
78 resultBody.setSuccess(result); 76 resultBody.setSuccess(result);
79 QuerySendDetailsRequest querySendDetailsRequest = new QuerySendDetailsRequest(); 77 QuerySendDetailsRequest querySendDetailsRequest = new QuerySendDetailsRequest();
80 querySendDetailsRequest.setBizId(sendSmsResponse.getBizId()); 78 querySendDetailsRequest.setBizId(sendSmsResponse.getBizId());
81 - 79 + // TODO FROM 芋艿 to zzf:发送完之后,基于短信平台回调,去更新回执状态。短信发送是否成功,和最终用户收到,是两个维度。这块有困惑,可以微信,我给个截图哈。
82 QuerySendDetailsResponse acsResponse = acsClient.getAcsResponse(querySendDetailsRequest); 80 QuerySendDetailsResponse acsResponse = acsClient.getAcsResponse(querySendDetailsRequest);
83 List<SmsResultDetail> resultDetailList = new ArrayList<>(Integer.parseInt(acsResponse.getTotalCount())); 81 List<SmsResultDetail> resultDetailList = new ArrayList<>(Integer.parseInt(acsResponse.getTotalCount()));
84 acsResponse.getSmsSendDetailDTOs().forEach(s -> { 82 acsResponse.getSmsSendDetailDTOs().forEach(s -> {
src/main/java/cn/iocoder/dashboard/framework/sms/core/SmsClientFactory.java
@@ -42,7 +42,6 @@ public class SmsClientFactory { @@ -42,7 +42,6 @@ public class SmsClientFactory {
42 * @return 客户端id(默认channelId) 42 * @return 客户端id(默认channelId)
43 */ 43 */
44 public Long createClient(SmsChannelProperty propertyVO) { 44 public Long createClient(SmsChannelProperty propertyVO) {
45 - // TODO FROM 芋艿 TO zzf:参数的校验,可以考虑统一使用 validation。 DONE  
46 AbstractSmsClient sender = createClient(SmsChannelEnum.getByCode(propertyVO.getCode()), propertyVO); 45 AbstractSmsClient sender = createClient(SmsChannelEnum.getByCode(propertyVO.getCode()), propertyVO);
47 smsSenderMap.put(propertyVO.getId(), sender); 46 smsSenderMap.put(propertyVO.getId(), sender);
48 return propertyVO.getId(); 47 return propertyVO.getId();
@@ -77,7 +76,7 @@ public class SmsClientFactory { @@ -77,7 +76,7 @@ public class SmsClientFactory {
77 * 添加或修改短信模板信息缓存 76 * 添加或修改短信模板信息缓存
78 */ 77 */
79 public void addOrUpdateTemplateCache(Collection<SmsTemplateProperty> templateProperties) { 78 public void addOrUpdateTemplateCache(Collection<SmsTemplateProperty> templateProperties) {
80 - templateProperties.forEach(s -> templatePropertyMap.put(s.getCode(), s)); 79 + templateProperties.forEach(s -> addOrUpdateTemplateCache(templateProperties));
81 } 80 }
82 81
83 82
@@ -102,4 +101,5 @@ public class SmsClientFactory { @@ -102,4 +101,5 @@ public class SmsClientFactory {
102 } 101 }
103 return smsTemplateProperty.getApiTemplateId(); 102 return smsTemplateProperty.getApiTemplateId();
104 } 103 }
  104 +
105 } 105 }
src/main/java/cn/iocoder/dashboard/framework/sms/core/SmsResult.java
@@ -14,7 +14,6 @@ public class SmsResult implements Serializable { @@ -14,7 +14,6 @@ public class SmsResult implements Serializable {
14 /** 14 /**
15 * 是否成功(发送短信的请求是否成功) 15 * 是否成功(发送短信的请求是否成功)
16 */ 16 */
17 - // TODO FROM 芋艿 to zzf:未来要加一个 code,将不同平台的短信失败的情况,做一次统一的收敛。 DONE  
18 private Boolean success; 17 private Boolean success;
19 18
20 /** 19 /**
@@ -30,7 +29,6 @@ public class SmsResult implements Serializable { @@ -30,7 +29,6 @@ public class SmsResult implements Serializable {
30 /** 29 /**
31 * 返回值 30 * 返回值
32 */ 31 */
33 - // TODO FROM 芋艿 to zzf:是不是统一各个平台的返回结果,这样对调用方来说统一。因为作为统一的短信客户端,最好让上层不太需要知道太具体。黑河诶 DONE  
34 private List<SmsResultDetail> result; 32 private List<SmsResultDetail> result;
35 33
36 } 34 }
src/main/java/cn/iocoder/dashboard/framework/sms/core/enums/SmsChannelEnum.java
@@ -4,7 +4,7 @@ import lombok.AllArgsConstructor; @@ -4,7 +4,7 @@ import lombok.AllArgsConstructor;
4 import lombok.Getter; 4 import lombok.Getter;
5 5
6 /** 6 /**
7 - * 短信渠道枚举 TODO FROM 芋艿 TO zzf:属于短信的枚举类,可以放到 framework/sms 下 DONE 7 + * 短信渠道枚举
8 * 8 *
9 * @author zzf 9 * @author zzf
10 * @date 2021/1/25 10:56 10 * @date 2021/1/25 10:56
@@ -16,7 +16,7 @@ public enum SmsChannelEnum { @@ -16,7 +16,7 @@ public enum SmsChannelEnum {
16 ALI("ALI", "阿里"), 16 ALI("ALI", "阿里"),
17 HUA_WEI("HUA_WEI", "华为"), 17 HUA_WEI("HUA_WEI", "华为"),
18 QI_NIU("QI_NIU", "七牛"), 18 QI_NIU("QI_NIU", "七牛"),
19 - TENCENT("TENCENT", "腾讯"); // TODO FROM 芋艿 to zzf:TEN 有后鼻音哈,要被马爸爸打了。。。 DONE 19 + TENCENT("TENCENT", "腾讯");
20 20
21 private final String code; 21 private final String code;
22 22
@@ -30,4 +30,5 @@ public enum SmsChannelEnum { @@ -30,4 +30,5 @@ public enum SmsChannelEnum {
30 } 30 }
31 return null; 31 return null;
32 } 32 }
  33 +
33 } 34 }
src/main/java/cn/iocoder/dashboard/framework/sms/core/property/SmsTemplateProperty.java
@@ -7,8 +7,6 @@ import javax.validation.constraints.NotEmpty; @@ -7,8 +7,6 @@ import javax.validation.constraints.NotEmpty;
7 7
8 /** 8 /**
9 * 渠道模板VO类 9 * 渠道模板VO类
10 - * TODO FROM 芋艿 TO zzf:模板是不是不要提供到 client 里面,而是交给 factory 统一维护就好。不然,模板修改时候,刷新 client 会比较麻烦。 DONE  
11 - *  
12 * 10 *
13 * @author zzf 11 * @author zzf
14 * @date 2021/1/25 17:03 12 * @date 2021/1/25 17:03
src/main/java/cn/iocoder/dashboard/modules/system/controller/sms/SmsChannelController.java
@@ -37,12 +37,10 @@ public class SmsChannelController { @@ -37,12 +37,10 @@ public class SmsChannelController {
37 return success(service.getSmsChannelEnums()); 37 return success(service.getSmsChannelEnums());
38 } 38 }
39 39
40 -  
41 @ApiOperation("添加消息渠道") 40 @ApiOperation("添加消息渠道")
42 @PostMapping("/create") 41 @PostMapping("/create")
43 public CommonResult<Long> add(@Validated @RequestBody SmsChannelCreateReqVO reqVO) { 42 public CommonResult<Long> add(@Validated @RequestBody SmsChannelCreateReqVO reqVO) {
44 return success(service.createSmsChannel(reqVO)); 43 return success(service.createSmsChannel(reqVO));
45 } 44 }
46 45
47 -  
48 } 46 }
src/main/java/cn/iocoder/dashboard/modules/system/mq/consumer/sms/SmsSendConsumer.java
@@ -24,7 +24,7 @@ public class SmsSendConsumer extends AbstractChannelMessageListener&lt;SmsSendMessa @@ -24,7 +24,7 @@ public class SmsSendConsumer extends AbstractChannelMessageListener&lt;SmsSendMessa
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][收到 发送短信 消息]"); // TODO FROM 芋艿 to zzf:log 如果要打,这里要内容打上。其他 Consumer 没打的原因,是没内容。。。
28 SmsResult send = sysSmsService.send(message.getSmsBody(), message.getTargetPhones()); 28 SmsResult send = sysSmsService.send(message.getSmsBody(), message.getTargetPhones());
29 } 29 }
30 30
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/SysSmsChannelService.java
@@ -18,9 +18,6 @@ import java.util.List; @@ -18,9 +18,6 @@ import java.util.List;
18 */ 18 */
19 public interface SysSmsChannelService { 19 public interface SysSmsChannelService {
20 20
21 - // TODO FROM 芋艿 to ZZF:SmsChannelService=》SysSmsChannelService,增加 Sys 前缀,算在系统模块里  
22 - // TODO FROM 芋艿 to ZZF:方法名,保持不去掉 Sms 前缀。虽然长点,嘿嘿  
23 -  
24 /** 21 /**
25 * 初始化短信渠道 22 * 初始化短信渠道
26 */ 23 */
src/main/java/cn/iocoder/dashboard/modules/system/service/sms/impl/SysSmsChannelServiceImpl.java
@@ -42,6 +42,7 @@ public class SysSmsChannelServiceImpl implements SysSmsChannelService { @@ -42,6 +42,7 @@ public class SysSmsChannelServiceImpl implements SysSmsChannelService {
42 @Autowired 42 @Autowired
43 private SmsClientFactory clientFactory; 43 private SmsClientFactory clientFactory;
44 44
  45 + // TODO FROM 芋艿 to zzf:方法要放在成员变量下面;
45 /** 46 /**
46 * 初始化短信客户端 47 * 初始化短信客户端
47 */ 48 */
@@ -65,7 +66,6 @@ public class SysSmsChannelServiceImpl implements SysSmsChannelService { @@ -65,7 +66,6 @@ public class SysSmsChannelServiceImpl implements SysSmsChannelService {
65 }); 66 });
66 } 67 }
67 68
68 - // TODO FROM 芋艿 to ZZF:channelMapper 嘿,保持命名统一。 DONE  
69 @Resource 69 @Resource
70 private SysSmsChannelMapper channelMapper; 70 private SysSmsChannelMapper channelMapper;
71 71