Ejemplo n.º 1
0
        /// <summary>
        /// Пишем в коллекцию с экземплярами класса OneRecord. А потом за раз коллекцию превратим в апдейты таблицы базы и выполним.
        /// Привязка к id станции! Если в API id поменяют - будет неверно работать!
        /// </summary>
        public void WritePlanValue(int iStationId, DateTime DT, string sPBRnum, Params PAR, double dGenValue)
        {
            KeyTECComponent key = m_listKeyTECComponent.Find(k => !(k.MCentreId.IndexOf(iStationId) < 0));

            if (Equals(key, null) == false)
            {
                //OneRecord HVCrecord = null;
                HTECComponentsRecord HVCrecord = null;

                if (HourlyValuesCollection == null)
                {
                    //HourlyValuesCollection = new SortedList<DateTime, OneRecord>(50);
                    HourlyValuesCollection = new SortedList <DateTime, HTECComponentsRecord>(50);
                }
                else
                {
                    ;
                }
                //А может здесь из базы читать предыдущие значения в коллекцию? Нет. Данные из базы здесь не нужны.

                /*OneField OFthis = HourlyFieldValues.First(item => item.Key == DT && item.Value.sFieldName == PAR.ToString()).Value;     //Не верно, но тема такая
                 * if (OFthis == null) OFthis = new OneField();*/

                if (HourlyValuesCollection.ContainsKey(DT))
                {
                    HVCrecord = HourlyValuesCollection.First(item => item.Key == DT).Value;
                }
                else
                {
                    ;
                }

                if (HVCrecord == null)
                {
                    //HVCrecord = new OneRecord();
                    HVCrecord           = new HTECComponentsRecord(key.MCentreId);
                    HVCrecord.date_time = DT;
                    HVCrecord.parent    = this;
                    HourlyValuesCollection.Add(DT, HVCrecord);      //После добавления можно продолжать модифицировать экземпляр класса - в коллекции та же самая ссылка хранится.
                }
                else
                {
                    ;
                }

                HVCrecord.wr_date_time = DateTime.Now;
                HVCrecord.PBR_number   = sPBRnum;

                HVCrecord.SetValues(iStationId, PAR, dGenValue);
            }
            else
            {
                ; //Такого ГТП (с ном. 'iStationId' не найдено)
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Создаёт "получасовку" по среднему арифметическому между часовыми показателями.
        /// </summary>
        private void GenerateHalfHourValues(HTECComponentsRecord HVCrec, DateTime dtMskNow)
        {
            List <int> listIds = HVCrec.m_srtlist_ppbr.Keys.ToList();

            //OneRecord HVClast_rec = HourlyValuesCollection.Last().Value;
            HTECComponentsRecord HVCprev_rec;
            HTECComponentsRecord HVChalf_hour = new HTECComponentsRecord(listIds);

            //DateTime dtMskNow = TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time"));

            if (HVCrec.date_time.AddHours(-1) <= dtMskNow)
            {
                //Показания в прошлом читаем из базы, из API игнорируем (могут отличаться)
                HVCprev_rec        = new HTECComponentsRecord(listIds);
                HVCprev_rec.parent = this;
                HVCprev_rec.ReadFromDatabase(HVCrec.date_time.AddHours(-1));
            }
            else
            {
                HVCprev_rec = HourlyValuesCollection.First(item => item.Key == HVCrec.date_time.AddHours(-1)).Value;                            //Вынимаем из коллекции показания предыдущего (по отношению к выбранному) часа
            }

            if (HVCrec.date_time > new DateTime() && HVCprev_rec.date_time > new DateTime())        //Если время в экземплярах классов проставлено - считаем, что данные есть.
            {
                HVChalf_hour.date_time    = HVCrec.date_time.AddMinutes(-30);
                HVChalf_hour.parent       = this;
                HVChalf_hour.PBR_number   = HVCrec.PBR_number;
                HVChalf_hour.wr_date_time = DateTime.Now;

                int    i = -1;
                Params j;
                for (i = 0; i < listIds.Count; i++)
                {
                    for (j = Params.PBR; j < Params.COUNT_PARAMS; j++)
                    {
                        //Интерполируем средними арифметическими значениями от соседних часов
                        HVChalf_hour.m_srtlist_ppbr[listIds[i]][(int)j] = (HVCrec.m_srtlist_ppbr[listIds[i]][(int)j].GetValueOrDefault(0) + HVCprev_rec.m_srtlist_ppbr[listIds[i]][(int)j].GetValueOrDefault(0)) / 2;
                    }
                }

                HourlyValuesCollection.Add(HVChalf_hour.date_time, HVChalf_hour);
            }
            else
            {
                ;
            }
        }