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