Strassen werden nun richtig in csv geschrieben
This commit is contained in:
27
XMLParser.Functions/CSVWriterBase.cs
Normal file
27
XMLParser.Functions/CSVWriterBase.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,37 @@ namespace XMLParser.Functions
|
||||
public static Dictionary<ECalculatedResult,decimal> CalculateStreet(List<KanalObjekt> inspektionen)
|
||||
{
|
||||
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;
|
||||
|
||||
List<int> ranges = new List<int>()
|
||||
@@ -52,50 +83,6 @@ namespace XMLParser.Functions
|
||||
|
||||
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;
|
||||
}
|
||||
public static Dictionary<ECalculatedResult,decimal> CalculateDay(List<KanalObjekt> inspektionen)
|
||||
|
||||
99
XMLParser.Functions/StrassenUmsatzCSVWriter.cs
Normal file
99
XMLParser.Functions/StrassenUmsatzCSVWriter.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,20 +7,12 @@ using System.Text;
|
||||
using XMLParser.Contract;
|
||||
using XMLParser.Model;
|
||||
|
||||
namespace XMLProgramm
|
||||
namespace XMLParser.Functions
|
||||
{
|
||||
[DebuggerDisplay("{" + nameof(GetDebuggerDisplay) + "(),nq}")]
|
||||
public class CSVWriter : ICSVWriter
|
||||
public class TagesUmsatzCSVWriter : CSVWriterBase
|
||||
{
|
||||
FileStream handle = null;
|
||||
void writeToFile(string content)
|
||||
{
|
||||
content += Environment.NewLine;
|
||||
byte[] bytes = Encoding.UTF8.GetBytes(content);
|
||||
handle.Write(bytes,0,bytes.Length);
|
||||
handle.Flush();
|
||||
}
|
||||
public CSVWriter()
|
||||
public TagesUmsatzCSVWriter()
|
||||
{
|
||||
handle = File.Create("./data.csv");
|
||||
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 sonstigeLeitungen = (int)calculated[ECalculatedResult.SONSTIGEANZAHL];
|
||||
decimal Strassenablaufzulage = calculated[ECalculatedResult.STRASSENABLAUFLAENGEZULAGEMETER];
|
||||
decimal Sonstigezulage = calculated[ECalculatedResult.SONSTIGELAENGEZULAGEMETER];
|
||||
decimal HauptkanalLänge = calculated[ECalculatedResult.DN150DN250];
|
||||
decimal HauptkanalLänge = calculated[ECalculatedResult.GESAMTHAUPTKANAL];
|
||||
|
||||
KanalObjekt last = inspektionenAmTag.Last();
|
||||
|
||||
@@ -11,6 +11,7 @@ namespace XMLParser.Functions.UmsatzCalculator
|
||||
XMLParse ser = new XMLParse("2021-07-29_KR_H_L_Oldenburg_Eichenstraße.xml");
|
||||
objekte.AddRange(ser.KanalObjekte);
|
||||
Dictionary<ECalculatedResult,decimal> d = XMLParser.Functions.Calculate.CalculateStreet(objekte);
|
||||
csvWriter.WriteEntry(d,objekte);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ using System.IO;
|
||||
using System.Linq;
|
||||
using XMLParser.Contract;
|
||||
using XMLParser.Model;
|
||||
|
||||
using XMLParser.Functions;
|
||||
namespace XMLProgramm
|
||||
{
|
||||
class Program
|
||||
@@ -13,15 +13,10 @@ namespace XMLProgramm
|
||||
static void Main(string[] args)
|
||||
{
|
||||
|
||||
ICSVWriter csvWriter = new CSVWriter();
|
||||
//CSVWriter csvWriter = new CSVWriter();
|
||||
ICSVWriter csvWriter = new StrassenUmsatzCSVWriter();
|
||||
List<KanalObjekt> objekte = new List<KanalObjekt>();
|
||||
IUmsatzCalculator calculator = new XMLParser.Functions.UmsatzCalculator.TagesUmsatz();
|
||||
IUmsatzCalculator calculator = new XMLParser.Functions.UmsatzCalculator.StrassenUmsatz();
|
||||
calculator.Calculate(csvWriter,objekte);
|
||||
|
||||
//StrassenUmsatz(csvWriter,objekte);
|
||||
//TagesUmsatz(csvWriter,objekte);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user