From 2988d2670cf03ef1ab074b0c6cd54301570c8ba4 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 周四, 24 8月 2023 12:01:26 +0800
Subject: [PATCH] 修复引导过程中修改相机导致引导队列中止出队的问题 增加一键派警描述字段
---
ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java | 2
ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java | 10 ++-
ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/Server.java | 1
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java | 55 ++++++++++-------
ard-work/src/main/java/com/ruoyi/test/ReadAccessDatabase.java | 3 +
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java | 13 +--
ard-work/src/main/resources/mapper/dispatch/ArdDispatchPoliceMapper.xml | 6 ++
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueManager.java | 20 ++++--
ard-work/src/main/java/com/ruoyi/dispatch/domain/ArdDispatchPolice.java | 12 ++++
9 files changed, 81 insertions(+), 41 deletions(-)
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java
index 0529d64..4817868 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java
@@ -49,6 +49,7 @@
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
+import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -679,7 +680,6 @@
log.info("相机:" + cameraId + "未开启报警引导功能");
return;
}
-
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
GuideTask guideTask = new GuideTask();
//相机ID
@@ -737,31 +737,40 @@
*/
private String getNearbyCamera(double[] targetPosition) {
String minDistanceCameraId = "";
- //获取所有大光电
- List<ArdCameras> ardCamerasList = ardCamerasMapper.selectArdCamerasList(new ArdCameras("1"));
- //统计所有大光电可视范围内与报警点的距离
- Map<String, Double> distanceMap = new HashMap<>();
- Map<String, Integer> guideMap = new HashMap<>();
- for (ArdCameras camera : ardCamerasList) {
- double[] camPosition = new double[]{camera.getLongitude(), camera.getLatitude()};
- double distance = GisTool.getDistance(targetPosition, camPosition);
- if (distance != 0.0 && distance <= camera.getCamMaxVisibleDistance()) {
- distanceMap.put(camera.getId(), distance);
- if (StringUtils.isNull(camera.getCamAlarmGuideEnable())) {
- camera.setCamAlarmGuideEnable(0);
+ try {
+ //获取所有大光电
+ List<ArdCameras> ardCamerasList = ardCamerasMapper.selectArdCamerasList(new ArdCameras("1"));
+ //统计所有大光电可视范围内与报警点的距离
+ Map<String, Double> distanceMap = new HashMap<>();
+ Map<String, Integer> guideMap = new HashMap<>();
+ for (ArdCameras camera : ardCamerasList) {
+ if (camera.getCamMaxVisibleDistance() == null) {
+ continue;
}
- guideMap.put(camera.getId(), camera.getCamAlarmGuideEnable());
+ double[] camPosition = new double[]{camera.getLongitude(), camera.getLatitude()};
+ double distance = GisTool.getDistance(targetPosition, camPosition);
+ if (distance != 0.0 && distance <= camera.getCamMaxVisibleDistance()) {
+ distanceMap.put(camera.getId(), distance);
+ if (StringUtils.isNull(camera.getCamAlarmGuideEnable())) {
+ camera.setCamAlarmGuideEnable(0);
+ }
+ guideMap.put(camera.getId(), camera.getCamAlarmGuideEnable());
+ }
+ }
+ if (distanceMap.size() > 0) {
+ log.debug("尝试查找最近光电");
+ //获取距离字典中最近的一个相机ID
+ minDistanceCameraId = ArdTool.getKeyByMinValue(distanceMap);
+ log.debug("查找到最近光电:" + minDistanceCameraId);
+ if (guideMap.get(minDistanceCameraId).equals(0)) {
+ log.debug("该光电未开启报警引导");
+ return " ";
+ }
}
}
- if (distanceMap.size() > 0) {
- log.debug("尝试查找最近光电");
- //获取距离字典中最近的一个相机ID
- minDistanceCameraId = ArdTool.getKeyByMinValue(distanceMap);
- log.debug("查找到最近光电:" + minDistanceCameraId);
- if (guideMap.get(minDistanceCameraId).equals(0)) {
- log.debug("该光电未开启报警引导");
- return " ";
- }
+ catch (Exception ex)
+ {
+ log.error("获取附近开启报警引导功能光电异常:"+ex.getMessage());
}
return minDistanceCameraId;
}
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueManager.java b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueManager.java
index 21c8772..0497e66 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueManager.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/QueueManager.java
@@ -58,21 +58,27 @@
public void addTaskToQueue(String cameraId, GuideTask task) {
/*通过相机ID获取引导队列,并将引导任务加入队列*/
PriorityBlockingQueue<GuideTask> guideTaskQueue = GuidePriorityQueue.cameraQueueMap.get(cameraId);
- if(StringUtils.isNull(guideTaskQueue))
- {
+ if (StringUtils.isNull(guideTaskQueue)) {
log.info("相机未登录,没有队列,无法入队引导");
return;
}
- log.debug("新任务入队:"+task.getAlarmId());
+ log.debug("新任务入队:" + task.getAlarmId());
guideTaskQueue.add(task);
/*获取该相机的当前执行线程*/
TaskThread currentTaskThread = threadMap.get(cameraId);
//如果队列当前线程正在运行,若入队任务优先级大于当前任务优先级,则终止当前线程
- if (currentTaskThread != null && task.getPriority() > currentTaskThread.getCurrentTask().getPriority()) {
- currentTaskThread.getThread().interrupt();
+ if (currentTaskThread != null){
+ if (task.getPriority() > currentTaskThread.getCurrentTask().getPriority()) {
+ currentTaskThread.getThread().interrupt();
+ }
+ if (!currentTaskThread.getThread().isAlive()) {
+ Thread newThread = createThread(cameraId, guideTaskQueue);
+ threadMap.put(cameraId, new TaskThread(newThread, task));
+ newThread.start();
+ }
}
//如果队列当前没有线程正在运行,则启动新线程
- if (currentTaskThread == null || !currentTaskThread.getThread().isAlive()) {
+ else {
Thread newThread = createThread(cameraId, guideTaskQueue);
threadMap.put(cameraId, new TaskThread(newThread, task));
newThread.start();
@@ -90,7 +96,7 @@
while (!Thread.currentThread().isInterrupted()) {
try {
GuideTask task = queue.take();
- log.debug("取出队列数据:"+task.getAlarmId());
+ log.debug("取出队列数据:" + task.getAlarmId());
taskExecutor.processTask(task);
// 更新线程的当前任务
TaskThread currentTaskThread = threadMap.get(queueName);
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
index 771c21f..4ed6415 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -2,6 +2,7 @@
import com.ruoyi.common.annotation.SdkOperate;
import com.ruoyi.common.utils.file.FileUtils;
+import com.ruoyi.common.utils.file.MimeTypeUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.camera.service.IArdCamerasService;
@@ -1151,11 +1152,10 @@
//存储到minio
String BucketName = "pic";
String ObjectName = "capture/" + IdUtils.simpleUUID() + ".jpeg";
- String ContentType = "image/JPEG";
InputStream input = new ByteArrayInputStream(array);
String url = "";
try {
- boolean b = minioUtil.uploadObject(BucketName, ObjectName, input, input.available(), ContentType);
+ boolean b = minioUtil.uploadObject(BucketName, ObjectName, input, input.available(), MimeTypeUtils.IMAGE_JPEG);
if (b) {
url = minioUtil.getBucketObjectUrl(BucketName, ObjectName);
log.debug("上传文件成功!" + url);
@@ -1336,14 +1336,11 @@
log.debug("录像停止");
//存入minio
String BucketName = cmd.getRecordBucketName();
- String ObjectName = cmd.getRecordObjectName();
- String ContentType = "video/MP4";
+ String ObjectName = cmd.getRecordObjectName()+".mp4";
FileInputStream stream = new FileInputStream(path);
- String time = new SimpleDateFormat("yyyyMMdd").format(new Date());
- String recordName = cameraId + "/" + time + "/" + ObjectName + ".mp4";
- boolean b = minioUtil.uploadObject(BucketName, recordName, stream, stream.available(), ContentType);
+ boolean b = minioUtil.uploadObject(BucketName, ObjectName, stream, stream.available(), "video/MP4");
if (b) {
- url = endpoint + "/" + BucketName + "/" + recordName;
+ url = minioUtil.getBucketObjectUrl(BucketName, ObjectName);
log.debug("上传文件成功!" + url);
}
return url;
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java
index bbe9c52..d879397 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java
@@ -59,9 +59,13 @@
}
}
//创建引导队列
- Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
- PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
- GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
+ if(!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId()))
+ {
+ Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
+ PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
+ GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
+ }
+
} else {
log.debug(camera.getIp() + ":" + camera.getPort() + "登录失败");
camera.setChanNum(0);
diff --git a/ard-work/src/main/java/com/ruoyi/dispatch/domain/ArdDispatchPolice.java b/ard-work/src/main/java/com/ruoyi/dispatch/domain/ArdDispatchPolice.java
index 64d3dab..f6cdfce 100644
--- a/ard-work/src/main/java/com/ruoyi/dispatch/domain/ArdDispatchPolice.java
+++ b/ard-work/src/main/java/com/ruoyi/dispatch/domain/ArdDispatchPolice.java
@@ -25,6 +25,10 @@
@Excel(name = "派警名称")
private String name;
+ /** 描述 */
+ @Excel(name = "描述")
+ private String text;
+
/** 经度 */
@Excel(name = "经度")
private Double longitude;
@@ -106,4 +110,12 @@
public void setArdDispatchPoliceUserList(List<String> ardDispatchPoliceUserList) {
this.ardDispatchPoliceUserList = ardDispatchPoliceUserList;
}
+
+ public String getText() {
+ return text;
+ }
+
+ public void setText(String text) {
+ this.text = text;
+ }
}
diff --git a/ard-work/src/main/java/com/ruoyi/test/ReadAccessDatabase.java b/ard-work/src/main/java/com/ruoyi/test/ReadAccessDatabase.java
index 2d48af9..4a93637 100644
--- a/ard-work/src/main/java/com/ruoyi/test/ReadAccessDatabase.java
+++ b/ard-work/src/main/java/com/ruoyi/test/ReadAccessDatabase.java
@@ -10,6 +10,8 @@
import com.ruoyi.common.utils.ConfigUtils;
import com.ruoyi.common.utils.DictUtils;
+import com.ruoyi.common.utils.file.ImageUtils;
+import com.sun.imageio.plugins.common.ImageUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -25,6 +27,7 @@
public class ReadAccessDatabase {
public static void main(String[] args) {
+
// 多个数据库文件路径
String[] dbPaths = {
"D:\\Workspaces\\ard\\安瑞达工作资料\\mdb\\道路中心线.mdb"
diff --git a/ard-work/src/main/resources/mapper/dispatch/ArdDispatchPoliceMapper.xml b/ard-work/src/main/resources/mapper/dispatch/ArdDispatchPoliceMapper.xml
index 7056376..6b0882c 100644
--- a/ard-work/src/main/resources/mapper/dispatch/ArdDispatchPoliceMapper.xml
+++ b/ard-work/src/main/resources/mapper/dispatch/ArdDispatchPoliceMapper.xml
@@ -7,6 +7,7 @@
<resultMap type="ArdDispatchPolice" id="ArdDispatchPoliceResult">
<result property="id" column="id"/>
<result property="name" column="name"/>
+ <result property="text" column="text"/>
<result property="longitude" column="longitude"/>
<result property="latitude" column="latitude"/>
<result property="deptId" column="dept_id"/>
@@ -38,6 +39,7 @@
<sql id="selectArdDispatchPoliceVo">
SELECT ID,
NAME,
+ text,
longitude,
latitude,
dept_id,
@@ -64,6 +66,7 @@
resultMap="ArdDispatchPoliceArdDispatchPoliceUserResult">
select a.id,
a.name,
+ a.text,
a.longitude,
a.latitude,
a.dept_id,
@@ -84,6 +87,7 @@
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">id,</if>
<if test="name != null">name,</if>
+ <if test="text != null">text,</if>
<if test="longitude != null">longitude,</if>
<if test="latitude != null">latitude,</if>
<if test="deptId != null">dept_id,</if>
@@ -96,6 +100,7 @@
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
<if test="name != null">#{name},</if>
+ <if test="text != null">#{text},</if>
<if test="longitude != null">#{longitude},</if>
<if test="latitude != null">#{latitude},</if>
<if test="deptId != null">#{deptId},</if>
@@ -111,6 +116,7 @@
update ard_dispatch_police
<trim prefix="SET" suffixOverrides=",">
<if test="name != null">name = #{name},</if>
+ <if test="text != null">text = #{text},</if>
<if test="longitude != null">longitude = #{longitude},</if>
<if test="latitude != null">latitude = #{latitude},</if>
<if test="deptId != null">dept_id = #{deptId},</if>
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java
index f968f1a..7b654af 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java
@@ -16,6 +16,8 @@
public static final String IMAGE_BMP = "image/bmp";
public static final String IMAGE_GIF = "image/gif";
+
+ public static final String Video_MP4 = "video/mp4";
public static final String[] IMAGE_EXTENSION = { "bmp", "gif", "jpg", "jpeg", "png" };
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/Server.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/Server.java
index 63b03da..6529aa8 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/Server.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/Server.java
@@ -5,6 +5,7 @@
import java.util.List;
import java.util.Properties;
import com.ruoyi.common.utils.Arith;
+import com.ruoyi.common.utils.file.ImageUtils;
import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.framework.web.domain.server.Cpu;
import com.ruoyi.framework.web.domain.server.Jvm;
--
Gitblit v1.9.3