/// <summary> /// Записать данные в базу. /// </summary> /// <param name="aData">Данные.</param> /// <returns>True - если запись прошла успешно, false - иначе.</returns> public bool TryWriteData(DataValue aData) { try { oracleConnection.LockConnection(); Logger.Debug("Попытка записи данных"); if (!oracleConnection.IsConnected()) { Logger.Info("Нет подключения к серверу"); return false; } insertDataValue.Connection = oracleConnection.GetOracleConnection(); insertDataValue.Parameters["ObjectId"].Value = aData.ObjectId; insertDataValue.Parameters["DataId"].Value = aData.DataId; insertDataValue.Parameters["Value"].Value = aData.Value; insertDataValue.Parameters["ValueTime"].Value = aData.ValueTime; insertDataValue.ExecuteNonQuery(); oracleConnection.UpdateLastOperationTime(); Logger.Debug("Запись выполнена успешно"); return true; } catch (Exception ex) { oracleConnection.ProcessError(ex); return false; } finally { oracleConnection.ReleaseConnection(); } }
/// <summary> /// Обратная связь. Происходит при получении данных из DataReader'а, на который подписан текущий WagstaffBridge. /// </summary> /// <param name="aDataValue">Прочитанные данные.</param> public void OnReadedData(DataValue aDataValue) { if (its.TryWriteData(aDataValue)) { Logger.Info("Данные успешно сохранены в ITS"); } else { Logger.Info("Данные сохранены в буферную таблицу"); buffer.StoreData(aDataValue); } }
/// <summary> /// Попытаться переслать данные из буфера в указанный DataWriter. Метод вызывается таймером. /// </summary> /// <param name="sender">Object.</param> /// <param name="e">ElapsedEventArgs.</param> private void TrySendData(object sender = null, ElapsedEventArgs e = null) { if (!configuration.IsInitialized()) { Logger.Debug("Конфигурация не инициализирована"); return; } var sendedDataValue = new List<DataValue>(); try { sqlConnection.LockConnection(); if (!sqlConnection.IsConnected()) { Logger.Info("Нет подключения к серверу"); return; } selectGetData.Connection = sqlConnection.GetSqlConnection(); // вытаскиваем все данные из таблицы using (var reader = selectGetData.ExecuteReader()) { sqlConnection.UpdateLastOperationTime(); while (reader.Read()) { var dataValue = new DataValue { Id = reader.GetInt32(0), TypeId = reader.GetInt32(1), ObjectId = reader.GetInt32(2), DataId = reader.GetInt32(3), ValueTime = reader.GetDateTime(4), Value = reader.GetDouble(5), TypeName = reader.GetString(6), ObjectName = reader.GetString(7), DataName = reader.GetString(8) }; Logger.Debug("Получены данные из буфера"); SetIdsToDataValue(dataValue); if (dataWriter.TryWriteData(dataValue)) { Logger.Info("Данные успешно переданы из буфера в ИТС"); sendedDataValue.Add(dataValue); } } } } catch (Exception ex) { sqlConnection.ProcessError(ex); } finally { sqlConnection.ReleaseConnection(); } foreach (var dataValue in sendedDataValue) { RemoveData(dataValue); } }
/// <summary> /// Установить данным имена по конфигурации. /// </summary> /// <param name="aData"></param> private void SetNamesToDataValue(DataValue aData) { var dataInfoList = configuration.DataInfo; foreach (var item in dataInfoList) { if (item.TypeId == aData.TypeId && item.ObjectId == aData.ObjectId && item.DataId == aData.DataId) { aData.TypeName = item.TypeName; aData.ObjectName = item.ObjectName; aData.DataName = item.DataName; return; } } throw new ArgumentException("В конфигурации нет идентификаторов для данных, вставляемых в буфер"); }
/// <summary> /// Установить данным из буфера все ID по конфигурации /// </summary> /// <param name="aData"></param> private void SetIdsToDataValue(DataValue aData) { var dataInfoList = configuration.DataInfo; foreach (var item in dataInfoList) { if (item.TypeName == aData.TypeName && item.ObjectName == aData.ObjectName && item.DataName == aData.DataName) { aData.TypeId = item.TypeId; aData.ObjectId = item.ObjectId; aData.DataId = item.DataId; return; } } throw new ArgumentException("В конфигурации нет идентификаторов для данных, полученных из буфера"); }
/// <summary> /// Удалить данные из буфера. /// </summary> /// <param name="aData">Данные.</param> private void RemoveData(DataValue aData) { try { sqlConnection.LockConnection(); Logger.Debug("Удаление данных из буфера"); deleteData.Connection = sqlConnection.GetSqlConnection(); deleteData.Parameters["Id"].Value = aData.Id; deleteData.ExecuteNonQuery(); sqlConnection.UpdateLastOperationTime(); Logger.Debug("Данные успешно удалены"); } catch (Exception ex) { sqlConnection.ProcessError(ex); } finally { sqlConnection.ReleaseConnection(); } }
/// <summary> /// Сохранить данные в буферную таблицу. /// </summary> /// <param name="aData">Данные.</param> public void StoreData(DataValue aData) { try { sqlConnection.LockConnection(); Logger.Debug("Сохранение данных в буфер"); SetNamesToDataValue(aData); insertStoreData.Connection = sqlConnection.GetSqlConnection(); // сохраняем данные в таблицу - буфер insertStoreData.Parameters["TypeId"].Value = -1; insertStoreData.Parameters["ObjectId"].Value = -1; insertStoreData.Parameters["DataId"].Value = -1; insertStoreData.Parameters["ValueTime"].Value = aData.ValueTime; insertStoreData.Parameters["Value"].Value = aData.Value; insertStoreData.Parameters["TypeName"].Value = aData.TypeName; insertStoreData.Parameters["ObjectName"].Value = aData.ObjectName; insertStoreData.Parameters["DataName"].Value = aData.DataName; insertStoreData.ExecuteNonQuery(); sqlConnection.UpdateLastOperationTime(); Logger.Debug("Данные успешно сохранены"); } catch (Exception ex) { sqlConnection.ProcessError(ex); } finally { sqlConnection.ReleaseConnection(); } }