예제 #1
0
        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());
        }
예제 #2
0
        /// <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));
 }