Explorar o código

fix(阿里云短信): 解决短信模板和标签只能查询第一页数据问题 (#257)

bestfeng1020 %!s(int64=2) %!d(string=hai) anos
pai
achega
e6e400b365

+ 36 - 6
jetlinks-components/notify-component/notify-sms/src/main/java/org/jetlinks/community/notify/sms/aliyun/AliyunSmsNotifier.java

@@ -32,7 +32,10 @@ import reactor.core.publisher.Mono;
 import reactor.core.scheduler.Schedulers;
 
 import javax.annotation.Nonnull;
+import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -164,24 +167,51 @@ public class AliyunSmsNotifier extends AbstractNotifier<AliyunSmsTemplate> {
      * @return 短信签名集合
      */
     public Flux<SmsSign> getSmsSigns() {
-        return Mono
-            .fromCallable(() -> client.getAcsResponse(new QuerySmsSignListRequest()))
-            .flatMapIterable(QuerySmsSignListResponse::getSmsSignList)
+        return doQuerySmsSigns(new AtomicInteger(0), 50)
+            .flatMapIterable(Function.identity())
             .map(SmsSign::of)
             .as(FluxTracer.create("/aliyun/sms/sign"))
             .onErrorResume(err -> Mono.empty());
     }
 
+
     /**
      * @return 短信模板集合
      */
     public Flux<SmsTemplate> getSmsTemplates() {
-        return Mono
-            .fromCallable(() -> client.getAcsResponse(new QuerySmsTemplateListRequest()))
-            .flatMapIterable(QuerySmsTemplateListResponse::getSmsTemplateList)
+        return doQuerySmsTemplates(new AtomicInteger(0), 50)
+            .flatMapIterable(Function.identity())
             .map(SmsTemplate::of)
             .as(FluxTracer.create("/aliyun/sms/template"))
             .onErrorResume(err -> Mono.empty());
+    }
+
 
+    public Flux<List<QuerySmsSignListResponse.QuerySmsSignDTO>> doQuerySmsSigns(AtomicInteger pageIndex, int pageSize) {
+        QuerySmsSignListRequest request = new QuerySmsSignListRequest();
+        request.setPageSize(pageSize);
+        request.setPageIndex(pageIndex.incrementAndGet());
+        return Mono
+            .fromCallable(() -> client.getAcsResponse(request).getSmsSignList())
+            .expand(dtos -> {
+                if (dtos.size() == pageSize){
+                    return doQuerySmsSigns(pageIndex, pageSize);
+                }
+                return Flux.empty();
+            });
+    }
+
+    public Flux<List<QuerySmsTemplateListResponse.SmsStatsResultDTO>> doQuerySmsTemplates(AtomicInteger pageIndex, int pageSize) {
+        QuerySmsTemplateListRequest request = new QuerySmsTemplateListRequest();
+        request.setPageSize(pageSize);
+        request.setPageIndex(pageIndex.incrementAndGet());
+        return Mono
+            .fromCallable(() -> client.getAcsResponse(request).getSmsTemplateList())
+            .expand(dtos -> {
+                if (dtos.size() == pageSize){
+                    return doQuerySmsTemplates(pageIndex, pageSize);
+                }
+                return Flux.empty();
+            });
     }
 }

+ 1 - 1
jetlinks-components/notify-component/notify-sms/src/main/java/org/jetlinks/community/notify/sms/aliyun/web/AliyunSmsController.java

@@ -41,7 +41,7 @@ public class AliyunSmsController {
 
     @GetMapping("/{configId}/templates")
     @QueryAction
-    @Operation(summary = "获取短信标签列表")
+    @Operation(summary = "获取短信模板列表")
     public Flux<SmsTemplate> getAliyunSmsTemplates(@PathVariable String configId) {
         return notifierManager
             .getNotifier(DefaultNotifyType.sms, configId)