package com.netsdk.demo.intelligentTraffic.trafficParkingDemo;
|
|
import static com.netsdk.lib.Utils.getOsPrefix;
|
|
import java.io.File;
|
import java.io.UnsupportedEncodingException;
|
|
import javax.swing.JOptionPane;
|
|
import com.netsdk.demo.customize.analyseTaskDemo.AnalyseTaskUtils;
|
import com.netsdk.demo.util.CaseMenu;
|
import com.netsdk.lib.NetSDKLib;
|
import com.netsdk.lib.ToolKits;
|
import com.netsdk.lib.structure.NET_IN_SET_PARKINGRULE_INFO;
|
import com.netsdk.lib.structure.NET_OUT_SET_PARKINGRULE_INFO;
|
import com.sun.jna.Memory;
|
import com.sun.jna.Pointer;
|
import com.netsdk.lib.NetSDKLib.NET_IN_GET_PARKINGLOCK_STATE_INFO;
|
import com.netsdk.lib.NetSDKLib.NET_IN_SET_PARKINGLOCK_STATE_INFO;
|
import com.netsdk.lib.NetSDKLib.NET_OUT_GET_PARKINGLOCK_STATE_INFO;
|
import com.netsdk.lib.NetSDKLib.NET_OUT_SET_PARKINGLOCK_STATE_INFO;
|
import com.netsdk.lib.NetSDKLib.NET_TRAFFIC_LIST_RECORD;
|
import com.netsdk.lib.callback.impl.DefaultDisconnectCallback;
|
import com.netsdk.lib.callback.impl.DefaultHaveReconnectCallBack;
|
import com.netsdk.lib.enumeration.ENUMERROR;
|
|
public class ParkingConfigDemo {
|
// SDk对象初始化
|
public static NetSDKLib netsdk = NetSDKLib.NETSDK_INSTANCE;
|
public static NetSDKLib configsdk = NetSDKLib.CONFIG_INSTANCE;
|
|
// 判断是否初始化
|
private static boolean bInit = false;
|
// 判断log是否打开
|
private static boolean bLogOpen = false;
|
// 设备信息
|
private NetSDKLib.NET_DEVICEINFO_Ex deviceInfo = new NetSDKLib.NET_DEVICEINFO_Ex();
|
// 登录句柄
|
private NetSDKLib.LLong m_hLoginHandle = new NetSDKLib.LLong(0);
|
|
// 回调函数需要是静态的,防止被系统回收
|
// 断线回调
|
private static NetSDKLib.fDisConnect disConnectCB = DefaultDisconnectCallback.getINSTANCE();
|
// 重连回调
|
private static NetSDKLib.fHaveReConnect haveReConnectCB = DefaultHaveReconnectCallBack.getINSTANCE();
|
|
// 编码格式
|
public static String encode;
|
|
// DVR报警输出个数
|
private static int byAlarmOutPortNum;
|
|
static {
|
String osPrefix = getOsPrefix();
|
if (osPrefix.toLowerCase().startsWith("win32-amd64")) {
|
encode = "GBK";
|
} else if (osPrefix.toLowerCase().startsWith("linux-amd64")) {
|
encode = "UTF-8";
|
}
|
}
|
|
/**
|
* 初始化SDK库
|
*/
|
public static boolean Init() {
|
bInit = netsdk.CLIENT_Init(disConnectCB, null);
|
if (!bInit) {
|
System.out.println("Initialize SDK failed");
|
return false;
|
}
|
// 配置日志
|
ParkingConfigDemo.enableLog();
|
|
// 设置断线重连回调接口, 此操作为可选操作,但建议用户进行设置
|
netsdk.CLIENT_SetAutoReconnect(haveReConnectCB, null);
|
|
// 设置登录超时时间和尝试次数,可选
|
// 登录请求响应超时时间设置为3S
|
int waitTime = 3000;
|
// 登录时尝试建立链接 1 次
|
int tryTimes = 1;
|
netsdk.CLIENT_SetConnectTime(waitTime, tryTimes);
|
// 设置更多网络参数, NET_PARAM 的nWaittime , nConnectTryNum 成员与 CLIENT_SetConnectTime
|
// 接口设置的登录设备超时时间和尝试次数意义相同,可选
|
NetSDKLib.NET_PARAM netParam = new NetSDKLib.NET_PARAM();
|
// 登录时尝试建立链接的超时时间
|
netParam.nConnectTime = 10000;
|
// 设置子连接的超时时间
|
netParam.nGetConnInfoTime = 3000;
|
netsdk.CLIENT_SetNetworkParam(netParam);
|
return true;
|
}
|
|
/**
|
* 打开 sdk log
|
*/
|
private static void enableLog() {
|
NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO();
|
File path = new File("sdklog/");
|
if (!path.exists())
|
path.mkdir();
|
|
// 这里的log保存地址依据实际情况自己调整
|
String logPath = path.getAbsoluteFile().getParent() + "\\sdklog\\" + "sdklog" + AnalyseTaskUtils.getDate()
|
+ ".log";
|
setLog.nPrintStrategy = 0;
|
setLog.bSetFilePath = 1;
|
System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length);
|
System.out.println(logPath);
|
setLog.bSetPrintStrategy = 1;
|
bLogOpen = netsdk.CLIENT_LogOpen(setLog);
|
if (!bLogOpen)
|
System.err.println("Failed to open NetSDK log");
|
}
|
|
/**
|
* 高安全登录
|
*/
|
public void loginWithHighLevel() {
|
// 输入结构体参数
|
NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstlnParam = new NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY() {
|
{
|
szIP = m_strIpAddr.getBytes();
|
nPort = m_nPort;
|
szUserName = m_strUser.getBytes();
|
szPassword = m_strPassword.getBytes();
|
}
|
};
|
// 输出结构体参数
|
NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam = new NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY();
|
|
// 写入sdk
|
m_hLoginHandle = netsdk.CLIENT_LoginWithHighLevelSecurity(pstlnParam, pstOutParam);
|
if (m_hLoginHandle.longValue() == 0) {
|
System.err.printf("Login Device[%s] Port[%d]Failed. %s\n", m_strIpAddr, m_nPort,
|
netsdk.CLIENT_GetLastError());
|
} else {
|
deviceInfo = pstOutParam.stuDeviceInfo; // 获取设备信息
|
byAlarmOutPortNum = deviceInfo.byAlarmOutPortNum;
|
System.out.println("Login Success");
|
System.out.println("Device Address:" + m_strIpAddr);
|
System.out.println("设备包含:" + deviceInfo.byChanNum + "个通道");
|
System.out.println("DVR报警输出个数:" + deviceInfo.byAlarmOutPortNum + "个");
|
}
|
}
|
|
/**
|
* 退出
|
*/
|
public void logOut() {
|
if (m_hLoginHandle.longValue() != 0) {
|
netsdk.CLIENT_Logout(m_hLoginHandle);
|
System.out.println("LogOut Success");
|
}
|
}
|
|
/**
|
* 清除 sdk环境
|
*/
|
public static void cleanup() {
|
if (bLogOpen) {
|
netsdk.CLIENT_LogClose();
|
}
|
if (bInit) {
|
netsdk.CLIENT_Cleanup();
|
}
|
}
|
|
/**
|
* 清理并退出
|
*/
|
public static void cleanAndExit() {
|
netsdk.CLIENT_Cleanup();
|
System.exit(0);
|
}
|
|
/**
|
* 获取车位锁状态
|
*/
|
public void getParkingLockState() {
|
NET_IN_GET_PARKINGLOCK_STATE_INFO stuIn = new NET_IN_GET_PARKINGLOCK_STATE_INFO();
|
NET_OUT_GET_PARKINGLOCK_STATE_INFO stuOut = new NET_OUT_GET_PARKINGLOCK_STATE_INFO();
|
if (!netsdk.CLIENT_GetParkingLockState(m_hLoginHandle, stuIn, stuOut, 3000)) {
|
System.err.println("获取车位锁状态失败!" + ToolKits.getErrorCode());
|
return;
|
}
|
|
for (int i = 0; i < stuOut.nStateListNum; ++i) {
|
System.out.printf("车位号:%d 车位锁状态(详见EM_STATE_TYPE):%d \n", stuOut.stuStateList[i].nLane,
|
stuOut.stuStateList[i].emState);
|
}
|
|
}
|
|
/**
|
* 设置车位锁状态
|
*
|
* @param nLane 车位号
|
* @param emState 车位锁状态, 详见EM_STATE_TYPE
|
*/
|
public void setParkingLockState(int nLane, int emState) {
|
|
NET_IN_SET_PARKINGLOCK_STATE_INFO stuIn = new NET_IN_SET_PARKINGLOCK_STATE_INFO();
|
stuIn.nStateListNum = 1;
|
stuIn.stuStateList[0].nLane = nLane;
|
stuIn.stuStateList[0].emState = emState;
|
|
NET_OUT_SET_PARKINGLOCK_STATE_INFO stuOut = new NET_OUT_SET_PARKINGLOCK_STATE_INFO();
|
if (!netsdk.CLIENT_SetParkingLockState(m_hLoginHandle, stuIn, stuOut, 3000)) {
|
System.err.println("设置车位锁状态失败!" + ToolKits.getErrorCode());
|
} else {
|
System.out.println("车位号:" + nLane + " 设置车位锁状态成功!");
|
}
|
}
|
|
/**
|
* 设置停车规则
|
*/
|
public void setParkingRule() {
|
NET_IN_SET_PARKINGRULE_INFO pstInParam = new NET_IN_SET_PARKINGRULE_INFO();
|
pstInParam.nParkingTimeThreshold = 1;// 1s
|
|
NET_OUT_SET_PARKINGRULE_INFO pstOutParam = new NET_OUT_SET_PARKINGRULE_INFO();
|
if (!netsdk.CLIENT_SetParkingRule(m_hLoginHandle, pstInParam, pstOutParam, 3000)) {
|
System.err.println("设置设置停车规则失败!" + ToolKits.getErrorCode());
|
} else {
|
System.out.println("设置设置停车规则成功!");
|
}
|
}
|
|
/**
|
* 报警输出通道配置 三代协议
|
*/
|
public void setAlarmOutInfo() {
|
boolean bRet = false;
|
// 获取报警输出通道个数
|
int nChn = byAlarmOutPortNum;
|
String strCmd = NetSDKLib.CFG_CMD_ALARMOUT;
|
NetSDKLib.CFG_ALARMOUT_INFO alarmOutInfo = new NetSDKLib.CFG_ALARMOUT_INFO();
|
for (int i = 0; i < nChn; i++) {
|
// 获取状态
|
bRet = false;
|
bRet = ToolKits.GetDevConfig(m_hLoginHandle, i, strCmd, alarmOutInfo); // 获取单个通道的信息
|
if (bRet) {
|
System.out.println("nChannelID : " + alarmOutInfo.nChannelID);
|
System.out.println("nOutputMode : " + alarmOutInfo.nOutputMode);
|
}
|
|
// 设置
|
bRet = false;
|
alarmOutInfo.nChannelID = i;
|
if (alarmOutInfo.nChannelID == 0) {
|
alarmOutInfo.nOutputMode = 1;
|
} else if (alarmOutInfo.nChannelID == 1) {
|
alarmOutInfo.nOutputMode = 0;
|
}
|
|
bRet = ToolKits.SetDevConfig(m_hLoginHandle, i, strCmd, alarmOutInfo); // 设置单个通道的信息
|
if (bRet) {
|
System.out.println("Set Succeed!");
|
}
|
}
|
}
|
|
/**
|
* 车牌号查询--建议使用模糊查询
|
*/
|
public void queryListByPlateNumber() {
|
// 开始查询记录
|
NetSDKLib.NET_IN_FIND_RECORD_PARAM stuFindInParam = new NetSDKLib.NET_IN_FIND_RECORD_PARAM();
|
if (flg) {
|
stuFindInParam.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICREDLIST;// 允许名单
|
} else {
|
stuFindInParam.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICBLACKLIST;// 禁止名单
|
}
|
|
NetSDKLib.FIND_RECORD_TRAFFICREDLIST_CONDITION stuRedListCondition = new NetSDKLib.FIND_RECORD_TRAFFICREDLIST_CONDITION();
|
stuFindInParam.pQueryCondition = stuRedListCondition.getPointer();
|
String szPlateNumber = "川A12345";
|
|
try {
|
System.arraycopy(szPlateNumber.getBytes(encode), 0, stuRedListCondition.szPlateNumber, 0,
|
szPlateNumber.getBytes(encode).length);
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
|
NetSDKLib.NET_OUT_FIND_RECORD_PARAM stuFindOutParam = new NetSDKLib.NET_OUT_FIND_RECORD_PARAM();
|
|
stuRedListCondition.write();
|
boolean bRet = netsdk.CLIENT_FindRecord(m_hLoginHandle, stuFindInParam, stuFindOutParam, 5000);
|
stuRedListCondition.read();
|
System.out.println("FindRecord Succeed" + "\n" + "FindHandle :" + stuFindOutParam.lFindeHandle);
|
if (bRet) {
|
int nRecordCount = 10;
|
NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM stuFindNextInParam = new NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM();
|
stuFindNextInParam.lFindeHandle = stuFindOutParam.lFindeHandle;
|
stuFindNextInParam.nFileCount = nRecordCount; // 想查询的记录条数
|
|
NetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM stuFindNextOutParam = new NetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM();
|
stuFindNextOutParam.nMaxRecordNum = nRecordCount;
|
NetSDKLib.NET_TRAFFIC_LIST_RECORD pstRecord = new NetSDKLib.NET_TRAFFIC_LIST_RECORD();
|
stuFindNextOutParam.pRecordList = pstRecord.getPointer();
|
|
pstRecord.write();
|
boolean zRet = netsdk.CLIENT_FindNextRecord(stuFindNextInParam, stuFindNextOutParam, 5000);
|
pstRecord.read();
|
|
if (zRet) {
|
System.out.println("record are found!");
|
|
for (int i = 0; i < stuFindNextOutParam.nRetRecordNum; i++) {
|
System.out.println("序号:------" + i + "---------");
|
try {
|
System.out.println("车牌号:" + new String(pstRecord.szPlateNumber, encode).trim());
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
System.out.println("开始时间:" + pstRecord.stBeginTime.toStringTime());
|
System.out.println("撤销时间:" + pstRecord.stCancelTime.toStringTime());
|
if (flg) {
|
if (pstRecord.stAuthrityTypes[0].bAuthorityEnable==1) {
|
System.out.println("开闸模式:授权");
|
} else {
|
System.out.println("开闸模式:不授权");
|
}
|
} else {
|
System.out.println("车牌类型:" + pstRecord.emPlateType);
|
System.out.println("布控类型:" + pstRecord.emControlType);
|
}
|
|
}
|
}
|
|
netsdk.CLIENT_FindRecordClose(stuFindOutParam.lFindeHandle);
|
} else {
|
System.err.println("Can Not Find This Record" + String.format("0x%x", netsdk.CLIENT_GetLastError()));
|
}
|
}
|
|
/**
|
* 车牌号模糊查询允许名单
|
*/
|
public void queryListByPlateNumberEx() {
|
NetSDKLib.NET_IN_FIND_RECORD_PARAM stuFindInParam = new NetSDKLib.NET_IN_FIND_RECORD_PARAM();
|
if (flg) {
|
stuFindInParam.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICREDLIST;// 允许名单
|
} else {
|
stuFindInParam.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICBLACKLIST;// 禁止名单
|
}
|
|
NetSDKLib.FIND_RECORD_TRAFFICREDLIST_CONDITION stuRedListConditionEx = new NetSDKLib.FIND_RECORD_TRAFFICREDLIST_CONDITION();
|
stuFindInParam.pQueryCondition = stuRedListConditionEx.getPointer();
|
ToolKits.ByteArrZero(stuRedListConditionEx.szPlateNumberVague);
|
String szPlateNumberVague = "";
|
try {
|
System.arraycopy(szPlateNumberVague.getBytes(encode), 0, stuRedListConditionEx.szPlateNumberVague, 0,
|
szPlateNumberVague.getBytes(encode).length);
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
|
NetSDKLib.NET_OUT_FIND_RECORD_PARAM stuFindOutParam = new NetSDKLib.NET_OUT_FIND_RECORD_PARAM();
|
|
stuRedListConditionEx.write();
|
boolean bRet = netsdk.CLIENT_FindRecord(m_hLoginHandle, stuFindInParam, stuFindOutParam, 10000);
|
stuRedListConditionEx.read();
|
|
if (bRet) {
|
int doNextCount = 0;
|
while (true) {
|
int nRecordCount = 10;
|
NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM stuFindNextInParam = new NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM();
|
stuFindNextInParam.lFindeHandle = stuFindOutParam.lFindeHandle;
|
stuFindNextInParam.nFileCount = nRecordCount;
|
|
NetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM stuFindNextOutParam = new NetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM();
|
stuFindNextOutParam.nMaxRecordNum = nRecordCount;
|
NetSDKLib.NET_TRAFFIC_LIST_RECORD pstRecordEx = new NetSDKLib.NET_TRAFFIC_LIST_RECORD();
|
stuFindNextOutParam.pRecordList = new Memory(pstRecordEx.dwSize * nRecordCount); // 分配(stRecordEx.dwSize
|
// *
|
// nRecordCount)个内存
|
|
// 把内存里的dwSize赋值
|
for (int i = 0; i < stuFindNextOutParam.nMaxRecordNum; ++i) {
|
ToolKits.SetStructDataToPointer(pstRecordEx, stuFindNextOutParam.pRecordList,
|
i * pstRecordEx.dwSize);
|
}
|
|
pstRecordEx.write();
|
boolean zRet = netsdk.CLIENT_FindNextRecord(stuFindNextInParam, stuFindNextOutParam, 10000);
|
pstRecordEx.read();
|
|
if (zRet) {
|
System.out.println("查询到的个数:" + stuFindNextOutParam.nRetRecordNum);
|
for (int i = 0; i < stuFindNextOutParam.nRetRecordNum; i++) {
|
System.out.println("序号:------" + i + "---------");
|
ToolKits.GetPointerDataToStruct(stuFindNextOutParam.pRecordList, i * pstRecordEx.dwSize,
|
pstRecordEx);
|
try {
|
System.out.println("车牌号:" + new String(pstRecordEx.szPlateNumber, encode).trim());
|
System.out.println("车主:" + new String(pstRecordEx.szMasterOfCar, encode).trim());
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
System.out.println("开始时间:" + pstRecordEx.stBeginTime.toStringTime());
|
System.out.println("撤销时间:" + pstRecordEx.stCancelTime.toStringTime());
|
if (flg) {
|
if (pstRecordEx.stAuthrityTypes[0].bAuthorityEnable==1) {
|
System.out.println("开闸模式:授权");
|
} else {
|
System.out.println("开闸模式:不授权");
|
}
|
} else {
|
System.out.println("车牌类型:" + pstRecordEx.emPlateType);
|
System.out.println("布控类型:" + pstRecordEx.emControlType);
|
}
|
|
}
|
|
if (stuFindNextOutParam.nRetRecordNum < nRecordCount) {
|
break;
|
} else {
|
doNextCount++;
|
}
|
} else {
|
break;
|
}
|
}
|
netsdk.CLIENT_FindRecordClose(stuFindOutParam.lFindeHandle);
|
} else {
|
System.err.println("Can Not Find This Record" + String.format("0x%x", netsdk.CLIENT_GetLastError()));
|
}
|
}
|
|
/**
|
* 添加名单
|
*/
|
public void addOperate() {
|
NetSDKLib.NET_INSERT_RECORD_INFO stInsertInfo = new NetSDKLib.NET_INSERT_RECORD_INFO(); // 添加
|
|
NetSDKLib.NET_TRAFFIC_LIST_RECORD.ByReference stRec = new NetSDKLib.NET_TRAFFIC_LIST_RECORD.ByReference();
|
// 车牌号
|
String szPlateNumber = "浙A66666";
|
// 车主姓名
|
String szName = "刘先生";
|
|
try {
|
System.arraycopy(szPlateNumber.getBytes(encode), 0, stRec.szPlateNumber, 0,
|
szPlateNumber.getBytes(encode).length);
|
System.arraycopy(szName.getBytes(encode), 0, stRec.szMasterOfCar, 0,
|
szName.getBytes(encode).length);
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
stRec.stBeginTime.dwYear = 2021;
|
stRec.stBeginTime.dwMonth = 6;
|
stRec.stBeginTime.dwDay = 1;
|
stRec.stBeginTime.dwHour = 0;
|
stRec.stBeginTime.dwMinute = 0;
|
stRec.stBeginTime.dwSecond = 0;
|
stRec.stCancelTime.dwYear = 2021;
|
stRec.stCancelTime.dwMonth = 6;
|
stRec.stCancelTime.dwDay = 2;
|
stRec.stCancelTime.dwHour = 0;
|
stRec.stCancelTime.dwMinute = 0;
|
stRec.stCancelTime.dwSecond = 0;
|
if (flg) {
|
// 允许名单权限列表
|
stRec.nAuthrityNum = 1;
|
stRec.stAuthrityTypes[0].emAuthorityType = 1;
|
stRec.stAuthrityTypes[0].bAuthorityEnable = 1;
|
} else {
|
// 禁止名单布控类型
|
stRec.emControlType = 1;
|
stRec.emPlateType = 1;
|
}
|
|
stInsertInfo.pRecordInfo = stRec;
|
|
NetSDKLib.NET_IN_OPERATE_TRAFFIC_LIST_RECORD stInParam = new NetSDKLib.NET_IN_OPERATE_TRAFFIC_LIST_RECORD();
|
stInParam.emOperateType = NetSDKLib.EM_RECORD_OPERATE_TYPE.NET_TRAFFIC_LIST_INSERT;
|
if (flg) {
|
stInParam.emRecordType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICREDLIST;// 交通允许名单账户记录
|
} else {
|
stInParam.emRecordType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICBLACKLIST;// 交通禁止名单账号记录
|
}
|
|
stInParam.pstOpreateInfo = stInsertInfo.getPointer();
|
|
NetSDKLib.NET_OUT_OPERATE_TRAFFIC_LIST_RECORD stOutParam = new NetSDKLib.NET_OUT_OPERATE_TRAFFIC_LIST_RECORD();
|
stRec.write();
|
stInsertInfo.write();
|
stInParam.write();
|
|
boolean zRet = netsdk.CLIENT_OperateTrafficList(m_hLoginHandle, stInParam, stOutParam, 5000);
|
if (zRet) {
|
stInParam.read();
|
System.out.println("succeed!");
|
} else {
|
System.err.println("failed!" + String.format("0x%x", netsdk.CLIENT_GetLastError()));
|
}
|
}
|
|
/**
|
* 查询之前的记录号
|
*/
|
public void findRecordCount() {
|
// 开始查询记录
|
NetSDKLib.NET_IN_FIND_RECORD_PARAM stuFindInParam = new NetSDKLib.NET_IN_FIND_RECORD_PARAM();
|
if (flg) {
|
stuFindInParam.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICREDLIST; // 允许名单
|
} else {
|
stuFindInParam.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICBLACKLIST; // 禁止名单
|
}
|
|
NetSDKLib.FIND_RECORD_TRAFFICREDLIST_CONDITION stuRedListCondition = new NetSDKLib.FIND_RECORD_TRAFFICREDLIST_CONDITION();
|
stuFindInParam.pQueryCondition = stuRedListCondition.getPointer();
|
// 获取选中行的车牌号
|
String szPlateNumber = "浙A66666";
|
try {
|
System.arraycopy(szPlateNumber.getBytes(encode), 0, stuRedListCondition.szPlateNumber, 0,
|
szPlateNumber.getBytes(encode).length);
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
|
NetSDKLib.NET_OUT_FIND_RECORD_PARAM stuFindOutParam = new NetSDKLib.NET_OUT_FIND_RECORD_PARAM();
|
|
stuFindInParam.write();
|
stuRedListCondition.write();
|
boolean bRet = netsdk.CLIENT_FindRecord(m_hLoginHandle, stuFindInParam, stuFindOutParam, 5000);
|
stuRedListCondition.read();
|
stuFindInParam.read();
|
|
if (bRet) {
|
int nRecordCount = 1;
|
|
NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM stuFindNextInParam = new NetSDKLib.NET_IN_FIND_NEXT_RECORD_PARAM();
|
stuFindNextInParam.lFindeHandle = stuFindOutParam.lFindeHandle;
|
stuFindNextInParam.nFileCount = nRecordCount; // 想查询的记录条数
|
|
NetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM stuFindNextOutParam = new NetSDKLib.NET_OUT_FIND_NEXT_RECORD_PARAM();
|
stuFindNextOutParam.nMaxRecordNum = nRecordCount;
|
NetSDKLib.NET_TRAFFIC_LIST_RECORD pstRecord = new NetSDKLib.NET_TRAFFIC_LIST_RECORD();
|
stuFindNextOutParam.pRecordList = pstRecord.getPointer();
|
|
stuFindNextInParam.write();
|
stuFindNextOutParam.write();
|
pstRecord.write();
|
boolean zRet = netsdk.CLIENT_FindNextRecord(stuFindNextInParam, stuFindNextOutParam, 5000);
|
pstRecord.read();
|
stuFindNextInParam.read();
|
stuFindNextOutParam.read();
|
|
if (zRet) {
|
// 获取当前记录号
|
nNo = pstRecord.nRecordNo;
|
System.out.println("获取当前记录号:" + nNo);
|
}
|
// 停止查询
|
netsdk.CLIENT_FindRecordClose(stuFindOutParam.lFindeHandle);
|
} else {
|
System.err.println("error occured!" + String.format("0x%x", netsdk.CLIENT_GetLastError()));
|
}
|
}
|
|
/**
|
* 根据之前业务号删除禁止允许名单
|
*/
|
public void deleteOperate() {
|
// 获得之前查询到的记录号
|
findRecordCount();
|
|
// 删除数据
|
NetSDKLib.NET_REMOVE_RECORD_INFO stRemoveInfo = new NetSDKLib.NET_REMOVE_RECORD_INFO();
|
stRemoveInfo.nRecordNo = nNo;
|
|
NetSDKLib.NET_IN_OPERATE_TRAFFIC_LIST_RECORD stInParam = new NetSDKLib.NET_IN_OPERATE_TRAFFIC_LIST_RECORD();
|
stInParam.emOperateType = NetSDKLib.EM_RECORD_OPERATE_TYPE.NET_TRAFFIC_LIST_REMOVE;
|
if (flg) {
|
stInParam.emRecordType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICREDLIST; // 允许名单
|
} else {
|
stInParam.emRecordType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICBLACKLIST; // 禁止名单
|
}
|
|
stInParam.pstOpreateInfo = stRemoveInfo.getPointer();
|
NetSDKLib.NET_OUT_OPERATE_TRAFFIC_LIST_RECORD stOutParam = new NetSDKLib.NET_OUT_OPERATE_TRAFFIC_LIST_RECORD();
|
|
stInParam.write();
|
stRemoveInfo.write();
|
boolean zRet = netsdk.CLIENT_OperateTrafficList(m_hLoginHandle, stInParam, stOutParam, 5000);
|
if (zRet) {
|
System.out.println("succeed!");
|
} else {
|
System.err.println("failed!" + String.format("0x%x", netsdk.CLIENT_GetLastError()));
|
}
|
}
|
|
/**
|
* 根据之前业务号修改禁止允许名单
|
*/
|
public void modifyOperate() {
|
// 获得之前查询到的记录号
|
findRecordCount();
|
|
// 修改数据
|
NetSDKLib.NET_TRAFFIC_LIST_RECORD.ByReference stRec = new NetSDKLib.NET_TRAFFIC_LIST_RECORD.ByReference();
|
// 车牌号
|
String szPlateNumber = "浙A77776";
|
// 车主姓名
|
String szName = "李先生";
|
|
try {
|
System.arraycopy(szPlateNumber.getBytes(encode), 0, stRec.szPlateNumber, 0,
|
szPlateNumber.getBytes(encode).length);
|
System.arraycopy(szName.getBytes(encode), 0, stRec.szMasterOfCar, 0,
|
szName.getBytes(encode).length);
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
stRec.stBeginTime.dwYear = 2021;
|
stRec.stBeginTime.dwMonth = 6;
|
stRec.stBeginTime.dwDay = 1;
|
stRec.stBeginTime.dwHour = 0;
|
stRec.stBeginTime.dwMinute = 3;
|
stRec.stBeginTime.dwSecond = 12;
|
stRec.stCancelTime.dwYear = 2021;
|
stRec.stCancelTime.dwMonth = 6;
|
stRec.stCancelTime.dwDay = 2;
|
stRec.stCancelTime.dwHour = 0;
|
stRec.stCancelTime.dwMinute = 0;
|
stRec.stCancelTime.dwSecond = 12;
|
if (flg) {
|
// 允许名单权限列表
|
stRec.nAuthrityNum = 1;
|
stRec.stAuthrityTypes[0].emAuthorityType = 1;
|
stRec.stAuthrityTypes[0].bAuthorityEnable = 0;
|
} else {
|
// 禁止名单布控类型
|
stRec.emControlType = 1;
|
stRec.emPlateType = 2;
|
}
|
|
stRec.nRecordNo = nNo;
|
|
NetSDKLib.NET_UPDATE_RECORD_INFO stUpdateInfo = new NetSDKLib.NET_UPDATE_RECORD_INFO();
|
stUpdateInfo.pRecordInfo = stRec;
|
|
NetSDKLib.NET_IN_OPERATE_TRAFFIC_LIST_RECORD stInParam = new NetSDKLib.NET_IN_OPERATE_TRAFFIC_LIST_RECORD();
|
stInParam.emOperateType = NetSDKLib.EM_RECORD_OPERATE_TYPE.NET_TRAFFIC_LIST_UPDATE;
|
if (flg) {
|
stInParam.emRecordType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICREDLIST;// 交通允许名单账户记录
|
} else {
|
stInParam.emRecordType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICBLACKLIST; // 交通禁止名单账号记录
|
}
|
|
stInParam.pstOpreateInfo = stUpdateInfo.getPointer();
|
NetSDKLib.NET_OUT_OPERATE_TRAFFIC_LIST_RECORD stOutParam = new NetSDKLib.NET_OUT_OPERATE_TRAFFIC_LIST_RECORD();
|
|
stRec.write();
|
stUpdateInfo.write();
|
stInParam.write();
|
boolean zRet = netsdk.CLIENT_OperateTrafficList(m_hLoginHandle, stInParam, stOutParam, 5000);
|
if (zRet) {
|
System.out.println("succeed!");
|
} else {
|
System.err.println("failed!" + String.format("0x%x", netsdk.CLIENT_GetLastError()));
|
}
|
}
|
|
/**
|
* 全部删除
|
*/
|
public void alldeleteOperate() {
|
int type = NetSDKLib.CtrlType.CTRLTYPE_CTRL_RECORDSET_CLEAR;
|
NetSDKLib.NET_CTRL_RECORDSET_PARAM param = new NetSDKLib.NET_CTRL_RECORDSET_PARAM();
|
if (flg) {
|
param.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICREDLIST;
|
} else {
|
param.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICBLACKLIST;
|
}
|
param.write();
|
boolean zRet = netsdk.CLIENT_ControlDevice(m_hLoginHandle, type, param.getPointer(), 5000);
|
if (zRet) {
|
System.out.println("全部删除成功");
|
} else {
|
System.err.println("全部删除失败" + String.format("0x%x", netsdk.CLIENT_GetLastError()));
|
}
|
}
|
|
/**
|
* 批量导入禁止允许名单,导入时车牌号不能重复
|
*/
|
public void importRecordList() {
|
// 操作
|
int type = NetSDKLib.CtrlType.CTRLTYPE_CTRL_RECORDSET_IMPORT;
|
NetSDKLib.NET_CTRL_RECORDSET_PARAM param = new NetSDKLib.NET_CTRL_RECORDSET_PARAM();
|
// 类型
|
if(flg) {
|
param.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICREDLIST;// 允许名单
|
}else {
|
param.emType = NetSDKLib.EM_NET_RECORD_TYPE.NET_RECORD_TRAFFICBLACKLIST;// 禁止名单
|
}
|
|
NET_TRAFFIC_LIST_RECORD[] importlist = new NET_TRAFFIC_LIST_RECORD[2];
|
NetSDKLib.NET_TRAFFIC_LIST_RECORD stRec = new NetSDKLib.NET_TRAFFIC_LIST_RECORD();
|
// 车牌号
|
String szPlateNumber = "浙A77779";
|
// 车主姓名
|
String szName = "李先生";
|
|
try {
|
System.arraycopy(szPlateNumber.getBytes(encode), 0, stRec.szPlateNumber, 0,
|
szPlateNumber.getBytes(encode).length);
|
System.arraycopy(szName.getBytes(encode), 0, stRec.szMasterOfCar, 0,
|
szName.getBytes(encode).length);
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
stRec.stBeginTime.dwYear = 2021;
|
stRec.stBeginTime.dwMonth = 6;
|
stRec.stBeginTime.dwDay = 1;
|
stRec.stBeginTime.dwHour = 0;
|
stRec.stBeginTime.dwMinute = 3;
|
stRec.stBeginTime.dwSecond = 12;
|
stRec.stCancelTime.dwYear = 2021;
|
stRec.stCancelTime.dwMonth = 6;
|
stRec.stCancelTime.dwDay = 2;
|
stRec.stCancelTime.dwHour = 0;
|
stRec.stCancelTime.dwMinute = 0;
|
stRec.stCancelTime.dwSecond = 12;
|
if (flg) { // 允许名单权限列表 stRec.nAuthrityNum = 1;
|
stRec.stAuthrityTypes[0].emAuthorityType = 1;
|
stRec.stAuthrityTypes[0].bAuthorityEnable = 0;
|
} else { // 禁止名单布控类型
|
stRec.emControlType = 1;
|
stRec.emPlateType = 2;
|
}
|
importlist[0] = stRec;
|
|
NetSDKLib.NET_TRAFFIC_LIST_RECORD stRec1 = new NetSDKLib.NET_TRAFFIC_LIST_RECORD();
|
// 车牌号
|
String szPlateNumber1 = "浙A77780";
|
// 车主姓名
|
String szName1 = "李先生";
|
|
try {
|
System.arraycopy(szPlateNumber1.getBytes(encode), 0, stRec1.szPlateNumber, 0,
|
szPlateNumber1.getBytes(encode).length);
|
System.arraycopy(szName1.getBytes(encode), 0, stRec1.szMasterOfCar, 0,
|
szName1.getBytes(encode).length);
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
stRec1.stBeginTime.dwYear = 2021;
|
stRec1.stBeginTime.dwMonth = 6;
|
stRec1.stBeginTime.dwDay = 1;
|
stRec1.stBeginTime.dwHour = 0;
|
stRec1.stBeginTime.dwMinute = 3;
|
stRec1.stBeginTime.dwSecond = 12;
|
stRec1.stCancelTime.dwYear = 2021;
|
stRec1.stCancelTime.dwMonth = 6;
|
stRec1.stCancelTime.dwDay = 2;
|
stRec1.stCancelTime.dwHour = 0;
|
stRec1.stCancelTime.dwMinute = 0;
|
stRec1.stCancelTime.dwSecond = 12;
|
importlist[1] = stRec1;
|
|
int MemorySize = importlist[0].size() * importlist.length;
|
Pointer pointer = new Memory(MemorySize);
|
ToolKits.SetStructArrToPointerData(importlist, pointer);
|
|
param.pBuf = pointer;
|
param.nBufLen = MemorySize;
|
param.write();
|
|
boolean zRet = netsdk.CLIENT_ControlDevice(m_hLoginHandle, type, param.getPointer(), 5000);
|
param.read();
|
if (zRet) {
|
System.out.println("全部导入成功");
|
} else {
|
System.err.println("全部导入失败" + ENUMERROR.getErrorMessage());
|
}
|
}
|
|
/******************************** 测试控制台 ***************************************/
|
|
// 配置登陆地址,端口,用户名,密码
|
private String m_strIpAddr = "171.5.27.84";
|
private int m_nPort = 37777;
|
private String m_strUser = "admin";
|
private String m_strPassword = "admin123";
|
// 当前记录号(用于禁止允许名单的删除,更新)
|
private int nNo = 0;
|
// 用于管理操作禁止允许名单,允许名单-true 禁止名单 -false 默认为true
|
private boolean flg = false;
|
|
public static void main(String[] args) {
|
ParkingConfigDemo demo = new ParkingConfigDemo();
|
demo.InitTest();
|
demo.RunTest();
|
demo.EndTest();
|
|
}
|
|
/**
|
* 初始化测试
|
*/
|
public void InitTest() {
|
ParkingConfigDemo.Init();
|
this.loginWithHighLevel();
|
}
|
|
/**
|
* 加载测试内容
|
*/
|
public void RunTest() {
|
CaseMenu menu = new CaseMenu();
|
menu.addItem(new CaseMenu.Item(this, "获取车位锁状态", "getParkingLockState"));
|
menu.addItem(new CaseMenu.Item(this, "设置车位锁状态", "setParkingLockState"));
|
|
menu.addItem(new CaseMenu.Item(this, "设置停车规则", "setParkingRule"));
|
|
menu.addItem(new CaseMenu.Item(this, "报警输出通道配置", "setAlarmOutInfo"));
|
|
menu.addItem(new CaseMenu.Item(this, "车牌号查询禁止允许名单", "queryListByPlateNumber"));
|
menu.addItem(new CaseMenu.Item(this, "车牌号模糊查询禁止允许名单", "queryListByPlateNumberEx"));
|
menu.addItem(new CaseMenu.Item(this, "根据车牌号查询之前记录号", "findRecordCount"));
|
menu.addItem(new CaseMenu.Item(this, "添加禁止允许名单", "addOperate"));
|
menu.addItem(new CaseMenu.Item(this, "删除禁止允许名单", "deleteOperate"));
|
menu.addItem(new CaseMenu.Item(this, "修改禁止允许名单", "modifyOperate"));
|
menu.addItem(new CaseMenu.Item(this, "全部删除禁止允许名单", "alldeleteOperate"));
|
menu.addItem(new CaseMenu.Item(this, "批量导入禁止允许名单", "importRecordList"));
|
|
menu.run();
|
}
|
|
/**
|
* 结束测试
|
*/
|
public void EndTest() {
|
System.out.println("End Test");
|
this.logOut(); // 退出
|
System.out.println("See You...");
|
ParkingConfigDemo.cleanAndExit(); // 清理资源并退出
|
}
|
|
/******************************** 结束 ***************************************/
|
}
|