From 05df94f5658524d5c404415ab63e95bc139d8b3f Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期一, 03 三月 2025 18:37:40 +0800
Subject: [PATCH] 修改模型3的bug

---
 guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PatrolTaskServiceImpl.java |  103 +++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 99 insertions(+), 4 deletions(-)

diff --git a/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PatrolTaskServiceImpl.java b/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PatrolTaskServiceImpl.java
index fe751f3..301bf0e 100644
--- a/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PatrolTaskServiceImpl.java
+++ b/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PatrolTaskServiceImpl.java
@@ -281,8 +281,6 @@
 											//2018 协议
 											String fileId = VideoGateway.cameraShot2018(terminalId, videoChannel, 0);
 											if(ToolUtil.isNotEmpty(fileId)){
-												//等待30秒
-												Thread.sleep(30000);
 												String fileUrl = VideoGateway.getCameraShotByFileId2018(terminalId, fileId, 0);
 												if(ToolUtil.isNotEmpty(fileUrl)){
 													taskDetailVehiclesChannel.setImageUrl(fileUrl);
@@ -301,8 +299,6 @@
 											//2023 协议
 											String fileId = VideoGateway.cameraShot2023(vehicleId, vehicleType, terminalId, videoChannel, 0);
 											if(ToolUtil.isNotEmpty(fileId)){
-												//等待30秒
-												Thread.sleep(30000);
 												String fileUrl = VideoGateway.getCameraShotByFileId2023(fileId, 0);
 												if(ToolUtil.isNotEmpty(fileUrl)){
 													taskDetailVehiclesChannel.setImageUrl(fileUrl);
@@ -347,6 +343,105 @@
 			int count = taskDetailVehiclesService.selectCount(new EntityWrapper<TaskDetailVehicles>().eq("task_detail_id", id).eq("status", 5));
 			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++;
+				}
+				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);
+							}
+						}
+						//当前线程执行完成后减少等待数
+						countDownLatch.countDown();
+					}
+				});
+			}
+			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);
+			}
 		}
 		
 	}

--
Gitblit v1.7.1