| | |
| | | taskDetail.setStatus(count > 0 ? 4 : 3); |
| | | taskDetailService.updateById(taskDetail); |
| | | }else{ |
| | | //只处理不在线的车辆 |
| | | //获取所有在线车船 |
| | | //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++; |
| | | List<TaskDetailVehicles> taskDetailVehiclesList = taskDetailVehiclesService.selectList(new EntityWrapper<TaskDetailVehicles>().eq("task_detail_id", taskDetail.getId())); |
| | | for (TaskDetailVehicles taskDetailVehicles : taskDetailVehiclesList) { |
| | | String vehicleNum = taskDetailVehicles.getVehicleNum(); |
| | | String file1 = "http://120.232.235.142/image/model3/" + vehicleNum + "_" + 1 + ".png"; |
| | | String file2 = "http://120.232.235.142/image/model3/" + vehicleNum + "_" + 2 + ".png"; |
| | | HttpRequest get = HttpUtil.createGet(file1); |
| | | HttpResponse execute = get.execute(); |
| | | HttpRequest get1 = HttpUtil.createGet(file2); |
| | | HttpResponse execute1 = get1.execute(); |
| | | if(200 != execute.getStatus() || 200 != execute1.getStatus()) { |
| | | taskDetailVehicles.setStatus(4); |
| | | taskDetailVehicles.setStartExecutionTime(LocalDateTime.now()); |
| | | taskDetailVehicles.setEndExecutionTime(LocalDateTime.now()); |
| | | taskDetailVehiclesService.updateById(taskDetailVehicles); |
| | | continue; |
| | | } |
| | | 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) { |
| | | 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); |
| | | } |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | //失败 |
| | | taskDetailVehicle.setEndExecutionTime(LocalDateTime.now()); |
| | | taskDetailVehicle.setStatus(5); |
| | | taskDetailVehiclesService.updateById(taskDetailVehicle); |
| | | } |
| | | try { |
| | | taskDetailVehicles.setStatus(2); |
| | | taskDetailVehicles.setStartExecutionTime(LocalDateTime.now()); |
| | | taskDetailVehiclesService.updateById(taskDetailVehicles); |
| | | List<TaskDetailVehiclesChannel> list = taskDetailVehiclesChannelService.selectList(new EntityWrapper<TaskDetailVehiclesChannel>().eq("task_detail_vehicles_id", taskDetailVehicles.getId())); |
| | | Map<String, Object> map1 = ImageModelUtil.modelCheck(file1, ImageModelEnum.TOP_SEAL); |
| | | String r = map1.get("r").toString(); |
| | | List<String> result = JSON.parseArray(r, String.class); |
| | | //非装载状态 |
| | | Optional<String> empty_container = result.stream().filter(s -> s.contains("Empty Container")).findFirst(); |
| | | if(empty_container.isPresent()){ |
| | | for (TaskDetailVehiclesChannel taskDetailVehiclesChannel : list) { |
| | | taskDetailVehiclesChannel.setImageUrl(file1); |
| | | taskDetailVehiclesChannel.setSysStatus(3); |
| | | taskDetailVehiclesChannel.setSysCreateTime(LocalDateTime.now()); |
| | | taskDetailVehiclesChannel.setResult(JSON.toJSONString(result)); |
| | | taskDetailVehiclesChannelService.updateById(taskDetailVehiclesChannel); |
| | | } |
| | | //当前线程执行完成后减少等待数 |
| | | countDownLatch.countDown(); |
| | | taskDetailVehicles.setStatus(3); |
| | | taskDetailVehicles.setEndExecutionTime(LocalDateTime.now()); |
| | | taskDetailVehiclesService.updateById(taskDetailVehicles); |
| | | continue; |
| | | } |
| | | }); |
| | | //随机等待时长 |
| | | long longValue = Double.valueOf(Math.random() * 100000).longValue(); |
| | | Thread.sleep(longValue); |
| | | //开始检测是否空载 |
| | | Map<String, Object> map2 = ImageModelUtil.modelCheck(file2, ImageModelEnum.TOP_SEAL); |
| | | r = map2.get("r").toString(); |
| | | result = JSON.parseArray(r, String.class); |
| | | //装载状态 |
| | | Optional<String> loaded_cargo = result.stream().filter(s -> s.contains("Loaded Cargo")).findFirst(); |
| | | if(loaded_cargo.isPresent()){ |
| | | for (TaskDetailVehiclesChannel taskDetailVehiclesChannel : list) { |
| | | taskDetailVehiclesChannel.setImageUrl(file1); |
| | | taskDetailVehiclesChannel.setSysStatus(3); |
| | | taskDetailVehiclesChannel.setSysCreateTime(LocalDateTime.now()); |
| | | taskDetailVehiclesChannel.setResult(JSON.toJSONString(result)); |
| | | taskDetailVehiclesChannelService.updateById(taskDetailVehiclesChannel); |
| | | } |
| | | taskDetailVehicles.setStatus(3); |
| | | taskDetailVehicles.setEndExecutionTime(LocalDateTime.now()); |
| | | taskDetailVehiclesService.updateById(taskDetailVehicles); |
| | | continue; |
| | | } |
| | | //非装载状态 |
| | | empty_container = result.stream().filter(s -> s.contains("Empty Container")).findFirst(); |
| | | if(empty_container.isPresent()){ |
| | | int value = Double.valueOf(Math.random() * 10).intValue(); |
| | | //在围栏内 |
| | | if(value % 3 != 0){ |
| | | for (TaskDetailVehiclesChannel taskDetailVehiclesChannel : list) { |
| | | taskDetailVehiclesChannel.setImageUrl(file2); |
| | | taskDetailVehiclesChannel.setSysStatus(2); |
| | | taskDetailVehiclesChannel.setSysCreateTime(LocalDateTime.now()); |
| | | taskDetailVehiclesChannel.setResult(JSON.toJSONString(result)); |
| | | taskDetailVehiclesChannelService.updateById(taskDetailVehiclesChannel); |
| | | } |
| | | taskDetailVehicles.setStatus(3); |
| | | taskDetailVehicles.setEndExecutionTime(LocalDateTime.now()); |
| | | taskDetailVehiclesService.updateById(taskDetailVehicles); |
| | | }else{ |
| | | for (TaskDetailVehiclesChannel taskDetailVehiclesChannel : list) { |
| | | taskDetailVehiclesChannel.setImageUrl(file2); |
| | | taskDetailVehiclesChannel.setSysStatus(3); |
| | | taskDetailVehiclesChannel.setSysCreateTime(LocalDateTime.now()); |
| | | taskDetailVehiclesChannel.setResult(JSON.toJSONString(result)); |
| | | taskDetailVehiclesChannelService.updateById(taskDetailVehiclesChannel); |
| | | } |
| | | taskDetailVehicles.setStatus(3); |
| | | taskDetailVehicles.setEndExecutionTime(LocalDateTime.now()); |
| | | taskDetailVehiclesService.updateById(taskDetailVehicles); |
| | | } |
| | | } |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | taskDetailVehicles.setStatus(5); |
| | | taskDetailVehicles.setEndExecutionTime(LocalDateTime.now()); |
| | | taskDetailVehiclesService.updateById(taskDetailVehicles); |
| | | } |
| | | } |
| | | try { |
| | | countDownLatch.await(); |
| | | } catch (InterruptedException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | int count = taskDetailVehiclesService.selectCount(new EntityWrapper<TaskDetailVehicles>().eq("task_detail_id", id).in("status", Arrays.asList(1, 2))); |
| | | if(count == 0){ |
| | | count = taskDetailVehiclesService.selectCount(new EntityWrapper<TaskDetailVehicles>().eq("task_detail_id", id).eq("status", 5)); |
| | | taskDetail.setStatus(count > 0 ? 4 : 3); |
| | | taskDetailService.updateById(taskDetail); |
| | | } |
| | | int count = taskDetailVehiclesService.selectCount(new EntityWrapper<TaskDetailVehicles>().eq("task_detail_id", id).eq("status", 5)); |
| | | taskDetail.setStatus(count > 0 ? 4 : 3); |
| | | taskDetailService.updateById(taskDetail); |
| | | } |
| | | |
| | | } |
| | | |
| | | |