// ReSharper disable once FunctionComplexityOverflow private void WriteOneLine([NotNull] ExcelWorksheet ws, ref int row, [NotNull] BuildingComplex complex) { foreach (var gebäudeObjectID in complex.GebäudeObjectIDs) { ws.Cells[row, 1].Value = complex.ComplexName; ws.Cells[row, 2].Value = complex.AdressesAsJson.Replace("[", "").Replace("]", ""); ws.Cells[row, 3].Value = complex.EGIDsAsJson.Replace("[", "").Replace("]", ""); ws.Cells[row, 4].Value = gebäudeObjectID; row++; } }
private static bool FindOverlapInEGids([NotNull] BuildingComplex complex1, [NotNull] BuildingComplex complex2) { foreach (var eGid2 in complex2.EGids) { if (complex1.EGids.Contains(eGid2)) { return(true); } } return(false); }
private static bool FindOverlapInStandorte([NotNull] BuildingComplex complex1, [NotNull] BuildingComplex complex2) { foreach (var complex2Adress in complex2.ObjektStandorte) { if (complex1.ObjektStandorte.Contains(complex2Adress)) { return(true); } } return(false); }
private static bool FindOverlapInGebäudeIDs([NotNull] BuildingComplex complex1, [NotNull] BuildingComplex complex2) { foreach (var complex2Adress in complex2.GebäudeObjectIDs) { if (complex1.GebäudeObjectIDs.Contains(complex2Adress)) { return(true); } } return(false); }
private static BuildingComplex CreateNewComplex([NotNull][ItemNotNull] List <BuildingComplex> komplexe, ref int virtualEGIDs, KeyValuePair <string, string> localnetStandort, [NotNull] string manuallytranslatedAdress, int gebäudeID) { var newbc = new BuildingComplex(Guid.NewGuid().ToString(), BuildingComplex.SourceOfEntry.Localnetdata); newbc.ObjektStandorte.Add(localnetStandort.Value); newbc.AddAdress(manuallytranslatedAdress); newbc.EGids.Add(virtualEGIDs--); newbc.GebäudeObjectIDs.Add(gebäudeID); komplexe.Add(newbc); return(newbc); }
private static bool FindOverlapInAdresses([NotNull] BuildingComplex complex1, [NotNull] BuildingComplex complex2) { foreach (var complex2Adress in complex2.CleanedAdresses) { if (complex1.CleanedAdresses.Contains(complex2Adress)) { return(true); } } return(false); }
protected override void RunActualProcess() { //string excelFileName = @"U:\SimZukunft\RawDataForMerging\DatenfürEnergiebilanzBurgdorf2018.xlsx"; var dbRaw = SqlConnection.GetDatabaseConnection(Stage.Raw, Constants.PresentSlice).Database; var dbComplexes = SqlConnection.GetDatabaseConnection(Stage.Complexes, Constants.PresentSlice).Database; var dbComplexEnergy = SqlConnection.GetDatabaseConnection(Stage.ComplexEnergyData, Constants.PresentSlice).Database; var dbHouses = SqlConnection.GetDatabaseConnection(Stage.Houses, Constants.PresentSlice).Database; var complexes = dbComplexes.Fetch <BuildingComplex>(); //var gwr = dbRaw.Fetch<GwrData>(); var kanton = dbRaw.Fetch <EnergiebedarfsdatenBern>(); var complexEnergy = dbComplexEnergy.Fetch <MonthlyElectricityUsePerStandort>(); var houses = dbHouses.Fetch <House>(); //var heatingSystems = dbHouses.Fetch<HeatingSystemEntry>(); //var pvSystemEntries = dbHouses.Fetch<PvSystemEntry>(); //var occupants = dbHouses.Fetch<Occupant>(); //var businessEntries = dbHouses.Fetch<BusinessEntry>(); //var households = dbHouses.Fetch<Household>(); var sonnendach = dbRaw.Fetch <SonnenDach>(); using (var p = new ExcelPackage()) { //A workbook must have at least on cell, so lets add one... var ws = p.Workbook.Worksheets.Add("MySheet"); //To set values in the spreadsheet use the Cells indexer. var columnNumbers = MakeColumnNumberDictionary(); //header foreach (KeyValuePair <Columns, int> pair in columnNumbers) { ws.Cells[1, pair.Value].Value = pair.Key.ToString(); } int row = 2; foreach (var house in houses) { BuildingComplex complex = complexes.Single(x => x.ComplexName == house.ComplexName); //var heatingSystem = heatingSystems.Single(x => x.HouseGuid == house.HouseGuid); //var pvSystem = pvSystemEntries.FirstOrDefault(x => x.HouseGuid == house.HouseGuid); //var houseOccupants = occupants.Where(x => x.HouseGuid == house.HouseGuid).ToList(); //var houseBusinessEntries = businessEntries.Where(x => x.HouseGuid == house.HouseGuid).ToList(); //var houseHouseholds = households.Where(x => x.HouseGuid == house.HouseGuid).ToList(); WriteOneLine(ws, row, columnNumbers, house, kanton, //gwr, complexEnergy, complex, sonnendach); row++; } //Save the new workbook. We haven't specified the filename so use the Save as method. var filename = MakeAndRegisterFullFilename("ComparisonEbbeSonnendachLocalnet.xlsx", Name, "", Constants.PresentSlice); p.SaveAs(new FileInfo(filename)); Log(MessageType.Warning, "File: " + filename); } }
private static void UpdateComplexWithMissingStandort([NotNull] MyDb db, [NotNull] string fullStandort, [NotNull] BuildingComplex bc, int gebäudeID) { if (!bc.ObjektStandorte.Contains(fullStandort)) { bc.ObjektStandorte.Add(fullStandort); } if (!bc.GebäudeObjectIDs.Contains(gebäudeID)) { bc.GebäudeObjectIDs.Add(gebäudeID); } db.Save(bc); }
private void P01_StartWithEnergieBedarfsdaten() { var dbsrc = Services.SqlConnectionPreparer.GetDatabaseConnection(Stage.Raw, Constants.PresentSlice); var dbdst = Services.SqlConnectionPreparer.GetDatabaseConnection(Stage.Complexes, Constants.PresentSlice); var energie = dbsrc.Fetch <EnergiebedarfsdatenBern>(); dbdst.BeginTransaction(); Debug("Energiebedarfsdaten: Using Energebedarfsdaten as foundation for forming the complexes"); foreach (var energiebedarfsdatenBern in energie) { var bc = new BuildingComplex(Guid.NewGuid().ToString(), BuildingComplex.SourceOfEntry.BernData); bc.EGids.Add(energiebedarfsdatenBern.egid); dbdst.Save(bc); } dbdst.CompleteTransaction(); Debug("Energiebedarfsdaten: Saved every building from Energiebedarfsdaten as first complexes"); dbdst.CloseSharedConnection(); }
// ReSharper disable once FunctionComplexityOverflow private void WriteOneLine([NotNull] ExcelWorksheet ws, int row, [NotNull] Dictionary <Columns, int> columnNumbers, [NotNull] House house, //[ItemNotNull] [NotNull] List<GwrData> gwr, [ItemNotNull][NotNull] List <EnergiebedarfsdatenBern> kanton, [ItemNotNull][NotNull] List <MonthlyElectricityUsePerStandort> complexEnergy, [NotNull] BuildingComplex mycomplex, //[NotNull] List<Household> households, [NotNull][ItemNotNull] List <SonnenDach> sonnendachEntries ) { ws.Cells[row, columnNumbers[Columns.ComplexName]].Value = house.ComplexName; ws.Cells[row, columnNumbers[Columns.Adressen]].Value = mycomplex.AdressesAsJson; ws.Cells[row, columnNumbers[Columns.EGids]].Value = CleanJson(mycomplex.EGIDsAsJson); ws.Cells[row, columnNumbers[Columns.LocalnetISNIds]].Value = CleanJson(mycomplex.GebäudeObjectIDsAsJson); /*var gwrs = gwr.Where(x => {Debug.Assert(x.EidgGebaeudeidentifikator_EGID != null, "x.EidgGebaeudeidentifikator_EGID != null"); * return mycomplex.EGids.Contains((long)x.EidgGebaeudeidentifikator_EGID); * }).ToList();*/ var ebbes = kanton.Where(x => mycomplex.EGids.Contains(x.egid)).ToList(); ws.Cells[row, columnNumbers[Columns.EBBE_calc_ehzww]].Value = ebbes.Sum(x => x.calc_ehzww); ws.Cells[row, columnNumbers[Columns.Energiebezugsfläche]].Value = ebbes.Sum(x => x.upd_ebf); //energieträger aus ebbe //var heizträgerlst = ebbes.Select(x => x.upd_genhz).ToList(); //ws.Cells[row, columnNumbers[Columns.EBHZ_GZ]].Value = ebbes.Where(x=> x.upd_genhz == 7203).Sum(x => x.calc_ehz); //ws.Cells[row, columnNumbers[Columns.EBWW_GZ]].Value = ebbes.Where(x => x.upd_genhz == 7203).Sum(x => x.calc_ehz); //ws.Cells[row, columnNumbers[Columns.EBHZWW]].Value = ebbes.Where(x => x.upd_genhz == 7203).Sum(x => x.calc_ehz); //warmwasser aus Ebbe //ws.Cells[row, columnNumbers[Columns.EBWW_GZ]].Value = ebbes.Where(x => x.upd_genww == 7203).Sum(x => x.calc_eww); // ws.Cells[row, columnNumbers[Columns.Energiebezugsfläche]].Value = ebbes.Sum(x=> x) var monthlies = complexEnergy.Where(x => mycomplex.CleanedStandorte.Contains(x.CleanedStandort)).ToList(); ws.Cells[row, columnNumbers[Columns.Localnet_Gas]].Value = monthlies.Sum(x => x.YearlyGasUse); ws.Cells[row, columnNumbers[Columns.Localnet_Wärme]].Value = monthlies.Sum(x => x.YearlyFernwaermeUse); var sd = sonnendachEntries.Where(x => mycomplex.EGids.Contains(x.gwr_egid)).ToList(); double sum = sd.Sum(x => x.bedarf_heizung + x.bedarf_warmwasser); ws.Cells[row, columnNumbers[Columns.BFH_SonnendachHeizung]].Value = sum; }
private bool FindManualMerges([NotNull] BuildingComplex complex1, [NotNull] BuildingComplex complex2, [NotNull][ItemNotNull] List <ComplexesToMerge> manualMerges, [NotNull][ItemNotNull] HashSet <string> manualMergeHash) { if (!manualMergeHash.Contains(complex1.ComplexName)) { return(false); } foreach (ComplexesToMerge merge in manualMerges) { if (merge.ComplexName1 == complex1.ComplexName && merge.ComplexName2 == complex2.ComplexName) { merge.IsProcessed = true; return(true); } if (merge.ComplexName1 == complex2.ComplexName && merge.ComplexName2 == complex1.ComplexName) { merge.IsProcessed = true; return(true); } } return(false); }
// ReSharper disable once FunctionComplexityOverflow private static void WriteOneLine([NotNull] ExcelWorksheet ws, int row, [NotNull] Dictionary <Column, int> columnNumbers, [NotNull] House house, [ItemNotNull][NotNull] List <GwrData> gwr, [ItemNotNull][NotNull] List <EnergiebedarfsdatenBern> kanton, [ItemNotNull][NotNull] List <MonthlyElectricityUsePerStandort> complexEnergy, [NotNull] BuildingComplex mycomplex, [NotNull] HeatingSystemEntry heatingSystem, [NotNull][ItemNotNull] List <Occupant> occupants, [NotNull][ItemNotNull] List <BusinessEntry> businessEntries, [CanBeNull] PvSystemEntry pvsystem, [NotNull][ItemNotNull] List <Household> households, [NotNull][ItemNotNull] List <CarDistanceEntry> carDistances, [NotNull] HouseComponentRepository hcr) { ws.Cells[row, columnNumbers[Column.ComplexName]].Value = house.ComplexName; ws.Cells[row, columnNumbers[Column.Adressen]].Value = mycomplex.AdressesAsJson; ws.Cells[row, columnNumbers[Column.EGids]].Value = CleanJson(mycomplex.EGIDsAsJson); ws.Cells[row, columnNumbers[Column.LocalnetISNIds]].Value = CleanJson(mycomplex.GebäudeObjectIDsAsJson); ws.Cells[row, columnNumbers[Column.GeoKoordinaten]].Value = CleanJson(mycomplex.GeoCoordsAsJson); var gwrs = gwr.Where(x => { if (x.EidgGebaeudeidentifikator_EGID == null) { throw new FlaException("x.EidgGebaeudeidentifikator_EGID != null"); } return(mycomplex.EGids.Contains((long)x.EidgGebaeudeidentifikator_EGID)); }).ToList(); ws.Cells[row, columnNumbers[Column.WG_GWR_GebäudeAnzahl]].Value = gwrs.Count; var ebbes = kanton.Where(x => mycomplex.EGids.Contains(x.egid)).ToList(); ws.Cells[row, columnNumbers[Column.WG_GEAK_Anzahl]].Value = ebbes.Sum(x => x.has_geak); ws.Cells[row, columnNumbers[Column.EBBE_GebäudeTyp]].Value = CollapseList(ebbes.Select(x => x.upd_gtyp)); ws.Cells[row, columnNumbers[Column.EBBE_GebäudeTyp]].Value = ws.Cells[row, columnNumbers[Column.GWR_WG]].Value = gwrs.Sum(x => x.AnzahlWohnungen_GANZWHG); ws.Cells[row, columnNumbers[Column.EBBE_GArea]].Value = ebbes.Sum(x => x.garea); ws.Cells[row, columnNumbers[Column.EBBE_EBF_HZ_Updated]].Value = ebbes.Sum(x => x.upd_ebf); ws.Cells[row, columnNumbers[Column.EBBE_calc_ehzww]].Value = ebbes.Sum(x => x.calc_ehzww); ws.Cells[row, columnNumbers[Column.EBBE_calc_ehz]].Value = ebbes.Sum(x => x.calc_ehz); ws.Cells[row, columnNumbers[Column.EBBE_calc_eww]].Value = ebbes.Sum(x => x.calc_eww); //energieträger aus ebbe var heizträgerlst = ebbes.Select(x => x.upd_genhz).ToList(); long heizträger = 0; if (heizträgerlst.Count > 0) { heizträger = heizträgerlst[0]; } switch (heizträger) { case 0: break; case 7200: break; case 7201: ws.Cells[row, columnNumbers[Column.EBHZ_OL]].Value = ebbes.Sum(x => x.calc_ehz); break; case 7202: ws.Cells[row, columnNumbers[Column.EBHZ_KO]].Value = ebbes.Sum(x => x.calc_ehz); break; case 7203: ws.Cells[row, columnNumbers[Column.EBHZ_GZ]].Value = ebbes.Sum(x => x.calc_ehz); break; case 7204: ws.Cells[row, columnNumbers[Column.EBHZ_EL]].Value = ebbes.Sum(x => x.calc_ehz); break; case 7205: ws.Cells[row, columnNumbers[Column.EBHZ_HO]].Value = ebbes.Sum(x => x.calc_ehz); break; case 7206: ws.Cells[row, columnNumbers[Column.EBHZ_WP]].Value = ebbes.Sum(x => x.calc_ehz); break; case 7207: ws.Cells[row, columnNumbers[Column.EBHZ_SO]].Value = ebbes.Sum(x => x.calc_ehz); break; case 7208: ws.Cells[row, columnNumbers[Column.EBHZ_FW]].Value = ebbes.Sum(x => x.calc_ehz); break; case 7209: ws.Cells[row, columnNumbers[Column.EBHZ_A]].Value = ebbes.Sum(x => x.calc_ehz); break; default: throw new Exception("Unknown Heizungsträger: " + heizträger); } //warmwasser aus Ebbe var wwträgerlst = ebbes.Select(x => x.upd_genww).ToList(); long wwträger = 0; if (wwträgerlst.Count > 0) { wwträger = wwträgerlst[0]; } switch (wwträger) { case 0: break; case 7200: break; case 7201: ws.Cells[row, columnNumbers[Column.EBWW_OL]].Value = ebbes.Sum(x => x.calc_eww); break; case 7202: ws.Cells[row, columnNumbers[Column.EBWW_KO]].Value = ebbes.Sum(x => x.calc_eww); break; case 7203: ws.Cells[row, columnNumbers[Column.EBWW_GZ]].Value = ebbes.Sum(x => x.calc_eww); break; case 7204: ws.Cells[row, columnNumbers[Column.EBWW_EL]].Value = ebbes.Sum(x => x.calc_eww); break; case 7205: ws.Cells[row, columnNumbers[Column.EBWW_HO]].Value = ebbes.Sum(x => x.calc_eww); break; case 7206: ws.Cells[row, columnNumbers[Column.EBWW_WP]].Value = ebbes.Sum(x => x.calc_eww); break; case 7207: ws.Cells[row, columnNumbers[Column.EBWW_SO]].Value = ebbes.Sum(x => x.calc_eww); break; case 7208: ws.Cells[row, columnNumbers[Column.EBWW_FW]].Value = ebbes.Sum(x => x.calc_eww); break; case 7209: ws.Cells[row, columnNumbers[Column.EBWW_A]].Value = ebbes.Sum(x => x.calc_eww); break; default: throw new Exception("Unknown Heizungsträger: " + heizträger); } ws.Cells[row, columnNumbers[Column.EBBE_EnergieträgerHz]].Value = CollapseList(ebbes.Select(x => x.upd_genhz.ToString())); ws.Cells[row, columnNumbers[Column.EBBE_EnergieträgerWW]].Value = CollapseList(ebbes.Select(x => x.upd_genww.ToString())); //entries from localnet var monthlies = complexEnergy.Where(x => mycomplex.CleanedStandorte.Contains(x.CleanedStandort)).ToList(); ws.Cells[row, columnNumbers[Column.Localnet_Strom]].Value = monthlies.Sum(x => x.YearlyElectricityUseNetz); ws.Cells[row, columnNumbers[Column.Localnet_Gas]].Value = monthlies.Sum(x => x.YearlyGasUse); ws.Cells[row, columnNumbers[Column.Localnet_Wärme]].Value = monthlies.Sum(x => x.YearlyFernwaermeUse); ws.Cells[row, columnNumbers[Column.BFH_EnergieträgerHeizung]].Value = heatingSystem.SynthesizedHeatingSystemType.ToString(); ws.Cells[row, columnNumbers[Column.BFH_EnergieBedarfHeizung]].Value = heatingSystem.EffectiveEnergyDemand; ws.Cells[row, columnNumbers[Column.BFH_Einwohner]].Value = occupants.Count; var businessTypes = businessEntries.Select(x => x.BusinessType.ToString()).Distinct().ToList(); var businessTypeStr = string.Join(",", businessTypes); ws.Cells[row, columnNumbers[Column.BFH_Geschäfte]].Value = businessTypeStr; if (pvsystem != null) { ws.Cells[row, columnNumbers[Column.BFH_PVSystemGrösseInKWh]].Value = pvsystem.EffectiveEnergyDemand; } ws.Cells[row, columnNumbers[Column.BFH_Geschäfte]].Value = businessTypeStr; ws.Cells[row, columnNumbers[Column.BFH_StromHaushalteLow]].Value = households.Sum(x => x.LocalnetLowVoltageYearlyTotalElectricityUse); ws.Cells[row, columnNumbers[Column.BFH_StromHaushalteLow]].Value = households.Sum(x => x.LocalnetHighVoltageYearlyTotalElectricityUse); ws.Cells[row, columnNumbers[Column.BFH_StromGewerbeLow]].Value = businessEntries.Sum(x => x.LocalnetLowVoltageYearlyTotalElectricityUse); ws.Cells[row, columnNumbers[Column.BFH_StromGewerbeHigh]].Value = businessEntries.Sum(x => x.LocalnetHighVoltageYearlyTotalElectricityUse); ws.Cells[row, columnNumbers[Column.FeuerungsstättenArt]].Value = heatingSystem.FeuerungsstättenType; ws.Cells[row, columnNumbers[Column.FeuerungsstättenKesselLeistung]].Value = heatingSystem.FeuerungsstättenPower; if (heatingSystem.FeuerungsstättenType == "Gas") { ws.Cells[row, columnNumbers[Column.FeuerungsstättenJahresEnergie1500hGas]].Value = heatingSystem.EstimatedMinimumEnergyFromFeuerungsStätten; ws.Cells[row, columnNumbers[Column.FeuerungsstättenJahresEnergie2200hGas]].Value = heatingSystem.EstimatedMaximumEnergyFromFeuerungsStätten; } if (heatingSystem.FeuerungsstättenType == "Oel") { ws.Cells[row, columnNumbers[Column.FeuerungsstättenJahresEnergie1500hOel]].Value = heatingSystem.EstimatedMinimumEnergyFromFeuerungsStätten; ws.Cells[row, columnNumbers[Column.FeuerungsstättenJahresEnergie2200hOel]].Value = heatingSystem.EstimatedMaximumEnergyFromFeuerungsStätten; } ws.Cells[row, columnNumbers[Column.BFH_AnzahlFahrzeuge]].Value = carDistances.Count; ws.Cells[row, columnNumbers[Column.BFH_SummeAutoPendlerdistanz]].Value = carDistances.Sum(x => x.CommutingDistance) * 365; ws.Cells[row, columnNumbers[Column.BFH_SummeAutoGesamtdistanz]].Value = carDistances.Sum(x => x.TotalDistance) * 365; ws.Cells[row, columnNumbers[Column.BFH_SonnendachPotential]].Value = heatingSystem.FeuerungsstättenPower; ws.Cells[row, columnNumbers[Column.TrafoKreis]].Value = string.Join(";", house.Hausanschluss.Select(x => x.Trafokreis)); var houseComponents = house.CollectHouseComponents(hcr); Dictionary <HouseComponentType, double> houseComponentSums = new Dictionary <HouseComponentType, double>(); foreach (var hc in houseComponents) { if (!houseComponentSums.ContainsKey(hc.HouseComponentType)) { houseComponentSums.Add(hc.HouseComponentType, 0); } houseComponentSums[hc.HouseComponentType] += hc.EffectiveEnergyDemand; } foreach (var entry in houseComponentSums) { Column mycol = GetColumn(entry.Key); ws.Cells[row, columnNumbers[mycol]].Value = entry.Value; } }
private void P03_AddGwrAdressen() { Debug("GWRAdressen:adding adressen from gwr"); var dbraw = Services.SqlConnectionPreparer.GetDatabaseConnection(Stage.Raw, Constants.PresentSlice); var dbcomplex = Services.SqlConnectionPreparer.GetDatabaseConnection(Stage.Complexes, Constants.PresentSlice); var complexes = dbcomplex.Fetch <BuildingComplex>(); var gwrAdresses = dbraw.Fetch <GwrAdresse>(); Debug("GWRAdressen:Found a total of " + gwrAdresses.Count); dbcomplex.BeginTransaction(); var addedNewComplex = 0; var addedSingleComplex = 0; var addedMultipleComplexes = 0; var coordsAddded = 0; foreach (var adr in gwrAdresses) { var existingComplexes = complexes.Where(x => x.EGids.Contains(adr.EidgGebaeudeidentifikator_EGID)).ToList(); BuildingComplex bc; if (existingComplexes.Count == 0) { bc = new BuildingComplex(Guid.NewGuid().ToString(), BuildingComplex.SourceOfEntry.GWRData); bc.EGids.Add(adr.EidgGebaeudeidentifikator_EGID); existingComplexes.Add(bc); complexes.Add(bc); addedNewComplex++; } else { bc = existingComplexes[0]; if (existingComplexes.Count == 1) { addedSingleComplex++; } else { addedMultipleComplexes++; } } var addresse = adr.Strassenbezeichnung_DSTR + " " + adr.EingangsnummerGebaeude_DEINR; var cleanAdresse = Helpers.CleanAdressString(addresse); // ReSharper disable twice PossibleInvalidOperationException if (adr.XKoordinate_DKODX != null) { bc.Coords.Add(new GeoCoord(adr.XKoordinate_DKODX.Value, adr.YKoordinate_DKODY.Value)); coordsAddded++; } if (!bc.CleanedAdresses.Contains(cleanAdresse)) { bc.AddAdress(addresse); } dbcomplex.Save(bc); } Debug("GWRAdressen:Added new complexes: " + addedNewComplex); Debug("GWRAdressen:Added Addresses to single complexes: " + addedSingleComplex); Debug("GWRAdressen:Added Addresses to multiple complexes: " + addedMultipleComplexes); Debug("GWRAdressen:Coords added to:" + coordsAddded); var totalComplexes = complexes.Count; var complexesWithCoord = complexes.Count(x => x.Coords.Count > 0); Debug("GWRAdressen: " + complexesWithCoord + " / " + totalComplexes + " have an coordinate"); dbcomplex.CompleteTransaction(); }
private void P02_AddFeuerungsstaettenAdressDataAsComplexes() { Debug("Feuerungsstätten:Starting to add adressen from feurungsstätten"); var dbComplexes = Services.SqlConnectionPreparer.GetDatabaseConnection(Stage.Complexes, Constants.PresentSlice); var dbRaw = Services.SqlConnectionPreparer.GetDatabaseConnection(Stage.Raw, Constants.PresentSlice); var complexes = dbComplexes.Fetch <BuildingComplex>(); var feuerungsStaetten = dbRaw.Fetch <FeuerungsStaette>(); Debug("Feuerungsstätten:Found " + feuerungsStaetten.Count); var vegid = -1000; var missingCount = 1; foreach (var staette in feuerungsStaetten) { if (staette.EGID == -99) { staette.EGID = vegid--; Debug("Feuringsstätte missing EGID #" + missingCount); missingCount++; } } Debug("Feuerungsstätten: Total missing Count: " + missingCount); dbComplexes.BeginTransaction(); Debug("Feuerungsstätten: Trying to add the adresses from the feurungsstätten to the building complexes"); var newComplexesCreated = 0; var assignedToExactlyOneComplex = 0; var multiplePossibleComplexes = 0; foreach (var fs in feuerungsStaetten) { if (fs.EGID == null) { throw new FlaException("fs.EGID != null"); } var existingComplexes = complexes.Where(x => x.EGids.Contains(fs.EGID.Value)).ToList(); BuildingComplex bc; if (existingComplexes.Count == 0) { newComplexesCreated++; bc = new BuildingComplex(Guid.NewGuid().ToString(), BuildingComplex.SourceOfEntry.Feuerungsstaetten); bc.EGids.Add(fs.EGID.Value); existingComplexes.Add(bc); } else { //just use the first complex that is found to assign the adress if (existingComplexes.Count == 1) { assignedToExactlyOneComplex++; } else { multiplePossibleComplexes++; } bc = existingComplexes[0]; } var addresse = fs.Strasse + " " + fs.Hausnummer; bc.AddAdress(addresse); dbComplexes.Save(bc); } Debug("Feuerungsstätten: Newly created Complexes: " + newComplexesCreated); Debug("Feuerungsstätten: Assigned to exactly one complex: " + assignedToExactlyOneComplex); Debug("Feuerungsstätten: Assigned to exactly one complex out of multiple possible ones: " + multiplePossibleComplexes); dbComplexes.CompleteTransaction(); dbComplexes.CloseSharedConnection(); Debug("Feuerungsstätten:finished adding adressen from feurungsstätten"); }
private static void PerformActualComplexMerge([NotNull] BuildingComplex c2, [NotNull] BuildingComplex c1, [NotNull] Database dbComplex) { foreach (var c2EGid in c2.EGids) { if (!c1.EGids.Contains(c2EGid)) { c1.EGids.Add(c2EGid); } } foreach (var c2Adress in c2.Adresses) { if (!c1.Adresses.Contains(c2Adress)) { c1.AddAdress(c2Adress); } } foreach (var c2Coord in c2.Coords) { if (!c1.Coords.Contains(c2Coord)) { c1.AddCoord(c2Coord); } } foreach (var c2Coord in c2.LocalnetCoords) { if (!c1.LocalnetCoords.Contains(c2Coord)) { c1.AddLocalCoord(c2Coord); } } foreach (var c2ID in c2.GebäudeObjectIDs) { if (!c1.GebäudeObjectIDs.Contains(c2ID)) { c1.AddGebäudeID(c2ID); } } foreach (var c2ID in c2.ObjektStandorte) { if (!c1.ObjektStandorte.Contains(c2ID)) { c1.ObjektStandorte.Add(c2ID); } } foreach (var c2Tk in c2.TrafoKreise) { if (!c1.TrafoKreise.Contains(c2Tk)) { c1.TrafoKreise.Add(c2Tk); } } dbComplex.Save(c1); dbComplex.Delete(c2); }