package com.iailab.netsdk.demo.module; import java.io.UnsupportedEncodingException; import com.sun.jna.Memory; import com.sun.jna.ptr.IntByReference; import com.iailab.netsdk.lib.NetSDKLib; import com.iailab.netsdk.lib.NetSDKLib.*; import com.iailab.netsdk.lib.ToolKits; public class GateModule { // æŸ¥è¯¢å¥æŸ„ private static LLong m_lFindHandle = new LLong(0); /** * è®¢é˜…å®žæ—¶ä¸Šä¼ æ™ºèƒ½åˆ†æžæ•°æ® * @return */ public static LLong realLoadPic(int ChannelId, NetSDKLib.fAnalyzerDataCallBack m_AnalyzerDataCB) { /** * 说明: * é€šé“æ•°å¯ä»¥åœ¨æœ‰ç™»å½•æ˜¯è¿”å›žçš„ä¿¡æ¯ m_stDeviceInfo.byChanNum èŽ·å– * 下列仅订阅了0通é“的智能事件. */ int bNeedPicture = 1; // 是å¦éœ€è¦å›¾ç‰‡ LLong m_hAttachHandle = LoginModule.netsdk.CLIENT_RealLoadPictureEx(LoginModule.m_hLoginHandle, ChannelId, NetSDKLib.EVENT_IVS_ALL, bNeedPicture , m_AnalyzerDataCB , null , null); if( m_hAttachHandle.longValue() != 0 ) { System.out.println("CLIENT_RealLoadPictureEx Success ChannelId : \n" + ChannelId); } else { System.err.println("CLIENT_RealLoadPictureEx Failed!" + ToolKits.getErrorCodePrint()); return null; } return m_hAttachHandle; } /** * åœæ¢ä¸Šä¼ æ™ºèƒ½åˆ†æžæ•°æ®ï¼å›¾ç‰‡ */ public static void stopRealLoadPic(LLong m_hAttachHandle) { if (0 != m_hAttachHandle.longValue()) { LoginModule.netsdk.CLIENT_StopLoadPic(m_hAttachHandle); System.out.println("Stop detach IVS event"); m_hAttachHandle.setValue(0); } } ////////////////////////////////////// å¡ä¿¡æ¯çš„增ã€åˆ ã€æ”¹ã€æ¸…空 //////////////////////////////////////// /** * æ·»åŠ å¡ * @param cardNo å¡å· * @param userId 用户ID * @param cardName å¡å * @param cardPwd å¡å¯†ç * @param cardStatus å¡çŠ¶æ€ * @param cardType å¡ç±»åž‹ * @param useTimes 使用次数 * @param isFirstEnter 是å¦é¦–å¡, 1-true, 0-false * @param isValid æ˜¯å¦æœ‰æ•ˆ, 1-true, 0-false * @param startValidTime 有效开始时间 * @param endValidTime æœ‰æ•ˆç»“æŸæ—¶é—´ * @return true:æˆåŠŸ false:失败 */ public static boolean insertCard(String cardNo, String userId, String cardName, String cardPwd, int cardStatus, int cardType, int useTimes, int isFirstEnter, int isValid, String startValidTime, String endValidTime) { /** * é—¨ç¦å¡è®°å½•é›†ä¿¡æ¯ */ NET_RECORDSET_ACCESS_CTL_CARD accessCardInfo = new NET_RECORDSET_ACCESS_CTL_CARD(); // å¡å· System.arraycopy(cardNo.getBytes(), 0, accessCardInfo.szCardNo, 0, cardNo.getBytes().length); // 用户ID System.arraycopy(userId.getBytes(), 0, accessCardInfo.szUserID, 0, userId.getBytes().length); // å¡å(设备上显示的姓å) try { System.arraycopy(cardName.getBytes("GBK"), 0, accessCardInfo.szCardName, 0, cardName.getBytes("GBK").length); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } // å¡å¯†ç System.arraycopy(cardPwd.getBytes(), 0, accessCardInfo.szPsw, 0, cardPwd.getBytes().length); //-- 设置开门æƒé™ accessCardInfo.nDoorNum = 2; accessCardInfo.sznDoors[0] = 0; accessCardInfo.sznDoors[1] = 1; accessCardInfo.nTimeSectionNum = 2; // 与门数对应 accessCardInfo.sznTimeSectionNo[0] = 255; // 表示第一个门全天有效 accessCardInfo.sznTimeSectionNo[1] = 255; // 表示第二个门全天有效 // å¡çŠ¶æ€ accessCardInfo.emStatus = cardStatus; // å¡ç±»åž‹ accessCardInfo.emType = cardType; // 使用次数 accessCardInfo.nUserTime = useTimes; // 是å¦é¦–å¡ accessCardInfo.bFirstEnter = isFirstEnter; // æ˜¯å¦æœ‰æ•ˆ accessCardInfo.bIsValid = isValid; // 有效开始时间 String[] startTimes = startValidTime.split(" "); accessCardInfo.stuValidStartTime.dwYear = Integer.parseInt(startTimes[0].split("-")[0]); accessCardInfo.stuValidStartTime.dwMonth = Integer.parseInt(startTimes[0].split("-")[1]); accessCardInfo.stuValidStartTime.dwDay = Integer.parseInt(startTimes[0].split("-")[2]); accessCardInfo.stuValidStartTime.dwHour = Integer.parseInt(startTimes[1].split(":")[0]); accessCardInfo.stuValidStartTime.dwMinute = Integer.parseInt(startTimes[1].split(":")[1]); accessCardInfo.stuValidStartTime.dwSecond = Integer.parseInt(startTimes[01].split(":")[2]); // æœ‰æ•ˆç»“æŸæ—¶é—´ String[] endTimes = endValidTime.split(" "); accessCardInfo.stuValidEndTime.dwYear = Integer.parseInt(endTimes[0].split("-")[0]); accessCardInfo.stuValidEndTime.dwMonth = Integer.parseInt(endTimes[0].split("-")[1]); accessCardInfo.stuValidEndTime.dwDay = Integer.parseInt(endTimes[0].split("-")[2]); accessCardInfo.stuValidEndTime.dwHour = Integer.parseInt(endTimes[1].split(":")[0]); accessCardInfo.stuValidEndTime.dwMinute = Integer.parseInt(endTimes[1].split(":")[1]); accessCardInfo.stuValidEndTime.dwSecond = Integer.parseInt(endTimes[1].split(":")[2]); /** * 记录集æ“作 */ NET_CTRL_RECORDSET_INSERT_PARAM insert = new NET_CTRL_RECORDSET_INSERT_PARAM(); insert.stuCtrlRecordSetInfo.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; // 记录集类型 insert.stuCtrlRecordSetInfo.pBuf = accessCardInfo.getPointer(); accessCardInfo.write(); insert.write(); boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle, CtrlType.CTRLTYPE_CTRL_RECORDSET_INSERT, insert.getPointer(), 5000); insert.read(); accessCardInfo.read(); if(!bRet) { System.err.println("æ·»åŠ å¡ä¿¡æ¯å¤±è´¥." + ToolKits.getErrorCodePrint()); return false; } else { System.out.println("æ·»åŠ å¡ä¿¡æ¯æˆåŠŸ,å¡ä¿¡æ¯è®°å½•é›†ç¼–å· : " + insert.stuCtrlRecordSetResult.nRecNo); } return true; } /** * 修改å¡ä¿¡æ¯ * @param recordNo è®°å½•é›†ç¼–å· * @param cardNo å¡å· * @param userId 用户ID * @param cardName å¡å * @param cardPwd å¡å¯†ç * @param cardStatus å¡çŠ¶æ€ * @param cardType å¡ç±»åž‹ * @param useTimes 使用次数 * @param isFirstEnter 是å¦é¦–å¡, 1-true, 0-false * @param isValid æ˜¯å¦æœ‰æ•ˆ, 1-true, 0-false * @param startValidTime 有效开始时间 * @param endValidTime æœ‰æ•ˆç»“æŸæ—¶é—´ * @return true:æˆåŠŸ false:失败 */ public static boolean modifyCard(int recordNo, String cardNo, String userId, String cardName, String cardPwd, int cardStatus, int cardType, int useTimes, int isFirstEnter, int isValid, String startValidTime, String endValidTime) { /** * é—¨ç¦å¡è®°å½•é›†ä¿¡æ¯ */ NET_RECORDSET_ACCESS_CTL_CARD accessCardInfo = new NET_RECORDSET_ACCESS_CTL_CARD(); // 记录集编å·ï¼Œ 修改ã€åˆ 除å¡ä¿¡æ¯å¿…须填写 accessCardInfo.nRecNo = recordNo; // å¡å· System.arraycopy(cardNo.getBytes(), 0, accessCardInfo.szCardNo, 0, cardNo.getBytes().length); // 用户ID System.arraycopy(userId.getBytes(), 0, accessCardInfo.szUserID, 0, userId.getBytes().length); // å¡å(设备上显示的姓å) try { System.arraycopy(cardName.getBytes("GBK"), 0, accessCardInfo.szCardName, 0, cardName.getBytes("GBK").length); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } // å¡å¯†ç System.arraycopy(cardPwd.getBytes(), 0, accessCardInfo.szPsw, 0, cardPwd.getBytes().length); //-- 设置开门æƒé™ accessCardInfo.nDoorNum = 2; accessCardInfo.sznDoors[0] = 0; accessCardInfo.sznDoors[1] = 1; accessCardInfo.nTimeSectionNum = 2; // 与门数对应 accessCardInfo.sznTimeSectionNo[0] = 255; // 表示第一个门全天有效 accessCardInfo.sznTimeSectionNo[1] = 255; // 表示第二个门全天有效 // å¡çŠ¶æ€ accessCardInfo.emStatus = cardStatus; // å¡ç±»åž‹ accessCardInfo.emType = cardType; // 使用次数 accessCardInfo.nUserTime = useTimes; // 是å¦é¦–å¡ accessCardInfo.bFirstEnter = isFirstEnter; // æ˜¯å¦æœ‰æ•ˆ accessCardInfo.bIsValid = isValid; // 有效开始时间 String[] startTimes = startValidTime.split(" "); accessCardInfo.stuValidStartTime.dwYear = Integer.parseInt(startTimes[0].split("-")[0]); accessCardInfo.stuValidStartTime.dwMonth = Integer.parseInt(startTimes[0].split("-")[1]); accessCardInfo.stuValidStartTime.dwDay = Integer.parseInt(startTimes[0].split("-")[2]); accessCardInfo.stuValidStartTime.dwHour = Integer.parseInt(startTimes[1].split(":")[0]); accessCardInfo.stuValidStartTime.dwMinute = Integer.parseInt(startTimes[1].split(":")[1]); accessCardInfo.stuValidStartTime.dwSecond = Integer.parseInt(startTimes[01].split(":")[2]); // æœ‰æ•ˆç»“æŸæ—¶é—´ String[] endTimes = endValidTime.split(" "); accessCardInfo.stuValidEndTime.dwYear = Integer.parseInt(endTimes[0].split("-")[0]); accessCardInfo.stuValidEndTime.dwMonth = Integer.parseInt(endTimes[0].split("-")[1]); accessCardInfo.stuValidEndTime.dwDay = Integer.parseInt(endTimes[0].split("-")[2]); accessCardInfo.stuValidEndTime.dwHour = Integer.parseInt(endTimes[1].split(":")[0]); accessCardInfo.stuValidEndTime.dwMinute = Integer.parseInt(endTimes[1].split(":")[1]); accessCardInfo.stuValidEndTime.dwSecond = Integer.parseInt(endTimes[1].split(":")[2]); /** * 记录集æ“作 */ NET_CTRL_RECORDSET_PARAM update = new NET_CTRL_RECORDSET_PARAM(); update.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; // 记录集信æ¯ç±»åž‹ update.pBuf = accessCardInfo.getPointer(); accessCardInfo.write(); update.write(); boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle, CtrlType.CTRLTYPE_CTRL_RECORDSET_UPDATE, update.getPointer(), 5000); update.read(); accessCardInfo.read(); if(!bRet) { System.err.println("修改å¡ä¿¡æ¯å¤±è´¥." + ToolKits.getErrorCodePrint()); return false; } else { System.out.println("修改å¡ä¿¡æ¯æˆåŠŸ "); } return true; } /** * åˆ é™¤å¡ä¿¡æ¯(å•ä¸ªåˆ é™¤) * @param recordNo è®°å½•é›†ç¼–å· */ public static boolean deleteCard(int recordNo) { /** * 记录集æ“作 */ NET_CTRL_RECORDSET_PARAM msg = new NET_CTRL_RECORDSET_PARAM(); msg.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; msg.pBuf = new IntByReference(recordNo).getPointer(); msg.write(); boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle, CtrlType.CTRLTYPE_CTRL_RECORDSET_REMOVE, msg.getPointer(), 5000); msg.read(); if(!bRet){ System.err.println("åˆ é™¤å¡ä¿¡æ¯å¤±è´¥." + ToolKits.getErrorCodePrint()); } else { System.out.println("åˆ é™¤å¡ä¿¡æ¯æˆåŠŸ."); } return bRet; } /** * 清除所有å¡ä¿¡æ¯ */ public static boolean clearCard() { /** * 记录集æ“作 */ NetSDKLib.NET_CTRL_RECORDSET_PARAM msg = new NetSDKLib.NET_CTRL_RECORDSET_PARAM(); msg.emType = EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; // é—¨ç¦å¡è®°å½•集信æ¯ç±»åž‹ msg.write(); boolean bRet = LoginModule.netsdk.CLIENT_ControlDevice(LoginModule.m_hLoginHandle, CtrlType.CTRLTYPE_CTRL_RECORDSET_CLEAR, msg.getPointer(), 5000); msg.read(); if(!bRet){ System.err.println("清空å¡ä¿¡æ¯å¤±è´¥." + ToolKits.getErrorCodePrint()); } else { System.out.println("清空å¡ä¿¡æ¯æˆåŠŸ."); } return bRet; } ///////////////////////////////// 人脸的增ã€åˆ ã€æ”¹ã€æ¸…空 /////////////////////////////////////// /** * æ·»åŠ äººè„¸ * @param userId 用户ID * @param memory å›¾ç‰‡ç¼“å˜ * @return */ public static boolean addFaceInfo(String userId, Memory memory) { int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_ADD; // æ·»åŠ /** * å…¥å‚ */ NET_IN_ADD_FACE_INFO stIn = new NET_IN_ADD_FACE_INFO(); // 用户ID System.arraycopy(userId.getBytes(), 0, stIn.szUserID, 0, userId.getBytes().length); // 人脸照片个数 stIn.stuFaceInfo.nFacePhoto = 1; // æ¯å¼ å›¾ç‰‡çš„å¤§å° stIn.stuFaceInfo.nFacePhotoLen[0] = (int) memory.size(); // 人脸照片数æ®,大å°ä¸è¶…过100K, å›¾ç‰‡æ ¼å¼ä¸ºjpg stIn.stuFaceInfo.pszFacePhotoArr[0].pszFacePhoto = memory; /** * å‡ºå‚ */ NET_OUT_ADD_FACE_INFO stOut = new NET_OUT_ADD_FACE_INFO(); stIn.write(); stOut.write(); boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(LoginModule.m_hLoginHandle, emType, stIn.getPointer(), stOut.getPointer(), 5000); stIn.read(); stOut.read(); if(bRet) { System.out.println("æ·»åŠ äººè„¸æˆåŠŸ!"); } else { System.err.println("æ·»åŠ äººè„¸å¤±è´¥!" + ToolKits.getErrorCodePrint()); return false; } return true; } /** * 修改人脸 * @param userId 用户ID * @param memory å›¾ç‰‡ç¼“å˜ * @return */ public static boolean modifyFaceInfo(String userId, Memory memory) { int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_UPDATE; // 修改 /** * å…¥å‚ */ NET_IN_UPDATE_FACE_INFO stIn = new NET_IN_UPDATE_FACE_INFO(); // 用户ID System.arraycopy(userId.getBytes(), 0, stIn.szUserID, 0, userId.getBytes().length); // 人脸照片个数 stIn.stuFaceInfo.nFacePhoto = 1; // æ¯å¼ å›¾ç‰‡çš„å¤§å° stIn.stuFaceInfo.nFacePhotoLen[0] = (int) memory.size(); // 人脸照片数æ®,大å°ä¸è¶…过100K, å›¾ç‰‡æ ¼å¼ä¸ºjpg stIn.stuFaceInfo.pszFacePhotoArr[0].pszFacePhoto = memory; /** * å‡ºå‚ */ NET_OUT_UPDATE_FACE_INFO stOut = new NET_OUT_UPDATE_FACE_INFO(); stIn.write(); stOut.write(); boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(LoginModule.m_hLoginHandle, emType, stIn.getPointer(), stOut.getPointer(), 5000); stIn.read(); stOut.read(); if(bRet) { System.out.println("修改人脸æˆåŠŸ!"); } else { System.err.println("修改人脸失败!" + ToolKits.getErrorCodePrint()); return false; } return true; } /** * åˆ é™¤äººè„¸(å•ä¸ªåˆ é™¤) * @param userId 用户ID */ public static boolean deleteFaceInfo(String userId) { int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_REMOVE; /** * å…¥å‚ */ NET_IN_REMOVE_FACE_INFO inRemove = new NET_IN_REMOVE_FACE_INFO(); // 用户ID System.arraycopy(userId.getBytes(), 0, inRemove.szUserID, 0, userId.getBytes().length); /** * å‡ºå‚ */ NET_OUT_REMOVE_FACE_INFO outRemove = new NET_OUT_REMOVE_FACE_INFO(); inRemove.write(); outRemove.write(); boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(LoginModule.m_hLoginHandle, emType, inRemove.getPointer(), outRemove.getPointer(), 5000); inRemove.read(); outRemove.read(); if(bRet) { System.out.println("åˆ é™¤äººè„¸æˆåŠŸ!"); } else { System.err.println("åˆ é™¤äººè„¸å¤±è´¥!" + ToolKits.getErrorCodePrint()); } return bRet; } /** * 清除所有人脸 */ public static boolean clearFaceInfo() { int emType = EM_FACEINFO_OPREATE_TYPE.EM_FACEINFO_OPREATE_CLEAR; // 清除 /** * å…¥å‚ */ NET_IN_CLEAR_FACE_INFO stIn = new NET_IN_CLEAR_FACE_INFO(); /** * å‡ºå‚ */ NET_OUT_REMOVE_FACE_INFO stOut = new NET_OUT_REMOVE_FACE_INFO(); stIn.write(); stOut.write(); boolean bRet = LoginModule.netsdk.CLIENT_FaceInfoOpreate(LoginModule.m_hLoginHandle, emType, stIn.getPointer(), stOut.getPointer(), 5000); stIn.read(); stOut.read(); if(bRet) { System.out.println("清空人脸æˆåŠŸ!"); } else { System.err.println("清空人脸失败!" + ToolKits.getErrorCodePrint()); } return bRet; } /** * 查询å¡ä¿¡æ¯ï¼ŒèŽ·å–æŸ¥è¯¢å¥æŸ„ * @param cardNo å¡å·ï¼Œä¸ºç©ºï¼ŒæŸ¥è¯¢æ‰€æœ‰çš„ * @return */ public static boolean findCard(String cardNo) { /** * 查询æ¡ä»¶ */ NetSDKLib.FIND_RECORD_ACCESSCTLCARD_CONDITION findCondition = new NetSDKLib.FIND_RECORD_ACCESSCTLCARD_CONDITION(); if(!cardNo.isEmpty()) { // å¡å·æŸ¥è¯¢æ¡ä»¶æ˜¯å¦æœ‰æ•ˆ findCondition.abCardNo = 1; // å¡å· System.arraycopy(cardNo.getBytes(), 0, findCondition.szCardNo, 0, cardNo.getBytes().length); } /** * CLIENT_FindRecord 接å£å…¥å‚ */ NetSDKLib.NET_IN_FIND_RECORD_PARAM stIn = new NetSDKLib.NET_IN_FIND_RECORD_PARAM(); stIn.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARD; if(!cardNo.isEmpty()) { stIn.pQueryCondition = findCondition.getPointer(); } /** * CLIENT_FindRecord 接å£å‡ºå‚ */ NetSDKLib.NET_OUT_FIND_RECORD_PARAM stOut = new NetSDKLib.NET_OUT_FIND_RECORD_PARAM(); findCondition.write(); if(!LoginModule.netsdk.CLIENT_FindRecord(LoginModule.m_hLoginHandle, stIn, stOut, 5000)) { System.err.println("没查到å¡ä¿¡æ¯!" + ToolKits.getErrorCodePrint()); return false; } findCondition.read(); m_lFindHandle = stOut.lFindeHandle; return true; } /** * 查询具体的å¡ä¿¡æ¯ * @param nFindCount æ¯æ¬¡æŸ¥è¯¢çš„个数 * @return è¿”å›žå…·ä½“çš„æŸ¥è¯¢ä¿¡æ¯ */ public static NET_RECORDSET_ACCESS_CTL_CARD[] findNextCard(int nFindCount) { // ç”¨äºŽç”³è¯·å†…å˜ NET_RECORDSET_ACCESS_CTL_CARD[] pstRecord = new NET_RECORDSET_ACCESS_CTL_CARD[nFindCount]; for(int i = 0; i < nFindCount; i++) { pstRecord[i] = new NET_RECORDSET_ACCESS_CTL_CARD(); } /** * CLIENT_FindNextRecord 接å£å…¥å‚ */ NET_IN_FIND_NEXT_RECORD_PARAM stNextIn = new NET_IN_FIND_NEXT_RECORD_PARAM(); stNextIn.lFindeHandle = m_lFindHandle; stNextIn.nFileCount = nFindCount; //æƒ³æŸ¥è¯¢çš„è®°å½•æ¡æ•° /** * CLIENT_FindNextRecord 接å£å‡ºå‚ */ NET_OUT_FIND_NEXT_RECORD_PARAM stNextOut = new NET_OUT_FIND_NEXT_RECORD_PARAM(); stNextOut.nMaxRecordNum = nFindCount; stNextOut.pRecordList = new Memory(pstRecord[0].dwSize * nFindCount); // ç”³è¯·å†…å˜ stNextOut.pRecordList.clear(pstRecord[0].dwSize * nFindCount); ToolKits.SetStructArrToPointerData(pstRecord, stNextOut.pRecordList); // å°†æ•°ç»„å†…å˜æ‹·è´ç»™æŒ‡é’ˆ if(LoginModule.netsdk.CLIENT_FindNextRecord(stNextIn, stNextOut, 5000)) { if(stNextOut.nRetRecordNum == 0) { return null; } ToolKits.GetPointerDataToStructArr(stNextOut.pRecordList, pstRecord); // 获å–å¡ä¿¡æ¯ // èŽ·å–æœ‰ç”¨çš„ä¿¡æ¯ NET_RECORDSET_ACCESS_CTL_CARD[] pstRecordEx = new NET_RECORDSET_ACCESS_CTL_CARD[stNextOut.nRetRecordNum]; for(int i = 0; i < stNextOut.nRetRecordNum; i++) { pstRecordEx[i] = new NET_RECORDSET_ACCESS_CTL_CARD(); pstRecordEx[i] = pstRecord[i]; } return pstRecordEx; } return null; } /** * 关闿Ÿ¥è¯¢ */ public static void findCardClose() { if(m_lFindHandle.longValue() != 0) { LoginModule.netsdk.CLIENT_FindRecordClose(m_lFindHandle); m_lFindHandle.setValue(0); } } }