示例#1
0
        public void SetFieldInfo(string key, int indx, byte channel, ID_Hierarchy id, EnumDataSourceType?dataSource,
                                 string measureTypeUn, bool useMeasureModule = true, ID_Hierarchy replacedId = null, string groupByReplacedTiName = null)
        {
            if (ItemsIndexesDict.ContainsKey(key))
            {
                return;
            }

            if (string.IsNullOrEmpty(measureTypeUn) && channel > 0)
            {
                //Нужно задать по-умолчанию электроэнергию
            }

            ItemsIndexesDict[key] = new DetailFieldInfo
            {
                IndexHalfhour         = indx,
                ChannelType           = channel,
                Id                    = id,
                DataSource            = dataSource,
                MeasureUnitUn         = measureTypeUn,
                UseMeasureModule      = useMeasureModule,
                ColumnName            = key,
                TableEx               = this,
                ReplacedId            = replacedId,
                GroupByReplacedTiName = groupByReplacedTiName,
            };
        }
示例#2
0
 public ReplacedByOvInfo(ID_Hierarchy id, EnumDataSourceType?dataSourceType, string measureUnitUn, byte channel, Dictionary <int, TVALUES_DB> valuesByIndexes)
 {
     Id              = id;
     DataSourceType  = dataSourceType;
     MeasureUnitUn   = measureUnitUn;
     Channel         = channel;
     ValuesByIndexes = valuesByIndexes;
 }
示例#3
0
        public AddedColumnInfo(ID_Hierarchy id, EnumDataSourceType?dataSourceType, string measureUnitUn,
                               List <TVALUES_DB> values, byte channel, Dictionary <int, TDateTimeOV> tiReplaced = null, int replacedTiId = -1,
                               string groupByReplacedTiName = null)
        {
            Id             = id;
            DataSourceType = dataSourceType;
            MeasureUnitUn  = measureUnitUn;
            Values         = values;
            Channel        = channel;
            ReplacedTiId   = replacedTiId;

            //ValuesByIndexes = ValuesByIndexes;
            TiReplaced            = tiReplaced;
            GroupByReplacedTiName = groupByReplacedTiName;
        }
示例#4
0
        public void SetValue(string key, int indxValue, byte channel, ID_Hierarchy id, EnumDataSourceType?dataSource, string measureTypeUn,
                             object value, bool useMeasureModule = true, ID_Hierarchy replacedId = null, string groupByReplacedTiName = null)
        {
            base[key] = value;
            if (indxValue > 0 && replacedId == null)
            {
                return;
            }

            var tex = Table as DataTableEx;

            if (tex == null)
            {
                return;
            }

            tex.SetFieldInfo(key, indxValue, channel, id, dataSource, measureTypeUn, useMeasureModule, replacedId, groupByReplacedTiName);
        }
示例#5
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);
        }
示例#6
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);
        }
示例#7
0
        public Dictionary <string, DetailFieldInfo> AddColumnsBalances(ref int k, BalanceFreeHierarchyResults balanceFreeHierarchy)
        {
            var result = new Dictionary <string, DetailFieldInfo>();

            if (balanceFreeHierarchy == null || balanceFreeHierarchy.CalculatedValues == null)
            {
                return(result);
            }

            var objectType = typeof(ObjectIdCollection);
            var vType      = typeof(IFValue);

            var comparer = new IFreeHierarchyObjectComparerTyped();
            var freeHierarchyComparer = new IFreeHierarchyObjectEqualityComparer();

            foreach (var balance in balanceFreeHierarchy.CalculatedValues.Values)
            {
                if (balance.CalculatedByDiscretePeriods == null || balance.CalculatedByDiscretePeriods.Count == 0)
                {
                    continue;
                }

                var id = new ID_Hierarchy
                {
                    ID            = balance.BalanceFreeHierarchyUn,
                    TypeHierarchy = enumTypeHierarchy.UniversalBalance
                };

                #region Перебираем подгруппы

                //Фактический небаланс,кВт (по модулю) FactUnbalanceValue

                var columnName = "FactUnbalanceValue" + k;

                Columns.Add(new DataColumn(columnName, vType)
                {
                    ReadOnly = true,
                });

                k++;

                result[columnName] = new DetailFieldInfo
                {
                    ColumnName       = columnName,
                    Id               = id,
                    UseMeasureModule = true,
                    //MeasureUnitUn = tiValue.MeasureUnit_UN,
                    BalanceValues = balance.CalculatedByDiscretePeriods,
                };

                //Фактический небаланс,%

                columnName = "FactUnbalancePercent" + k;

                Columns.Add(new DataColumn(columnName, vType)
                {
                    ReadOnly = true,
                });

                k++;

                result[columnName] = new DetailFieldInfo
                {
                    ColumnName       = columnName,
                    Id               = id,
                    UseMeasureModule = false,
                    MeasureUnitUn    = "RatioUnit.Percent",
                    BalanceValues    = balance.CalculatedByDiscretePeriods,
                };


                #endregion
            }

            return(result);
        }
示例#8
0
        /// <summary>
        /// Добавляем колонки по ТП
        /// </summary>
        /// <param name="k"></param>
        /// <param name="archivesTpList"></param>
        /// /// <param name="ListTiViewModel"></param>
        /// <returns></returns>
        public Dictionary <string, DetailFieldInfo> AddColumnsTp(ref int k, ArchivesTPValueAllChannels archivesTpList,
                                                                 List <TRowObjectForGrid> listTiViewModel = null)
        {
            var result = new Dictionary <string, DetailFieldInfo>();

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

            var vType = typeof(IFValue);
            var tps   = EnumClientServiceDictionary.GetTps();

            if (tps == null)
            {
                return(result);
            }

            foreach (var archivesTpValueAllChannelse in archivesTpList.Result_Values.Select(a =>
            {
                TPoint tp;
                tps.TryGetValue(a.Key, out tp);
                return(new Tuple <TPoint, List <TArchivesTPValueAllChannels> >(tp, a.Value));
            }).Where(a => a != null).OrderBy(a => a.Item1.StringName))
            {
                var id = new ID_Hierarchy
                {
                    ID            = archivesTpValueAllChannelse.Item1.TP_ID.ToString(),
                    TypeHierarchy = enumTypeHierarchy.Info_TP
                };

                foreach (var tpValue in archivesTpValueAllChannelse.Item2)
                {
                    if (tpValue.Val_List == null)
                    {
                        continue;
                    }

                    var tp = archivesTpValueAllChannelse.Item1;

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

                    foreach (var channel in archivesTpList.ChannelType_List.OrderBy(c => c))
                    {
                        List <TPointValue> tpVals;
                        if (!pointsByChannel.TryGetValue(channel, out tpVals) || tpVals == null)
                        {
                            continue;
                        }

                        var columnName = "F_VALUE" + k;

                        var col = new DataColumn(columnName, vType)
                        {
                            //Caption = "ТП - " + tp.StringName + " " +
                            //          getNameInterface.GetChanelTypeNameByID(channel, false),
                            ReadOnly = true,
                        };

                        Columns.Add(col);
                        k++;

                        result[columnName] = new DetailFieldInfo
                        {
                            ColumnName       = columnName,
                            Id               = id,
                            DataSource       = null,
                            MeasureUnitUn    = null,
                            Values           = tpVals.Select((s, i) => new { s, i }).ToDictionary(v => v.i, v => v.s as IFValue),
                            ChannelType      = channel,
                            UseMeasureModule = true,
                        };
                    }

                    //tpArchives.Add(new );
                }
            }

            return(result);
        }
示例#9
0
        public Dictionary <string, DetailFieldInfo> AddColumnsTi(ref int k, ArchivesValues_List2 archivesList, bool isSumTiForChart, bool isDetailOv)
        {
            var result = new Dictionary <string, DetailFieldInfo>();

            if (archivesList == null || archivesList.ArchiveValues == null)
            {
                return(result);
            }

            var objectType = typeof(ObjectIdCollection);
            var vType      = typeof(IFValue);

            if (isSumTiForChart)
            {
                #region  Нужно просумировать поканально все ТИ

                var tiValues = new List <TArchivesValue>();

                //Перебираем ТИ
                foreach (var aVals in archivesList.ArchiveValues.Values)
                {
                    tiValues.AddRange(aVals);
                }

                var dataSourcePair = EnumClientServiceDictionary.DataSourceTypeList.FirstOrDefault();

                //Перебираем каналы
                foreach (var aVals in tiValues.GroupBy(a => a.TI_Ch_ID.DataSourceType))
                {
                    var valuesDict = new Dictionary <byte, Dictionary <int, IFValue> >();

                    if (dataSourcePair.Key != aVals.Key)
                    {
                        dataSourcePair = EnumClientServiceDictionary.DataSourceTypeList.FirstOrDefault(ds =>
                                                                                                       ds.Key.HasValue && ds.Key.Value == aVals.Key);
                    }

                    foreach (var aVal in aVals.OrderBy(a => a.TI_Ch_ID.ChannelType))
                    {
                        if (aVal.Val_List == null)
                        {
                            continue;
                        }

                        Dictionary <int, IFValue> chVals;
                        if (!valuesDict.TryGetValue(aVal.TI_Ch_ID.ChannelType, out chVals))
                        {
                            var columnName = "F_VALUE" + k;

                            //Это новая колонка
                            var col = new DataColumn(columnName, vType)
                            {
                                Caption = "Сумма по " + ChannelFactory.ChanelTypeNameFSK[aVal.TI_Ch_ID.ChannelType]
                                          + "\n" + (dataSourcePair.Value ?? "По приоритету")
                            };

                            Columns.Add(col);
                            k++;

                            chVals = new Dictionary <int, IFValue>();
                            valuesDict[aVal.TI_Ch_ID.ChannelType] = chVals;

                            result[columnName] = new DetailFieldInfo
                            {
                                ColumnName    = columnName,
                                Id            = null,
                                DataSource    = aVals.Key,
                                MeasureUnitUn = null,
                                Values        = chVals,
                                ChannelType   = aVal.TI_Ch_ID.ChannelType,
                            };
                        }

                        //Суммируем поканально
                        for (var i = 0; i < aVal.Val_List.Count; i++)
                        {
                            var     v = aVal.Val_List[i];
                            IFValue r;;
                            if (!chVals.TryGetValue(i, out r) || r == null)
                            {
                                chVals.Add(i, new TVALUES_DB
                                {
                                    F_FLAG  = v.F_FLAG,
                                    F_VALUE = v.F_VALUE
                                });
                            }
                            else
                            {
                                r.F_VALUE += v.F_VALUE;
                                r.F_FLAG   = r.F_FLAG.CompareAndReturnMostBadStatus(v.F_FLAG);
                            }
                        }
                    }
                }

                #endregion
            }
            else
            {
                #region Просто добавляем колонки по каждой ТИ

                var comparer = new IFreeHierarchyObjectComparerTyped();
                var freeHierarchyComparer = new IFreeHierarchyObjectEqualityComparer();

                foreach (var groupByObject in archivesList.ArchiveValues
                         .Select(pair =>
                {
                    var ti = EnumClientServiceDictionary.TIHierarchyList[pair.Key];
                    if (ti == null)
                    {
                        return(null);
                    }

                    var ps = EnumClientServiceDictionary.DetailPSList[ti.PS_ID];
                    if (ps == null)
                    {
                        return(null);
                    }

                    return(new Tuple <IFreeHierarchyObject, IFreeHierarchyObject, List <TArchivesValue> >(ps, ti, pair.Value));
                })
                         .Where(tuple => tuple != null)
                         .OrderBy(tuple => tuple.Item1, comparer)               //сначала сортируем по ПС
                         .ThenBy(tuple => tuple.Item2, comparer)
                         .GroupBy(tuple => tuple.Item2, freeHierarchyComparer)) //Группируем по объекту
                {
                    var id = new ID_Hierarchy
                    {
                        ID            = groupByObject.Key.Id.ToString(),
                        TypeHierarchy = groupByObject.Key.Type,
                    };

                    foreach (var objects in groupByObject)
                    {
                        var isOv = false;
                        Dictionary <int, TDateTimeOV> tiReplaced = null;

                        #region Добавление обычных колонок

                        //Теперь сортируем по категории ед.измерения

                        foreach (var tiValue in objects.Item3.OrderBy(aVal => aVal.TI_Ch_ID.ChannelType)
                                 .ThenBy(aVal => aVal.MeasureUnit_UN == null)
                                 .ThenBy(aVal => aVal.MeasureUnit_UN))
                        {
                            //Обходной ли это выключатель
                            isOv = tiValue.IsOV;// && tiValue.TiByOvReplaced != null && tiValue.TiByOvReplaced.Count > 0;
                            if (tiReplaced == null)
                            {
                                tiReplaced = tiValue.TiByOvReplaced;
                            }

                            var columnName = "F_VALUE" + k;

                            if (isOv)
                            {
                                Columns.Add(new DataColumn(columnName, typeof(TOvValue))
                                {
                                    ReadOnly = true,
                                });
                            }
                            else
                            {
                                Columns.Add(new DataColumn(columnName, vType)
                                {
                                    ReadOnly = true,
                                });
                            }

                            k++;

                            result[columnName] = new DetailFieldInfo
                            {
                                ColumnName       = columnName,
                                Id               = id,
                                DataSource       = tiValue.TI_Ch_ID.DataSourceType,
                                MeasureUnitUn    = tiValue.MeasureUnit_UN,
                                Values           = tiValue.Val_List.Select((s, i) => new { s, i }).ToDictionary(v => v.i, v => v.s as IFValue),
                                ChannelType      = tiValue.TI_Ch_ID.ChannelType,
                                UseMeasureModule = string.IsNullOrEmpty(tiValue.MeasureUnit_UN),
                                IsOv             = isOv,
                                TiReplaced       = tiValue.TiByOvReplaced,
                            };
                        }

                        #endregion

                        #region Если это ОВ, добавляем колонки о замещаемых ТИ

                        if (isOv && isDetailOv)
                        {
                            #region  Это колонка с информацией о замещаемой ТИ

                            var columnName = "ovInfo" + k; //По названию определяемся что это информация об ОВ

                            Columns.Add(new DataColumn(columnName, objectType)
                            {
                                ReadOnly = true,
                            });

                            result[columnName] = new DetailFieldInfo
                            {
                                ColumnName = columnName,
                                Id         = new ID_Hierarchy
                                {
                                    ID            = id.ID,
                                    TypeHierarchy = enumTypeHierarchy.Info_TI,
                                },
                                DataSource    = null,
                                MeasureUnitUn = null,
                                Values        = null,
                                ChannelType   = 0,
                                TiReplaced    = tiReplaced,
                            };

                            #endregion


                            //Объекты которые замещает ОВ
                            foreach (var tiValue in objects.Item3.OrderBy(aVal => aVal.TI_Ch_ID.ChannelType)
                                     .ThenBy(aVal => aVal.MeasureUnit_UN == null)
                                     .ThenBy(aVal => aVal.MeasureUnit_UN))
                            {
                                if (tiValue.TiByOvReplaced != null)
                                {
                                    foreach (var replacedTi in tiValue.TiByOvReplaced)
                                    {
                                        var groupByReplacedTiName = "ovValue_" + id.ID + "_" + replacedTi.Key + "_";
                                        columnName = groupByReplacedTiName + tiValue.TI_Ch_ID.ChannelType +
                                                     (tiValue.TI_Ch_ID.DataSourceType.HasValue
                                                         ? tiValue.TI_Ch_ID.DataSourceType.Value.ToString()
                                                         : string.Empty);

                                        Columns.Add(
                                            new DataColumn(columnName, vType) //Это колонка со значениями замещаемых ТИ
                                        {
                                            ReadOnly = true,
                                        });

                                        result[columnName] = new DetailFieldInfo
                                        {
                                            ColumnName = columnName,
                                            Id         = new ID_Hierarchy
                                            {
                                                ID            = tiValue.TI_Ch_ID.TI_ID.ToString(),
                                                TypeHierarchy = enumTypeHierarchy.Info_TI,
                                            },
                                            DataSource    = tiValue.TI_Ch_ID.DataSourceType,
                                            MeasureUnitUn = tiValue.MeasureUnit_UN,
                                            Values        = tiValue.Val_List.Select((s, i) => new { s, i }).ToDictionary(v => v.i, v => v.s as IFValue),
                                            ChannelType   = tiValue.TI_Ch_ID.ChannelType,
                                            TiReplaced    = tiValue.TiByOvReplaced,
                                            ReplacedId    = new ID_Hierarchy
                                            {
                                                ID            = replacedTi.Key.ToString(),
                                                TypeHierarchy = enumTypeHierarchy.Info_TI,
                                            },
                                            GroupByReplacedTiName = groupByReplacedTiName,
                                            UseMeasureModule      = string.IsNullOrEmpty(tiValue.MeasureUnit_UN)
                                        };
                                    }
                                }
                            }
                        }

                        #endregion
                    }
                }

                #endregion
            }

            return(result);
        }