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 +++++++++++++++++++++++++++++++++-
 guns-admin/src/main/java/com/stylefeng/guns/modular/api/PatrolTaskController.java                  |   12 +++-
 guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/videoGateway/VideoGateway.java     |   12 ++--
 guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/VehicleSpeed.java               |   24 ++++++++
 guns-admin/src/main/resources/application.yml                                                      |    4 
 5 files changed, 140 insertions(+), 15 deletions(-)

diff --git a/guns-admin/src/main/java/com/stylefeng/guns/modular/api/PatrolTaskController.java b/guns-admin/src/main/java/com/stylefeng/guns/modular/api/PatrolTaskController.java
index cc99c2d..4a1f01b 100644
--- a/guns-admin/src/main/java/com/stylefeng/guns/modular/api/PatrolTaskController.java
+++ b/guns-admin/src/main/java/com/stylefeng/guns/modular/api/PatrolTaskController.java
@@ -1,5 +1,6 @@
 package com.stylefeng.guns.modular.api;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.plugins.Page;
 import com.stylefeng.guns.core.base.controller.BaseController;
 import com.stylefeng.guns.core.common.constant.JwtConstants;
@@ -15,9 +16,11 @@
 import com.stylefeng.guns.modular.system.util.videoGateway.VideoGateway;
 import com.stylefeng.guns.modular.system.util.videoGateway.model.Ship;
 import com.stylefeng.guns.modular.system.util.videoGateway.model.Vehicle;
+import com.stylefeng.guns.modular.system.warpper.VehicleSpeed;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -29,6 +32,7 @@
  * @author zhibing.pu
  * @Date 2024/12/17 20:18
  */
+@Slf4j
 @RestController
 @RequestMapping("")
 public class PatrolTaskController extends BaseController {
@@ -226,7 +230,7 @@
 	}
 	
 	
-	@PutMapping("/base/patrolTask/vehicleSpeed")
+	@PostMapping("/base/patrolTask/vehicleSpeed")
 	@ApiOperation(value = "变更车辆状态", tags = {"互联互通接口"})
 	@ApiImplicitParams({
 			@ApiImplicitParam(value = "车牌号", name = "vehicleNum", dataType = "String", required = true),
@@ -237,8 +241,10 @@
 			@ApiImplicitParam(value = "纬度", name = "latitude", dataType = "double", required = true),
 			@ApiImplicitParam(value = "经度", name = "longitude", dataType = "double", required = true),
 	})
-	public ResultUtil vehicleSpeed(String vehicleNum, Integer vehicleStatus, Integer vehicleType, String communicationNum, String vehicleGpsProtocol, Double latitude, Double longitude){
-		patrolTaskService.vehicleSpeed(vehicleNum, vehicleStatus, vehicleType, communicationNum, vehicleGpsProtocol, latitude, longitude);
+	public ResultUtil vehicleSpeed(@RequestBody VehicleSpeed vehicleSpeed){
+		log.info("推送车辆状态:{}", JSON.toJSONString(vehicleSpeed));
+		patrolTaskService.vehicleSpeed(vehicleSpeed.getVehicleNum(), vehicleSpeed.getVehicleStatus(), vehicleSpeed.getVehicleType(),
+				vehicleSpeed.getCommunicationNum(), vehicleSpeed.getVehicleGpsProtocol(), vehicleSpeed.getLatitude(), vehicleSpeed.getLongitude());
 		return ResultUtil.success();
 	}
 }
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);
+			}
 		}
 		
 	}
diff --git a/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/videoGateway/VideoGateway.java b/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/videoGateway/VideoGateway.java
index ee8f38d..f2df95f 100644
--- a/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/videoGateway/VideoGateway.java
+++ b/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/videoGateway/VideoGateway.java
@@ -417,13 +417,13 @@
 		//图片地址
 		String data = result.getString("data");
 		if(ToolUtil.isEmpty(data)){
-			if(num == 12){
+			if(num == 60){
 				log.error(result.getString("msg"));
-				throw new RuntimeException("【2018年协议车辆获取拍摄图片】12次(1分钟)失败:" + execute.body());
+				throw new RuntimeException("【2018年协议车辆获取拍摄图片】60次(1分钟)失败:" + execute.body());
 			}
 			num++;
 			try {
-				Thread.sleep(5000);
+				Thread.sleep(1000);
 			} catch (InterruptedException e) {
 				throw new RuntimeException(e);
 			}
@@ -468,13 +468,13 @@
 		//图片地址
 		String data = result.getString("data");
 		if(ToolUtil.isEmpty(data)){
-			if(num == 12){
+			if(num == 60){
 				log.error(result.getString("msg"));
-				throw new RuntimeException("【2023年协议车辆获取拍摄图片】12次(1分钟)失败:" + execute.body());
+				throw new RuntimeException("【2023年协议车辆获取拍摄图片】60次(1分钟)失败:" + execute.body());
 			}
 			num++;
 			try {
-				Thread.sleep(5000);
+				Thread.sleep(1000);
 			} catch (InterruptedException e) {
 				throw new RuntimeException(e);
 			}
diff --git a/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/VehicleSpeed.java b/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/VehicleSpeed.java
new file mode 100644
index 0000000..9e68bf7
--- /dev/null
+++ b/guns-admin/src/main/java/com/stylefeng/guns/modular/system/warpper/VehicleSpeed.java
@@ -0,0 +1,24 @@
+package com.stylefeng.guns.modular.system.warpper;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/3/3 16:45
+ */
+@Data
+public class VehicleSpeed {
+	private String vehicleNum;
+	
+	private Integer vehicleStatus;
+	
+	private Integer vehicleType;
+	
+	private String communicationNum;
+	
+	private String vehicleGpsProtocol;
+	
+	private Double latitude;
+	
+	private Double longitude;
+}
diff --git a/guns-admin/src/main/resources/application.yml b/guns-admin/src/main/resources/application.yml
index 93f52c8..8ec3517 100644
--- a/guns-admin/src/main/resources/application.yml
+++ b/guns-admin/src/main/resources/application.yml
@@ -12,7 +12,7 @@
 spring:
   redis:
     database: 0
-    host: 139.129.201.21
+    host: 10.25.14.40
     port: 6379
     password: 34b7b13ce8a711e4:chengshI2014
 
@@ -109,4 +109,4 @@
             
 ---
 # 任务执行最大线程数
-maxThreadCount: 20
\ No newline at end of file
+maxThreadCount: 50
\ No newline at end of file

--
Gitblit v1.7.1