Pu Zhibing
2025-03-03 042ab498ee53e8f3c7cecf52f733e8c1c162dfb5
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PatrolTaskServiceImpl.java
@@ -188,89 +188,87 @@
      }
      taskDetail.setStatus(2);
      taskDetailService.updateById(taskDetail);
      PatrolTask patrolTask = this.selectById(taskDetail.getPatrolTaskId());
      //获取所有在线车船
      //2018年协议车辆在线
      List<VehicleOnline> vehicleOnlines2018 = VideoGateway.queryRuntimeInfoByCache(0);
      //2023年协议车辆在线
      List<VehicleOnline> vehicleOnlines203 = VideoGateway.locationRealTimeInfoCache(0);
      //获取当前任务中的车船信息
      List<TaskDetailVehicles> taskDetailVehicles = taskDetailVehiclesService.selectList(new EntityWrapper<TaskDetailVehicles>().eq("task_detail_id", id));
      //根据车辆数量,分组线程数
      int num;
      int threadCount;
      if(taskDetailVehicles.size() <= maxThreadCount){
         threadCount = taskDetailVehicles.size();
         num = 1;
      }else{
         num = taskDetailVehicles.size() / maxThreadCount;
         if(taskDetailVehicles.size() % maxThreadCount > 0){
            num++;
      if(!patrolTask.getImageModel().equals(ImageModelEnum.CONSTRUCTION_WASTE_LOAD.getCode())){
         //获取所有在线车船
         //2018年协议车辆在线
         List<VehicleOnline> vehicleOnlines2018 = VideoGateway.queryRuntimeInfoByCache(0);
         //2023年协议车辆在线
         List<VehicleOnline> vehicleOnlines203 = VideoGateway.locationRealTimeInfoCache(0);
         //获取当前任务中的车船信息
         List<TaskDetailVehicles> taskDetailVehicles = taskDetailVehiclesService.selectList(new EntityWrapper<TaskDetailVehicles>().eq("task_detail_id", id));
         //根据车辆数量,分组线程数
         int num;
         int threadCount;
         if(taskDetailVehicles.size() <= maxThreadCount){
            threadCount = taskDetailVehicles.size();
            num = 1;
         }else{
            num = taskDetailVehicles.size() / maxThreadCount;
            if(taskDetailVehicles.size() % maxThreadCount > 0){
               num++;
            }
            threadCount = taskDetailVehicles.size() / num;
            if(taskDetailVehicles.size() % num > 0){
               threadCount++;
            }
         }
         threadCount = taskDetailVehicles.size() / num;
         if(taskDetailVehicles.size() % num > 0){
            threadCount++;
         }
      }
      //定义线程池
      ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(threadCount, threadCount, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
      //定义多线程阻塞
      CountDownLatch countDownLatch = new CountDownLatch(threadCount);
      for (int i = 0; i < threadCount; i++) {
         int start = i * num;
         int end = (i + 1) * num;
         if((i + 1) == threadCount){
            end = taskDetailVehicles.size();
         }
         List<TaskDetailVehicles> vehicles = taskDetailVehicles.subList(start, end);
         threadPoolExecutor.execute(new Runnable() {
            @Override
            public void run() {
               for (TaskDetailVehicles taskDetailVehicle : vehicles) {
                  try {
                     taskDetailVehicle.setStartExecutionTime(LocalDateTime.now());
                     Integer taskDetailVehicleId = taskDetailVehicle.getId();
                     //车船类型:1 车辆设备 2 船舶设备
                     Integer vehicleType = taskDetailVehicle.getVehicleType();
                     //车船id
                     Integer vehicleId = taskDetailVehicle.getVehicleId();
                     VehicleOnline vehicleOnline1 = null;
                     for (VehicleOnline vehicleOnline : vehicleOnlines2018) {
                        if(null != vehicleOnline.getVehicleId() && vehicleOnline.getVehicleId().equals(vehicleId) &&
                              null != vehicleOnline.getVehicleType() && vehicleOnline.getVehicleType().equals(vehicleType)){
                           vehicleOnline1 = vehicleOnline;
                           String vehicleGpsProtocol = vehicleOnline.getVehicleGpsProtocol();
                           vehicleOnline1.setVehicleGpsProtocol("808-guangzhou".equals(vehicleGpsProtocol) ? "1" : "2");
                           break;
                        }
                     }
                     if(null == vehicleOnline1){
                        for (VehicleOnline vehicleOnline : vehicleOnlines203) {
         //定义线程池
         ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(threadCount, threadCount, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
         //定义多线程阻塞
         CountDownLatch countDownLatch = new CountDownLatch(threadCount);
         for (int i = 0; i < threadCount; i++) {
            int start = i * num;
            int end = (i + 1) * num;
            if((i + 1) == threadCount){
               end = taskDetailVehicles.size();
            }
            List<TaskDetailVehicles> vehicles = taskDetailVehicles.subList(start, end);
            threadPoolExecutor.execute(new Runnable() {
               @Override
               public void run() {
                  for (TaskDetailVehicles taskDetailVehicle : vehicles) {
                     try {
                        taskDetailVehicle.setStartExecutionTime(LocalDateTime.now());
                        Integer taskDetailVehicleId = taskDetailVehicle.getId();
                        //车船类型:1 车辆设备 2 船舶设备
                        Integer vehicleType = taskDetailVehicle.getVehicleType();
                        //车船id
                        Integer vehicleId = taskDetailVehicle.getVehicleId();
                        VehicleOnline vehicleOnline1 = null;
                        for (VehicleOnline vehicleOnline : vehicleOnlines2018) {
                           if(null != vehicleOnline.getVehicleId() && vehicleOnline.getVehicleId().equals(vehicleId) &&
                                 null != vehicleOnline.getVehicleType() && vehicleOnline.getVehicleType().equals(vehicleType)){
                              vehicleOnline1 = vehicleOnline;
                              vehicleOnline1.setVehicleGpsProtocol(vehicleOnline.getVehicleGpsProtocol());
                              String vehicleGpsProtocol = vehicleOnline.getVehicleGpsProtocol();
                              vehicleOnline1.setVehicleGpsProtocol("808-guangzhou".equals(vehicleGpsProtocol) ? "1" : "2");
                              break;
                           }
                        }
                     }
                     //不在线
                     if(null == vehicleOnline1){
                        taskDetailVehicle.setEndExecutionTime(LocalDateTime.now());
                        taskDetailVehicle.setStatus(4);
                        if(null == vehicleOnline1){
                           for (VehicleOnline vehicleOnline : vehicleOnlines203) {
                              if(null != vehicleOnline.getVehicleId() && vehicleOnline.getVehicleId().equals(vehicleId) &&
                                    null != vehicleOnline.getVehicleType() && vehicleOnline.getVehicleType().equals(vehicleType)){
                                 vehicleOnline1 = vehicleOnline;
                                 vehicleOnline1.setVehicleGpsProtocol(vehicleOnline.getVehicleGpsProtocol());
                                 break;
                              }
                           }
                        }
                        //不在线
                        if(null == vehicleOnline1){
                           taskDetailVehicle.setEndExecutionTime(LocalDateTime.now());
                           taskDetailVehicle.setStatus(4);
                           taskDetailVehiclesService.updateById(taskDetailVehicle);
                           continue;
                        }
                        taskDetailVehicle.setVehicleGpsProtocol(vehicleOnline1.getVehicleGpsProtocol());
                        taskDetailVehicle.setTerminalId(vehicleOnline1.getTerminalId());
                        taskDetailVehicle.setStatus(2);
                        taskDetailVehiclesService.updateById(taskDetailVehicle);
                        continue;
                     }
                     taskDetailVehicle.setVehicleGpsProtocol(vehicleOnline1.getVehicleGpsProtocol());
                     taskDetailVehicle.setTerminalId(vehicleOnline1.getTerminalId());
                     taskDetailVehicle.setStatus(2);
                     taskDetailVehiclesService.updateById(taskDetailVehicle);
                     //非倾倒模型,建筑垃圾倾倒模型由网关接口触发判断执行结果
                     if(!patrolTask.getImageModel().equals(ImageModelEnum.CONSTRUCTION_WASTE_LOAD.getCode())){
                        //成功
                        List<TaskDetailVehiclesChannel> taskDetailVehiclesChannels = taskDetailVehiclesChannelService.selectList(new EntityWrapper<TaskDetailVehiclesChannel>().eq("task_detail_vehicles_id", taskDetailVehicleId));
                        //开始发送拍照指令,获取照片地址
@@ -328,28 +326,29 @@
                        taskDetailVehicle.setEndExecutionTime(LocalDateTime.now());
                        taskDetailVehicle.setStatus(3);
                        taskDetailVehiclesService.updateById(taskDetailVehicle);
                     }catch (Exception e){
                        e.printStackTrace();
                        //失败
                        taskDetailVehicle.setEndExecutionTime(LocalDateTime.now());
                        taskDetailVehicle.setStatus(5);
                        taskDetailVehiclesService.updateById(taskDetailVehicle);
                     }
                  }catch (Exception e){
                     e.printStackTrace();
                     //失败
                     taskDetailVehicle.setEndExecutionTime(LocalDateTime.now());
                     taskDetailVehicle.setStatus(5);
                     taskDetailVehiclesService.updateById(taskDetailVehicle);
                  }
                  //当前线程执行完成后减少等待数
                  countDownLatch.countDown();
               }
               //当前线程执行完成后减少等待数
               countDownLatch.countDown();
            }
         });
            });
         }
         try {
            countDownLatch.await();
         } catch (InterruptedException e) {
            throw new RuntimeException(e);
         }
         int count = taskDetailVehiclesService.selectCount(new EntityWrapper<TaskDetailVehicles>().eq("task_detail_id", id).eq("status", 5));
         taskDetail.setStatus(count > 0 ? 4 : 3);
         taskDetailService.updateById(taskDetail);
      }
      try {
         countDownLatch.await();
      } catch (InterruptedException e) {
         throw new RuntimeException(e);
      }
      int count = taskDetailVehiclesService.selectCount(new EntityWrapper<TaskDetailVehicles>().eq("task_detail_id", id).eq("status", 5));
      taskDetail.setStatus(count > 0 ? 4 : 3);
      taskDetailService.updateById(taskDetail);
   }