Esempio n. 1
0
        /// <summary>
        /// Получение актуального(действующего) планового графика на текущие сутки
        /// </summary>
        static void GetPlanValuesActual(IApiExternal api_, Modes.BusinessLogic.IGenObject IGO)
        {
            //api_.GetPlanFactors() - это список: генерация; минимум генерации; максимум генерации
            //Величины в тестовом примере читаются так: Values (это коллекция) = api_.GetPlanValuesActual(...)
            //А потом цикл по ним, и у них берётся .DT и .Value

            IList <PlanValueItem> LPVI = api_.GetPlanValuesActual(DateTime.Now.Date.LocalHqToSystemEx(), DateTime.Now.Date.AddDays(1).LocalHqToSystemEx(), IGO);

            if (LPVI.Count == 0)
            {
                Console.WriteLine("    Нет параметров генерации!");
            }

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

                techsite.WritePlanValue(IGO.IdInner, pvi.DT.SystemToLocalHqEx(), pvi.Type.ToString(), (MySQLtechsite.Params)LPFI[pvi.ObjFactor].Id, pvi.Value);     //Запись в БД techsite           //02.09.2013 меняю IGO.Id на IGO.IdInner

                //pvi.DT.SystemToLocalHqEx()    даёт Московское время, как и нужно
                //Аналогичный результат даст явное преобразование TimeZoneInfo.ConvertTimeFromUtc(pvi.DT, TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time"))
                //"Russian Standard Time" - это Москва. "N. Central Asia Standard Time" - это Новосибирск.
                //Про конвертацию времени: http://msdn.microsoft.com/ru-ru/library/bb397769.aspx
            }
        }
Esempio n. 2
0
        protected override bool GetData(DataTable table, object query)
        {
            bool result = false;

            int i = -1;

            Modes.BusinessLogic.IGenObject igo;

            ////Вариант №1
            //PPBR_Record ppbr = null;
            //SortedList<DateTime, PPBR_Record> srtListPPBR = new SortedList<DateTime,PPBR_Record> ();
            //Вариант №2
            DataRow [] ppbr_rows = null;

            string   pbr_number = string.Empty;
            DateTime date       = DateTime.MinValue;

            string[] args = null
            , idsInner = null;
            bool valid   = false;
            int  idInner = -1;
            IList <PlanValueItem> listPVI = null;
            DateTime dateCurrent;

            table.Reset();
            table.Locale = System.Globalization.CultureInfo.CurrentCulture;

            args = ((string)query).Split(';');

            //Logging.Logg().Debug("DbMCInterface::GetData () - " + query + "...", Logging.INDEX_MESSAGE.NOT_SET);

            switch (args[0])
            {
            case "InitIGO":
                //InitIGO (arg);
                break;

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

                date     = DateTime.FromOADate(Double.Parse(args[2]));
                idsInner = args[1].Split(',');

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

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

                    igo = findIGO(idInner);

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

                    if (!(igo == null))
                    {
                        result = true;

                        try
                        {
                            listPVI = m_MCApi.GetPlanValuesActual(date.LocalHqToSystemEx(), date.AddDays(1).LocalHqToSystemEx(), igo);
                        }
                        catch (Exception e)
                        {
                            Logging.Logg().Exception(e, @"DbMCInterface::GetData () - GetPlanValuesActual () ...", Logging.INDEX_MESSAGE.NOT_SET);
                            Console.WriteLine(string.Format("{0}ОШИБКА получения значений!", "\t"));

                            needReconnect = true;

                            result = false;
                        }

                        if (result == true)
                        {
                            if (listPVI.Count == 0)
                            {
                                Console.WriteLine(string.Format("{0}Нет параметров генерации!", "\t"));
                            }
                            else
                            {
                                ;
                            }
                        }
                        else
                        {
                            //ОШИБКА получения значений!
                            break;
                        }

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

                            dateCurrent = pvi.DT.SystemToLocalHqEx();
                            pbr_number  = pvi.Type.ToString().IndexOf(@"ПБР") < 0 ? @"ПБР" + 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
                            if ((ppbr_rows == null) ||
                                (ppbr_rows.Length == 0))
                            {
                                table.Rows.Add(new object[] { dateCurrent, DateTime.Now, 0.0, 0.0, 0.0, pbr_number /*, igo.IdInner*/ });
                                ppbr_rows = table.Select("DATE_PBR='" + dateCurrent.ToString() + "'");
                            }
                            else
                            {
                                ;
                            }

                            ppbr_rows[0]["PBR_NUMBER"] = pbr_number;

                            switch (m_listPFI[pvi.ObjFactor].Id)
                            {
                            case 0:
                                //else.ppbr.pbr = pvi.Value; //Вариант №1
                                ppbr_rows [0]["PBR"] = (double)ppbr_rows [0]["PBR"] + pvi.Value;         //Вариант №2
                                break;

                            case 1:
                                //ppbr.pmin = pvi.Value; //Вариант №1
                                ppbr_rows [0]["PMIN"] = (double)ppbr_rows [0]["PMIN"] + pvi.Value;         //Вариант №2
                                break;

                            case 2:
                                //ppbr.pmax = pvi.Value; //Вариант №1
                                ppbr_rows [0]["PMAX"] = (double)ppbr_rows [0]["PMAX"] + pvi.Value;         //Вариант №2
                                break;

                            default:
                                break;
                            }
                        }
                    }
                    else
                    {
                        result = false;     //igo == null
                    }
                }
                break;

            default:
                break;
            }

            return(result);
        }
Esempio n. 3
0
        public bool getPlan(IGenObject obj)
        {
            DateTime dt1 = Date.Date.LocalHqToSystemEx();
            DateTime dt0 = Date.Date.AddDays(1).LocalHqToSystemEx();

            modesConnect();
            IList <PlanValueItem> data = api.GetPlanValuesActual(dt1, dt0, obj);
            bool ok = true;

            if (data.Count > 0)
            {
                Logger.Info(String.Format("Обработка ПБР для {0}({1}) [{2}]", obj.Description, obj.Id, obj.Name));

                List <MCPBRData> pbrs = MCPBRData.getPBRS(obj.Id, obj.Name);

                foreach (MCPBRData pbr in pbrs)
                {
                    if (ProcessedPBRS.ContainsKey(pbr.Item))
                    {
                        Logger.Info(string.Format("Данные по коду {0} уже были считаны ", pbr.Item));
                        continue;
                    }
                    if (pbr.DataSettings != null)
                    {
                        foreach (PlanValueItem item in data)
                        {
                            if (item.ObjFactor == 0)
                            {
                                pbr.AddValue(item.DT.SystemToLocalHqEx(), item.Value);
                                string pt  = item.Type.ToString().Replace("ПБР", "");
                                int    num = 0;
                                try {
                                    num = Int32.Parse(pt);
                                } catch { }
                                NPBR = num;
                            }
                        }
                        Logger.Info(String.Format("Получено {0} записей с {1} по {2} по объекту {3}", pbr.Data.Count, dt1.SystemToLocalHqEx(), dt0.SystemToLocalHqEx(), obj.Description));
                        if (pbr.Data.Count > 10)
                        {
                            if (!ProcessedPBRS.ContainsKey(pbr.Item))
                            {
                                ProcessedPBRS.Add(pbr.Item, pbr);
                            }
                        }
                        else
                        {
                            Logger.Info("Недостаточно данных");
                            ok = false;
                        }
                        Logger.Info("===Данные считаны: " + (ok ? "Успешно" : "Ошибка"));
                    }
                    else
                    {
                        Logger.Info("===Ошибка при разборе полученного макета. Возможно изменение кодировки MC");
                    }
                }
            }
            foreach (IGenObject ch in obj.Children)
            {
                bool ok2 = getPlan(ch);
                ok = ok && ok2;
            }
            return(ok);
        }
Esempio n. 4
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);
        }
Esempio n. 5
0
        public bool getPlan(IGenObject obj)
        {
            DateTime dt1 = Date.Date.LocalHqToSystemEx();
            DateTime dt0 = Date.Date.AddDays(1).LocalHqToSystemEx();

            modesConnect();


            MCPBRData pbr = MCPBRData.getPBR(obj.Id, obj.Name);

            bool ok = true;

            foreach (IGenObject ch in obj.Children)
            {
                bool ok2 = getPlan(ch);
                ok = ok && ok2;
            }

            if (pbr == null)
            {
                return(ok);
            }

            if (pbr.ReadNPRCH)
            {
                IList <IGenObject> objs = new List <IGenObject>();
                objs.Add(obj);
                api.RefreshGenObjects(objs, dt1, SyncZone.First);
                IVarParam vp = obj.GetVarParam("НПРЧ_уч");
                for (int i = 0; i < 24; i++)
                {
                    object val = vp.GetValue(i);
                    pbr.AddNPRCHValue(dt1.SystemToLocalHqEx().AddHours(i), (bool)val?1:0);
                }
                ProcessedPBRS.Add(pbr.Item, pbr);
            }



            if (pbr.ReadPBR)
            {
                IList <PlanValueItem> data = api.GetPlanValuesActual(dt1, dt0, obj);
                Logger.Info(String.Format("Обработка ПБР для {0}({1}) [{2}]", obj.Description, obj.Id, obj.Name));


                if (pbr.DataSettings != null)
                {
                    foreach (PlanValueItem item in data)
                    {
                        if (item.ObjFactor == 0)
                        {
                            pbr.AddValue(item.DT.SystemToLocalHqEx(), item.Value);
                            string pt  = item.Type.ToString().Replace("ПБР", "");
                            int    num = 0;
                            try
                            {
                                num = Int32.Parse(pt);
                            }
                            catch { }
                            NPBR = num;
                        }
                        else if (item.ObjFactor == 1 && pbr.DataSettings.WriteToEDSMinMax)
                        {
                            pbr.AddMinValue(item.DT.SystemToLocalHqEx().AddHours(-1), item.Value);
                        }
                        else if (item.ObjFactor == 2 && pbr.DataSettings.WriteToEDSMinMax)
                        {
                            pbr.AddMaxValue(item.DT.SystemToLocalHqEx().AddHours(-1), item.Value);
                        }
                    }
                    Logger.Info(String.Format("Получено {0} записей с {1} по {2} по объекту {3}", pbr.Data.Count, dt1.SystemToLocalHqEx(), dt0.SystemToLocalHqEx(), obj.Description));
                    if (pbr.Data.Count > 10)
                    {
                        if (!ProcessedPBRS.ContainsKey(pbr.Item))
                        {
                            ProcessedPBRS.Add(pbr.Item, pbr);
                        }
                    }
                    else
                    {
                        Logger.Info("Недостаточно данных");
                        ok = false;
                    }
                    Logger.Info("===Данные считаны: " + (ok ? "Успешно" : "Ошибка"));
                }
                else
                {
                    Logger.Info("===Ошибка при разборе полученного макета. Возможно изменение кодировки MC");
                }
            }
            return(ok);
        }