From 0be852043be57c9a0daba2e7d0e8aa531fdeedba Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: Tue, 01 Aug 2023 16:06:09 +0800
Subject: [PATCH] 打卡时间格式化"yyyy-MM-dd HH:mm:ss"
---
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java | 237 ++++++++++++++++++++++++++++++++--------------------------
1 files changed, 130 insertions(+), 107 deletions(-)
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..ba67776 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,9 +2,9 @@
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.camera.service.IArdCamerasService;
import com.ruoyi.device.hiksdk.common.GlobalVariable;
import com.ruoyi.device.camera.domain.ArdCameras;
import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
@@ -20,11 +20,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;
@@ -44,7 +42,7 @@
public class HikClientServiceImpl implements IHikClientService {
@Resource
- ArdCamerasMapper ardCamerasMapper;
+ IArdCamerasService ardCamerasService;
private static HCNetSDK hCNetSDK;
@@ -197,7 +195,7 @@
public void loginAll() {
try {
log.debug("加载lib完成!");
- List<ArdCameras> ardCameras = ardCamerasMapper.selectArdCamerasListNoDataScope(new ArdCameras());
+ List<ArdCameras> ardCameras = ardCamerasService.selectArdCamerasListNoDataScope(new ArdCameras());
for (ArdCameras camera : ardCameras) {
Thread.sleep(500);
login(camera);
@@ -618,9 +616,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));
@@ -650,7 +648,7 @@
NET_DVR_PTZPOS m_ptzPosCurrent = new NET_DVR_PTZPOS();
m_ptzPosCurrent.wAction = 1;
try {
- ArdCameras cameras = ardCamerasMapper.selectArdCamerasById(cameraId);
+ ArdCameras cameras = ardCamerasService.selectArdCamerasById(cameraId);
double[] cameraPositon = new double[]{cameras.getLongitude(), cameras.getLatitude(), cameras.getAltitude()};
double[] targetPositions = cmd.getTargetPosition();
double[] cameraPTZ = GisUtil.getCameraPTZ(cameraPositon, targetPositions, 20, 150);
@@ -686,11 +684,11 @@
@SdkOperate
public boolean controlLock(CameraCmd cmd) {
String cameraId = cmd.getCameraId();//申请锁的相机
- ArdCameras ardCameras = ardCamerasMapper.selectArdCamerasById(cameraId);
+ ArdCameras ardCameras = ardCamerasService.selectArdCamerasById(cameraId);
Date now = new Date();
now.setTime(now.getTime() + cmd.getExpired() * 1000);
ardCameras.setOperatorExpired(now);//设置当前过期时间
- ardCamerasMapper.updateArdCameras(ardCameras);
+ ardCamerasService.updateArdCameras(ardCameras);
return true;
}
@@ -706,11 +704,11 @@
public boolean controlUnLock(CameraCmd cmd) {
String cameraId = cmd.getCameraId();//申请解锁的相机
String operator = cmd.getOperator();//申请者
- ArdCameras ardCameras = ardCamerasMapper.selectArdCamerasById(cameraId);
+ ArdCameras ardCameras = ardCamerasService.selectArdCamerasById(cameraId);
if (ardCameras.getOperatorId().equals(operator)) {
//如果解锁相机的当前用户是申请者,则清空该相机的过期时间
ardCameras.setOperatorExpired(null);
- int i = ardCamerasMapper.updateArdCameras(ardCameras);
+ int i = ardCamerasService.updateArdCameras(ardCameras);
if (i > 0) {
log.debug(cameraId + "--解锁成功");
}
@@ -745,8 +743,7 @@
return -1;
} else {
netDvrPtzLockcfg.read();
- int byWorkMode = netDvrPtzLockcfg.byWorkMode;
- return byWorkMode;
+ return netDvrPtzLockcfg.byWorkMode;
}
}
@@ -871,7 +868,6 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("设置透雾失败,请稍后重试" + code);
- return false;
}
log.info("设置透雾成功");
return bool;
@@ -920,7 +916,6 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("设置夜视失败,请稍后重试" + code);
- return false;
}
log.info("设置夜视成功");
return bool;
@@ -967,7 +962,6 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("设置聚焦模式失败,请稍后重试" + code);
- return false;
}
log.info("设置聚焦模式成功");
return bool;
@@ -1010,7 +1004,7 @@
return false;
}
Integer userId = GlobalVariable.loginMap.get(cameraId);
- Integer dwStop;
+ int dwStop;
if (enable) {
dwStop = 0;//开启
} else {
@@ -1020,7 +1014,6 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("设置云台加热失败,请稍后重试" + code);
- return false;
}
log.info("设置云台加热成功");
return bool;
@@ -1064,7 +1057,6 @@
if (!bool) {
int code = hCNetSDK.NET_DVR_GetLastError();
log.info("设置镜头除冰失败,请稍后重试" + code);
- return false;
}
log.info("设置镜头除冰成功");
return bool;
@@ -1073,7 +1065,7 @@
/**
* 截图 返给前端
*
- * @param cmd
+ * @param cmd 相机命令
*/
public String captureJPEGPicture(CameraCmd cmd) {
String cameraId = cmd.getCameraId();
@@ -1100,41 +1092,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 +1226,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 +1235,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 +1264,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
--
Gitblit v1.9.3