From ef0ed9877417b7efb3a6ec72121bee56720f6939 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: Sat, 01 Jul 2023 17:28:04 +0800
Subject: [PATCH] 优化提交
---
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java | 77 ++++++----
ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/mapper/ArdAlarmRadarMapper.java | 36 ++--
ard-work/src/main/java/com/ruoyi/device/hiksdk/util/imageUtil/waterMarkUtil.java | 26 +--
ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java | 2
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java | 222 +++++++++++++++++--------------
ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java | 4
ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java | 9
ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java | 10
ard-work/src/main/java/com/ruoyi/alarmpoints/well/controller/ArdAlarmpointsWellController.java | 4
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java | 17 +
10 files changed, 218 insertions(+), 189 deletions(-)
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
index fcf5f7e..b90aa40 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/GlobalAlarmServiceImpl.java
@@ -29,23 +29,20 @@
import com.ruoyi.utils.tools.GisTool;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.device.camera.domain.ArdCameras;
-import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
-import com.ruoyi.device.hiksdk.common.GlobalVariable;
-import com.ruoyi.device.hiksdk.service.IHikClientService;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.utils.tube.GeoPoint;
import com.ruoyi.utils.tube.TubeTools;
+import lombok.AllArgsConstructor;
+import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
-
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.stream.Collectors;
-
/**
* @Description: 全局报警业务
@@ -76,8 +73,6 @@
private ISysConfigService configService;
@Resource
private ArdCamerasMapper ardCamerasMapper;
- @Resource
- private IHikClientService hikClientService;
@Resource
private RedisCache redisCache;
@Resource
@@ -137,8 +132,7 @@
.setCount(ardAlarmStealelec.getCount())
.setTotal(ardAlarmStealelec.getTotal());
return globalAlarmData;
- })
- .collect(Collectors.toList());
+ }).collect(Collectors.toList());
case 1002:
List<ArdAlarmCamera> ardAlarmCameras = ardAlarmCameraMapper.selectListAllByCommand(refreshTime);
return ardAlarmCameras.stream()
@@ -152,8 +146,7 @@
.setCount(ardAlarmCamera.getCount())
.setTotal(ardAlarmCamera.getTotal());
return globalAlarmData;
- })
- .collect(Collectors.toList());
+ }).collect(Collectors.toList());
case 1003:
List<ArdAlarmRadar> ardAlarmRadars = ardAlarmRadarMapper.selectListAllByCommand(refreshTime, "运动目标检测");
return ardAlarmRadars.stream()
@@ -167,8 +160,7 @@
.setCount(ardAlarmRadar.getCount())
.setTotal(ardAlarmRadar.getTotal());
return globalAlarmData;
- })
- .collect(Collectors.toList());
+ }).collect(Collectors.toList());
case 1004:
ardAlarmRadars = ardAlarmRadarMapper.selectListAllByCommand(refreshTime, "热源检测");
return ardAlarmRadars.stream()
@@ -182,8 +174,7 @@
.setCount(ardAlarmRadar.getCount())
.setTotal(ardAlarmRadar.getTotal());
return globalAlarmData;
- })
- .collect(Collectors.toList());
+ }).collect(Collectors.toList());
case 1014:
List<ArdAlarmTube> ardAlarmTubes = ardAlarmTubeMapper.selectListAllByCommand(refreshTime);
return ardAlarmTubes.stream()
@@ -198,8 +189,7 @@
.setCount(ardAlarmTube.getCount())
.setTotal(ardAlarmTube.getTotal());
return globalAlarmData;
- })
- .collect(Collectors.toList());
+ }).collect(Collectors.toList());
default:
return null;
}
@@ -224,38 +214,33 @@
aas.setParams(params);
aas.setPageNum(pageNum);
aas.setPageSize(pageSize);
- List<ArdAlarmStealelec> ardAlarmStealelecs = ardAlarmStealelecMapper.selectArdAlarmStealelecList(aas);
- return ardAlarmStealelecs;
+ return ardAlarmStealelecMapper.selectArdAlarmStealelecList(aas);
case 1002:
ArdAlarmCamera aac = new ArdAlarmCamera();
aac.setParams(params);
aac.setPageNum(pageNum);
aac.setPageSize(pageSize);
- List<ArdAlarmCamera> ardAlarmCameras = ardAlarmCameraMapper.selectArdAlarmCameraList(aac);
- return ardAlarmCameras;
+ return ardAlarmCameraMapper.selectArdAlarmCameraList(aac);
case 1003:
ArdAlarmRadar aar = new ArdAlarmRadar();
aar.setParams(params);
aar.setPageNum(pageNum);
aar.setPageSize(pageSize);
aar.setAlarmType("运动目标检测");
- List<ArdAlarmRadar> ardAlarmRadar = ardAlarmRadarMapper.selectArdAlarmRadarList(aar);
- return ardAlarmRadar;
+ return ardAlarmRadarMapper.selectArdAlarmRadarList(aar);
case 1004:
ArdAlarmRadar aarr = new ArdAlarmRadar();
aarr.setParams(params);
aarr.setPageNum(pageNum);
aarr.setPageSize(pageSize);
aarr.setAlarmType("热源检测");
- List<ArdAlarmRadar> ardAlarmRadarr = ardAlarmRadarMapper.selectArdAlarmRadarList(aarr);
- return ardAlarmRadarr;
+ return ardAlarmRadarMapper.selectArdAlarmRadarList(aarr);
case 1014:
ArdAlarmTube aat = new ArdAlarmTube();
aat.setParams(params);
aat.setPageNum(pageNum);
aat.setPageSize(pageSize);
- List<ArdAlarmTube> ardAlarmTubes = ardAlarmTubeMapper.selectArdAlarmTubeList(aat);
- return ardAlarmTubes;
+ return ardAlarmTubeMapper.selectArdAlarmTubeList(aat);
}
return null;
}
@@ -277,7 +262,7 @@
if (StringUtils.isNotNull(ardAlarmStealelec)) {
String describe = ardAlarmStealelec.getDescribe();
String startTime = fmt.format(ardAlarmStealelec.getStartTime());
- int i = ardAlarmStealelecMapper.updateViewTimeByDescribe(describe, startTime, DateUtils.getTime());
+ ardAlarmStealelecMapper.updateViewTimeByDescribe(describe, startTime, DateUtils.getTime());
return ardAlarmStealelec;
}
case 1014:
@@ -285,7 +270,7 @@
if (StringUtils.isNotNull(ardAlarmTube)) {
String tubeId = ardAlarmTube.getTubeId();
String alarmTime = fmt.format(ardAlarmTube.getAlarmTime());
- int i = ardAlarmTubeMapper.updateViewTimeByTubeId(tubeId, alarmTime, DateUtils.getTime());
+ ardAlarmTubeMapper.updateViewTimeByTubeId(tubeId, alarmTime, DateUtils.getTime());
return ardAlarmTube;
}
default:
@@ -423,7 +408,6 @@
if (count >= 3) {
ardAlarmRadar.setGuideFlag(1);
ardAlarmRadarMapper.insertArdAlarmRadar(ardAlarmRadar);
-
//获取雷达所在塔上的大光电
String cameraIdWithTower = ardAlarmRadarMapper.getCameraByRadar(radarAlarmData.getRadarId());
if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) {
@@ -532,4 +516,37 @@
return minDistanceCameraId;
}
+ public static void main(String[] args) {
+ Comparator<Obj> PriorityDescCom = Comparator.comparingInt(Obj::getPriority).reversed();
+ Comparator<Obj> NumDescCom = Comparator.comparingInt(Obj::getNum).reversed();
+ Comparator<Obj> receiveTimeAscCom = Comparator.comparing(Obj::getAlarmTime);
+ Comparator<Obj> comparator = PriorityDescCom.thenComparing(NumDescCom).thenComparing(receiveTimeAscCom);
+
+ PriorityBlockingQueue<Obj> priorityQueue = new PriorityBlockingQueue<>(1000,comparator);
+
+ priorityQueue.add(new Obj(999,1,"2023-07-01 16:00:01"));
+ priorityQueue.add(new Obj(999,2,"2023-07-01 16:00:01"));
+ priorityQueue.add(new Obj(999,3,"2023-07-01 16:00:01"));
+
+ List<Obj> elements = new ArrayList<>(priorityQueue);
+ elements.sort(priorityQueue.comparator()); // 使用队列的比较器进行排序
+ for (Obj task : elements) {
+ log.info("正在排队【priority】" + task.getPriority()+"【num】" + task.getNum() + "【alarmTime】" + task.getAlarmTime());
+ }
+ log.info("===================================================================");
+ priorityQueue.add(new Obj(999,5,"2023-07-01 16:00:01"));
+ PriorityBlockingQueue queue = new PriorityBlockingQueue<>(priorityQueue);
+ while (priorityQueue.size() > 0) {
+ Obj task = priorityQueue.poll();
+ log.info("正在排队【priority】" + task.getPriority()+"【num】" + task.getNum() + "【alarmTime】" + task.getAlarmTime());
+ }
+ }
+ @Data
+ @AllArgsConstructor
+ static class Obj
+ {
+ Integer priority;
+ Integer num;
+ String alarmTime;
+ }
}
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java
index 659afcc..c3ff35d 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/impl/QueueTaskExecutor.java
@@ -41,22 +41,19 @@
cmd.setOperator(guideTask.getAlarmType());
cmd.setExpired(30);
cmd.setRecordBucketName("record");
- cmd.setRecordObjectName("alarm");
+ cmd.setRecordObjectName("alarm_"+guideTask.getAlarmId());
log.debug("开始引导");
boolean guideRes = hikClientService.guideTargetPosition(cmd);
if (guideRes) {
log.debug("引导成功");
hikClientService.controlLock(cmd);//上锁
- cmd.setEnable(true);//开始录像
- hikClientService.recordToMinio(cmd);//开始录像
+ hikClientService.recordStart(cmd);//开始录像
try {
Thread.sleep(30000);
} catch (InterruptedException e) {
log.info("当前任务ID"+guideTask.getAlarmId()+"线程被终止");
}
- cmd.setEnable(false);//停止录像
- cmd.setUploadMinio(true);//上传minio
- String url = hikClientService.recordToMinio(cmd);//停止录像返回url
+ String url = hikClientService.recordStopToMinio(cmd);//停止录像返回url
if (StringUtils.isNotEmpty(url)) {
switch (guideTask.getAlarmType()) {
case "sys_tube_leak":
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/mapper/ArdAlarmRadarMapper.java b/ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/mapper/ArdAlarmRadarMapper.java
index ae971ad..f8962b2 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/mapper/ArdAlarmRadarMapper.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/radarAlarm/mapper/ArdAlarmRadarMapper.java
@@ -9,15 +9,14 @@
/**
* 雷达报警Mapper接口
- *
+ *
* @author ard
* @date 2023-06-28
*/
-public interface ArdAlarmRadarMapper
-{
+public interface ArdAlarmRadarMapper {
/**
* 查询雷达报警
- *
+ *
* @param id 雷达报警主键
* @return 雷达报警
*/
@@ -25,7 +24,7 @@
/**
* 查询雷达报警列表
- *
+ *
* @param ardAlarmRadar 雷达报警
* @return 雷达报警集合
*/
@@ -33,7 +32,7 @@
/**
* 新增雷达报警
- *
+ *
* @param ardAlarmRadar 雷达报警
* @return 结果
*/
@@ -41,7 +40,7 @@
/**
* 修改雷达报警
- *
+ *
* @param ardAlarmRadar 雷达报警
* @return 结果
*/
@@ -49,7 +48,7 @@
/**
* 删除雷达报警
- *
+ *
* @param id 雷达报警主键
* @return 结果
*/
@@ -57,25 +56,26 @@
/**
* 批量删除雷达报警
- *
+ *
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteArdAlarmRadarByIds(String[] ids);
- public List<ArdAlarmRadar> selectListAllByCommand(@Param("refreshTime")String refreshTime,@Param("alarmType")String alarmType);
- int selectCountByAlarmTime(@Param("refreshTime")String refreshTime,@Param("alarmType")String alarmType);
+ public List<ArdAlarmRadar> selectListAllByCommand(@Param("refreshTime") String refreshTime, @Param("alarmType") String alarmType);
+
+ int selectCountByAlarmTime(@Param("refreshTime") String refreshTime, @Param("alarmType") String alarmType);
/**
* 通过雷达id找到关联塔上的大光电id
- *
*/
- String getCameraByRadar(String radarId);
+ String getCameraByRadar(String radarId);
- /**
- * 查找5分钟内引导过的记录
- * */
- public ArdAlarmRadar getArdAlarmRadarWithGuide(ArdAlarmRadar ardAlarmRadar);
+ /**
+ * 查找5分钟内引导过的记录
+ */
+ public ArdAlarmRadar getArdAlarmRadarWithGuide(ArdAlarmRadar ardAlarmRadar);
- public int getArdAlarmRadarWithNotGuide(@Param("ardAlarmRadar")ArdAlarmRadar ardAlarmRadar, @Param("guideTime")Date guideTime);
+ public int getArdAlarmRadarWithNotGuide(@Param("ardAlarmRadar") ArdAlarmRadar ardAlarmRadar, @Param("guideTime") Date guideTime);
+
}
diff --git a/ard-work/src/main/java/com/ruoyi/alarmpoints/well/controller/ArdAlarmpointsWellController.java b/ard-work/src/main/java/com/ruoyi/alarmpoints/well/controller/ArdAlarmpointsWellController.java
index 4ed36a0..79aa9f5 100644
--- a/ard-work/src/main/java/com/ruoyi/alarmpoints/well/controller/ArdAlarmpointsWellController.java
+++ b/ard-work/src/main/java/com/ruoyi/alarmpoints/well/controller/ArdAlarmpointsWellController.java
@@ -3,11 +3,8 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
-
import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell;
import com.ruoyi.alarmpoints.well.service.IArdAlarmpointsWellService;
-import com.ruoyi.common.annotation.Anonymous;
-import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -26,7 +23,6 @@
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
-
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java b/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java
index 9f39667..db9981e 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/domain/CameraCmd.java
@@ -39,6 +39,4 @@
String recordBucketName;
/*录像文件名称*/
String recordObjectName;
- /*是否上传minio*/
- boolean isUploadMinio;
}
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
index 3f9325e..2d43e0e 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
@@ -2,13 +2,11 @@
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.domain.CameraCmd;
-
-import java.io.IOException;
import java.util.Map;
/**
* @ClassName: sdkClinet
- * @Description:海康操作客户端接口类
+ * @Description: 海康操作客户端接口类
* @Author: Administrator
* @Date: 2023年01月17日 15:59
* @Version: 1.0
@@ -35,7 +33,7 @@
boolean setFocusPos(CameraCmd cmd);
//获取聚焦值
- Map getFocusPos(CameraCmd cmd);
+ Map<String,Object> getFocusPos(CameraCmd cmd);
//设置预置位
boolean setPreset(CameraCmd cmd);
@@ -93,9 +91,16 @@
//手动录像
String record(CameraCmd cmd);
- //手动录像
- String recordToMinio(CameraCmd cmd);
//引导目标位置
boolean guideTargetPosition(CameraCmd cmd);
+
+ //开始录像
+ void recordStart(CameraCmd cmd);
+
+ //停止录像-上传minio-返回录像url
+ String recordStopToMinio(CameraCmd cmd);
+
+ //停止录像-不上传minio
+ void recordStopNotToMinio(CameraCmd cmd);
}
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 3a4971f..590b551 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,7 +2,6 @@
import com.ruoyi.common.annotation.SdkOperate;
import com.ruoyi.common.utils.file.FileUtils;
-import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
import com.ruoyi.device.hiksdk.common.GlobalVariable;
@@ -20,11 +19,9 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import sun.misc.BASE64Encoder;
-
import javax.annotation.Resource;
import java.io.*;
import java.math.BigDecimal;
-import java.math.RoundingMode;
import java.nio.ByteBuffer;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
@@ -618,9 +615,9 @@
NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
m_ptzPosCurrent.wAction = 1;
try {
- String p = String.valueOf((int) ((double) ptz.get("p") * 10));
- String t = String.valueOf((int) ((double) ptz.get("t") * 10));
- String z = String.valueOf((int) ((double) ptz.get("z") * 10));
+ String p = String.valueOf((int) (ptz.get("p") * 10));
+ String t = String.valueOf((int) (ptz.get("t") * 10));
+ String z = String.valueOf((int) (ptz.get("z") * 10));
m_ptzPosCurrent.wPanPos = (short) (Integer.parseInt(p, 16));
m_ptzPosCurrent.wTiltPos = (short) (Integer.parseInt(t, 16));
m_ptzPosCurrent.wZoomPos = (short) (Integer.parseInt(z, 16));
@@ -745,8 +742,7 @@
return -1;
} else {
netDvrPtzLockcfg.read();
- int byWorkMode = netDvrPtzLockcfg.byWorkMode;
- return byWorkMode;
+ return netDvrPtzLockcfg.byWorkMode;
}
}
@@ -871,7 +867,6 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("设置透雾失败,请稍后重试" + code);
- return false;
}
log.info("设置透雾成功");
return bool;
@@ -920,7 +915,6 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("设置夜视失败,请稍后重试" + code);
- return false;
}
log.info("设置夜视成功");
return bool;
@@ -967,7 +961,6 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("设置聚焦模式失败,请稍后重试" + code);
- return false;
}
log.info("设置聚焦模式成功");
return bool;
@@ -1010,7 +1003,7 @@
return false;
}
Integer userId = GlobalVariable.loginMap.get(cameraId);
- Integer dwStop;
+ int dwStop;
if (enable) {
dwStop = 0;//开启
} else {
@@ -1020,7 +1013,6 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("设置云台加热失败,请稍后重试" + code);
- return false;
}
log.info("设置云台加热成功");
return bool;
@@ -1064,7 +1056,6 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("设置镜头除冰失败,请稍后重试" + code);
- return false;
}
log.info("设置镜头除冰成功");
return bool;
@@ -1073,7 +1064,7 @@
/**
* 截图 返给前端
*
- * @param cmd
+ * @param cmd 相机命令
*/
public String captureJPEGPicture(CameraCmd cmd) {
String cameraId = cmd.getCameraId();
@@ -1100,41 +1091,11 @@
boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a);
log.info("-----------这里开始图片存入内存----------" + is);
-
BASE64Encoder encoder = new BASE64Encoder();
String png_base64 = encoder.encodeBuffer(jpegBuffer);//转换成base64串
png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//删除 \r\n
log.info("-----------处理完成截图数据----------");
return png_base64;
-
-// ByteArrayInputStream in = new ByteArrayInputStream(jpegBuffer.array(), 0, a.getValue());
-// OutputStream outputStream = null;
-// try {
-// //1、设置response 响应头 //设置页面不缓存,清空buffer
-// response.reset();
-// //字符编码
-// response.setCharacterEncoding("UTF-8");
-// //二进制传输数据
-// response.setContentType("multipart/form-data");
-// //设置响应头
-// response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpeg", "UTF-8"));
-//
-// outputStream = response.getOutputStream();
-// // LoginUser loginUser = LoginContext.me().getLoginUser();
-// waterMarkUtil.markImageByIO("", in, outputStream, null, "jpeg");
-// outputStream.flush();
-// } catch (Exception e) {
-// e.printStackTrace();
-// log.error("抓图失败,请稍后重试");
-// } finally {
-// try {
-// outputStream.close();
-// } catch (IOException e) {
-// log.error("抓图失败,请稍后重试");
-// }
-// }
-
-
}
/**
@@ -1264,16 +1225,6 @@
GlobalVariable.previewMap.remove(cameraId);
}
log.info("录像停止");
- //存入minio
- String BucketName = cmd.getRecordBucketName();
- String ObjectName = cmd.getRecordObjectName();
- String ContentType = "video/MP4";
- FileInputStream stream = new FileInputStream(path);
- boolean b = MinioUtils.uploadObject(BucketName, ObjectName, stream, stream.available(), ContentType);
- if (b) {
- url = MinioUtils.getBucketObjectUrl(BucketName, ObjectName);
- log.info("上传文件成功!" + MinioClientSingleton.domainUrl + "/" + BucketName + "/" + ObjectName);
- }
}
return url;
} catch (Exception ex) {
@@ -1283,14 +1234,13 @@
}
@Override
- public String recordToMinio(CameraCmd cmd) {
+ public void recordStart(CameraCmd cmd) {
try {
String cameraId = cmd.getCameraId();
Integer channelNum = cmd.getChannelNum();
String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
- boolean enable = cmd.isEnable();
if (!GlobalVariable.loginMap.containsKey(cameraId)) {
- return "";
+ return;
}
Integer userId = GlobalVariable.loginMap.get(cameraId);
//强制I帧结构体对象
@@ -1313,53 +1263,125 @@
previewinfo.bBlocked = 0;//0- 非阻塞取流,1-阻塞取流
previewinfo.byNPQMode = 0;//NPQ模式:0-直连模式,1-过流媒体模式
previewinfo.write();
- if (enable) {
- if (GlobalVariable.previewMap.containsKey(cameraId)) {
- Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
- hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
- GlobalVariable.previewMap.remove(cameraId);
- log.debug("停止当前录像");
- }
- int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null);
- if (lRealHandle == -1) {
- log.error("取流失败" + hCNetSDK.NET_DVR_GetLastError());
- return "";
- }
- log.debug("取流成功");
- GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName());
- GlobalVariable.previewMap.put(cameraId, lRealHandle);
- if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) {
- log.error("保存视频文件到临时文件夹失败 错误码为: " + hCNetSDK.NET_DVR_GetLastError());
- return "";
- }
- log.debug("录像开始");
- } else {
- if (GlobalVariable.previewMap.containsKey(cameraId)) {
- Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
- hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
- GlobalVariable.previewMap.remove(cameraId);
- }
- log.debug("录像停止");
- //存入minio
- String BucketName = cmd.getRecordBucketName();
- String ObjectName = cmd.getRecordObjectName();
- String ContentType = "video/MP4";
- FileInputStream stream = new FileInputStream(path);
- String simpleUUID = IdUtils.simpleUUID();
- String time = new SimpleDateFormat("yyyyMMdd").format(new Date());
- String recordName = cameraId + "/" + time + "/" + ObjectName + "_" + simpleUUID + ".mp4";
- boolean b = MinioUtils.uploadObject(BucketName, recordName, stream, stream.available(), ContentType);
- if (b) {
- String url = MinioClientSingleton.domainUrl + "/" + BucketName + "/" + recordName;
- log.debug("上传文件成功!" + url);
- return url;
- }
+ if (GlobalVariable.previewMap.containsKey(cameraId)) {
+ Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
+ hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
+ GlobalVariable.previewMap.remove(cameraId);
+ log.debug("停止当前录像");
}
- return "";
+ int lRealHandle = hCNetSDK.NET_DVR_RealPlay_V40(userId, previewinfo, null, null);
+ if (lRealHandle == -1) {
+ log.error("取流失败" + hCNetSDK.NET_DVR_GetLastError());
+ return;
+ }
+ log.debug("取流成功");
+ GlobalVariable.threadMap.put(cameraId, Thread.currentThread().getName());
+ GlobalVariable.previewMap.put(cameraId, lRealHandle);
+ if (!hCNetSDK.NET_DVR_SaveRealData_V30(GlobalVariable.previewMap.get(cameraId), 2, path)) {
+ log.error("保存视频文件到临时文件夹失败 错误码为: " + hCNetSDK.NET_DVR_GetLastError());
+ return;
+ }
+ log.debug("录像开始");
+ } catch (Exception ex) {
+ log.error("开始录像异常" + ex.getMessage());
+ }
+ }
+
+ @Override
+ public String recordStopToMinio(CameraCmd cmd) {
+ String url = "";
+ try {
+ String cameraId = cmd.getCameraId();
+ Integer channelNum = cmd.getChannelNum();
+ String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
+ if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+ return "";
+ }
+ Integer userId = GlobalVariable.loginMap.get(cameraId);
+ //region 强制I帧
+ HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //新建结构体对象
+ netDvrIFrame.read();
+ netDvrIFrame.dwChannel = channelNum;//因为上文代码中设置了通道号,按照上文中的设置
+ netDvrIFrame.byStreamType = 0;
+ netDvrIFrame.dwSize = netDvrIFrame.size();
+ netDvrIFrame.write();
+ if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) {
+ log.error("强制I帧 错误码为: " + hCNetSDK.NET_DVR_GetLastError());
+ }
+ //endregion
+ //region 预览参数
+ NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO();
+ previewinfo.read();
+ previewinfo.lChannel = channelNum;
+ previewinfo.dwStreamType = 0;//码流类型:0-主码流,1-子码流,2-三码流,3-虚拟码流,以此类推
+ previewinfo.dwLinkMode = 0;//连接方式:0-TCP方式,1-UDP方式,2-多播方式,3-RTP方式,4-RTP/RTSP,5-RTP/HTTP,6-HRUDP(可靠传输),7-RTSP/HTTPS,8-NPQ
+ previewinfo.hPlayWnd = null;//播放窗口的句柄,为NULL表示不解码显示。
+ previewinfo.bBlocked = 0;//0- 非阻塞取流,1-阻塞取流
+ previewinfo.byNPQMode = 0;//NPQ模式:0-直连模式,1-过流媒体模式
+ previewinfo.write();
+ //endregion
+ if (GlobalVariable.previewMap.containsKey(cameraId)) {
+ Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
+ hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
+ GlobalVariable.previewMap.remove(cameraId);
+ }
+ log.debug("录像停止");
+ //存入minio
+ String BucketName = cmd.getRecordBucketName();
+ String ObjectName = cmd.getRecordObjectName();
+ String ContentType = "video/MP4";
+ FileInputStream stream = new FileInputStream(path);
+ String time = new SimpleDateFormat("yyyyMMdd").format(new Date());
+ String recordName = cameraId + "/" + time + "/" + ObjectName + ".mp4";
+ boolean b = MinioUtils.uploadObject(BucketName, recordName, stream, stream.available(), ContentType);
+ if (b) {
+ url = MinioClientSingleton.domainUrl + "/" + BucketName + "/" + recordName;
+ log.debug("上传文件成功!" + url);
+ }
+ return url;
} catch (Exception ex) {
log.error("录像异常" + ex.getMessage());
return "";
}
}
+ @Override
+ public void recordStopNotToMinio(CameraCmd cmd) {
+ try {
+ String cameraId = cmd.getCameraId();
+ Integer channelNum = cmd.getChannelNum();
+ if (!GlobalVariable.loginMap.containsKey(cameraId)) {
+ return;
+ }
+ Integer userId = GlobalVariable.loginMap.get(cameraId);
+ //强制I帧结构体对象
+ HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME(); //新建结构体对象
+ netDvrIFrame.read();
+ netDvrIFrame.dwChannel = channelNum;//因为上文代码中设置了通道号,按照上文中的设置
+ netDvrIFrame.byStreamType = 0;
+ netDvrIFrame.dwSize = netDvrIFrame.size();
+ netDvrIFrame.write();
+ if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) {
+ log.error("强制I帧 错误码为: " + hCNetSDK.NET_DVR_GetLastError());
+ }
+ //预览参数
+ NET_DVR_PREVIEWINFO previewinfo = new NET_DVR_PREVIEWINFO();
+ previewinfo.read();
+ previewinfo.lChannel = channelNum;
+ previewinfo.dwStreamType = 0;//码流类型:0-主码流,1-子码流,2-三码流,3-虚拟码流,以此类推
+ previewinfo.dwLinkMode = 0;//连接方式:0-TCP方式,1-UDP方式,2-多播方式,3-RTP方式,4-RTP/RTSP,5-RTP/HTTP,6-HRUDP(可靠传输),7-RTSP/HTTPS,8-NPQ
+ previewinfo.hPlayWnd = null;//播放窗口的句柄,为NULL表示不解码显示。
+ previewinfo.bBlocked = 0;//0- 非阻塞取流,1-阻塞取流
+ previewinfo.byNPQMode = 0;//NPQ模式:0-直连模式,1-过流媒体模式
+ previewinfo.write();
+ if (GlobalVariable.previewMap.containsKey(cameraId)) {
+ Integer lRealHandle = GlobalVariable.previewMap.get(cameraId);
+ hCNetSDK.NET_DVR_StopRealPlay(lRealHandle);
+ GlobalVariable.previewMap.remove(cameraId);
+ }
+ log.debug("录像停止");
+ } catch (Exception ex) {
+ log.error("录像停止异常" + ex.getMessage());
+ }
+ }
}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/imageUtil/waterMarkUtil.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/imageUtil/waterMarkUtil.java
index bda1c8a..4b5e098 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/imageUtil/waterMarkUtil.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/imageUtil/waterMarkUtil.java
@@ -17,8 +17,7 @@
import java.io.OutputStream;
/**
- * 图片水印工具类
- *
+ * 图片水印工具类
*/
public class waterMarkUtil {
@@ -31,7 +30,7 @@
// 水印文字字体
private static final Font font = new Font("宋体", Font.BOLD, 30);
// 水印文字颜色
- private static final Color color = Color.white;
+ private static final Color color = Color.blue;
/**
* 给图片添加水印文字
@@ -152,15 +151,14 @@
e.printStackTrace();
}
}
+
+ public static void main(String[] args) {
+ String srcImgPath = "G:\\data\\pic\\7aad76110e7c478598da6b82d7446246.jpeg";
+ String text = "synjones";
+ // 给图片添加水印文字
+ //markImage(text, srcImgPath, "G:\\data\\pic\\微信截图水印.png");
+ // 给图片添加水印文字,水印文字旋转-45
+ markImage(text, srcImgPath, "G:\\data\\pic\\7aad76110e7c478598da6b82d7446246水印.png", 45);
+ System.out.println("给图片添加水印文字完毕");
+ }
}
-// public static void main(String[] args) {
-// String srcImgPath = "D:\\testSmile.jpg";
-// String text = "JCccc";
-// // 给图片添加水印文字
-// markImage(text, srcImgPath, "D:\\testSmileWithMark.jpg");
-// // 给图片添加水印文字,水印文字旋转-45
-// markImage(text, srcImgPath, "D:\\testSmileWithMarkRotate.jpg", -45);
-// System.out.println("给图片添加水印文字完毕");
-// }
-
-
diff --git a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
index e8123e7..4c32163 100644
--- a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
@@ -6,6 +6,7 @@
import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell;
import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper;
import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.camera.domain.CameraCmd;
import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
@@ -453,8 +454,7 @@
boolean setTargetPosition = hikClientService.guideTargetPosition(cmd);
if (setTargetPosition) {
/*控制相机巡检成功,开始录像*/
- cmd.setEnable(true);//启动录像
- hikClientService.recordToMinio(cmd);
+ hikClientService.recordStart(cmd);
} else {
/*控制失败,当前步骤启动时间置null*/
ardVideoInspectTask.setCurrentStepStartTime("");
@@ -541,11 +541,9 @@
cmd.setCameraId(cameraId);
cmd.setChannelNum(channel);
cmd.setOperator("sys_patrol_inspect");
- cmd.setEnable(false);//停止录像
cmd.setRecordBucketName("record");
- cmd.setRecordObjectName("inspect");
- cmd.setUploadMinio(true);
- String url= hikClientService.recordToMinio(cmd);
+ cmd.setRecordObjectName("inspect_"+ IdUtils.fastSimpleUUID());
+ String url= hikClientService.recordStopToMinio(cmd);
/*插入巡检记录*/
ArdVideoInspectRecord ardVideoInspectRecord = new ArdVideoInspectRecord();
ardVideoInspectRecord.setStepId(step.getId());
diff --git a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java
index b56f6f3..d440ac7 100644
--- a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java
+++ b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/InspectionTaskManager.java
@@ -77,9 +77,7 @@
CameraCmd cmd = new CameraCmd();
cmd.setCameraId(ardVideoInspectTask.getCameraId());
cmd.setChannelNum(ardVideoInspectTask.getChannel());
- cmd.setEnable(false);//停止录像
- cmd.setUploadMinio(false);
- hikClientService.recordToMinio(cmd);
+ hikClientService.recordStopNotToMinio(cmd);
GlobalVariable.previewMap.remove(cameraId);
}
/*停止任务*/
--
Gitblit v1.9.3