Esempio n. 1
0
        public override List <ArchTechArchive> InvokeReadArchive()
        {
            if (!RequestParams.TechProfilePeriod.HasValue)
            {
                //Формулы пока не получается набирать из разных минуток
                RequestParams.TechProfilePeriod = EnumTechProfilePeriod.Трехминутно;
            }

            var fVals = new FormulasResult(FormulaIds, RequestParams.DtStart, RequestParams.DtEnd, enumTimeDiscreteType.DBHalfHours
                                           , EnumDataSourceType.ByPriority
                                           , 0, RequestParams.UseCoeffTransformation, false, enumTypeInformation.Energy, false, RequestParams.UnitDigit, false
                                           , enumOVMode.NormalMode, RequestParams.TimeZoneId,
                                           false, true, techProfilePeriod: RequestParams.TechProfilePeriod);

            if (fVals == null)
            {
                return(null);
            }

            if (fVals.Errors != null && fVals.Errors.Length > 0)
            {
                Errors.Append(fVals.Errors);
            }

            var firstDateTimeUTC = RequestParams.DtStart.ClientToUtc(RequestParams.TimeZoneId);

            var result = new List <ArchTechArchive>();

            foreach (var fVal in fVals.Result_Values)
            {
                if (fVal.Result_Values == null || fVal.Result_Values.Count == 0)
                {
                    continue;
                }

                var ff = fVal.Result_Values.First();
                if (ff.Val_List == null || ff.Val_List.Count == 0)
                {
                    continue;
                }

                var archTechValues = ff.Val_List
                                     .Select((v, i) => new { v, i })
                                     .ToDictionary(k => k.i, v => v.v);

                result.Add(new ArchTechArchive(new ID_TypeHierarchy
                {
                    StringId      = fVal.Formula_UN,
                    TypeHierarchy = fVal.FormulasTable.ToTypeHierarchy(),
                }, 0, RequestParams.TechProfilePeriod.Value, firstDateTimeUTC, archTechValues));
            }


            return(result);
        }
Esempio n. 2
0
        public static DataTableEx ExecuteValidateValue(FormulasResult formulasResult, ArchivesValidate_List archivesList,
                                                       ArchivesTPValueAllChannels archivesTpList, IVisualDataRequestObjectsNames getNameInterface, List <DateTime> dts)
        {
            if ((archivesList == null || archivesList.Result_Values == null) &&
                (formulasResult == null || formulasResult.Result_Values == null) &&
                (archivesTpList == null || archivesTpList.Result_Values == null))
            {
                return(null);
            }

            int                  countColumn;
            DateTime             dtStart, dtEnd;
            enumTimeDiscreteType discreteType;

            if (archivesList != null && archivesList.Result_Values != null && archivesList.Result_Values.Count > 0)
            {
                dtStart      = archivesList.DTStart;
                dtEnd        = archivesList.DTEnd;
                countColumn  = archivesList.NumbersValues;
                discreteType = archivesList.DiscreteType;
            }
            else if (formulasResult != null && formulasResult.Result_Values != null && formulasResult.Result_Values.Count > 0 &&
                     formulasResult.Result_Values[0].Result_Values != null &&
                     formulasResult.Result_Values[0].Result_Values.Count > 0)
            {
                dtStart      = formulasResult.DTStart;
                dtEnd        = formulasResult.DTEnd;
                countColumn  = formulasResult.NumbersValues;
                discreteType = formulasResult.DiscreteType;
            }
            else if (archivesTpList != null && archivesTpList.Result_Values != null)
            {
                dtStart      = archivesTpList.DTStart;
                dtEnd        = archivesTpList.DTEnd;
                countColumn  = archivesTpList.NumbersValues;
                discreteType = archivesTpList.DiscreteType;
            }
            else
            {
                return(null);
            }

            string labelFormat;

            if (discreteType == enumTimeDiscreteType.DBHours || discreteType == enumTimeDiscreteType.DBHalfHours)
            {
                labelFormat = "dd.MM.yy\nHH:mm";
            }
            else
            {
                labelFormat = "dd.MM.yy";
            }

            var userTable = new DataTableEx()
            {
                FieldForSearch = "NameTI",
            };

            userTable.BeginLoadData();

            try
            {
                #region -------------Таблица для представления данных----------------------------

                userTable.Columns.Add("NameTI", typeof(IFreeHierarchyObject));
                userTable.Columns.Add("Channel", typeof(object));
                userTable.Columns.Add("Parent", typeof(IFreeHierarchyObject));
                userTable.Columns.Add("DataSource", typeof(string));

                var fType = typeof(VALUES_FLAG_DB);

                userTable.Columns.Add(new DataColumn("TotalFlag", fType)
                {
                    Caption = "Итого",
                });

                var i = 0;
                foreach (var dt in dts)
                {
                    userTable.Columns.Add(new DataColumn("Valid" + i, fType)
                    {
                        Caption = dt.ToString(labelFormat),
                    });
                    i++;
                }

                #endregion

                #region ------------Перебираем ТИ в архиве---------------------------------------

                if (archivesList != null && archivesList.Result_Values != null)
                {
                    userTable.Description = new DataTableDescription
                    {
                        DtStart      = archivesList.DTStart,
                        DiscreteType = archivesList.DiscreteType,
                        TimeZoneId   = archivesList.TimeZoneId,
                    };

                    //сортировка
                    foreach (var pair in archivesList.Result_Values
                             .Select(v => new Tuple <TPSHierarchy, TArchivesValidate, TInfo_TI>(
                                         EnumClientServiceDictionary.DetailPSList[v.TI_Validate.PS_ID], v,
                                         v.TI_Validate.TI_Ch_ID.IsCA
                                    ? EnumClientServiceDictionary.TICAList[v.TI_Validate.TI_Ch_ID.TI_ID]
                                    : EnumClientServiceDictionary.TIHierarchyList[v.TI_Validate.TI_Ch_ID.TI_ID]))
                             .Where(v => v.Item1 != null && v.Item3 != null && v.Item2.TI_Validate != null)
                             .OrderBy(v => v.Item2.TI_Validate.TI_Ch_ID.IsCA)
                             .ThenBy(v => v.Item1.Name)
                             .ThenBy(v => v.Item2.TI_Validate.PS_ID)
                             .ThenBy(v => v.Item3.Name)
                             .ThenBy(v => v.Item2.TI_Validate.TI_Ch_ID.TI_ID)
                             .ThenBy(v => v.Item2.TI_Validate.TI_Ch_ID.ChannelType % 10)
                             .ThenBy(v => v.Item2.TI_Validate.TI_Ch_ID.ChannelType))
                    {
                        var archiveValidateValue = pair.Item2;
                        var validate             = archiveValidateValue.TI_Validate;
                        //--------колонки в промежуточную таблицу-----------
                        var row = userTable.NewRow() as DataRowEx;
                        if (validate != null)
                        {
                            row["NameTI"]  = pair.Item3;
                            row["Channel"] = new TTariffPeriodID
                            {
                                ChannelType    = validate.TI_Ch_ID.ChannelType,
                                IsOV           = false,
                                TI_ID          = validate.TI_Ch_ID.TI_ID,
                                StartDateTime  = dtStart,
                                FinishDateTime = dtEnd,
                            };
                            row["Parent"]     = pair.Item1;
                            row["DataSource"] = EnumClientServiceDictionary
                                                .DataSourceTypeList
                                                .FirstOrDefault(v =>
                                                                EqualityComparer <EnumDataSourceType?> .Default.Equals(validate.TI_Ch_ID.DataSourceType,
                                                                                                                       v.Key))
                                                .Value;

                            var id = new ID_Hierarchy
                            {
                                ID            = validate.TI_Ch_ID.TI_ID.ToString(),
                                TypeHierarchy =
                                    validate.TI_Ch_ID.IsCA ? enumTypeHierarchy.Info_ContrTI : enumTypeHierarchy.Info_TI
                            };

                            row["TotalFlag"] = validate.Total_Flag;

                            if (validate.F_FLAG_List != null)
                            {
                                for (var j = 0; j < countColumn; j++)
                                {
                                    var flag = validate.F_FLAG_List.ElementAtOrDefault(j);
                                    row.SetValue("Valid" + j, j, validate.TI_Ch_ID.ChannelType, id, validate.TI_Ch_ID.DataSourceType, null, flag);
                                }
                            }
                        }

                        userTable.Rows.Add(row);
                        validate = archiveValidateValue.ContrTI_Validate;
                        if (validate != null)
                        {
                            row           = userTable.NewRow() as DataRowEx;
                            row["NameTI"] = "ТИ КА -" + getNameInterface.GetHierarchyDbTreeObject(
                                validate.TI_Ch_ID.TI_ID.ToString(),
                                validate.TI_Ch_ID.IsCA
                                                        ? enumTypeHierarchy.Info_ContrTI
                                                        : enumTypeHierarchy.Info_TI);
                            row["Parent"]  = EnumClientServiceDictionary.DetailContrPSList[validate.PS_ID];
                            row["Channel"] = validate.TI_Ch_ID.ChannelType;
                            if (validate.F_FLAG_List != null)
                            {
                                for (var j = 0; j < countColumn; j++)
                                {
                                    var flag = validate.F_FLAG_List.ElementAtOrDefault(j);
                                    row["Valid" + j] = flag;
                                }
                            }

                            row["TotalFlag"] = validate.Total_Flag;
                            userTable.Rows.Add(row);
                        }
                    }
                }

                #endregion

                #region ------------Перебираем формулы---------------------------------------------

                var tps = EnumClientServiceDictionary.GetTps();
                if (tps == null)
                {
                    return(userTable);
                }

                if (formulasResult != null && formulasResult.Result_Values != null)
                {
                    if (userTable.Description == null)
                    {
                        userTable.Description = new DataTableDescription
                        {
                            DtStart      = formulasResult.DTStart,
                            DiscreteType = formulasResult.DiscreteType,
                            TimeZoneId   = formulasResult.TimeZoneId,
                        };
                    }

                    foreach (var pair in formulasResult.Result_Values
                             .Where(fr => fr.Result_Values != null && fr.Result_Values.Count > 0)
                             .Select(fr =>

                                     new Tuple <IFreeHierarchyObject, IFormulaInfo, TFormulaResultsList>(fr.TP_CH_ID != null
                                        ? (IFreeHierarchyObject)tps[fr.TP_CH_ID.TP_ID]
                                        : EnumClientServiceDictionary.DetailPSList[fr.PS_ID],
                                                                                                         fr.GetFormulaInfo(getNameInterface),
                                                                                                         fr))
                             .OrderBy(p => p.Item1 == null ? "Формулы" : p.Item1.Name)
                             .ThenBy(p => p.Item2 == null ? string.Empty : p.Item2.FormulaName))
                    {
                        var formula = pair.Item3;

                        var formulaResult = formula.Result_Values[0];
                        var row           = userTable.NewRow() as DataRowEx;
                        row["NameTI"]  = pair.Item2;
                        row["Channel"] = null;
                        row["Parent"]  = pair.Item1;

                        var totalFlag = VALUES_FLAG_DB.None;

                        enumTypeHierarchy typeHierarchy;
                        switch (pair.Item2.FormulasTable)
                        {
                        case enumFormulasTable.Info_Formula_Description:
                            typeHierarchy = enumTypeHierarchy.Formula;
                            break;

                        case enumFormulasTable.Info_TP2_OurSide_Formula_Description:
                            typeHierarchy = enumTypeHierarchy.Formula_TP_OurSide;
                            break;

                        case enumFormulasTable.Info_TP2_Contr_Formula_Description:
                            typeHierarchy = enumTypeHierarchy.Formula_TP_CA;
                            break;

                        default:
                            typeHierarchy = enumTypeHierarchy.Unknown;
                            break;
                        }

                        var id = new ID_Hierarchy
                        {
                            ID            = formulaResult.FormulaId,
                            TypeHierarchy = typeHierarchy,
                        };

                        if (formulaResult.Val_List != null && formulaResult.Val_List.Count > 0)
                        {
                            for (int j = 0; j < countColumn; j++)
                            {
                                var v = formulaResult.Val_List.ElementAt(j);
                                if (v != null)
                                {
                                    var flag = v.F_FLAG;
                                    row.SetValue("Valid" + j, j, 0, id, null, null, flag);
                                    totalFlag = totalFlag.CompareAndReturnMostBadStatus(flag);
                                }

                                //row.SetIndex(description, j);
                            }
                        }
                        row["TotalFlag"] = totalFlag.AccomulateTotalStatistic();
                        userTable.Rows.Add(row);
                    }
                }

                #endregion

                #region ------------Перебираем ТП в архиве---------------------------------------

                if (archivesTpList == null || archivesTpList.Result_Values == null)
                {
                    return(userTable);
                }

                var sections = EnumClientServiceDictionary.GetSections();
                if (sections == null)
                {
                    return(userTable);
                }

                if (userTable.Description == null)
                {
                    userTable.Description = new DataTableDescription
                    {
                        DtStart      = archivesTpList.DTStart,
                        DiscreteType = archivesTpList.DiscreteType,
                        TimeZoneId   = archivesTpList.TimeZoneId,
                    };
                }

                foreach (var pair in archivesTpList.Result_Values
                         .Select(a =>
                {
                    TPoint tp;
                    tps.TryGetValue(a.Key, out tp);

                    TSection section;
                    sections.TryGetValue(tp.Section_ID, out section);

                    return(new Tuple <TSection, TPoint, List <TArchivesTPValueAllChannels> >(section, tp, a.Value));
                })
                         .Where(p => p.Item1 != null && p.Item2 != null && p.Item3 != null)
                         .OrderBy(p => p.Item1.SectionName)
                         .ThenBy(p => p.Item2.StringName))
                {
                    foreach (var tpArchive in pair.Item3)
                    {
                        if (tpArchive.Val_List == null)
                        {
                            continue;
                        }

                        Dictionary <byte, List <TPointValue> > tpVals;
                        if (!tpArchive.Val_List.TryGetValue(tpArchive.IsMoneyOurSide, out tpVals) || tpVals == null ||
                            tpVals.Count <= 0)
                        {
                            continue;
                        }

                        foreach (var valueByChannel in tpVals)
                        {
                            var row = userTable.NewRow() as DataRowEx;
                            row["NameTI"]  = pair.Item2;
                            row["Channel"] = valueByChannel.Key;
                            row["Parent"]  = pair.Item1;
                            var totalFlag = VALUES_FLAG_DB.None;

                            var id = new ID_Hierarchy
                            {
                                ID            = pair.Item2.TP_ID.ToString(),
                                TypeHierarchy = enumTypeHierarchy.Info_TP,
                            };

                            if (valueByChannel.Value != null && valueByChannel.Value.Count > 0)
                            {
                                for (var j = 0; j < countColumn; j++)
                                {
                                    var v = valueByChannel.Value.ElementAtOrDefault(j);
                                    if (v != null)
                                    {
                                        var flag = v.F_FLAG;
                                        row.SetValue("Valid" + j, j, valueByChannel.Key, id, null, null, flag);
                                        totalFlag = totalFlag.CompareAndReturnMostBadStatus(flag);

                                        //row.SetIndex(description, j);
                                    }
                                }
                            }

                            row["TotalFlag"] = totalFlag.AccomulateTotalStatistic();
                            userTable.Rows.Add(row);
                        }
                    }
                }

                #endregion
            }
            finally
            {
                userTable.EndLoadData();
                userTable.AcceptChanges();
            }

            return(userTable);
        }
Esempio n. 3
0
        public static DataTableEx ExecuteFormulasValueExpand(FormulasResult formulasResult, ArchivesValues_List2 archivesList,
                                                             IVisualDataRequestObjectsNames getNameInterface, int doublePrecision, DateTime dtStart, DateTime dtEnd, enumTimeDiscreteType discreteType, string timeZoneId,
                                                             ArchivesTPValueAllChannels archivesTpList = null, SectionIntegralActsTotalResults?archivesSection = null,
                                                             bool isSumTiForChart = false, FormulaConstantArchives constantArchives             = null, ArchTariffIntegralsTIs cumulativeIntegrals = null,
                                                             ForecastConsumptionResult fResult = null, List <TRowObjectForGrid> listTiViewModel = null, bool isDetailOv = true,
                                                             BalanceFreeHierarchyResults balanceFreeHierarchy = null)
        {
            if (archivesList == null && formulasResult == null && archivesTpList == null && archivesSection == null &&
                constantArchives == null && cumulativeIntegrals == null && fResult == null && balanceFreeHierarchy == null)
            {
                return(null);
            }

#if DEBUG
            var sw = new System.Diagnostics.Stopwatch();
            sw.Start();
#endif

            var dts           = getNameInterface.GetDateTimeListForPeriod(dtStart, dtEnd, discreteType, timeZoneId.GeTimeZoneInfoById());
            var numbersValues = dts.Count;
            //Расчетный ли это профиль
            var deltaDiscrete = (int)discreteType + 1;

            //-------------Таблица для представления данных----------------------------
            var userTable = new DataTableEx();
            userTable.BeginLoadData();
            try
            {
                userTable.Columns.Add("EventDateTime", typeof(DateTime));

                #region Создаем колонки в пользовательском представлениее

                var vType = typeof(IFValue);
                var k     = 0;

                #region ------------Перебираем точки---------------------------------------------

                var tiColumnValues = userTable.AddColumnsTi(ref k, archivesList, isSumTiForChart, isDetailOv);

                #endregion

                #region ------------ТП---------------------------------------------

                var tpColumnValues = userTable.AddColumnsTp(ref k, archivesTpList, listTiViewModel);

                //      var tpArchives = new List<Tuple<TPoint, Dictionary<byte, List<TPointValue>>>>();

                //if (archivesTpList != null)
                //{

                //}

                #endregion

                #region ------------Перебираем формулы---------------------------------------------

                var formulaArchives = new List <Tuple <IFormulaInfo, TFormulasResult, List <TFormulaConsist> > >();
                if (formulasResult != null && formulasResult.Result_Values != null)
                {
                    foreach (var formulas in formulasResult.Result_Values
                             .Select(f => new Tuple <IFormulaInfo, TFormulasResult, List <TFormulaConsist> >(f.GetFormulaInfo(getNameInterface),
                                                                                                             f.Result_Values.FirstOrDefault(), f.FormulaConsist))
                             .Where(f => f.Item1 != null)
                             .OrderBy(f => f.Item1.FormulaName))
                    {
                        var fVal = formulas.Item2;
                        if (fVal != null && fVal.Val_List != null && fVal.Val_List.Count > 0)
                        {
                            var col = new DataColumn("F_VALUE" + k, vType)
                            {
                                ReadOnly = true,
                            };

                            userTable.Columns.Add(col);
                            k++;
                        }

                        //------------ТИ которые входят в формулу-------------------------------------------------------
                        if (formulasResult.IsValuesAllTIEnabled && formulas.Item3 != null)
                        {
                            foreach (var archivesValue in formulas.Item3)
                            {
                                if (archivesValue.Val_List == null)
                                {
                                    continue;
                                }

                                //var hierObj =
                                //    getNameInterface.GetHierarchyDbTreeObject(archivesValue.TI_Ch_ID.TI_ID.ToString(),
                                //        archivesValue.TypeTIinFormula);

                                var col = new DataColumn("F_VALUE" + k, vType)
                                {
                                    ReadOnly = true,
                                };

                                userTable.Columns.Add(col);
                                k++;
                            }
                        }

                        formulaArchives.Add(formulas);
                    }
                }

                #endregion

                #region ------------Перебираем константы---------------------------------------------

                if (constantArchives != null && constantArchives.FormulaConstantDict != null)
                {
                    foreach (var formulaConstant in constantArchives.FormulaConstantDict.Values)
                    {
                        if (formulaConstant.ArchiveValues != null && formulaConstant.ArchiveValues.Count > 0)
                        {
                            var col = new DataColumn("F_VALUE" + k, vType)
                            {
                                //Caption = "Конст. -" + formulaConstant.ConstantaParams.FormulaConstantName,
                                ReadOnly = true,
                            };

                            userTable.Columns.Add(col);
                            //namesFormulas.Add(new GridTitle
                            //{
                            //    //TitleString = "Конст. -" + formulaConstant.ConstantaParams.FormulaConstantName,
                            //    TitleString = "Конст. -" + formulaConstant.ConstantaParams.FormulaConstantName
                            //});

                            k++;
                        }
                    }
                }

                #endregion

                #region ------------Перебираем сечения---------------------------------------------

                if (archivesSection != null && archivesSection.Value.Total_Result != null &&
                    archivesSection.Value.Total_Result.Count > 0)
                {
                    foreach (var sectionPair in archivesSection.Value.Total_Result)
                    {
                        var section = sectionPair.Value;
                        if (section.TotalVals != null && section.TotalVals.Count > 0)
                        {
                            var sectionName = getNameInterface.GetSectionName(sectionPair.Key);

                            var col = new DataColumn("F_VALUE" + k, vType)
                            {
                                //Caption = "Сеч. -" + sectionName,
                                ReadOnly = true,
                            };

                            userTable.Columns.Add(col);
                            //namesFormulas.Add(new GridTitle
                            //{
                            //    //TitleString = "Сеч. -" + sectionName,
                            //    TitleString = "Сеч. -" + sectionName
                            //});

                            k++;
                        }
                    }
                }

                #endregion

                #region ------------Перебираем накопительные интегралы------------------------------

                if (cumulativeIntegrals != null && cumulativeIntegrals.IntegralsValue30orHour != null)
                {
                    var nType = typeof(IConvertible);

                    foreach (var integral in cumulativeIntegrals.IntegralsValue30orHour)
                    {
                        if (integral.Cumulate_Val_List == null || integral.Cumulate_Val_List.Count == 0)
                        {
                            continue;
                        }

                        //var tiName = getNameInterface.GetTIName(integral.TI_Ch_ID.TI_ID, integral.TI_Ch_ID.IsCA);
                        //var psName = getNameInterface.GetPSName(integral.PS_ID, integral.TI_Ch_ID.IsCA);

                        var col = new DataColumn("F_VALUE" + k, nType)
                        {
                            //Caption = tiName +
                            //          getNameInterface.GetChanelTypeNameByID(integral.TI_Ch_ID.TI_ID,
                            //              integral.TI_Ch_ID.ChannelType, false,
                            //              cumulativeIntegrals.DTStart, cumulativeIntegrals.DTEnd) + " \n" +
                            //          psName,
                            ReadOnly = true,
                        };

                        userTable.Columns.Add(col);
                        k++;
                    }
                }

                #endregion

                #region ------------Прогнозирование------------------------------

                if (fResult != null && fResult.Result_Values != null)
                {
                    var hierarchyObject =
                        getNameInterface.GetHierarchyDbTreeObject(fResult.ID.ID, fResult.ID.TypeHierarchy);

                    if (hierarchyObject != null)
                    {
                        foreach (var archive in fResult.Result_Values)
                        {
                            if (archive.Value == null)
                            {
                                continue;
                            }

                            var col = new DataColumn("F_VALUE" + k, vType)
                            {
                                Caption  = hierarchyObject.Name + " " + getNameInterface.GetChanelTypeNameByID(archive.Key.Channel, false),
                                ReadOnly = true,
                            };

                            userTable.Columns.Add(col);
                            k++;
                        }
                    }
                }

                #endregion

                #region ------------Перебираем балансы---------------------------------------------

                var balanceColumnValues = userTable.AddColumnsBalances(ref k, balanceFreeHierarchy);

                #endregion

                #endregion

#if DEBUG
                sw.Stop();
                Console.WriteLine("Создаем колонки в пользовательском представлениее - > {0} млс", sw.ElapsedMilliseconds);
                sw.Restart();
#endif

                #region Наполняем поставщик

                if (archivesList != null)
                {
                    userTable.Description = new DataTableDescription
                    {
                        DtStart      = archivesList.DTStart,
                        DiscreteType = archivesList.DiscreteType,
                        TimeZoneId   = archivesList.TimeZoneId,
                    };
                }
                else
                {
                    userTable.Description = null;
                }

                for (var i = 0; i < numbersValues; i++)
                {
                    k = 0;

                    //--------колонки в промежуточную таблицу-----------
                    var row = userTable.NewRow() as DataRowEx;
                    var dt  = dts[i];

                    row["EventDateTime"] = dt;
                    //row["Time"] = dt.TimeOfDay;

                    //-------пишем в промежуточную таблицу значения--------

                    //TVALUES_DB mainChannelVal = null;

                    #region ТИ

                    userTable.PopulateRowsTi(ref k, tiColumnValues, numbersValues, isSumTiForChart, row, i);

                    #endregion

                    #region ТП

                    userTable.PopulateRowsTp(ref k, tpColumnValues, row, i);

                    #endregion

                    #region Формулы

                    if (formulasResult != null && formulasResult.Result_Values != null)
                    {
                        foreach (var formulas in formulaArchives)
                        {
                            enumTypeHierarchy typeHierarchy;
                            switch (formulas.Item1.FormulasTable)
                            {
                            case enumFormulasTable.Info_Formula_Description:
                                typeHierarchy = enumTypeHierarchy.Formula;
                                break;

                            case enumFormulasTable.Info_TP2_OurSide_Formula_Description:
                                typeHierarchy = enumTypeHierarchy.Formula_TP_OurSide;
                                break;

                            case enumFormulasTable.Info_TP2_Contr_Formula_Description:
                                typeHierarchy = enumTypeHierarchy.Formula_TP_CA;
                                break;

                            default:
                                typeHierarchy = enumTypeHierarchy.Unknown;
                                break;
                            }

                            var id = new ID_Hierarchy
                            {
                                ID            = formulas.Item1.Formula_UN,
                                TypeHierarchy = typeHierarchy
                            };

                            var fVal = formulas.Item2;
                            if (fVal != null && fVal.Val_List != null && fVal.Val_List.Count > 0)
                            {
                                var v = fVal.Val_List.ElementAtOrDefault(i);
                                if (v != null)
                                {
                                    var useMeasureModule =
                                        string.IsNullOrEmpty(fVal.MeasureUnit_UN)
                                        &&
                                        (string.Equals(fVal.MeasureQuantityType_UN, "EnergyUnit") ||
                                         string.Equals(fVal.MeasureQuantityType_UN, "PowerUnit"));

                                    //row["F_VALUE" + k] = v;
                                    row.SetValue("F_VALUE" + k, i, 0, id, null, fVal.MeasureUnit_UN, v, useMeasureModule);
                                }

                                k++;
                            }

                            if (formulasResult.IsValuesAllTIEnabled && formulas.Item3 != null)
                            {
                                foreach (var archivesValue in formulas.Item3)
                                {
                                    if (archivesValue.Val_List == null)
                                    {
                                        continue;
                                    }

                                    var v = archivesValue.Val_List.ElementAtOrDefault(i);
                                    if (v != null)
                                    {
                                        if (archivesValue.Id == null)
                                        {
                                            row["F_VALUE" + k] = new TVALUES_DB
                                            {
                                                F_VALUE = v.F_VALUE,
                                                F_FLAG  = v.F_FLAG,
                                            };
                                        }
                                        else
                                        {
                                            row.SetValue("F_VALUE" + k, i, archivesValue.ChannelType, archivesValue.Id, null, null, v);
                                        }
                                    }

                                    k++;
                                }
                            }
                        }
                    }

                    #endregion

                    #region Константы

                    if (constantArchives != null && constantArchives.FormulaConstantDict != null)
                    {
                        foreach (var formulaConstant in constantArchives.FormulaConstantDict.Values)
                        {
                            if (formulaConstant.ArchiveValues != null)
                            {
                                var v = formulaConstant.ArchiveValues.ElementAtOrDefault(i);
                                if (v != null)
                                {
                                    row.SetValue("F_VALUE" + k, i, 0, new ID_Hierarchy
                                    {
                                        ID            = formulaConstant.ConstantaParams.FormulaConstant_UN,
                                        TypeHierarchy = enumTypeHierarchy.FormulaConstant
                                    }, null, null, v);
                                }

                                k++;
                            }
                        }
                    }

                    #endregion

                    #region Сечения

                    if (archivesSection != null && archivesSection.Value.Total_Result != null &&
                        archivesSection.Value.Total_Result.Count > 0)
                    {
                        foreach (var sectionPair in archivesSection.Value.Total_Result)
                        {
                            var section = sectionPair.Value;
                            List <TVALUES_DB> values;
                            if (section.TotalVals != null && section.TotalVals.Count > 0 &&
                                section.TotalVals.TryGetValue(enumInputType.Saldo, out values))
                            {
                                var v = values.ElementAtOrDefault(i);
                                if (v != null)
                                {
                                    //row["F_VALUE" + k] = v;
                                    row.SetValue("F_VALUE" + k, i, 0, new ID_Hierarchy
                                    {
                                        ID            = sectionPair.Key.ToString(),
                                        TypeHierarchy = enumTypeHierarchy.Section
                                    }, null, null, v);
                                }

                                k++;
                            }
                        }
                    }

                    #endregion

                    #region ------------Перебираем накопительные интегралы------------------------------

                    if (cumulativeIntegrals != null && cumulativeIntegrals.IntegralsValue30orHour != null)
                    {
                        var unitDigitCoeff = (double)cumulativeIntegrals.UnitDigit;

                        foreach (var integral in cumulativeIntegrals.IntegralsValue30orHour)
                        {
                            if (integral.Cumulate_Val_List == null || integral.Cumulate_Val_List.Count == 0)
                            {
                                continue;
                            }

                            var val = integral.Cumulate_Val_List.ElementAtOrDefault(i);
                            if (val != null)
                            {
                                var v = new TVal
                                {
                                    F_FLAG  = val.F_FLAG,
                                    F_VALUE = val.Value / unitDigitCoeff,
                                };

                                //var v = val.Value / unitDigitCoeff;

                                //------------ТИ ФСК-----------------------------

                                row.SetValue("F_VALUE" + k, i, integral.TI_Ch_ID.ChannelType, new ID_Hierarchy
                                {
                                    ID            = integral.TI_Ch_ID.TI_ID.ToString(),
                                    TypeHierarchy = enumTypeHierarchy.Info_TI
                                }, integral.TI_Ch_ID.DataSourceType, null, v);

                                //row["F_VALUE" + k] = v;
                                //if (integral.TI_Ch_ID.ChannelType < 3 && v > 0)
                                //{
                                //    mainChannelVal = v;
                                //}
                            }

                            k++;
                        }
                    }

                    #endregion

                    #region ------------Прогнозирование------------------------------

                    if (fResult != null && fResult.Result_Values != null)
                    {
                        var hierarchyObject =
                            getNameInterface.GetHierarchyDbTreeObject(fResult.ID.ID, fResult.ID.TypeHierarchy);

                        if (hierarchyObject != null)
                        {
                            var unitDigitCoeff = (double)fResult.UnitDigit;

                            foreach (var archive in fResult.Result_Values)
                            {
                                if (archive.Value == null)
                                {
                                    continue;
                                }

                                var val = archive.Value.ElementAtOrDefault(i);
                                if (val != null)
                                {
                                    var v = new TVALUES_DB
                                    {
                                        F_FLAG  = val.F_FLAG,
                                        F_VALUE = val.F_VALUE / unitDigitCoeff,
                                    };

                                    //------------ТИ ФСК-----------------------------
                                    //row["F_VALUE" + k] = v;

                                    row.SetValue("F_VALUE" + k, i, archive.Key.Channel, new ID_Hierarchy
                                    {
                                        ID            = archive.Key.ID,
                                        TypeHierarchy = archive.Key.TypeHierarchy,
                                    }, null, null, v);
                                }

                                k++;
                            }
                        }
                    }

                    #endregion

                    #region Балансы

                    userTable.PopulateRowsBalances(ref k, balanceColumnValues, row, i);

                    #endregion

                    //      if (consumptionSchedule != null && mainChannelVal != null && mainChannelVal.F_VALUE != null &&
                    //    mainChannelVal.F_FLAG.HasFlag(VALUES_FLAG_DB.ConsumptionScheduleOverflow))
                    //{
                    //    //Ищем значение типового графика для данной получасовки
                    //    var cs_val =
                    //        consumptionSchedule.ConsumptionScheduleValues.FirstOrDefault(
                    //            cs => cs.TotalDay == (dt.Date - dtStart.Date).TotalDays && cs.TotalNumberPerDay ==
                    //                  dt.TimeOfDay.TotalMinutes / (30 * deltaDiscrete));

                    //    if (cs_val != null && cs_val.F_VALUE.HasValue)
                    //    {
                    //        double delta = 0;
                    //        if (mainChannelVal.F_VALUE > cs_val.MAX_VALUE)
                    //        {
                    //            delta = mainChannelVal.F_VALUE - cs_val.F_VALUE.Value;
                    //        }
                    //        else
                    //        {
                    //            delta = mainChannelVal.F_VALUE - cs_val.F_VALUE.Value;
                    //        }

                    //        row["ConsumptionSchedule"] = delta;
                    //        row["ConsumptionSchedulePercent"] = delta / mainChannelVal.F_VALUE * 100;
                    //    }
                    //}

                    userTable.Rows.Add(row);
                }

                #endregion
            }
            finally
            {
                userTable.EndLoadData();
                userTable.AcceptChanges();
            }

#if DEBUG
            sw.Stop();
            Console.WriteLine("ExecuteFormulasValueExpand - > {0} млс", sw.ElapsedMilliseconds);
#endif

            return(userTable);
        }
Esempio n. 4
0
        /// <summary>
        /// Проверяем входит ли период действия текущего объекта в указанную получасоку получасовка
        /// Если не входит, то выбираем следующий объект, который входит
        /// </summary>
        /// <param name="period"></param>
        /// <param name="periods"></param>
        /// <param name="hh"></param>
        /// <param name="resultCommonTi"></param>
        /// <returns></returns>
        private static bool PeriodInHalfHour(ref PeriodHierarchy period, Queue <PeriodHierarchy> periods, int hh,
                                             ArchivesValues_List2 resultCommonTi, FormulasResult resultCommonFormula, ArchivesTPValues resultCommonTp, UADataReader resultCommonUAData)
        {
            if (period == null)
            {
                if (periods.Count == 0)
                {
                    return(false);
                }
                period = periods.Dequeue();
            }

            bool inHalfHour;

            if (period != null && !period.IsFullPeriod)
            {
                if (period.IndxStart.HasValue && period.IndxStart > hh)
                {
                    //Этоn период еще не начался
                    return(false);
                }

                if (period.IndxFinish.HasValue && period.IndxFinish < hh)
                {
                    //У этого периода кончилось действие
                    period     = null;
                    inHalfHour = PeriodInHalfHour(ref period, periods, hh, resultCommonTi, resultCommonFormula,
                                                  resultCommonTp, resultCommonUAData);
                }
                else
                {
                    inHalfHour = true;
                }
            }
            else
            {
                inHalfHour = true;
            }

            if (period == null)
            {
                return(false);
            }

            #region Наполняем архив

            if (period.Archives == null)
            {
                var id = period.Id;
                switch (id.TypeHierarchy)
                {
                case enumTypeHierarchy.Info_TI:
                    int tiId;
                    List <TArchivesValue> tiValues;
                    if (int.TryParse(id.ID, out tiId) && resultCommonTi.ArchiveValues.TryGetValue(tiId, out tiValues))
                    {
                        var archiveTi = tiValues
                                        .FirstOrDefault(v => v.TI_Ch_ID.TI_ID == tiId && v.TI_Ch_ID.ChannelType == id.Channel);
                        if (archiveTi != null)
                        {
                            period.Archives = archiveTi.Val_List;
                        }
                    }
                    break;

                case enumTypeHierarchy.Formula:
                    var archiveFormula = resultCommonFormula.Result_Values
                                         .FirstOrDefault(v => string.Equals(v.Formula_UN, id.ID));
                    if (archiveFormula != null && archiveFormula.Result_Values != null && archiveFormula.Result_Values.Count > 0)
                    {
                        var vals = archiveFormula.Result_Values[0].Val_List;
                        if (vals != null)
                        {
                            period.Archives = vals.OfType <TVALUES_DB>().ToList();
                        }
                    }
                    break;

                case enumTypeHierarchy.Info_TP:
                    int tpId;
                    if (int.TryParse(id.ID, out tpId))
                    {
                        var archiveTp = resultCommonTp.ArchivesValue30orHour
                                        .FirstOrDefault(v => v.TpIdChannel.TP_ID == tpId && v.TpIdChannel.ChannelType == id.Channel);
                        if (archiveTp != null)
                        {
                            //archiveTp.Val_List.TryGetValue(archiveTp.IsMoneyOurSide, out period.Archives);
                            period.Archives = archiveTp.GetValues();
                        }
                    }
                    break;

                case enumTypeHierarchy.Node:

                    var archiveNode = resultCommonUAData.UADatas
                                      .FirstOrDefault(v => string.Equals(v.UANode_ID, id.ID));
                    if (archiveNode != null)
                    {
                        //TODO тут непонятно
                        //archiveTp.Val_List.TryGetValue(archiveTp.IsMoneyOurSide, out period.Archives);
                        //period.Archives = archiveNode.GetValues();
                    }
                    break;
                }
            }

            #endregion

            return(inHalfHour);
        }
Esempio n. 5
0
        /// <summary>
        /// Берем первую попавшуюся модель прогнозирования для объекта
        /// </summary>
        /// <param name="forecastObjectUn"></param>
        /// <returns></returns>
        public static List <TForecastCalculateParams> GetForecastObjectParams(HashSet <string> forecastObjectUns, DateTime dtStart, DateTime dtEnd,
                                                                              int?forecastModelUserSelected, string timeZoneId, StringBuilder errors, EnumUnitDigit unitDigit, enumTimeDiscreteType forecastDiscreteType, bool isReadCalculatedValues)
        {
            var tis      = new List <TI_ChanelType>();
            var formulas = new List <TFormulaParam>();
            var tps      = new List <TP_ChanelType>();
            var nodes    = new List <long>();

            var result = new Dictionary <string, TForecastCalculateParams>();

            var periodsPriorityByForecastObject = new Dictionary <string, Dictionary <string, Queue <PeriodHierarchy> > >();

            if (forecastObjectUns == null)
            {
                return(result.Values.ToList());
            }

            #region Читаем параметры объектов прогнозирования из базы

            var forecastObjectUnsString = string.Join(",", forecastObjectUns);

            try
            {
                using (var db = new LightDBDataContext(Settings.DbConnectionString)
                {
                    ObjectTrackingEnabled = false, //Указываем что это у нас ReadOnly
                    DeferredLoadingEnabled = false,
                    CommandTimeout = 180,
                })
                {
                    var multiResult = db.usp2_ForecastObjectParams(forecastObjectUnsString, dtStart.ClientToServer(timeZoneId), dtEnd.ClientToServer(timeZoneId));

                    //Читаем доступные модели, которым будем считать
                    foreach (var modelsGroupByObject in multiResult.GetResult <usp2_ForecastObjectParamsResult1>().ToList().GroupBy(g => g.ForecastObject_UN))
                    {
                        result[modelsGroupByObject.Key] = new TForecastCalculateParams(modelsGroupByObject.Key, forecastModelUserSelected,
                                                                                       new HashSet <int>(modelsGroupByObject.Where(m => m.ForecastCalculateModel_ID.HasValue).OrderBy(m => m.Priority ?? 1000).Select(m => (int)(m.ForecastCalculateModel_ID ?? 0))));
                    }

                    #region Читаем ТИ, ТП формулы и т.д. для обсчета

                    foreach (var inputParamByObject in multiResult.GetResult <usp2_ForecastObjectParamsResult2>().ToList().GroupBy(g => g.ForecastObject_UN))
                    {
                        TForecastCalculateParams calculateParams;
                        if (!result.TryGetValue(inputParamByObject.Key, out calculateParams) || calculateParams == null)
                        {
                            continue;
                        }

                        calculateParams.DtStart      = dtStart;
                        calculateParams.DtEnd        = dtEnd;
                        calculateParams.DiscreteType = forecastDiscreteType;

                        var periodsByInputParam = new Dictionary <string, Queue <PeriodHierarchy> >();
                        periodsPriorityByForecastObject[inputParamByObject.Key] = periodsByInputParam;

                        foreach (var inputParam in inputParamByObject.GroupBy(g => g.ForecastInputParam_UN))
                        {
                            var periods = new Queue <PeriodHierarchy>();
                            periodsByInputParam[inputParam.Key] = periods;

                            var archiveByInputParam = new ForecastByInputParamArchives(inputParam.Key);
                            calculateParams.ArchivesByInputParam.Add(archiveByInputParam);
                            var isFirst = true;
                            foreach (var physicalParam in inputParam)
                            {
                                bool isFullPeriod;
                                var  period = BuildHalfHoursPeriods(physicalParam, dtStart, dtEnd, timeZoneId, out isFullPeriod);

                                if (isFirst)
                                {
                                    archiveByInputParam.MeasureQuantityType_UN = physicalParam.MeasureQuantityType_UN;
                                    isFirst = false;
                                }

                                //Формула
                                if (!string.IsNullOrEmpty(physicalParam.Formula_UN))
                                {
                                    var formulaParam = new TFormulaParam
                                    {
                                        FormulaID     = physicalParam.Formula_UN,
                                        FormulasTable = enumFormulasTable.Info_Formula_Description,
                                        IsFormulaHasCorrectDescription = true,
                                    };
                                    formulas.Add(formulaParam);
                                    //archiveByInputParam.Formulas.Add(formulaParam);
                                    periods.Enqueue(new PeriodHierarchy
                                    {
                                        Id           = new ID_Hierarchy_Channel(enumTypeHierarchy.Formula, physicalParam.Formula_UN, 0),
                                        IsFullPeriod = isFullPeriod,
                                        IndxStart    = period.Item1,
                                        IndxFinish   = period.Item2,
                                    });

                                    if (isFullPeriod)
                                    {
                                        continue;               //Объект действует на весь период, остальные объекты пропускаем
                                    }
                                }

                                //OPC пока не используется, т.к. не понятно как приводить к получасовкам
                                if (physicalParam.UANode_ID.HasValue)
                                {
                                    //archiveByInputParam.Nodes.Add(physicalParam.UANode_ID.Value);
                                    nodes.Add(physicalParam.UANode_ID.Value);

                                    periods.Enqueue(new PeriodHierarchy
                                    {
                                        Id           = new ID_Hierarchy_Channel(enumTypeHierarchy.UANode, physicalParam.UANode_ID.Value.ToString(), 0),
                                        IsFullPeriod = isFullPeriod,
                                        IndxStart    = period.Item1,
                                        IndxFinish   = period.Item2,
                                    });

                                    if (isFullPeriod)
                                    {
                                        continue;               //Объект действует на весь период, остальные объекты пропускаем
                                    }
                                }

                                //Для остальных нужен канал, если не указан пропускаем
                                //if (!inputParam.ChannelType.HasValue) continue;

                                //ТИ
                                if (physicalParam.TI_ID.HasValue)
                                {
                                    if (!physicalParam.ChannelType.HasValue)
                                    {
                                        errors.Append("Для ТИ {").Append(physicalParam.TI_ID).Append("} нужно указать канал");
                                        continue;
                                    }

                                    var tiId = new TI_ChanelType
                                    {
                                        ChannelType = physicalParam.ChannelType.Value,
                                        TI_ID       = physicalParam.TI_ID.Value,
                                        MsTimeZone  = timeZoneId, //Это возможно не нужно
                                    };
                                    //archiveByInputParam.TiIds.Add(tiId);
                                    tis.Add(tiId);
                                    periods.Enqueue(new PeriodHierarchy
                                    {
                                        Id           = new ID_Hierarchy_Channel(enumTypeHierarchy.Info_TI, physicalParam.TI_ID.Value.ToString(), physicalParam.ChannelType.Value),
                                        IsFullPeriod = isFullPeriod,
                                        IndxStart    = period.Item1,
                                        IndxFinish   = period.Item2,
                                    });

                                    if (isFullPeriod)
                                    {
                                        continue;               //Объект действует на весь период, остальные объекты пропускаем
                                    }
                                }

                                //ТП
                                if (physicalParam.TP_ID.HasValue)
                                {
                                    if (!physicalParam.ChannelType.HasValue)
                                    {
                                        errors.Append("Для ТП {").Append(physicalParam.TP_ID).Append("} нужно указать канал");
                                        continue;
                                    }

                                    var tpId = new TP_ChanelType
                                    {
                                        ChannelType = physicalParam.ChannelType.Value,
                                        TP_ID       = physicalParam.TP_ID.Value,
                                    };
                                    //archiveByInputParam.TpIds.Add(tpId);
                                    tps.Add(tpId);
                                    periods.Enqueue(new PeriodHierarchy
                                    {
                                        Id           = new ID_Hierarchy_Channel(enumTypeHierarchy.Info_TP, physicalParam.TP_ID.Value.ToString(), physicalParam.ChannelType.Value),
                                        IsFullPeriod = isFullPeriod,
                                        IndxStart    = period.Item1,
                                        IndxFinish   = period.Item2,
                                    });
                                }
                            }
                        }
                    }

                    #endregion
                }
            }
            catch (Exception ex)
            {
                errors.Append(ex.Message);
            }

            #endregion

            #region Читаем архивы

            //Пока запрашиваем только получасовки
            var resultCommonTi = new ArchivesValues_List2(tis, dtStart, dtEnd,
                                                          true, false, enumTimeDiscreteType.DBHalfHours, enumTypeInformation.Energy, false,
                                                          unitDigit, enumOVMode.NormalMode, timeZoneId, isReadCalculatedValues: isReadCalculatedValues);

            if (resultCommonTi.Errors != null)
            {
                errors.Append(resultCommonTi.Errors);
            }

            //Запрос значений всех ТП
            var resultCommonTp = new ArchivesTPValues(tps, dtStart, dtEnd, enumBusRelation.PPI_OurSide, enumTimeDiscreteType.DBHalfHours, null, enumTypeInformation.Energy, unitDigit,
                                                      timeZoneId, false, isSupressTpNotFound: true, isReadCalculatedValues: isReadCalculatedValues);
            if (resultCommonTp.Errors != null)
            {
                errors.Append(resultCommonTp.Errors);
            }

            //Все формулы
            var resultCommonFormula = new FormulasResult(formulas, dtStart, dtEnd, enumTimeDiscreteType.DBHalfHours, null, 0, enumTypeInformation.Energy, unitDigit, timeZoneId, //Для описанных здесь формул ед. изм. не учитываем
                                                         true, false, false, false, isReadCalculatedValues: isReadCalculatedValues, ovMode: enumOVMode.NormalMode);              //Для формулы сумму с ОВ считаем всегда!!!
            if (resultCommonFormula.Errors != null)
            {
                errors.Append(resultCommonFormula.Errors);
            }

            //Чтение архивов OPC
            UADataReader resultCommonUAData = null;
            try
            {
                resultCommonUAData = new UADataReader(nodes, dtStart, dtEnd, false, false, false, timeZoneId);
            }
            catch
            { }

            #endregion

            #region Подготовка архивов

            var numberHalfHoursForForecasting = MyListConverters.GetNumbersValuesInPeriod(enumTimeDiscreteType.DBHalfHours, dtStart, dtEnd, timeZoneId);

            result.Values.AsParallel().ForAll(calculateParam => //AsParallel().ForAll()
            {
                //new TVALUES_DB[numberHalfHoursForForecasting].Select(v => new TVALUES_DB(VALUES_FLAG_DB.IsNull, 0)).ToList();

                Dictionary <string, Queue <PeriodHierarchy> > periodsByInputParam;
                if (!periodsPriorityByForecastObject.TryGetValue(calculateParam.ForecastObject_UN, out periodsByInputParam) || periodsByInputParam.Count == 0)
                {
                    return;                                                                                                                                            //Нет параметров для обсчета
                }
                foreach (var paramArchives in calculateParam.ArchivesByInputParam)
                {
                    Queue <PeriodHierarchy> periods;
                    if (!periodsByInputParam.TryGetValue(paramArchives.ForecastInputParamUn, out periods) || periods.Count == 0)
                    {
                        continue;                                                                                                          //Нет параметров для обсчета
                    }
                    //var period = periods.Dequeue(); //Первый объект в интервале
                    PeriodHierarchy period = null;
                    var halfHours          = new List <TVALUES_DB>();
                    for (var hh = 0; hh < numberHalfHoursForForecasting; hh++)
                    {
                        if (!PeriodInHalfHour(ref period, periods, hh, resultCommonTi, resultCommonFormula,
                                              resultCommonTp, resultCommonUAData) || period.Archives == null)
                        {
                            halfHours.Add(new Servers.Calculation.DBAccess.Interface.Data.TVALUES_DB(VALUES_FLAG_DB.IsNull, 0)); //Получасовка не входит в наш диапазон, или нет архива
                            continue;
                        }

                        var aVal = period.Archives.ElementAtOrDefault(hh);
                        if (aVal == null)
                        {
                            aVal = new Servers.Calculation.DBAccess.Interface.Data.TVALUES_DB(VALUES_FLAG_DB.IsNull, 0); //Непонятная ситуация, помечаем как отсутствующие
                        }

                        var cVal = halfHours.ElementAtOrDefault(hh);
                        if (cVal == null)
                        {
                            cVal = new Servers.Calculation.DBAccess.Interface.Data.TVALUES_DB(aVal.F_FLAG, aVal.F_VALUE);
                            halfHours.Add(cVal);
                        }
                        else
                        {
                            cVal.F_VALUE = aVal.F_VALUE;
                            cVal.F_FLAG  = aVal.F_FLAG;
                        }
                    }


                    paramArchives.Archives.AddRange(MyListConverters.ConvertHalfHoursToOtherList(forecastDiscreteType, halfHours,
                                                                                                 dtStart, dtEnd, timeZoneId).Select(v => new Servers.Calculation.DBAccess.Interface.Data.TVALUES_DB(v.F_FLAG, v.F_VALUE)));
                }
            });

            #endregion

            return(result.Values.ToList());
        }