Exemple #1
0
            /// <summary>
            /// Преобразование входных для расчета значений в структуры, пригодные для производства расчетов
            /// </summary>
            /// <param name="pAlg">Объект - словарь структур для расчета</param>
            /// <param name="tablePar">Таблица с параметрами</param>
            /// <param name="tableVal">Таблица со значениями</param>
            protected int initValues(P_ALG pAlg, DataTable tablePar, DataTable tableVal)
            {
                int iRes = 0; //Предположение, что ошибки нет

                DataRow[] rVal  = null;
                int       idPut = -1
                , idComponent   = -1;
                string strNAlg  = string.Empty;

                pAlg.Clear();

                // цикл по всем параметрам расчета
                foreach (DataRow rPar in tablePar.Rows)
                {
                    // найти соответствие параметра в алгоритме расчета и значения для него
                    idPut = (int)rPar[@"ID"];
                    // идентификатор параметра в алгоритме расчета - ключ для словаря с его характеристиками
                    strNAlg = ((string)rPar[@"N_ALG"]).Trim();
                    rVal    = tableVal.Select(@"ID_PUT=" + idPut);
                    // проверить успешность нахождения соответствия
                    if (rVal.Length == 1)
                    {
                        if (pAlg.ContainsKey(strNAlg) == false)
                        {// добавить параметр в алгоритме расчета
                            pAlg.Add(strNAlg, new P_ALG.P_PUT());

                            pAlg[strNAlg].m_sAVG  = (Int16)rPar[@"AVG"];
                            pAlg[strNAlg].m_bDeny = false;
                        }
                        else
                        {
                            ;
                        }
                        // идентификатор компонента станции - ключ для словаря со значением и характеристиками для него
                        idComponent = (int)rPar[@"ID_COMP"];

                        if (pAlg[strNAlg].ContainsKey(idComponent) == false)
                        {
                            pAlg[strNAlg].Add(idComponent, new P_ALG.P_PUT.P_VAL()
                                              // добавить параметр компонента в алгоритме расчета
                            {
                                m_iId = idPut
                                        //, m_iIdComponent = idComponent
                                ,
                                m_bDeny = false
                                ,
                                value = (float)(double)rVal[0][@"VALUE"]
                                ,
                                m_sQuality = ID_QUALITY_VALUE.DEFAULT // не рассчитывался
                                ,
                                m_idRatio = (int)rPar[@"ID_RATIO"]
                                ,
                                m_fMinValue = (rPar[@"MINVALUE"] is DBNull) ? 0 : (float)rPar[@"MINVALUE"] //??? - ошибка д.б. float
                                ,
                                m_fMaxValue = (rPar[@"MAXVALUE"] is DBNull) ? 0 : (float)rPar[@"MAXVALUE"] //??? - ошибка д.б. float
                            });
                        }
                        else
                        {
                            ;
                        }
                    }
                    else
                    {// ошибка - не найдено соответствие параметр-значение
                        iRes = -1;

                        Logging.Logg().Error(@"TaskCalculate::initValues (ID_PUT=" + idPut + @") - не найдено соответствие параметра и значения...", Logging.INDEX_MESSAGE.NOT_SET);
                    }
                }

                return(iRes);
            }
            protected int initValues(P_ALG pAlg
                                     , IEnumerable <HandlerDbTaskCalculate.NALG_PARAMETER> listNAlg
                                     , IEnumerable <HandlerDbTaskCalculate.PUT_PARAMETER> listPutPar
                                     , IEnumerable <VALUE> values)
            {
                int iRes = 0;

                NALG_PARAMETER      nAlg;
                IEnumerable <VALUE> putValues;

                //VALUE value;
                P_ALG.KEY_P_VALUE keyPValue;

                foreach (PUT_PARAMETER putPar in listPutPar)
                {
                    if (putPar.IsNaN == false)
                    {
                        nAlg      = listNAlg.FirstOrDefault(item => { return(item.m_Id == putPar.m_idNAlg); });
                        putValues = values.Where(item => { return(item.m_IdPut == putPar.m_Id); });

                        if (!(nAlg == null))
                        {
                            if (!(nAlg.m_Id < 0))
                            {
                                foreach (VALUE value in putValues)
                                {
                                    if ((value.m_IdPut > 0)
                                        /*&& (((value.stamp_value.Equals(DateTime.MinValue) == false)))*/)
                                    {
                                        if (pAlg.ContainsKey(nAlg.m_nAlg) == false)
                                        {
                                            pAlg.Add(nAlg.m_nAlg, new P_ALG.P_PUT(nAlg.m_Id, !nAlg.m_bEnabled, nAlg.m_sAverage));
                                        }
                                        else
                                        {
                                            ;
                                        }

                                        keyPValue = new P_ALG.KEY_P_VALUE()
                                        {
                                            Id = putPar.IdComponent, Stamp = value.stamp_value
                                        };

                                        if (pAlg[nAlg.m_nAlg].ContainsKey(keyPValue) == false)
                                        {
                                            pAlg[nAlg.m_nAlg].Add(keyPValue
                                                                  , new P_ALG.P_PUT.P_VALUE()
                                            {
                                                m_iId         = putPar.m_Id
                                                , m_bDeny     = !putPar.IsEnabled
                                                , m_idRatio   = putPar.m_prjRatio
                                                , m_sQuality  = (value.stamp_value.Equals(DateTime.MinValue) == false) ? value.m_iQuality : ID_QUALITY_VALUE.NOT_REC
                                                , value       = (value.stamp_value.Equals(DateTime.MinValue) == false) ? value.value : 0F
                                                , m_fMinValue = putPar.m_fltMinValue
                                                , m_fMaxValue = putPar.m_fltMaxValue
                                            });
                                        }
                                        else
                                        {
                                            // для параметра 1-го порядка уже содержится значение параметра 2-го порядка
                                            ;
                                        }
                                    }
                                    else
                                    {
                                        // некорректный параметр расчета 2-го порядка
                                        ;
                                    }
                                }
                            }
                            else
                            {
                                // не найден либо параметр 1-го порядка, либо значение для параметра 2-го порядка
                                ;
                            }
                        }
                        else
                        {
                            // не найден параметр 1-го порядка (не ошибка - возможно putPar для другого типа расчета)
                            ;
                        }
                    }
                    else
                    {
                        // параметр 2-го порядка не достоверен
                        ;
                    }
                }

                return(iRes);
            }