diff --git a/pom.xml b/pom.xml index 8d84703..3217db3 100644 --- a/pom.xml +++ b/pom.xml @@ -101,11 +101,7 @@ ${druid.version} - - com.sun.jna - examples - 1.0 - + @@ -120,6 +116,18 @@ 3.0.9 + + com.sun.jna + examples + 1.0 + + + + + + + + org.springframework.boot @@ -140,6 +148,15 @@ spring-boot-maven-plugin + + + + + + + + + diff --git a/src/main/java/com/shxy/xyhkcamera/TaskPoolConfig.java b/src/main/java/com/shxy/xyhkcamera/TaskPoolConfig.java new file mode 100644 index 0000000..0f534f7 --- /dev/null +++ b/src/main/java/com/shxy/xyhkcamera/TaskPoolConfig.java @@ -0,0 +1,37 @@ +package com.shxy.xyhkcamera; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + +@Configuration +@EnableAsync +public class TaskPoolConfig { + + @Bean("syncExecutorPool") + public Executor taskExecutor() { + ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); + // 核心池大小 + taskExecutor.setCorePoolSize(5); + // 最大线程数 + taskExecutor.setMaxPoolSize(10); + // 队列程度 + taskExecutor.setQueueCapacity(100); + // 线程空闲时间 + taskExecutor.setKeepAliveSeconds(60); + // 线程前缀名称 + taskExecutor.setThreadNamePrefix("syncExecutor--"); + // 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean, + // 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。 + taskExecutor.setWaitForTasksToCompleteOnShutdown(true); + // 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。 + taskExecutor.setAwaitTerminationSeconds(300); + // 线程不够用时由调用的线程处理该任务 + taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + return taskExecutor; + } +} diff --git a/src/main/java/com/shxy/xyhkcamera/TestDemo.java b/src/main/java/com/shxy/xyhkcamera/TestDemo.java deleted file mode 100644 index 2421655..0000000 --- a/src/main/java/com/shxy/xyhkcamera/TestDemo.java +++ /dev/null @@ -1,858 +0,0 @@ -//package com.shxy.xyhkcamera; -// -//import com.sun.jna.Native; -//import com.sun.jna.NativeLong; -//import com.sun.jna.Pointer; -//import com.sun.jna.ptr.IntByReference; -// -//import java.io.IOException; -//import java.io.UnsupportedEncodingException; -//import java.text.SimpleDateFormat; -//import java.util.Date; -// -///** -// * @create 2020-07-27-10:42 -// */ -//public class TestDemo { -// static HCNetSDK hCNetSDK = null; -// static int lUserID = -1; //用户句柄 -// public static flowTestcallback flowcallback; -// public static dev_work_state_cb workStateCb; -// public static FExceptionCallBack_Imp fExceptionCallBack; -// -// static class dev_work_state_cb implements HCNetSDK.DEV_WORK_STATE_CB { -// public boolean invoke(Pointer pUserdata, int iUserID, HCNetSDK.NET_DVR_WORKSTATE_V40 lpWorkState) { -// -// lpWorkState.read(); -// System.out.println("设备状态:" + lpWorkState.dwDeviceStatic); -// for (int i = 0; i < HCNetSDK.MAX_CHANNUM_V40; i++) { -// int channel = i + 1; -// System.out.println("第" + channel + "通道是否在录像:" + lpWorkState.struChanStatic[i].byRecordStatic); -// } -// return true; -// } -// -// } -// -// static class FExceptionCallBack_Imp implements HCNetSDK.FExceptionCallBack { -// public void invoke(int dwType, int lUserID, int lHandle, Pointer pUser) { -// System.out.println("异常事件类型:" + dwType); -// return; -// } -// } -// -// static class flowTestcallback implements HCNetSDK.FLOWTESTCALLBACK { -// public void invoke(int lFlowHandle, HCNetSDK.NET_DVR_FLOW_INFO pFlowInfo, -// Pointer pUser) { -// pFlowInfo.read(); -// System.out.println("发送的流量数据:" + pFlowInfo.dwSendFlowSize); -// System.out.println("接收的流量数据:" + pFlowInfo.dwRecvFlowSize); -// } -// } -// -// /** -// * 动态库加载 -// * -// * @return -// */ -// private static boolean createSDKInstance() { -// if (hCNetSDK == null) { -// synchronized (HCNetSDK.class) { -// String strDllPath = ""; -// try { -// if (osSelect.isWindows()) -// //win系统加载SDK库路径 -// strDllPath = System.getProperty("user.dir") + "\\lib\\HCNetSDK.dll"; -// -// else if (osSelect.isLinux()) -// //Linux系统加载SDK库路径 -// strDllPath = System.getProperty("user.dir") + "/lib/libhcnetsdk.so"; -// hCNetSDK = (HCNetSDK) Native.loadLibrary(strDllPath, HCNetSDK.class); -// } catch (Exception ex) { -// System.out.println("loadLibrary: " + strDllPath + " Error: " + ex.getMessage()); -// return false; -// } -// } -// } -// return true; -// } -// -// public static void main(String[] args) throws IOException, InterruptedException { -// if (hCNetSDK == null) { -// if (!createSDKInstance()) { -// System.out.println("Load SDK fail"); -// return; -// } -// } -// //linux系统建议调用以下接口加载组件库 -// if (osSelect.isLinux()) { -// HCNetSDK.BYTE_ARRAY ptrByteArray1 = new HCNetSDK.BYTE_ARRAY(256); -// HCNetSDK.BYTE_ARRAY ptrByteArray2 = new HCNetSDK.BYTE_ARRAY(256); -// //这里是库的绝对路径,请根据实际情况修改,注意改路径必须有访问权限 -// String strPath1 = System.getProperty("user.dir") + "/lib/libcrypto.so.1.1"; -// String strPath2 = System.getProperty("user.dir") + "/lib/libssl.so.1.1"; -// -// System.arraycopy(strPath1.getBytes(), 0, ptrByteArray1.byValue, 0, strPath1.length()); -// ptrByteArray1.write(); -// hCNetSDK.NET_DVR_SetSDKInitCfg(3, ptrByteArray1.getPointer()); -// -// System.arraycopy(strPath2.getBytes(), 0, ptrByteArray2.byValue, 0, strPath2.length()); -// ptrByteArray2.write(); -// hCNetSDK.NET_DVR_SetSDKInitCfg(4, ptrByteArray2.getPointer()); -// -// String strPathCom = System.getProperty("user.dir") + "/lib/"; -// HCNetSDK.NET_DVR_LOCAL_SDK_PATH struComPath = new HCNetSDK.NET_DVR_LOCAL_SDK_PATH(); -// System.arraycopy(strPathCom.getBytes(), 0, struComPath.sPath, 0, strPathCom.length()); -// struComPath.write(); -// hCNetSDK.NET_DVR_SetSDKInitCfg(2, struComPath.getPointer()); -// } -// -// //SDK初始化,一个程序进程只需要调用一次 -// hCNetSDK.NET_DVR_Init(); -// -// if (fExceptionCallBack == null) { -// fExceptionCallBack = new FExceptionCallBack_Imp(); -// } -// Pointer pUser = null; -// if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, pUser)) { -// return; -// } -// System.out.println("设置异常消息回调成功"); -// -// //启用SDK写日志 -// hCNetSDK.NET_DVR_SetLogToFile(3, "./sdkLog", false); -// -// -// //登录设备,每一台设备只需要登录一次 -// lUserID = TestDemo.login_V40("10.16.36.13", (short) 8000, "admin", "hik12345"); -// -// getDeviceStatus(lUserID); -//// getIPChannelInfo(lUserID); -//// getGisInfo(lUserID); -//// getIP(); -// Thread.sleep(2000); -// //程序退出的时候调用注销登录接口,每一台设备分别调用一次 -// if (hCNetSDK.NET_DVR_Logout(lUserID)) { -// System.out.println("注销成功"); -// } -// -// //释放SDK资源,程序退出时调用,只需要调用一次 -// hCNetSDK.NET_DVR_Cleanup(); -// return; -// } -// -// /** -// * 设备登录V30 -// * -// * @param ip 设备IP -// * @param port SDK端口,默认设备的8000端口 -// * @param user 设备用户名 -// * @param psw 设备密码 -// */ -// public static int login_V30(String ip, short port, String user, String psw) { -// HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30(); -// int iUserID = hCNetSDK.NET_DVR_Login_V30(ip, port, user, psw, m_strDeviceInfo); -// System.out.println("UserID:" + lUserID); -// if ((iUserID == -1) || (iUserID == 0xFFFFFFFF)) { -// System.out.println("登录失败,错误码为" + hCNetSDK.NET_DVR_GetLastError()); -// return iUserID; -// } else { -// System.out.println(ip + ":设备登录成功!"); -// return iUserID; -// } -// } -// -// /** -// * 设备登录V40 与V30功能一致 -// * -// * @param ip 设备IP -// * @param port SDK端口,默认设备的8000端口 -// * @param user 设备用户名 -// * @param psw 设备密码 -// */ -// public static int login_V40(String ip, short port, String user, String psw) { -// //注册 -// HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();//设备登录信息 -// HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息 -// -// String m_sDeviceIP = ip;//设备ip地址 -// 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()); -// -// String m_sUsername = user;//设备用户名 -// 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()); -// -// String m_sPassword = psw;//设备密码 -// 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 = port; -// m_strLoginInfo.bUseAsynLogin = false; //是否异步登录:0- 否,1- 是 -//// m_strLoginInfo.byLoginMode=1; //ISAPI登录 -// m_strLoginInfo.write(); -// -// int iUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); -// if (iUserID == -1) { -// System.out.println("登录失败,错误码为" + hCNetSDK.NET_DVR_GetLastError()); -// return iUserID; -// } else { -// System.out.println(ip + ":设备登录成功!"); -// return iUserID; -// } -// } -// -// //设备在线状态监测 -// public static void getDeviceStatus(int iUserID) { -// boolean devStatus = hCNetSDK.NET_DVR_RemoteControl(iUserID, HCNetSDK.NET_DVR_CHECK_USER_STATUS, null, 0); -// if (devStatus == false) { -// System.out.println("设备不在线"); -// -// } else { -// System.out.println("设备在线"); -// } -// } -// -// //PC电脑有多网卡,绑定网卡,指定使用的实际网卡 -// public static void getIP() { -// HCNetSDK.BYTE_TWODIM[] struByteArray = new HCNetSDK.BYTE_TWODIM[16]; -// IntByReference pInt = new IntByReference(0); -// boolean pEnableBind = false; -// if (!hCNetSDK.NET_DVR_GetLocalIP(struByteArray, pInt, pEnableBind)) { -// System.out.println("NET_DVR_GetLocalIP失败,错误号:" + hCNetSDK.NET_DVR_GetLastError()); -// } else { -// int inum = pInt.getValue(); -// for (int i = 0; i < inum; i++) { -// System.out.println("网卡序号:" + i + ", 网卡IP: " + new String(struByteArray[i].strIP).trim()); -// -////选择需要绑定的网卡 -// if ("10.16.36.23".equals(new String(struByteArray[i].strIP))) { -// hCNetSDK.NET_DVR_SetValidIP(i, true); -// } -// } -// } -// } -// -// //设备抓图 -// public void circleGetPic(int iUserID) { -// SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); -//// String curTime0 = sdf.format(new Date()); -// Boolean result = false; -// int count = 0; -// while (!result) { -// try { -// Thread.sleep(1 * 1000); //设置暂停的时间 5 秒 -// String curTime0 = sdf.format(new Date()); -// count++; -// String filename = "C:\\PIC\\" + curTime0 + count + ".jpg"; -// byte[] fileByte = filename.getBytes("UTF-8"); -// HCNetSDK.BYTE_ARRAY byte_array = new HCNetSDK.BYTE_ARRAY(fileByte.length); -// byte_array.read(); -// byte_array.byValue = fileByte; -// byte_array.write(); -// -// HCNetSDK.NET_DVR_JPEGPARA strJpegParm = new HCNetSDK.NET_DVR_JPEGPARA(); -// strJpegParm.read(); -// strJpegParm.wPicSize = 2; -// strJpegParm.wPicQuality = 0; -// Pointer pStrjPegParm = strJpegParm.getPointer(); -// strJpegParm.write(); -// boolean b_Cap = hCNetSDK.NET_DVR_CaptureJPEGPicture(iUserID, 1, strJpegParm, fileByte); -// if (b_Cap == false) { -// System.out.println("抓图失败,错误码为:" + hCNetSDK.NET_DVR_GetLastError()); -// return; -// } -// System.out.println(sdf.format(new Date()) + "--循环执行第" + count + "次"); -// if (count == 3) { -// result = true; -// break; -// } -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } catch (UnsupportedEncodingException e) { -// e.printStackTrace(); -// } -// } -// } -// -// //端口绑定 -// public void bindPort() { -// HCNetSDK.NET_DVR_LOCAL_TCP_PORT_BIND_CFG strLocalTcpBind = new HCNetSDK.NET_DVR_LOCAL_TCP_PORT_BIND_CFG(); -// strLocalTcpBind.read(); -// strLocalTcpBind.wLocalBindTcpMinPort = 30000; -// strLocalTcpBind.wLocalBindTcpMaxPort = 30200; -// strLocalTcpBind.write(); -// Pointer pStrLocalTcoBind = strLocalTcpBind.getPointer(); -// if (hCNetSDK.NET_DVR_SetSDKLocalCfg(0, pStrLocalTcoBind) == false) { -// System.out.println("绑定失败,错误码为" + hCNetSDK.NET_DVR_GetLastError()); -// } -// System.out.println("绑定成功"); -// } -// -// //获取设备的基本参数 -// public static void getCfg(int iUserID) { -// HCNetSDK.NET_DVR_DEVICECFG_V40 m_strDeviceCfg = new HCNetSDK.NET_DVR_DEVICECFG_V40(); -// m_strDeviceCfg.dwSize = m_strDeviceCfg.size(); -// m_strDeviceCfg.write(); -// Pointer pStrDeviceCfg = m_strDeviceCfg.getPointer(); -// IntByReference pInt = new IntByReference(0); -// boolean b_GetCfg = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_DEVICECFG_V40, -// 0Xffffffff, pStrDeviceCfg, m_strDeviceCfg.dwSize, pInt); -// if (b_GetCfg == false) { -// System.out.println("获取参数失败 错误码:" + hCNetSDK.NET_DVR_GetLastError()); -// } -// System.out.println("获取参数成功"); -// m_strDeviceCfg.read(); -// System.out.println("设备名称:" + new String(m_strDeviceCfg.sDVRName).trim() + "设备序列号:" + new String(m_strDeviceCfg.sSerialNumber)); -// System.out.println("模拟通道个数" + m_strDeviceCfg.byChanNum); -// parseVersion(m_strDeviceCfg.dwSoftwareVersion); -// parseBuildTime(m_strDeviceCfg.dwSoftwareBuildDate); -// parseDSPBuildDate(m_strDeviceCfg.dwDSPSoftwareBuildDate); -// -// } -// -// -// public static void parseBuildTime(int buildTime) { -// int year = ((buildTime & 0XFF << 16) >> 16) + 2000; -// int month = (buildTime & 0XFF << 8) >> 8; -// int data = buildTime & 0xFF; -// System.out.println("Build:" + year + "." + month + "." + data); -// -// -// } -// -// public static void parseDSPBuildDate(int DSPBuildDate) { -// int year = ((DSPBuildDate & 0XFF << 16) >> 16) + 2000; -// int month = (DSPBuildDate & 0XFF << 8) >> 8; -// int data = DSPBuildDate & 0xFF; -// System.out.println("DSPBuildDate:" + year + "." + month + "." + data); -// -// -// } -// -// //设备版本解析 -// public static void parseVersion(int version) { -// int firstVersion = (version & 0XFF << 24) >> 24; -// int secondVersion = (version & 0XFF << 16) >> 16; -// int lowVersion = version & 0XFF; -// -// System.out.println("firstVersion:" + firstVersion); -// System.out.println("secondVersion:" + secondVersion); -// System.out.println("lowVersion:" + lowVersion); -// } -// -// //获取设备时间参数 -// public void getDevTime(int iUserID) { -// HCNetSDK.NET_DVR_TIME m_Time = new HCNetSDK.NET_DVR_TIME(); -// Pointer pTime = m_Time.getPointer(); -// IntByReference pInt = new IntByReference(0); -// boolean b_GetTime = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_TIMECFG, 0xffffffff, pTime, m_Time.size(), pInt); -// if (b_GetTime == false) { -// System.out.println("获取时间参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -// } -// m_Time.read(); -// System.out.println("年:" + m_Time.dwYear + "月:" + m_Time.dwMonth + "日:" + m_Time.dwDay + "时:" + m_Time.dwHour + -// "分:" + m_Time.dwMinute + "秒:" + m_Time.dwSecond); -// } -// -// //获取设备的图像参数-移动侦测高亮显示 -// public static void getPicCfg(int iUserID) { -// HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40(); -// strPicCfg.dwSize = strPicCfg.size(); -// Pointer pStrPicCfg = strPicCfg.getPointer(); -// NativeLong lChannel = new NativeLong(18); -// IntByReference pInt = new IntByReference(0); -// boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(), -// pStrPicCfg, strPicCfg.size(), pInt); -// if (b_GetPicCfg == false) { -// System.out.println("获取图像参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -// } -// strPicCfg.read(); -// System.out.println("通道号:" + lChannel); -// System.out.println("通道名称:" + strPicCfg.sChanName); -// System.out.println("预览的图像是否显示OSD:" + strPicCfg.dwShowOsd); -// System.out.println("移动侦测高亮显示是否开启:" + strPicCfg.struMotion.byEnableDisplay); -// strPicCfg.read(); -// strPicCfg.struMotion.byEnableDisplay = 0; -// strPicCfg.write(); -// -// boolean b_SetPicCfg = hCNetSDK.NET_DVR_SetDVRConfig(iUserID, HCNetSDK.NET_DVR_SET_PICCFG_V40, lChannel.intValue(), -// pStrPicCfg, strPicCfg.size()); -// if (b_SetPicCfg == false) { -// System.out.println("设置图像参数移动侦测高亮参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -// } else { -// System.out.println("设置移动侦测高亮参数成功"); -// -// } -// } -// -// //获取用户参数 -// public static void getUsrCfg(int iUserID) throws UnsupportedEncodingException { -// HCNetSDK.NET_DVR_USER_V30 usercfg = new HCNetSDK.NET_DVR_USER_V30(); -// usercfg.dwSize = usercfg.size(); -// Pointer pUserCfg = usercfg.getPointer(); -// NativeLong lChannel = new NativeLong(1); -// IntByReference pInt = new IntByReference(0); -// boolean b_GetUserCfg = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_USERCFG_V30, lChannel.intValue(), -// pUserCfg, usercfg.size(), pInt); -// if (b_GetUserCfg == false) { -// System.out.println("获取用户参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -// } -// usercfg.read(); -// //System.out.println("用户名称:" + usercfg.struUser[1].sUserName); -// System.out.println("name: " + new String(usercfg.struUser[0].sUserName, "GBK").trim()); -// System.out.println("password: " + new String(usercfg.struUser[0].sPassword, "GBK").trim()); -// -// } -// -// //网络流量检测 -// public void netFlowDec(int iUserID) throws InterruptedException { -// HCNetSDK.NET_DVR_FLOW_TEST_PARAM struFlowPam = new HCNetSDK.NET_DVR_FLOW_TEST_PARAM(); -// struFlowPam.read(); -// struFlowPam.dwSize = struFlowPam.size(); -// struFlowPam.lCardIndex = 0; -// struFlowPam.dwInterval = 1; -// struFlowPam.write(); -// Pointer pUser = null; -// if (flowcallback == null) { -// flowcallback = new flowTestcallback(); -// } -// int FlowHandle = hCNetSDK.NET_DVR_StartNetworkFlowTest(iUserID, struFlowPam, flowcallback, pUser); -// if (FlowHandle <= -1) { -// System.out.println("开启流量检测失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -// } else { -// System.out.println("开启流量检测成功"); -// } -// Thread.sleep(20000); -// hCNetSDK.NET_DVR_StopNetworkFlowTest(FlowHandle); -// } -// -// //录像起止时间查询 -// public static void searchRecordTime(int iUserID) { -// HCNetSDK.NET_DVR_RECORD_TIME_SPAN_INQUIRY struRecInq = new HCNetSDK.NET_DVR_RECORD_TIME_SPAN_INQUIRY(); -// struRecInq.read(); -// struRecInq.dwSize = struRecInq.size(); -// struRecInq.byType = 0; -// struRecInq.write(); -// HCNetSDK.NET_DVR_RECORD_TIME_SPAN struRecSpan = new HCNetSDK.NET_DVR_RECORD_TIME_SPAN(); -// //通道号说明:一般IPC/IPD通道号为1,32路以及以下路数的NVR的IP通道通道号从33开始,64路及以上路数的NVR的IP通道通道号从1开始。 -// if (hCNetSDK.NET_DVR_InquiryRecordTimeSpan(iUserID, 35, struRecInq, struRecSpan) == false) { -// System.out.println("录像起止时间查询失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -// } else { -// System.out.println("录像起止时间查询成功"); -// struRecSpan.read(); -// System.out.println("开启时间:" + "年:" + struRecSpan.strBeginTime.dwYear + "\n"); -// System.out.println("开启时间:" + "月:" + struRecSpan.strBeginTime.dwMonth + "\n"); -// System.out.println("开启时间:" + "日:" + struRecSpan.strBeginTime.dwDay + "\n"); -// System.out.println("开启时间:" + "时:" + struRecSpan.strBeginTime.dwHour + "\n"); -// System.out.println("停止时间:" + "年:" + struRecSpan.strEndTime.dwYear + "\n"); -// System.out.println("停止时间:" + "月:" + struRecSpan.strEndTime.dwMonth + "\n"); -// System.out.println("停止时间:" + "日:" + struRecSpan.strEndTime.dwDay + "\n"); -// System.out.println("停止时间:" + "时:" + struRecSpan.strEndTime.dwHour + "\n"); -// } -// } -// -// //月历录像查询 -// public static void getRecMonth(int iUserID) { -// HCNetSDK.NET_DVR_MRD_SEARCH_PARAM struMrdSeaParam = new HCNetSDK.NET_DVR_MRD_SEARCH_PARAM(); -// struMrdSeaParam.read(); -// struMrdSeaParam.dwSize = struMrdSeaParam.size(); -// struMrdSeaParam.wYear = 2021; -// struMrdSeaParam.byMonth = 1; -// //通道号说明:一般IPC/IPD通道号为1,32路以及以下路数的NVR的IP通道通道号从33开始,64路及以上路数的NVR的IP通道通道号从1开始。 -// struMrdSeaParam.struStreamInfo.dwChannel = 33; -// struMrdSeaParam.write(); -// HCNetSDK.NET_DVR_MRD_SEARCH_RESULT struMrdSeaResu = new HCNetSDK.NET_DVR_MRD_SEARCH_RESULT(); -// struMrdSeaResu.read(); -// struMrdSeaResu.dwSize = struMrdSeaResu.size(); -// struMrdSeaResu.write(); -// IntByReference list = new IntByReference(0); -// boolean b_GetResult = hCNetSDK.NET_DVR_GetDeviceConfig(iUserID, HCNetSDK.NET_DVR_GET_MONTHLY_RECORD_DISTRIBUTION, 0, struMrdSeaParam.getPointer(), -// struMrdSeaParam.size(), list.getPointer(), struMrdSeaResu.getPointer(), struMrdSeaResu.size()); -// if (b_GetResult == false) { -// System.out.println("月历录像查询失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -// } else { -// struMrdSeaResu.read(); -// for (int i = 0; i <= 32; i++) { -// int day = i + 1; -// System.out.println("" + day + "号是否录像文件" + struMrdSeaResu.byRecordDistribution[i]); -// } -// } -// } -// -// //球机GIS信息获取 -// public static void getGisInfo(int iUserID) { -// HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG(); -// HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO(); -// struStdCfg.read(); -// IntByReference lchannel = new IntByReference(1); -// struStdCfg.lpCondBuffer = lchannel.getPointer(); -// struStdCfg.dwCondSize = 4; -// struStdCfg.lpOutBuffer = struGisInfo.getPointer(); -// struStdCfg.dwOutSize = struGisInfo.size(); -// struStdCfg.write();//设置前之前要write() -// boolean getSTDConfig = hCNetSDK.NET_DVR_GetSTDConfig(iUserID, HCNetSDK.NET_DVR_GET_GISINFO, struStdCfg); -// if (getSTDConfig == false) { -// System.out.println("查询GIS信息失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -// } else { -// struGisInfo.read(); -// System.out.println("查询成功\n"); -// System.out.println(struGisInfo.struPtzPos.fPanPos + "\n"); -// System.out.println(struGisInfo.struPtzPos.fTiltPos + "\n"); -// System.out.println(struGisInfo.struPtzPos.fZoomPos + "\n"); -// System.out.println(struGisInfo.fHorizontalValue); -// System.out.println(struGisInfo.fVerticalValue); -// } -// -// } -// -// //球机PTZ参数获取设置 -// public static void setPTZcfg(int iUserID) { -// HCNetSDK.NET_DVR_PTZPOS struPtTZPos = new HCNetSDK.NET_DVR_PTZPOS(); -// IntByReference pUsers = new IntByReference(1); -// boolean b_GetPTZ = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_PTZPOS, 1, struPtTZPos.getPointer(), struPtTZPos.size(), pUsers); -// if (b_GetPTZ == false) { -// System.out.println("获取PTZ坐标信息失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -// } else { -// struPtTZPos.read(); -// int wPanPos = Integer.parseInt(Integer.toHexString(struPtTZPos.wPanPos).trim()); -// float WPanPos = wPanPos * 0.1f; -// int wTiltPos = Integer.parseInt(Integer.toHexString(struPtTZPos.wTiltPos).trim()); -// float WTiltPos = wTiltPos * 0.1f; -// int wZoomPos = Integer.parseInt(Integer.toHexString(struPtTZPos.wZoomPos).trim()); -// float WZoomPos = wZoomPos * 0.1f; -// System.out.println("P参数:" + WPanPos + "\n"); -// System.out.println("T参数:" + wTiltPos + "\n"); -// System.out.println("Z参数:" + wZoomPos + "\n"); -// } -//// struPtTZPos.wAction = 2; -// //本结构体中的wAction参数是设置时的操作类型,因此获取时该参数无效。实际显示的PTZ值是获取到的十六进制值的十分之一, -// // 如获取的水平参数P的值是0x1750,实际显示的P值为175度;获取到的垂直参数T的值是0x0789,实际显示的T值为78.9度,如果T未负值,获取的值减去360 -// // 获取到的变倍参数Z的值是0x1100,实际显示的Z值为110倍。 -//// String pHex="13669"; -//// int pInter=Integer.parseInt(pHex); -//// short pInter = 13669; -//// System.out.println(pInter); -//// struPtTZPos.wPanPos = (short) pInter; -//// struPtTZPos.write(); -//// boolean b_SetPTZ = hCNetSDK.NET_DVR_SetDVRConfig(iUserID, HCNetSDK.NET_DVR_SET_PTZPOS, 1, struPtTZPos.getPointer(), struPtTZPos.size()); -//// if (b_GetPTZ == false) { -//// System.out.println("设置PTZ坐标信息失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -//// } else { -//// -//// System.out.println("设置PTZ成功"); -//// } -// -// } -// -// //设置云台锁定信息 -// public static void setPTZLOCKCFG(int iUserID) { -// HCNetSDK.NET_DVR_PTZ_LOCKCFG struPtzLockCfg = new HCNetSDK.NET_DVR_PTZ_LOCKCFG(); -// struPtzLockCfg.dwSize = struPtzLockCfg.size(); -// Pointer pStrPtzLockCfg = struPtzLockCfg.getPointer(); -// NativeLong lChannel = new NativeLong(1); -// IntByReference pInt = new IntByReference(0); -// boolean b_GetPtzLockCfg = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_PTZLOCKCFG, lChannel.intValue(), -// pStrPtzLockCfg, struPtzLockCfg.size(), pInt); -// if (b_GetPtzLockCfg == false) { -// System.out.println("获取云台锁定信息失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -// } -// struPtzLockCfg.read(); -// System.out.println("通道号:" + lChannel); -// System.out.println("云台锁定控制状态为:" + struPtzLockCfg.byWorkMode); -// -// struPtzLockCfg.read(); -// struPtzLockCfg.byWorkMode = 1; //0- 解锁,1- 锁定 -// struPtzLockCfg.write(); -// boolean b_SetPtzLockCfg = hCNetSDK.NET_DVR_SetDVRConfig(iUserID, HCNetSDK.NET_DVR_SET_PTZLOCKCFG, lChannel.intValue(), -// pStrPtzLockCfg, struPtzLockCfg.size()); -// if (b_SetPtzLockCfg == false) { -// System.out.println("设置云台锁定信息失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -// } else { -// System.out.println("设置云台锁定信息成功"); -// System.out.println("云台锁定控制状态当前为:" + struPtzLockCfg.byWorkMode); -// } -// } -// -//// public static void PTZControlOther(int iUserID){ -//// boolean b_ptzcontrol=hCNetSDK.NET_DVR_PTZControl_Other(iUserID,1,HCNetSDK.TILT_UP,0); -//// -//// if( b_ptzcontrol==false){ -//// System.out.println("云台向上转动失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -//// }else{ -//// System.out.println("设置向上转动成功"); -//// } -// -// // } -// -// //获取(设置)前端参数(扩展) -// public static void getCameraPara(int iUserID) { -// HCNetSDK.NET_DVR_CAMERAPARAMCFG_EX struCameraParam = new HCNetSDK.NET_DVR_CAMERAPARAMCFG_EX(); -// Pointer pstruCameraParam = struCameraParam.getPointer(); -// IntByReference ibrBytesReturned = new IntByReference(0); -// boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_CCDPARAMCFG_EX, 1, pstruCameraParam, struCameraParam.size(), ibrBytesReturned); -// if (!b_GetCameraParam) { -// System.out.println("获取前端参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -// } -// struCameraParam.read(); -// System.out.println("是否开启旋转:" + struCameraParam.struCorridorMode.byEnableCorridorMode); -// -// struCameraParam.struCorridorMode.byEnableCorridorMode = 1; -// struCameraParam.write(); -// boolean b_SetCameraParam = hCNetSDK.NET_DVR_SetDVRConfig(iUserID, HCNetSDK.NET_DVR_SET_CCDPARAMCFG_EX, 1, pstruCameraParam, struCameraParam.size()); -// if (!b_SetCameraParam) { -// System.out.println("设置前端参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -// } -// struCameraParam.read(); -// System.out.println("设置成功"); -// } -// -// //获取快球聚焦模式信息。 -// public static void getFocusMode(int iUserID) { -// HCNetSDK.NET_DVR_FOCUSMODE_CFG struFocusMode = new HCNetSDK.NET_DVR_FOCUSMODE_CFG(); -// struFocusMode.read(); -// struFocusMode.dwSize = struFocusMode.size(); -// struFocusMode.write(); -// Pointer pFocusMode = struFocusMode.getPointer(); -// IntByReference ibrBytesReturned = new IntByReference(0); -// boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_FOCUSMODECFG, 1, pFocusMode, struFocusMode.size(), ibrBytesReturned); -// if (!b_GetCameraParam) { -// System.out.println("获取快球聚焦模式失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -// } -// struFocusMode.read(); -// System.out.println("聚焦模式:" + struFocusMode.byFocusMode); -// struFocusMode.byFocusMode = 1; -// struFocusMode.byFocusDefinitionDisplay = 1; -// struFocusMode.byFocusSpeedLevel = 3; -// struFocusMode.write(); -// boolean b_SetCameraParam = hCNetSDK.NET_DVR_SetDVRConfig(iUserID, HCNetSDK.NET_DVR_SET_FOCUSMODECFG, 1, pFocusMode, struFocusMode.size()); -// if (!b_SetCameraParam) { -// System.out.println("设置快球聚焦模式失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -// } -// struFocusMode.read(); -// System.out.println("设置成功"); -// } -// -// //获取IP通道 -// public static void getIPChannelInfo(int iUserID) throws UnsupportedEncodingException { -// IntByReference ibrBytesReturned = new IntByReference(0);//获取IP接入配置参数 -// HCNetSDK.NET_DVR_IPPARACFG_V40 m_strIpparaCfg = new HCNetSDK.NET_DVR_IPPARACFG_V40(); -// m_strIpparaCfg.write(); -// //lpIpParaConfig 接收数据的缓冲指针 -// Pointer lpIpParaConfig = m_strIpparaCfg.getPointer(); -// boolean bRet = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_IPPARACFG_V40, 0, lpIpParaConfig, m_strIpparaCfg.size(), ibrBytesReturned); -// m_strIpparaCfg.read(); -// System.out.println("起始数字通道号:" + m_strIpparaCfg.dwStartDChan); -// -// for (int iChannum = 0; iChannum < m_strIpparaCfg.dwDChanNum; iChannum++) { -// int channum = iChannum + m_strIpparaCfg.dwStartDChan; -// HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40(); -// strPicCfg.dwSize = strPicCfg.size(); -// strPicCfg.write(); -// Pointer pStrPicCfg = strPicCfg.getPointer(); -// NativeLong lChannel = new NativeLong(channum); -// IntByReference pInt = new IntByReference(0); -// boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(), -// pStrPicCfg, strPicCfg.size(), pInt); -//// if (b_GetPicCfg == false) { -//// System.out.println("获取图像参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -//// } -// strPicCfg.read(); -// m_strIpparaCfg.struStreamMode[iChannum].read(); -// if (m_strIpparaCfg.struStreamMode[iChannum].byGetStreamType == 0) { -// m_strIpparaCfg.struStreamMode[iChannum].uGetStream.setType(HCNetSDK.NET_DVR_IPCHANINFO.class); -// m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.read(); -// -// System.out.println("--------------第" + (iChannum + 1) + "个通道------------------"); -// int channel = m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPID + m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPIDHigh * 256; -// System.out.println("channel:" + channel); -// if (channel > 0) { -// System.out.println("ip: " + new String(m_strIpparaCfg.struIPDevInfo[channel - 1].struIP.sIpV4).trim()); -// } -// System.out.println("name: " + new String(strPicCfg.sChanName, "GBK").trim()); -// if (m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byEnable == 1) { -// System.out.println("IP通道" + channum + "在线"); -// -// } else { -// -// System.out.println("IP通道" + channum + "不在线"); -// -// } -// } -// } -// } -// -// //定时巡检设备 -// public static void regularInspection() { -// HCNetSDK.NET_DVR_CHECK_DEV_STATE struCheckStatus = new HCNetSDK.NET_DVR_CHECK_DEV_STATE(); -// struCheckStatus.read(); -// struCheckStatus.dwTimeout = 1000; //定时检测设备工作状态,单位:ms,0表示使用默认值(30000),最小值为1000 -// if (workStateCb == null) { -// workStateCb = new dev_work_state_cb(); -// } -// struCheckStatus.fnStateCB = workStateCb; -// struCheckStatus.write(); -// boolean b_state = hCNetSDK.NET_DVR_StartGetDevState(struCheckStatus); -// if (!b_state) { -// System.out.println("定时巡检设备状态失败:" + hCNetSDK.NET_DVR_GetLastError()); -// } -// } -// -// //获取高精度PTZ绝对位置配置,一般热成像设备支持 -// public static void getPTZAbsoluteEx(int iUserID) { -// HCNetSDK.NET_DVR_STD_CONFIG struSTDcfg = new HCNetSDK.NET_DVR_STD_CONFIG(); -// HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG struPTZ = new HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG(); -// struSTDcfg.read(); -// IntByReference channel = new IntByReference(1); -// struSTDcfg.lpCondBuffer = channel.getPointer(); -// struSTDcfg.dwCondSize = 4; -// struSTDcfg.lpOutBuffer = struPTZ.getPointer(); -// struSTDcfg.dwOutSize = struPTZ.size(); -// struSTDcfg.lpInBuffer = Pointer.NULL; -// struSTDcfg.dwInSize = 0; -// struSTDcfg.write(); -// boolean bGetPTZ = hCNetSDK.NET_DVR_GetSTDConfig(iUserID, HCNetSDK.NET_DVR_GET_PTZABSOLUTEEX, struSTDcfg); -// if (bGetPTZ == false) { -// System.out.println("获取PTZ参数错误,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -// return; -// } -// struPTZ.read(); -// System.out.println("焦距范围:" + struPTZ.dwFocalLen); -// System.out.println("聚焦参数:" + struPTZ.struPTZCtrl.dwFocus); -// return; -// } -// -// //获取GB28181参数 -// public static void getGB28181Info(int iUserID) { -// -// HCNetSDK.NET_DVR_STREAM_INFO streamInfo = new HCNetSDK.NET_DVR_STREAM_INFO(); -// streamInfo.read(); -// streamInfo.dwSize = streamInfo.size(); //设置结构体大小 -// streamInfo.dwChannel = 1; //设置通道 -// streamInfo.write(); -// Pointer lpInBuffer = streamInfo.getPointer(); -// HCNetSDK.NET_DVR_GBT28181_CHANINFO_CFG gbt28181ChaninfoCfg = new HCNetSDK.NET_DVR_GBT28181_CHANINFO_CFG(); -// gbt28181ChaninfoCfg.read(); -// gbt28181ChaninfoCfg.dwSize = gbt28181ChaninfoCfg.size(); -// gbt28181ChaninfoCfg.write(); -// Pointer lpOutBuffer = gbt28181ChaninfoCfg.getPointer(); -// IntByReference lpBytesReturned = new IntByReference(0); -// //3251对应它的宏定义 -// boolean bRet = hCNetSDK.NET_DVR_GetDeviceConfig(iUserID, 3251, 1, lpInBuffer, -// streamInfo.size(), lpBytesReturned.getPointer(), lpOutBuffer, gbt28181ChaninfoCfg.size()); -// gbt28181ChaninfoCfg.read(); -// -// if (bRet == false) { -// System.out.println("获取失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); -// return; -// } -// } -// -// //获取码流加密信息 -// public static void getAESInfo(int iUserID) { -// HCNetSDK.NET_DVR_AES_KEY_INFO net_dvr_aes_key_info = new HCNetSDK.NET_DVR_AES_KEY_INFO(); -// net_dvr_aes_key_info.read(); -// Pointer pnet_dvr_aes_key_info = net_dvr_aes_key_info.getPointer(); -// IntByReference pInt = new IntByReference(0); -// boolean b_GetCfg = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_AES_KEY, -// 0Xffffffff, pnet_dvr_aes_key_info, net_dvr_aes_key_info.size(), pInt); -// if (b_GetCfg == false) { -// System.out.println("获取码流加密失败 错误码:" + hCNetSDK.NET_DVR_GetLastError()); -// } -// System.out.println("获取码流加密信息成功"); -// -// -// } -// -// //设置球机预置点 -// public static void getCruisePoint(int iUserID) { -// HCNetSDK.NET_DVR_CRUISEPOINT_COND struCruisepointCond = new HCNetSDK.NET_DVR_CRUISEPOINT_COND(); -// struCruisepointCond.read(); -// struCruisepointCond.dwSize = struCruisepointCond.size(); -// struCruisepointCond.dwChan = 1; -// struCruisepointCond.wRouteNo = 1; -// struCruisepointCond.write(); -// -// HCNetSDK.NET_DVR_CRUISEPOINT_V50 struCruisepointV40 = new HCNetSDK.NET_DVR_CRUISEPOINT_V50(); -// struCruisepointV40.read(); -// struCruisepointV40.dwSize = struCruisepointV40.size(); -// struCruisepointV40.write(); -// -// // 错误信息列表 -// IntByReference pInt = new IntByReference(0); -// Pointer lpStatusList = pInt.getPointer(); -// -// boolean flag = hCNetSDK.NET_DVR_GetDeviceConfig(iUserID, 6714, 1, -// struCruisepointCond.getPointer(), struCruisepointCond.size(), lpStatusList, struCruisepointV40.getPointer(), struCruisepointV40.size()); -// if (flag == false) { -// int iErr = hCNetSDK.NET_DVR_GetLastError(); -// System.out.println("NET_DVR_STDXMLConfig失败,错误号:" + iErr); -// return; -// } -// struCruisepointV40.read(); -// -// -// } -// -// //抓图保存到缓冲区 -// public static void getPictoPointer(int iUserID) { -// HCNetSDK.NET_DVR_JPEGPARA jpegpara = new HCNetSDK.NET_DVR_JPEGPARA(); -// jpegpara.read(); -// jpegpara.wPicSize = 255; -// jpegpara.wPicQuality = 0; -// jpegpara.write(); -// HCNetSDK.BYTE_ARRAY byte_array = new HCNetSDK.BYTE_ARRAY(10 * 1024 * 1024); -// IntByReference ret = new IntByReference(0); -// boolean b = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(iUserID, 1, jpegpara, byte_array.getPointer(), byte_array.size(), ret); -// if (b == false) { -// System.out.println("抓图失败:" + hCNetSDK.NET_DVR_GetLastError()); -// return; -// } -// byte_array.read(); -// System.out.println("抓图成功"); -// return; -// } -// -// /** -// * 获取报警主机RS485参数 -// * -// * @param lUserID -// */ -// public static void getRs485Cfg(int lUserID) { -// HCNetSDK.NET_DVR_ALARM_RS485CFG rs485CFG = new HCNetSDK.NET_DVR_ALARM_RS485CFG(); -// rs485CFG.dwSize = rs485CFG.size(); -// Pointer pointer = rs485CFG.getPointer(); -// IntByReference pInt1 = new IntByReference(0); -// rs485CFG.write(); -// boolean bGetRs485 = hCNetSDK.NET_DVR_GetDVRConfig(lUserID, HCNetSDK.NET_DVR_GET_ALARM_RS485CFG, 3, pointer, rs485CFG.dwSize, pInt1); -// if (!bGetRs485) { -// System.out.println("获取报警主机RS485参数失败!错误号:" + hCNetSDK.NET_DVR_GetLastError()); -// return; -// } -// rs485CFG.read(); -// return; -// -// } -// -// public static void getRs485SlotInfo(int iUserID) { -// HCNetSDK.NET_DVR_ALARMHOST_RS485_SLOT_CFG strRs485SlotCFG = new HCNetSDK.NET_DVR_ALARMHOST_RS485_SLOT_CFG(); -// strRs485SlotCFG.dwSize = strRs485SlotCFG.size(); -// Pointer pRs485SlotCFG = strRs485SlotCFG.getPointer(); -// IntByReference pInt1 = new IntByReference(0); -// strRs485SlotCFG.write(); -// String Schannel = "0000000100000001"; //高2字节表示485通道号,低2字节表示槽位号,都从1开始 -// int channel = Integer.parseInt(Schannel, 2); -// boolean bRs485Slot = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_ALARMHOST_RS485_SLOT_CFG, channel, pRs485SlotCFG, strRs485SlotCFG.dwSize, pInt1); -// if (!bRs485Slot) { -// System.out.println("获取报警主机RS485槽位参数失败!错误号:" + hCNetSDK.NET_DVR_GetLastError()); -// return; -// } -// strRs485SlotCFG.read(); -// return; -// -// } -// -// -//} -// -// diff --git a/src/main/java/com/shxy/xyhkcamera/XyhkcameraApplication.java b/src/main/java/com/shxy/xyhkcamera/XyhkcameraApplication.java index ffe84e3..7820b84 100644 --- a/src/main/java/com/shxy/xyhkcamera/XyhkcameraApplication.java +++ b/src/main/java/com/shxy/xyhkcamera/XyhkcameraApplication.java @@ -4,11 +4,15 @@ import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableAsync; @SpringBootApplication @Slf4j -@MapperScan("com.shxy") +@MapperScan(basePackages = {"com.shxy.xyhkcamera.mapper"}) +@ComponentScan(basePackages = {"com.shxy"}) +@EnableAsync public class XyhkcameraApplication { public static void main(String[] args) { diff --git a/src/main/java/com/shxy/xyhkcamera/entity/DataEaifHEntity.java b/src/main/java/com/shxy/xyhkcamera/entity/DataEaifHEntity.java index 99268c5..43a9cb6 100644 --- a/src/main/java/com/shxy/xyhkcamera/entity/DataEaifHEntity.java +++ b/src/main/java/com/shxy/xyhkcamera/entity/DataEaifHEntity.java @@ -56,8 +56,28 @@ public class DataEaifHEntity implements Serializable { @TableField("mid") private Double mid; + @Override + public String toString() { + return "DataEaifHEntity{" + + "dataId=" + dataId + + ", eqmid=" + eqmid + + ", areaid=" + areaid + + ", capturetime=" + capturetime + + ", maxtemp=" + maxtemp + + ", mintemp=" + mintemp + + ", avgtemp=" + avgtemp + + ", unit=" + unit + + ", type=" + type + + ", mid=" + mid + + ", std=" + std + + ", isupload=" + isupload + + '}'; + } + @TableField("std") private Double std; private Integer isupload; + + } diff --git a/src/main/java/com/shxy/xyhkcamera/hk/HCNetSDK.java b/src/main/java/com/shxy/xyhkcamera/hk/HCNetSDK.java index d183da9..5523a05 100644 --- a/src/main/java/com/shxy/xyhkcamera/hk/HCNetSDK.java +++ b/src/main/java/com/shxy/xyhkcamera/hk/HCNetSDK.java @@ -7,13 +7,12 @@ import com.sun.jna.examples.win32.W32API.HWND; import com.sun.jna.ptr.ByteByReference; import com.sun.jna.ptr.IntByReference; import com.sun.jna.ptr.ShortByReference; -import com.sun.jna.win32.StdCallLibrary; import java.util.Arrays; import java.util.List; //SDK接口说明,HCNetSDK.dll -public interface HCNetSDK extends StdCallLibrary { +public interface HCNetSDK extends Library { /** * 通过这个常量,就可以获得这个接口的实例,从而使用接口的方法,也就是调用外部dll/so的函数 @@ -3974,7 +3973,7 @@ DVR实现巡航数据结构 public static class NET_DVR_CLIENTINFO extends Structure { public int lChannel; public int lLinkMode; - public HWND hPlayWnd; + public W32API.HWND hPlayWnd; public String sMultiCastIP; } @@ -9680,9 +9679,9 @@ DVR实现巡航数据结构 boolean NET_DVR_UnlockFileByName(int lUserID, String sUnlockFileName); - int NET_DVR_PlayBackByName(int lUserID, String sPlayBackFileName, HWND hWnd); + int NET_DVR_PlayBackByName(int lUserID, String sPlayBackFileName, W32API.HWND hWnd); - int NET_DVR_PlayBackByTime(int lUserID, int lChannel, NET_DVR_TIME lpStartTime, NET_DVR_TIME lpStopTime, HWND hWnd); + int NET_DVR_PlayBackByTime(int lUserID, int lChannel, NET_DVR_TIME lpStartTime, NET_DVR_TIME lpStopTime, W32API.HWND hWnd); int NET_DVR_PlayBackByTime_V40(int lUserID, NET_DVR_VOD_PARA pVodPara); @@ -10758,4 +10757,3 @@ interface USER32 extends W32API { int FillRect(HDC hDC, com.sun.jna.examples.win32.GDI32.RECT lprc, HANDLE hbr); } - diff --git a/src/main/java/com/shxy/xyhkcamera/hk/HKConfigEnum.java b/src/main/java/com/shxy/xyhkcamera/hk/HKConfigEnum.java new file mode 100644 index 0000000..d9db31e --- /dev/null +++ b/src/main/java/com/shxy/xyhkcamera/hk/HKConfigEnum.java @@ -0,0 +1,69 @@ +package com.shxy.xyhkcamera.hk; + +public class HKConfigEnum { + + //回调状态值 + public enum NET_SDK_CALLBACK_TYPE { + NET_SDK_CALLBACK_TYPE_STATUS(0), + NET_SDK_CALLBACK_TYPE_PROGRESS(1), + NET_SDK_CALLBACK_TYPE_DATA(2); + + private int value; + + private NET_SDK_CALLBACK_TYPE(int value) { + this.value = value; + } + + public int getValue() { + return value; + } + } + + //规则标定类型:0- 点,1- 框,2- 线 +// 数据库中1->点 2->线 3->框 + public enum BYRULECALIBTYPE { + POINT(0, 1), + FRAME(1, 3), + LINE(2, 2); + + private int value; + private int mysqlvalue; + + private BYRULECALIBTYPE(int value, int mysqlvalue) { + this.value = value; + this.mysqlvalue = mysqlvalue; + } + + public int getValue() { + return value; + } + + public int getMysqlvalue() { + return mysqlvalue; + } + } + + //测温单位: 0- 摄氏度(℃),1- 华氏度(℉),2- 开尔文(K) +// 1=>摄氏度 2=>华氏度 + public enum BYTHERMOMETRYUNIT { + SSD(0, 1), + HSD(1, 2), + KEW(2, 3); + + private int value; + private int mysqlvalue; + + private BYTHERMOMETRYUNIT(int value, int mysqlvalue) { + this.value = value; + this.mysqlvalue = mysqlvalue; + } + + public int getValue() { + return value; + } + + public int getMysqlvalue() { + return mysqlvalue; + } + } +} diff --git a/src/main/java/com/shxy/xyhkcamera/hk/HcNetSdkUtil.java b/src/main/java/com/shxy/xyhkcamera/hk/HcNetSdkUtil.java index 08114eb..8830fb9 100644 --- a/src/main/java/com/shxy/xyhkcamera/hk/HcNetSdkUtil.java +++ b/src/main/java/com/shxy/xyhkcamera/hk/HcNetSdkUtil.java @@ -17,8 +17,6 @@ import java.util.Objects; @Component public class HcNetSdkUtil { - private static final Logger logger = LoggerFactory.getLogger(HcNetSdkUtil.class); - private HCNetSDK hCNetSDK = null; static FExceptionCallBack_Imp fExceptionCallBack; diff --git a/src/main/java/com/shxy/xyhkcamera/hk/OSUtils.java b/src/main/java/com/shxy/xyhkcamera/hk/OSUtils.java index 3ba3c50..7998caf 100644 --- a/src/main/java/com/shxy/xyhkcamera/hk/OSUtils.java +++ b/src/main/java/com/shxy/xyhkcamera/hk/OSUtils.java @@ -82,7 +82,7 @@ public class OSUtils { //loadLibrary = "/usr/lib64/lib/hkliblinux64/"; //方式二:配置LD_LIBRARY_PATH环境变量加载库文件;配置/etc/ld.so.conf,加上你自己的Java工程所需要的so文件的路径 //针对方式二,无需添加前缀,程序会从linux系统的so共享库中查找libhcnetsdk.so - loadLibrary = ""; + loadLibrary = userDir+File.separator+"hkliblinux64"+ File.separator; library = "libhcnetsdk.so"; } log.info("================= Load library Path :{} ==================", loadLibrary + library); diff --git a/src/main/java/com/shxy/xyhkcamera/hk/erew.java b/src/main/java/com/shxy/xyhkcamera/hk/erew.java new file mode 100644 index 0000000..355ca33 --- /dev/null +++ b/src/main/java/com/shxy/xyhkcamera/hk/erew.java @@ -0,0 +1,4 @@ +package com.shxy.xyhkcamera.hk; + +public enum erew { +} diff --git a/src/main/java/com/shxy/xyhkcamera/interfacesss/Testint.java b/src/main/java/com/shxy/xyhkcamera/interfacesss/Testint.java new file mode 100644 index 0000000..3c080d8 --- /dev/null +++ b/src/main/java/com/shxy/xyhkcamera/interfacesss/Testint.java @@ -0,0 +1,18 @@ +package com.shxy.xyhkcamera.interfacesss; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.shxy.xyhkcamera.entity.DataEaifHEntity; + +/** + *

+ * 红外区域测温数据表 服务类 + *

+ * + * @author jingjing + * @since 2024-05-20 + */ +public interface Testint{ + + void test(DataEaifHEntity entity); + +} diff --git a/src/main/java/com/shxy/xyhkcamera/interfacesss/Testintimpl.java b/src/main/java/com/shxy/xyhkcamera/interfacesss/Testintimpl.java new file mode 100644 index 0000000..25085a3 --- /dev/null +++ b/src/main/java/com/shxy/xyhkcamera/interfacesss/Testintimpl.java @@ -0,0 +1,16 @@ +package com.shxy.xyhkcamera.interfacesss; + +import com.shxy.xyhkcamera.entity.DataEaifHEntity; +import com.shxy.xyhkcamera.service.DataEaifHService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class Testintimpl implements Testint { + @Autowired + DataEaifHService dataEaifHService; + @Override + public void test(DataEaifHEntity entity) { + dataEaifHService.save(entity); + } +} diff --git a/src/main/java/com/shxy/xyhkcamera/schedule/ScheduledTask.java b/src/main/java/com/shxy/xyhkcamera/schedule/ScheduledTask.java index d4f3843..61eac94 100644 --- a/src/main/java/com/shxy/xyhkcamera/schedule/ScheduledTask.java +++ b/src/main/java/com/shxy/xyhkcamera/schedule/ScheduledTask.java @@ -1,6 +1,7 @@ package com.shxy.xyhkcamera.schedule; import com.shxy.xyhkcamera.service.TempMeasureService; +import com.shxy.xyhkcamera.service.impl.TempMeasureServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/src/main/java/com/shxy/xyhkcamera/service/AsyncService.java b/src/main/java/com/shxy/xyhkcamera/service/AsyncService.java new file mode 100644 index 0000000..d728991 --- /dev/null +++ b/src/main/java/com/shxy/xyhkcamera/service/AsyncService.java @@ -0,0 +1,19 @@ +package com.shxy.xyhkcamera.service; + +import com.shxy.xyhkcamera.entity.DataEaifHEntity; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +@Service +public class AsyncService { + + @Autowired + DataEaifHService dataEaifHService; + + @Async("syncExecutorPool") + public void executeAsyncTask(DataEaifHEntity eaifHEntity) { + // 异步执行的任务 + dataEaifHService.save(eaifHEntity); + } +} diff --git a/src/main/java/com/shxy/xyhkcamera/service/DataEaifHService.java b/src/main/java/com/shxy/xyhkcamera/service/DataEaifHService.java index 2c0fe3d..0a7537c 100644 --- a/src/main/java/com/shxy/xyhkcamera/service/DataEaifHService.java +++ b/src/main/java/com/shxy/xyhkcamera/service/DataEaifHService.java @@ -2,6 +2,7 @@ package com.shxy.xyhkcamera.service; import com.shxy.xyhkcamera.entity.DataEaifHEntity; import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.stereotype.Service; /** *

@@ -11,6 +12,7 @@ import com.baomidou.mybatisplus.extension.service.IService; * @author jingjing * @since 2024-05-20 */ +@Service public interface DataEaifHService extends IService { } diff --git a/src/main/java/com/shxy/xyhkcamera/service/impl/TempMeasureServiceImpl.java b/src/main/java/com/shxy/xyhkcamera/service/impl/TempMeasureServiceImpl.java index ed57209..7dfabfc 100644 --- a/src/main/java/com/shxy/xyhkcamera/service/impl/TempMeasureServiceImpl.java +++ b/src/main/java/com/shxy/xyhkcamera/service/impl/TempMeasureServiceImpl.java @@ -1,29 +1,269 @@ package com.shxy.xyhkcamera.service.impl; +import com.alibaba.druid.sql.visitor.functions.If; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.shxy.xyhkcamera.entity.ModevEaifEntity; +import com.shxy.xyhkcamera.entity.DataEaifHEntity; import com.shxy.xyhkcamera.entity.ModevEntity; -import com.shxy.xyhkcamera.service.ModevEaifService; +import com.shxy.xyhkcamera.hk.HCNetSDK; +import com.shxy.xyhkcamera.hk.HKConfigEnum; +import com.shxy.xyhkcamera.hk.HcNetSdkUtil; +import com.shxy.xyhkcamera.interfacesss.Testint; +import com.shxy.xyhkcamera.interfacesss.Testintimpl; +import com.shxy.xyhkcamera.mapper.DataEaifHMapper; +import com.shxy.xyhkcamera.service.AsyncService; +import com.shxy.xyhkcamera.service.DataEaifHService; import com.shxy.xyhkcamera.service.ModevService; import com.shxy.xyhkcamera.service.TempMeasureService; +import com.shxy.xyhkcamera.utils.CommonUtil; +import com.sun.jna.Pointer; +import com.sun.jna.ptr.IntByReference; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; -import java.sql.Wrapper; +import java.math.BigDecimal; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.time.LocalDateTime; +import java.util.Date; import java.util.List; + @Service @Slf4j public class TempMeasureServiceImpl implements TempMeasureService { @Autowired - ModevServiceImp modevService; + ModevService modevService; + @Autowired + DataEaifHService dataEaifHService; + @Autowired + DataEaifHMapper dataEaifHMapper; + @Autowired + HcNetSdkUtil hcNetSdkUtil; + @Autowired + CommonUtil commonUtil; + + @Autowired + AsyncService asyncService; +// @Autowired +// Testint testint; + + /** + * 海康用户名 + */ + @Value("${hkconfig.user}") + private String user; + /** + * 海康密码 + */ + @Value("${hkconfig.password}") + private String password; + private int handle = -1; + private int test = 0; + private Connection conn; + @Override public void measure() { -// hcNetSdkUtil.createSDKInstance(); -// List list = modevService.list(Wrappers.lambdaQuery(ModevEntity.class).eq(ModevEntity::getModevtid, 9)); + + hcNetSdkUtil.init(); + HCNetSDK instance = hcNetSdkUtil.createSDKInstance(); + List list = modevService.list(Wrappers.lambdaQuery(ModevEntity.class).eq(ModevEntity::getModevtid, 9)); + + + if (CollectionUtils.isNotEmpty(list)) { +// for (int i = 0; i < list.size(); i++) { + for (int i = 0; i < 1; i++) { +// List list1 = dataEaifHService.list(Wrappers.lambdaQuery(DataEaifHEntity.class).eq(DataEaifHEntity::getDataId, 12891)); +// DataEaifHEntity entitys = new DataEaifHEntity(); +// entitys.setEqmid(384); +// entitys.setMaxtemp((double) 0); +// entitys.setAreaid(1); +// entitys.setCapturetime(LocalDateTime.now()); +// entitys.setMintemp((double) 0); +// entitys.setAvgtemp((double) 0); +// entitys.setType((byte) HKConfigEnum.BYRULECALIBTYPE.POINT.getMysqlvalue()); +// entitys.setMid(Double.valueOf(0)); +// dataEaifHService.save(entitys); + +// ModevEntity entitys = new ModevEntity(); +// entitys.setModevtid(1919); +// entitys.setZsbid(1); +// entitys.setIedid(1); +// entitys.setAddress(12112); +// modevService.save(entitys); + + ModevEntity modevEntity = list.get(i); + Integer id = modevEntity.getId(); + String ip = modevEntity.getIp(); + String port = modevEntity.getPort(); +// Short aShort = Short.valueOf(port); +// int admin = hcNetSdkUtil.login_V40(ip, aShort, user, password); + int admin = hcNetSdkUtil.login_V40("192.168.1.64", (short) 8000, user, password); + if (admin != -1) { + log.info("登录成功 " + "IP:" + ip + " " + port); + HCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND cond = new HCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND(); + cond.read(); + cond.dwSize = cond.size(); + cond.byRuleID = 1; + cond.dwChan = 2; + cond.wInterval = 0; + cond.write(); + HCNetSDK.FRemoteConfigCallBack cbStateCallBack = new HCNetSDK.FRemoteConfigCallBack() { + @Override + public void invoke(int dwType, Pointer lpBuffer, int dwBufLen, Pointer pUserData) { +// log.info("111111111" + Integer.toHexString(dwType)); +// new Thread(new Runnable() { +// @Override +// public void run() { +// log.info("3333333" + Integer.toHexString(dwType)); +// DataEaifHEntity entitys = new DataEaifHEntity(); +// entitys.setEqmid(384); +// entitys.setMaxtemp((double) 0); +// entitys.setAreaid(1); +// entitys.setCapturetime(LocalDateTime.now()); +// entitys.setMintemp((double) 0); +// entitys.setAvgtemp((double) 0); +// entitys.setType((byte) HKConfigEnum.BYRULECALIBTYPE.POINT.getMysqlvalue()); +// entitys.setMid(Double.valueOf(0)); +// dataEaifHService.save(entitys); +// log.info("222222222222222" + Integer.toHexString(dwType)); +// } +// }).start(); + + test++; + log.info("长连接返回: dwType:" + Integer.toHexString(dwType)); + if (dwType == HKConfigEnum.NET_SDK_CALLBACK_TYPE.NET_SDK_CALLBACK_TYPE_DATA.getValue()) { + HCNetSDK.NET_DVR_THERMOMETRY_UPLOAD data = new HCNetSDK.NET_DVR_THERMOMETRY_UPLOAD(); + data.write(); + Pointer pointer = data.getPointer(); + pointer.write(0, lpBuffer.getByteArray(0, data.size()), 0, data.size()); + data.read(); + log.info("返回的数据:" + data.toString()); + log.info("开始数据整理"); + byte byRuleCalibType = data.byRuleCalibType; + byte byThermometryUnit = data.byThermometryUnit; + DataEaifHEntity entity = new DataEaifHEntity(); + entity.setEqmid(id); + entity.setAreaid(1); + if (byThermometryUnit == HKConfigEnum.BYTHERMOMETRYUNIT.SSD.getValue()) { + entity.setUnit((byte) HKConfigEnum.BYTHERMOMETRYUNIT.SSD.getMysqlvalue()); + } else if (byThermometryUnit == HKConfigEnum.BYTHERMOMETRYUNIT.HSD.getValue()) { + entity.setUnit((byte) HKConfigEnum.BYTHERMOMETRYUNIT.HSD.getMysqlvalue()); + } else if (byThermometryUnit == HKConfigEnum.BYTHERMOMETRYUNIT.KEW.getValue()) { + entity.setUnit((byte) HKConfigEnum.BYTHERMOMETRYUNIT.KEW.getMysqlvalue()); + } + log.info("数据整理1"); + //数据库中1->点2->线3->框 + if (byRuleCalibType == HKConfigEnum.BYRULECALIBTYPE.POINT.getValue()) { + float fTemperature = data.struPointThermCfg.fTemperature; + double maxtemp = new BigDecimal(fTemperature).setScale(4, BigDecimal.ROUND_DOWN).doubleValue(); + entity.setMaxtemp(maxtemp); + entity.setMintemp(maxtemp); + entity.setAvgtemp(maxtemp); + entity.setType((byte) HKConfigEnum.BYRULECALIBTYPE.POINT.getMysqlvalue()); + entity.setMid(Double.valueOf(0)); + } else if (byRuleCalibType == HKConfigEnum.BYRULECALIBTYPE.FRAME.getValue() || byRuleCalibType == HKConfigEnum.BYRULECALIBTYPE.LINE.getValue()) { + HCNetSDK.NET_DVR_LINEPOLYGON_THERM_CFG struLinePolygonThermCfg = data.struLinePolygonThermCfg; + float fAverageTemperature = struLinePolygonThermCfg.fAverageTemperature;//平均温度 + float fMinTemperature = struLinePolygonThermCfg.fMinTemperature; + float fMaxTemperature = struLinePolygonThermCfg.fMaxTemperature; + float fTemperatureDiff = struLinePolygonThermCfg.fTemperatureDiff; + entity.setMaxtemp(new BigDecimal(fMaxTemperature).setScale(4, BigDecimal.ROUND_DOWN).doubleValue()); + entity.setMintemp(new BigDecimal(fMinTemperature).setScale(4, BigDecimal.ROUND_DOWN).doubleValue()); + entity.setAvgtemp(new BigDecimal(fAverageTemperature).setScale(4, BigDecimal.ROUND_DOWN).doubleValue()); + entity.setMid(new BigDecimal(fTemperatureDiff).setScale(4, BigDecimal.ROUND_DOWN).doubleValue()); + if (byRuleCalibType == HKConfigEnum.BYRULECALIBTYPE.FRAME.getValue()) { + entity.setType((byte) HKConfigEnum.BYRULECALIBTYPE.FRAME.getMysqlvalue()); + } else if (byRuleCalibType == HKConfigEnum.BYRULECALIBTYPE.LINE.getValue()) { + entity.setType((byte) HKConfigEnum.BYRULECALIBTYPE.LINE.getMysqlvalue()); + } + } + log.info("数据整理2"); + entity.setStd(Double.valueOf(0)); + entity.setCapturetime(LocalDateTime.now()); + log.info("开始插入"); + log.info("数据是:" + entity.toString()); + asyncService.executeAsyncTask(entity); +// Testintimpl testintimpl = new Testintimpl(); +// testintimpl.test(entity); + + +// String sql = "INSERT INTO data_eaif_h(eqmid,areaid,capturetime,maxtemp,mintemp,avgtemp,unit,type,mid,std) values('" + 666 + "','1','" + new Date() + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "','" + 1 + "')"; +// System.out.println(sql); +// help.getConnection(); +// int ret = help.excuteUpdate(sql); +// log.info("啦啦啦" + ret); +// try { +// conn.close(); +// } catch (SQLException throwables) { +// throwables.printStackTrace(); +// } +// if (test == 1) { +// DataEaifHEntity entitys = new DataEaifHEntity(); +// entitys.setEqmid(384); +// entitys.setMaxtemp((double) 0); +// entitys.setAreaid(1); +// entitys.setCapturetime(LocalDateTime.now()); +// entitys.setMintemp((double) 0); +// entitys.setAvgtemp((double) 0); +// entitys.setType((byte) HKConfigEnum.BYRULECALIBTYPE.POINT.getMysqlvalue()); +// entitys.setMid(Double.valueOf(0)); +// dataEaifHService.save(entitys); +//// +//// ModevEntity entitys = new ModevEntity(); +//// entitys.setModevtid(1919); +//// entitys.setZsbid(1); +//// entitys.setIedid(1); +//// entitys.setAddress(12112); +//// modevService.save(entitys); +// } + + if (handle != -1) { + log.info("开始退出"); + instance.NET_DVR_StopRemoteConfig(handle); + instance.NET_DVR_Logout(admin); + } + } else { + if (handle != -1) { + instance.NET_DVR_StopRemoteConfig(handle); + instance.NET_DVR_Logout(admin); + } + } + } + }; + //NET_DVR_GET_REALTIME_THERMOMETRY 实时温度检测 NET_DVR_GET_MANUALTHERM_INFO 手动测温实时获取 + handle = instance.NET_DVR_StartRemoteConfig(admin, HCNetSDK.NET_DVR_GET_REALTIME_THERMOMETRY, cond.getPointer(), cond.size(), cbStateCallBack, null); + if (handle < 0) { + int j = instance.NET_DVR_GetLastError(); + IntByReference intByReference = new IntByReference(j); + log.error("长连接连接失败 " + "错误码:" + j + " 错误信息:" + instance.NET_DVR_GetErrorMsg(intByReference)); + } else { + log.info("长连接连接成功!!!"); + } + +// try { +// Thread.sleep(5000); +// } catch (InterruptedException e) { +// e.printStackTrace(); + +// } + } else { + log.error("登录失败 " + "IP:" + ip + " " + port); + } + } + } else { + log.info("尚未配置红外设备!!!"); + } } + + + } diff --git a/src/main/java/com/shxy/xyhkcamera/utils/CommonUtil.java b/src/main/java/com/shxy/xyhkcamera/utils/CommonUtil.java index e656452..fdee9b5 100644 --- a/src/main/java/com/shxy/xyhkcamera/utils/CommonUtil.java +++ b/src/main/java/com/shxy/xyhkcamera/utils/CommonUtil.java @@ -2,10 +2,17 @@ package com.shxy.xyhkcamera.utils; +import com.shxy.xyhkcamera.entity.DataEaifHEntity; +import com.shxy.xyhkcamera.service.DataEaifHService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + import java.io.*; +@Component public class CommonUtil { + //SDK时间解析 public static String parseTime(int time) { int year = (time >> 26) + 2000; diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index 7989f5a..4a23664 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -1,7 +1,7 @@ # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 - port: 8095 + port: 8096 servlet: # 应用的访问路径 context-path: /xymanager @@ -18,8 +18,8 @@ server: min-spare: 100 hkconfig: - winpath: D:\\Workspace\\HK\\HCNetSDK.dll - linuxpath: ere + user: admin + password: SHxy@510 spring: task: @@ -79,16 +79,16 @@ mybatis-plus: #开启驼峰命名自动映射 map-underscore-to-camel-case: true #开启日志打印 - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl +# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # entity包路径,自行修改 type-aliases-package: com.shxy.xyhkcamera.entity #扫描mapper文件 - mapper-locations: classpath:mapper/*.xml + mapper-locations: classpath:/com/shxy/xyhkcamera/mapper/xml/*.xml # 日志配置 logging: config: classpath:log4j2.xml level: - com.shxy: trace + com.shxy: debug org.springframework: warn diff --git a/src/test/java/com/shxy/xyhkcamera/XyhkcameraApplicationTests.java b/src/test/java/com/shxy/xyhkcamera/XyhkcameraApplicationTests.java index 495639a..741acc9 100644 --- a/src/test/java/com/shxy/xyhkcamera/XyhkcameraApplicationTests.java +++ b/src/test/java/com/shxy/xyhkcamera/XyhkcameraApplicationTests.java @@ -24,7 +24,7 @@ class XyhkcameraApplicationTests { HcNetSdkUtil hcNetSdkUtil; @Autowired - ModevServiceImp modevService; + ModevService modevService; @Autowired ModevMapper modevMapper; @@ -42,47 +42,47 @@ class XyhkcameraApplicationTests { // String loadLibrary = OSUtils.getLoadLibrary(); // System.out.println(loadLibrary); - hcNetSdkUtil.init(); - HCNetSDK instance = hcNetSdkUtil.createSDKInstance(); - int admin = hcNetSdkUtil.login_V40("192.168.1.64", (short) 8000, "admin", "SHxy@510"); - if (admin != -1) { - HCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND cond = new HCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND(); - cond.read(); - cond.dwSize = cond.size(); - cond.byRuleID = 0; - cond.dwChan = 2; - cond.write(); - HCNetSDK.FRemoteConfigCallBack cbStateCallBack = new HCNetSDK.FRemoteConfigCallBack() { - @Override - public void invoke(int dwType, Pointer lpBuffer, int dwBufLen, Pointer pUserData) { - - System.out.println("报警事件类型: lCommand:" + Integer.toHexString(dwType)); - HCNetSDK.NET_DVR_THERMOMETRY_UPLOAD byte_array1 = new HCNetSDK.NET_DVR_THERMOMETRY_UPLOAD(); - byte_array1.write(); - Pointer pbyte_array1 = byte_array1.getPointer(); - pbyte_array1.write(0, lpBuffer.getByteArray(0, byte_array1.size()), 0, byte_array1.size()); - byte_array1.read(); - System.out.println("dfsdafd"); - - - System.out.println("dfsafasd"); -// instance.NET_DVR_StopRemoteConfig(handle); - - } - }; - handle = instance.NET_DVR_StartRemoteConfig(admin, HCNetSDK.NET_DVR_GET_REALTIME_THERMOMETRY, cond.getPointer(), cond.size(), cbStateCallBack, null); - if (handle < 0) { - int i = instance.NET_DVR_GetLastError(); - IntByReference intByReference = new IntByReference(i); - System.out.println(i + " " + instance.NET_DVR_GetErrorMsg(intByReference)); - } - System.out.println("fdsafa"); - } +// hcNetSdkUtil.init(); +// HCNetSDK instance = hcNetSdkUtil.createSDKInstance(); +// int admin = hcNetSdkUtil.login_V40("192.168.1.64", (short) 8000, "admin", "SHxy@510"); +// if (admin != -1) { +// HCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND cond = new HCNetSDK.NET_DVR_REALTIME_THERMOMETRY_COND(); +// cond.read(); +// cond.dwSize = cond.size(); +// cond.byRuleID = 0; +// cond.dwChan = 2; +// cond.write(); +// HCNetSDK.FRemoteConfigCallBack cbStateCallBack = new HCNetSDK.FRemoteConfigCallBack() { +// @Override +// public void invoke(int dwType, Pointer lpBuffer, int dwBufLen, Pointer pUserData) { +// +// System.out.println("报警事件类型: lCommand:" + Integer.toHexString(dwType)); +// HCNetSDK.NET_DVR_THERMOMETRY_UPLOAD byte_array1 = new HCNetSDK.NET_DVR_THERMOMETRY_UPLOAD(); +// byte_array1.write(); +// Pointer pbyte_array1 = byte_array1.getPointer(); +// pbyte_array1.write(0, lpBuffer.getByteArray(0, byte_array1.size()), 0, byte_array1.size()); +// byte_array1.read(); +// System.out.println("dfsdafd"); +// +// +// System.out.println("dfsafasd"); +//// instance.NET_DVR_StopRemoteConfig(handle); +// +// } +// }; +// handle = instance.NET_DVR_StartRemoteConfig(admin, HCNetSDK.NET_DVR_GET_REALTIME_THERMOMETRY, cond.getPointer(), cond.size(), cbStateCallBack, null); +// if (handle < 0) { +// int i = instance.NET_DVR_GetLastError(); +// IntByReference intByReference = new IntByReference(i); +// System.out.println(i + " " + instance.NET_DVR_GetErrorMsg(intByReference)); +// } +// System.out.println("fdsafa"); +// } // tempMeasureService.measure(); -// List list = modevService.list(Wrappers.lambdaQuery(ModevEntity.class).eq(ModevEntity::getModevtid, 10)); -// System.out.println(list); + List list = modevService.list(Wrappers.lambdaQuery(ModevEntity.class).eq(ModevEntity::getModevtid, 10)); + System.out.println(list); // List modevEntities = modevMapper.selectList(Wrappers.lambdaQuery(ModevEntity.class).eq(ModevEntity::getModevtid, 10)); // System.out.println(modevEntities);