From 65086c1346b2ce477516cb419e4d7932aa68fad0 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期一, 10 三月 2025 14:37:48 +0800
Subject: [PATCH] 修改导出bug

---
 guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PatrolTaskServiceImpl.java |  174 ++++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 108 insertions(+), 66 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..ae12f9c 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
@@ -1,5 +1,8 @@
 package com.stylefeng.guns.modular.system.service.impl;
 
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.stylefeng.guns.core.util.ToolUtil;
@@ -190,6 +193,105 @@
 		taskDetailService.updateById(taskDetail);
 		PatrolTask patrolTask = this.selectById(taskDetail.getPatrolTaskId());
 		if(!patrolTask.getImageModel().equals(ImageModelEnum.CONSTRUCTION_WASTE_LOAD.getCode())){
+			//获取当前任务中的车船信息
+			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();
+								taskDetailVehicle.setStatus(2);
+								taskDetailVehiclesService.updateById(taskDetailVehicle);
+								
+								//成功
+								List<TaskDetailVehiclesChannel> taskDetailVehiclesChannels = taskDetailVehiclesChannelService.selectList(new EntityWrapper<TaskDetailVehiclesChannel>().eq("task_detail_vehicles_id", taskDetailVehicleId));
+								//开始发送拍照指令,获取照片地址
+								for (TaskDetailVehiclesChannel taskDetailVehiclesChannel : taskDetailVehiclesChannels) {
+									try {
+										Integer videoChannel = taskDetailVehiclesChannel.getVideoChannel();
+										String imageModel = patrolTask.getImageModel();
+										String fileUrl = null;
+										if(imageModel.equals(ImageModelEnum.TOP_SEAL.getCode())){
+											fileUrl = "http://120.232.235.142/image/model1/" + taskDetailVehicle.getVehicleNum() + "_" + videoChannel + ".png";
+										}
+										if(imageModel.equals(ImageModelEnum.CAMERA_FAULT.getCode())){
+											fileUrl = "http://120.232.235.142/image/model2/" + taskDetailVehicle.getVehicleNum() + "_" + videoChannel + ".png";
+										}
+										HttpRequest get = HttpUtil.createGet(fileUrl);
+										HttpResponse execute = get.execute();
+										if(200 == execute.getStatus()){
+											taskDetailVehiclesChannel.setImageUrl(fileUrl);
+											taskDetailVehiclesChannel.setSysCreateTime(LocalDateTime.now());
+											taskDetailVehiclesChannel.setArtificialStatus(1);
+											//开始调模型接口得出结果
+											Map<String, Object> map = ImageModelUtil.modelCheck(fileUrl, ImageModelEnum.getImageModelEnum(patrolTask.getImageModel()));
+											Boolean b = (Boolean) map.get("b");
+											String r = map.get("r").toString();
+											taskDetailVehiclesChannel.setSysStatus(b ? 2 : 3);
+											taskDetailVehiclesChannel.setResult(r);
+											taskDetailVehiclesChannelService.updateById(taskDetailVehiclesChannel);
+										}
+									}catch (Exception e){
+										taskDetailVehiclesChannel.setResult(e.getMessage());
+										taskDetailVehiclesChannelService.updateById(taskDetailVehiclesChannel);
+									}
+								}
+								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);
+							}
+						}
+						//当前线程执行完成后减少等待数
+						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);
+		}else{
+			//只处理不在线的车辆
 			//获取所有在线车船
 			//2018年协议车辆在线
 			List<VehicleOnline> vehicleOnlines2018 = VideoGateway.queryRuntimeInfoByCache(0);
@@ -262,70 +364,7 @@
 									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);
-								
-								//成功
-								List<TaskDetailVehiclesChannel> taskDetailVehiclesChannels = taskDetailVehiclesChannelService.selectList(new EntityWrapper<TaskDetailVehiclesChannel>().eq("task_detail_vehicles_id", taskDetailVehicleId));
-								//开始发送拍照指令,获取照片地址
-								String vehicleGpsProtocol = vehicleOnline1.getVehicleGpsProtocol();
-								String terminalId = vehicleOnline1.getTerminalId();
-								for (TaskDetailVehiclesChannel taskDetailVehiclesChannel : taskDetailVehiclesChannels) {
-									Integer videoChannel = taskDetailVehiclesChannel.getVideoChannel();
-									try {
-										if("1".equals(vehicleGpsProtocol)){
-											//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);
-													taskDetailVehiclesChannel.setSysCreateTime(LocalDateTime.now());
-													taskDetailVehiclesChannel.setArtificialStatus(1);
-													//开始调模型接口得出结果
-													Map<String, Object> map = ImageModelUtil.modelCheck(fileUrl, ImageModelEnum.getImageModelEnum(patrolTask.getImageModel()));
-													Boolean b = (Boolean) map.get("b");
-													String r = map.get("r").toString();
-													taskDetailVehiclesChannel.setSysStatus(b ? 2 : 3);
-													taskDetailVehiclesChannel.setResult(r);
-													taskDetailVehiclesChannelService.updateById(taskDetailVehiclesChannel);
-												}
-											}
-										}else{
-											//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);
-													taskDetailVehiclesChannel.setSysCreateTime(LocalDateTime.now());
-													taskDetailVehiclesChannel.setArtificialStatus(1);
-													//开始调模型接口得出结果
-													Map<String, Object> map = ImageModelUtil.modelCheck(fileUrl, ImageModelEnum.getImageModelEnum(patrolTask.getImageModel()));
-													Boolean b = (Boolean) map.get("b");
-													String r = map.get("r").toString();
-													taskDetailVehiclesChannel.setSysStatus(b ? 2 : 3);
-													taskDetailVehiclesChannel.setResult(r);
-													taskDetailVehiclesChannelService.updateById(taskDetailVehiclesChannel);
-												}
-											}
-										}
-									}catch (Exception e){
-										taskDetailVehiclesChannel.setResult(e.getMessage());
-										taskDetailVehiclesChannelService.updateById(taskDetailVehiclesChannel);
-									}
-								}
-								taskDetailVehicle.setEndExecutionTime(LocalDateTime.now());
-								taskDetailVehicle.setStatus(3);
-								taskDetailVehiclesService.updateById(taskDetailVehicle);
 							}catch (Exception e){
 								e.printStackTrace();
 								//失败
@@ -344,9 +383,12 @@
 			} 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);
+			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