public abstract class HKBaseCallback extends FMSGCallBack {
public static HCNetSDK hCNetSDK = null;
public HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = null;
public HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = null;
String m_sDeviceIP;
String m_sUsername;
String m_sPassword;
public String m_FDID;
public int m_lUploadHandle;
public int m_UploadStatus;
public String m_picID;
int lUserID;
Map<Integer,Object> userMap = new HashMap<>();
public static Map<String,Integer> userIDMap = new HashMap<>();
public static Map<String,Map<String,Object>> deviceMap= new HashMap<>();
int lAlarmHandle;
int lListenHandle;
public boolean m_isSupportFDLib;
HCNetSDK.FMSGCallBack fMSFCallBack;
HCNetSDK.FMSGCallBack_V31 fMSFCallBack_V31;
int numberLimit;
protected static BaseApi baseApi = new BaseApiImpl();
protected Logger logger = LoggerFactory.getLogger(this.getClass());
protected abstract HKBaseCallback getInstance();
public void statDll(HKBaseCallback instance) {
if (getAddHKSDK()) {
boolean b = baseApi.initialize();
boolean c = baseApi.callBackInitialize(instance);
if (b && c) {
logger.info("初始化成功");
List<Map<String,Object>> deviceList = getHkConfigure();
if(deviceList.size()>0){
deviceList.stream().forEach(item ->{
int lUserID = jButtonLoginActionPerformed(item);
deviceMap.put(item.get("host").toString(),item);
userIDMap.put(item.get("host").toString(),lUserID);
});
for (Map.Entry<Integer,Object> entry : userMap.entrySet()){
if (baseApi.getFaceCapabilities(entry.getKey())) {
m_isSupportFDLib = true;
} else {
m_isSupportFDLib = false;
}
baseApi.setAlarmChan(entry.getKey());
SetupAlarmChan(entry.getKey());
}
}
} else {
logger.info("初始化失败");
}
} else {
logger.info("配置未加载海康网络摄像头");
}
}
public abstract boolean getAddHKSDK();
public abstract List<Map<String, Object>> getHkConfigure();
public abstract void getAlarmer(HCNetSDK.NET_DVR_ALARMER pAlarmer, String deviceNumber, String alarm_type, String alarm_pic_path,int alarmNumber);
public abstract Response<ParamsModel> getParamsInfoByKindAndName();
public abstract Response<List<ParamsModel>> findParamsListByKind();
public abstract BulletEqpDeviceModel getDeptByDeviceId(Map<String, Object> device);
public abstract void creatDevice(Map<String, Object> device,HCNetSDK.NET_DVR_CID_ALARM strCIDAlarm,HCNetSDK.NET_DVR_ALARMER pAlarmer);
public abstract String redisOper(String str,String strNew,String state);
public abstract boolean populationDensityAlarm(PopulationDensityAlarmResp resp);
public void SetupAlarmChan(int userId) {
if (fMSFCallBack_V31 == null) {
fMSFCallBack_V31 = new FMSGCallBack_V31();
Pointer pUser = null;
if (!hCNetSDK.NET_DVR_SetDVRMessageCallBack_V31(fMSFCallBack_V31, pUser)) {
logger.info("设置回调函数失败!");
}
}
NET_DVR_SETUPALARM_PARAM m_strAlarmInfo = new NET_DVR_SETUPALARM_PARAM();
m_strAlarmInfo.dwSize = m_strAlarmInfo.size();
m_strAlarmInfo.byLevel = 1;
m_strAlarmInfo.byAlarmInfoType = 1;
m_strAlarmInfo.byDeployType = 1;
m_strAlarmInfo.write();
lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(userId, m_strAlarmInfo);
if (lAlarmHandle == -1) {
logger.info("布防失败,错误号:" + hCNetSDK.NET_DVR_GetLastError());
} else {
logger.info("布防成功");
}
}
public int jButtonLoginActionPerformed(Map<String,Object> params) {
m_sDeviceIP = params.get("host").toString();
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_sUsername = params.get("user_name").toString();
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_sPassword = params.get("password").toString();
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 = 8000;
m_strLoginInfo.bUseAsynLogin = false;
m_strLoginInfo.write();
LoginParam loginParam = new LoginParam();
loginParam.setUsername(m_sUsername);
loginParam.setPassword(m_sPassword);
loginParam.setHost(m_sDeviceIP);
loginParam.setPort(m_strLoginInfo.wPort);
int lUserID = baseApi.deviceRegister(loginParam);
if (lUserID == -1) {
logger.info("注册失败,错误号:" + hCNetSDK.NET_DVR_GetLastError());
} else {
logger.info("注册成功,用户ID为:"+lUserID);
userMap.put(lUserID,String.valueOf(lUserID));
}
return lUserID;
}
public class FMSGCallBack_V31 implements HCNetSDK.FMSGCallBack_V31 {
@Override
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) {
String sAlarmType = new String();
String[] newRow = new String[3];
Map<String, Object> device = deviceMap.get(b2s(pAlarmer.sDeviceIP));
System.out.println("报警的设备"+device);
Date today = new Date();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String[] sIP = new String[2];
sAlarmType = new String("0x") + Integer.toHexString(lCommand);
switch (lCommand) {
case HCNetSDK.COMM_ISAPI_ALARM:
System.out.println(new String(pAlarmer.byMacAddr).split("\0",2)[0]);
System.out.println(new String(pAlarmer.sDeviceIP).split("\0",2)[0]);
HCNetSDK.NET_DVR_ALARM_ISAPI_INFO struEventISAPI = new HCNetSDK.NET_DVR_ALARM_ISAPI_INFO();
struEventISAPI.write();
Pointer pEventISAPI = struEventISAPI.getPointer();
pEventISAPI.write(0, pAlarmInfo.getByteArray(0, struEventISAPI.size()), 0, struEventISAPI.size());
struEventISAPI.read();
logger.info("----------------------他还在执行");
ByteBuffer jsonbuffers = struEventISAPI.pAlarmData.getByteBuffer(0, struEventISAPI.dwAlarmDataLen);
byte [] jsonbytes = new byte[struEventISAPI.dwAlarmDataLen];
jsonbuffers.rewind();
jsonbuffers.get(jsonbytes);
String body = JSONArray.toJSONString(jsonbytes);
byte[] json = JSONObject.parseObject(body, byte[].class);
String convent = new String(json);
PopulationDensityAlarmResp jsonObject = JSON.parseObject(convent,PopulationDensityAlarmResp.class);
logger.info("----------------------第二次还在执行他还在执行");
List<PopulationDensityAlarmResp.PicData> list = new ArrayList<>();
for(int i=0;i<struEventISAPI.byPicturesNumber;i++) {
com.beitai.device.sdk.HCNetSDK.NET_DVR_ALARM_ISAPI_PICDATA struPicData = new com.beitai.device.sdk.HCNetSDK.NET_DVR_ALARM_ISAPI_PICDATA();
struPicData.write();
Pointer pPicData = struPicData.getPointer();
pPicData.write(0, struEventISAPI.pPicPackData.getByteArray((long) i *struPicData.size(), struPicData.size()), 0, struPicData.size());
struPicData.read();
ByteBuffer buffers = struPicData.pPicData.getByteBuffer(0, struPicData.dwPicLen);
byte [] bytes = new byte[struPicData.dwPicLen];
buffers.rewind();
buffers.get(bytes);
PopulationDensityAlarmResp.PicData picData = new PopulationDensityAlarmResp.PicData();
picData.setPic(bytes);
list.add(picData);
}
logger.info("----------------------第三次还在执行他还在执行,要进行保存了");
jsonObject.setToday(jsonObject.getDateTime());
jsonObject.setAlarmType(AlarmTypeEnum.COMM_POPULATION_ALARM);
jsonObject.setPicDataList(list);
populationDensityAlarm(jsonObject);
break;
case HCNetSDK.COMM_SNAP_MATCH_ALARM:
HCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM strFaceSnapMatch = new HCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM();
String SnapPicUrl="";
byte[] buffer = new byte[4096];
strFaceSnapMatch.write();
Pointer pFaceSnapMatch = strFaceSnapMatch.getPointer();
pFaceSnapMatch.write(0, pAlarmInfo.getByteArray(0, strFaceSnapMatch.size()), 0, strFaceSnapMatch.size());
strFaceSnapMatch.read();
String fn_image = null;
if(strFaceSnapMatch.struSnapInfo.pBuffer1!=null) {
if ((strFaceSnapMatch.struSnapInfo.dwSnapFacePicLen > 0)) {
Response<List<ParamsModel>> fileUrl = findParamsListByKind();
long offset = 0;
ByteBuffer buffers = strFaceSnapMatch.struSnapInfo.pBuffer1.getByteBuffer(offset, strFaceSnapMatch.struSnapInfo.dwSnapFacePicLen);
byte[] bytes = new byte[strFaceSnapMatch.struSnapInfo.dwSnapFacePicLen];
buffers.rewind();
buffers.get(bytes);
SnapPicUrl = new String(bytes);
System.out.println("抓拍人脸子图URL:" + SnapPicUrl);
try {
buffer = downloadUrl(SnapPicUrl);
fn_image = FileUtil.fileUpload(buffer, fileUrl.getData().get(0).getValue(), "face");
} catch (Exception e) {
e.printStackTrace();
}
logger.info("黑名单抓拍图片地址-------------------------------" + fn_image);
}
try {
sAlarmType = sAlarmType + ":人脸黑名单比对报警,相识度:" + strFaceSnapMatch.fSimilarity + ":人脸比对结果:" + strFaceSnapMatch.byContrastStatus + ",黑名单姓名:" + new String(strFaceSnapMatch.struBlackListInfo.struBlackListInfo.struAttribute.byName, "GBK").trim() + ",\n黑名单证件信息:" + new String(strFaceSnapMatch.struBlackListInfo.struBlackListInfo.struAttribute.byCertificateNumber).trim();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
logger.info(sAlarmType);
String deviceNumber1 = device.get("device_number").toString();
logger.info("11111111" + strFaceSnapMatch.byContrastStatus);
if (strFaceSnapMatch.byContrastStatus == 2) {
logger.info("对比失败进入报警日志,会修改设备的ip要注意 陌生人报警");
getAlarmer(pAlarmer, deviceNumber1, "207", fn_image, 0);
}
}
break;
}
logger.info("报警信息结束");
}
public static byte[] downloadUrl(String urlString) throws IOException {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
try (InputStream inputStream = connection.getInputStream()) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
return outputStream.toByteArray();
} finally {
connection.disconnect();
}
}
public boolean GetFaceCapabilities(int userId) {
HCNetSDK.NET_DVR_XML_CONFIG_INPUT inBuf = new HCNetSDK.NET_DVR_XML_CONFIG_INPUT();
inBuf.dwSize = inBuf.size();
String url = "GET /ISAPI/Intelligent/FDLib/capabilities\r\n";
HCNetSDK.BYTE_ARRAY ptrUrl = new HCNetSDK.BYTE_ARRAY(url.length());
System.arraycopy(url.getBytes(), 0, ptrUrl.byValue, 0, url.length());
ptrUrl.write();
inBuf.lpRequestUrl = ptrUrl.getPointer();
inBuf.dwRequestUrlLen = url.length();
HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT outBuf = new HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT();
outBuf.dwSize = outBuf.size();
HCNetSDK.BYTE_ARRAY ptrOutByte = new HCNetSDK.BYTE_ARRAY(HCNetSDK.ISAPI_DATA_LEN);
outBuf.lpOutBuffer = ptrOutByte.getPointer();
outBuf.dwOutBufferSize = HCNetSDK.ISAPI_DATA_LEN;
outBuf.write();
if (hCNetSDK.NET_DVR_STDXMLConfig(userId, inBuf, outBuf)) {
return true;
} else {
logger.info("获取人脸能力集失败");
return false;
}
}
public boolean DeleteFDLib(String m_fdid,int userId) {
HCNetSDK.NET_DVR_XML_CONFIG_INPUT struInput = new HCNetSDK.NET_DVR_XML_CONFIG_INPUT();
struInput.dwSize = struInput.size();
String str = "DELETE /ISAPI/Intelligent/FDLib/" + m_fdid;
HCNetSDK.BYTE_ARRAY ptrUrl = new HCNetSDK.BYTE_ARRAY(HCNetSDK.BYTE_ARRAY_LEN);
System.arraycopy(str.getBytes(), 0, ptrUrl.byValue, 0, str.length());
ptrUrl.write();
struInput.lpRequestUrl = ptrUrl.getPointer();
struInput.dwRequestUrlLen = str.length();
HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT struOutput = new HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT();
struOutput.dwSize = struOutput.size();
struOutput.write();
if (hCNetSDK.NET_DVR_STDXMLConfig(userId, struInput, struOutput)) {
logger.info("删除人脸库成功");
return true;
} else {
int code = hCNetSDK.NET_DVR_GetLastError();
logger.info("删除人脸库失败" + code);
return false;
}
}
public void DeleteFaceAppendData(String faceId) {
String str = "DELETE /ISAPI/Intelligent/FDLib/" + m_FDID + "/picture/" + faceId;
HCNetSDK.NET_DVR_XML_CONFIG_INPUT struInput = new HCNetSDK.NET_DVR_XML_CONFIG_INPUT();
struInput.dwSize = struInput.size();
HCNetSDK.BYTE_ARRAY ptrDeleteFaceLibUrl = new HCNetSDK.BYTE_ARRAY(HCNetSDK.BYTE_ARRAY_LEN);
System.arraycopy(str.getBytes(), 0, ptrDeleteFaceLibUrl.byValue, 0, str.length());
ptrDeleteFaceLibUrl.write();
struInput.lpRequestUrl = ptrDeleteFaceLibUrl.getPointer();
struInput.dwRequestUrlLen = str.length();
struInput.lpInBuffer = null;
struInput.dwInBufferSize = 0;
struInput.write();
HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT struOutput = new HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT();
struOutput.dwSize = struOutput.size();
struOutput.lpOutBuffer = null;
struOutput.dwOutBufferSize = 0;
HCNetSDK.BYTE_ARRAY ptrStatusByte = new HCNetSDK.BYTE_ARRAY(HCNetSDK.ISAPI_STATUS_LEN);
struOutput.lpStatusBuffer = ptrStatusByte.getPointer();
struOutput.dwStatusSize = HCNetSDK.ISAPI_STATUS_LEN;
struOutput.write();
if (!hCNetSDK.NET_DVR_STDXMLConfig(lUserID, struInput, struOutput)) {
logger.info("lpRequestUrl:" + str);
logger.info("NET_DVR_STDXMLConfig DELETE failed with:" + " " + hCNetSDK.NET_DVR_GetLastError());
} else {
logger.info("lpRequestUrl:" + str);
logger.info("图片删除成功 PID:"+faceId);
}
}
public boolean CreateFDLib(String FDLibName,int userId) {
try {
if (m_isSupportFDLib) {
HCNetSDK.NET_DVR_XML_CONFIG_INPUT struInput = new HCNetSDK.NET_DVR_XML_CONFIG_INPUT();
struInput.dwSize = struInput.size();
String str = "POST /ISAPI/Intelligent/FDLib\r\n";
HCNetSDK.BYTE_ARRAY ptrUrl = new HCNetSDK.BYTE_ARRAY(HCNetSDK.BYTE_ARRAY_LEN);
System.arraycopy(str.getBytes(), 0, ptrUrl.byValue, 0, str.length());
ptrUrl.write();
struInput.lpRequestUrl = ptrUrl.getPointer();
struInput.dwRequestUrlLen = str.length();
byte[] byFDLibName = new byte[0];
try {
byFDLibName = FDLibName.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String strInBuffer1 = new String("<CreateFDLibList><CreateFDLib><id>1</id><name>");
String strInBuffer2 = new String("</name><thresholdValue>1</thresholdValue><customInfo /></CreateFDLib></CreateFDLibList>");
int iStringSize = byFDLibName.length + strInBuffer1.length() + strInBuffer2.length();
HCNetSDK.BYTE_ARRAY ptrByte = new HCNetSDK.BYTE_ARRAY(iStringSize);
System.arraycopy(strInBuffer1.getBytes(), 0, ptrByte.byValue, 0, strInBuffer1.length());
System.arraycopy(byFDLibName, 0, ptrByte.byValue, strInBuffer1.length(), byFDLibName.length);
System.arraycopy(strInBuffer2.getBytes(), 0, ptrByte.byValue, strInBuffer1.length() + byFDLibName.length, strInBuffer2.length());
ptrByte.write();
struInput.lpInBuffer = ptrByte.getPointer();
struInput.dwInBufferSize = ptrByte.byValue.length;
struInput.write();
HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT struOutput = new HCNetSDK.NET_DVR_XML_CONFIG_OUTPUT();
struOutput.dwSize = struOutput.size();
HCNetSDK.BYTE_ARRAY ptrOutByte = new HCNetSDK.BYTE_ARRAY(HCNetSDK.ISAPI_DATA_LEN);
struOutput.lpOutBuffer = ptrOutByte.getPointer();
struOutput.dwOutBufferSize = HCNetSDK.ISAPI_DATA_LEN;
HCNetSDK.BYTE_ARRAY ptrStatusByte = new HCNetSDK.BYTE_ARRAY(HCNetSDK.ISAPI_STATUS_LEN);
struOutput.lpStatusBuffer = ptrStatusByte.getPointer();
struOutput.dwStatusSize = HCNetSDK.ISAPI_STATUS_LEN;
struOutput.write();
if (hCNetSDK.NET_DVR_STDXMLConfig(userId, struInput, struOutput)) {
String xmlStr = struOutput.lpOutBuffer.getString(0);
Document document = DocumentHelper.parseText(xmlStr);
Element FDLibInfoList = document.getRootElement();
Iterator<Element> iterator = FDLibInfoList.elementIterator();
Element FDLibInfo = iterator.next();
Iterator<Element> iterator2 = FDLibInfo.elementIterator();
while (iterator2.hasNext()) {
Element e = iterator2.next();
if (e.getName().equals("id")) {
m_FDID = e.getText();
}
if ("id".equals(e.getName())) {
redisOper("m_FDID",e.getText(),"2");
}
logger.info(e.getName() + ":" + e.getText());
}
} else {
int code = hCNetSDK.NET_DVR_GetLastError();
logger.info("创建人脸库失败:" + code);
return false;
}
} else {
return false;
}
} catch (DocumentException ex) {
ex.printStackTrace();
return false;
}
return true;
}
public void FDLibUploadFileButtonClick(String img) {
if (m_lUploadHandle != -1) {
if (hCNetSDK.NET_DVR_UploadClose(m_lUploadHandle)) {
logger.info("NET_DVR_UploadClose success");
} else {
logger.info("NET_DVR_UploadClose fail,error=" + hCNetSDK.NET_DVR_GetLastError());
}
}
UploadFile();
Thread thread = new Thread() {
public void run() {
UploadSend(img);
while (true) {
if (-1 == m_lUploadHandle) {
return;
}
m_UploadStatus = getUploadState();
if (m_UploadStatus == 1) {
HCNetSDK.NET_DVR_UPLOAD_FILE_RET struPicRet = new HCNetSDK.NET_DVR_UPLOAD_FILE_RET();
struPicRet.write();
Pointer lpPic = struPicRet.getPointer();
boolean bRet = hCNetSDK.NET_DVR_GetUploadResult(m_lUploadHandle, lpPic, struPicRet.size());
if (!bRet) {
logger.info("NET_DVR_GetUploadResult failed with:" + hCNetSDK.NET_DVR_GetLastError());
} else {
logger.info("NET_DVR_GetUploadResult succ");
struPicRet.read();
m_picID = new String(struPicRet.sUrl);
logger.info("图片上传成功PicID:" + m_picID);
}
if (hCNetSDK.NET_DVR_UploadClose(m_lUploadHandle)) {
m_lUploadHandle = -1;
} else if (m_UploadStatus >= 3 || m_UploadStatus == -1) {
logger.info("m_UploadStatus = " + m_UploadStatus);
hCNetSDK.NET_DVR_UploadClose(m_lUploadHandle);
m_lUploadHandle = -1;
break;
}
}
}
}
};
thread.start();
}
public int getUploadState() {
IntByReference pInt = new IntByReference(0);
m_UploadStatus = hCNetSDK.NET_DVR_GetUploadState(m_lUploadHandle, pInt);
if (m_UploadStatus == -1) {
logger.info("NET_DVR_GetUploadState fail,error=" + hCNetSDK.NET_DVR_GetLastError());
} else if (m_UploadStatus == 2) {
logger.info("is uploading!!!! progress = " + pInt.getValue());
} else if (m_UploadStatus == 1) {
logger.info("progress = " + pInt.getValue());
logger.info("Uploading Succ!!!!!");
} else {
logger.info("NET_DVR_GetUploadState fail m_UploadStatus=" + m_UploadStatus);
logger.info("NET_DVR_GetUploadState fail,error=" + hCNetSDK.NET_DVR_GetLastError());
}
return m_UploadStatus;
}
public void UploadSend(String img) {
FileInputStream picfile = null;
String xmlfile = "<FaceAppendData><name>111</name><bornTime>2000-01-01</bornTime><sex></sex><province/><certificateType/><certificateNumber/></FaceAppendData>";
int picdataLength = 0;
String imgName="";
try {
String[] split1 = img.split("/");
imgName = split1[6];
imgName = "C:\\sykean\\file-app\\face\\" + imgName;
picfile = new FileInputStream(new File(imgName));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
picdataLength = picfile.available();
} catch (IOException e1) {
e1.printStackTrace();
}
HCNetSDK.BYTE_ARRAY ptrpicByte = new HCNetSDK.BYTE_ARRAY(picdataLength);
HCNetSDK.BYTE_ARRAY ptrxmlByte = new HCNetSDK.BYTE_ARRAY(10 * 1024);
ptrxmlByte.byValue = xmlfile.getBytes();
ptrxmlByte.write();
try {
picfile.read(ptrpicByte.byValue);
} catch (IOException e2) {
e2.printStackTrace();
}
ptrpicByte.write();
HCNetSDK.NET_DVR_SEND_PARAM_IN struSendParam = new HCNetSDK.NET_DVR_SEND_PARAM_IN();
struSendParam.pSendData = ptrpicByte.getPointer();
struSendParam.dwSendDataLen = picdataLength;
struSendParam.pSendAppendData = ptrxmlByte.getPointer();
struSendParam.dwSendAppendDataLen = xmlfile.length();
if (struSendParam.pSendData == null || struSendParam.pSendAppendData == null || struSendParam.dwSendDataLen == 0 || struSendParam.dwSendAppendDataLen == 0) {
logger.info("input file/xml data err");
return;
}
if(imgName.endsWith(".jpg")){
struSendParam.byPicType = 1;
}else{
struSendParam.byPicType = 3;
}
struSendParam.dwPicMangeNo = 0;
byte[] bname = new byte[HCNetSDK.NAME_LEN];
byte[] btmp;
try {
btmp = "人脸库1".getBytes("GBK");
for (int i = 0; i < btmp.length; i++) {
bname[i] = btmp[i];
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
struSendParam.sPicName = bname;
struSendParam.write();
int iRet = hCNetSDK.NET_DVR_UploadSend(m_lUploadHandle, struSendParam.getPointer(), null);
logger.info("iRet=" + iRet);
if (iRet < 0) {
logger.info("NET_DVR_UploadSend fail,error=" + hCNetSDK.NET_DVR_GetLastError());
} else {
logger.info("NET_DVR_UploadSend success");
logger.info("dwSendDataLen =" + struSendParam.dwSendDataLen);
logger.info("dwSendAppendDataLen =" + struSendParam.dwSendAppendDataLen);
}
try {
picfile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void UploadFile() {
if (m_isSupportFDLib) {
HCNetSDK.NET_DVR_FACELIB_COND struInput = new HCNetSDK.NET_DVR_FACELIB_COND();
struInput.dwSize = struInput.size();
struInput.szFDID = m_FDID.getBytes();
struInput.byConcurrent = 0;
struInput.byCover = 1;
struInput.byCustomFaceLibID = 0;
struInput.write();
Pointer lpInput = struInput.getPointer();
int ret = hCNetSDK.NET_DVR_UploadFile_V40(lUserID, HCNetSDK.IMPORT_DATA_TO_FACELIB, lpInput, struInput.size(), null, null, 0);
if (ret == -1) {
int code = hCNetSDK.NET_DVR_GetLastError();
logger.info("上传图片文件失败:" + code);
} else {
m_lUploadHandle = ret;
logger.info("上传图片文件成功");
}
}
}
public void bufang(int i,int userId){
HCNetSDK.NET_DVR_ALARMIN_SETUP alarmSetUp = new HCNetSDK.NET_DVR_ALARMIN_SETUP();
alarmSetUp.byAssiciateAlarmIn[i-1]=1;
alarmSetUp.write();
boolean b = hCNetSDK.NET_DVR_AlarmHostSetupAlarmChan(Integer.valueOf(userMap.get(userId).toString()), alarmSetUp);
if(b){
logger.info("布防结果输出"+b);
}else{
logger.info("防区布防失败,错误号:" + hCNetSDK.NET_DVR_GetLastError());
}
}
public void chefang(int i,int userId){
HCNetSDK.NET_DVR_ALARMIN_SETUP alarmSetUp = new HCNetSDK.NET_DVR_ALARMIN_SETUP();
alarmSetUp.byAssiciateAlarmIn[i-1]=1;
alarmSetUp.write();
boolean b = hCNetSDK.NET_DVR_AlarmHostCloseAlarmChan(Integer.valueOf(userMap.get(userId).toString()), alarmSetUp);
if(b){
logger.info("撤防结果输出"+b);
}else{
logger.info("防区撤防失败,错误号:" + hCNetSDK.NET_DVR_GetLastError());
}
}
protected static String b2s(byte b[]) {
int len = 0;
while (b.length > len && b[len] != 0) {
len++;
}
try {
String sendString = new String(b, "gb2312");
return new String(b, "gb2312").trim();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "转码失败";
}
}
public class HKCallback_New extends HKBaseCallback{
protected Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
DllConfig dllConfig;
@Reference
ParamsFacade paramsFacade;
@Autowired
private JedisTemplate jedisTemplate;
@Reference
BulletEqpDeviceFacade bulletEqpDeviceFacade;
@Autowired
BulletEqpDeviceInfoDetailSDKFacade bulletEqpDeviceInfoDetailSDKFacade;
@Autowired
BulletDutyManageFacade bulletDutyManageFacade;
@Reference
BulletLogAlarmFacade bulletLogAlarmFacade;
@Reference
UserFacade userFacade;
@Autowired
private BulletEqpDeviceService bulletEqpDeviceService;
@Autowired
ApplyDialogMsgManage applyDialogMsgManage;
@Autowired
ApplySendMsgManage applySendMsgManage;
@Autowired
private GroupHouseFacade groupHouseFacade;
@Value("${beitai.HKConfig}")
boolean HKConfig;
@Value("${sms.roles}")
private String roles;
public static Map<String, DeviceInfo> ipMap = new HashMap<>();
public static Map<String, LinkedList<SnapMatchInfoVO>> groupHouseMap = new HashMap<>(4);
@Override
protected HKBaseCallback getInstance() {
return null;
}
@Override
public boolean getAddHKSDK() {
return HKConfig;
}
@Override
public List<Map<String, Object>> getHkConfigure() {
List<Map<String, Object>> hkConfigure = userFacade.getHkConfigure();
return hkConfigure;
}
@Override
public void getAlarmer(HCNetSDK.NET_DVR_ALARMER pAlarmer, String deviceNumber, String alarm_type, String alarm_pic_path,int alarmNumber) {
String data = bulletEqpDeviceInfoDetailSDKFacade.getDeviceIdBypDeviceID(deviceNumber).getData();
BulletEqpDeviceModel bulletEqpDeviceModel = new BulletEqpDeviceModel();
bulletEqpDeviceModel.setId(data == null ? SysUtil.GetUUID() : data);
bulletEqpDeviceModel.setState("1");
bulletEqpDeviceModel.setDevtype("5");
bulletEqpDeviceModel.setDeviceVersion("V1.0");
bulletEqpDeviceModel.setDeviceNumber(deviceNumber);
bulletEqpDeviceModel.setDeviceIp(dllConfig.host);
bulletEqpDeviceFacade.existUpdate(bulletEqpDeviceModel);
Map<String, Object> params = new HashMap<>();
String uuid = SysUtil.GetUUID();
params.put("id", uuid);
params.put("alarm_device_id", deviceNumber);
params.put("alarm_type", alarm_type);
Date date = new Date();
params.put("alarm_time", date);
params.put("alarm_pic_path", alarm_pic_path);
bulletEqpDeviceInfoDetailSDKFacade.saveAlarmLog(params);
applyDialogMsgManage.hkAlarmer(params);
}
public String saveAlarm(String deviceNumber, String alarm_type, String alarm_pic_path,int alarmNumber,Date date) {
logger.info("act=saveAlarm deviceNumber={},alarm_type={}", deviceNumber, alarm_type);
Map<String, Object> params = new HashMap<>();
String uuid = SysUtil.GetUUID();
params.put("id", uuid);
params.put("alarm_device_id", deviceNumber);
params.put("alarm_type", alarm_type);
params.put("alarm_time", date);
params.put("alarm_pic_path", alarm_pic_path);
params.put("content", AlarmTypeEnum.indexOf(alarm_type));
logger.info("class=HKCallback_New act=saveAlarm params={}",JsonMapper.toJson(params));
bulletEqpDeviceInfoDetailSDKFacade.saveAlarmLog(params);
return uuid;
}
@Override
public Response<ParamsModel> getParamsInfoByKindAndName() {
return paramsFacade.getParamsInfoByKindAndName("hk_pt","hk_numberLimit");
}
@Override
public Response<List<ParamsModel>> findParamsListByKind() {
return paramsFacade.findParamsListByKind("file_app");
}
@Override
public BulletEqpDeviceModel getDeptByDeviceId(Map<String, Object> device) {
return bulletEqpDeviceFacade.getDeptByDeviceId(device.get("device_number").toString()).getData();
}
@Override
public void creatDevice(Map<String, Object> device, HCNetSDK.NET_DVR_CID_ALARM strCIDAlarm,HCNetSDK.NET_DVR_ALARMER pAlarmer) {
String deviceNumber = device.get("device_number").toString();
jedisTemplate.set("channel@"+deviceNumber,String.valueOf(strCIDAlarm.dwIOTChannelNo));
String data = bulletEqpDeviceFacade.getDeviceIdBypDeviceID(deviceNumber).getData();
BulletEqpDeviceModel bulletEqpDeviceModel = new BulletEqpDeviceModel();
bulletEqpDeviceModel.setId(data==null? SysUtil.GetUUID():data);
bulletEqpDeviceModel.setState("1");
bulletEqpDeviceModel.setDevtype("5");
bulletEqpDeviceModel.setDeviceVersion("V1.0");
bulletEqpDeviceModel.setDeviceNumber(deviceNumber);
bulletEqpDeviceModel.setDeviceIp(b2s(pAlarmer.sDeviceIP));
bulletEqpDeviceFacade.existUpdate(bulletEqpDeviceModel);
Map<String, Object> params=new HashMap<>();
params.put("id",SysUtil.GetUUID());
params.put("alarm_device_id", deviceNumber);
params.put("areaCode", String.valueOf(strCIDAlarm.wDefenceNo));
Map<String, Object> alarm_map = bulletEqpDeviceFacade.getAlarmTypeByMap(params);
if(alarm_map!=null && alarm_map.containsKey("alarmType")){
System.out.println("报警主机设备编号打印======================"+alarm_map.get("device_number").toString());
params.put("alarm_device_id", alarm_map.get("device_number").toString());
params.put("alarm_type", alarm_map.get("alarmType").toString());
}
params.put("alarm_time",new Date());
params.put("alarm_pic_path",null);
if(params.containsKey("alarm_type") && StringUtils.isNotBlank(params.get("alarm_type").toString())){
params.put("content",AlarmTypeEnum.indexOf(params.get("alarm_type").toString()));
params.put("alarm_type","125");
bulletLogAlarmFacade.saveAlarmLog(params);
try {
Map map=new HashMap();
map.put("alarmCount",params.get("content").toString());
map.put("deptName","");
map.put("alarmName",params.get("content").toString());
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
map.put("alarmTime",simpleDateFormat.format(new Date()));
map.put("cType",alarm_map.get("alarmType").toString());
map.put("alarmId",params.get("id").toString());
map.put("houseName","");
map.put("deviceIp","null");
map.put("voice",params.get("content").toString());
applyDialogMsgManage.sendDeviceAlarmCallBack(map);
}catch (Exception e){
logger.error("报警主机推流异常====="+e.getMessage());
e.printStackTrace();
}
BulletEqpDeviceModel data1 = bulletEqpDeviceFacade.getDeptByDeviceId(deviceNumber).getData();
if(data1!=null){
Map<String,Object> map = new HashMap<>();
map.put("parent_id",data1.getId());
map.put("devtype","6");
map.put("bullet_type",strCIDAlarm.wDefenceNo);
Map<String,Object> deviceMap = bulletEqpDeviceFacade.getDeviceInFoByMap(map);
if(deviceMap!=null){
applyDialogMsgManage.hkCreateDeviceAlarm(deviceMap.get("device_channel").toString(),data1.getDeptId(),params.get("alarm_type").toString());
}
}
}
}
@Override
public String redisOper(String str, String strNew,String type) {
if (JedisStateEnum.GET.ofType().equals(type)){
return jedisTemplate.get(str);
}else if (JedisStateEnum.SET.ofType().equals(type)){
jedisTemplate.set(str,strNew);
return null;
}else {
return "eroor";
}
}
@Override
public boolean snapMatchAlarm(SnapMatchAlarmResp snapMatchAlarmResp) {
logger.info("method=snapMatchAlarm act=snapMatchAlarm params={}", JsonMapper.toJson(snapMatchAlarmResp));
SnapMatchAlarmResp.MatchPic matchPic = snapMatchAlarmResp.getMatchPic();
SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
DeviceInfo device = bulletEqpDeviceService.getCameraDeviceInfoByIp(snapMatchAlarmResp.getSourceIp());
String deviceNumber = device.getDeviceNumber();
if (snapMatchAlarmResp.getByContrastStatus() == CommonConstant.MATCH_FAIL) {
String uid = saveAlarm(deviceNumber, AlarmTypeEnum.type207.getType(), matchPic.getDwSnapFacePicUrl(), 0,snapMatchAlarmResp.getToday());
SnapMatchInfoVO snapMatchInfoVO = buildMatchInfoVO(deviceNumber, matchPic.getDwSnapFacePicUrl(), "陌生人", AlarmTypeEnum.type207.getType(), snapMatchAlarmResp.getToday(),device.getDevicename());
saveSnapDynamic(snapMatchInfoVO);
String[] split = roles.split(",");
List<String> objects = Arrays.asList(split);
Response<List<UserModel>> userInfo = userFacade.findUserInfoByDeptIdAndRole(device.getDeptId(),objects);
for (UserModel datum : userInfo.getData()) {
applySendMsgManage.sendMsg("有陌生人入库,请及时处理",datum.getMobile());
}
} else {
SnapMatchAlarmResp.MatchInfo matchINfo = snapMatchAlarmResp.getMatchINfo();
String byName = matchINfo.getByName();
BulletDutyManageModel model = new BulletDutyManageModel();
String s = DateUtil.dateTo0String(new Date());
model.setStartTime(s);
Response<List<BulletDutyManageModel>> userByToday = bulletDutyManageFacade.getUserByToday(model);
List<BulletDutyManageModel> todayUserList = userByToday.getData();
boolean contains = false;
if (todayUserList != null && todayUserList.size() != 0) {
Set<String> idSet = new HashSet<>();
todayUserList.forEach(item -> {
idSet.addAll(item.getUserIds());
});
Response<List<UserModel>> listByIds = userFacade.findListByIds(idSet);
List<UserModel> data = listByIds.getData();
Set<String> collect = data.stream().map(UserModel::getName).collect(Collectors.toSet());
contains = collect.contains(byName);
}
if (!contains) {
String uid = saveAlarm(deviceNumber, AlarmTypeEnum.type206.getType(), matchPic.getDwSnapFacePicUrl(), 0, snapMatchAlarmResp.getToday());
SnapMatchInfoVO snapMatchInfoVO = buildMatchInfoVO(deviceNumber, matchPic.getDwSnapFacePicUrl(), "非值班人员:" + byName, AlarmTypeEnum.type206.getType(), snapMatchAlarmResp.getToday(),device.getDevicename());
saveSnapDynamic(snapMatchInfoVO);
} else {
SnapMatchInfoVO snapMatchInfoVO = buildMatchInfoVO(deviceNumber, matchPic.getDwSnapFacePicUrl(), "值班人员:" + byName, "218", snapMatchAlarmResp.getToday(),device.getDevicename());
saveSnapDynamic(snapMatchInfoVO);
}
}
return true;
}
public SnapMatchInfoVO buildMatchInfoVO(String deviceNumber, String snapUrl, String value, String type, Date alarmTime, String deviceName) {
SnapMatchInfoVO res = new SnapMatchInfoVO();
res.setDeviceName(deviceName);
try {
logger.info("method=buildMatchInfoVO deviceNumber={}", deviceNumber);
List<DeviceInfo> listByDeviceNumbers = bulletEqpDeviceService.getListByDeviceNumbers(Sets.newHashSet(deviceNumber));
if (!CollectionUtils.isEmpty(listByDeviceNumbers)) {
String houseId = listByDeviceNumbers.get(0).getHouseId();
res.setGroupHouseId(houseId);
}
} catch (BusinessException e) {
logger.error("method=buildMatchInfoVO act=getGroupHouseId error deviceNumber={}", deviceNumber, e);
}
res.setValue(value);
res.setType(type);
res.setAlarmTime(alarmTime);
res.setAlarmPicPath(snapUrl);
return res;
}
private void saveSnapDynamic(SnapMatchInfoVO snapMatchInfoVO){
logger.info("method=saveSnapDynamic params={}", JsonMapper.toJson(snapMatchInfoVO));
String groupHouseId = snapMatchInfoVO.getGroupHouseId();
LinkedList<SnapMatchInfoVO> snapMatchInfoVOS = groupHouseMap.get(groupHouseId);
if (ObjectUtils.isEmpty(snapMatchInfoVOS)){
LinkedList<SnapMatchInfoVO> res = new LinkedList<>();
res.add(snapMatchInfoVO);
groupHouseMap.put(groupHouseId, res);
return;
}
if (snapMatchInfoVOS.size() >= 10) {
snapMatchInfoVOS.removeLast();
}
snapMatchInfoVOS.addFirst(snapMatchInfoVO);
}
public PopulationDensityAlarmResp alarmResp =null;
@Scheduled(fixedRate = 60000)
public void performTask() {
if(alarmResp !=null) {
System.out.println("定时任务执行中: " + System.currentTimeMillis());
String ipAddress = alarmResp.getIpAddress();
Integer lUserID = userIDMap.get(ipAddress);
int channelID = alarmResp.getChannelID();
try {
com.beitai.device.param.DeviceInfo deviceInfoByChannel = baseApi.getDeviceInfoByChannel(lUserID, channelID);
String ip = deviceInfoByChannel.getIp();
DeviceInfo device = bulletEqpDeviceService.getCameraDeviceInfoByIp(ip);
String deviceNumber = device.getDeviceNumber();
PopulationDensityAlarmResp.FramesPeopleCounting framesPeopleCounting = alarmResp.getFramesPeopleCounting();
int framesPeopleCountingNum = framesPeopleCounting.getFramesPeopleCountingNum();
if (framesPeopleCountingNum == 1) {
logger.info("act=populationDensityAlarm framesPeopleCountingNum = 1");
String resourcesContent = alarmResp.getFramesPeopleCounting().getBackgroundImage().getResourcesContent();
Response<List<ParamsModel>> fileUrl = findParamsListByKind();
String fn_image = null;
try {
byte[] buffer = downloadUrl(resourcesContent);
fn_image = FileUtil.fileUpload(buffer, fileUrl.getData().get(0).getValue(), "face");
} catch (Exception e) {
e.printStackTrace();
}
saveAlarm(deviceNumber, AlarmTypeEnum.type208.getType(), fn_image, 0, alarmResp.getToday());
}
alarmResp = null;
} catch (UnsupportedEncodingException e) {
logger.info("act=populationDensityAlarm getDeviceInfo error params={}",e);
}
}
}
@Override
public boolean populationDensityAlarm(PopulationDensityAlarmResp resp) {
alarmResp=resp;
return true;
}
@Override
public boolean pdcAlarm(PdcAlarmResp pdcAlarmResp) {
logger.info("act=pdcAlarm params={}", JsonMapper.toJson(pdcAlarmResp));
DeviceInfo device = bulletEqpDeviceService.getCameraDeviceInfoByIp(pdcAlarmResp.getSourceIp());
String deviceNumber = device.getDeviceNumber();
Integer lUserID = userIDMap.get(pdcAlarmResp.getPrevIp());
List<DeviceInfo> response= null;
try {
logger.info("act=pdcAlarm getDevice deviceNumber={}", deviceNumber);
response = bulletEqpDeviceService.getListByDeviceNumbers(Sets.newHashSet(deviceNumber));
} catch (BusinessException e) {
logger.error("act=pdcAlarm response is null params={}",JsonMapper.toJson(pdcAlarmResp),e);
}
if (response == null){
return false;
}
String houseId = response.get(0).getHouseId();
Response<GroupHouseModel> resp = groupHouseFacade.selectGroupHouseById(houseId);
logger.info("act=pdcAlarm getGroupHouse resp={}",JsonMapper.toJson(resp));
GroupHouseModel data = resp.getData();
Integer numberLimit = data.getMaxCountLimit();
byte[] pictureNew = baseApi.getPictureNew(lUserID, (pdcAlarmResp.getByChannel() & 0xFF));
if (pdcAlarmResp.getByMode() == 1) {
if(pdcAlarmResp.getDwEnterNum() == 1 && numberLimit>1){
String fn_image = uploadPic(pictureNew,"pdc");
saveAlarm(deviceNumber, AlarmTypeEnum.type208.getType(), fn_image,0, pdcAlarmResp.getToday());
}
if(pdcAlarmResp.getDwEnterNum() > numberLimit){
String fn_image = uploadPic(pictureNew,"pdc");
saveAlarm(deviceNumber, AlarmTypeEnum.type219.getType(), fn_image,0, pdcAlarmResp.getToday());
}
}
return true;
}
private String uploadPic(byte[] pictureNew,String uploadChildPath){
String fn_image = null;
Response<List<ParamsModel>> fileUrl = findParamsListByKind();
System.out.println(fileUrl.getData().get(0));
try {
fn_image = FileUtil.fileUpload(pictureNew,
fileUrl.getData().get(0).getValue(), uploadChildPath);
} catch (Exception e) {
logger.error("act=populationDensityAlarm upload pic error",e);
}
return fn_image;
}
private boolean creatDevice(CidAlarmResp cidAlarmResp) {
try {
Map<String, Object> device = deviceMap.get(cidAlarmResp.getSourceIp().trim());
String deviceNumber = device.get("device_number").toString();
jedisTemplate.set("channel@"+deviceNumber,String.valueOf(cidAlarmResp.getDwIOTChannelNo()));
String data = bulletEqpDeviceFacade.getDeviceIdBypDeviceID(deviceNumber).getData();
BulletEqpDeviceModel bulletEqpDeviceModel = new BulletEqpDeviceModel();
bulletEqpDeviceModel.setId(data==null? SysUtil.GetUUID():data);
bulletEqpDeviceModel.setState("1");
bulletEqpDeviceModel.setDevtype("5");
bulletEqpDeviceModel.setDeviceVersion("V1.0");
bulletEqpDeviceModel.setDeviceNumber(deviceNumber);
bulletEqpDeviceModel.setDeviceIp(cidAlarmResp.getSourceIp().trim());
bulletEqpDeviceFacade.existUpdate(bulletEqpDeviceModel);
Map<String, Object> params=new HashMap<>();
params.put("id",SysUtil.GetUUID());
params.put("alarm_device_id", deviceNumber);
params.put("areaCode", String.valueOf(cidAlarmResp.getWDefenceNo()));
Map<String, Object> alarm_map = bulletEqpDeviceFacade.getAlarmTypeByMap(params);
if(alarm_map!=null && alarm_map.containsKey("alarmType")){
System.out.println("报警主机设备编号打印======================"+alarm_map.get("device_number").toString());
params.put("alarm_device_id", alarm_map.get("device_number").toString());
params.put("alarm_type", alarm_map.get("alarmType").toString());
}
params.put("alarm_time",new Date());
params.put("alarm_pic_path",null);
if(params.containsKey("alarm_type") && StringUtils.isNotBlank(params.get("alarm_type").toString())){
bulletLogAlarmFacade.saveAlarmLog(params);
applyDialogMsgManage.hkCreateDeviceAlarm();
}
}catch (Exception e){
logger.error("class=HKCallback act=creatDevice error param={}",cidAlarmResp,e);
return false;
}
return true;
}
@Override
public boolean cidAlarm(CidAlarmResp cidAlarmResp) {
System.out.println("通道号"+cidAlarmResp.getDwIOTChannelNo());
String srt3="";
try {
srt3=new String(cidAlarmResp.getSCIDDescribe() ,"GBK");
}catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
if(!srt3.contains("恢复")){
return creatDevice(cidAlarmResp);
}
return true;
}
}