List<Future> futures = new ArrayList<Future>(count);
for (int i = 0; i < count; i += maxBatchGetItemSize) {
//查询一次 就把数据封装进jsonArray中,完成后吐出
int j = i + maxBatchGetItemSize;
if (j > count) {
j = count;
}
//按区间设置条件
JsonArray ids = sliceItemIDs(itemIDs, i, j);
if(ids.size() > 0) {
dbParam2.where(new JsonObject().put("_id", new JsonObject().put("$in", ids)));
futures.add(batchGetItemSize(dbParam2));
}
}
// 批量携程执行future 返回数据将按顺序返回
CompositeFuture.all(futures).onComplete(ar -> {
CompositeFuture arRt = ar.result();
JsonArray rts = new JsonArray();
for (int i = 0; i < count; i++) {
rts.addAll(arRt.resultAt(i));
}
//返回结果集
Handler.handle(
//无更新
Future.succeededFuture(rt.put("code", 0).put("data", rts))
);
});
protected Future<JsonArray> batchGetItemSize(DbDao dbParam) {
Promise<JsonArray> future = Promise.promise();
// 进行查询
model.findAll(dbParam, db_res -> {
if(db_res.succeeded()) {
future.complete(db_res.result());
}
});
return future.future();
}