public async Task SaveIdentData(FloutecIdentData data, Action <bool> onSuccess, Action <Exception> onException) { await Task.Factory.StartNew(() => { using (var repo = new DataRecordRepository <FloutecIdentData>(_connection)) { var lastData = repo.GetAll() .Where(d => d.FloutecMeasureLineId == data.FloutecMeasureLineId) .OrderByDescending(o => o.DateAdded) .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="newData">Новые данные</param> /// <param name="exData">Существующие данные</param> /// <returns></returns> public static bool IsEqual(this FloutecIdentData newData, FloutecIdentData exData) { return(newData != null && exData != null && newData.ACP.Equals(exData.ACP) && newData.ACS.Equals(exData.ACS) && newData.BCP.Equals(exData.BCP) && newData.BCS.Equals(exData.BCS) && newData.CCP.Equals(exData.CCP) && newData.CCS.Equals(exData.CCS) && newData.CO2.Equals(exData.CO2) && newData.DSU.Equals(exData.DSU) && newData.SCHET.Equals(exData.SCHET) && newData.DTRUB.Equals(exData.DTRUB) && newData.KALIBSCH.Equals(exData.KALIBSCH) && newData.KONDENS.Equals(exData.KONDENS) && newData.KONTRH.Equals(exData.KONTRH) && newData.MAXRSCH.Equals(exData.MAXRSCH) && newData.MINRSCH.Equals(exData.MINRSCH) && newData.NIZP.Equals(exData.NIZP) && newData.NIZT.Equals(exData.NIZT) && newData.NO2.Equals(exData.NO2) && newData.OTBOR.Equals(exData.OTBOR) && newData.OTSECH.Equals(exData.OTSECH) && newData.PLOTN.Equals(exData.PLOTN) && newData.SHER.Equals(exData.SHER) && newData.VERXDP.Equals(exData.VERXDP) && newData.VERXP.Equals(exData.VERXP) && newData.VERXT.Equals(exData.VERXT)); }
/// <summary> /// Метод расширения объекта данных идентификации для получения данных из таблицы данных идентификации /// </summary> /// <param name="identData">Объект данных идентификации</param> /// <param name="reader"><see cref="OleDbDataReader"/></param> public static void FromIdentTable(this FloutecIdentData identData, OleDbDataReader reader) { identData.KONTRH = DateTime.ParseExact(GetReaderValue(reader, "KONTRH", "").Trim(), timeFormats, CultureInfo.InvariantCulture, DateTimeStyles.None).TimeOfDay; identData.SCHET = GetReaderValue(reader, "SCHET", 0); identData.KALIBSCH = GetReaderValue(reader, "KALIBSCH", 0.0); identData.MAXRSCH = GetReaderValue(reader, "MAXRSCH", 0.0); identData.MINRSCH = GetReaderValue(reader, "MINRSCH", 0.0); identData.VERXP = GetReaderValue(reader, "VERXP", 0.0); identData.VERXDP = GetReaderValue(reader, "VERXDP", 0.0); identData.KONDENS = GetReaderValue(reader, "KONDENS", 0); identData.NIZP = GetReaderValue(reader, "NIZP", 0.0); identData.VERXT = GetReaderValue(reader, "VERXT", 0.0); identData.NIZT = GetReaderValue(reader, "NIZT", 0.0); identData.TYPDAN = GetReaderValue(reader, "TYPDAN", 0.0); }
/// <summary> /// Метод расширения объекта данных идентификации для получения данных из таблицы статических данных /// </summary> /// <param name="identData">Объект данных идентификации</param> /// <param name="reader"><see cref="OleDbDataReader"/></param> public static void FromStatTable(this FloutecIdentData identData, OleDbDataReader reader) { identData.PLOTN = GetReaderValue(reader, "PLOTN", 0.0); identData.CO2 = GetReaderValue(reader, "CO2", 0.0); identData.NO2 = GetReaderValue(reader, "NO2", 0.0); identData.DTRUB = GetReaderValue(reader, "DTRUB", 0.0); identData.DSU = GetReaderValue(reader, "DSU", 0.0); identData.OTSECH = GetReaderValue(reader, "OTSECH", 0.0); identData.OTBOR = GetReaderValue(reader, "OTBOR", 0); identData.ACP = GetReaderValue(reader, "ACP", 0.0); identData.BCP = GetReaderValue(reader, "BCP", 0.0); identData.CCP = GetReaderValue(reader, "CCP", 0.0); identData.ACS = GetReaderValue(reader, "ACS", 0.0); identData.BCS = GetReaderValue(reader, "BCS", 0.0); identData.CCS = GetReaderValue(reader, "CCS", 0.0); }
/// <summary> /// Получение данных идентификации /// </summary> /// <param name="address">Адрес вычислителя</param> /// <param name="line">Номер нитки</param> /// <returns>Данные идентификации</returns> public FloutecIdentData GetIdentData(int address, int line) { // Создание объекта данных идентификации var identData = new FloutecIdentData(); var n_flonit = address * 10 + line; identData.N_FLONIT = n_flonit; var hasData = false; // Формирование строки соединения с таблицей данных идентификации _command.CommandText = "SELECT DISTINCT * FROM ident.DBF WHERE N_FLONIT=" + n_flonit; // Чтение данных идентификации using (var reader = _command.ExecuteReader()) { if (reader != null) { while (reader.Read()) { identData.FromIdentTable(reader); } hasData = reader.HasRows; } } // Формирование строки соединения с таблицей статических данных _command.CommandText = "SELECT DISTINCT * FROM stat.DBF WHERE N_FLONIT=" + n_flonit; // Чтение статических данных using (var reader = _command.ExecuteReader()) { if (reader != null) { while (reader.Read()) { identData.FromStatTable(reader); } hasData = hasData || reader.HasRows; } } return(hasData ? identData : null); }