Пример #1
0
        /// <summary>
        /// 遍历CameraData table的数据,并写入数据库   /*  UpdateDB耗时操作应放到子线程中 */
        ///
        /// </summary>
        public void UpdateDB()
        {
            //遍历datatable
            DBConnect upCameraDBC = new DBConnect();
            DataTable dt          = StaticData.g_dtCamera;

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                string strNVVRIP  = dt.Rows[i]["NVRIP地址"].ToString();
                string strChannel = dt.Rows[i]["通道号"].ToString();
                string strStatus  = dt.Rows[i]["摄像头状态"].ToString();
                string strCMD     = "UPDATE device_camera SET device_status='" + strStatus + "'  WHERE device_nvrip='" + strNVVRIP + "' AND device_channel='" + strChannel + "';";

                if (upCameraDBC.msConn.State == System.Data.ConnectionState.Closed)
                {
                    upCameraDBC.msConn.Open();
                }

                try
                {
                    MySqlCommand cmd = new MySqlCommand(strCMD, upCameraDBC.msConn);
                    string       currentMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
                    StaticUtils.DBNonQueryOperationException(ref cmd, currentClassName, currentMethodName);
                }
                catch (Exception)
                {
                    StaticUtils.ShowEventMsg("SkyinforHikvision.class-UpdateDB : 遍历CameraData table数据出现异常!!\n");
                    //throw;
                }
            }
        }
Пример #2
0
        /// <summary>
        /// 根据GET到的数据更新DB park
        /// </summary>
        public void updateDbPark(string parkName1, int all_park_num1, int rest_park_num1, string parkName2, int all_park_num2, int rest_park_num2, string parkName4, int all_park_num4, int rest_park_num4)
        {
            string currentMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;

            if (StaticData.g_msParkingDBC.State == System.Data.ConnectionState.Closed)
            {
                StaticData.g_msParkingDBC.Open();
            }
            // update T1 park
            string       strSql1 = "UPDATE device_park SET device_time='" + DateTime.Now.ToString().Replace('/', '-') + "',device_all_park='" + all_park_num1 + "',device_rest_park='" + rest_park_num1 + "' WHERE device_name='" + parkName1 + "';";
            MySqlCommand cmd     = new MySqlCommand(strSql1, StaticData.g_msParkingDBC);

            StaticUtils.DBNonQueryOperationException(ref cmd, currentClassName, currentMethodName);

            // update T2 park
            string strSql2 = "UPDATE device_park SET device_time='" + DateTime.Now.ToString().Replace('/', '-') + "',device_all_park='" + all_park_num2 + "',device_rest_park='" + rest_park_num2 + "' WHERE device_name='" + parkName2 + "';";

            cmd = new MySqlCommand(strSql2, StaticData.g_msParkingDBC);
            StaticUtils.DBNonQueryOperationException(ref cmd, currentClassName, currentMethodName);

            // update T4 park
            string strSql4 = "UPDATE device_park SET device_time='" + DateTime.Now.ToString().Replace('/', '-') + "',device_all_park='" + all_park_num4 + "',device_rest_park='" + rest_park_num4 + "' WHERE device_name='" + parkName4 + "';";

            cmd = new MySqlCommand(strSql4, StaticData.g_msParkingDBC);
            StaticUtils.DBNonQueryOperationException(ref cmd, currentClassName, currentMethodName);
        }
        /// <summary>
        /// 获取到的数据插入到DB:gate_number中进行记录
        /// </summary>
        public void insertToDbGateNumber(string name, int in_number, int out_number, string time)
        {
            string       str = "INSERT INTO device_gate_number (device_name,device_in_number,device_out_number,time) VALUES ('" + name + "'," + in_number + "," + out_number + ",'" + time + "')";
            MySqlCommand cmd = new MySqlCommand(str, StaticData.g_msGateDBC);
            string       currentMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;

            StaticUtils.DBNonQueryOperationException(ref cmd, currentClassName, currentMethodName);
        }
Пример #4
0
        /// <summary>
        /// 获取到的数据插入到DB:park_number中进行记录
        /// </summary>
        public void insertToDbParkNumber(string[] record1, string[] record2, string[] record4, string time)
        {
            //写入数据库,并更新,更新总车位
            string       str = "INSERT INTO device_park_number (device_name, device_rest_park, time) VALUES('" + record1[2] + "', " + record1[0] + ", '" + time + "'),('" + record2[2] + "'," + record2[0] + ", '" + time + "'),('" + record4[2] + "'," + record4[0] + ", '" + time + "')";
            MySqlCommand cmd = new MySqlCommand(str, StaticData.g_msParkingDBC);
            string       currentMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;

            StaticUtils.DBNonQueryOperationException(ref cmd, currentClassName, currentMethodName);
        }
        /// <summary>
        /// 根据GET到的数据更新DB gate
        /// </summary>
        public void updateDbGate(string gateName, int in_person_num, int out_person_num, string device_position)
        {
            if (StaticData.g_msGateDBC.State == System.Data.ConnectionState.Closed)
            {
                StaticData.g_msGateDBC.Open();
            }
            string       strSql            = "UPDATE device_gate SET device_time='" + DateTime.Now.ToString().Replace('/', '-') + "',device_in_number='" + in_person_num + "',device_out_number='" + out_person_num + "',device_position='" + device_position + "' WHERE device_name='" + gateName + "';";
            MySqlCommand cmd               = new MySqlCommand(strSql, StaticData.g_msGateDBC);
            string       currentMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;

            StaticUtils.DBNonQueryOperationException(ref cmd, currentClassName, currentMethodName);
        }
Пример #6
0
        /// <summary>
        /// 将record作为新的event record插入event_assemble & event_wifi
        /// 关于 Wifi故障类型: (设备状态:掉线) &&  (设备状态警告、次要、重要、严重)
        /// strLevel  : 重要情况{掉线、重要、严重}; 一般情况{警告、次要}
        /// </summary>
        public void insertBrokenRecordToEventDb(String theone, String status)
        {
            if (StaticData.g_msWifiDBC.State == System.Data.ConnectionState.Closed)
            {
                StaticData.g_msWifiDBC.Open();
            }
            //生成eventtheon
            string strEventTheOne = Guid.NewGuid().ToString();
            //事件等级判断
            string strLevel = "";


            if (status.Contains("重要") || status.Contains("严重") || status.Contains("掉线"))
            {
                strLevel = "重要情况";
            }
            else
            {
                strLevel = "一般情况";
            }

            int event_name_index = 0;

            if (status.Contains("掉线"))
            {
                event_name_index = 1;
            }

            DataRow[] dr = StaticData.g_dtWifi.Select("theone='" + theone + "'");
            string    strWifiPosition = dr[0]["WIFI坐标"].ToString();

            // 将record作为新的event record进行插入
            DataRow[] dr_abnormal_super = StaticData.g_dtAbnormalInfor.Select("故障父类名称='event_wifi'");
            DataRow[] dr_abnormal_sub   = StaticData.g_dtAbnormalInfor.Select("父ID='" + dr_abnormal_super[0]["ID"] + "'");
            string    event_name        = dr_abnormal_sub[event_name_index]["故障子类名称"].ToString();

            string strInsert_assemble = "INSERT INTO event_assemble (event_name,event_theone,event_type,start_time,end_time,event_status,position,event_level,target_theone) values" +
                                        "('" + event_name + "','" + strEventTheOne + "','event_wifi','" + DateTime.Now.ToString().Replace('/', '-') + "','" + DateTime.Now.ToString().Replace('/', '-') + "','未读','" +
                                        strWifiPosition + "','" + strLevel + "','" + theone + "');";

            string strInsert_wifi = "INSERT INTO event_wifi (event_theone,device_event_type,device_theone) values" +
                                    "('" + strEventTheOne + "','" + event_name + "','" + theone + "');";
            MySqlCommand insertAssembleCmd = new MySqlCommand(strInsert_assemble, StaticData.g_msWifiDBC);
            MySqlCommand insertWifiCmd     = new MySqlCommand(strInsert_wifi, StaticData.g_msWifiDBC);
            string       currentMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;

            StaticUtils.DBNonQueryOperationException(ref insertAssembleCmd, currentClassName, currentMethodName);
            StaticUtils.DBNonQueryOperationException(ref insertWifiCmd, currentClassName, currentMethodName);
            //增加 form1界面上的事件信息,向web端发送故障消息
            sendMsgToWebSocketClients(strEventTheOne, "报警时间:" + DateTime.Now.ToString("yyyy/M/d HH:mm:ss") + "   报警内容:名称" + dr[0]["Ap名称"] + "-故障报警" + "   报警类型:" + strLevel + "报警\n");
        }
Пример #7
0
        /// <summary>
        /// 根据GET到的数据更新DB device_wifi
        /// </summary>
        public void updateDbWifi(string serialId, string onlinestatus, string status, string person_online, string time)
        {
            // 将得到的新状态更新到数据库中去
            if (StaticData.g_msWifiDBC.State == System.Data.ConnectionState.Closed)
            {
                StaticData.g_msWifiDBC.Open();
            }

            string       strSql = "UPDATE device_wifi SET device_onlinestatus='" + onlinestatus + "',device_status='" + status + "' ,device_person_online='" + person_online + "' ,device_time='" + time + "'WHERE device_ap_sn='" + serialId + "';";
            MySqlCommand cmd    = new MySqlCommand(strSql, StaticData.g_msWifiDBC);

            string currentMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;

            StaticUtils.DBNonQueryOperationException(ref cmd, currentClassName, currentMethodName);
            StaticData.g_msWifiDBC.Close();
        }
        /// <summary>
        /// 更新故障信息到DB device_broadcast 中;刷新界面
        /// </summary>
        public void updateBreakdownInfor(Int16 BroadcastDeviceId)
        {
            // 将得到的新状态更新到数据库中去
            if (StaticData.g_msBroadcastgDBC.State == System.Data.ConnectionState.Closed)
            {
                StaticData.g_msBroadcastgDBC.Open();
            }
            string       strSql            = "UPDATE device_broadcast SET device_liantong='未连通',device_time='" + DateTime.Now.ToString().Replace('/', '-') + "' WHERE device_bianhao='" + BroadcastDeviceId + "';";
            MySqlCommand cmd               = new MySqlCommand(strSql, StaticData.g_msBroadcastgDBC);
            string       currentMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;

            StaticUtils.DBNonQueryOperationException(ref cmd, currentClassName, currentMethodName);

            StaticData.g_msBroadcastgDBC.Close();
            //刷新 form1界面上的 GridListView
            DataRow[] dr = StaticData.g_dtBroadcastDevice.Select("编号='" + (Int32)BroadcastDeviceId + "'");
            dr[0]["连通"] = "未连通";
        }
        /// <summary>
        /// 将record作为新的event record插入event_assemble & event_broadcast
        /// 关于 广播故障类型: 掉线
        /// strLevel  : 重要情况
        /// </summary>
        public void insertBrokenRecordToEventDb(Int16 BroadcastDeviceId, String theone)
        {
            if (StaticData.g_msBroadcastgDBC.State == System.Data.ConnectionState.Closed)
            {
                StaticData.g_msBroadcastgDBC.Open();
            }
            //生成eventtheon
            string strEventTheOne = Guid.NewGuid().ToString();
            //事件等级判断
            string strLevel = "重要情况";

            DataRow[] dr = StaticData.g_dtBroadcastDevice.Select("编号='" + (Int32)BroadcastDeviceId + "'");
            string    strBroadcastPosition = dr[0]["坐标"].ToString();

            // 将record作为新的event record进行插入
            DataRow[] dr_abnormal_super  = StaticData.g_dtAbnormalInfor.Select("故障父类名称='event_broadcast'");
            DataRow[] dr_abnormal_sub    = StaticData.g_dtAbnormalInfor.Select("父ID='" + dr_abnormal_super[0]["ID"] + "'");
            string    event_name         = dr_abnormal_sub[0]["故障子类名称"].ToString();
            string    strInsert_assemble = "INSERT INTO event_assemble (event_name,event_theone,event_type,start_time,end_time,event_status,position,event_level,target_theone) values" +
                                           "('" + event_name + "','" + strEventTheOne + "','event_broadcast','" + DateTime.Now.ToString().Replace('/', '-') + "','" + DateTime.Now.ToString().Replace('/', '-') + "','未读','" +
                                           strBroadcastPosition + "','" + strLevel + "','" + theone + "');";

            string strInsert_broadcast = "INSERT INTO event_broadcast (event_theone,device_event_type,device_theone) values" +
                                         "('" + strEventTheOne + "','" + event_name + "','" + theone + "');";
            MySqlCommand insertAssembleCmd  = new MySqlCommand(strInsert_assemble, StaticData.g_msBroadcastgDBC);
            MySqlCommand insertBroadcastCmd = new MySqlCommand(strInsert_broadcast, StaticData.g_msBroadcastgDBC);
            string       currentMethodName  = System.Reflection.MethodBase.GetCurrentMethod().Name;

            StaticUtils.DBNonQueryOperationException(ref insertAssembleCmd, currentClassName, currentMethodName);
            StaticUtils.DBNonQueryOperationException(ref insertBroadcastCmd, currentClassName, currentMethodName);

            // 向web 上报事件
            sendMsgToWebSocketClients(strEventTheOne, "报警时间:" + DateTime.Now.ToString("yyyy/M/d HH:mm:ss") + "   报警内容:编号" + BroadcastDeviceId + "-广播未连通报警" + "   报警类型:广播未连通报警\n");

            updateBreakdownInfor(BroadcastDeviceId);
        }
        /// <summary>
        /// 用于接收从终端发送过来的数据
        /// </summary>
        public void BroadServerReceive()
        {
            // 获取本地DB 广播列表
            getDbBroadcastDeviceList();

            //构造函数直接监听本地UDP端口,此端口从数据库获取。。。zzt
            StaticData.broadcastUDPClient = new UdpClient(Convert.ToInt32(StaticData.g_strBroadcastListenPort));
            ipEndPoint = new IPEndPoint(new IPAddress(0), Convert.ToInt32(StaticData.g_strBroadcastListenPort));
            StaticData.broadcastUDPClient.Client.Blocking = false;//设置为非阻塞模式

            /*
             * 如果从未给远程广播server发过数据包,即使设置过本地IP,但仍然无法收到返回包
             * 因此本地向server发送获取广播列表的请求,将本地IP加入到远程server的广播列表中
             */
            getBroadcastDeviceList();

            Int16  nDeviceTotalRecord;
            Int16  nDeviceNowRecord;
            Int16  nDeviceId;
            byte   byDeviceType;
            string strIp;
            string strDeviceName;
            string strStatus = "";
            byte   byVolume;
            byte   byChannel;
            int    revType = 0; // 接收数据的类型

            while (true)
            {
                int buffSizeCurrent;
                buffSizeCurrent = StaticData.broadcastUDPClient.Client.Available;//取得缓冲区当前的数据的个数
                if (buffSizeCurrent > 0)
                {
                    //收到的消息
                    byte[] data = StaticData.broadcastUDPClient.Receive(ref ipEndPoint);
                    //对收到的消息做处理
                    switch (data[1])
                    {
                    //1是设备状态信息
                    case 1:
                        revType = 1;

                        nDeviceId = Convert.ToInt16((data[3].ToString("X2") + data[2].ToString("X2")), 16);

                        // 针对非db中广播进行剔除
                        if (!m_broadcastDeviceList.ContainsKey(nDeviceId))
                        {
                            continue;
                        }

                        byDeviceType = data[4];     // 设备类型,暂时不做处理

                        //0:空闲;1:消防广播;2:SD定时;3:PC定时;4:寻呼;5:电话;6:对讲;7:频道;8:下载;9:点播;10:网络录音;11:SD播放;12:本地收音;13:本地线路;14:空闲;15:功放保护;16:即时广播;
                        switch (data[6])
                        {
                        case 0:
                            strStatus = "空闲";
                            break;

                        case 1:
                            strStatus = "消防广播";
                            break;

                        case 2:
                            strStatus = "SD定时";
                            break;

                        case 3:
                            strStatus = "PC定时";
                            break;

                        case 4:
                            strStatus = "寻呼";
                            break;

                        case 5:
                            strStatus = "电话";
                            break;

                        case 6:
                            strStatus = "对讲";
                            break;

                        case 7:
                            strStatus = "频道";
                            break;

                        case 8:
                            strStatus = "下载";
                            break;

                        case 9:
                            strStatus = "点播";
                            break;

                        case 10:
                            strStatus = "网络录音";
                            break;

                        case 11:
                            strStatus = "SD播放";
                            break;

                        case 12:
                            strStatus = "本地收音";
                            break;

                        case 13:
                            strStatus = "本地线路";
                            break;

                        case 14:
                            strStatus = "空闲";
                            break;

                        case 15:
                            strStatus = "功放保护";
                            break;

                        case 16:
                            strStatus = "即时广播";
                            break;
                            //  0:空闲;1:消防广播;2:SD定时;3:PC定时;4:寻呼;5:电话;6:对讲;7:频道;8:下载;9:点播;10:网络录音;11:SD播放;12:本地收音;13:本地线路;14:空闲;15:功放保护;16:即时广播
                        }

                        byVolume = data[19];
                        //软件显示实际频道号 = 状态数据中频道号 + 1
                        byChannel = byte.Parse((Convert.ToInt16(data[20]) + 1).ToString());

                        //此信息是定期广播的,收到后根据里面的DeviceId进行搜索datatable,然后更新状态和音量
                        DataRow[] dr = StaticData.g_dtBroadcastDevice.Select("编号='" + (Int32)nDeviceId + "'");


                        //有趣的现象, 当 dr中的值发生动态变化时,界面的值也动态变化-> select后的dataRow存在绑定的关系
                        if (dr.Length > 0)
                        {
                            dr[0]["连通"] = "连通";
                            dr[0]["状态"] = strStatus;
                            dr[0]["频道"] = byChannel;
                            dr[0]["音量"] = byVolume;
                            dr[0]["时间"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

                            // 进行设备breakdown 判断
                            judgeBroadcastDeviceBreakdown(nDeviceId);
                        }

                        // 将得到的新状态更新到数据库中去
                        if (StaticData.g_msBroadcastgDBC.State == System.Data.ConnectionState.Closed)
                        {
                            StaticData.g_msBroadcastgDBC.Open();
                        }
                        string       strSql = "UPDATE device_broadcast SET device_liantong='" + dr[0]["连通"] + "' , device_status='" + dr[0]["状态"] + "'  , device_channel='" + dr[0]["频道"] + "'  , device_volume='" + dr[0]["音量"] + "', device_time='" + dr[0]["时间"] + "' WHERE device_bianhao='" + nDeviceId + "';";
                        MySqlCommand cmd    = new MySqlCommand(strSql, StaticData.g_msBroadcastgDBC);

                        string currentMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
                        StaticUtils.DBNonQueryOperationException(ref cmd, currentClassName, currentMethodName);

                        StaticData.g_msBroadcastgDBC.Close();
                        break;

                    //2是获取系统设备列表 ;设备连通或者不连通都在设备列表中显示,目前来看没什么用。
                    case 2:
                        revType = 2;

                        nDeviceTotalRecord = Convert.ToInt16((data[3].ToString("X2") + data[2].ToString("X2")), 16);
                        nDeviceNowRecord   = Convert.ToInt16((data[5].ToString("X2") + data[4].ToString("X2")), 16);
                        nDeviceId          = Convert.ToInt16((data[7].ToString("X2") + data[6].ToString("X2")), 16);
                        byDeviceType       = data[8];
                        strIp         = data[9].ToString() + "." + data[10].ToString() + "." + data[11].ToString() + "." + data[12].ToString();
                        strDeviceName = Encoding.Unicode.GetString(data, 15, 6);    //这里有大小端问题,算了,整体不动了。
                        break;
                    }
                }
                else   // 没有拿到广播包
                {
                    // 针对没有数据包情况, 将所有广播报警
                    judgeBroadcastDeviceBreakdown(0);
                }

                // 设置通过list获取到的包,线程不睡, 方便更快响应
                if (revType == 1)
                {
                    Thread.Sleep(5 * 1000);   // 此处不根据输入Sleep阈值, 因为包interval 为30s
                }
            }
        }
        /// <summary>
        /// 将异常record作为新的event record插入event_assemble & event_gate
        /// 判断数据库是否存在该事件,且时间是否x seconds以上才再次触发,存在且是的话插入新事件
        /// x为StaticData中的全局变量
        /// </summary>
        /// <param name="gateName"> 闸机名称 </param>
        /// <param name="strLevel"> 事件等级判断 </param>
        ///
        public string insertPersonTooMuchRecordToEventDb(string gateName, string strLevel)
        {
            if (StaticData.g_msGateDBC.State == System.Data.ConnectionState.Closed)
            {
                StaticData.g_msGateDBC.Open();
            }

            //生成eventtheon
            string strEventTheOne = Guid.NewGuid().ToString();

            DataRow[] dr              = StaticData.g_dtGate.Select("闸机名称='" + gateName + "'");
            string    theone          = dr[0]["theone"].ToString();
            string    strGatePosition = dr[0]["坐标"].ToString();


            string strCMD = "select *  from event_assemble where target_theone='" + theone + "' ORDER BY id DESC LIMIT 1;";

            if (StaticData.g_msEventAssembleDBC.State == System.Data.ConnectionState.Closed)
            {
                StaticData.g_msEventAssembleDBC.Open();
            }
            MySqlCommand    cmd               = new MySqlCommand(strCMD, StaticData.g_msEventAssembleDBC);
            MySqlDataReader sqlReader         = null;
            string          currentMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;

            if (StaticUtils.DBReaderOperationException(ref cmd, ref sqlReader, currentClassName, currentMethodName))
            {
                if (sqlReader.Read())
                {
                    // 计算两个dateTime 的时间戳,单位s
                    long timeSpan = StaticUtils.GetCurrentTimeUnix(DateTime.Now) - StaticUtils.GetCurrentTimeUnix(Convert.ToDateTime(sqlReader["end_time"]));
                    if (timeSpan < StaticData.g_intGateWarningIntervalTime)
                    {
                        sqlReader.Close();
                        return("");  // 返回\"\"代表无需后续步骤,eg step: web端上传
                    }
                    else if (sqlReader["event_status"].ToString().Equals("已读"))
                    {
                        sqlReader.Close();
                        return("");  // 返回\"\"代表无需后续步骤,eg step: web端上传
                    }
                }

                sqlReader.Close();
            }
            else
            {
                return("");
            }

            // 将record作为新的event record进行插入
            DataRow[] dr_abnormal_super = StaticData.g_dtAbnormalInfor.Select("故障父类名称='event_gate'");
            DataRow[] dr_abnormal_sub   = StaticData.g_dtAbnormalInfor.Select("父ID='" + dr_abnormal_super[0]["ID"] + "'");
            string    event_name        = ""; //故障二级名称

            string strInsert_assemble = "";
            string strInsert_gate     = "";

            if (strLevel.Equals("一般情况"))
            {
                // 数据库存储按照等级进行存储, 级别越低,id越低
                event_name = dr_abnormal_sub[0]["故障子类名称"].ToString();

                strInsert_assemble = "INSERT INTO event_assemble (event_name,event_theone,event_type,start_time,end_time,event_status,position,event_level,target_theone) values" +
                                     "('" + event_name + "','" + strEventTheOne + "','event_gate','" + DateTime.Now.ToString().Replace('/', '-') + "','" + DateTime.Now.ToString().Replace('/', '-') + "','未读','" +
                                     strGatePosition + "','" + strLevel + "','" + theone + "');";
                strInsert_gate = "INSERT INTO event_gate (event_theone,device_event_type,device_theone) values" +
                                 "('" + strEventTheOne + "','" + event_name + "','" + theone + "');";
            }
            else
            {
                event_name = dr_abnormal_sub[1]["故障子类名称"].ToString();

                strInsert_assemble = "INSERT INTO event_assemble (event_name,event_theone,event_type,start_time,end_time,event_status,position,event_level,target_theone) values" +
                                     "('" + event_name + "','" + strEventTheOne + "','event_gate','" + DateTime.Now.ToString().Replace('/', '-') + "','" + DateTime.Now.ToString().Replace('/', '-') + "','未读','" +
                                     strGatePosition + "','" + strLevel + "','" + theone + "');";
                strInsert_gate = "INSERT INTO event_gate (event_theone,device_event_type,device_theone) values" +
                                 "('" + strEventTheOne + "','" + event_name + "','" + theone + "');";
            }
            MySqlCommand insertAssembleCmd = new MySqlCommand(strInsert_assemble, StaticData.g_msGateDBC);
            MySqlCommand insertGateCmd     = new MySqlCommand(strInsert_gate, StaticData.g_msGateDBC);

            StaticUtils.DBNonQueryOperationException(ref insertAssembleCmd, currentClassName, currentMethodName);
            StaticUtils.DBNonQueryOperationException(ref insertGateCmd, currentClassName, currentMethodName);
            return(strEventTheOne);
        }
        //读取事件数据库,判断数据库是否存在该事件,且时间是否2分钟以上才再次触发,存在且是的话插入新事件
        //不是的话更新endtime字段为当前时间
        //不存在的话直接插入数据
        private void CheckEvent(string strDevice, string strTarget_theone, string strEvent, string strTime, string strPosition, string srtCameraName, string[] paras, string channelName)
        {
            //事件比较特殊,可有可能同时都会调用,所以这里每次调用的时候,都新建一个数据库的conn
            DBConnect dbCheck   = new DBConnect();
            DBConnect dbInsORUp = new DBConnect();

            string[] strReadDB = new string[] { };
            try
            {
                //判断数据库状态并打开数据库连接
                if (dbCheck.msConn.State == System.Data.ConnectionState.Closed)
                {
                    dbCheck.msConn.Open();
                }
                if (dbInsORUp.msConn.State == System.Data.ConnectionState.Closed)
                {
                    dbInsORUp.msConn.Open();
                }
                // string strCMD = "select theone,event,endtime  from event;";
                string strCMD = "select end_time from event_assemble where target_theone='" + strTarget_theone + "' ORDER BY id DESC LIMIT 1;";

                MySqlCommand    cmd               = new MySqlCommand(strCMD, dbCheck.msConn);
                MySqlDataReader sqlReader         = null;
                string          currentMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
                if (StaticUtils.DBReaderOperationException(ref cmd, ref sqlReader, currentClassName, currentMethodName))
                {
                    while (sqlReader.Read())
                    {
                        strReadDB = new string[] { sqlReader.GetString(0) };
                        //逐条数据判断
                        //判断数据库中是否存在数据
                        if (strReadDB != null)
                        {
                            //比较endtime的时间和当前时间
                            //传入时间
                            DateTime data_create = Convert.ToDateTime(strTime);
                            DateTime data_db     = Convert.ToDateTime(strReadDB[0]);

                            // 相同报警间隔time   unit: s
                            long time_interval = StaticUtils.GetCurrentTimeUnix(data_create) - StaticUtils.GetCurrentTimeUnix(data_db);

                            if (time_interval < 120)
                            {
                                string       strUpdate = "UPDATE event_assemble SET end_time='" + strTime + "'  WHERE target_theone='" + strTarget_theone + "' AND end_time='" + strReadDB[0] + "';";
                                MySqlCommand cmdUpdate = new MySqlCommand(strUpdate, dbInsORUp.msConn);
                                StaticUtils.DBNonQueryOperationException(ref cmd, currentClassName, currentMethodName);
                                //跳出
                                goto here;
                            }
                        }
                    }
                }
                string event_name = "";   //故障二级名称

                //事件等级判断
                string strLevel = "";
                if (strEvent.Contains("信号丢失"))
                {
                    strLevel   = "一般情况";
                    event_name = "监控设备掉线";
                }
                else if (strEvent.Contains("移动侦测"))
                {
                    strLevel   = "一般情况";
                    event_name = "监控移动侦测";
                }
                else if (strEvent.Contains("穿越警戒面"))
                {
                    strLevel   = "重要情况";
                    event_name = "监控越界侦测";
                }


                //生成eventtheon
                string strEventTheOne = Guid.NewGuid().ToString();

                //插入数据
                //往总表跟字表里面都插入数据
                DataRow[] dr_abnormal_super = StaticData.g_dtAbnormalInfor.Select("故障父类名称='event_camera'");
                DataRow[] dr_abnormal_sub   = StaticData.g_dtAbnormalInfor.Select("父ID='" + dr_abnormal_super[0]["ID"] + "'");

                string strInsert1 = "INSERT INTO event_assemble (event_name,event_theone,event_type,start_time,end_time,event_status,position,event_level,target_theone) values" +
                                    "('" + event_name + "','" + strEventTheOne + "','event_camera','" + DateTime.Now.ToString().Replace('/', '-') + "','" + DateTime.Now.ToString().Replace('/', '-') + "','未读','" +
                                    strPosition + "','" + strLevel + "','" + strTarget_theone + "');";
                string strInsert2 = "INSERT INTO event_camera (event_theone,device_event_type,device_theone) values" +
                                    "('" + strEventTheOne + "','" + event_name + "','" + strTarget_theone + "');";
                MySqlCommand cmdInsert = new MySqlCommand(strInsert1, dbInsORUp.msConn);
                StaticUtils.DBNonQueryOperationException(ref cmdInsert, currentClassName, currentMethodName);
                MySqlCommand cmdInsert2 = new MySqlCommand(strInsert2, dbInsORUp.msConn);
                StaticUtils.DBNonQueryOperationException(ref cmdInsert2, currentClassName, currentMethodName);

                //向web上报事件
                string strSendMSG = jscontrol.EventJson(strEventTheOne);
                Mainform.form1.SendMsgToWebSocketClients(strSendMSG);
                //更新UI界面
                StaticUtils.ShowEventMsg("报警时间:" + paras[0] + "  NVRIP:" + paras[1] + "  事件类型:" + event_name + "  通道号:" + channelName + "  摄像机名称:" + strDevice + "\n");
                //计数加一
                StaticData.g_inAlarmNum++;

here:
                dbInsORUp.msConn.Close();
                sqlReader.Close();
                dbCheck.msConn.Close();
            }
            catch (Exception e)
            {
                StaticUtils.ShowEventMsg("HikvisionAlarmCallBackFun.class-CheckEvent : 插入摄像头报警事件出现异常!!\n");
            }
        }