package com.netsdk.demo.customize.securityCheck; import com.netsdk.demo.util.CaseMenu; import com.netsdk.lib.NativeString; import com.netsdk.lib.NetSDKLib; import com.netsdk.lib.ToolKits; import com.netsdk.lib.callback.securityCheck.PackageInformationCallBack; import com.netsdk.lib.structure.NET_IN_XRAY_ATTACH_PACKAGE_STATISTICS; import com.netsdk.lib.structure.NET_OUT_XRAY_ATTACH_PACKAGE_STATISTICS; import com.sun.jna.Memory; import com.sun.jna.Pointer; import java.io.File; import java.util.UUID; import static com.netsdk.lib.Utils.getOsPrefix; /** * @author 291189 * @version 1.0 * @description 安检机包裹检测 * @date 2021/7/1 */ public class SecurityMachinePackageDetectionDemo { /** 10.35.232.160 安检门环境 admin admin123 安检机 10.35.233.144 port 37777 admin admin123 */ private String m_strIpAddr = "10.35.232.75"; private int m_nPort = 37777; private String m_strUser = "admin"; private String m_strPassword = "admin123"; static NetSDKLib netSdk = NetSDKLib.NETSDK_INSTANCE; static NetSDKLib configApi = NetSDKLib.CONFIG_INSTANCE; // public static final NetSDKLib netSdk = NetSDKLib.NETSDK_INSTANCE; // 登陆句柄 private static NetSDKLib.LLong loginHandle = new NetSDKLib.LLong(0); // 订阅句柄 private static NetSDKLib.LLong AttachHandle = new NetSDKLib.LLong(0); //X光机包裹信息句柄 private static NetSDKLib.LLong lFindID = new NetSDKLib.LLong(0); // 设备信息扩展 private NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex(); /** * 设备断线回调 */ private static class DisconnectCallback implements NetSDKLib.fDisConnect { private static DisconnectCallback instance = new DisconnectCallback(); private DisconnectCallback() { } public static DisconnectCallback getInstance() { return instance; } public void invoke(NetSDKLib.LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) { System.out.printf("Device[%s:%d] Disconnect!\n", pchDVRIP, nDVRPort); } } /** * 设备重连回调 */ private static class HaveReconnectCallback implements NetSDKLib.fHaveReConnect { private static HaveReconnectCallback instance = new HaveReconnectCallback(); private HaveReconnectCallback() { } public static HaveReconnectCallback getInstance() { return instance; } public void invoke(NetSDKLib.LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser) { System.out.printf("Device[%s:%d] HaveReconnected!\n", pchDVRIP, nDVRPort); } } public void InitTest(){ // 初始化SDK库 netSdk.CLIENT_Init(DisconnectCallback.getInstance(), null); // 设置断线重连成功回调函数 netSdk.CLIENT_SetAutoReconnect(HaveReconnectCallback.getInstance(), null); //打开日志,可选0 NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO(); String logPath = new File(".").getAbsoluteFile().getParent() + File.separator + "sdk_log" + File.separator + "sdk.log"; setLog.bSetFilePath = 1; System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length); setLog.bSetPrintStrategy = 1; setLog.nPrintStrategy = 0; if (!netSdk.CLIENT_LogOpen(setLog)){ System.err.println("Open SDK Log Failed!!!"); } loginWithHighLevel(); } /** * 高安全登录 */ public void loginWithHighLevel() { // 输入结构体参数 NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstlnParam = new NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY() { { szIP = m_strIpAddr.getBytes(); nPort = m_nPort; szUserName = m_strUser.getBytes(); szPassword = m_strPassword.getBytes(); } }; // 输出结构体参数 NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam = new NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY(); // 写入sdk loginHandle = netSdk.CLIENT_LoginWithHighLevelSecurity(pstlnParam, pstOutParam); if (loginHandle.longValue() == 0) { System.err.printf("Login Device[%s] Port[%d]Failed. %s\n", m_strIpAddr, m_nPort, netSdk.CLIENT_GetLastError()); } else { deviceInfo = pstOutParam.stuDeviceInfo; // 获取设备信息 System.out.println("Login Success"); System.out.println("Device Address:" + m_strIpAddr); System.out.println("设备包含:" + deviceInfo.byChanNum + "个通道"); } } /** * 退出清理环境 */ public void LoginOut(){ System.out.println("End Test"); if( loginHandle.longValue() != 0) { netSdk.CLIENT_Logout(loginHandle); } System.out.println("See You..."); netSdk.CLIENT_Cleanup(); System.exit(0); } // 编码格式 public static String encode; static { String osPrefix = getOsPrefix(); if (osPrefix.toLowerCase().startsWith("win64-amd64")) { encode = "GBK"; } else if (osPrefix.toLowerCase().startsWith("linux-amd64")) { encode = "UTF-8"; } } /** * 订阅X光机包裹数量统计信息 */ public void attachPackageStatistics(){ //入参 NET_IN_XRAY_ATTACH_PACKAGE_STATISTICS inParam=new NET_IN_XRAY_ATTACH_PACKAGE_STATISTICS(); UUID uuid= UUID.randomUUID(); byte[] szUUID = inParam.szUUID; String numbers =uuid.toString(); //beda31a3-a7b5-4126-81b9-6e67402b7b0c? int i = numbers.lastIndexOf("-"); String[] split = numbers.split("-"); //UUID算法(8-4-4-16格式) numbers=split[0]+"-"+split[1]+""+split[2]+"-"+split[3]+split[4]; System.arraycopy(numbers.getBytes(), 0, szUUID, 0, numbers.getBytes().length); inParam.szUUID=szUUID; Pointer user=new Memory(1024); inParam.dwUser=user; inParam.cbNotify= PackageInformationCallBack.getInstance(); Pointer pInParam=new Memory(inParam.size()); ToolKits.SetStructDataToPointer(inParam, pInParam, 0); //出参 NET_OUT_XRAY_ATTACH_PACKAGE_STATISTICS outParm=new NET_OUT_XRAY_ATTACH_PACKAGE_STATISTICS(); Pointer pOutParam=new Memory(outParm.size()); ToolKits.SetStructDataToPointer(outParm, pOutParam, 0); AttachHandle= netSdk.CLIENT_XRayAttachPackageStatistics(loginHandle,pInParam,pOutParam,3000); if (AttachHandle.longValue() != 0) { System.out.println("CLIENT_XRayAttachPackageStatistics Success"); } else { System.out.println("CLIENT_XRayAttachPackageStatistics Failed!LastError = %s\n"+ToolKits.getErrorCode()); } } /** * 取消订阅X光机包裹数量统计信息 */ public void DetachPackageStatistics() { if (AttachHandle.longValue() != 0) { netSdk.CLIENT_XRayDetachPackageStatistics(AttachHandle); } } // 开始查找X光机包裹信息 public void StartFindXRayPkg(){ NetSDKLib.NET_IN_START_FIND_XRAY_PKG NSFXP=new NetSDKLib.NET_IN_START_FIND_XRAY_PKG(); NetSDKLib.NET_OUT_START_FIND_XRAY_PIC NOSFT=new NetSDKLib.NET_OUT_START_FIND_XRAY_PIC(); //查询结果按时间排序(1.按时间升序。2.按时间降序) NSFXP.emTimeOrder=1; //开始时间 NSFXP.stuStartTime.setTime(2021,7,1,00,00,00); /*NSFXP.stuStartTime.dwYear=2019; NSFXP.stuStartTime.dwMonth=10; NSFXP.stuStartTime.dwDay=23; NSFXP.stuStartTime.dwHour=12; NSFXP.stuStartTime.dwMinute=12; NSFXP.stuStartTime.dwSecond=12;*/ //结束时间 NSFXP.stuEndTime.setTime(2021,7,1,23,59,59); /*NSFXP.stuEndTime.dwYear=2019; NSFXP.stuEndTime.dwMonth=10; NSFXP.stuEndTime.dwDay=24; NSFXP.stuEndTime.dwHour=12; NSFXP.stuEndTime.dwMinute=12; NSFXP.stuEndTime.dwSecond=12;*/ int[] SimilarityArray={0,100}; int[] emObjTypeArray={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26}; System.arraycopy(SimilarityArray,0,NSFXP.nSimilarityRange,0,SimilarityArray.length); NSFXP.nObjTypeNum=26; System.arraycopy(emObjTypeArray,0,NSFXP.emObjType,0,NSFXP.nObjTypeNum); lFindID=netSdk.CLIENT_StartFindXRayPkg(loginHandle, NSFXP, NOSFT, 1000); if(AttachHandle.longValue()!=0){ System.out.printf("Start FindXRayPkg Success!\n 包裹总数为"+NOSFT.nTotal); }else{ System.err.printf("Start FindXRayPkg Fail.Error[%s]\n", ToolKits.getErrorCode()); } } // 查询X光机包裹的信息 public void DoFindXRayPkg(){ if(lFindID.longValue() == 0) { System.out.println("请开始查找X光机包裹信息"); return; } File picturePath= new File("./ColorOverlay/"); if (!picturePath.exists()) { picturePath.mkdirs(); } NetSDKLib.NET_IN_DO_FIND_XRAY_PKG NIODFXP = new NetSDKLib.NET_IN_DO_FIND_XRAY_PKG(); NetSDKLib.NET_OUT_DO_FIND_XRAY_PKG NODFXPG = new NetSDKLib.NET_OUT_DO_FIND_XRAY_PKG(); NetSDKLib.NET_XRAY_PKG_INFO[] NXPI = new NetSDKLib.NET_XRAY_PKG_INFO[10]; for(int i=0;i<10;i++) { NXPI[i] = new NetSDKLib.NET_XRAY_PKG_INFO(); } NIODFXP.nCount=10; NIODFXP.nOffset=10; NODFXPG.nMaxCount=10; NODFXPG.pstuXRayPkgInfo = new Memory(NXPI[0].size()*10); NODFXPG.pstuXRayPkgInfo.clear(NXPI[0].size()*10); ToolKits.SetStructArrToPointerData(NXPI, NODFXPG.pstuXRayPkgInfo); // 将数组内存拷贝给Pointer Boolean DoFind=netSdk.CLIENT_DoFindXRayPkg(lFindID, NIODFXP, NODFXPG, 3000); if(!DoFind){ System.err.printf("Do Find XRay Pkg.Error[%s]\n", ToolKits.getErrorCode()); return; } ToolKits.GetPointerDataToStructArr(NODFXPG.pstuXRayPkgInfo, NXPI); for(int j = 0; j< NODFXPG.nRetCount; j++) { System.out.println("包裹产生时间"+NXPI[j].stuTime+"\n关联的进口IPC通道号"+NXPI[j].nChannelIn+"\n关联的出口IPC通道号"+NXPI[j].nChannelOut +"\n用户名"+new String(NXPI[j].szUser).trim()+"\n需要下载的文件名"+new String(NXPI[j].stuViewInfo[0].szColorOverlayImagePath).trim()); for(int k=0;k<2;k++){ byte[] EnergyPath=NXPI[j].stuViewInfo[k].szEnergyImagePath; byte[] ColorOverlayPath=NXPI[j].stuViewInfo[k].szColorOverlayImagePath; if(NXPI[j].stuViewInfo[k].nColorOverlayImageLength !=0){ // 入参 NetSDKLib.NET_IN_DOWNLOAD_REMOTE_FILE stIn = new NetSDKLib.NET_IN_DOWNLOAD_REMOTE_FILE(); stIn.pszFileName = new NativeString(new String(ColorOverlayPath).trim()).getPointer(); stIn.pszFileDst = new NativeString(picturePath + "\\"+System.currentTimeMillis()+"ColorOverlayPath"+".jpg").getPointer(); // 存放路径 // 出参 NetSDKLib.NET_OUT_DOWNLOAD_REMOTE_FILE stOut = new NetSDKLib.NET_OUT_DOWNLOAD_REMOTE_FILE(); if(netSdk.CLIENT_DownloadRemoteFile(loginHandle, stIn, stOut, 5000)) { System.out.println("下载图片成功!"); } else { System.err.println("下载图片失败!" + ToolKits.getErrorCode()); } } } } } // 结束查询X光机包裹的信息 public void StopFindXRayPkg(){ Boolean StopFind=netSdk.CLIENT_StopFindXRayPkg(lFindID); if(StopFind){ System.out.println("Stop Find XRayPkg suceess"); } } public void RunTest() { System.out.println("Run Test"); CaseMenu menu = new CaseMenu(); menu.addItem(new CaseMenu.Item(this , "attachPackageStatistics" , "attachPackageStatistics")); menu.addItem(new CaseMenu.Item(this , "DetachPackageStatistics" , "DetachPackageStatistics")); menu.addItem((new CaseMenu.Item(this , "StartFindXRayPkg" , "StartFindXRayPkg"))); menu.addItem((new CaseMenu.Item(this , "DoFindXRayPkg" , "DoFindXRayPkg"))); menu.addItem((new CaseMenu.Item(this , "StopFindXRayPkg" , "StopFindXRayPkg"))); menu.run(); } public static void main(String[] args){ SecurityMachinePackageDetectionDemo securityMachinePackageDetectionDemo=new SecurityMachinePackageDetectionDemo(); securityMachinePackageDetectionDemo.InitTest(); securityMachinePackageDetectionDemo.RunTest(); securityMachinePackageDetectionDemo.LoginOut(); } }