ard-work/pom.xml
@@ -30,21 +30,11 @@ <groupId>net.java.jna</groupId> <artifactId>jna</artifactId> <version>1.0.0</version> <!-- <groupId>com.sun.jna</groupId>--> <!-- <artifactId>yx</artifactId>--> <!-- <version>0.0.1</version>--> <!-- <scope>system</scope>--> <!-- <systemPath>${project.basedir}/lib/jna.jar</systemPath>--> </dependency> <dependency> <groupId>net.java.examples</groupId> <artifactId>examples</artifactId> <version>1.0.0</version> <!-- <groupId>com.sun.jna.examples</groupId>--> <!-- <artifactId>yx</artifactId>--> <!-- <version>0.0.1</version>--> <!-- <scope>system</scope>--> <!-- <systemPath>${project.basedir}/lib/examples.jar</systemPath>--> </dependency> <dependency> <groupId>org.springframework.boot</groupId> ard-work/src/main/java/com/ruoyi/constant/sdkPriority.java
@@ -14,5 +14,6 @@ public static Map<String,Object> priorityMap=new HashMap<>(); static { priorityMap.put("sys_radar_fire",999); priorityMap.put("sys_tube_leak",998); } } ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java
@@ -97,14 +97,7 @@ //注销 sdk.loginOut(camera.getId()); //登录 camera = sdk.login(camera); if (camera.getLoginId() >= 0) { log.info("相机" + camera.getIp() + ":" + camera.getPort() + "登录成功:" + camera.getLoginId()); camera.setUpdateBy(SecurityUtils.getUsername()); ardCamerasService.updateArdCameras(camera); } else { log.info("相机" + camera.getIp() + ":" + camera.getPort() + "登录失败:" + camera.getLoginId()); } sdk.login(camera); return toAjax(ardCamerasService.insertArdCameras(camera)); } @@ -120,13 +113,7 @@ if (i > 0) { ArdCameras cameras = ardCamerasService.selectArdCamerasById(camera.getId()); sdk.loginOut(cameras.getId()); camera = sdk.login(cameras); if (camera.getLoginId() >= 0) { log.info("相机" + camera.getIp() + ":" + camera.getPort() + "登录成功:" + camera.getLoginId()); ardCamerasService.updateArdCameras(camera); } else { log.info("相机" + camera.getIp() + ":" + camera.getPort() + "登录失败:" + camera.getLoginId()); } sdk.login(cameras); } return toAjax(i); } ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java
@@ -1,5 +1,6 @@ package com.ruoyi.device.camera.domain; import com.sun.jna.Structure; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java
@@ -17,7 +17,7 @@ void loadHCNetSDKLib(); //登录 ArdCameras login(ArdCameras cameras); void login(ArdCameras cameras); //登录所有相机 void loginAll(); ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -16,6 +16,7 @@ import com.ruoyi.device.hiksdk.util.hikSdkUtil.GisUtil; import com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK; import com.ruoyi.device.hiksdk.service.IHikClientService; import com.ruoyi.device.hiksdk.util.hikSdkUtil.LoginResultCallBack; import com.ruoyi.device.hiksdk.util.minio.MinioUtils; import com.ruoyi.system.mapper.SysUserMapper; import com.sun.jna.Native; @@ -98,15 +99,14 @@ } /** * @描述 注册登录 * @描述 注册登录 只支持同步登陆,且官方不建议直接在此接口下写耗时操作 * @参数 [dvrLogin] * @返回值 java.lang.Integer * @创建人 刘苏义 * @创建时间 2023/1/17 16:12 * @修改人和其它信息 */ @Override public ArdCameras login(ArdCameras camera) { public ArdCameras login1(ArdCameras camera) { // 初始化 if (!hCNetSDK.NET_DVR_Init()) { log.error("SDK初始化失败"); @@ -114,9 +114,9 @@ //打印海康sdk日志 if (Platform.isWindows()) { String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, false); hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); } else { hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", false); hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); } String m_sDeviceIP = camera.getIp(); String m_sUsername = camera.getUsername(); @@ -144,6 +144,60 @@ } /** * @描述 注册登录 集成于NET_DVR_Login_V30,支持同步和异步登录 * @参数 [dvrLogin] * @返回值 java.lang.Integer * @创建人 刘苏义 * @创建时间 2023/1/17 16:12 * @修改人和其它信息 */ @Override public void login(ArdCameras camera) { // 初始化 if (!hCNetSDK.NET_DVR_Init()) { log.error("SDK初始化失败"); } //打印海康sdk日志 if (Platform.isWindows()) { String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); } else { hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); } String m_sDeviceIP = camera.getIp(); String m_sUsername = camera.getUsername(); String m_sPassword = camera.getPassword(); short m_sPort = camera.getPort().shortValue(); //设置连接时间与重连时间 hCNetSDK.NET_DVR_SetConnectTime(2000, 1); hCNetSDK.NET_DVR_SetReconnect(100000, true); //设备信息, 输出参数 HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40(); HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO(); // 注册设备-登录参数,包括设备地址、登录用户、密码等 m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN]; System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length()); m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN]; System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length()); m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN]; System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length()); m_strLoginInfo.wPort = m_sPort; m_strLoginInfo.byVerifyMode = 0; m_strLoginInfo.byLoginMode=0; //是否异步登录:0- 否,1- 是 windowsSDK里是true和false m_strLoginInfo.bUseAsynLogin = true; //异步登录回调 m_strLoginInfo.cbLoginResult = new LoginResultCallBack(camera); m_strLoginInfo.write(); int i = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); if (i < 0) { int errorCode = hCNetSDK.NET_DVR_GetLastError(); log.info("登录异常:" + errorCode); } } /** * @描述 登录所有相机 * @参数 [] * @返回值 void @@ -152,32 +206,12 @@ * @修改人和其它信息 */ @Override @Async("loginExecutor") public void loginAll() { try { log.debug("加载lib完成!"); List<ArdCameras> ardCameras = ardCamerasMapper.selectArdCamerasList(new ArdCameras()); List<ArdCameras> ardCameras = ardCamerasMapper.selectArdCamerasListNoDataScope(new ArdCameras()); for (ArdCameras camera : ardCameras) { camera = login(camera); if (camera.getLoginId() >= 0) { log.info("相机" + camera.getIp() + ":" + camera.getPort() + "登录成功:" + camera.getLoginId()); ardCamerasMapper.updateArdCameras(camera); } else { log.info("相机" + camera.getIp() + ":" + camera.getPort() + "登录失败:" + camera.getLoginId()); } // if (!globalVariable.loginMap.containsKey(camera.getId())) { // camera = login(camera); // if (camera.getLoginId() >= 0) { // log.info("相机" + camera.getIp() + ":" + camera.getPort() + "登录成功:" + camera.getLoginId()); // globalVariable.loginMap.put(camera.getId(), camera.getLoginId()); // ardCamerasService.updateArdCameras(camera); // } else { // log.info("相机" + camera.getIp() + ":" + camera.getPort() + "登录失败:" + camera.getLoginId()); // } // } else { // Integer userid = globalVariable.loginMap.get(camera.getId()); // log.info("当前相机:" + camera.getId() + "已登录,ID:" + userid); // } login(camera); } } catch (Exception ex) { log.error("初始化登录相机异常:" + ex.getMessage()); ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/MapCoordinateToPTZ.java
File was deleted ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java
New file @@ -0,0 +1,47 @@ package com.ruoyi.device.hiksdk.util.hikSdkUtil; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.device.camera.domain.ArdCameras; import com.ruoyi.device.camera.mapper.ArdCamerasMapper; import com.ruoyi.device.hiksdk.common.GlobalVariable; import com.sun.jna.Pointer; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; /** * @Description: 异步登录回调 * @ClassName: FLoginResultCallBack * @Author: 刘苏义 * @Date: 2023年06月12日13:34 * @Version: 1.0 **/ @Slf4j(topic = "hikSdk") public class LoginResultCallBack implements HCNetSDK.FLoginResultCallBack { private ArdCameras camera; public LoginResultCallBack(ArdCameras camera) { this.camera = camera; } @Override public int invoke(int lUserID, int dwResult, HCNetSDK.NET_DVR_DEVICEINFO_V30 lpDeviceinfo, Pointer pUser) { if (GlobalVariable.loginMap.containsKey(camera.getId())) { GlobalVariable.loginMap.remove(camera.getId()); } if (dwResult == 1) { GlobalVariable.loginMap.put(camera.getId(), lUserID); log.info(camera.getIp() + ":" + camera.getPort() + "登录成功"); camera.setLoginId(lUserID); camera.setChannel((int) lpDeviceinfo.byChanNum); } else { log.info(camera.getIp() + ":" + camera.getPort() + "登录失败"); camera.setChannel(0); camera.setLoginId(-1); } ArdCamerasMapper ardCamerasMapper = SpringUtils.getBean(ArdCamerasMapper.class); ardCamerasMapper.updateArdCameras(camera); return 1; } } ard-work/src/main/resources/templates/test.html
@@ -162,7 +162,7 @@ } }) opt = {"username": "admin", "password": "admin123"}; opt = {"username": "liusuyi", "password": "5959932"}; $.ajax({ headers: { 'Accept': 'application/json', pom.xml
@@ -37,7 +37,6 @@ <!-- 依赖声明 --> <dependencyManagement> <dependencies> <!-- SpringBoot的依赖配置--> <dependency> <groupId>org.springframework.boot</groupId> ruoyi-admin/src/main/resources/application-ard.yml
@@ -17,7 +17,7 @@ #mqtt mqtt: host: tcp://192.168.1.15:1883 clientId: m3 clientId: m3c username: admin password: xzx12345 topic: tube ruoyi-admin/src/main/resources/application.yml
@@ -67,7 +67,7 @@ devtools: restart: # 热部署开关 enabled: true enabled: false # redis 配置 redis: # 地址 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/PatrolInspectionTask.java
@@ -38,6 +38,6 @@ //巡检任务 public void scanRun() { /* ardVideoInspectTaskService.autoTaskRun();*/ ardVideoInspectTaskService.autoTaskRun(); } }