Пример #1
0
        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);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Пример #2
0
        /// <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");
            }
        }