//4.根据基站设备ID查询出训练场全部相关信息
@GetMapping("/queryTrainingGroundByBaseDeviceIDByAll")
public Result<Object> queryTrainingGroundByBaseDeviceIDByAll(long deviceId, HttpServletRequest request) {

    //权限验证
    String token = (String) request.getAttribute("claims_admin");
    if (token == null || "".equals(token)) {
        throw new RuntimeException("权限不足!");
    }

    //把查询到的的对象放入map集合
    Map<String, Object> map = new HashMap<>();

    //调用方法查询出训练场
    List<TrainingGroundDataDto> trainingGroundDataDtos = trainingGroundDataService.queryTrainingGroundDataByBaseDeviceIdByRegular(deviceId);

    //创建CompletableFuture列表
    List<CompletableFuture<Void>> futures = new ArrayList<>();

    //遍历训练场数据
    for (TrainingGroundDataDto trainingGroundDataDto : trainingGroundDataDtos) {
        //异步查询训练场科目二
        CompletableFuture<List<ProjectRouteMapData>> future2 = CompletableFuture.supplyAsync(() -> projectRouteMapDataService.queryProjectRouteMapDataByTrainingGroundIdAndType2(trainingGroundDataDto.getTrainingGroundId()));
        //异步查询训练场科目三
        CompletableFuture<List<ProjectRouteMapData>> future3 = CompletableFuture.supplyAsync(() -> projectRouteMapDataService.queryProjectRouteMapDataByTrainingGroundIdAndType3(trainingGroundDataDto.getTrainingGroundId()));

        //等待两个异步查询完成
        CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(future2, future3)
                .thenAcceptAsync(ignored -> {
                    try {
                        //将异步查询结果设置到训练场数据对象中
                        trainingGroundDataDto.setProjectRouteMapData2(future2.get());
                        trainingGroundDataDto.setProjectRouteMapData3(future3.get());
                    } catch (InterruptedException | ExecutionException e) {
                        e.printStackTrace();
                    }
                });

        //将CompletableFuture添加到列表中
        futures.add(combinedFuture);
    }

    //等待所有异步查询完成
    CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]))
            .thenRun(() -> {
                map.put("trainingGroundDatas", trainingGroundDataDtos);
                log.info("查询训练场ByID成功!");
            })
            .join();

    return new Result<>(ResultCode.SUCCESS, map);
}

原文地址: https://www.cveoy.top/t/topic/qqNQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录