‘liusuyi’
2023-08-10 6859fcae5d1fd7ff28553032aaaaff0fc04a49b2
src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java
@@ -7,15 +7,15 @@
import com.ard.alarm.external.domain.ArdEquipExternal;
import com.ard.alarm.external.service.IArdEquipExternalService;
import com.ard.config.MinioClientSingleton;
import com.ard.utils.ByteUtils;
import com.ard.utils.other.ByteUtils;
import com.ard.utils.hiksdk.common.GlobalVariable;
import com.ard.utils.hiksdk.domain.AccessControlHostEventInfo;
import com.ard.utils.hiksdk.domain.CameraEventInfo;
import com.ard.utils.hiksdk.domain.ExternalAlarmEventInfo;
import com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK;
import com.ard.utils.hiksdk.util.minio.MinioUtils;
import com.ard.utils.DateUtils;
import com.ard.utils.SpringTool;
import com.ard.utils.other.DateUtils;
import com.ard.utils.other.SpringTool;
import com.ard.utils.mqtt.MqttConsumer;
import com.sun.jna.Pointer;
import lombok.extern.slf4j.Slf4j;
@@ -32,7 +32,7 @@
 * @Date: 2023年02月15日 12:16
 * @Version: 1.0
 **/
@Slf4j(topic = "hiksdk")
@Slf4j(topic = "hikSdk")
public class FMSGCallBack implements HCNetSDK.FMSGCallBack_V31 {
    /**
@@ -49,19 +49,24 @@
        String sDeviceIP = ByteUtils.bytesToStringZh(pAlarmer.sDeviceIP);
        Integer wLinkPort = Integer.valueOf(pAlarmer.wLinkPort);
        CameraEventInfo info;
        String sTime;//事件时间
        String url = "";//事件图片
        Boolean isSnapPic=true;
        //lCommand是传的报警类型
//        log.debug("报警事件类型:lCommand:" + Integer.toHexString(lCommand));
        switch (lCommand) {
            case HCNetSDK.COMM_ALARM_V30:
                //log.debug("移动侦测、视频丢失、遮挡、IO信号量等报警信息(暂不解析)"+Integer.toHexString(lCommand));
            case HCNetSDK.COMM_ALARM_RULE:
                log.debug("行为分析信息报警信息"+Integer.toHexString(lCommand));
                //region 行为分析信息
                ArdCameras ardCameras = new ArdCameras();
                ardCameras.setIp(sDeviceIP);
                ardCameras.setPort(wLinkPort);
                IArdCamerasService ardCamerasService = SpringTool.getApplicationContext().getBean(IArdCamerasService.class);
                ArdCameras ardcamere = ardCamerasService.selectArdCamerasList(ardCameras).get(0);
                log.info("报警事件类型:lCommand:" + Integer.toHexString(lCommand));
                HCNetSDK.NET_VCA_RULE_ALARM strVcaAlarm = new HCNetSDK.NET_VCA_RULE_ALARM();
                strVcaAlarm.write();
                Pointer pVCAInfo = strVcaAlarm.getPointer();
@@ -71,7 +76,7 @@
                sTime = DateUtils.parseTime(strVcaAlarm.dwAbsTime);//事件时间
                String ipaddr = new String(strVcaAlarm.struDevInfo.struDevIP.sIpV4).trim();//设备ip
                Integer channel = Integer.valueOf(strVcaAlarm.struDevInfo.byChannel);//通道
                CameraEventInfo info = new CameraEventInfo();
                info = new CameraEventInfo();
                info.setAlarmName("人员行为分析");
                info.setAlarmTime(sTime);
                info.setCameraName(ardcamere.getName());
@@ -129,24 +134,26 @@
                        //endregion
                        break;
                    default:
                        log.info("未知行为事件类型:" + strVcaAlarm.struRuleInfo.wEventTypeEx);
                        printLog(info);
                       // log.debug("未知行为事件类型:" + strVcaAlarm.struRuleInfo.wEventTypeEx);
                        isSnapPic=false;
                        break;
                }
                //endregion
                //图片存入minio
                url = savePicture(info);
                info.setPicUrl(url);
                if(isSnapPic) {
                    url = savePicture(info);
                    info.setPicUrl(url);
                }
                publishMqtt(info);
                break;
            case HCNetSDK.COMM_UPLOAD_FACESNAP_RESULT:
                log.info("人脸检测事件上报");
                log.debug("人脸检测事件上报(暂不解析)"+Integer.toHexString(lCommand));
                break;
            case HCNetSDK.COMM_GISINFO_UPLOAD:
                log.info("GPS报警信息上报");
                log.debug("GPS报警信息上报(暂不解析)"+Integer.toHexString(lCommand));
                break;
            case HCNetSDK.COMM_ALARMHOST_CID_ALARM:
                log.info("报警主机 CID 报告报警上传");
                log.debug("报警主机 CID 报告报警上传"+Integer.toHexString(lCommand));
                //region 报警主机报警处理
                ArdEquipExternal ardEquipExternal = new ArdEquipExternal();
                ardEquipExternal.setIp(sDeviceIP);
@@ -395,6 +402,10 @@
    private String savePicture(CameraEventInfo info) {
        CameraCmd cmd = new CameraCmd();
        ArdCameras Cameras = GlobalVariable.cameraMap.get(info.getCameraIp());
        if(Cameras==null)
        {
            return "";
        }
        cmd.setCameraId(Cameras.getId());
        cmd.setChannelNum(info.getCameraChannel());
        cmd.setBucketName("pic");
@@ -409,7 +420,7 @@
     * 打印通用光电日志
     */
    private void printLog(CameraEventInfo info) {
        log.info("【规则】" + info.getAlarmName() + "【规则id】" + info.getRuleId() + "【类型】" + info.getAlarmType() +
        log.debug("【规则】" + info.getAlarmName() + "【规则id】" + info.getRuleId() + "【类型】" + info.getAlarmType() +
                "【时间】" + info.getAlarmTime() + "【相机id】" + info.getCameraId() + "【相机】" + info.getCameraName() +
                "【IP】" + info.getCameraIp() + "【通道】" + info.getCameraChannel() + "【型号】" + info.getCameraType() +
                "【图片】" + info.getPicUrl() + "【坐标】" + info.getLongitude() + "," + info.getLatitude());
@@ -419,7 +430,7 @@
     * 打印报警主机事件日志
     */
    private void printLog(ExternalAlarmEventInfo info) {
        log.info("【报警ID】" + info.getAlarmId() + "【报警名称】" + info.getAlarmName() +
        log.debug("【报警ID】" + info.getAlarmId() + "【报警名称】" + info.getAlarmName() +
                "【防区ID】" + info.getDefenseId() + "【防区名称】" + info.getDefenseName() + "【类型】" + info.getAlarmType() +
                "【时间】" + info.getAlarmTime() + "【报警主机ID】" + info.getAlarmHostId());
    }
@@ -428,7 +439,7 @@
     * 打印门禁事件日志
     */
    private void printLog(AccessControlHostEventInfo info) {
        log.info("【报警ID】" + info.getSerialNo() + "【设备编号】"+
        log.debug("【报警ID】" + info.getSerialNo() + "【设备编号】"+
                "【门编号】" + info.getDoorNo() + "【事件类型】" + info.getAlarmType() +
                "【防区类型】" + info.getDefenseType()+"【时间】" + info.getAlarmTime() +
                "【门禁主机ID】" + info.getAcsId());