public static void InitializationConfigtableInfo() { List <DataBaseName> list = ConfigTableDic.GetConfigTableDic().SeleDataBaseNames(); if (list != null && list.Count > 0) { SelectConfigTableInfoBll bll = new SelectConfigTableInfoBll(); foreach (DataBaseName dataBase in list) { DataSet ds = bll.Select(dataBase); if (ds != null && ds.Tables.Count > 0) { foreach (DataTable table in ds.Tables) { if (table != null && table.Rows.Count > 0) { foreach (DataRow row in table.Rows) { ConfigTableInfo configInfo = new ConfigTableInfo(); configInfo.DataBaseId = int.Parse(row[0].ToString().Trim()); configInfo.TableName = row[1].ToString().Trim(); configInfo.SensorId = int.Parse(row[2].ToString().Trim()); configInfo.MoudleNo = row[3].ToString().Trim(); configInfo.ChannelId = 1; try { configInfo.ChannelId = int.Parse(row[4].ToString().Trim()); configInfo.Otherflag = row[5].ToString().Trim(); } catch { } if (!ConfigtableInfoDictionary.ContainsKey((int)dataBase.ID)) { ConfigtableInfoDictionary.TryAdd( (int)dataBase.ID, new ConcurrentDictionary <int, ConfigTableInfo>()); } if (!ConfigtableInfoDictionary[(int)dataBase.ID].ContainsKey(configInfo.SensorId)) { ConfigtableInfoDictionary[(int)dataBase.ID].TryAdd( configInfo.SensorId, configInfo); } } } } } } } }
/// <summary> /// 提取其他数据库 /// </summary> /// <param name="dbName"></param> private void ExtractOtherOneDb(DataBaseName dbName) { var bll = new SelectOtherTablesBll(); DataSet ds = null; log.Debug("提取其他数据库"); try { ds = bll.Select(dbName); } catch (Exception ex) { log.Error(ex.Message); } if (ds != null) { log.Debug("提取成功"); foreach (DataTable dt in ds.Tables) { try { List <Data> list = new List <Data>(); if (this.messagesShowEventHandler != null) { var msg = new StringBuilder(); msg.Append("提取").Append(dt.TableName).Append(dt.Rows.Count).Append("条数据"); log.Info(msg.ToString()); this.messagesShowEventHandler( this, new MessagesShowEventArgs { MessageType = MsgType.Info, MessagesShow = msg.ToString() }); } if (dt != null && dt.Rows.Count > 0) { int index = 0; bool flag = false; bool ultraSetFlag = false;//@Modify20150107by yww int flagCount = 0; ConcurrentDictionary <int, ConfigTableInfo> dic = new ConcurrentDictionary <int, ConfigTableInfo>(); ConfigTableInfo config = new ConfigTableInfo(); if ( !string.IsNullOrEmpty( TableFieldInfoDic.GetTableFieldInfoDic() .GeTableFieldInfo((int)dbName.ID, dt.TableName) .OtherFlag)) { index = 1; } if (ConfigTableDic.GetConfigTableDic().SelectList().Count > 0) { ConfigTable configtable = ConfigTableDic.GetConfigTableDic().SelecConfigTable((int)dbName.ID); //ConfigTable configtable = ConfigTableDic.GetConfigTableDic().SelecConfigTable((int)dbName.ID, dt.TableName); if (configtable != null) { flag = true; flagCount = 1; } // 特殊处理(在有Sensor配置的时候直接拿SensorID做为模块号) if (dt.TableName == "MainStreeData") { ultraSetFlag = true; flag = false; flagCount = 1; } } else { flag = false; flagCount = 2; } foreach (DataRow row in dt.Rows) { try { var data = new Data { ProjectCode = Convert.ToInt16(row[0]), DataBaseId = Convert.ToInt32(row[1]), SafeTypeId = Convert.ToInt32(row[2]), ChannelId = 1 }; data.DataSet = new List <double>(); if (flag) { int sensorid = 0; bool identifyBySerialNo = false; string serialNo = ""; if (row[4] != DBNull.Value) { if (int.TryParse(row[4].ToString(), out sensorid)) { data.SensorId = sensorid; identifyBySerialNo = false; } else { serialNo = row[4].ToString(); identifyBySerialNo = true; } //data.SensorId = Convert.ToInt32(row[4]); if (ConfigInfoTable.ConfigtableInfoDictionary.ContainsKey(data.DataBaseId)) { dic = ConfigInfoTable.ConfigtableInfoDictionary[data.DataBaseId]; } else { log.Error("字典中数据库ID关键字不存在"); continue; } if (!identifyBySerialNo) { if (dic.ContainsKey(data.SensorId)) { config = dic[data.SensorId]; } else { log.Error("字典中传感器ID关键字不存在"); continue; } } else { config = (from s in dic.Values where StringComparer.OrdinalIgnoreCase.Compare(s.Otherflag, serialNo) == 0 select s).FirstOrDefault(); if (config == null) { log.Error("字典中传感器唯一标示符不存在"); continue; } } data.ChannelId = config.ChannelId; data.MoudleNo = config.MoudleNo; } else // 没有传感器ID { data.MoudleNo = "1"; } } else { data.ChannelId = 1; if (!ultraSetFlag) { if (row[5] != DBNull.Value) { data.ChannelId = Convert.ToInt32(row[5]); } } if (row[4] != DBNull.Value) { data.MoudleNo = row[4].ToString(); } } if (index == 1) { data.OFlag = Convert.ToInt32(row[6]); } // 采集时间转换问题,提供几种常见格式的时间转换 DateTime acqtime = Convert.ToDateTime(row[3].ToString().Trim()); //string timestr = ; //string[] timeformats = // { // "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm:ss.fff", // "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm:ss.fff", "yyyyMMddHHmmss", // "yyyyMMddHHmmss.fff","yyyy-MM-dd h:mm:ss","yyyy-M-d h:mm:ss" // }; //timestr //bool isSuccess = DateTime.TryParseExact( // timestr, // timeformats, // CultureInfo.CurrentCulture, // DateTimeStyles.None, // out acqtime); //AssumeLocal //if (!isSuccess) //{ // try // { // acqtime = Convert.ToDateTime(timestr); // } // catch // { // log.Error("时间格式转换失败;" + timestr); // } //} data.CollectTime = acqtime; for (int i = 4 + flagCount + index; i < row.ItemArray.Length; i++) { double value; double.TryParse(row[i].ToString().Trim(), out value); data.DataSet.Add(value); } list.Add(data); } catch (Exception ex) { log.Error(ex.Message); } } string strtime = dt.Compute("Max(ACQUISITION_DATETIME)", Boolean.TrueString).ToString(); ExtractionConfigDic.GetExtractionConfigDic() .UpdateExtractionConfig( new ExtractionConfig { DataBaseId = (int)dbName.ID, TableName = dt.TableName, Acqtime = strtime }); } //添加到队列 foreach (Data data in list) { datasTobesent.Enqueue(data); } } catch (Exception ex) { log.Error(ex.Message); } } } else { log.Debug("DataSet==null"); } }