From 602fd01d73594e561fda796e597545404b586dd9 Mon Sep 17 00:00:00 2001 From: haidong Date: Mon, 9 Oct 2023 14:30:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=A7=E5=8D=8E=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: haidong --- src/main/java/com/yzx/impl/DaHua.java | 128 ++++++++++++++---- .../java/com/yzx/pojo/FaceRecrodInfo.java | 15 ++ 2 files changed, 118 insertions(+), 25 deletions(-) create mode 100644 src/main/java/com/yzx/pojo/FaceRecrodInfo.java diff --git a/src/main/java/com/yzx/impl/DaHua.java b/src/main/java/com/yzx/impl/DaHua.java index e1741c3..942ea9c 100644 --- a/src/main/java/com/yzx/impl/DaHua.java +++ b/src/main/java/com/yzx/impl/DaHua.java @@ -1,9 +1,11 @@ package com.yzx.impl; import com.netsdk.common.Res; +import com.netsdk.demo.frame.Gate.CardManegerDialog; import com.netsdk.demo.module.DeviceLogModule; import com.netsdk.demo.module.GateModule; import com.netsdk.demo.module.LoginModule; +import com.netsdk.demo.module.TalkModule; import com.netsdk.lib.NetSDKLib; import com.netsdk.lib.ToolKits; import com.netsdk.lib.structure.DH_DEVICE_LOG_ITEM_EX; @@ -11,17 +13,17 @@ import com.netsdk.lib.structure.NET_TIME; import com.sun.jna.Memory; import com.sun.jna.Pointer; import com.yzx.IHardwareEquipment; +import com.yzx.pojo.FaceRecrodInfo; import com.yzx.pojo.UserFaceInfo; import javax.imageio.ImageIO; +import javax.swing.*; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; -import java.util.Arrays; -import java.util.List; -import java.util.Optional; +import java.util.*; public class DaHua implements IHardwareEquipment { @@ -48,6 +50,23 @@ public class DaHua implements IHardwareEquipment { } + public boolean openDoor(){ + this.login(info.getIp(),info.getPort(),info.getUsername(),info.getPassword()); + NetSDKLib.NET_CTRL_ACCESS_OPEN openInfo = new NetSDKLib.NET_CTRL_ACCESS_OPEN(); + openInfo.nChannelID = 0; + openInfo.emOpenDoorType = NetSDKLib.EM_OPEN_DOOR_TYPE.EM_OPEN_DOOR_TYPE_REMOTE; + + Pointer pointer = new Memory(openInfo.size()); + ToolKits.SetStructDataToPointer(openInfo, pointer, 0); + boolean ret = LoginModule.netsdk.CLIENT_ControlDeviceEx(LoginModule.m_hLoginHandle, + NetSDKLib.CtrlType.CTRLTYPE_CTRL_ACCESS_OPEN, pointer, null, 10000); + if (!ret) { + return false; + } + this.logout(); + return true; + } + /** * 获取系统日志 * @param startTime 开始时间格式 yyyy/MM/dd/hh/mm/ss @@ -70,18 +89,18 @@ public class DaHua implements IHardwareEquipment { * @param time * @return */ - public boolean getAllRecord(NetSDKLib.NET_TIME time){ - + public List getAllRecord(NetSDKLib.NET_TIME time){ + List faceRecrodInfoList = new ArrayList<>(); this.login(info.getIp(),info.getPort(),info.getUsername(),info.getPassword()); int count = 0; int index = 0; - int nFindCount = 10; + int nFindCount = 100; // 日期: 为空,查询所有开门信息 // 获取查询句柄 if(!GateModule.findRecord(time)) { - return false; + return faceRecrodInfoList; } // 查询具体信息 @@ -95,23 +114,15 @@ public class DaHua implements IHardwareEquipment { index = i + count * nFindCount; try { - StringBuilder sb = new StringBuilder(); - sb.append("位置序号:").append(index).append("\n");// 位置序号 - sb.append("时间序号:").append(pstRecord[i].stuTime.dwYear) - .append(String.format("%02d", pstRecord[i].stuTime.dwMonth))//占位 - .append(String.format("%02d", pstRecord[i].stuTime.dwDay)).append("\n");//占位 - sb.append("记录编号:").append(pstRecord[i].nRecNo).append("\n"); // 序号 - sb.append("卡号:").append(new String(pstRecord[i].szCardNo).trim()).append("\n"); // 卡号 - sb.append("卡名:").append(new String(pstRecord[i].szCardName, "GBK").trim()).append("\n"); // 卡名 -> employeeName - sb.append("用户ID:").append(new String(pstRecord[i].szUserID).trim()).append("\n"); // 用户ID -> employeeNo - sb.append("卡密:").append(new String(pstRecord[i].szPwd).trim()).append("\n"); // 卡密码 - sb.append("刷卡结果:").append(pstRecord[i].bStatus).append("\n"); // 刷卡结果 - sb.append("开门方式:").append(Res.string().getOpenMethods(pstRecord[i].emMethod)).append("\n"); // 开门方式 - sb.append("开门方式:").append(pstRecord[i].emMethod).append("\n"); // 开门方式 - pstRecord[i].stuTime.dwHour = pstRecord[i].stuTime.dwHour + 8; - sb.append("刷卡时间:").append(pstRecord[i].stuTime.toStringTimeEx()).append("\n"); // 刷卡时间 - sb.append("人脸图片地址:").append(new String(pstRecord[i].szSnapFtpUrl).trim()).append("\n"); //人脸图片地址 - System.out.println("sb = " + sb); + FaceRecrodInfo faceRecrodInfo = new FaceRecrodInfo(); + faceRecrodInfo.setIndex(index); + faceRecrodInfo.setRecordNo(pstRecord[i].nRecNo); + faceRecrodInfo.setCardNo(new String(pstRecord[i].szCardNo)); + faceRecrodInfo.setEmployeeNo(new String(pstRecord[i].szUserID).trim()); + faceRecrodInfo.setEmployeeName(new String(pstRecord[i].szCardName, "GBK").trim()); + faceRecrodInfo.setTime(pstRecord[i].stuTime.toStringTimeEx()); + faceRecrodInfo.setSnapUrl(new String(pstRecord[i].szSnapFtpUrl).trim()); + faceRecrodInfoList.add(faceRecrodInfo); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } @@ -130,7 +141,7 @@ public class DaHua implements IHardwareEquipment { //退出登录 this.logout(); - return true; + return faceRecrodInfoList; } /** @@ -156,6 +167,20 @@ public class DaHua implements IHardwareEquipment { return false; } + public boolean deletePerson(UserFaceInfo userFaceInfo){ + this.login(info.getIp(),info.getPort(),info.getUsername(),info.getPassword()); + //查询用户 + String employeeNo = userFaceInfo.getEmployeeNo(); + int recordNo = this.findRecordNo(employeeNo); + if(recordNo != 0){ + if(GateModule.deleteCard(recordNo) && GateModule.deleteFaceInfo(employeeNo)){ + return true; + } + } + this.logout(); + return false; + } + /** * 添加人脸 * @param userId @@ -246,6 +271,59 @@ public class DaHua implements IHardwareEquipment { return 0; } + public List findAllCard() { + this.login(info.getIp(),info.getPort(),info.getUsername(),info.getPassword()); + List userFaceInfoList = new ArrayList<>(); + + int nFindCount = 1; + + // 卡号: 为空,查询所有的卡信息 + // 获取查询句柄 + if(!GateModule.findCard("","")) { + return userFaceInfoList; + } + + // 查询具体信息 + while(true) { + NetSDKLib.NET_RECORDSET_ACCESS_CTL_CARD[] pstRecord = GateModule.findNextCard(nFindCount); + if(pstRecord == null) { + break; + } + + for(int i = 0; i < pstRecord.length; i++) { + UserFaceInfo userFaceInfo = new UserFaceInfo(); + try { + userFaceInfo.setCardNo(new String(pstRecord[i].szCardNo).trim()); + userFaceInfo.setEmployeeName(new String(pstRecord[i].szCardName, "GBK").trim()); + userFaceInfo.setEmployeeNo(new String(pstRecord[i].szUserID).trim()); + userFaceInfo.setStartTime(pstRecord[i].stuValidStartTime.toStringTimeEx()); + userFaceInfo.setEndTime(pstRecord[i].stuValidEndTime.toStringTimeEx()); + userFaceInfoList.add(userFaceInfo); + }catch(UnsupportedEncodingException e){ + e.printStackTrace(); + } + } + + if (pstRecord.length < nFindCount) { + break; + } + } + + // 关闭查询接口 + GateModule.findCardClose(); + this.logout(); + return userFaceInfoList; + } + + public boolean clearAllPerson(){ + this.login(info.getIp(),info.getPort(),info.getUsername(),info.getPassword()); + if(GateModule.clearCard() && GateModule.clearFaceInfo()){ + return true; + } + this.logout(); + return false; + } + // 登录 public boolean login(String ip,short port,String username,String password) { diff --git a/src/main/java/com/yzx/pojo/FaceRecrodInfo.java b/src/main/java/com/yzx/pojo/FaceRecrodInfo.java new file mode 100644 index 0000000..1f19390 --- /dev/null +++ b/src/main/java/com/yzx/pojo/FaceRecrodInfo.java @@ -0,0 +1,15 @@ +package com.yzx.pojo; + +import lombok.Data; + +@Data +public class FaceRecrodInfo { + + private int index;//索引 -> day_postion + private int recordNo;//记录编号 -> serial_no + private String cardNo;//卡号 + private String employeeNo;//用户编号 + private String employeeName;//用户名称 -> user_name + private String time;//刷脸时间 + private String snapUrl;//人脸图片地址 +}