海康门禁C# demo-开,关,常开,常关,授权,清权

时间:2025-02-14 18:16:56

c#xdemo海康门禁-开,关,常开,常关,授权,清权C

欢迎使用海康c#xdemo

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

using System;
using ;
using ;
using ;
using ;
using ;

namespace AccessBusiness
{
    public class HIV
    {
        /// <summary>
        /// 初始化门禁SDK
        /// </summary>
        /// <returns>true:成功 false:失败</returns>
        public static bool InitialSDK()
        {
            // 初始化SDK
            bool bInit = CHCNetSDK.NET_DVR_Init();
            if (!bInit)
            {
                // 初始化失败
                ("海康门禁SDK初始化失败 !");
            }
            else
            {
                ("海康门禁SDK初始化成功!");
            }
            return bInit;
        }

        /// <summary>
        /// 实例化对象
        /// </summary>
        /// <param name="sLoginName">登陆名</param>
        /// <param name="sPwd">密码</param>
        /// <param name="sIP">IP</param>
        /// <param name="sPort">端口号</param>
        public HIV(string sLoginName, string sPwd, string sIP, ushort uPort)
        {
             = sLoginName;
             = sPwd;
             = sIP;
             = uPort;
        }

        #region 属性
        /// <summary>
        /// 登陆名
        /// </summary>
        public string LoginName { get; set; }

        /// <summary>
        /// 密码
        /// </summary>
        public string Pwd { get; set; }

        /// <summary>
        /// IP
        /// </summary>
        public string IP { get; set; }

        /// <summary>
        /// 端口号
        /// </summary>
        public ushort Port { get; set; }

        /// <summary>
        /// 门序号
        /// </summary>
        public int GateWayIndex { get; set; }


        private uint _OperationType = 5;
        /// <summary>
        /// 0- 关闭,1- 打开,2- 常开,3- 常关,4- 授权,5- 清除权限
        /// </summary>
        public uint OperationType
        {
            get { return this._OperationType; }
            set { this._OperationType = value; }
        }

        /// <summary>
        /// 用户登陆后的ID
        /// </summary>
        private int LoginUserID;
        #endregion


        /// <summary>
        /// 门操作
        /// </summary>
        /// <param name="uType">0- 关闭,1- 打开,2- 常开,3- 常关 </param>
        /// <param name="iGateWayIndex">门序号</param>
        /// <returns>true:成功 false:失败</returns>
        public bool Operate(uint uType, int iGateWayIndex)
        {
            // 获取文字信息时使用
             = uType;

            bool bResult = Login(out );
            if (bResult)
            {
                bResult = CHCNetSDK.NET_DVR_ControlGateway(, iGateWayIndex, uType);
                bResult = CheckAndRecord("NET_DVR_ControlGateway");
                ();
            }
            return bResult;
        }

        /// <summary>
        /// 清除门禁控制器中所有卡
        /// </summary>
        public bool DelAllCard()
        {
            bool bResult = (out );
            NET_DVR_ACS_PARAM_TYPE struAcsParam = new NET_DVR_ACS_PARAM_TYPE();
             = (uint)(struAcsParam);
             |= 1 << 12;

            uint dwSize = (uint)(struAcsParam);
            IntPtr ptrAcsParam = ((int)dwSize);
            (struAcsParam, ptrAcsParam, false);
            bResult = CHCNetSDK.NET_DVR_RemoteControl(, 2118, ptrAcsParam, dwSize);
            ("NET_DVR_RemoteControl");
            (ptrAcsParam);
            ();
            return bResult;
        }

        /// <summary>
        /// 权限设置(测试中卡过期后仍然可以刷开门,需要清除权限)
        /// </summary>
        /// <param name="iDoorNum">门编号</param>
        /// <param name="sCardNo">卡号</param>
        /// <param name="flag">0:授权 1:清除权限</param>
        /// <param name="beginTime">开始时间(卡有效期)</param>
        /// <param name="endTime">截止时间(卡有效期)</param>
        /// <returns>true:成功 false:失败</returns>
        public bool Authority(int iDoorNum, string sCardNo, int flag, DateTime beginTime, DateTime endTime)
        {
             = iDoorNum;
            bool bResult = (out );
            if (!bResult)
            {
                // 登陆失败
                return false;
            }

            // 卡设置
            NET_DVR_CARD_CFG_COND lpInBuffer = new NET_DVR_CARD_CFG_COND();
             = 1;
             = new byte[31];
             = 1;
             = (uint)(lpInBuffer);

            // 回调实例
            fRemoteConfigCallback callback = new fRemoteConfigCallback(
                (dwType, lpBuffer, dwBufLen, pUserData) =>
                {

                }
                );

            IntPtr lpInBufferPtr = ((lpInBuffer));
            (lpInBuffer, lpInBufferPtr, false);

            // 打开长连接
            int iResult = CHCNetSDK.NET_DVR_StartRemoteConfig(, CHCNetSDK.NET_DVR_SET_CARD_CFG, lpInBufferPtr, , callback, );
            bResult = CheckAndRecord("NET_DVR_StartRemoteConfig");
            if (!bResult)
            {
                (lpInBufferPtr);

                // 启动长连接失败
                return false;
            }

            NET_DVR_TIME_EX begin = new NET_DVR_TIME_EX();
             = (ushort);
             = (byte);
             = (byte);
             = (byte);
             = (byte);
             = (byte);

            NET_DVR_TIME_EX end = new NET_DVR_TIME_EX();
             = (ushort);
             = (byte);
             = (byte);
             = (byte);
             = (byte);
             = (byte);

            NET_DVR_VALID_PERIOD_CFG struValid = new NET_DVR_VALID_PERIOD_CFG();
             = begin;
             = end;
             = 1;
            struValid.byRes1 = new byte[3];
            struValid.byRes2 = new byte[32];

            // 卡信息
            NET_DVR_CARD_CFG pSendBuf = new NET_DVR_CARD_CFG();
             = struValid;
             = new byte[32];
            byte[] byTempCardNo = new byte[32];
            byTempCardNo = .(sCardNo);
            for (int i = 0; i < ; i++)
            {
                [i] = byTempCardNo[i];
            }

             = 1;
             = 1;
             = 1023;

             = 0;
            pSendBuf.byRes1 = 0;
             = 0;
             = 0;
             = new byte[8];
             = new byte[128];

            int index = iDoorNum - 1;

            for (int i = 0; i < 32; i++)
            {
                // 最多32个门
                if (i == index)
                {
                    // 当前门个数
                     |= (uint)(1 << i);
                    [i * 4] = 1;
                    if (flag == 1)
                    {
                        // 清除权限
                        // = 0;
                        [i * 4] = 0;
                       //  = 0;
                    }
                }
            }
             = 0;
             = 0;
             = 0;
            pSendBuf.byRes2 = new byte[32];

            int iDwSize = (pSendBuf);
             = (uint)iDwSize;
            IntPtr pSendBufPtr = (iDwSize);
            (pSendBuf, pSendBufPtr, false);

            bResult = CHCNetSDK.NET_DVR_SendRemoteConfig(iResult, 3, pSendBufPtr, );

            bResult = CheckAndRecord("NET_DVR_SendRemoteConfig");
            if (!bResult)
            {
                (lpInBufferPtr);
                (pSendBufPtr);

                return false;
            }

            bResult = CHCNetSDK.NET_DVR_StopRemoteConfig(iResult);
            bResult = CheckAndRecord("NET_DVR_StopRemoteConfig");
            if (!bResult)
            {
                (lpInBufferPtr);
                (pSendBufPtr);

                // 停止长连接失败
                return false;
            }
            (lpInBufferPtr);
            (pSendBufPtr);

            ();
            (("卡号:{0},门序号:{1},开始时间:{2},结束时间:{3}", sCardNo, index, beginTime, endTime));

            return bResult;
        }

        /// <summary>
        /// 登陆门禁
        /// </summary>
        /// <returns>true:登陆成功 false:登陆失败</returns>
        private bool Login(out int iUserID)
        {
            CHCNetSDK.NET_DVR_DEVICEINFO deviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO();
            iUserID = CHCNetSDK.NET_DVR_Login(, , , , ref deviceInfo);
            return CheckAndRecord("NET_DVR_Login");
        }

        /// <summary>
        /// 检查并记录
        /// </summary>
        /// <returns>true:成功 false:失败</returns>
        private bool CheckAndRecord(string sAPIName = "")
        {
            // 获取错误信息
            uint errorCode = CHCNetSDK.NET_DVR_GetLastError();
            if (errorCode != 0)
            {
                (("ErrorCode:{0},接口名:{1} \r\n {2}", errorCode, sAPIName, ()));
                return false;
            }
            else
            {
                (("接口名:{0},\r\n {1}", sAPIName, ()));
                return true;
            }
        }

        public override string ToString()
        {
            return ("用户名:{0},密码:{1},IP:{2},端口:{3},门序号:{4},操作类型:{5}", , , , , , GetNameByOperatorType());
        }

        /// <summary>
        /// 注销登陆
        /// </summary>
        public void LogOut()
        {
            bool bResult = CHCNetSDK.NET_DVR_Logout();
            ("NET_DVR_Logout");
        }

        /// <summary>
        /// 清理资源
        /// </summary>
        public static void Cleanup()
        {
            bool bResult = CHCNetSDK.NET_DVR_Cleanup();
        }

        /// <summary>
        /// 根据操作类型编号获取中文描述
        /// </summary>
        /// <returns>类型描述</returns>
        public string GetNameByOperatorType()
        {
            // 0- 关闭,1- 打开,2- 常开,3- 常关
            switch ()
            {
                case 0:
                    return "关门";
                case 1:
                    return "开门";
                case 2:
                    return "常开";
                case 3:
                    return "常关";
                case 4:
                    return "授权";
                case 5:
                    return "清除权限";

                default:
                    return "其它";
            }
        }
    }