<p>@GetMapping(&quot;/queryCarsByCoachID&quot;)
public Result<Object> queryCarsByCoachID(Coach coach, HttpServletRequest request) {</p>
<pre><code>    //权限验证
    String token = (String)request.getAttribute(&quot;claims_coach&quot;);
    if(token == null || &quot;&quot;.equals(token)){
        throw new RuntimeException(&quot;权限不足!&quot;);
    }

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

    //调用方法查询出设备和地址经纬度
    List&lt;DeviceEntityDto&gt; deviceEntityDtoList = coachService.queryDeviceEntitiesByCoachIdAndCarModel(coach.getCoachId());

    // 创建一个线程池
    ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());

    // 创建一个CountDownLatch,用于线程同步
    CountDownLatch countDownLatch = new CountDownLatch(deviceEntityDtoList.size());

    List&lt;CompletableFuture&lt;Void&gt;&gt; futures = new ArrayList&lt;&gt;();

    for (DeviceEntityDto deviceEntityDto : deviceEntityDtoList){
        CompletableFuture&lt;Void&gt; future = CompletableFuture.supplyAsync(() -&gt; {
            // 查询地址经纬度
            if (!StringUtils.isEmpty(deviceEntityDto.getArea())){
                Map&lt;String,String&gt; addressMap = tengXunMapService.getLongitudeAndLatitudeByAddress(deviceEntityDto.getArea());
                if (!CollectionUtils.isEmpty(addressMap)){
                    deviceEntityDto.setLongitude(addressMap.get(&quot;lng&quot;));
                    deviceEntityDto.setLatitude(addressMap.get(&quot;lat&quot;));
                }
            }

            // 游戏端传递当前设备状态,显示状态(工作中/休息中)
            boolean existUser = ExternalCommunicationKit.existUser(deviceEntityDto.getDeviceId());
            deviceEntityDto.setWorkStatus(existUser ? 1 :0);

            // 线程执行完毕后,计数减一
            countDownLatch.countDown();
            return null;
        }, executorService);

        futures.add(future);
    }

    CompletableFuture&lt;Void&gt; allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));

    try {
        // 等待所有线程执行完毕
        allFutures.get();
    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    } finally {
        // 关闭线程池
        executorService.shutdown();
    }

    map.put(&quot;deviceEntities&quot;,deviceEntityDtoList);

    // 查询到学员传给前端
    log.info(&quot;查询车辆成功!&quot;);
    return new Result&lt;&gt;(ResultCode.SUCCESS,map);
}
</code></pre>
通过教练ID查询车辆信息 - 高效获取车辆位置和状态

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

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