package com.fzzy.protocol.sdkhk.common; import com.fzzy.protocol.sdkhk.HKUtils; import com.sun.jna.Pointer; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.text.SimpleDateFormat; import java.util.Date; /** * 车牌识别回调函数 */ public class LPRCallBask_V31 implements HCNetSDK.FMSGCallBack_V31 { Logger log = LoggerFactory.getLogger(LPRCallBask_V31.class); //报警信息回调函数 public boolean invoke(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) { AlarmDataHandle(lCommand, pAlarmer, pAlarmInfo, dwBufLen, pUser); return true; } public void AlarmDataHandle(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) { log.info("报警事件类型: lCommand:" + Integer.toHexString(lCommand)); String MonitoringSiteID; //lCommand是传的报警类型 switch (lCommand) { case HCNetSDK.COMM_ITS_PLATE_RESULT://交通抓拍结果(新报警信息) HCNetSDK.NET_ITS_PLATE_RESULT strItsPlateResult = new HCNetSDK.NET_ITS_PLATE_RESULT(); strItsPlateResult.write(); Pointer pItsPlateInfo = strItsPlateResult.getPointer(); pItsPlateInfo.write(0, pAlarmInfo.getByteArray(0, strItsPlateResult.size()), 0, strItsPlateResult.size()); strItsPlateResult.read(); try { String sLicense = new String(strItsPlateResult.struPlateInfo.sLicense, "GBK"); byte VehicleType = strItsPlateResult.byVehicleType; //0-其他车辆,1-小型车,2-大型车,3- 行人触发,4- 二轮车触发,5- 三轮车触发,6- 机动车触发 MonitoringSiteID = new String(strItsPlateResult.byMonitoringSiteID); String deviceIp = new String(pAlarmer.sDeviceIP, "GBK"); String deviceSn = new String(pAlarmer.sSerialNumber, "GBK"); if (StringUtils.isNotEmpty(sLicense)) sLicense = sLicense.trim(); if (StringUtils.isNotEmpty(deviceSn)) deviceSn = deviceSn.trim(); if (StringUtils.isNotEmpty(deviceIp)) deviceIp = deviceIp.trim(); log.info("车牌号:" + sLicense + ":车辆类型:" + VehicleType + ":监控点编号:" + MonitoringSiteID + "-设备IP=" + deviceIp + "-SN=" + deviceSn); } catch (IOException e) { e.printStackTrace(); } //报警图片保存,车牌,车辆图片 for (int i = 0; i < strItsPlateResult.dwPicNum; i++) { if (strItsPlateResult.struPicInfo[i].dwDataLen > 0) { SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss"); String newName = sf.format(new Date()); FileOutputStream fout; try { // String filename = "../pic/" + newName + "_type[" + strItsPlateResult.struPicInfo[i].byType + "]_ItsPlate.jpg"; String basePath = HKUtils.getImgBasePath(false); String filename = basePath + newName + ".jpg"; fout = new FileOutputStream(filename); //将字节写入文件 long offset = 0; ByteBuffer buffers = strItsPlateResult.struPicInfo[i].pBuffer.getByteBuffer(offset, strItsPlateResult.struPicInfo[i].dwDataLen); byte[] bytes = new byte[strItsPlateResult.struPicInfo[i].dwDataLen]; buffers.rewind(); buffers.get(bytes); fout.write(bytes); fout.close(); } catch (IOException e) { e.printStackTrace(); } } } break; case HCNetSDK.COMM_ITS_PARK_VEHICLE: //停车场数据上传 HCNetSDK.NET_ITS_PARK_VEHICLE strParkVehicle = new HCNetSDK.NET_ITS_PARK_VEHICLE(); strParkVehicle.write(); Pointer pstrParkVehicle = strParkVehicle.getPointer(); pstrParkVehicle.write(0, pAlarmInfo.getByteArray(0, strParkVehicle.size()), 0, strParkVehicle.size()); strParkVehicle.read(); try { // byte ParkError = strParkVehicle.byParkError; //停车异常:0- 正常,1- 异常 // String ParkingNo = new String(strParkVehicle.byParkingNo, "UTF-8"); //车位编号 byte LocationStatus = strParkVehicle.byLocationStatus; //车位车辆状态 0- 无车,1- 有车 MonitoringSiteID = strParkVehicle.byMonitoringSiteID.toString(); String plateNo = new String(strParkVehicle.struPlateInfo.sLicense, "GBK"); //车牌号 log.info("车牌号:" + plateNo + ":车位状态:" + LocationStatus + ":监控点编号:" + MonitoringSiteID); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } //报警图片信息 for (int i = 0; i < strParkVehicle.dwPicNum; i++) { if (strParkVehicle.struPicInfo[i].dwDataLen > 0) { SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss"); String newName = sf.format(new Date()); FileOutputStream fout; try { String basePath = HKUtils.getImgBasePath(false); String filename = basePath + newName + "_ParkVehicle.jpg"; fout = new FileOutputStream(filename); //将字节写入文件 long offset = 0; ByteBuffer buffers = strParkVehicle.struPicInfo[i].pBuffer.getByteBuffer(offset, strParkVehicle.struPicInfo[i].dwDataLen); byte[] bytes = new byte[strParkVehicle.struPicInfo[i].dwDataLen]; buffers.rewind(); buffers.get(bytes); fout.write(bytes); fout.close(); } catch (IOException e) { e.printStackTrace(); } } } break; default: System.out.println("报警类型" + Integer.toHexString(lCommand)); break; } } }