package com.dahua.module;

import com.dahua.lib.NetSDKLib;

import com.dahua.lib.ToolKits;

import com.sun.jna.Memory;

public class GateModule {

/**

* 查询刷卡记录,获取查询句柄

* @param findCondition 查询条件

* @return

*/

public static NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC[] findRecords(NetSDKLib.NET_TIME startTime, NetSDKLib.NET_TIME endTime) {

// 接口入参

NetSDKLib.FIND_RECORD_ACCESSCTLCARDREC_CONDITION_EX findCondition = new NetSDKLib.FIND_RECORD_ACCESSCTLCARDREC_CONDITION_EX();

findCondition.bCardNoEnable = 0;

findCondition.stStartTime = startTime;

findCondition.stEndTime = endTime;

// 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_ACCESSCTLCARDREC_EX;

stIn.pQueryCondition = findCondition.getPointer();

// CLIENT_FindRecord 接口出参

NetSDKLib.NET_OUT_FIND_RECORD_PARAM stOut = new NetSDKLib.NET_OUT_FIND_RECORD_PARAM();

findCondition.write();

NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC[] pstRecordEx = new NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC[0];

// 获取查询句柄

if(LoginModule.netsdk.CLIENT_FindRecord(LoginModule.m_hLoginHandle, stIn, stOut, 5000)) {

findCondition.read();

// 用于申请内存,假定2000次刷卡记录

int nFindCount = 2000;

NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC[] pstRecord = new NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC[nFindCount];

for(int i = 0; i < nFindCount; i++) {

pstRecord[i] = new NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC();

}

NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM stNextIn = new NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM();

stNextIn.lFindeHandle = stOut.lFindeHandle;

stNextIn.nFileCount = nFindCount;

NetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM stNextOut = new NetSDKLib.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 pstRecordEx;

}

// 获取卡信息

ToolKits.GetPointerDataToStructArr(stNextOut.pRecordList, pstRecord);

// 获取有用的信息

pstRecordEx = new NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC[stNextOut.nRetRecordNum];

for(int i = 0; i < stNextOut.nRetRecordNum; i++) {

pstRecordEx[i] = new NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC();

pstRecordEx[i] = pstRecord[i];

}

}

LoginModule.netsdk.CLIENT_FindRecordClose(stOut.lFindeHandle);

}

return pstRecordEx;

}

}

7、调用方式

boolean flag = LoginModule.login(hall.getGateIp(), 37777, "admin", "123456");

if (flag) {

// 检索结束时间:当前时间

Date endDateTime = calendar.getTime();

NetSDKLib.NET_TIME endTime = new NetSDKLib.NET_TIME();

endTime.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));

// 获取检索开始时间:当前时间 - 5分钟

calendar.add(Calendar.MINUTE, -5);

Date startDateTime = calendar.getTime();

NetSDKLib.NET_TIME startTime = new NetSDKLib.NET_TIME();

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);

for (NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARDREC cardRecord : cardRecords) {

// 卡号

String cardNo = new String(cardRecord.szCardNo).trim();

// 如果刷卡状态不正确,或者是按键开门,就不录入数据

if (cardRecord.bStatus != 1 || "00000000".equals(cardNo)) {

continue;

}

// 刷卡时间 转换为北京时间 +8小时

Date stuTime = DateUtil.convertStringToDate(cardRecord.stuTime.toStringTimeEx(), "yyyy-MM-dd HH:mm:ss");

Calendar stuCalendar = DateUtil.getCalendar(stuTime);

stuCalendar.add(Calendar.HOUR, 8);

}

}

java 接入门禁卡_javaweb项目获取大华门禁刷卡记录相关推荐

  1. 大华门禁SDK二次开发(二)-SignalR应用

    经过与大华技术支持的沟通,门禁服务程序已经开发好了,可以正常接收门禁开关事件,可以发送开门命令.基于项目实时性要求,这里使用SignalR实现门禁状态.控制命令的实时传送. 几种场景需求 根据Sign ...

  2. 金博康拓优蓝铁虎安居宝安通旺龙晶创晶控大华门禁CPU梯控复制

    随着我国科学技术的飞速发展,电梯在一些高层建筑中得到了广泛的应用.为了更好地管理电梯,使用电梯IC卡来搭乘电梯.然而,许多消费者不知道如何使用电梯IC/,因为他们对电梯IC了解不够.他们不知道电梯IC ...

  3. 大华门禁操作说明上中下

    本文档来自大华官网,在此引用是方便大伙查阅,大家也可以自己在大华官网下载阅读.

  4. 门禁系统服务器需要什么要求,完备的门禁系统应该具有这些功能

    现代社会,门禁系统的应用极为广泛,各小区.办公楼.商场等地都会有门禁系统.人们对门禁系统的功能要求也越来越高,那么一个完备的门禁系统应该具有怎样的功能呢?本文深入分析门禁系统的功能,为您在选择适合产品 ...

  5. 基于STM32的多功能门禁系统(AS608指纹识别、密码解锁、刷卡解锁)

    目录 一.项目功能 二.视频 三.原理图 4.材料选择 5.部分程序 资料下载地址:基于STM32的多功能门禁系统 一.项目功能 1.AS608指纹解锁:可以录入.删除.验证指纹: 2.密码解锁:可以 ...

  6. 小米手环无法模拟门卡_小米手环3门禁卡设置方法 居然可以模拟门禁卡

    这个智能家居快速发展的时代里面,越来越多的产品向智能靠拢.除了智能音箱引领潮流之外,智能穿戴产品也占据了下一个风口浪尖.不管是智能手表还是智能手环,都是年轻人的必备品,下面就来给的大家介绍一下小米手环 ...

  7. 教你用手机模拟模拟 门禁卡、考勤卡、会员卡、停车卡、电梯卡等等,模拟后可用手机代替刷卡,无需root

    教你用手机模拟模拟 门禁卡.考勤卡.会员卡.停车卡.电梯卡等等,模拟后可用手机代替刷卡,无需root 背景介绍: 1.前言   目前,IC卡已被广泛应用于身份识别.金融消费.安全认证等领域.大多数人每 ...

  8. IC卡ID卡混合型多功能DLC430考勤机门禁一体机安装调试使用说明

    IC卡ID卡混合型多功能DLC430考勤机门禁一体机是一款即支持13.56MHZ感应IC卡也支持125KHZ射频ID卡使用的多功能考勤设备,广泛应用于各类企业.工厂员工考勤等领域. 1.1 考勤机结构 ...

  9. 苹果7pnfc功能门禁卡_iPhone12门禁卡NFC功能怎么设置?门禁卡复制到手机上的方法...

    iPhone12门禁卡NFC功能怎么设置?大家都知道,目前安卓手机是可以轻松将IC门禁卡复制到手机上的,但是很多人不知道苹果手机怎么用NFC来复制门禁,今天,智能手机网小编就来分享一下iPhone12 ...

最新文章

  1. JVM:垃圾回收相关算法
  2. Spring_hibernate整合初步 based in annotation
  3. 开发日记-20190521 关键词 bash的几个初始化文件
  4. android点击事件的优先级,android中进程的优先级
  5. Elasticsearch6.X 新类型Join深入详解
  6. PUBLISH.sql(复制的时候注意路径!!!)
  7. 单链表算法设计(含大厂面试题)
  8. hnu 暑期实训之回文串
  9. Notepad++软件的下载与安装步骤(图文详解)
  10. 众说纷纭的ul、ol、li
  11. hd看图怎么打印图片_二年级看图写话图片及范文10篇(可下载打印)
  12. gbase里的分布表与复制表
  13. m2接口和nvme协议接口_怎么看笔记本的主板是支持加装m2接口和m2协议NVME接口的固态硬盘?两者有什么区别?...
  14. HUPlayer 使用向导和常见问题
  15. ESP8266开发之旅 阿里云物联网平台篇④ LED智能灯控制系统(MQTTS客户端直连)
  16. 基于计算机视觉的手势识别技术
  17. 干货 :7招帮你打造完美数据科学GitHub作品集!
  18. 行走在投资界的程序员:千淘资本合伙人李华兵
  19. 80老翁谈人生(342):火星人是护法天使、科普神童
  20. R语言ggplot2教程 十张图带你入门ggplot2

热门文章

  1. Struts2 自定义拦截器
  2. php上传报未定义偏移量,PHP注意:未定义的偏移量:1,当读取数据时带数组
  3. 怎么测试视频是哪个软件拍的,李子柒的视频是用什么设备拍摄的,又是用什么软件处理的?...
  4. 一招解决A卡下载安卓模拟器问题
  5. w10用计算机卸载,win10电脑怎么卸载软件
  6. Unity中Destory销毁对象不是立即销毁
  7. windows7下cmd命令窗口没有滚动条的解救方法
  8. 讲讲Python爬虫绕过登录的小技巧
  9. 如何让Div层悬浮在Flash Object对象之上!
  10. WebStorm开发应用——前端页面