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

This commit is contained in:
bestfeng1020 2023-04-07 15:57:47 +08:00 committed by GitHub
parent bf6e75876b
commit 7e5b898a7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 37 additions and 9 deletions

View File

@ -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,49 @@ 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();
});
}
}