From efa52c117c352866594e181274979d52c097b41d Mon Sep 17 00:00:00 2001 From: HuskyTeufel Date: Mon, 20 Sep 2021 19:31:06 +0200 Subject: [PATCH] =?UTF-8?q?Daten=20werden=20grunds=C3=A4tzlich=20=C3=BCber?= =?UTF-8?q?tragen=20in=20neuer=20DB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WIP InlinerSanierung --- DaSaSo.DatabaseConverter/ConvertXML.cs | 322 ++++++++++++++++++ .../DaSaSo.DatabaseConverter.csproj | 11 + DaSaSo.DatabaseConverter/Program.cs | 116 ++++--- DaSaSo.sln | 2 +- 4 files changed, 404 insertions(+), 47 deletions(-) create mode 100644 DaSaSo.DatabaseConverter/ConvertXML.cs diff --git a/DaSaSo.DatabaseConverter/ConvertXML.cs b/DaSaSo.DatabaseConverter/ConvertXML.cs new file mode 100644 index 0000000..a7f7a3b --- /dev/null +++ b/DaSaSo.DatabaseConverter/ConvertXML.cs @@ -0,0 +1,322 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml; + +namespace DaSaSo.DatabaseConverter +{ + class ConvertXML + { + List auftraggeberList = new List(); + Queue bearbeiteteAuftraggeber = new Queue(); + List projekte = new List(); + XmlReader m_reader; + public int counter = 0; + + public List GetProjekts => projekte; + + public void parseXML() + { + XmlReaderSettings setting = new XmlReaderSettings(); + setting.Async = false; + HashSet hashtable = new HashSet(); + + using (m_reader = XmlReader.Create("./TeufelDB.xaml", setting)) + { + while (m_reader.Read()) + { + if (m_reader.IsStartElement("kc:AuftraggeberList")) + { + List importFields = new List(); + bool flag = true; + while (m_reader.Read()) + { + if (flag) + { + flag = HandleAuftraggeber(importFields); + } + if (m_reader.Name == "kc:AuftraggeberList" && m_reader.NodeType == XmlNodeType.EndElement) + { + break; + } + } + + } + if(m_reader.IsStartElement("Projekt")) + { + counter++; + bool flag = true; + List inspektionsobjekts = new List(); + Projekt projekt = new Projekt(); + if (m_reader.HasAttributes) + { + while (m_reader.MoveToNextAttribute()) + { + //Console.WriteLine("/// {0} = {1}", m_reader.Name, m_reader.Value); + switch (m_reader.Name) + { + case "Auftraggeber": + string auftr = m_reader.Value.Trim('{').Trim('}'); + if (auftr.Equals("x:Null")) continue; + auftr = auftr.Substring(12); + //Console.WriteLine(auftr); + projekt.Auftraggeber = auftraggeberList.Find(x => x.interneID.Equals(auftr)); + break; + case "Nummer": projekt.ProjektNummer = m_reader.Value; break; + case "Ort": projekt.Ort = m_reader.Value; break; + case "SanierungsIDPrefix": projekt.Prefix = m_reader.Value; break; + case "SanierungsIDSuffix": projekt.Suffix = m_reader.Value; break; + } + } + } + while (m_reader.Read()) + { + if (flag) + { + flag = HandleProjekt(projekt,inspektionsobjekts); + + } + if (m_reader.Name == "Projekt" && m_reader.NodeType == XmlNodeType.EndElement) + break; + //Debugger.Break(); + } + projekt.inspektionsobjekte = inspektionsobjekts; + projekte.Add(projekt); + + } + } + } + RecreateAuftraggeber(); + //Debugger.Break(); + } + + private void RecreateAuftraggeber() + { + while(bearbeiteteAuftraggeber.Count > 1) + { + Auftraggeber _auftraggeber = bearbeiteteAuftraggeber.Dequeue(); + if(_auftraggeber.Ansprechpartner == null && _auftraggeber.Name == null && _auftraggeber.Ort == null && _auftraggeber.Strasse == null) + { + Debugger.Break(); + } + + Auftraggeber auftraggeber = auftraggeberList.Find(x => x.interneID.Equals(_auftraggeber.interneID)); + if (auftraggeber == null) + { + auftraggeberList.Add(_auftraggeber); + continue; + } + if (auftraggeber.Ansprechpartner != null || auftraggeber.Name != null || auftraggeber.Ort != null || auftraggeber.Strasse != null) + continue; + auftraggeber.Ansprechpartner = _auftraggeber.Ansprechpartner; + auftraggeber.Name = _auftraggeber.Name; + auftraggeber.Ort = _auftraggeber.Ort; + auftraggeber.Strasse = _auftraggeber.Strasse; + } + } + + private void HandleInspektionsobjekt(List inspektionsobjekts) + { + Inspektionsobjekt insp = new Inspektionsobjekt(); + if (m_reader.HasAttributes) + { + while (m_reader.MoveToNextAttribute()) + { + + switch (m_reader.Name) + { + case "x:Name": insp.interneID = m_reader.Value; break; + case "Bemerkung": insp.Bemerkung = m_reader.Value; break; + case "VonPunkt": insp.VonPunkt = m_reader.Value; break; + case "BisPunkt": insp.BisPunkt = m_reader.Value; break; + case "Objektbezeichnung": insp.Objektbezeichnung = m_reader.Value; break; + case "StrasseName": insp.StrasseName = m_reader.Value; break; + case "RohrMaterial": insp.RohrMaterial = m_reader.Value; break; + case "Projektnummer": insp.Projektnummer = m_reader.Value; break; + case "OrtName": insp.OrtName = m_reader.Value; break; + case "Kanalrohrweite": insp.Kanalrohrweite = Convert.ToInt32(m_reader.Value); break; + case "Hausnummer": insp.Hausnummer = m_reader.Value; break; + case "Haltungslaenge": insp.Haltungslaenge = Convert.ToDecimal(m_reader.Value.Replace('.', ',')); break; + case "GeschlossenesEnde": insp.GeschlossenesEnde = Convert.ToBoolean(m_reader.Value); break; + } + } + inspektionsobjekts.Add(insp); + } + } + + private bool HandleProjekt(Projekt projekt, List inspektionsobjekts) + { + bool result = true; + if (m_reader.IsStartElement("Auftraggeber")) + { + // Get Auftraggeber + if(m_reader.HasAttributes) + { + Auftraggeber auftraggeber = new Auftraggeber(); + while(m_reader.MoveToNextAttribute()) + { + switch(m_reader.Name) + { + case "x:Name": auftraggeber.interneID = m_reader.Value; break; + case "Ansprechpartner": auftraggeber.Ansprechpartner = m_reader.Value; break; + case "Name": auftraggeber.Name = m_reader.Value; break; + case "Ort": auftraggeber.Ort = m_reader.Value; break; + case "Strasse": auftraggeber.Strasse = m_reader.Value; break; + } + + //Console.WriteLine("{0} = {1}", m_reader.Name, m_reader.Value); + } + if (auftraggeber.interneID == null) + { + auftraggeberList.Add(auftraggeber); + } + else + { + bearbeiteteAuftraggeber.Enqueue(auftraggeber); + } + projekt.Auftraggeber = auftraggeber; + } + + } + if (m_reader.IsStartElement("Inspektionsobjekt")) + { + HandleInspektionsobjekt(inspektionsobjekts); + } + if (m_reader.IsStartElement("InlinerSanierung")) + { + HandleInlinerSanierung(inspektionsobjekts); + + } + //Console.WriteLine(m_reader.Name); + + return result; + } + + private void HandleInlinerSanierung(List inspektionsobjekts) + { + Inspektionsobjekt objekt = null; + InlinerSanierung san = new InlinerSanierung(); + if (m_reader.HasAttributes) + { + while (m_reader.MoveToNextAttribute()) + { + //Console.WriteLine("{0} = {1}", m_reader.Name, m_reader.Value); + string interneObjektbezeichnung; + switch(m_reader.Name) + { + case "Inspektionsobjekt": + interneObjektbezeichnung = m_reader.Value.Substring(13).Trim('}'); + objekt = inspektionsobjekts.Find(x => x.interneID != null && x.interneID.Equals(interneObjektbezeichnung)); + break; + case "Wetter": san.Wetter = m_reader.Value; break; + case "WasserhaltungEingerichtet": san.Wasserhaltung = Convert.ToBoolean(m_reader.Value); break; + case "VorbereitetRoboter": san.VorbereitetRoborter = Convert.ToBoolean(m_reader.Value); break; + case "VorbereitetMechanisch": san.VorbereitetMechanisch = Convert.ToBoolean(m_reader.Value); break; + case "STVOAbsicherung": san.SVTO = Convert.ToBoolean(m_reader.Value); break; + case "Preliner": san.Preliner = Convert.ToBoolean(m_reader.Value); break; + case "HDReinigung": san.HDReinigung = Convert.ToBoolean(m_reader.Value); break; + case "GenehmigungVorhanden": san.GenehmigungVorhanden = Convert.ToBoolean(m_reader.Value); break; + case "Fertig": san.Fertig = Convert.ToBoolean(m_reader.Value); break; + case "GeschlosseneEnde": san.GeschlosseneEnde = Convert.ToBoolean(m_reader.Value); break; + case "TempAusen": san.TempAusssen = Convert.ToInt32(m_reader.Value); break; + case "TempKanal": san.TempKanal = Convert.ToInt32(m_reader.Value); break; + case "LagerungTemperatur": san.LagerungsTemperatur = m_reader.Value; break; + case "InversionsDruck": san.InversionsDruck = Convert.ToDecimal(m_reader.Value.Replace('.', ',')); break; + case "EndeAushaertung": san.EndeAushaertung = Convert.ToDateTime(m_reader.Value); break; + case "EinbauTemperatur": san.EinbauTemperatur = m_reader.Value; break; + case "Besatzung": san.Besatzung = m_reader.Value; break; + case "Datum": san.Datum = Convert.ToDateTime(m_reader.Value); break; + } + + } + objekt.InlinerSanierung = san; + } + + //Debugger.Break(); + } + + private bool HandleAuftraggeber(List importFields) + { + bool result = true; + if (m_reader.IsStartElement("x:Reference")) + { + m_reader.Read(); + auftraggeberList.Add(new Auftraggeber() + { + interneID = m_reader.Value + }); + //string text = m_reader.Value; + //Console.WriteLine(text); + } + //Debugger.Break(); + return result; + } + } + + internal class Projekt + { + public string ProjektNummer { get; set; } + public string Ort { get; set; } + public string Prefix { get; set; } + public string Suffix { get; set; } + public Auftraggeber Auftraggeber { get; set; } + public List inspektionsobjekte = new List(); + public override string ToString() + { + return ProjektNummer + " " + Ort; + } + } + + internal class Inspektionsobjekt + { + public string interneID { get; set; } + public string Bemerkung { get; set; } + public string Objektbezeichnung { get; set; } + public string VonPunkt { get; set; } + public string BisPunkt { get; set; } + public string StrasseName { get; set; } + public string RohrMaterial { get; set; } + public string Projektnummer { get; set; } + public string OrtName { get; set; } + public int Kanalrohrweite { get; set; } + public string Hausnummer { get; set; } + public decimal Haltungslaenge { get; set; } + public bool GeschlossenesEnde { get; set; } + public InlinerSanierung InlinerSanierung {get; set;} + } + + public class InlinerSanierung + { + public string Besatzung { get; set; } + public DateTime Datum { get; set; } + public string EinbauTemperatur { get; set; } + public DateTime EndeAushaertung { get; set; } + public bool GeschlosseneEnde { get; set; } + public bool Fertig { get; set; } + public bool GenehmigungVorhanden { get; set; } + public bool HDReinigung { get; set; } + public decimal InversionsDruck { get; set; } + public string LagerungsTemperatur { get; set; } + public bool SVTO { get; set; } + public bool VorbereitetMechanisch { get; set; } + public int TempAusssen { get; set; } + public int TempKanal { get; set; } + public bool VorbereitetRoborter { get; set; } + public bool Preliner { get; set; } + public bool Wasserhaltung { get; set; } + public string Wetter { get; set; } + } + + internal class Auftraggeber + { + public string interneID { get; set; } + public string Ansprechpartner { get; set; } + public string Name { get; set; } + public string Ort { get; set; } + public string Strasse { get; set; } + } +} diff --git a/DaSaSo.DatabaseConverter/DaSaSo.DatabaseConverter.csproj b/DaSaSo.DatabaseConverter/DaSaSo.DatabaseConverter.csproj index a83b8b3..b9e3267 100644 --- a/DaSaSo.DatabaseConverter/DaSaSo.DatabaseConverter.csproj +++ b/DaSaSo.DatabaseConverter/DaSaSo.DatabaseConverter.csproj @@ -6,6 +6,17 @@ enable + + + + + + + + ..\..\..\..\..\..\Program Files\dotnet\packs\Microsoft.WindowsDesktop.App.Ref\6.0.0-preview.7.21378.9\ref\net6.0\PresentationFramework.dll + + + Always diff --git a/DaSaSo.DatabaseConverter/Program.cs b/DaSaSo.DatabaseConverter/Program.cs index eb31a8c..496b273 100644 --- a/DaSaSo.DatabaseConverter/Program.cs +++ b/DaSaSo.DatabaseConverter/Program.cs @@ -3,59 +3,83 @@ using System.Collections; using System.Diagnostics; using System.Xml; +using System.Windows.Markup; +using DaSaSo.DatabaseConverter; +using DaSaSo.Domain.Services; +using DaSaSo.Domain.Model; +using DaSaSo.EntityFramework.Services; +using DaSaSo.EntityFramework; Console.WriteLine("Hello, World!"); -await ReadXML(); +ConvertXML convertXML = new ConvertXML(); +convertXML.parseXML(); +WriteToNewDB(convertXML.GetProjekts); +Console.WriteLine("Fertig"); Console.ReadLine(); - -static async Task ReadXML() +static void WriteToNewDB(List alteDB) { - - XmlReaderSettings setting = new XmlReaderSettings(); - setting.Async = true; - HashSet hashtable = new HashSet(); - using (XmlReader m_reader = XmlReader.Create("./TeufelDB.xaml",setting)) + IDataService dataService = new GenericDataService(new DaSaSoDbContextFactory("Host = localhost; Database = dasaso; Username = kansan; Password = kansan")); + foreach(Projekt projekt in alteDB) { - while (await m_reader.ReadAsync()) + Client newClient = new Client(); + /*{ + Firstname = projekt.Auftraggeber.Name, + Street = projekt.Auftraggeber.Strasse, + Country = projekt.Auftraggeber.Ort + };*/ + if(projekt.Auftraggeber == null) { - if(m_reader.IsStartElement()) - { - if (m_reader.Name.Equals("Auftraggeber")) Debugger.Break(); - hashtable.Add(m_reader.Name); - if (m_reader.IsEmptyElement) - { - Console.WriteLine("<{0}/>", m_reader.Name); - } - else - { - - Console.Write("<{0}> ", m_reader.Name); - m_reader.Read(); - if (m_reader.IsStartElement()) - { - Console.Write("\r\n<{0}>", m_reader.Name); - } - } - if (m_reader.HasAttributes) - { - Console.WriteLine("Attributes of {0}", m_reader.Name); - while (m_reader.MoveToNextAttribute()) - { - Console.WriteLine(" {0} = {1}", m_reader.Name, m_reader.Value); - } - m_reader.MoveToElement(); - } - - } - else - { - Console.WriteLine("Ende"); - } - - + newClient.Firstname = ""; + newClient.Street = ""; + newClient.Country =""; } + else + { + newClient.Firstname = projekt.Auftraggeber.Name; + newClient.Street = projekt.Auftraggeber.Strasse; + newClient.Country = projekt.Auftraggeber.Ort; + } + Project project = new Project(); + project.Client = newClient; + project.Name = projekt.Ort; + + List buildingsites = new List(); + + Buildingsite buildingsite = new Buildingsite(); + buildingsite.ContactPerson = projekt.Auftraggeber != null? projekt.Auftraggeber.Ansprechpartner : ""; + buildingsite.BuildingSiteNumber = projekt.ProjektNummer; + buildingsite.Project = project; + + List Sewers = new List(); + foreach(Inspektionsobjekt inspektionsobjekt in projekt.inspektionsobjekte) + { + SewerObject sewerObject = new SewerObject(); + sewerObject.BuildingSite = buildingsite; + + sewerObject.DN = inspektionsobjekt.Kanalrohrweite; + sewerObject.ObjektName = inspektionsobjekt.Objektbezeichnung; + sewerObject.Material = inspektionsobjekt.RohrMaterial; + sewerObject.PunktOben = new SewerPoint() + { + Objektnummer = inspektionsobjekt.VonPunkt + }; + sewerObject.PunktObenType = DaSaSo.Domain.Enums.EPointType.Schacht; + sewerObject.PunktUnten = new SewerPoint() + { + Objektnummer = inspektionsobjekt.BisPunkt + }; + sewerObject.PunktUntenType = DaSaSo.Domain.Enums.EPointType.Anschlusspunkt; + sewerObject.StreetName = inspektionsobjekt.StrasseName; + sewerObject.SewerLength = inspektionsobjekt.Haltungslaenge; + Sewers.Add(sewerObject); + } + buildingsite.SewerObjects = Sewers; + buildingsites.Add(buildingsite); + project.BuildingSites = buildingsites; + + dataService.Create(project); } - Debugger.Break(); -} \ No newline at end of file + +} diff --git a/DaSaSo.sln b/DaSaSo.sln index 5d39eab..0315e9d 100644 --- a/DaSaSo.sln +++ b/DaSaSo.sln @@ -15,7 +15,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DaSaSo.ViewModel", "DaSaSo. EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DaSaSo.InMemoryProvider", "DaSaSo.InMemoryProvider\DaSaSo.InMemoryProvider.csproj", "{838B8397-FF4A-4E61-A6A8-B3F8D00D120D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DaSaSo.DatabaseConverter", "DaSaSo.DatabaseConverter\DaSaSo.DatabaseConverter.csproj", "{E0842F1A-E74D-4B84-BD27-3585901B0DE9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DaSaSo.DatabaseConverter", "DaSaSo.DatabaseConverter\DaSaSo.DatabaseConverter.csproj", "{E0842F1A-E74D-4B84-BD27-3585901B0DE9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution