lxw
2023-08-22 3437771db860c4aa9d9b3b72e00a153115a825cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package com.whyc.carCamera.Acs;
 
import com.sun.jna.Pointer;
import com.whyc.carCamera.NetSDKDemo.HCNetSDK;
 
/**
 *身份证禁止名单下发,需要设备支持此功能,例如DS-5604
 * 实现功能:禁止人员名单下发、逐条删除、清空
 */
 
 
public class IDBlockListManage {
    public static FRemoteConfigCallback callback = null;
 
   public static class FRemoteConfigCallback implements HCNetSDK.FRemoteConfigCallBack {
        public void invoke(int dwType, Pointer lpBuffer, int dwBufLen, Pointer pUserData)
        {
            System.err.println("NET_DVR_StartRemoteConfig Callback:" + dwType);
            switch (dwType)
            {
                case 0:
                    HCNetSDK.REMOTECONFIGSTATUS struCfgStatus  = new HCNetSDK.REMOTECONFIGSTATUS();
                    struCfgStatus.write();
                    Pointer pCfgStatus = struCfgStatus.getPointer();
                    pCfgStatus.write(0, lpBuffer.getByteArray(0, struCfgStatus.size()), 0,struCfgStatus.size());
                    struCfgStatus.read();
                    int iStatus = 0;
                    for(int i=0;i<4;i++)
                    {
                        int ioffset = i*8;
                        int iByte = struCfgStatus.byStatus[i]&0xff;
                        iStatus = iStatus + (iByte << ioffset);
                    }
                    switch (iStatus){
                        case 1000:// NET_SDK_CALLBACK_STATUS_SUCCESS
                            System.out.println("下发成功,dwStatus:" + iStatus);
                            break;
                        case 1001:
                            System.out.println("正在下发中,dwStatus:" + iStatus);
                            break;
                        case 1002:
                            int iErrorCode = 0;
                            for(int i=0;i<4;i++)
                            {
                                int ioffset = i*8;
                                int iByte = struCfgStatus.byErrorCode[i]&0xff;
                                iErrorCode = iErrorCode + (iByte << ioffset);
                            }
                            System.err.println("下发失败, dwStatus:" + iStatus + "错误号:" + iErrorCode);
                            break;
                    }
                    break;
                default:
                    break;
            }
        }
 
    }
 
    //逐条下发身份证禁止人员名单
    public static void uploadBlockList(int lUserID) {
 
        HCNetSDK.NET_DVR_UPLOAD_ID_BLOCKLIST_COND startParams = new HCNetSDK.NET_DVR_UPLOAD_ID_BLOCKLIST_COND();
        startParams.read();
        startParams.dwSize = startParams.size();
        startParams.dwBlockListNum = 1;     //下发禁止名单数量
        startParams.write();
 
        if (callback==null)
        {
            FRemoteConfigCallback callback=new FRemoteConfigCallback();
        }
        int lHandle = AcsMain.hCNetSDK.NET_DVR_StartRemoteConfig(lUserID, HCNetSDK.NET_DVR_BULK_UPLOAD_ID_BLOCKLIST, startParams.getPointer(), startParams.size(),callback, Pointer.NULL);
 
        if (lHandle < 0) {
            System.out.println("NET_DVR_StartRemoteConfig失败,错误号:" + AcsMain.hCNetSDK.NET_DVR_GetLastError());
        } else {
            HCNetSDK.NET_DVR_UPLOAD_ID_BLOCKLIST_CFG sendParams = new HCNetSDK.NET_DVR_UPLOAD_ID_BLOCKLIST_CFG();
            sendParams.read();
            sendParams.dwSize = sendParams.size();
 
            sendParams.struIDCardCfg.dwSize = sendParams.struIDCardCfg.size();
            sendParams.byBlockListValid = 1;   //身份证禁止名单是否有效:0-无效,1-有效(用于按身份证号码删除身份证禁止名单,该字段为0时代表删除)
 
            sendParams.struIDCardCfg.byName = "zhansn".getBytes();
 
            sendParams.struIDCardCfg.struBirth.read();
            sendParams.struIDCardCfg.struBirth.wYear = 1994;
            sendParams.struIDCardCfg.struBirth.byMonth = 03;
            sendParams.struIDCardCfg.struBirth.byDay = 02;
 
            sendParams.struIDCardCfg.byAddr = "浙江省杭州市".getBytes();
            sendParams.struIDCardCfg.byIDNum = "1111111111111111".getBytes();
            sendParams.struIDCardCfg.byIssuingAuthority = "浙江省杭州市".getBytes();
 
 
            sendParams.struIDCardCfg.struStartDate.wYear = 2020;
            sendParams.struIDCardCfg.struStartDate.byMonth = 4;
            sendParams.struIDCardCfg.struStartDate.byDay = 20;
            sendParams.struIDCardCfg.struEndDate.wYear = 2022;
            sendParams.struIDCardCfg.struEndDate.byMonth = 4;
            sendParams.struIDCardCfg.struEndDate.byDay = 20;
 
            sendParams.struIDCardCfg.byTermOfValidity = 0;
            sendParams.struIDCardCfg.bySex = 1;
            sendParams.struIDCardCfg.byNation = 1;
            sendParams.byBlockListValid = 1;
            sendParams.write();
            if (!AcsMain.hCNetSDK.NET_DVR_SendRemoteConfig(lHandle, 0x3, sendParams.getPointer(), sendParams.size())) {
                System.err.println("NET_DVR_SendRemoteConfig失败,错误号:" + AcsMain.hCNetSDK.NET_DVR_GetLastError());
            } else {
                System.out.println("NET_DVR_SendRemoteConfig成功");
            }
        }
 
        if (!AcsMain.hCNetSDK.NET_DVR_StopRemoteConfig(lHandle)) {
            System.err.println("NET_DVR_StopRemoteConfig失败,错误号:" + AcsMain.hCNetSDK.NET_DVR_GetLastError());
        } else {
            System.out.println("NET_DVR_StopRemoteConfig成功");
        }
 
    }
 
 
    //清空禁止人员名单
    public static void cleanBlockList(int lUserID) {
        HCNetSDK.NET_DVR_ACS_PARAM_TYPE struAcsParam = new HCNetSDK.NET_DVR_ACS_PARAM_TYPE();
        struAcsParam.read();
        struAcsParam.dwSize = struAcsParam.size();
        struAcsParam.dwParamType = 0x00080000;   //身份证禁止名单参数
        struAcsParam.wLocalControllerID = 0;  // 就地控制器序号。0代表门禁设备
        struAcsParam.write();
        if (!AcsMain.hCNetSDK.NET_DVR_RemoteControl(lUserID, HCNetSDK.NET_DVR_CLEAR_ACS_PARAM, struAcsParam.getPointer(), struAcsParam.size())) {
            System.err.println("清空身份证禁止名单失败,错误码为"+AcsMain.hCNetSDK.NET_DVR_GetLastError());
            return;
        } else {
            System.out.println("清除成功");
        }
    }
}