Esempio n. 1
0
        protected override int getPPBRValuesResponse(DataTable table, DateTime date)
        {
            int iRes = 0;
            int i = -1, c = -1 //Переменаые цикла
            , MTermId    = -1  //Идентификатор компонента ТЭЦ в системе Модес-Терминал
            , hour       = -1  //Переменаая цикла (номер часа)
            , indxFactor = -1  //Индекс типа значения (0 - P, 1 - Pmin, 2 - Pmax)
                               //, iMinPBRNumber = -1
            , iMaxPBRNumber     = -1;
            INDEX_PLAN_FACTOR j = INDEX_PLAN_FACTOR.Unknown;

            //Номер ПБР для всех типов (P, Pmin, Pmax) значений
            int[]     arPBRNumber = new int[(int)INDEX_PLAN_FACTOR.COUNT];
            DataRow[] hourRows;
            RDGStruct[,] arRDGValues = null;

            TECComponent comp = FindTECComponent(CurrentKey) as TECComponent;

            arRDGValues = new RDGStruct[comp.m_listMTermId.Count, m_curRDGValues.Length];

            if (CheckNameFieldsOfTable(table, new string [] { "objName", "idFactor", "Datetime", "Value_MBT" }) == true)
            {
                for (c = 0; c < comp.m_listMTermId.Count; c++)
                {
                    MTermId = comp.m_listMTermId [c];

                    for (hour = 1; hour < 25; hour++)
                    {
                        try {
                            //Выбрать строки только для часа 'hour'
                            //hourRows = table.Select(@"Datetime='" + date.Date.AddHours(hour + 1 - ts.Hours).ToString(@"yyyyMMdd HH:00:00.000") + @"'");
                            //hourRows = table.Select(@"Datetime='" + date.Date.AddHours(hour + 1 - ts.Hours) + @"'");
                            //hourRows = table.Select(@"Datetime=#" + date.Date.AddHours(hour + 1 - ts.Hours).ToString(@"yyyyMMdd HH:00:00.000") + @"#");
                            hourRows = table.Select(string.Format(@"objName={0} AND Datetime=#{1}#", MTermId, date.Date.AddHours(hour - ASUTP.Core.HDateTime.TS_MSK_OFFSET_OF_UTCTIMEZONE.Hours).ToString(@"yyyy-MM-dd HH:00:00.000")));

                            //Присвоить исходные для часа значения
                            //PBRNumber = -1;
                            arPBRNumber [(int)INDEX_PLAN_FACTOR.PBR]          =
                                arPBRNumber [(int)INDEX_PLAN_FACTOR.Pmin]     =
                                    arPBRNumber [(int)INDEX_PLAN_FACTOR.Pmax] =
                                        -1; // номер набора
                            // значения по типам (0, 1, 2)
                            arRDGValues [c, hour - 1].pbr  = -1.0F;
                            arRDGValues [c, hour - 1].pmin = -1.0F;
                            arRDGValues [c, hour - 1].pmax = -1.0F;
                            //ПБР-номер не известен
                            arRDGValues [c, hour - 1].pbr_number = string.Empty;
                            //Проверить количество строк для часа
                            if (hourRows.Length > 0)
                            {
                                //ТОлько при наличии строк для часа 'hour'
                                for (i = 0; i < hourRows.Length; i++)
                                {
                                    //Установить тип значения в строке для часа
                                    indxFactor = Int32.Parse(hourRows [i] [@"idFactor"].ToString());
                                    //Сравнить номер набора строки с ранее обработанным номером набора (в предыдущих строках)
                                    if (!(arPBRNumber [indxFactor] > Int32.Parse(hourRows [i] [@"PBR_NUMBER"].ToString())))    //Толькоо, если номер набора в текущей строке больше
                                    //??? номер ПБР назначается для всех 3-х типов значений (P, Pmin, Pmax)
                                    // , но номер ПБР индивидуален для КАЖДого из них
                                    {
                                        arPBRNumber [indxFactor] = Int32.Parse(hourRows [i] [@"PBR_NUMBER"].ToString());
                                        ////Вывод на консоль отладочной информации
                                        //for (j = 0; j < hourRows [i].Table.Columns.Count; j ++) {
                                        //    Console.Write(@"[" + hourRows[i].Table.Columns[j].ColumnName + @"] = " + hourRows[i][hourRows[i].Table.Columns[j].ColumnName] + @"; ");
                                        //}
                                        //Console.WriteLine(@"");
                                        //Присвоить значения в ~ от типа
                                        switch (indxFactor)
                                        {
                                        case 0:     //'P'
                                            if (!(hourRows [i] [@"Value_MBT"] is DBNull))
                                            {
                                                arRDGValues [c, hour - 1].pbr = (double)hourRows [i] [@"Value_MBT"];
                                            }
                                            else
                                            {
                                                arRDGValues [c, hour - 1].pbr = 0;
                                            }
                                            break;

                                        case 1:     //'Pmin'
                                            if (!(hourRows [i] [@"Value_MBT"] is DBNull))
                                            {
                                                arRDGValues [c, hour - 1].pmin = (double)hourRows [i] [@"Value_MBT"];
                                            }
                                            else
                                            {
                                                arRDGValues [c, hour - 1].pmin = 0;
                                            }
                                            break;

                                        case 2:     //'Pmax'
                                            if (!(hourRows [i] [@"Value_MBT"] is DBNull))
                                            {
                                                arRDGValues [c, hour - 1].pmax = (double)hourRows [i] [@"Value_MBT"];
                                            }
                                            else
                                            {
                                                arRDGValues [c, hour - 1].pmax = 0;
                                            }
                                            break;

                                        default:
                                            break;
                                        }
                                    }
                                    else
                                    {
                                        ;
                                    }
                                }
                            }
                            else
                            //Если не найдено ни одной строки для часа
                            if (hour > 1)
                            {
                                //Если не 1-ый час - пролонгация
                                arRDGValues [c, hour - 1].pbr  = arRDGValues [c, hour - 2].pbr;
                                arRDGValues [c, hour - 1].pmin = arRDGValues [c, hour - 2].pmin;
                                arRDGValues [c, hour - 1].pmax = arRDGValues [c, hour - 2].pmax;

                                for (j = INDEX_PLAN_FACTOR.PBR; j < INDEX_PLAN_FACTOR.COUNT; j++)
                                {
                                    arPBRNumber [(int)j] = Int32.Parse(arRDGValues [c, hour - 2].pbr_number.Substring(PBR_PREFIX.Length));
                                }

                                arRDGValues [c, hour - 1].pbr_number  = arRDGValues [c, hour - 2].pbr_number;
                                arRDGValues [c, hour - 1].dtRecUpdate = arRDGValues [c, hour - 2].dtRecUpdate;
                            }
                            else
                            {
                                ;
                            }

                            //iMinPBRNumber = 25;
                            iMaxPBRNumber = -1;
                            for (j = INDEX_PLAN_FACTOR.PBR; j < INDEX_PLAN_FACTOR.COUNT; j++)
                            {
                                if (arPBRNumber [(int)j] > 0)
                                {
                                    //???при каком индексе присваивать номер набора
                                    //arRDGValues[c, hour - 1].pbr_number = HAdmin.PBR_PREFIX + PBRNumber;
                                    //if (iMinPBRNumber > arPBRNumber[(int)j])
                                    if (iMaxPBRNumber < arPBRNumber [(int)j])
                                    {
                                        //iMinPBRNumber = arPBRNumber[(int)j];
                                        iMaxPBRNumber = arPBRNumber [(int)j];
                                    }
                                    else
                                    {
                                        ;
                                    }

                                    if (hour > 1)
                                    {
                                        switch (j)
                                        {
                                        case INDEX_PLAN_FACTOR.PBR:
                                            if (arRDGValues [c, hour - 1].pbr < 0)
                                            {
                                                arRDGValues [c, hour - 1].pbr = arRDGValues [c, hour - 2].pbr;
                                            }
                                            else
                                            {
                                                ;
                                            }
                                            break;

                                        case INDEX_PLAN_FACTOR.Pmin:
                                            if (arRDGValues [c, hour - 1].pmin < 0)
                                            {
                                                arRDGValues [c, hour - 1].pmin = arRDGValues [c, hour - 2].pmin;
                                            }
                                            else
                                            {
                                                ;
                                            }
                                            break;

                                        case INDEX_PLAN_FACTOR.Pmax:
                                            if (arRDGValues [c, hour - 1].pmax < 0)
                                            {
                                                arRDGValues [c, hour - 1].pmax = arRDGValues [c, hour - 2].pmax;
                                            }
                                            else
                                            {
                                                ;
                                            }
                                            break;

                                        default:
                                            break;
                                        }
                                    }
                                    else
                                    {
                                        ;
                                    }
                                }
                                else
                                {
                                    ; //arRDGValues[c, hour - 1].pbr_number = GetPBRNumber (hour);
                                }
                                int hh = -1;
                                for (hh = hour; hh > 0; hh--)
                                {
                                    //??? Необходима ИНДИВИДуальная проверка номера ПБР
                                    // для каждогоо типа значений (P, Pmin, Pmax)
                                    if (arRDGValues [c, hh - 1].pbr_number.Equals(string.Empty) == false)
                                    {
                                        if (arPBRNumber [(int)j] < Int32.Parse(arRDGValues [c, hh - 1].pbr_number.Substring(PBR_PREFIX.Length)))
                                        {
                                            arPBRNumber [(int)j] = Int32.Parse(arRDGValues [c, hh - 1].pbr_number.Substring(PBR_PREFIX.Length));
                                            //if (iMinPBRNumber > arPBRNumber[(int)j])
                                            if (iMaxPBRNumber < arPBRNumber [(int)j])
                                            {
                                                //iMinPBRNumber = arPBRNumber[(int)j];
                                                iMaxPBRNumber = arPBRNumber [(int)j];
                                            }
                                            else
                                            {
                                                ;
                                            }

                                            switch (j)
                                            {
                                            case INDEX_PLAN_FACTOR.PBR:
                                                arRDGValues [c, hour - 1].pbr = arRDGValues [c, hh - 1].pbr;
                                                break;

                                            case INDEX_PLAN_FACTOR.Pmin:
                                                arRDGValues [c, hour - 1].pmin = arRDGValues [c, hh - 1].pmin;
                                                break;

                                            case INDEX_PLAN_FACTOR.Pmax:
                                                arRDGValues [c, hour - 1].pmax = arRDGValues [c, hh - 1].pmax;
                                                break;

                                            default:
                                                break;
                                            }

                                            //arRDGValues[c, hour - 1].pbr_number = arRDGValues[c, hh - 1].pbr_number;

                                            //break;
                                        }
                                        else
                                        {
                                            ;
                                        }
                                    }
                                    else
                                    {
                                        ;
                                    }
                                }
                                // цикл-окончание hh
                            } // цикл-окончание по индексу типов значений

                            arRDGValues [c, hour - 1].pbr_number = $"{HAdmin.PBR_PREFIX}{iMaxPBRNumber}";

                            arRDGValues [c, hour - 1].dtRecUpdate = DateTime.MinValue;

                            arRDGValues [c, hour - 1].fc               = false;
                            arRDGValues [c, hour - 1].recomendation    = 0;
                            arRDGValues [c, hour - 1].deviationPercent = false;
                            arRDGValues [c, hour - 1].deviation        = 0;
                        } catch (Exception e) {
                            ASUTP.Logging.Logg().Exception(e, @"AdminMT::GetPPBRValuesResponse () - ...", ASUTP.Logging.INDEX_MESSAGE.NOT_SET);
                        }
                    } // цикл-окончание по номеру часа 'hour'
                }     // цикл-окончание по идентификатору составного элемента (только ГТП3-6 НТЭЦ-5)
            }
            else
            {
                ASUTP.Logging.Logg().Error($"таблица не содержит необходимый набор полей", ASUTP.Logging.INDEX_MESSAGE.NOT_SET);
            }

            for (hour = 1; hour < 25; hour++)
            {
                m_curRDGValues[hour - 1].pbr  = -1F;
                m_curRDGValues[hour - 1].pmin = -1F;
                m_curRDGValues[hour - 1].pmax = -1F;

                m_curRDGValues[hour - 1].pbr_number = string.Empty;

                for (c = 0; c < comp.m_listMTermId.Count; c++)
                {
                    MTermId = comp.m_listMTermId[c];

                    if (!(arRDGValues[c, hour - 1].pbr < 0))
                    {
                        // значение есть, необходимо суммировать, установить в "0"
                        if (m_curRDGValues[hour - 1].pbr < 0)
                        {
                            m_curRDGValues[hour - 1].pbr = 0F;
                        }
                        else
                        {
                            ;
                        }
                        // суммируем
                        m_curRDGValues[hour - 1].pbr += arRDGValues[c, hour - 1].pbr;
                    }
                    else
                    {
                        ;
                    }
                    if (!(arRDGValues[c, hour - 1].pmin < 0))
                    {
                        // значение есть, необходимо суммировать, установить в "0"
                        if (m_curRDGValues[hour - 1].pmin < 0)
                        {
                            m_curRDGValues[hour - 1].pmin = 0F;
                        }
                        else
                        {
                            ;
                        }
                        // суммируем
                        m_curRDGValues[hour - 1].pmin += arRDGValues[c, hour - 1].pmin;
                    }
                    else
                    {
                        ;
                    }
                    if (!(arRDGValues[c, hour - 1].pmax < 0))
                    {
                        // значение есть, необходимо суммировать, установить в "0"
                        if (m_curRDGValues[hour - 1].pmax < 0)
                        {
                            m_curRDGValues[hour - 1].pmax = 0F;
                        }
                        else
                        {
                            ;
                        }
                        // суммируем
                        m_curRDGValues[hour - 1].pmax += arRDGValues[c, hour - 1].pmax;
                    }
                    else
                    {
                        ;
                    }
                } // цикл-окончание по идентификатору составного элемента (только ГТП3-6 НТЭЦ-5)
                //???
                m_curRDGValues[hour - 1].pbr_number = arRDGValues[0, hour - 1].pbr_number;
                //???
                m_curRDGValues[hour - 1].dtRecUpdate = DateTime.MinValue;

                m_curRDGValues[hour - 1].fc               = false;
                m_curRDGValues[hour - 1].recomendation    = 0;
                m_curRDGValues[hour - 1].deviationPercent = false;
                m_curRDGValues[hour - 1].deviation        = 0;
            } // цикл-окончание по номеру часа 'hour'

            return(iRes);
        }
Esempio n. 2
0
        private bool fPPBR(DataTable table, string [] idsInner, DateTime date)
        {
            bool bRes = false;

            Modes.BusinessLogic.IGenObject igo;
            int i      = -1
            , idInner  = -1;
            bool valid = false;
            IList <PlanValueItem> listPVI = null;

            DataRow [] ppbr_rows  = null;
            string     pbr_number = string.Empty
            , pbr_indx;
            DateTime          dateCurrent;
            INDEX_PLAN_FACTOR indx_plan_factor = INDEX_PLAN_FACTOR.Unknown;

            table.Columns.Add("DATE_PBR", typeof(DateTime));
            table.Columns.Add("WR_DATE_TIME", typeof(DateTime));
            table.Columns.Add(INDEX_PLAN_FACTOR.PBR.ToString(), typeof(double));
            table.Columns.Add(INDEX_PLAN_FACTOR.Pmin.ToString(), typeof(double));
            table.Columns.Add(INDEX_PLAN_FACTOR.Pmax.ToString(), typeof(double));
            table.Columns.Add("PBR_NUMBER", typeof(string));
            //table.Columns.Add("ID_COMPONENT", typeof(Int32));

            for (i = 0; i < idsInner.Length; i++)
            {
                valid = Int32.TryParse(idsInner [i], out idInner);

                if (valid == false)
                {
                    continue;
                }
                else
                {
                    ;
                }

                igo = delegateFunctionFindIGO(idInner);

                if (igo == null)
                {
                    igo = delegateFunctionAddIGO(idInner);
                }
                else
                {
                    ;
                }

                if (!(igo == null))
                {
                    try {
                        listPVI = _mcApi.GetPlanValuesActual(date.LocalHqToSystemEx(), date.AddDays(1).LocalHqToSystemEx(), igo);

                        bRes = true;
                    } catch (Exception e) {
                        Logging.Logg().Exception(e, string.Format(@"DbMCInterface::GetData () - GetPlanValuesActual () - получение значений для '{0}', [IdInner={1}]..."
                                                                  , igo.Description, igo.IdInner)
                                                 , Logging.INDEX_MESSAGE.NOT_SET);

                        delegateGetData_OnFillError(new FillErrorEventArgs(table, new object [] { }));

                        bRes = false;
                    }

                    if (bRes == true)
                    {
                        if (listPVI.Count == 0)
                        {
                            Logging.Logg().Warning(string.Format("DbMCInterface::GetData () - GetPlanValuesActual () - нет параметров генерации для '{0}', [ID={1}]..."
                                                                 , igo.Description, igo.IdInner)
                                                   , Logging.INDEX_MESSAGE.NOT_SET);
                        }
                        else
                        {
                            ;
                        }
                    }
                    else
                    {
                        //ОШИБКА получения значений!
                        break;
                    }

                    foreach (PlanValueItem pvi in listPVI.OrderBy(RRR => RRR.DT))
                    {
                        //Console.WriteLine ("    " + pvi.DT.SystemToLocalHqEx ().ToString () + " " +
                        //    pvi.Type.ToString () + " [" + _mcListPFI [pvi.ObjFactor].Description + "] " +
                        //    /*it.ObjName это id генерирующего объекта*/
                        //    _mcListPFI [pvi.ObjFactor].Name + " =" + pvi.Value.ToString ());

                        dateCurrent = pvi.DT.SystemToLocalHqEx();
                        pbr_number  = pvi.Type.ToString().IndexOf(StatisticCommon.HAdmin.PBR_PREFIX) < 0
                            ? StatisticCommon.HAdmin.PBR_PREFIX + pvi.Type.ToString()
                                : pvi.Type.ToString();

                        //Получение записи с другими параметрами за это время
                        ////Вариант №1
                        //if (srtListPPBR.ContainsKey(dateCurrent))
                        //    ppbr = srtListPPBR.First(item => item.Key == dateCurrent).Value;
                        //else
                        //    ;

                        //Вариант №2
                        if (table.Rows.Count > 0)
                        {
                            ppbr_rows = table.Select("DATE_PBR='" + dateCurrent.ToString() + "'");
                        }
                        else
                        {
                            ;
                        }

                        //Обработка получения записи
                        ////Вариант №1
                        //if (ppbr == null)
                        //{
                        //    ppbr = new PPBR_Record();
                        //    ppbr.date_time = dateCurrent;
                        //    ppbr.wr_date_time = DateTime.Now;
                        //    ppbr.PBR_number = pvi.Type.ToString();
                        //    //ppbr.idInner = igo.IdInner; //??? Для TEC5_TG36 2 объекта (TG34 + TG56), т.е. 2 IGO

                        //    //После добавления можно продолжать модифицировать экземпляр класса - в коллекции та же самая ссылка хранится.
                        //    srtListPPBR.Add(dateCurrent, ppbr);
                        //}
                        //else
                        //    ;

                        //Вариант №2, 3
                        if ((ppbr_rows == null) ||
                            (ppbr_rows.Length == 0))
                        {
                            table.Rows.Add(new object [] { dateCurrent, DateTime.Now, 0F, 0F, 0F, pbr_number /*, igo.IdInner*/ });
                            ppbr_rows = table.Select($"DATE_PBR='{dateCurrent.ToString ()}'");
                        }
                        else
                        {
                            ;
                        }

                        ppbr_rows [0] ["PBR_NUMBER"] = pbr_number;
                        indx_plan_factor             = (INDEX_PLAN_FACTOR)_mcListPFI [pvi.ObjFactor].Id;

                        switch (indx_plan_factor)
                        {
                        case INDEX_PLAN_FACTOR.PBR:
                        case INDEX_PLAN_FACTOR.Pmin:
                        case INDEX_PLAN_FACTOR.Pmax:
                            pbr_indx = ((INDEX_PLAN_FACTOR)_mcListPFI [pvi.ObjFactor].Id).ToString();
                            break;

                        default:
                            pbr_indx = string.Empty;
                            break;
                        }

                        if (string.IsNullOrWhiteSpace(pbr_indx) == false)
                        {
                            try {
                                ppbr_rows [0] [pbr_indx] = (double)ppbr_rows [0] [pbr_indx] + pvi.Value; //Вариант №3
                            } catch (Exception e) {
                                Logging.Logg().Exception(e, $"DbMCInterface::GetData() - тип{ppbr_rows [0] [pbr_indx].GetType ().Name} значения по индексу={indx_plan_factor.ToString()}..."
                                                         , Logging.INDEX_MESSAGE.NOT_SET);
                            }
                        }
                        else
                        {
                            Logging.Logg().Error(string.Format("DbMCInterface::GetData() - не найден индекс={0} значения ПБР...", _mcListPFI [pvi.ObjFactor].Id)
                                                 , Logging.INDEX_MESSAGE.NOT_SET);
                        }
                    } // foreach
                }
                else
                {
                    bRes = false; //igo == null
                }
            } // for, i

            return(bRes);
        }