修改云台控制

拍照返回
相机掉线重连
nanjing-yancao-wuliuzhongxin-qsl
LAPTOP-S9HJSOEB\昊天 6 days ago
parent b0408395f9
commit 88755383b2

@ -9,6 +9,7 @@
<properties> <properties>
<java.version>1.8</java.version> <java.version>1.8</java.version>
<lombok.version>1.18.40</lombok.version>
<spring-boot.version>2.1.9.RELEASE</spring-boot.version> <spring-boot.version>2.1.9.RELEASE</spring-boot.version>
<fastjson.version>1.2.47</fastjson.version> <fastjson.version>1.2.47</fastjson.version>
<qrcode.version>2.1</qrcode.version> <qrcode.version>2.1</qrcode.version>
@ -34,6 +35,13 @@
<type>pom</type> <type>pom</type>
<scope>import</scope> <scope>import</scope>
</dependency> </dependency>
<!-- 显式锁定 lombok(子模块 import 的旧 spring-boot-dependencies 会覆盖父级版本) -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>
@ -166,6 +174,29 @@
<configuration> <configuration>
<source>1.8</source> <source>1.8</source>
<target>1.8</target> <target>1.8</target>
<!-- 显式声明 lombok 为 annotation processor,避免 JDK 25 下自动发现失效 -->
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
</annotationProcessorPaths>
<!-- JDK 16+ 强封装 jdk.compiler,lombok 1.18.x 需通过 add opens 参数打开内部 API -->
<fork>true</fork>
<compilerArgs>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
</compilerArgs>
</configuration> </configuration>
</plugin> </plugin>
</plugins> </plugins>

@ -15,6 +15,7 @@
<properties> <properties>
<java.version>1.8</java.version> <java.version>1.8</java.version>
<lombok.version>1.18.40</lombok.version>
<spring-boot.version>2.1.9.RELEASE</spring-boot.version> <spring-boot.version>2.1.9.RELEASE</spring-boot.version>
<jwt.version>0.7.0</jwt.version> <jwt.version>0.7.0</jwt.version>
</properties> </properties>
@ -28,6 +29,13 @@
<type>pom</type> <type>pom</type>
<scope>import</scope> <scope>import</scope>
</dependency> </dependency>
<!-- 显式锁定 lombok(子模块 import 的旧 spring-boot-dependencies 会覆盖父级版本) -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>

@ -23,8 +23,23 @@
<properties> <properties>
<java.version>1.8</java.version> <java.version>1.8</java.version>
<!-- 覆盖 spring-boot-parent 管理的 lombok 1.18.10(旧版与 JDK 16+ 不兼容)
1.18.38+ 才支持 JDK 25(maven-compiler-plugin 3.13.0) -->
<lombok.version>1.18.40</lombok.version>
</properties> </properties>
<dependencyManagement>
<dependencies>
<!-- 显式锁定 lombok,避免被任意子模块 import 的 BOM 覆盖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
@ -118,6 +133,29 @@
<configuration> <configuration>
<source>1.8</source> <source>1.8</source>
<target>1.8</target> <target>1.8</target>
<!-- 显式声明 lombok 为 annotation processor,避免 JDK 25 下自动发现失效 -->
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
</annotationProcessorPaths>
<!-- JDK 16+ 强封装 jdk.compiler,lombok 1.18.x 需通过 add opens 参数打开内部 API -->
<fork>true</fork>
<compilerArgs>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
</compilerArgs>
</configuration> </configuration>
</plugin> </plugin>
<plugin> <plugin>

@ -32,9 +32,53 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
public boolean connectStatus(Integer cameraId){ public boolean connectStatus(Integer cameraId){
NetSDKLib.LLong userId = CameraConnMap.getConnId(cameraId); NetSDKLib.LLong userId = CameraConnMap.getConnId(cameraId);
if(userId == null){
log.error("connectStatus error,camera is not login,cameraId:{}",cameraId);
return false;
}
boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_RemoteControl(userId.intValue(),20005,null,0);
if(!ok){
log.error("connectStatus error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId);
}
return ok;
}
return HikLoginModuleImpl.hcNetsdk.NET_DVR_RemoteControl(userId.intValue(),20005,null,0); /**
* 控制前校验:获取登录句柄,未连接则自动重连
*
* @param cameraId 球机ID
* @return 登录句柄,null 表示球机未连接
*/
private NetSDKLib.LLong getLoginId(Integer cameraId){
if(!HikLoginModuleImpl.checkAndReLogin(cameraId)){
log.error("camera is not connected,cameraId:{}",cameraId);
return null;
}
NetSDKLib.LLong loginId = CameraConnMap.getConnId(cameraId);
if(loginId == null){
log.error("camera login handler is not exists,cameraId:{}",cameraId);
}
return loginId;
}
/**
* 云台控制统一入口
*
* @param cameraId 球机ID
* @param command 控制指令
* @param stop 0-开始 1-停止
* @param action 操作名称,用于失败日志
*/
private boolean ptzControl(Integer cameraId,int command,int stop,String action){
NetSDKLib.LLong loginId = getLoginId(cameraId);
if(loginId == null){
return false;
}
boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(loginId.intValue(), 1, command, stop);
if(!ok){
log.error("{} error:{},cameraId:{}",action, HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId);
}
return ok;
} }
/** /**
@ -42,14 +86,12 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
*/ */
public boolean ptzControlUpStart(Integer cameraId, int nChannelID, int dwPTZCommand,int dwStop) public boolean ptzControlUpStart(Integer cameraId, int nChannelID, int dwPTZCommand,int dwStop)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.TILT_UP, 0, "ptzControlUpStart");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.TILT_UP, 0);
} }
public boolean ptzControlUpEnd(Integer cameraId, int nChannelID) public boolean ptzControlUpEnd(Integer cameraId, int nChannelID)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.TILT_UP, 1, "ptzControlUpEnd");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.TILT_UP, 1);
} }
/** /**
@ -57,14 +99,12 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
*/ */
public boolean ptzControlDownStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop) public boolean ptzControlDownStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.TILT_DOWN, 0, "ptzControlDownStart");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.TILT_DOWN, 0);
} }
public boolean ptzControlDownEnd(Integer cameraId, int nChannelID) public boolean ptzControlDownEnd(Integer cameraId, int nChannelID)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.TILT_DOWN, 1, "ptzControlDownEnd");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.TILT_DOWN, 1);
} }
/** /**
@ -72,27 +112,29 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
*/ */
public boolean ptzControlLeftStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop) public boolean ptzControlLeftStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.PAN_LEFT, 0, "ptzControlLeftStart");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.PAN_LEFT, 0);
} }
public boolean ptzControlLeftEnd(Integer cameraId, int nChannelID) public boolean ptzControlLeftEnd(Integer cameraId, int nChannelID)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.PAN_LEFT, 1, "ptzControlLeftEnd");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.PAN_LEFT, 1);
} }
@Override @Override
public CameraPtzPojo ptzGetDVRConfig(Integer lUserID) { public CameraPtzPojo ptzGetDVRConfig(Integer lUserID) {
CameraPtzPojo cameraPtzPojo = new CameraPtzPojo(); CameraPtzPojo cameraPtzPojo = new CameraPtzPojo();
int lUserId = CameraConnMap.getConnId(lUserID).intValue(); NetSDKLib.LLong loginId = getLoginId(lUserID);
if(loginId == null){
cameraPtzPojo.setGetSuccess(false);
return cameraPtzPojo;
}
HCNetSDK.NET_DVR_PTZPOS netDvrPtzpos = new HCNetSDK.NET_DVR_PTZPOS(); HCNetSDK.NET_DVR_PTZPOS netDvrPtzpos = new HCNetSDK.NET_DVR_PTZPOS();
Pointer pointer = netDvrPtzpos.getPointer(); Pointer pointer = netDvrPtzpos.getPointer();
IntByReference intByReference = new IntByReference(1); IntByReference intByReference = new IntByReference(1);
boolean b_GetPTZ = HikLoginModuleImpl.hcNetsdk.NET_DVR_GetDVRConfig(lUserId, NET_DVR_GET_PTZPOS,1,pointer,netDvrPtzpos.size(),intByReference); boolean b_GetPTZ = HikLoginModuleImpl.hcNetsdk.NET_DVR_GetDVRConfig(loginId.intValue(), NET_DVR_GET_PTZPOS,1,pointer,netDvrPtzpos.size(),intByReference);
if (b_GetPTZ == false) { if (b_GetPTZ == false) {
System.out.println("获取PTZ坐标信息失败,错误码:" +HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError()); log.error("ptzGetDVRConfig error:{},cameraId:{}",HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),lUserID);
cameraPtzPojo.setGetSuccess(false); cameraPtzPojo.setGetSuccess(false);
}else { }else {
@ -120,28 +162,24 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
*/ */
public boolean ptzControlRightStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop) public boolean ptzControlRightStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.PAN_RIGHT, 0, "ptzControlRightStart");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.PAN_RIGHT, 0);
} }
public boolean ptzControlRightEnd(Integer cameraId, int nChannelID) public boolean ptzControlRightEnd(Integer cameraId, int nChannelID)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.PAN_RIGHT, 1, "ptzControlRightEnd");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.PAN_RIGHT, 1);
} }
/** /**
* 向左上 * 向左上
*/ */
public boolean ptzControlLeftUpStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop) public boolean ptzControlLeftUpStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.UP_LEFT, 0, "ptzControlLeftUpStart");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.UP_LEFT, 0);
} }
public boolean ptzControlLeftUpEnd(Integer cameraId, int nChannelID) public boolean ptzControlLeftUpEnd(Integer cameraId, int nChannelID)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.UP_LEFT, 1, "ptzControlLeftUpEnd");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.UP_LEFT, 1);
} }
/** /**
@ -149,46 +187,36 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
*/ */
public boolean ptzControlRightUpStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop) public boolean ptzControlRightUpStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.UP_RIGHT, 0, "ptzControlRightUpStart");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.UP_RIGHT, 0);
} }
public boolean ptzControlRightUpEnd(Integer cameraId, int nChannelID) public boolean ptzControlRightUpEnd(Integer cameraId, int nChannelID)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.UP_RIGHT, 1, "ptzControlRightUpEnd");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.UP_RIGHT, 1);
} }
/** /**
* 向左下 * 向左下
*/ */
public boolean ptzControlLeftDownStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop) public boolean ptzControlLeftDownStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.DOWN_LEFT, 0, "ptzControlLeftDownStart");
Boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.DOWN_LEFT, 0);
if(!ok){
log.error("error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId);
}
return ok;
} }
public boolean ptzControlLeftDownEnd(Integer cameraId, int nChannelID) public boolean ptzControlLeftDownEnd(Integer cameraId, int nChannelID)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.DOWN_LEFT, 1, "ptzControlLeftDownEnd");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.DOWN_LEFT, 1);
} }
/** /**
* 向右下 * 向右下
*/ */
public boolean ptzControlRightDownStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop) public boolean ptzControlRightDownStart(Integer cameraId, int nChannelID, int dwPTZCommand, int dwStop)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.DOWN_RIGHT, 0, "ptzControlRightDownStart");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.DOWN_RIGHT, 0);
} }
public boolean ptzControlRightDownEnd(Integer cameraId, int nChannelID) public boolean ptzControlRightDownEnd(Integer cameraId, int nChannelID)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.DOWN_RIGHT, 1, "ptzControlRightDownEnd");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.DOWN_RIGHT, 1);
} }
/** /**
@ -196,14 +224,12 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
*/ */
public boolean ptzControlZoomAddStart(Integer cameraId, int nChannelID, int dwPTZCommand) public boolean ptzControlZoomAddStart(Integer cameraId, int nChannelID, int dwPTZCommand)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.ZOOM_IN, 0, "ptzControlZoomAddStart");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.ZOOM_IN, 0);
} }
public boolean ptzControlZoomAddEnd(Integer cameraId, int nChannelID) public boolean ptzControlZoomAddEnd(Integer cameraId, int nChannelID)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.ZOOM_IN, 1, "ptzControlZoomAddEnd");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.ZOOM_IN, 1);
} }
/** /**
@ -211,42 +237,36 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
*/ */
public boolean ptzControlZoomDecStart(Integer cameraId, int nChannelID, int dwPTZCommand) public boolean ptzControlZoomDecStart(Integer cameraId, int nChannelID, int dwPTZCommand)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.ZOOM_OUT, 0, "ptzControlZoomDecStart");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.ZOOM_OUT, 0);
} }
public boolean ptzControlZoomDecEnd(Integer cameraId, int nChannelID) public boolean ptzControlZoomDecEnd(Integer cameraId, int nChannelID)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.ZOOM_OUT, 1, "ptzControlZoomDecEnd");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.ZOOM_OUT, 1);
} }
/** /**
* 变焦+ * 变焦+
*/ */
public boolean ptzControlFocusAddStart(Integer cameraId, int nChannelID, int dwPTZCommand) public boolean ptzControlFocusAddStart(Integer cameraId, int nChannelID, int dwPTZCommand)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.FOCUS_NEAR, 0, "ptzControlFocusAddStart");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.FOCUS_NEAR, 0);
} }
public boolean ptzControlFocusAddEnd(Integer cameraId, int nChannelID) public boolean ptzControlFocusAddEnd(Integer cameraId, int nChannelID)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.FOCUS_NEAR, 1, "ptzControlFocusAddEnd");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.FOCUS_NEAR, 1);
} }
/** /**
* 变焦- * 变焦-
*/ */
public boolean ptzControlFocusDecStart(Integer cameraId, int nChannelID, int dwPTZCommand) public boolean ptzControlFocusDecStart(Integer cameraId, int nChannelID, int dwPTZCommand)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.FOCUS_FAR, 0, "ptzControlFocusDecStart");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.FOCUS_FAR, 0);
} }
public boolean ptzControlFocusDecEnd(Integer cameraId, int nChannelID) public boolean ptzControlFocusDecEnd(Integer cameraId, int nChannelID)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.FOCUS_FAR, 1, "ptzControlFocusDecEnd");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.FOCUS_FAR, 1);
} }
/** /**
@ -254,14 +274,12 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
*/ */
public boolean ptzControlIrisAddStart(Integer cameraId, int nChannelID, int dwPTZCommand) public boolean ptzControlIrisAddStart(Integer cameraId, int nChannelID, int dwPTZCommand)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.IRIS_OPEN, 0, "ptzControlIrisAddStart");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.IRIS_OPEN, 0);
} }
public boolean ptzControlIrisAddEnd(Integer cameraId, int nChannelID) public boolean ptzControlIrisAddEnd(Integer cameraId, int nChannelID)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.IRIS_OPEN, 1, "ptzControlIrisAddEnd");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.IRIS_OPEN, 1);
} }
/** /**
@ -269,25 +287,25 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
*/ */
public boolean ptzControlIrisDecStart(Integer cameraId, int nChannelID, int dwPTZCommand) public boolean ptzControlIrisDecStart(Integer cameraId, int nChannelID, int dwPTZCommand)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.IRIS_CLOSE, 0, "ptzControlIrisDecStart");
return HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.IRIS_CLOSE, 0);
} }
public boolean ptzControlIrisDecEnd(Integer cameraId, int nChannelID) public boolean ptzControlIrisDecEnd(Integer cameraId, int nChannelID)
{ {
int lUserId = CameraConnMap.getConnId(cameraId).intValue(); return ptzControl(cameraId, HCNetSDK.IRIS_CLOSE, 1, "ptzControlIrisDecEnd");
Boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZControl_Other(lUserId, 1, HCNetSDK.IRIS_CLOSE, 1);
return ok;
} }
public boolean pic(Integer cameraId, int nChannelID, String path) public boolean pic(Integer cameraId, int nChannelID, String path)
{ {
NetSDKLib.LLong loginId = getLoginId(cameraId);
if(loginId == null){
return false;
}
PathUtil.checkDirc(path); PathUtil.checkDirc(path);
int lUserId = CameraConnMap.getConnId(cameraId).intValue();
short wPicSize = 3; short wPicSize = 3;
short wPicQuality = 0; short wPicQuality = 0;
HCNetSDK.NET_DVR_JPEGPARA jpegpara = new HCNetSDK.NET_DVR_JPEGPARA(wPicSize, wPicQuality); HCNetSDK.NET_DVR_JPEGPARA jpegpara = new HCNetSDK.NET_DVR_JPEGPARA(wPicSize, wPicQuality);
boolean picResult = HikLoginModuleImpl.hcNetsdk.NET_DVR_CaptureJPEGPicture(lUserId, 1, jpegpara, path); boolean picResult = HikLoginModuleImpl.hcNetsdk.NET_DVR_CaptureJPEGPicture(loginId.intValue(), 1, jpegpara, path);
if (!picResult) { if (!picResult) {
log.error("pic error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId); log.error("pic error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId);
} }
@ -296,6 +314,10 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
} }
public void downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end) { public void downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end) {
NetSDKLib.LLong loginId = getLoginId(cameraId);
if(loginId == null){
return;
}
start = start.minusMinutes(1); start = start.minusMinutes(1);
end = end.minusMinutes(1); end = end.minusMinutes(1);
PathUtil.checkDirc(path); PathUtil.checkDirc(path);
@ -305,9 +327,8 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
endTime.setTime(end.getYear(), end.getMonthValue(), end.getDayOfMonth(), end.getHour(), end.getMinute(), end.getSecond()); endTime.setTime(end.getYear(), end.getMonthValue(), end.getDayOfMonth(), end.getHour(), end.getMinute(), end.getSecond());
log.info("start download mp4 path:{} ,cameraId:{},start_time:{},end_time:{}",path,cameraId,startTime.toStringTime(),endTime.toStringTime()); log.info("start download mp4 path:{} ,cameraId:{},start_time:{},end_time:{}",path,cameraId,startTime.toStringTime(),endTime.toStringTime());
int lUserID = CameraConnMap.getConnId(cameraId).intValue();
int result = HikLoginModuleImpl.hcNetsdk.NET_DVR_GetFileByTime(lUserID, 1, startTime, endTime, path); int result = HikLoginModuleImpl.hcNetsdk.NET_DVR_GetFileByTime(loginId.intValue(), 1, startTime, endTime, path);
if (result == -1) { if (result == -1) {
log.error("downloadMp4 error code:{},cameraId:{},path:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId,path); log.error("downloadMp4 error code:{},cameraId:{},path:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId,path);
} else { } else {
@ -418,8 +439,10 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
*/ */
public void ptz(Integer ptzId, String name, Integer cameraId) public void ptz(Integer ptzId, String name, Integer cameraId)
{ {
NetSDKLib.LLong loginId = getLoginId(cameraId);
Assert.notNull(loginId,"球机未连接");
int dwzCommand = HCNetSDK.SET_PRESET; int dwzCommand = HCNetSDK.SET_PRESET;
Boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZPreset_Other(CameraConnMap.getConnId(cameraId).intValue(), 1, dwzCommand, ptzId.intValue()); Boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZPreset_Other(loginId.intValue(), 1, dwzCommand, ptzId.intValue());
if(!ok){ if(!ok){
log.error("ptz error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId); log.error("ptz error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId);
} }
@ -433,8 +456,12 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
*/ */
public void toPtz(Integer ptzId, Integer cameraId) public void toPtz(Integer ptzId, Integer cameraId)
{ {
NetSDKLib.LLong loginId = getLoginId(cameraId);
if(loginId == null){
return;
}
int dwPTZCommand = HCNetSDK.GOTO_PRESET; int dwPTZCommand = HCNetSDK.GOTO_PRESET;
Boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZPreset_Other(CameraConnMap.getConnId(cameraId).intValue(), 1, dwPTZCommand, ptzId); Boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZPreset_Other(loginId.intValue(), 1, dwPTZCommand, ptzId);
if(!ok){ if(!ok){
log.error("toPtz error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId); log.error("toPtz error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId);
} }
@ -447,6 +474,10 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
* @param cameraId * @param cameraId
*/ */
public void toPtzSlow(Integer cameraId,Integer x) { public void toPtzSlow(Integer cameraId,Integer x) {
NetSDKLib.LLong loginId = getLoginId(cameraId);
if(loginId == null){
return;
}
int dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_MOVE_ABSOLUTELY; int dwPTZCommand = NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_MOVE_ABSOLUTELY;
NetSDKLib.PTZ_CONTROL_ABSOLUTELY absolutely = new NetSDKLib.PTZ_CONTROL_ABSOLUTELY(); NetSDKLib.PTZ_CONTROL_ABSOLUTELY absolutely = new NetSDKLib.PTZ_CONTROL_ABSOLUTELY();
@ -456,7 +487,7 @@ public class HikCameraControlModuleImpl implements CameraControlModule {
absolutely.stuSpeed.fPositionY = 0.2f; absolutely.stuSpeed.fPositionY = 0.2f;
absolutely.write(); absolutely.write();
//absolutely.stuSpeed.fZoom = 0.5f; //absolutely.stuSpeed.fZoom = 0.5f;
Boolean ok = HikLoginModuleImpl.netsdk.CLIENT_DHPTZControlEx2(CameraConnMap.getConnId(cameraId), 0, dwPTZCommand, Boolean ok = HikLoginModuleImpl.netsdk.CLIENT_DHPTZControlEx2(loginId, 0, dwPTZCommand,
0, 0, 0, 0, absolutely.getPointer()); 0, 0, 0, 0, absolutely.getPointer());
if(!ok){ if(!ok){
log.error("toPtzSlow error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId); log.error("toPtzSlow error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId);

@ -1,8 +1,12 @@
package com.zhehekeji.web.lib.hik; package com.zhehekeji.web.lib.hik;
import com.sun.jna.Pointer; import com.sun.jna.Pointer;
import com.zhehekeji.common.util.SpringContextUtil;
import com.zhehekeji.web.entity.Camera;
import com.zhehekeji.web.lib.CameraConnMap;
import com.zhehekeji.web.lib.CameraControlLoginModule; import com.zhehekeji.web.lib.CameraControlLoginModule;
import com.zhehekeji.web.lib.joyware.NetSDKLib; import com.zhehekeji.web.lib.joyware.NetSDKLib;
import com.zhehekeji.web.mapper.CameraMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
/** /**
@ -20,8 +24,14 @@ public class HikLoginModuleImpl implements CameraControlLoginModule {
private static int MAX_RECONNET_TIME = 100; private static int MAX_RECONNET_TIME = 100;
/** 重连时的最大登录尝试次数 */
private static int MAX_RELOGIN_TIME = 3;
private static boolean hasInit = Boolean.FALSE; private static boolean hasInit = Boolean.FALSE;
/** 重连使用的实例 */
private static final HikLoginModuleImpl INSTANCE = new HikLoginModuleImpl();
static HikExceptionCallBack hikExceptionCallBack = new HikExceptionCallBack(); static HikExceptionCallBack hikExceptionCallBack = new HikExceptionCallBack();
/** /**
@ -61,6 +71,69 @@ public class HikLoginModuleImpl implements CameraControlLoginModule {
return hcNetsdk.NET_DVR_RemoteControl(userId,20005,null,0); return hcNetsdk.NET_DVR_RemoteControl(userId,20005,null,0);
} }
/**
* 控制前调用:判断球机是否已连接,未连接则自动重连
*
* @param cameraId 球机ID
* @return true 已连接(或重连成功)
*/
public static boolean checkAndReLogin(Integer cameraId){
if(cameraId == null){
return false;
}
NetSDKLib.LLong loginId = CameraConnMap.getConnId(cameraId);
if(loginId != null && connectStatus(loginId.intValue())){
return true;
}
log.warn("camera is disconnected,ready to relogin,cameraId:{}",cameraId);
return reLogin(cameraId);
}
/**
* 重新登录球机
*
* @param cameraId 球机ID
* @return true 重连成功
*/
public static boolean reLogin(Integer cameraId){
Camera camera = getCamera(cameraId);
if(camera == null){
log.error("relogin error,camera is not exists,cameraId:{}",cameraId);
return false;
}
//释放旧的登录句柄
NetSDKLib.LLong oldLoginId = CameraConnMap.getConnId(cameraId);
if(oldLoginId != null){
try{
hcNetsdk.NET_DVR_Logout(oldLoginId.intValue());
}catch (Exception e){
log.error("relogin logout error,cameraId:{},message:{}",cameraId,e.getMessage());
}
CameraConnMap.disConn(cameraId);
}
NetSDKLib.LLong loginId = INSTANCE.login(camera.getIp(),camera.getPort(),camera.getUser(),camera.getPassword(),MAX_RELOGIN_TIME);
if(loginId == null){
log.error("relogin failed,cameraId:{},ip:{}",cameraId,camera.getIp());
return false;
}
CameraConnMap.conn(cameraId,loginId);
log.info("relogin success,cameraId:{},ip:{}",cameraId,camera.getIp());
return true;
}
/**
* 查询球机登录信息,用于重连
*/
private static Camera getCamera(Integer cameraId){
try{
CameraMapper cameraMapper = SpringContextUtil.getBean(CameraMapper.class);
return cameraMapper.selectById(cameraId);
}catch (Exception e){
log.error("get camera error,cameraId:{},message:{}",cameraId,e.getMessage());
return null;
}
}
/** /**
* \if ENGLISH_LANG * \if ENGLISH_LANG
* Login Device * Login Device
@ -69,6 +142,15 @@ public class HikLoginModuleImpl implements CameraControlLoginModule {
* \endif * \endif
*/ */
public NetSDKLib.LLong login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword) { public NetSDKLib.LLong login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword) {
return login(m_strIp, m_nPort, m_strUser, m_strPassword, MAX_RECONNET_TIME);
}
/**
* 登录设备
*
* @param maxRetry 最大登录尝试次数
*/
public NetSDKLib.LLong login(String m_strIp, int m_nPort, String m_strUser, String m_strPassword, int maxRetry) {
init(); init();
HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();//设备登录信息 HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();//设备登录信息
HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息 HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息
@ -94,7 +176,7 @@ public class HikLoginModuleImpl implements CameraControlLoginModule {
int tryTimes = 0; int tryTimes = 0;
while(m_lUserID < 0 && tryTimes < MAX_RECONNET_TIME){ while(m_lUserID < 0 && tryTimes < maxRetry){
log.error("hik login error,ip:{},port:{},errorCode:{}",m_strIp,m_nPort,hcNetsdk.NET_DVR_GetLastError()); log.error("hik login error,ip:{},port:{},errorCode:{}",m_strIp,m_nPort,hcNetsdk.NET_DVR_GetLastError());
try { try {
Thread.sleep(500); Thread.sleep(500);

@ -25,6 +25,7 @@ import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ArrayBlockingQueue;
import java.util.stream.Collectors;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -671,15 +672,33 @@ public class PlcService {
*/ */
public String IntoStockSave(String SRMNumber,String taskId,String goodsLocation,String picName){ public String IntoStockSave(String SRMNumber,String taskId,String goodsLocation,String picName){
String ip ="http://"+ ClientChanel.getIpFromId(SRMNumber)+":9009/pic/"; String ip = String.format("http://%s:9009/pic/", ClientChanel.getIpFromId(SRMNumber));
String[] pics = picName.split(";"); String[] pics = picName.split(";");
String picNameDataBase = ip+pics[0]+";"+ ip+pics[1];
String picNameDataBase = Arrays.stream(pics)
.map(p -> ip + p)
.collect(Collectors.joining(";"));
Order oldOrder = orderMapper.getOneByOrderNum(taskId); Order oldOrder = orderMapper.getOneByOrderNum(taskId);
oldOrder.setIntoStockPic(picNameDataBase); oldOrder.setIntoStockPic(picNameDataBase);
orderMapper.updateById(oldOrder); orderMapper.updateById(oldOrder);
return ip+pics[0]+"*"+ ip+pics[1]; return ip+pics[0]+"*"+ ip+pics[1];
} }
public static void main(String[] args) {
String picName = "1;2";
String[] pics = picName.split(";");
StringBuilder picNameDataBase = new StringBuilder();
for (String p :pics){
if (picNameDataBase.length()>0){
picNameDataBase.append(";");
}
picNameDataBase.append(p);
}
System.out.println(picNameDataBase.toString());
}
/** /**
* 相机转动,拍照,并返回图片地址 * 相机转动,拍照,并返回图片地址
* 顶部拍照 C1 * 顶部拍照 C1

Loading…
Cancel
Save