|
|
@@ -1,255 +0,0 @@
|
|
|
-package com.supervision.web.peopleGateManage.Service.impl;
|
|
|
-
|
|
|
-
|
|
|
-import com.sun.jna.Native;
|
|
|
-import com.supervision.web.ConnectSDK.peopleDoor.Commom.osSelect;
|
|
|
-import com.supervision.web.ConnectSDK.peopleDoor.NetSDKDemo.HCNetSDK;
|
|
|
-import com.supervision.web.ConnectSDK.util.HikSDKManager;
|
|
|
-import com.supervision.web.ConnectSDK.util.SdkType;
|
|
|
-import org.slf4j.Logger;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.stereotype.Service;
|
|
|
-
|
|
|
-
|
|
|
-import javax.annotation.PostConstruct;
|
|
|
-import javax.annotation.PreDestroy;
|
|
|
-import java.io.UnsupportedEncodingException;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.concurrent.ConcurrentHashMap;
|
|
|
-
|
|
|
-@Service
|
|
|
-public class HikvisionPeopleAcsServiceImpl {
|
|
|
-
|
|
|
- private static final Logger logger = org.slf4j.LoggerFactory.getLogger(HikvisionPeopleAcsServiceImpl.class);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- private HCNetSDK hCNetSDK = null;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private HikSDKManager hikSDKManager;
|
|
|
-
|
|
|
- // 获取门禁 SDK
|
|
|
- HCNetSDK peopleDoorSDK = (HCNetSDK) hikSDKManager.getSDK(SdkType.PEOPLE_DOOR);
|
|
|
-
|
|
|
- // 用户名 -> userID 映射,多用户支持
|
|
|
- private final Map<String, Integer> userLoginMap = new ConcurrentHashMap<>();
|
|
|
-
|
|
|
- private boolean sdkInitialized = false;
|
|
|
-
|
|
|
- private int iCharEncodeType = 0;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 用户登录设备
|
|
|
- * 调用SDK登录设备
|
|
|
- */
|
|
|
- public Map<String, Object> beginloginDevice(String username, String ip, short port, String user, String psw,
|
|
|
- String caseId)
|
|
|
- throws UnsupportedEncodingException, InterruptedException {
|
|
|
- Map<String, Object> res = new java.util.HashMap<>();
|
|
|
- if (!sdkInitialized) {
|
|
|
- res.put("message", "SDK未初始化");
|
|
|
- return res;
|
|
|
- }
|
|
|
-
|
|
|
- // 重复登录处理
|
|
|
- if (userLoginMap.containsKey(username)) {
|
|
|
- logger.info("用户 {} 已登录,先登出原 session", username);
|
|
|
- logout(username);
|
|
|
- }
|
|
|
-
|
|
|
- // 设备登录
|
|
|
- // lUserID = loginDevice("10.10.138.203", (short) 8000, "admin", "hik12345"); //登陆设备
|
|
|
- int userID = loginDevice(ip, port, user, psw);
|
|
|
- if (userID < 0) {
|
|
|
- res.put("message", "登录设备失败");
|
|
|
- return res;
|
|
|
- }
|
|
|
-
|
|
|
- // 保存用户登录句柄
|
|
|
- userLoginMap.put(username, userID);
|
|
|
- logger.info("用户 {} 登录成功, userID={}", username, userID);
|
|
|
-
|
|
|
- // 根据caseId 执行操作
|
|
|
- handleCase(userID, caseId);
|
|
|
-
|
|
|
- res.put("message", "操作成功,用户已登录");
|
|
|
- res.put("userID", userID);
|
|
|
- return res;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 用户登出设备
|
|
|
- */
|
|
|
- public void logout(String username) {
|
|
|
- Integer userID = userLoginMap.remove(username);
|
|
|
- if (userID != null && userID >= 0) {
|
|
|
- hCNetSDK.NET_DVR_Logout(userID);
|
|
|
- logger.info("用户 {} 已登出, userID={}", username, userID);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 登录设备,支持 V40 和 V30 版本,功能一致。
|
|
|
- *
|
|
|
- * @param ip 设备IP地址
|
|
|
- * @param port SDK端口,默认为设备的8000端口
|
|
|
- * @param user 设备用户名
|
|
|
- * @param psw 设备密码
|
|
|
- * @return 登录成功返回用户ID,失败返回-1
|
|
|
- */
|
|
|
- public int loginDevice(String ip, short port, String user, String psw) {
|
|
|
- // SDK 已经全局初始化,不需要再次 NET_DVR_Init
|
|
|
-
|
|
|
- // 创建设备登录信息和设备信息对象
|
|
|
- HCNetSDK.NET_DVR_USER_LOGIN_INFO loginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();
|
|
|
- HCNetSDK.NET_DVR_DEVICEINFO_V40 deviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();
|
|
|
-
|
|
|
- // 填充 loginInf
|
|
|
- // 设置设备IP地址
|
|
|
- byte[] deviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];
|
|
|
- byte[] ipBytes = ip.getBytes();
|
|
|
- System.arraycopy(ipBytes, 0, deviceAddress, 0, Math.min(ipBytes.length, deviceAddress.length));
|
|
|
- loginInfo.sDeviceAddress = deviceAddress;
|
|
|
-
|
|
|
- // 设置用户名和密码
|
|
|
- byte[] userName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];
|
|
|
- byte[] password = psw.getBytes();
|
|
|
- System.arraycopy(user.getBytes(), 0, userName, 0, Math.min(user.length(), userName.length));
|
|
|
- System.arraycopy(password, 0, loginInfo.sPassword, 0, Math.min(password.length, loginInfo.sPassword.length));
|
|
|
- loginInfo.sUserName = userName;
|
|
|
-
|
|
|
- // 设置端口和登录模式
|
|
|
- loginInfo.wPort = port;
|
|
|
- loginInfo.bUseAsynLogin = false; // 同步登录
|
|
|
- loginInfo.byLoginMode = 0; // 使用SDK私有协议
|
|
|
-
|
|
|
- // 执行登录操作
|
|
|
- int userID = hCNetSDK.NET_DVR_Login_V40(loginInfo, deviceInfo); // 用户注册即登录设备,调用NET_DVR_Login_V40接口,每一台设备只需要登录一次。
|
|
|
- if (userID == -1) {
|
|
|
- logger.error("登录失败,错误码为: " + hCNetSDK.NET_DVR_GetLastError());
|
|
|
- } else {
|
|
|
- deviceInfo.read();
|
|
|
- // 获取设备字符编码格式
|
|
|
- iCharEncodeType = deviceInfo.byCharEncodeType;
|
|
|
- logger.info("{} 设备登录成功,userID={}", ip, userID);
|
|
|
- }
|
|
|
- return userID; // 返回登录结果
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 根据caseId 执行操作
|
|
|
- */
|
|
|
- private void handleCase(int userID, String caseId) throws UnsupportedEncodingException, InterruptedException {
|
|
|
- switch (caseId.toLowerCase()) {
|
|
|
-// case "11": {
|
|
|
-// logger.info("[Module]获取门禁主机参数");
|
|
|
-// ACSManage.getAcsCfg(userID);
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case "12": {
|
|
|
-// logger.info("[Module]设置门禁主机参数");
|
|
|
-// ACSManage.setAcsCfg(userID);
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case "13": {
|
|
|
-// logger.info("[Module]获取门禁主机工作状态");
|
|
|
-// ACSManage.getAcsStatus(userID);
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case "14": {
|
|
|
-// logger.info("[Module]远程控门");
|
|
|
-// ACSManage.remoteControlGate(userID, 1, 1);
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case "21": {
|
|
|
-// logger.info("\n[Module]下发人员示例代码");
|
|
|
-// UserManage.addUserInfo(userID, "12345");
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case "22": {
|
|
|
-// logger.info("\n[Module]查询人员示例代码");
|
|
|
-// UserManage.searchUserInfo(userID);
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case "23": {
|
|
|
-// logger.info("\n[Module]删除人员代码");
|
|
|
-// //支持按人员和全部删除
|
|
|
-// UserManage.deleteUserInfo(userID);
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case "24": {
|
|
|
-// //人员下发默认1号计划模板:全天24小时有权限,自定义设置计划模板建议从2号模板开始
|
|
|
-// logger.info("\n[Module]设置计划模板代码");
|
|
|
-// UserManage.setCardTemplate(userID, 2);
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case "31": {
|
|
|
-// //先下发人员,人员工号上绑定卡号
|
|
|
-// logger.info("\n[Module]下发卡号代码");
|
|
|
-// CardManage.addCardInfo(userID, "test001", "12345");
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case "32": {
|
|
|
-// //按照人员工号查看绑定的卡号
|
|
|
-// logger.info("\n[Module]查询卡号代码");
|
|
|
-// CardManage.searchCardInfo(userID, "test001");
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case "33": {
|
|
|
-// //按照人员工号删除绑定的卡号
|
|
|
-// logger.info("\n[Module]删除卡号代码");
|
|
|
-// CardManage.deleteCardInfo(userID, "12345");
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case "41": {
|
|
|
-// //先下发人员,人员工号上绑定人脸图片
|
|
|
-// logger.info("\n[Module]二进制方式下发人脸代码");
|
|
|
-// FaceManage.addFaceByBinary(userID, "test001");
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case "42": {
|
|
|
-// //先下发人员,人员工号上绑定人脸图片
|
|
|
-// logger.info("\n[Module]URL方式下发人脸代码");
|
|
|
-// FaceManage.addFaceByUrl(userID, "test001");
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case "43": {
|
|
|
-// //根据人员工号查询人脸图片
|
|
|
-// logger.info("\n[Module]查询人脸代码");
|
|
|
-// FaceManage.searchFaceInfo(userID, "test001");
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case "44": {
|
|
|
-// //根据人员工号删除人脸图片
|
|
|
-// logger.info("\n[Module]删除人脸代码");
|
|
|
-// FaceManage.deleteFaceInfo(userID, "test001");
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case "45": {
|
|
|
-// logger.info("\n[Module]采集人脸代码");
|
|
|
-// FaceManage.captureFaceInfo(userID);
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// case "56": {
|
|
|
-// logger.info("\n[Module]门禁历史事件查询代码");
|
|
|
-// EventSearch.searchAllEvent(userID);
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// default: {
|
|
|
-// logger.info("\n未知的指令操作!请重新输入!\n");
|
|
|
-// }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取用户登录句柄
|
|
|
- */
|
|
|
- public Integer getUserID(String username) {
|
|
|
- return userLoginMap.get(username);
|
|
|
- }
|
|
|
-
|
|
|
-}
|
|
|
-
|