ます。https://www.dahuatech.com/service/downloadlists/836.html 1、公式UOBネットワーク機器sdk_java64、アドレスをダウンロード
:2は、次のJavaクラス記録に使用されるアクセスカード取得UOBパッケージのものを利用するSDKの例がある
COM / NETSDK / libに
NetSDKLib.java
ToolKits.javaを
Utils.javaで
COM / NETSDK /デモ/ Module1の
LoginModule.javaを
私は、アクセスカードの実装のレコードへの準備ができてアクセスする必要がありますどのcom.netsdk.demo.module.GateModule.javaを考えたが、残念ながらありませんでした。塗装ひょうたんひしゃくよりも、書きました。
3、その春のブートプロジェクトにおける導入のlibs / jna.jar。
COM / NETSDK / libに
NetSDKLib.java
ToolKits.javaを
Utils.javaで
COM / NETSDK /デモ/ Module1の
LoginModule.javaを
私は、アクセスカードの実装のレコードへの準備ができてアクセスする必要がありますどのcom.netsdk.demo.module.GateModule.javaを考えたが、残念ながらありませんでした。塗装ひょうたんひしゃくよりも、書きました。
3、その春のブートプロジェクトにおける導入のlibs / jna.jar。
<依存性>
<のgroupId> com.dahua </のgroupId>
<たartifactId> JNA </たartifactId>
<バージョン> 1.0 </バージョン>
<スコープ>システム</スコープ>
<systemPath> $ {project.basedir} / LIB / JNA .jar </ systemPath>
</依存関係>
<のgroupId> com.dahua </のgroupId>
<たartifactId> JNA </たartifactId>
<バージョン> 1.0 </バージョン>
<スコープ>システム</スコープ>
<systemPath> $ {project.basedir} / LIB / JNA .jar </ systemPath>
</依存関係>
LIBS / Win64のUOBライブラリ内のdllファイル、読むために実行時、Utils.javaに読み込むための方法があり、
項目に独自のパス対応に格納されているパスをたどることができます。私のプロジェクトでは、プロジェクトフォルダを開始するには、同じレベルLIBSファイルのsrcファイルに入れて、春ブーツです。
ウェブ-LEN
-src
-libs
-win64
項目に独自のパス対応に格納されているパスをたどることができます。私のプロジェクトでは、プロジェクトフォルダを開始するには、同じレベルLIBSファイルのsrcファイルに入れて、春ブーツです。
ウェブ-LEN
-src
-libs
-win64
4、UOBピット:ノート文書とクラスは、アクセスのクレジットカードのレコードは期間を通じて取得することができますが、いくつかは、アクセス制御機器をサポートしていない、あなたはすべてのすべてのレコードを与える明記されています。
ノートのLoginModuleの初期化方法javawebプロジェクトが懸念されるため、ログインに直接呼び出しに続いてサービスが開始、ライン上の初期化時間は、ログアウト方法ができたときのinit、、、
Javaのメモリがオフフックリンギングとなりますので、私がすることを始めたので、initメソッドを複数回呼び出すことはありません(押し下げ)......時間のクレジットカードのレコードがあり、北京ではありませんが、地区夜12時00分
の時間、彼らはプラス8時間を取得したいので、北京時間です。
ノートのLoginModuleの初期化方法javawebプロジェクトが懸念されるため、ログインに直接呼び出しに続いてサービスが開始、ライン上の初期化時間は、ログアウト方法ができたときのinit、、、
Javaのメモリがオフフックリンギングとなりますので、私がすることを始めたので、initメソッドを複数回呼び出すことはありません(押し下げ)......時間のクレジットカードのレコードがあり、北京ではありませんが、地区夜12時00分
の時間、彼らはプラス8時間を取得したいので、北京時間です。
5のpom.xml春-ブートのMavenプラグイン-に、Mavenのパッケージを使用して、逃した場合jna.jar、プラス<includeSystemScope>真</ includeSystemScope>
次の:
<プラグイン>
<プラグイン>
<groupIdを> org.springframework.boot </ groupIdを>
<たartifactId>ブート春のMavenプラグイン- </たartifactId>
<構成>
<includeSystemScope> trueに</ includeSystemScope>
</構成>
</プラグイン>
</プラグイン>
次の:
<プラグイン>
<プラグイン>
<groupIdを> org.springframework.boot </ groupIdを>
<たartifactId>ブート春のMavenプラグイン- </たartifactId>
<構成>
<includeSystemScope> trueに</ includeSystemScope>
</構成>
</プラグイン>
</プラグイン>
6、GateModule.javaコード
パッケージcom.dahua.module。
輸入com.dahua.lib.NetSDKLib;
輸入com.dahua.lib.ToolKits。
輸入com.sun.jna.Memory。
輸入com.dahua.lib.ToolKits。
輸入com.sun.jna.Memory。
{クラスGateModuleがパブリック
/ **
クエリハンドラを取得*クエリクレジットカードのレコードは、
* @param findCondition問い合わせ
* @return
* /
パブリック静的NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC [] findRecords(NetSDKLib.NET_TIMEのstartTime、endTimeはNetSDKLib.NET_TIME){
//着信インターフェイス参照
NetSDKLib.FIND_RECORD_ACCESSCTLCARDREC_CONDITION_EX findCondition新しい新しいNetSDKLib.FIND_RECORD_ACCESSCTLCARDREC_CONDITION_EX =();
findCondition.bCardNoEnable = 0;
findCondition.stStartTimeのstartTime =;
findCondition.stEndTime = endTimeは;
//受信インタフェースパラメータCLIENT_FindRecord
NetSDKLib.NET_IN_FIND_RECORD_PARAM STIN =新しいNetSDKLib.NET_IN_FIND_RECORD_PARAM();
stIn.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARDREC_EX。
stIn.pQueryCondition = findCondition.getPointer()。
// CLIENT_FindRecord接口出参
NetSDKLib.NET_OUT_FIND_RECORD_PARAMスタウト=新しいNetSDKLib.NET_OUT_FIND_RECORD_PARAM();
/ **
クエリハンドラを取得*クエリクレジットカードのレコードは、
* @param findCondition問い合わせ
* @return
* /
パブリック静的NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC [] findRecords(NetSDKLib.NET_TIMEのstartTime、endTimeはNetSDKLib.NET_TIME){
//着信インターフェイス参照
NetSDKLib.FIND_RECORD_ACCESSCTLCARDREC_CONDITION_EX findCondition新しい新しいNetSDKLib.FIND_RECORD_ACCESSCTLCARDREC_CONDITION_EX =();
findCondition.bCardNoEnable = 0;
findCondition.stStartTimeのstartTime =;
findCondition.stEndTime = endTimeは;
//受信インタフェースパラメータCLIENT_FindRecord
NetSDKLib.NET_IN_FIND_RECORD_PARAM STIN =新しいNetSDKLib.NET_IN_FIND_RECORD_PARAM();
stIn.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_ACCESSCTLCARDREC_EX。
stIn.pQueryCondition = findCondition.getPointer()。
// CLIENT_FindRecord接口出参
NetSDKLib.NET_OUT_FIND_RECORD_PARAMスタウト=新しいNetSDKLib.NET_OUT_FIND_RECORD_PARAM();
findCondition.write();
NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC [] =新しい新しいpstRecordEx NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC [0];
//クエリのハンドルを取得する
(LoginModule.netsdk.CLIENT_FindRecord(LoginModule.m_hLoginHandle、STIN、スタウト、5000))IF {
findCondition.read( );
//メモリアプリケーションのための、2,000クレジットカードレコード仮定
nFindCount = 2000 INTを、
NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDRECは[] =新しい新しいpstRecord NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC [nFindCount];
のための(INT I = 0; I <nFindCount; I ++){
pstRecord [ I] =新しい新しいNetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC();
}
NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM stNextIn =新しいNetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM();
stNextIn.lFindeHandle = stOut.lFindeHandle。
stNextIn.nFileCount = nFindCount。
NetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM stNextOut =新しいNetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM();
stNextOut.nMaxRecordNum = nFindCount。
//申请内存
stNextOut.pRecordList =新しいメモリ(pstRecord [0] .dwSize * nFindCount)。
stNextOut.pRecordList.clear(pstRecord [0] .dwSize * nFindCount)。
//将数组内存拷贝给指针
ToolKits.SetStructArrToPointerData(pstRecord、stNextOut.pRecordList)。
IF(LoginModule.netsdk.CLIENT_FindNextRecord(stNextIn、stNextOut、5000)){
(stNextOut.nRetRecordNum == 0){場合
pstRecordExを返します。
}
NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC [] =新しい新しいpstRecordEx NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC [0];
//クエリのハンドルを取得する
(LoginModule.netsdk.CLIENT_FindRecord(LoginModule.m_hLoginHandle、STIN、スタウト、5000))IF {
findCondition.read( );
//メモリアプリケーションのための、2,000クレジットカードレコード仮定
nFindCount = 2000 INTを、
NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDRECは[] =新しい新しいpstRecord NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC [nFindCount];
のための(INT I = 0; I <nFindCount; I ++){
pstRecord [ I] =新しい新しいNetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC();
}
NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM stNextIn =新しいNetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM();
stNextIn.lFindeHandle = stOut.lFindeHandle。
stNextIn.nFileCount = nFindCount。
NetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM stNextOut =新しいNetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM();
stNextOut.nMaxRecordNum = nFindCount。
//申请内存
stNextOut.pRecordList =新しいメモリ(pstRecord [0] .dwSize * nFindCount)。
stNextOut.pRecordList.clear(pstRecord [0] .dwSize * nFindCount)。
//将数组内存拷贝给指针
ToolKits.SetStructArrToPointerData(pstRecord、stNextOut.pRecordList)。
IF(LoginModule.netsdk.CLIENT_FindNextRecord(stNextIn、stNextOut、5000)){
(stNextOut.nRetRecordNum == 0){場合
pstRecordExを返します。
}
//カード情報取得
ToolKits.GetPointerDataToStructArr(stNextOut.pRecordList、pstRecordを);
//有用な情報を得る
; pstRecordEx =新しい新しいNetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC [stNextOut.nRetRecordNum]
のための(INT I = 0; I <stNextOut.nRetRecordNum; I ++){
pstRecordEx [I] =新しい新しいNetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC();
pstRecordEx [I] = pstRecord [I];
}
}
LoginModule.netsdk.CLIENT_FindRecordClose(stOut.lFindeHandle);
}
pstRecordExを返します;
}
}
ToolKits.GetPointerDataToStructArr(stNextOut.pRecordList、pstRecordを);
//有用な情報を得る
; pstRecordEx =新しい新しいNetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC [stNextOut.nRetRecordNum]
のための(INT I = 0; I <stNextOut.nRetRecordNum; I ++){
pstRecordEx [I] =新しい新しいNetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC();
pstRecordEx [I] = pstRecord [I];
}
}
LoginModule.netsdk.CLIENT_FindRecordClose(stOut.lFindeHandle);
}
pstRecordExを返します;
}
}
図7に示すように、呼ばれる
ブールのフラグ= LoginModule.login(hall.getGateIp()、37777、 "管理者"、 "123456");
IF(のフラグ){
//検索完了時間:現在時刻
日endDateTime = calendar.getTime()。
endTimeは=新しい新しいNetSDKLib.NET_TIME NetSDKLib.NET_TIME();
。endTime.setTime(Calendar.get(Calendar.YEAR)、Calendar.get(Calendar.MONTH)+ 1、Calendar.get(Calendar.DATE)、Calendar.get(カレンダー.HOUR)、Calendar.get(Calendar.MINUTE)、Calendar.get(Calendar.SECOND));
//検索開始時刻を取得します。現在の時刻- 5分
Calendar.add(Calendar.MINUTEを、-5);
日付を= startDateTime calendar.getTime();
NetSDKLib.NET_TIME新しい新しいNetSDKLib.NET_TIMEたstartTime =();
startTime.setTime(calendar.get(Calendar.YEAR)、calendar.get (Calendar.MONTH)+ 1、calendar.get(Calendar.DATE)、calendar.get(Calendar.HOUR)、calendar.get(Calendar.MINUTE) 、Calendar.get(Calendar.SECOND));
NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC [] = cardRecords GateModule.findRecords(のstartTime、endTimeは);
(NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC cardRecord用:cardRecords){
//カード
文字CARDNO =新しい文字列(cardRecord.szCardNo) .trim();
//カードのステータスが正しくない場合、またはドアを開けるための鍵、データなしのエントリ
(。!cardRecord.bStatus 1 || = "00000000" .equals(CARDNO))IF {
続行;
}
//時間変換カードGMT +8時間
日付stuTime = DateUtil.convertStringToDate(cardRecord.stuTime.toStringTimeEx()、 "YYYY-MM-DD HH:MM:SS")。
カレンダーstuCalendar = DateUtil.getCalendar(stuTime)。
stuCalendar.add(Calendar.HOUR、8)。
}
}
ブールのフラグ= LoginModule.login(hall.getGateIp()、37777、 "管理者"、 "123456");
IF(のフラグ){
//検索完了時間:現在時刻
日endDateTime = calendar.getTime()。
endTimeは=新しい新しいNetSDKLib.NET_TIME NetSDKLib.NET_TIME();
。endTime.setTime(Calendar.get(Calendar.YEAR)、Calendar.get(Calendar.MONTH)+ 1、Calendar.get(Calendar.DATE)、Calendar.get(カレンダー.HOUR)、Calendar.get(Calendar.MINUTE)、Calendar.get(Calendar.SECOND));
//検索開始時刻を取得します。現在の時刻- 5分
Calendar.add(Calendar.MINUTEを、-5);
日付を= startDateTime calendar.getTime();
NetSDKLib.NET_TIME新しい新しいNetSDKLib.NET_TIMEたstartTime =();
startTime.setTime(calendar.get(Calendar.YEAR)、calendar.get (Calendar.MONTH)+ 1、calendar.get(Calendar.DATE)、calendar.get(Calendar.HOUR)、calendar.get(Calendar.MINUTE) 、Calendar.get(Calendar.SECOND));
NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC [] = cardRecords GateModule.findRecords(のstartTime、endTimeは);
(NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC cardRecord用:cardRecords){
//カード
文字CARDNO =新しい文字列(cardRecord.szCardNo) .trim();
//カードのステータスが正しくない場合、またはドアを開けるための鍵、データなしのエントリ
(。!cardRecord.bStatus 1 || = "00000000" .equals(CARDNO))IF {
続行;
}
//時間変換カードGMT +8時間
日付stuTime = DateUtil.convertStringToDate(cardRecord.stuTime.toStringTimeEx()、 "YYYY-MM-DD HH:MM:SS")。
カレンダーstuCalendar = DateUtil.getCalendar(stuTime)。
stuCalendar.add(Calendar.HOUR、8)。
}
}