public ActionResult Export(List <Guid> ids, bool exportBackground, string tempFileName)
        {
            if (ids != null)
            {
                RemoveOldPackages();

                var inspektionsrouten = inspektionsRouteGISService.GetCurrentEntities().Where(ir => ids.Contains(ir.Id));
                ereignisLogService.LogEreignis(EreignisTyp.InspektionsRoutenExport, new Dictionary <string, object>()
                {
                    { "Inspektionsrouten", string.Join(", ", inspektionsrouten.Select(ir => ir.Bezeichnung)) }
                });

                var cogModelList = new List <CheckOutsGISModel>();
                foreach (var id in ids)
                {
                    var cogModel = new CheckOutsGISModel();
                    cogModel.InspektionsRouteGIS = id;
                    cogModel.Mandant             = sessionService.SelectedMandantId;
                    cogModel.CheckOutDatum       = DateTime.Now;
                    cogModelList.Add(cogModel);
                }

                var memoryStream = packageService.Export(checkOutService.CheckOutData(ids, exportBackground), cogModelList).Stream as MemoryStream;
                var filePath     = Server.MapPath(String.Format(exportFilePattern, tempFileName));
                using (var fs = new FileStream(filePath, FileMode.Create))
                {
                    memoryStream.WriteTo(fs);
                    fs.Flush();
                }
                inspektionsRouteGISService.LockInspektionsRouten(ids);

                foreach (var id in ids)
                {
                    var inspektionsroute = inspektionsRouteGISService.GetInspektionsRouteById(id);
                    inspektionsRouteStatusverlaufService.HistorizeRouteExportiert(inspektionsroute);
                }
            }
            return(new EmsgEmptyResult());
        }
Exemplo n.º 2
0
        public ImportResult CheckInData(ImportResult importResult)
        {
            try
            {
                DTOContainer dtoContainer                 = importResult.dtocontainer;
                var          zustandsAbschnitte           = dtoContainer.DataTransferObjects.Where(dto => dto.GetType() == typeof(ZustandsabschnittGISDTO)).Select(sd => sd as ZustandsabschnittGISDTO);
                var          schadendetailList            = dtoContainer.DataTransferObjects.Where(dto => dto.GetType() == typeof(SchadendetailDTO)).Select(sd => sd as SchadendetailDTO);
                var          schadengruppeList            = dtoContainer.DataTransferObjects.Where(dto => dto.GetType() == typeof(SchadengruppeDTO)).Select(sd => sd as SchadengruppeDTO);
                var          deletedZustandsabschnittList = zustandsAbschnitte.Where(z => z.IsDeleted && (!z.IsAdded)).Select(z => z.Id);


                IList <ZustandsabschnittGISDTO> zustandsabschnitteToValidate = new List <ZustandsabschnittGISDTO>();
                zustandsabschnitteToValidate = zustandsabschnitteToValidate.Concat(zustandsAbschnitte.Where(z => !z.IsDeleted && (z.IsEdited || z.IsAdded))).ToList();

                foreach (var za in zustandsabschnitteToValidate)
                {
                    var result = zustandsabschnittGISDTOService.Validate(za, deletedZustandsabschnittList.ToList(), zustandsabschnitteToValidate);
                    foreach (string error in result)
                    {
                        importResult.Errors.Add(error);
                    }
                }

                if (importResult.Errors.Count == 0)
                {
                    foreach (Guid id in deletedZustandsabschnittList)
                    {
                        try
                        {
                            zustandsabschnittGISDTOService.DeleteEntity(id);
                        }
                        catch { }
                    }

                    foreach (var za in zustandsabschnitteToValidate)
                    {
                        if (za.Shape.SRID == 0)
                        {
                            za.Shape.SRID = GisConstants.SRID;
                        }
                        zustandsabschnittGISDTOService.CreateOrUpdateEntityFromDTO(za);
                        FahrBahnZustandDTO zustand = new FahrBahnZustandDTO()
                        {
                            Erfassungsmodus   = za.Erfassungsmodus,
                            Schadendetails    = za.Erfassungsmodus == ZustandsErfassungsmodus.Detail ? schadendetailList.Where(sd => sd.ZustandsabschnittId == za.Id && !sd.IsDeleted).ToList() : new List <SchadendetailDTO>(),
                            Schadengruppen    = za.Erfassungsmodus == ZustandsErfassungsmodus.Grob ? schadengruppeList.Where(sg => sg.ZustandsabschnittId == za.Id && !sg.IsDeleted).ToList() : new List <SchadengruppeDTO>(),
                            ZustandsAbschnitt = za.Id,
                            Zustandsindex     = za.Zustandsindex
                        };
                        fahrbahnZustandDTOService.UpdateFahrbahnZustand(zustand);
                    }
                }
                if (importResult.Errors.Count == 0)
                {
                    foreach (var kvp in importResult.descriptor.CheckOutsGISInspektionsroutenList)
                    {
                        var cogModel = checkOutsGISService.GetById(kvp.Key);
                        cogModel.CheckInDatum = timeService.Now;
                        checkOutsGISService.UpdateEntity(cogModel);
                        inspektionsRouteGISService.UnLockInspektionsRouten(importResult.InspektionsRouten);
                        foreach (var ir in importResult.InspektionsRouten)
                        {
                            inspektionsRouteStatusverlaufService.HistorizeRouteImportiert(inspektionsRouteGISService.GetInspektionsRouteById(ir));
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Loggers.ApplicationLogger.Error(e.Message, e);
                importResult.Errors.Add("Error When Importing");
            }
            var inspektionsrouten = inspektionsRouteGISService.GetCurrentEntities().Where(ir => importResult.InspektionsRouten.Contains(ir.Id));

            ereignisLogService.LogEreignis(EreignisTyp.InspektionsRoutenImport, new Dictionary <string, object>()
            {
                { "Inspektionsrouten", string.Join(", ", inspektionsrouten.Select(ir => ir.Bezeichnung)) }, { "Fehleranzahl", importResult.Errors.Count }
            });
            return(importResult);
        }
Exemplo n.º 3
0
        public CheckOutGISStreams CheckOutData(IList <Guid> ids, bool exportBackground)
        {
            CheckOutGISStreams checkoutGISStreams = new CheckOutGISStreams();


            DTOContainer dtosToExport = new DTOContainer();
            Mandant      mandant      = null;
            IGeometry    bbox         = null;

            foreach (Guid id in ids)
            {
                InspektionsRouteGIS inspektionsroute = inspektionsRouteGISService.GetInspektionsRouteById(id);
                mandant = inspektionsroute.Mandant;
                if (bbox != null)
                {
                    bbox = bbox.Union(inspektionsroute.Shape.Envelope).Envelope;
                }
                else
                {
                    bbox = inspektionsroute.Shape.Envelope;
                }
                IList <InspektionsRtStrAbschnitte> inspektionsroutenAbschnitte = inspektionsRtStrAbschnitteService.GetCurrentEntities().Where(ira => ira.InspektionsRouteGIS.Id == inspektionsroute.Id).ToList();

                inspektionsroutenAbschnitte.OrderBy(ira => ira.Reihenfolge);

                //Strassenabschnitte
                foreach (InspektionsRtStrAbschnitte inspektionsroutenAbschnitt in inspektionsroutenAbschnitte)
                {
                    StrassenabschnittGISDTO strassenabschnittGISDTO = strassenabschnittGISDTOService.GetDTOByID(inspektionsroutenAbschnitt.StrassenabschnittGIS.Id);
                    dtosToExport.DataTransferObjects.Add(strassenabschnittGISDTO);

                    //Zustandsabschnitte
                    foreach (ZustandsabschnittGIS zustandsabschnitt in inspektionsroutenAbschnitt.StrassenabschnittGIS.Zustandsabschnitten)
                    {
                        ZustandsabschnittGISDTO zustandsabschnittGISDTO = zustandsabschnittGISDTOService.GetDTOByID(zustandsabschnitt.Id);
                        dtosToExport.DataTransferObjects.Add(zustandsabschnittGISDTO);


                        foreach (Schadendetail schaden in zustandsabschnitt.Schadendetails)
                        {
                            SchadendetailDTO schadendto = schadendetailDTOService.GetDTOByID(schaden.Id);
                            schadendto.ZustandsabschnittId = zustandsabschnitt.Id;
                            dtosToExport.DataTransferObjects.Add(schadendto);
                        }
                        foreach (Schadengruppe schadengruppe in zustandsabschnitt.Schadengruppen)
                        {
                            SchadengruppeDTO schadengruppedto = schadengruppeDTOService.GetDTOByID(schadengruppe.Id);
                            schadengruppedto.ZustandsabschnittId = zustandsabschnitt.Id;
                            dtosToExport.DataTransferObjects.Add(schadengruppedto);
                        }
                    }
                }
            }
            IGeometry backgroundBbox = null;

            //Achsensegmente
            foreach (AchsenSegment achsensegment in achsenSegmentService.GetCurrentBySpatialFilter(bbox).Where(a => a.Mandant == mandant))
            {
                dtosToExport.DataTransferObjects.Add(achsenSegmentDTOService.GetDTOByID(achsensegment.Id));
                if (backgroundBbox != null)
                {
                    backgroundBbox = backgroundBbox.Envelope.Union(achsensegment.Shape.Envelope);
                }
                else
                {
                    backgroundBbox = achsensegment.Shape.Envelope;
                }
            }

            List <Belastungskategorie> belastungskategorien = belastungskategorieService.AlleBelastungskategorie;

            foreach (Belastungskategorie bk in belastungskategorien)
            {
                dtosToExport.DataTransferObjects.Add(belastungskategorieDTOService.GetDTOByID(bk.Id));
            }
            List <MassnahmenvorschlagKatalog> mvklist = massnahmenvorschlagKatalogService.GetCurrentEntities().Where(mvk => mvk.Mandant.Id == mandant.Id && mvk.ErfassungsPeriod.IsClosed == false).ToList();

            foreach (MassnahmenvorschlagKatalog mvk in mvklist)
            {
                dtosToExport.DataTransferObjects.Add(massnahmenvorschlagKatalogDTOService.GetDTOByID(mvk.Id));
            }

            IFormatter   formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            MemoryStream serializedModelsStream = new MemoryStream();

            formatter.Serialize(serializedModelsStream, dtosToExport);
            serializedModelsStream.Seek(0, 0);


            checkoutGISStreams.Bezeichnung = "export";

            LayerCollection exportLayer = serverConfigurationProvider.ExportLayer;
            int             count       = exportLayer.Count;
            string          filepath    = serverConfigurationProvider.WMSCacheFolderPath;

            for (int i = 0; i < count; i++)
            {
                ITileSourceFactory fact = null;
                var layer = exportLayer[i];
                switch (layer.ServiceType)
                {
                case ServiceType.WMS:
                    fact = new WmsTileSourceFactory(layer);
                    break;

                case ServiceType.WMTS:
                    fact = new WmtsTileSourceFactory(layer);
                    break;

                default:
                    break;
                }
                TileLoader loader = new TileLoader(fact.GetTileSource());

                Stopwatch stopwatch = new Stopwatch();
                stopwatch.Start();
                checkoutGISStreams.Tiles.Add(loader.GetTiles(layer, bbox, filepath, serverConfigurationProvider.UseWMSCaching, fact.Format, serverConfigurationProvider.ExportBackgroundMapBuffer, serverConfigurationProvider.ExportTileLimit, download: exportBackground));
                stopwatch.Stop();
                Loggers.PeformanceLogger.DebugFormat("Layer {0} downloaded in {1}", layer.Name, stopwatch.Elapsed);
            }
            checkoutGISStreams.ModelsToExport = serializedModelsStream;

            checkoutGISStreams.LegendStreams.Add(FileNameConstants.AchsenSegmentLayerLegendFilename, legendService.GetLegendStream("AchsenSegmentLayer"));
            checkoutGISStreams.LegendStreams.Add(FileNameConstants.StrassenabschnittLayerLegendFilename, legendService.GetLegendStream("StrassenabschnittLayer"));
            checkoutGISStreams.LegendStreams.Add(FileNameConstants.ZustandsabschnittLayerLegendFilename, legendService.GetLegendStream("ZustandsabschnittLayer"));
            checkoutGISStreams.LegendStreams.Add(FileNameConstants.ZustandsabschnittLayerTrottoirLegendFilename, legendService.GetLegendStream("ZustandsabschnittLayer_Trottoir"));
            return(checkoutGISStreams);
        }