Strassen werden nun richtig in csv geschrieben

This commit is contained in:
2021-08-15 13:52:32 +02:00
parent 538ec3d00b
commit 938e03ad67
6 changed files with 166 additions and 65 deletions

View File

@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using XMLParser.Model;
using XMLParser.Contract;
namespace XMLParser.Functions
{
public abstract class CSVWriterBase : ICSVWriter
{
internal FileStream handle = null;
public abstract void WriteEntry(Dictionary<ECalculatedResult, decimal> calculated, List<KanalObjekt> inspektionenAmTag);
internal void writeToFile(string content)
{
content += Environment.NewLine;
byte[] bytes = Encoding.UTF8.GetBytes(content);
handle.Write(bytes,0,bytes.Length);
handle.Flush();
}
}
}

View File

@@ -11,6 +11,37 @@ namespace XMLParser.Functions
public static Dictionary<ECalculatedResult,decimal> CalculateStreet(List<KanalObjekt> inspektionen) public static Dictionary<ECalculatedResult,decimal> CalculateStreet(List<KanalObjekt> inspektionen)
{ {
Dictionary<ECalculatedResult,decimal> result = new Dictionary<ECalculatedResult, decimal>(); Dictionary<ECalculatedResult,decimal> result = new Dictionary<ECalculatedResult, decimal>();
List<KanalObjekt> Anschlussleitungen = inspektionen.FindAll(x => x.Inspektionsdaten.Anlagentyp.Equals(EAnlagetyp.Anschlussleitung));
List<KanalObjekt> SEs = Anschlussleitungen.FindAll(x => x.Stammdaten.Knoten != null && x.Stammdaten.Knoten.Anschlusspunkt != null && x.Stammdaten.Knoten.Anschlusspunkt.Punktkennung.Equals("SE"));
List<KanalObjekt> SOs = Anschlussleitungen.FindAll(x => x.Stammdaten.Knoten != null && x.Stammdaten.Knoten.Anschlusspunkt != null && !x.Stammdaten.Knoten.Anschlusspunkt.Punktkennung.Equals("SE"));
foreach(KanalObjekt s in SEs) {
Anschlussleitungen.Remove(s);
}
foreach(KanalObjekt s in SOs) {
Anschlussleitungen.Remove(s);
}
SOs.AddRange(Anschlussleitungen);
decimal SEOverlength = 0.0m;
decimal SOOverlength = 0.0m;
SEs.ForEach(x => {
decimal length = x.Inspektionsdaten.OptischeInspektion.Rohrleitung.Inspektionslaenge;
if(length > 5.0m) SEOverlength += length - 5.0m;
});
SOs.ForEach(x => {
decimal length = x.Inspektionsdaten.OptischeInspektion.Rohrleitung.Inspektionslaenge;
if(length > 7.0m) SOOverlength += length - 7.0m;
});
result.Add(ECalculatedResult.STRASSENABLAUFANZAHL,SEs.Count);
result.Add(ECalculatedResult.SONSTIGEANZAHL,SOs.Count);
result.Add(ECalculatedResult.STRASSENABLAUFLAENGEZULAGEMETER,SEOverlength);
result.Add(ECalculatedResult.SONSTIGELAENGEZULAGEMETER,SOOverlength);
decimal HauptkanalLaenge =0.0m; decimal HauptkanalLaenge =0.0m;
List<int> ranges = new List<int>() List<int> ranges = new List<int>()
@@ -52,50 +83,6 @@ namespace XMLParser.Functions
result.Add(ECalculatedResult.GESAMTHAUPTKANAL,HauptkanalLaenge); result.Add(ECalculatedResult.GESAMTHAUPTKANAL,HauptkanalLaenge);
List<KanalObjekt> Anschlussleitungen = inspektionen.FindAll(x => x.Inspektionsdaten.Anlagentyp.Equals(EAnlagetyp.Anschlussleitung));
List<KanalObjekt> SEs = Anschlussleitungen.FindAll(x => x.Stammdaten.Knoten != null && x.Stammdaten.Knoten.Anschlusspunkt != null && x.Stammdaten.Knoten.Anschlusspunkt.Punktkennung.Equals("SE"));
List<KanalObjekt> SOs = Anschlussleitungen.FindAll(x => x.Stammdaten.Knoten != null && x.Stammdaten.Knoten.Anschlusspunkt != null && !x.Stammdaten.Knoten.Anschlusspunkt.Punktkennung.Equals("SE"));
foreach(KanalObjekt s in SEs) {
Anschlussleitungen.Remove(s);
}
foreach(KanalObjekt s in SOs) {
Anschlussleitungen.Remove(s);
}
SOs.AddRange(Anschlussleitungen);
result.Add(ECalculatedResult.STRASSENABLAUFANZAHL,SEs.Count);
result.Add(ECalculatedResult.SONSTIGEANZAHL,SOs.Count);
decimal SEPauschal = 34.00m * SEs.Count;
decimal SOPauschal = 45.00m * SOs.Count;
decimal HauptkanalPreis = 1.60m * HauptkanalLaenge;
result.Add(ECalculatedResult.STRASSENABLAUFUMSATZ,SEPauschal);
result.Add(ECalculatedResult.SONSTIGEUMSATZ,SOPauschal);
result.Add(ECalculatedResult.HAUPTKANALUMSATZ,HauptkanalPreis);
decimal SEOverlength = 0.0m;
decimal SOOverlength = 0.0m;
SEs.ForEach(x => {
decimal length = x.Inspektionsdaten.OptischeInspektion.Rohrleitung.Inspektionslaenge;
if(length > 5.0m) SEOverlength += length - 5.0m;
});
SOs.ForEach(x => {
decimal length = x.Inspektionsdaten.OptischeInspektion.Rohrleitung.Inspektionslaenge;
if(length > 7.0m) SOOverlength += length - 7.0m;
});
decimal LeitungsOverlengthPreis = (SEOverlength + SOOverlength) * 2.4m;
result.Add(ECalculatedResult.STRASSENABLAUFLAENGEZULAGEMETER,SEOverlength);
result.Add(ECalculatedResult.SONSTIGELAENGEZULAGEMETER,SOOverlength);
result.Add(ECalculatedResult.LAENGEZULAGEUMSATZ,LeitungsOverlengthPreis);
result.Add(ECalculatedResult.GESAMTUMSATZ,(LeitungsOverlengthPreis + HauptkanalPreis + SEPauschal + SOPauschal));
return result; return result;
} }
public static Dictionary<ECalculatedResult,decimal> CalculateDay(List<KanalObjekt> inspektionen) public static Dictionary<ECalculatedResult,decimal> CalculateDay(List<KanalObjekt> inspektionen)

View File

@@ -0,0 +1,99 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using XMLParser.Contract;
using XMLParser.Model;
namespace XMLParser.Functions
{
[DebuggerDisplay("{" + nameof(GetDebuggerDisplay) + "(),nq}")]
public class StrassenUmsatzCSVWriter : CSVWriterBase
{
public StrassenUmsatzCSVWriter()
{
handle = File.Create("./data.csv");
}
public void Save()
{
handle.Close();
}
private string GetDebuggerDisplay()
{
return ToString();
}
public override void WriteEntry(Dictionary<ECalculatedResult, decimal> calculated, List<KanalObjekt> inspektionenAmTag)
{
int anzahlStraßenablaufe = (int)calculated[ECalculatedResult.STRASSENABLAUFANZAHL];
int sonstigeLeitungen = (int)calculated[ECalculatedResult.SONSTIGEANZAHL];
decimal Strassenablaufzulage = calculated[ECalculatedResult.STRASSENABLAUFLAENGEZULAGEMETER];
decimal Sonstigezulage = calculated[ECalculatedResult.SONSTIGELAENGEZULAGEMETER];
decimal HauptkanalLänge = calculated[ECalculatedResult.DN150DN250];
string entry = "";
bool firstentry = true;
List<ECalculatedResult> AvaibleHeaders = new List<ECalculatedResult>();
foreach(var s in calculated.Keys)
{
if(firstentry)
{
entry += calculated[s];
firstentry = false;
}
else
{
entry += "#"+calculated[s];
}
AvaibleHeaders.Add(s);
}
makeHeader(AvaibleHeaders);
Debugger.Log(0,"",entry);
//Debugger.Break();
KanalObjekt last = inspektionenAmTag.Last();
writeToFile(entry);
}
private void makeHeader(List<ECalculatedResult> avaibleHeaders)
{
Dictionary<ECalculatedResult,string> dict = new Dictionary<ECalculatedResult, string>();
dict.Add(ECalculatedResult.DN150DN250, "DN150 - DN250 [m]");
dict.Add(ECalculatedResult.DN300DN400, "DN300 - DN400 [m]");
dict.Add(ECalculatedResult.DN450DN600, "DN450 - DN600 [m]");
dict.Add(ECalculatedResult.DN650DN800, "DN650 - DN800 [m]");
dict.Add(ECalculatedResult.DN850DN1000,"DN850 - DN1000 [m]");
dict.Add(ECalculatedResult.GESAMTHAUPTKANAL,"Hauptkanal Gesamt [m]");
dict.Add(ECalculatedResult.STRASSENABLAUFANZAHL, "Straßenablauf [Stk]");
dict.Add(ECalculatedResult.STRASSENABLAUFLAENGEZULAGEMETER,"Straßenablauf > 5m [m]");
dict.Add(ECalculatedResult.SONSTIGEANZAHL,"Anschlussleitung [Stk]");
dict.Add(ECalculatedResult.SONSTIGELAENGEZULAGEMETER,"Anschlussleitung > 7m [m]");
string header = "";
bool firstentry = true;
foreach(ECalculatedResult s in avaibleHeaders)
{
if(firstentry)
{
firstentry = false;
}
else
{
header += "#";
}
header += dict[s];
}
Debugger.Log(0,"CSVWriter",header);
writeToFile(header);
}
}
}

View File

@@ -7,20 +7,12 @@ using System.Text;
using XMLParser.Contract; using XMLParser.Contract;
using XMLParser.Model; using XMLParser.Model;
namespace XMLProgramm namespace XMLParser.Functions
{ {
[DebuggerDisplay("{" + nameof(GetDebuggerDisplay) + "(),nq}")] [DebuggerDisplay("{" + nameof(GetDebuggerDisplay) + "(),nq}")]
public class CSVWriter : ICSVWriter public class TagesUmsatzCSVWriter : CSVWriterBase
{ {
FileStream handle = null; public TagesUmsatzCSVWriter()
void writeToFile(string content)
{
content += Environment.NewLine;
byte[] bytes = Encoding.UTF8.GetBytes(content);
handle.Write(bytes,0,bytes.Length);
handle.Flush();
}
public CSVWriter()
{ {
handle = File.Create("./data.csv"); handle = File.Create("./data.csv");
string WriteHeader = "Inspektionsdatum#Anzahl Straßenablaufe#Länge über 5m#SonstigeLeitungen#Sonstige Länge über 5m#Hauptkanallänge"; string WriteHeader = "Inspektionsdatum#Anzahl Straßenablaufe#Länge über 5m#SonstigeLeitungen#Sonstige Länge über 5m#Hauptkanallänge";
@@ -38,13 +30,13 @@ namespace XMLProgramm
} }
public void WriteEntry(Dictionary<ECalculatedResult, decimal> calculated, List<KanalObjekt> inspektionenAmTag) public override void WriteEntry(Dictionary<ECalculatedResult, decimal> calculated, List<KanalObjekt> inspektionenAmTag)
{ {
int anzahlStraßenablaufe = (int)calculated[ECalculatedResult.STRASSENABLAUFANZAHL]; int anzahlStraßenablaufe = (int)calculated[ECalculatedResult.STRASSENABLAUFANZAHL];
int sonstigeLeitungen = (int)calculated[ECalculatedResult.SONSTIGEANZAHL]; int sonstigeLeitungen = (int)calculated[ECalculatedResult.SONSTIGEANZAHL];
decimal Strassenablaufzulage = calculated[ECalculatedResult.STRASSENABLAUFLAENGEZULAGEMETER]; decimal Strassenablaufzulage = calculated[ECalculatedResult.STRASSENABLAUFLAENGEZULAGEMETER];
decimal Sonstigezulage = calculated[ECalculatedResult.SONSTIGELAENGEZULAGEMETER]; decimal Sonstigezulage = calculated[ECalculatedResult.SONSTIGELAENGEZULAGEMETER];
decimal HauptkanalLänge = calculated[ECalculatedResult.DN150DN250]; decimal HauptkanalLänge = calculated[ECalculatedResult.GESAMTHAUPTKANAL];
KanalObjekt last = inspektionenAmTag.Last(); KanalObjekt last = inspektionenAmTag.Last();

View File

@@ -11,6 +11,7 @@ namespace XMLParser.Functions.UmsatzCalculator
XMLParse ser = new XMLParse("2021-07-29_KR_H_L_Oldenburg_Eichenstraße.xml"); XMLParse ser = new XMLParse("2021-07-29_KR_H_L_Oldenburg_Eichenstraße.xml");
objekte.AddRange(ser.KanalObjekte); objekte.AddRange(ser.KanalObjekte);
Dictionary<ECalculatedResult,decimal> d = XMLParser.Functions.Calculate.CalculateStreet(objekte); Dictionary<ECalculatedResult,decimal> d = XMLParser.Functions.Calculate.CalculateStreet(objekte);
csvWriter.WriteEntry(d,objekte);
} }
} }
} }

View File

@@ -5,7 +5,7 @@ using System.IO;
using System.Linq; using System.Linq;
using XMLParser.Contract; using XMLParser.Contract;
using XMLParser.Model; using XMLParser.Model;
using XMLParser.Functions;
namespace XMLProgramm namespace XMLProgramm
{ {
class Program class Program
@@ -13,15 +13,10 @@ namespace XMLProgramm
static void Main(string[] args) static void Main(string[] args)
{ {
ICSVWriter csvWriter = new CSVWriter(); ICSVWriter csvWriter = new StrassenUmsatzCSVWriter();
//CSVWriter csvWriter = new CSVWriter();
List<KanalObjekt> objekte = new List<KanalObjekt>(); List<KanalObjekt> objekte = new List<KanalObjekt>();
IUmsatzCalculator calculator = new XMLParser.Functions.UmsatzCalculator.TagesUmsatz(); IUmsatzCalculator calculator = new XMLParser.Functions.UmsatzCalculator.StrassenUmsatz();
calculator.Calculate(csvWriter,objekte); calculator.Calculate(csvWriter,objekte);
//StrassenUmsatz(csvWriter,objekte);
//TagesUmsatz(csvWriter,objekte);
} }
} }
} }