コード例 #1
0
        public ActionResult Get()
        {
            dataviews = new List <DataViewModel>();
            ConstructionObjects construct = _dataRequests.getConstructions().Result.FirstOrDefault();
            var dataVersions = _dataRequests.getVersions().Result;

            foreach (var vers in dataVersions)
            {
                dataviews.Add
                (
                    new DataViewModel
                {
                    ObjectName       = construct.Name,
                    ObjectCode       = construct.ObjectCode,
                    VersionName      = vers.Name,
                    DataIntersection = _values.getValue.ToList().Find(di => di.Objectindex == construct.id && di.Versionindex == vers.id).Intersection
                }
                );
            }
            return(this.Ok(dataviews));
        }
コード例 #2
0
        /*Реализация не скрою получилась довольно сложной, все на основе старой проблемы в сервисе справочников,
         * при создании миграции и работе с метаданными, знаю что можно было сделать проще и компактнее
         * причем сделать боле гибкую систему как оно собственно и полагается,
         * но повторюсь я был нацелен на результат, и к тому же пытался уложиться в конкретнык сроки
         * ниже описано что и для чего
         */
        public ReportViewModel GetReport(InputAtributData InputData)
        {
            List <bool> EnabledAtributsString = new List <bool>(), EnabledAtributsColumn = new List <bool>(); // Списки определения: включены ли атрибуты справочника или нет?
                                                                                                              //для отображения в отчете, по строкам и столбцам соответственно
            var contentData = new ReportViewModel();                                                          //экземпляер модели для отображения данных всего отчета
            var intersections = new List <Intersection>();                                                    // здесь храним все пересечения которые нас будут интересовать

            /*получаем все данные из всех сервисов*/
            var constructions = _dataRequest.getConstructions().Result;             //объекты строительства
            var versions = _dataRequest.getVersions().Result;                       //версии данных
            var consrtuctionObj_metadata = _dataRequest.getGuideMetaData(1).Result; //метаданные справочника объекты строительства
            var versionData_metadata     = _dataRequest.getGuideMetaData(2).Result; // метаданные справочника версии данных

            /*определяем какой справочник указан в качества справочника по строкам*/
            if (InputData.GuideByStringId == 1) //если это объекты строительства, то
            {
                /*проверяем все ли атрибуты соответствуют своим справочникам, вынужденная мера(так как атрибуты у нас самостоятельные (1 - объекты строительства, 2 -версии данных, 0-универсальный))*/
                if (InputData.ListAttributesGuideString.FindAll(a => a.guideStructureId == 2).Count > 0 || InputData.AttributGuideColumn.id == 1) //если имеются несоответсвия,то возвращаем пустой отчет,
                                                                                                                                                  //а в дальнейшем указываем, что неправильные входные данные
                {
                    return(null);
                }

                foreach (var a in consrtuctionObj_metadata.guideAtr) //проверяем наличие, указанных метаданных справочника объекты строительства, так как уже знаем что, он указан справочником по строкам
                {
                    if (InputData.ListAttributesGuideString.Contains(a))
                    {
                        EnabledAtributsString.Add(true);
                    }
                    else
                    {
                        EnabledAtributsString.Add(false);                                                                                        // определяем какие атрибуты доступны исходя из входных данных, далее мы будем определять данные атрибуты справочника по id
                    }
                    //в шаблоне при выводе информации
                }

                foreach (var v in versionData_metadata.guideAtr) //проверяем наличие, указанных метаданных справочника версии данных, так уже знаем что, он указан справочником по столбцам
                {
                    if (InputData.AttributGuideColumn.Equals(v))
                    {
                        EnabledAtributsColumn.Add(true);
                    }
                    else
                    {
                        EnabledAtributsColumn.Add(false);                                                                                // определяем какой атрибут доступен исходя входных данных по столбцу, далее мы будем определять его по id
                    }
                }


                //заполнение нужной нам модели пересечений
                foreach (var cns in InputData.ListConstructions)
                {
                    foreach (var vrs in InputData.ListVersions)
                    {
                        intersections.Add
                        (
                            new Intersection
                        {
                            Construction     = cns,
                            Version          = vrs,
                            DataIntersection = _dataRequest.getIntersections("object", cns.id).Result.Find(i => i.Objectindex == cns.id && i.Versionindex == vrs.id).Intersection
                        }
                        );
                    }
                }
            }

            if (InputData.GuideByStringId == 2)                                                                                                   //если это версии данных,то
            {
                if (InputData.ListAttributesGuideString.FindAll(a => a.guideStructureId == 1).Count > 0 || InputData.AttributGuideColumn.id == 2) //проверка на соответствие атрибутов справочнику, вынужденная мера
                {
                    return(null);
                }


                foreach (var v in versionData_metadata.guideAtr) //проверяем наличие, указанных метаданных справочника версии данных, так уже знаем что, он указан справочником по строкам
                {
                    if (InputData.ListAttributesGuideString.Contains(v))
                    {
                        EnabledAtributsString.Add(true);
                    }
                    else
                    {
                        EnabledAtributsString.Add(false);                                                                                        // определяем какие атрибуты доступны исходя входных данных, далее мы будем определять данные атрибуты справочника по id
                    }
                }

                foreach (var a in consrtuctionObj_metadata.guideAtr) //проверяем наличие, указанных метаданных справочника объекты строительства, так уже знаем что, он указан справочником по столбцам
                {
                    if (InputData.AttributGuideColumn.Equals(a))
                    {
                        EnabledAtributsColumn.Add(true);
                    }
                    else
                    {
                        EnabledAtributsColumn.Add(false);                                                                                //определяем какой атрибут доступен исходя входных данных по столбцу, далее мы будем определять его по id
                    }
                }

                //заполнение нужной нам модели пересечений
                foreach (var vrs in InputData.ListVersions)
                {
                    foreach (var cns in InputData.ListConstructions)
                    {
                        intersections.Add
                        (
                            new Intersection
                        {
                            Construction     = cns,
                            Version          = vrs,
                            DataIntersection = _dataRequest.getIntersections("version", cns.id).Result.Find(i => i.Objectindex == cns.id && i.Versionindex == vrs.id).Intersection
                        }
                        );
                    }
                }
            }
            /*получаем объект для отображения  отчета и возвращаем его*/
            contentData = new ReportViewModel
            {
                guideidbystring = InputData.GuideByStringId,
                guideidbycolumn = InputData.GuideByColumnId,
                ListEnabledAtributesByString = EnabledAtributsString,
                ListEnabledAtributByColumn   = EnabledAtributsColumn,
                Constructions = InputData.ListConstructions,
                Versions      = InputData.ListVersions,
                Intersections = intersections
            };
            return(contentData);
        }