private void SaveAnalyData(string coalCode, string type, string datas) { ServerAnalys serverAnalys = new ServerAnalys(this.WsDownvalue ,this.WsUpvalue,this.CODownvalue,this.COUpvalue); StringBuilder strbSaveSql = new StringBuilder(); CheckDbTableByCoalCode(coalCode); switch (type) { case "SwitchAnaly": strbSaveSql.Append(SQL_INSERT_TURNANALY); break; case "FaultAnaly": strbSaveSql.Append(SQL_INSERT_FAULT); break; case "AlarmAnaly": strbSaveSql.Append(SQL_INSERT_ALARMRECODE); break; case "MinuteAnaly": strbSaveSql.Append(SQL_INSERT_MINUTE.Replace("TableCoalCode", coalCode)); break; } string[] dataList = null; if (type == "MinuteAnaly") { dataList = datas.Split('Ï'); //serverAnalys.MiniterAnalys(datas).Split('Ï'); } else if (type == "AlarmAnaly") { dataList = datas.Split('Ï'); //serverAnalys.AlarmAnalys(datas).Split('Ï'); } else if (type == "FaultAnaly") { dataList = datas.Split('Ï'); // serverAnalys.FaultAnalys(datas).Split('Ï'); } else { dataList = datas.Split('Ï'); } int dataListCount = dataList.Length; for (int i = 0; i < dataListCount; i++) { if (i > 0 && dataList[i].Length > 0) strbSaveSql.Append("UNION "); if (dataList[i].Length > 0) { strbSaveSql.Append("SELECT "); strbSaveSql.Append(dataList[i]); } } if (type == "MinuteAnaly") ExecuteSqlByTranscation(strbSaveSql.ToString()); else ExecuteAnalySqlByTranscation(strbSaveSql.ToString()); }
/// <summary> /// 保存数据 /// </summary> /// <param name="mess">消息队列</param> public void Save(System.Messaging.Message mess) { ServerAnalys serverAnalys = new ServerAnalys(this.WsDownvalue ,this.WsUpvalue,this.CODownvalue,this.COUpvalue); using (Lock l = new Lock(syncSave, 60000, false))//lock超时为1分钟 { try { string tilte = mess.Label; int count = mess.Body.ToString().Split('\n').Length; string[] tiltes = tilte.Split(','); if (tiltes.Length < 5 || tiltes[0].Trim().Length == 0 || tiltes[1].Trim().Length == 0) { Log.Write("非法连接-->" + tilte); return; } //接受新数据事件已经没用,因此刘刚于2010-1-28日注释掉。 //if (ReciveNewDataEvent != null) // ReciveNewDataEvent(mess); CacheModel cCheck = CacheDataList.Find(cd => (cd.CoalCode == tiltes[0].Trim() && cd.CIP != tiltes[3])); if (cCheck != null) { Log.Write("CoalCode-->" + tiltes[0] + "已经存在,拒绝连接!"); return; } string coalCode = tiltes[0]; if (userGB)//启用用户设置的瓦斯、一氧化碳的最大值分析 { if (mess.Body.ToString().Contains("Ï"))//分析数据 { //if (tiltes[4].ToString() == "MinuteAnaly")//分钟数据 //{ // SaveMinRealDev(tiltes, mess.Body.ToString(), this.WsDownvalue, this.WsUpvalue, this.CODownvalue, this.COUpvalue); //} } else { SaveRealDev(tiltes, mess.Body.ToString(), this.WsDownvalue, this.WsUpvalue, this.CODownvalue, this.COUpvalue); } userGB = false; } if (tiltes[4].ToLower() == "true") { if (mess.Body.ToString().Contains("Ï"))//分析数据 { //if (tiltes[4].ToString() == "MinuteAnaly")//分钟数据 //{ // SaveMinRealDev(tiltes, mess.Body.ToString(), this.WsDownvalue, this.WsUpvalue, this.CODownvalue, this.COUpvalue); //} } else//每笔数据 { SaveRealDev(tiltes, mess.Body.ToString(), this.WsDownvalue, this.WsUpvalue, this.CODownvalue, this.COUpvalue); } //SaveRealDev(tiltes, mess.Body.ToString(), this.WsDownvalue, this.WsUpvalue, this.CODownvalue, this.COUpvalue); } if (tiltes.Length == 6) { if (tiltes[5] == "AlarmAnaly") { AlarmAnalydata(coalCode, tiltes[5], mess.Body.ToString()); } else { SaveAnalyData(coalCode, tiltes[5], mess.Body.ToString());//保存客户端上传分析数据 } return; } CacheModel cacheMod = CacheDataList.FindLast(cache => cache.CoalCode == coalCode); // SaveCoalItems(tiltes[1]); if (cacheMod != null) { cacheMod.DataCount += count; count = cacheMod.DataCount; } CacheDataList.Add(new CacheModel { CoalCode = coalCode, Datas = mess.Body.ToString(), // serverAnalys.MessageAnalys(mess.Body.ToString()), DataCount = count, CoalName = tiltes[1], CIP = tiltes[3], Atime = DateTime.Now }); if (count > InitConfig.CountCanSave) { string datas = string.Empty; List<CacheModel> tCacheModels = CacheDataList.FindAll(cache => cache.CoalCode == coalCode); foreach (CacheModel cm in tCacheModels) { datas += cm.Datas; CacheDataList.Remove(cm); } string filePath = dtsPath + "\\" + DateTime.Now.ToString("yyyyMMddHHmmssfff_") + coalCode + ".txt"; UseDtsSave(filePath, coalCode, datas); } } catch (Exception ex) { Tcs.Libary.Log.Write(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ex.ToString()); } } }
/// <summary> /// 保存报警数据(判断数据库里面10秒钟前有没有相同的报警,有的话更新数据,没有插入) /// </summary> /// <param name="coalCode"></param> /// <param name="type"></param> /// <param name="datas"></param> private void AlarmAnalydata(string coalCode, string type, string datas) { //'3001101','1-1','瓦斯','模拟量','采区1','%','0','4','1','.5','.5','.48','2011/12/26 11:52:06','2011/12/26 11:52:16','10','0','','1.42','2011/12/26 11:52:06','1'Ï string sql; ServerAnalys serverAnalys = new ServerAnalys(this.WsDownvalue, this.WsUpvalue, this.CODownvalue, this.COUpvalue); string[] dataList = null; dataList = serverAnalys.AlarmAnalys(datas).Split('Ï'); int dataListCount = dataList.Length; for (int i = 0; i < dataListCount; i++) { if (dataList[i].Contains(",")) { string[] data = dataList[i].Split(','); string[] DateTime = data[12].Split('\''); //SELECT * FROM [SafetyNetworking].[dbo].[TN_AlarmRecode] where CoalCode= '3001101' and DevCode= '1-1' and AlarmETime >'2011-12-26 11:51:06' sql = "SELECT * FROM [SafetyNetworking].[dbo].[TN_AlarmRecode] where CoalCode = " + data[0] + " and DevCode= " + data[1] + " and AlarmETime >= '" + Convert.ToDateTime(DateTime[1]).AddSeconds(-10).ToString() + "'"; DataSet ds = DQuery(sql); if (ds.Tables[0].Rows.Count > 0) { int Duration = Convert.ToInt32(ds.Tables[0].Rows[0]["Duration"]) + Convert.ToInt32(data[14].Split('\'')[1]); if (Convert.ToDecimal(ds.Tables[0].Rows[0]["DevMaxValue"]) < Convert.ToDecimal(data[17].Split('\'')[1])) { sql = "UPDATE [SafetyNetworking].[dbo].[TN_AlarmRecode] SET [AlarmETime] = " + data[13].ToString() + ", [Duration] = '" + Duration.ToString() + "' , [DevMaxValue] = " + data[17] + ", [DevMaxTime] = " + data[18] + " where CoalCode = " + data[0] + " and DevCode= " + data[1] + " and AlarmETime >= '" + Convert.ToDateTime(DateTime[1]).AddSeconds(-10).ToString() + "'"; } else { sql = "UPDATE [SafetyNetworking].[dbo].[TN_AlarmRecode] SET [AlarmETime] = " + data[13].ToString() + " , [Duration] = '" + Duration.ToString() + "' where CoalCode = " + data[0] + " and DevCode= " + data[1] + " and AlarmETime >= '" + Convert.ToDateTime(DateTime[1]).AddSeconds(-10).ToString() + "'"; } } else { sql = SQL_INSERT_ALARMRECODE; sql += "SELECT "; sql += dataList[i]; } ExecuteAnalySqlByTranscation(sql); } } }