/// <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; } } }
/// <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); }
/// <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); }
/// <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"); }
/// <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"); } }