Beispiel #1
0
 /// <summary>
 /// 启动线程。
 /// </summary>
 public void Start(IVTestConfigElement cfg)
 {
     LoggingService.Info(string.Format("IVTestDataTransfer--Start {0}", DateTime.Now));
     this.Loop         = true;
     this.IVTestConfig = cfg;
     this.Thread       = new Thread(this._threadStart);
     this.Thread.Start(this);
 }
Beispiel #2
0
        /// <summary>
        /// 数据转置
        /// </summary>
        private static void TransferData(IVTestDataTransferThreadWrapper wrapper)
        {
            while (wrapper.Loop)
            {
                IVTestConfigElement cfg         = wrapper.IVTestConfig;
                IVTestDeviceType    tpye        = cfg.Type;
                DateTime            dtStartTime = DateTime.Now;
                string accConString             = string.Empty;
                string msg = string.Empty;

                try
                {
                    //通过获取的设备类型进行上传方式的
                    switch (tpye)
                    {
                    case IVTestDeviceType.Pasan:
                    case IVTestDeviceType.Results:
                    case IVTestDeviceType.SunData:
                        if (!string.IsNullOrEmpty(cfg.Path))
                        {
                            accConString = string.Format("Provider={0};Data Source={1}", cfg.AccessProvider, cfg.Path);
                            int      count     = ExecuteDataTransfer(accConString, cfg);
                            DateTime dtEndTime = DateTime.Now;
                            if (count > 0)
                            {
                                msg = string.Format("IVTestDataTransfer--开始时间:{0};结束时间:{1};耗用时间:{2}秒;转置数据数量:{3}。{4}",
                                                    dtStartTime, dtEndTime, (dtEndTime - dtStartTime).TotalSeconds, count, cfg.Path);
                                LoggingService.Info(msg);
                            }
                        }
                        else
                        {
                            msg = string.Format("IVTestDataTransfer--开始时间:{0};获取ACCESS数据库文件失败。", dtStartTime);
                            LoggingService.Info(msg);
                        }
                        break;

                    case IVTestDeviceType.PasanPostGre:
                        if (!string.IsNullOrEmpty(cfg.DatabaseAddress) &&
                            !string.IsNullOrEmpty(cfg.DatabaseName) &&
                            !string.IsNullOrEmpty(cfg.DatabasePort) &&
                            !string.IsNullOrEmpty(cfg.DatabaseLoginName) &&
                            !string.IsNullOrEmpty(cfg.DatabaseLoginPassword))
                        {
                            accConString = string.Format("Server={0};Port={1};UserId={2};Password={3};Database={4};",
                                                         cfg.DatabaseAddress,
                                                         cfg.DatabasePort,
                                                         cfg.DatabaseLoginName,
                                                         cfg.DatabaseLoginPassword,
                                                         cfg.DatabaseName);

                            int      count     = ExecuteDataTransfer(accConString, cfg);
                            DateTime dtEndTime = DateTime.Now;
                            if (count > 0)
                            {
                                msg = string.Format("IVTestDataTransfer--开始时间:{0};结束时间:{1};耗用时间:{2}秒;转置数据数量:{3}。{4}",
                                                    dtStartTime, dtEndTime, (dtEndTime - dtStartTime).TotalSeconds, count, cfg.Path);
                                LoggingService.Info(msg);
                            }
                        }
                        else
                        {
                            msg = string.Format("IVTestDataTransfer--开始时间:{0};连接数据库配置信息异常。", dtStartTime);
                            LoggingService.Info(msg);
                        }
                        break;

                    default:
                        break;
                    }
                }
                catch (Exception ex)
                {
                    LoggingService.Error(string.Format("IVTestDataTransfer--Error:{0}", ex.Message));
                }
                if (wrapper.Loop)
                {
                    Thread.Sleep(cfg.Millisecond);
                }
            }
            wrapper.AutoResetEvent.Set();
        }
Beispiel #3
0
        /// <summary>
        /// 执行命令。
        /// </summary>
        public override void Run()
        {
            IVTestConfigElement cfg = null;

            string type   = PropertyService.Get(PROPERTY_FIELDS.IVTEST_DATA_TYPE).Trim();
            string device = PropertyService.Get(PROPERTY_FIELDS.IVTEST_DATA_DEVICE).Trim();

            if (!string.IsNullOrEmpty(type) & !string.IsNullOrEmpty(device))
            {
                IVTestDeviceType dvType = (IVTestDeviceType)Enum.Parse(typeof(IVTestDeviceType), type, true);

                switch (type)
                {
                case "1":
                case "2":
                case "3":
                    string path = PropertyService.Get(PROPERTY_FIELDS.IVTEST_DATA_PATH).Trim();

                    if (!string.IsNullOrEmpty(path))
                    {
                        cfg = new IVTestConfigElement(device, path, dvType);
                        //重新启动IV测试数据转置线程。
                        if (ThreadWrapper.Loop)
                        {
                            ThreadWrapper.Stop();
                        }
                        ThreadWrapper.Start(cfg);
                    }
                    break;

                case "4":
                    string databaseAddress       = PropertyService.Get(PROPERTY_FIELDS.IVTEST_DATA_DB_ADDRESS).Trim();
                    string databaseName          = PropertyService.Get(PROPERTY_FIELDS.IVTEST_DATA_DB_NAME).Trim();
                    string databasePort          = PropertyService.Get(PROPERTY_FIELDS.IVTEST_DATA_DB_PORT).Trim();
                    string databaseLoginName     = PropertyService.Get(PROPERTY_FIELDS.IVTEST_DATA_DB_LGNAME).Trim();
                    string databaseLoginPassword = PropertyService.Get(PROPERTY_FIELDS.IVTEST_DATA_DB_LGPW).Trim();

                    if (!string.IsNullOrEmpty(databaseAddress) &&
                        !string.IsNullOrEmpty(databaseName) &&
                        !string.IsNullOrEmpty(databasePort) &&
                        !string.IsNullOrEmpty(databaseLoginName) &&
                        !string.IsNullOrEmpty(databaseLoginPassword)
                        )
                    {
                        cfg = new IVTestConfigElement(device,
                                                      databaseAddress,
                                                      databaseName,
                                                      databasePort,
                                                      databaseLoginName,
                                                      databaseLoginPassword,
                                                      dvType);
                        //重新启动IV测试数据转置线程。
                        if (ThreadWrapper.Loop)
                        {
                            ThreadWrapper.Stop();
                        }
                        ThreadWrapper.Start(cfg);
                    }

                    break;

                default:
                    break;
                }
            }
            else
            {
                if (_wrapper != null)
                {
                    _wrapper.Stop();
                    _wrapper.Dispose();
                    _wrapper = null;
                }
            }
        }
Beispiel #4
0
        /// <summary>
        /// 执行IV测试数据转置。
        /// </summary>
        /// <returns>新增IV测试数据的个数。</returns>
        private static int ExecuteDataTransfer(string accessConnectionString, IVTestConfigElement cfg)
        {
            int count = 0;
            IVTestDataTransferEntity entity = new IVTestDataTransferEntity();
            //根据设备代码获取SQL Server数据库中最大的测试时间值。
            DateTime         dtMaxTestTime = entity.GetMaxIVTestTime(cfg.DeviceNo);
            IVTestDeviceType type          = cfg.Type;
            DataSet          dsIVTestData  = null;

            //根据设备类型进行数据库连接的区分
            switch (type)
            {
            case IVTestDeviceType.Pasan:
            case IVTestDeviceType.Results:
            case IVTestDeviceType.SunData:
                //创建 Access的连接对象。
                using (OleDbConnection oleCon = new OleDbConnection(accessConnectionString))
                {
                    oleCon.Open();
                    using (OleDbCommand oleCmd = oleCon.CreateCommand())
                    {
                        //组织查询IV测试数据的SQL语句
                        StringBuilder sbSql = new StringBuilder();
                        string        sql   = GetQueryTestDataSql(cfg.Type);
                        sbSql.AppendFormat("SELECT TOP 100 '{2}' AS DeviceNo,a.* FROM ({0}) a WHERE a.TTIME>'{1}' ORDER BY a.TTIME ASC",
                                           sql,
                                           dtMaxTestTime.ToString("yyyy-MM-dd HH:mm:ss"),
                                           cfg.DeviceNo);
                        //从Access数据库获取>开始日期和开始时间的数据。
                        oleCmd.CommandType = CommandType.Text;
                        oleCmd.CommandText = sbSql.ToString();
                        OleDbDataAdapter oleAdapter = new OleDbDataAdapter(oleCmd);
                        dsIVTestData = new DataSet();
                        oleAdapter.Fill(dsIVTestData);
                    }
                    oleCon.Close();
                }
                break;

            case IVTestDeviceType.PasanPostGre:
                //创建 PostGre 的连接对象。
                using (NpgsqlConnection npgCon = new NpgsqlConnection(accessConnectionString))
                {
                    npgCon.Open();
                    using (NpgsqlCommand npgCmd = npgCon.CreateCommand())
                    {
                        //组织查询IV测试数据的SQL语句
                        StringBuilder sbSql = new StringBuilder();
                        string        sql   = GetQueryTestDataSql(cfg.Type);
                        sbSql.AppendFormat("SELECT  '{2}' AS DeviceNo,a.* FROM ({0}) a WHERE a.TTIME>'{1}' ORDER BY a.TTIME ASC limit 100",
                                           sql,
                                           dtMaxTestTime.ToString("yyyy-MM-dd HH:mm:ss"),
                                           cfg.DeviceNo);
                        //从Access数据库获取>开始日期和开始时间的数据。
                        npgCmd.CommandType = CommandType.Text;
                        npgCmd.CommandText = sbSql.ToString();
                        NpgsqlDataAdapter npgAdapter = new NpgsqlDataAdapter(npgCmd);
                        dsIVTestData = new DataSet();
                        npgAdapter.Fill(dsIVTestData);
                    }
                    npgCon.Close();
                }
                break;

            default:
                break;
            }


            //新增IV测试数据
            if (dsIVTestData != null && dsIVTestData.Tables.Count > 0 && dsIVTestData.Tables[0].Rows.Count > 0)
            {
                string operationName = PropertyService.Get(PROPERTY_FIELDS.IVTEST_DATA_OPERATION_NAME).Trim();
                string userId        = PropertyService.Get(PROPERTY_FIELDS.USER_NAME);
                dsIVTestData.ExtendedProperties.Add(PROPERTY_FIELDS.IVTEST_DATA_OPERATION_NAME, operationName);
                dsIVTestData.ExtendedProperties.Add(PROPERTY_FIELDS.USER_NAME, userId);
                count = entity.InsertIVTestData(dsIVTestData);
            }

            return(count);
        }