前言
此功能开发是基于基础环境搭建完之后的功能代码,如果没有搭建基础环境还需看下网上的教程自己搭建一下。
实战代码
1、实体类
//远程开门实体类
@Data
public class RemoteControlRequest {
/**
* [in] 命令值:0- 关闭(对于梯控,表示受控),1- 打开(对于梯控,表示开门),2- 常开(对于梯控,表示自由、通道状态),3- 常关(对于梯控,表示禁用),4- 恢复(梯控,普通状态),5- 访客呼梯(梯控),6- 住户呼梯(梯控)
*/
private int dwStaic;
/**
* IP地址
*/
String ipadress;
/**
* 用户
*/
String user;
/**
* 密码
*/
String psw;
/**
* 端口
*/
short port;
}
2、业务层核心代码
我这个是在项目启动的时候,自行加载动态库、初始化sdk,登录门禁设备将lUserID赋值给静态变量,下面的lUserID是门禁登录后返回的用户手柄,应替换为自己的,ClientUtil.hCNetSDK这个也是替换为自己。其实就是根据dwStaic这个属性传入的数字去控制门禁的开关门。
/**
* 远程控门
* @param request
* @return
*/
@Override
public R<Object> remoteControlGate(RemoteControlRequest request) {
System.out.println("用户id:" + UserManageService.lUserID);
if (UserManageService.lUserID < 0) {
UserManageService.login_V40(request.getIpadress(), request.getUser(), request.getPsw(), request.getPort()); //登陆设备
}
boolean b_gate = ClientUtil.hCNetSDK.NET_DVR_ControlGateway(UserManageService.lUserID, 1, request.getDwStaic());
if (!b_gate) {
System.out.println("远程控门失败,err=" + ClientUtil.hCNetSDK.NET_DVR_GetLastError());
return R.fail("远程控门失败,err=" + ClientUtil.hCNetSDK.NET_DVR_GetLastError());
}
System.out.println("远程控门成功");
return R.success("远程控门成功");
}
3、设备登录方法
/**
* 设备登录
*
* @param ipadress IP地址
* @param user 用户名
* @param psw 密码
* @param port 端口,默认8000
*/
public static void login_V40(String ipadress, String user, String psw, short port) {
//注册
HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();//设备登录信息
String m_sDeviceIP = ipadress;//设备ip地址
m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];
System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length());
String m_sUsername = user;//设备用户名
m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];
System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length());
String m_sPassword = psw;//设备密码
m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN];
System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length());
m_strLoginInfo.wPort = port; //sdk端口
m_strLoginInfo.bUseAsynLogin = false; //是否异步登录:0- 否,1- 是
m_strLoginInfo.write();
HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息
lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
if (lUserID == -1) {
System.out.println("登录失败,错误码为" + hCNetSDK.NET_DVR_GetLastError());
return;
} else {
System.out.println("登录成功!");
m_strDeviceInfo.read();
iCharEncodeType = m_strDeviceInfo.byCharEncodeType;
return;
}
}