‘liusuyi’
2023-08-11 1e89a0c2fc96040ba50d0fe4305ace22f3daa6cf
优化通用光电报警只获取小光电数据
已修改6个文件
181 ■■■■■ 文件已修改
src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/utils/hiksdk/domain/CameraEventInfo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ard/alarm/camera/service/impl/ArdCamerasServiceImpl.java
@@ -42,8 +42,10 @@
    public void run(ApplicationArguments args) {
        //加载sdk库
        HikClientUtil.loadHCNetSDKLib();
        //获取全部海康光电尝试登录
        ardCameraList = ardCamerasMapper.selectArdCamerasList(new ArdCameras());
        //获取小光电尝试登录
        ArdCameras ardCamera=new ArdCameras();
        ardCamera.setGdtype("0");
        ardCameraList = ardCamerasMapper.selectArdCamerasList(ardCamera);
        HikClientUtil.loginAllCamera(ardCameraList);
        syncTask();
    }
@@ -56,8 +58,10 @@
    private void syncTask() {
        scheduler.scheduleAtFixedRate(() -> {
            try {
                //region 定时同步相机
                List<ArdCameras> newArdCameraList = ardCamerasMapper.selectArdCamerasList(new ArdCameras());
                //region 定时同步小光电
                ArdCameras ardCamera=new ArdCameras();
                ardCamera.setGdtype("0");
                List<ArdCameras> newArdCameraList = ardCamerasMapper.selectArdCamerasList(ardCamera);
                //需要更新的数据
                List<ArdCameras> updateList = sameListWithDifferent(ardCameraList, newArdCameraList);
                if (updateList.size() > 0) {
@@ -129,12 +133,7 @@
                            .findFirst()
                            .orElse(null);
                    return oldItem == null ||
                            !Objects.equals(oldItem.getUpdateTime(), newItem.getUpdateTime()) ||
                            !Objects.equals(oldItem.getIp(), newItem.getIp()) ||
                            !Objects.equals(oldItem.getPort(), newItem.getPort()) ||
                            !Objects.equals(oldItem.getUsername(), newItem.getUsername()) ||
                            !Objects.equals(oldItem.getPassword(), newItem.getPassword());
                    return oldItem == null || !Objects.equals(oldItem.getUpdateTime(), newItem.getUpdateTime());
                })
                .collect(Collectors.toList());
src/main/java/com/ard/alarm/external/service/impl/ArdEquipExternalServiceImpl.java
@@ -29,26 +29,32 @@
@Slf4j(topic = "external")
@Order(5)
public class ArdEquipExternalServiceImpl implements IArdEquipExternalService, ApplicationRunner {
    private final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
    public static List<ArdEquipExternal> ardAlarmHostList = new ArrayList<>();
    public static List<ArdEquipExternal> ardAccessHostList = new ArrayList<>();
    @Autowired
    private ArdEquipExternalMapper ardEquipExternalMapper;
    @Override
    public void run(ApplicationArguments args) throws Exception {
    public void run(ApplicationArguments args){
        //获取全部海康报警主机尝试登录
        ArdEquipExternal alarmHost = new ArdEquipExternal();
        alarmHost.setFactory("1");
        alarmHost.setType("1");
        ardAlarmHostList = ardEquipExternalMapper.selectArdEquipExternalList(alarmHost);
        HikClientUtil.loginAllAlarmHost(ardAlarmHostList);
        //获取全部门禁主机尝试登录
        ArdEquipExternal accessControlHost = new ArdEquipExternal();
        accessControlHost.setFactory("1");
        accessControlHost.setType("6");
        ardAccessHostList = ardEquipExternalMapper.selectArdEquipExternalList(accessControlHost);
        HikClientUtil.loginAllAccessControlHost(ardAccessHostList);
        //同步任务
        syncTask();
    }
@@ -97,7 +103,7 @@
                alarmHost.setType("6");
                List<ArdEquipExternal> newAccessHostList = ardEquipExternalMapper.selectArdEquipExternalList(alarmHost);
                //需要更新的数据
                 updateList = sameListWithDifferent(ardAccessHostList, newAccessHostList);
                updateList = sameListWithDifferent(ardAccessHostList, newAccessHostList);
                if (updateList.size() > 0) {
                    HikClientUtil.logoutAllAlarmHost(updateList);
                    HikClientUtil.loginAllAlarmHost(updateList);
@@ -125,6 +131,34 @@
                log.error("同步外联任务执行出错" + e.getMessage());
            }
        }, 10, 10, TimeUnit.SECONDS);
    }
    /**
     * 查询external
     *
     * @param id external主键
     * @return external
     */
    @Override
    public ArdEquipExternal selectArdEquipExternalById(String id) {
        return ardEquipExternalMapper.selectArdEquipExternalById(id);
    }
    @Override
    public ArdEquipExternal selectArdEquipExternal(ArdEquipExternal ardEquipExternal) {
        return ardEquipExternalMapper.selectArdEquipExternal(ardEquipExternal);
    }
    /**
     * 查询external列表
     *
     * @param ardEquipExternal external
     * @return external
     */
    @Override
    public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal) {
        return ardEquipExternalMapper.selectArdEquipExternalList(ardEquipExternal);
    }
@@ -157,33 +191,4 @@
                .collect(Collectors.toList());
        return resultList;
    }
    /**
     * 查询external
     *
     * @param id external主键
     * @return external
     */
    @Override
    public ArdEquipExternal selectArdEquipExternalById(String id) {
        return ardEquipExternalMapper.selectArdEquipExternalById(id);
    }
    @Override
    public ArdEquipExternal selectArdEquipExternal(ArdEquipExternal ardEquipExternal) {
        return ardEquipExternalMapper.selectArdEquipExternal(ardEquipExternal);
    }
    /**
     * 查询external列表
     *
     * @param ardEquipExternal external
     * @return external
     */
    @Override
    public List<ArdEquipExternal> selectArdEquipExternalList(ArdEquipExternal ardEquipExternal) {
        return ardEquipExternalMapper.selectArdEquipExternalList(ardEquipExternal);
    }
}
src/main/java/com/ard/utils/hiksdk/common/GlobalVariable.java
@@ -15,14 +15,12 @@
 **/
@Data
public class GlobalVariable {
    //保存相机信息key:ip value:camera对象
    //保存相机信息key:(ip:port) value:camera对象
    public static Map<String, ArdCameras> cameraMap = new HashMap<>();
    //保存相机信息key:ip value:报警主机对象
    public static Map<String, ArdEquipExternal> alarmHostMap = new HashMap<>();
    //保存相机信息key:ip value:门禁主机对象
    public static Map<String, ArdEquipExternal> accessHostMap = new HashMap<>();
    //保存相机登录信息key:cameraId value:loginId
    //保存设备登录信息key:deviceId value:loginId
    public static Map<String, Integer> loginMap = new HashMap<>();
    //保存相机的布防信息key:cameraId value:lAlarmHandle
    //保存设备的布防信息key:deviceId value:lAlarmHandle
    public static Map<String, Integer> alarmMap = new HashMap<>();
}
src/main/java/com/ard/utils/hiksdk/domain/CameraEventInfo.java
@@ -41,6 +41,10 @@
     */
    String cameraIp;
    /**
     * 关联相机port
     */
    Integer cameraPort;
    /**
     * 关联相机通道
     */
    Integer cameraChannel;
src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java
@@ -56,7 +56,7 @@
        //log.debug("报警事件类型:lCommand:" + Integer.toHexString(lCommand));
        switch (lCommand) {
            case HCNetSDK.COMM_ALARM_V30:
                log.debug("移动侦测");
                //log.debug("移动侦测");
                ArdCameras ardCameras = new ArdCameras();
                ardCameras.setIp(sDeviceIP);
                ardCameras.setPort(wLinkPort);
@@ -75,6 +75,7 @@
                        info.setCameraName(camera.getName());
                        info.setCameraId(camera.getId());
                        info.setCameraIp(camera.getIp());
                        info.setCameraPort(camera.getPort());
                        info.setCameraType(camera.getGdtype());
                        info.setCameraChannel(Integer.valueOf(netDvrAlarminfoV30.byChannel[0]));
                        info.setLongitude(camera.getLongitude());
@@ -89,7 +90,7 @@
                }
            case HCNetSDK.COMM_ALARM_RULE:
                log.debug("行为分析信息报警信息上报");
                //log.debug("行为分析信息报警信息上报");
                //region 行为分析信息
                ardCameras = new ArdCameras();
                ardCameras.setIp(sDeviceIP);
@@ -112,6 +113,7 @@
                info.setCameraName(ardCamera.getName());
                info.setCameraId(ardCamera.getId());
                info.setCameraIp(ipaddr);
                info.setCameraPort(ardCamera.getPort());
                info.setCameraType(ardCamera.getGdtype());
                info.setCameraChannel(channel);
                info.setLongitude(ardCamera.getLongitude());
@@ -185,7 +187,7 @@
//                log.debug("GPS报警信息上报(暂不解析)");
//                break;
            case HCNetSDK.COMM_ALARMHOST_CID_ALARM:
                log.debug("报警主机CID报告报警上报");
                //log.debug("报警主机CID报告报警上报");
                //region 报警主机报警处理
                ArdEquipExternal ardEquipExternal = new ArdEquipExternal();
                ardEquipExternal.setIp(sDeviceIP);
@@ -401,7 +403,8 @@
     */
    private String savePicture(CameraEventInfo info) {
        CameraCmd cmd = new CameraCmd();
        ArdCameras Cameras = GlobalVariable.cameraMap.get(info.getCameraIp());
        String key=info.getCameraIp()+":"+info.getCameraPort();
        ArdCameras Cameras = GlobalVariable.cameraMap.get(key);
        if (Cameras == null) {
            return "";
        }
src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java
@@ -210,7 +210,8 @@
                info.setUsername(camera.getUsername());
                info.setPassword(camera.getPassword());
                login(info);
                GlobalVariable.cameraMap.put(camera.getIp(), camera);
                String key = camera.getIp() + ":" + camera.getPort();
                GlobalVariable.cameraMap.put(key, camera);
            }
        } catch (Exception ex) {
            log.error("初始化登录相机异常:" + ex.getMessage());
@@ -233,7 +234,8 @@
                info.setUsername(camera.getUsername());
                info.setPassword(camera.getPassword());
                logout(info);
                GlobalVariable.cameraMap.remove(camera.getIp());
                String key = camera.getIp() + ":" + camera.getPort();
                GlobalVariable.cameraMap.remove(key);
            }
        } catch (Exception ex) {
            log.error("初始化登录相机异常:" + ex.getMessage());
@@ -256,20 +258,20 @@
                info.setUsername(alarmHost.getUsername());
                info.setPassword(alarmHost.getPassword());
                login(info);
                String ip = alarmHost.getIp();
                GlobalVariable.alarmHostMap.put(ip, alarmHost);
//                String key=alarmHost.getIp()+":"+alarmHost.getPort();
//                GlobalVariable.alarmHostMap.put(key, alarmHost);
            }
        } catch (Exception ex) {
            log.error("初始化报警主机异常:" + ex.getMessage());
        }
    }
    /**
     * @描述 登出所有报警主机
     * @创建人 刘苏义
     * @创建时间 2023/2/3 10:10
     */
    public static void logoutAllAlarmHost(List<ArdEquipExternal> ardEquipExternals)
    {
    public static void logoutAllAlarmHost(List<ArdEquipExternal> ardEquipExternals) {
        try {
            for (ArdEquipExternal alarmHost : ardEquipExternals) {
                Thread.sleep(100);
@@ -280,13 +282,14 @@
                info.setUsername(alarmHost.getUsername());
                info.setPassword(alarmHost.getPassword());
                logout(info);
                String ip = alarmHost.getIp();
                GlobalVariable.alarmHostMap.remove(ip);
//                String key=alarmHost.getIp()+":"+alarmHost.getPort();
//                GlobalVariable.alarmHostMap.remove(key);
            }
        } catch (Exception ex) {
            log.error("初始化登录相机异常:" + ex.getMessage());
        }
    }
    /**
     * @描述 登录所有门禁主机
     * @创建人 刘苏义
@@ -303,13 +306,15 @@
                info.setUsername(accessControlHost.getUsername());
                info.setPassword(accessControlHost.getPassword());
                login(info);
                String ip = accessControlHost.getIp();
                GlobalVariable.accessHostMap.put(ip, accessControlHost);
//
//                String key=accessControlHost.getIp()+":"+accessControlHost.getPort();
//                GlobalVariable.accessHostMap.put(key, accessControlHost);
            }
        } catch (Exception ex) {
            log.error("初始化报警主机异常:" + ex.getMessage());
        }
    }
    /**
     * @描述 登出所有门禁主机
     * @创建人 刘苏义
@@ -326,47 +331,14 @@
                info.setUsername(accessControlHost.getUsername());
                info.setPassword(accessControlHost.getPassword());
                logout(info);
                String ip = accessControlHost.getIp();
                GlobalVariable.accessHostMap.remove(ip);
//                String key=accessControlHost.getIp()+":"+accessControlHost.getPort();
//                GlobalVariable.accessHostMap.remove(key);
            }
        } catch (Exception ex) {
            log.error("初始化报警主机异常:" + ex.getMessage());
        }
    }
    /**
     * @描述 注销登录
     * @参数 [dvrLogin]
     * @返回值 java.lang.Integer
     * @创建人 刘苏义
     * @创建时间 2023/1/17 16:12
     * @修改人和其它信息
     */
    public static boolean loginOut(String cameraId) {
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        boolean b = hCNetSDK.NET_DVR_Logout(userId);
        if (b) {
            GlobalVariable.loginMap.remove(cameraId);
        }
        return b;
    }
    /**
     * 是否在线
     *
     * @param cmd
     */
    public static boolean isOnLine(CameraCmd cmd) {
        String cameraId = cmd.getCameraId();
        if (!GlobalVariable.loginMap.containsKey(cameraId)) {
            return false;
        }
        Integer userId = GlobalVariable.loginMap.get(cameraId);
        boolean isOnLine = hCNetSDK.NET_DVR_RemoteControl(userId, HCNetSDK.NET_DVR_CHECK_USER_STATUS, null, 0);
        return isOnLine;
    }
    /**
     * 建立布防上传通道,用于传输数据
@@ -402,8 +374,6 @@
            lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, m_strAlarmInfo);
            if (lAlarmHandle == -1) {
                log.error("设备【" + deviceIpPort + "】布防失败,错误码==========》" + hCNetSDK.NET_DVR_GetLastError());
                // 注销 释放sdk资源
                logout(lUserID);
            } else {
                log.debug("设备【" + deviceIpPort + "】布防成功");
            }
@@ -452,11 +422,11 @@
        //设置图片大小
        ByteBuffer jpegBuffer = ByteBuffer.allocate(1024 * 1024);
        // 抓图到内存,单帧数据捕获并保存成JPEG存放在指定的内存空间中
       // log.debug("-----------这里开始封装 NET_DVR_CaptureJPEGPicture_NEW---------");
        // log.debug("-----------这里开始封装 NET_DVR_CaptureJPEGPicture_NEW---------");
        boolean is = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(userId, channelNum, jpeg, jpegBuffer, 1024 * 1024, a);
        //log.debug("-----------这里开始图片存入内存----------" + is);
        if (is) {
          //  log.debug("hksdk(抓图)-结果状态值(0表示成功):" + hCNetSDK.NET_DVR_GetLastError());
            //  log.debug("hksdk(抓图)-结果状态值(0表示成功):" + hCNetSDK.NET_DVR_GetLastError());
            byte[] array = jpegBuffer.array();
            //存储到minio