public async Task SaveInstantData(FloutecInstantData data, Action <bool> onSuccess, Action <Exception> onException) { await Task.Factory.StartNew(() => { using (var repo = new DataRecordRepository <FloutecInstantData>(_connection)) { var lastData = repo.GetAll() .Where(d => d.FloutecMeasureLineId == data.FloutecMeasureLineId) .OrderByDescending(o => o.DAT) .FirstOrDefault(); if (lastData != null && lastData.IsEqual(data)) { return(false); } repo.Insert(data); return(true); } }, TaskCreationOptions.LongRunning) .ContinueWith(result => { if (result.Exception != null) { onException?.Invoke(result.Exception.InnerException); } else { onSuccess?.Invoke(result.Result); } }, TaskScheduler.FromCurrentSynchronizationContext()); }
/// <summary> /// Получение данных идентификации /// </summary> /// <param name="address">Адрес вычислителя</param> /// <param name="line">Номер нитки</param> /// <returns>Мгновенные данные</returns> public FloutecInstantData GetInstantData(int address, int line) { // Создание объекта мгновенных данных var instantData = new FloutecInstantData(); var n_flonit = address * 10 + line; instantData.N_FLONIT = n_flonit; // Формирование строки соединения с таблицей мгновенных _command.CommandText = "SELECT DISTINCT * FROM mgnov.DBF WHERE N_FLONIT=" + n_flonit; // Чтение мгновенных using (var reader = _command.ExecuteReader()) { if (reader == null) { return(instantData); } while (reader.Read()) { instantData.FromInstTable(reader); } if (!reader.HasRows) { return(null); } } return(instantData); }
/// <summary> /// Метод расширения объекта мгновенных данных для получения данных из таблицы мгновенных данных /// </summary> /// <param name="instantData">Объект мгновенных данных</param> /// <param name="reader"><see cref="OleDbDataReader"/></param> public static void FromInstTable(this FloutecInstantData instantData, OleDbDataReader reader) { instantData.DAT = DateTime.ParseExact(GetReaderValue(reader, "DAT", "").Trim(), datetimeFormats, new CultureInfo("en-US"), DateTimeStyles.None); instantData.ABSP = GetReaderValue(reader, "ABSP", 0.0); instantData.ALARMRY = GetReaderValue(reader, "ALARMRY", 0.0); instantData.ALARMSY = GetReaderValue(reader, "ALARMSY", 0.0); instantData.ALLSPEND = GetReaderValue(reader, "ALLSPEND", 0.0); instantData.CURRSPEND = GetReaderValue(reader, "CURRSPEND", 0.0); instantData.DAYSPEND = GetReaderValue(reader, "DAYSPEND", 0); instantData.DLITAS = GetReaderValue(reader, "DLITAS", 0); instantData.DLITBAS = GetReaderValue(reader, "DLITBAS", 0); instantData.DLITMAS = GetReaderValue(reader, "DLITMAS", 0); instantData.GASVIZ = GetReaderValue(reader, "GASVIZ", 0.0); instantData.GAZPLOTNNU = GetReaderValue(reader, "GAZPLOTNNU", 0.0); instantData.GAZPLOTNRU = GetReaderValue(reader, "GAZPLOTNRU", 0.0); instantData.LASTMONTHSPEND = GetReaderValue(reader, "LASTMONTHSPEND", 0.0); instantData.MONTHSPEND = GetReaderValue(reader, "MONTHSPEND", 0.0); instantData.PALARMRY = GetReaderValue(reader, "PALARMRY", 0.0); instantData.PALARMSY = GetReaderValue(reader, "PALARMSY", 0.0); instantData.PD = GetReaderValue(reader, "PD", ""); instantData.PDLITAS = GetReaderValue(reader, "PDLITAS", 0); instantData.PDLITBAS = GetReaderValue(reader, "PDLITBAS", 0); instantData.PDLITMAS = GetReaderValue(reader, "PDLITMAS", 0); instantData.PERPRES = GetReaderValue(reader, "PERPRES", 0.0); instantData.PP = GetReaderValue(reader, "PP", ""); instantData.PQHOUR = GetReaderValue(reader, "PQHOUR", 0.0); instantData.PT = GetReaderValue(reader, "PT", ""); instantData.QHOUR = GetReaderValue(reader, "QHOUR", 0.0); instantData.SQROOT = GetReaderValue(reader, "SQROOT", 0.0); instantData.STPRES = GetReaderValue(reader, "STPRES", 0.0); instantData.TEMP = GetReaderValue(reader, "TEMP", 0.0); instantData.YESTSPEND = GetReaderValue(reader, "YESTSPEND", 0.0); }
/// <summary> /// Метод определения равенства объектов мгновенных данных /// </summary> /// <param name="newData">Новые данные</param> /// <param name="exData">Существующие данные</param> /// <returns></returns> public static bool IsEqual(this FloutecInstantData newData, FloutecInstantData exData) { return(newData != null && exData != null && newData.DAT.Equals(exData.DAT)); }