‘liusuyi’
2023-06-12 757f7e5256ef3cd48cb7887f4e1f8fd4ecff1b14
修复sdk错误码56的错误
相机登录修改为异步登录
已添加1个文件
已修改11个文件
已删除1个文件
275 ■■■■■ 文件已修改
ard-work/pom.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/constant/sdkPriority.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/controller/ArdCamerasController.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/domain/ArdCameras.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/IHikClientService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/MapCoordinateToPTZ.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/templates/test.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-ard.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/PatrolInspectionTask.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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());
@@ -1310,7 +1344,7 @@
            netDvrIFrame.byStreamType = 0;
            netDvrIFrame.dwSize = netDvrIFrame.size();
            netDvrIFrame.write();
            if(!hCNetSDK.NET_DVR_RemoteControl(userId,3402,netDvrIFrame.getPointer(),netDvrIFrame.dwSize)){
            if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) {
                log.error("强制I帧 é”™è¯¯ç ä¸º:  " + hCNetSDK.NET_DVR_GetLastError());
            }
            //预览参数
@@ -1333,7 +1367,7 @@
                    }
                    log.info("取流成功");
                    String path= FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
                    String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4");
                    recordInfo info = new recordInfo();
                    info.setLRealHandle(lRealHandle);
                    info.setRecordPath(path);
@@ -1352,7 +1386,7 @@
                }
                hCNetSDK.NET_DVR_StopRealPlay(info.getLRealHandle());
                log.info("录像停止");
                if(cmd.isUploadMinio()) {
                if (cmd.isUploadMinio()) {
                    //存入minio
                    String BucketName = cmd.getRecordBucketName();
                    String ObjectName = cmd.getRecordObjectName();
ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/MapCoordinateToPTZ.java
ÎļþÒÑɾ³ý
ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java
¶Ô±ÈÐÂÎļþ
@@ -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();
    }
}