Bewertungsystem weitergeschrieben
This commit is contained in:
@@ -1,12 +1,14 @@
|
||||
using dcnsanplanung.bewertung.M149_3;
|
||||
using dcnsanplanung.shared.Model;
|
||||
using Syncfusion.XlsIO;
|
||||
using System.Diagnostics;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
namespace dcnsanplanung.bewertung
|
||||
{
|
||||
public static class BewM149
|
||||
{
|
||||
|
||||
private static int counter = 0;
|
||||
public static Dictionary<int, int> StartWert = new Dictionary<int, int>()
|
||||
{
|
||||
{0,400 },
|
||||
@@ -17,7 +19,7 @@ namespace dcnsanplanung.bewertung
|
||||
{5,0 }
|
||||
};
|
||||
|
||||
public static float SXj(int sk,float length)
|
||||
public static decimal SXj(int sk,decimal length)
|
||||
{
|
||||
return (5 - sk) * length;
|
||||
}
|
||||
@@ -33,46 +35,192 @@ namespace dcnsanplanung.bewertung
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void CalculateHaltung(Haltung haltung)
|
||||
public static void CalculateHaltung(List<Haltung> haltung)
|
||||
{
|
||||
//MjcwMjkwMEAzMjMzMmUzMDJlMzBZSE9jRFVFZlYyNXhBMFE2Y2pkd0pReVJHcmtlaFlVaUh1aTBlWW80WVZNPQ==
|
||||
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("MjcwMjkwMEAzMjMzMmUzMDJlMzBZSE9jRFVFZlYyNXhBMFE2Y2pkd0pReVJHcmtlaFlVaUh1aTBlWW80WVZNPQ==");
|
||||
ExcelEngine excelEngine = new ExcelEngine();
|
||||
IApplication application = excelEngine.Excel;
|
||||
|
||||
application.DefaultVersion = ExcelVersion.Xlsx;
|
||||
IWorkbook workbook = application.Workbooks.Create(haltung.Count);
|
||||
for(int i = 0; i < haltung.Count; i++)
|
||||
{
|
||||
IWorksheet worksheet = workbook.Worksheets[i];
|
||||
Haltung halt = haltung[i];
|
||||
CalculateHaltung(halt, worksheet);
|
||||
|
||||
}
|
||||
|
||||
FileStream stream = new FileStream("beurteilung.xlsx", FileMode.Create, FileAccess.ReadWrite);
|
||||
workbook.SaveAs(stream);
|
||||
stream.Dispose();
|
||||
|
||||
}
|
||||
|
||||
private static void CalculateHaltung(Haltung haltung, IWorksheet worksheet)
|
||||
{
|
||||
BewM149.counter++;
|
||||
var k = ObjektKlasse(haltung.Kodierungen);
|
||||
List<Schaden> streckenSchaeden = new List<Schaden>();
|
||||
|
||||
worksheet.Name = string.Format("{0} ({1})", haltung.Objektbezeichnung, BewM149.counter);
|
||||
|
||||
worksheet.Range[1, 1].Text = "Haltung";
|
||||
worksheet.Range[1, 3].Text = haltung.Objektbezeichnung;
|
||||
worksheet.Range[2, 1].Text = "Durchmesser";
|
||||
worksheet.Range[2, 3].Text = haltung.DN.ToString();
|
||||
worksheet.Range[3, 1].Text = "Material";
|
||||
worksheet.Range[3, 3].Text = haltung.Material;
|
||||
|
||||
|
||||
int i = 7;
|
||||
worksheet.Range[i, 1].Text = "Entfernung";
|
||||
worksheet.Range[i, 2].Text = "Streckenschaden";
|
||||
worksheet.Range[i, 3].Text = "Hauptcode";
|
||||
worksheet.Range[i, 4].Text = "CH1";
|
||||
worksheet.Range[i, 5].Text = "CH2";
|
||||
worksheet.Range[i, 6].Text = "Q1";
|
||||
worksheet.Range[i, 7].Text = "Q2";
|
||||
worksheet.Range[i, 8].Text = "SK D";
|
||||
worksheet.Range[i, 9].Text = "SK S";
|
||||
worksheet.Range[i, 10].Text = "SK B";
|
||||
worksheet.Range[i, 11].Text = "D";
|
||||
worksheet.Range[i, 12].Text = "S";
|
||||
worksheet.Range[i, 13].Text = "B";
|
||||
|
||||
foreach (var schaden in haltung.Kodierungen)
|
||||
{
|
||||
schaden.KBj = SXj(schaden.KB, 2.5f);
|
||||
schaden.KDj = SXj(schaden.KD, 2.5f);
|
||||
schaden.KSj = SXj(schaden.KS, 2.5f);
|
||||
i++;
|
||||
decimal entfernung = 2.5m;
|
||||
bool streckenschaden = false;
|
||||
if(schaden.IsStreckenSchaden)
|
||||
{
|
||||
if (schaden.StreckenschadenCode.Substring(0, 1).Equals("A"))
|
||||
{
|
||||
streckenSchaeden.Add(schaden);
|
||||
streckenschaden = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Code
|
||||
string code = schaden.StreckenschadenCode.Substring(1);
|
||||
var schaeden = streckenSchaeden.Where(x => x.StreckenschadenCode.Contains(code)).Last();
|
||||
entfernung = schaden.Entfernung - schaeden.Entfernung;
|
||||
}
|
||||
}
|
||||
|
||||
if (!streckenschaden)
|
||||
{
|
||||
if (entfernung < 2.5m) entfernung = 2.5m;
|
||||
}
|
||||
else
|
||||
{
|
||||
entfernung = 0m;
|
||||
}
|
||||
schaden.KBj = SXj(schaden.KB, entfernung);
|
||||
schaden.KDj = SXj(schaden.KD, entfernung);
|
||||
schaden.KSj = SXj(schaden.KS, entfernung);
|
||||
|
||||
worksheet.Range[i, 1].Text = schaden.Entfernung.ToString();
|
||||
worksheet.Range[i, 2].Text = schaden.StreckenschadenCode;
|
||||
worksheet.Range[i, 3].Text = schaden.Hauptcode;
|
||||
worksheet.Range[i, 4].Text = schaden.CH1;
|
||||
worksheet.Range[i, 5].Text = schaden.CH2;
|
||||
worksheet.Range[i, 6].Text = schaden.Q1;
|
||||
worksheet.Range[i, 7].Text = schaden.Q2;
|
||||
worksheet.Range[i, 8].Number = schaden.KD;
|
||||
worksheet.Range[i, 9].Number = schaden.KS;
|
||||
worksheet.Range[i, 10].Number = schaden.KB;
|
||||
worksheet.Range[i, 11].Text = schaden.KDj.ToString();
|
||||
worksheet.Range[i, 12].Text = schaden.KSj.ToString();
|
||||
worksheet.Range[i, 13].Text = schaden.KBj.ToString();
|
||||
}
|
||||
|
||||
float Haltungslaenge = (float)haltung.Kodierungen.Select(x => x.Entfernung).Max();
|
||||
|
||||
|
||||
decimal Haltungslaenge = haltung.Kodierungen.Select(x => x.Entfernung).Max();
|
||||
|
||||
float KBSumme = haltung.Kodierungen.Select(x => x.KBj).Sum();
|
||||
float KSSumme = haltung.Kodierungen.Select(x => x.KSj).Sum();
|
||||
float KDSumme = haltung.Kodierungen.Select(x => x.KDj).Sum();
|
||||
decimal KBSumme = haltung.Kodierungen.Select(x => x.KBj).Sum();
|
||||
decimal KSSumme = haltung.Kodierungen.Select(x => x.KSj).Sum();
|
||||
decimal KDSumme = haltung.Kodierungen.Select(x => x.KDj).Sum();
|
||||
|
||||
float ObjektDSumme = SXj(k["D"],Haltungslaenge);
|
||||
float ObjektSSumme = SXj(k["S"],Haltungslaenge);
|
||||
float ObjektBSumme = SXj(k["B"],Haltungslaenge);
|
||||
i++;
|
||||
worksheet.Range[i, 6].Text = "Summe";
|
||||
worksheet.Range[i, 11].Text = KDSumme.ToString();
|
||||
worksheet.Range[i, 12].Text = KSSumme.ToString();
|
||||
worksheet.Range[i, 13].Text = KBSumme.ToString();
|
||||
|
||||
float SchadensDichteD = KDSumme / ObjektDSumme;
|
||||
float SchadensDichteS = KSSumme / ObjektSSumme;
|
||||
float SchadensDichteB = KBSumme / ObjektBSumme;
|
||||
i++;
|
||||
worksheet.Range[i, 6].Text = "Objektklasse";
|
||||
worksheet.Range[i, 8].Text = k["D"].ToString();
|
||||
worksheet.Range[i, 9].Text = k["S"].ToString();
|
||||
worksheet.Range[i, 10].Text = k["B"].ToString();
|
||||
|
||||
float zuschlagD = 50 * SchadensDichteD;
|
||||
float zuschlagS = 50 * SchadensDichteS;
|
||||
float zuschlagB = 50 * SchadensDichteB;
|
||||
decimal ObjektDSumme = SXj(k["D"],Haltungslaenge);
|
||||
decimal ObjektSSumme = SXj(k["S"],Haltungslaenge);
|
||||
decimal ObjektBSumme = SXj(k["B"],Haltungslaenge);
|
||||
|
||||
decimal SchadensDichteB = 0m;
|
||||
decimal SchadensDichteD = 0m;
|
||||
decimal SchadensDichteS = 0m;
|
||||
|
||||
decimal zuschlagD = 0m;
|
||||
decimal zuschlagS = 0m;
|
||||
decimal zuschlagB = 0m;
|
||||
|
||||
if (ObjektBSumme > 0)
|
||||
SchadensDichteB = Decimal.Round(KBSumme / ObjektBSumme, 2);
|
||||
if (ObjektDSumme > 0)
|
||||
SchadensDichteD = Decimal.Round(KDSumme / ObjektDSumme,2);
|
||||
if (ObjektSSumme > 0)
|
||||
SchadensDichteS = Decimal.Round(KSSumme / ObjektSSumme,2);
|
||||
|
||||
|
||||
if (ObjektDSumme > 0)
|
||||
zuschlagD = 50 * SchadensDichteD;
|
||||
if (ObjektDSumme > 0)
|
||||
zuschlagS = 50 * SchadensDichteS;
|
||||
if (ObjektBSumme > 0)
|
||||
zuschlagB = 50 * SchadensDichteB;
|
||||
i++;
|
||||
worksheet.Range[i, 6].Text = "Zuschlag";
|
||||
worksheet.Range[i, 11].Text = String.Format("{0:0.}",zuschlagD);
|
||||
worksheet.Range[i, 12].Text = String.Format("{0:0.}",zuschlagS);
|
||||
worksheet.Range[i, 13].Text = String.Format("{0:0.}",zuschlagB);
|
||||
|
||||
int startWertD = StartWert[k["D"]];
|
||||
int startWertB = StartWert[k["B"]];
|
||||
int startWertS = StartWert[k["S"]];
|
||||
i++;
|
||||
worksheet.Range[i, 6].Text = "Startwert";
|
||||
worksheet.Range[i, 11].Number = startWertD;
|
||||
worksheet.Range[i, 12].Number = startWertS;
|
||||
worksheet.Range[i, 13].Number = startWertB;
|
||||
|
||||
int ZustandPunkteD = startWertD + (int)zuschlagD;
|
||||
int ZustandPunkteB = startWertB + (int)zuschlagB;
|
||||
int ZustandPunkteS = startWertS + (int)zuschlagS;
|
||||
i++;
|
||||
worksheet.Range[i, 11].Number = ZustandPunkteD;
|
||||
worksheet.Range[i, 12].Number = ZustandPunkteS;
|
||||
worksheet.Range[i, 13].Number = ZustandPunkteB;
|
||||
|
||||
|
||||
int BewertungspunkteD = 0;
|
||||
int BewertungspunkteS = 0;
|
||||
int BewertungspunkteB = 0;
|
||||
if(ZustandPunkteD > 0)
|
||||
BewertungspunkteD = ZustandPunkteD + 500 + RD(EBaujahr.VOR1965, EEinstau.NICHTEINGEHALTEN, ELageGrundWasser.IM);
|
||||
if(ZustandPunkteS > 0)
|
||||
BewertungspunkteS = ZustandPunkteS + 500 + RS(EUeberdeckung.KLEINER25, EBodenGruppe.BG4);
|
||||
if(ZustandPunkteB >0)
|
||||
BewertungspunkteB = ZustandPunkteB + 500 + RB(EEinstau.NICHTEINGEHALTEN, EUeberdeckung.KLEINER25);
|
||||
i++;
|
||||
worksheet.Range[i, 11].Number = BewertungspunkteD;
|
||||
worksheet.Range[i, 12].Number = BewertungspunkteS;
|
||||
worksheet.Range[i, 13].Number = BewertungspunkteB;
|
||||
|
||||
int BewertungspunkteD = ZustandPunkteD + 500 + RD(EBaujahr.VOR1965, EEinstau.NICHTEINGEHALTEN, ELageGrundWasser.IM);
|
||||
int BewertungspunkteS = ZustandPunkteS + 500 + RS(EUeberdeckung.KLEINER25, EBodenGruppe.BG4);
|
||||
int BewertungspunkteB = ZustandPunkteB + 500 + RB(EEinstau.NICHTEINGEHALTEN, EUeberdeckung.KLEINER25);
|
||||
|
||||
// Sanierungsbedarfzahl errechnen
|
||||
List<int> ints = new List<int>();
|
||||
@@ -84,15 +232,27 @@ namespace dcnsanplanung.bewertung
|
||||
int bp3 = ints.Min();
|
||||
int bp2 = ints.Sum() - bp1 - bp3;
|
||||
|
||||
int restbp1 = Convert.ToInt32(bp1.ToString().Substring(1));
|
||||
int restbp2 = Convert.ToInt32(bp2.ToString().Substring(1));
|
||||
int restbp3 = Convert.ToInt32(bp3.ToString().Substring(1));
|
||||
int restbp1 = 0;
|
||||
int restbp2 = 0;
|
||||
int restbp3 = 0;
|
||||
if(bp1 > 0) restbp1 = Convert.ToInt32(bp1.ToString().Substring(1));
|
||||
if(bp2 > 0) restbp2 = Convert.ToInt32(bp2.ToString().Substring(1));
|
||||
if(bp3 > 0) restbp3 = Convert.ToInt32(bp3.ToString().Substring(1));
|
||||
|
||||
int rest = (restbp1 + restbp2 + restbp3) / 30;
|
||||
|
||||
string sanierungszahl = string.Format("{0}{1}{2}{3}",(int)(bp1 / 100),(int)(bp2 /100),(int)(bp3 / 100),rest);
|
||||
|
||||
int sanzahl = Convert.ToInt32(sanierungszahl);
|
||||
|
||||
|
||||
worksheet.Range[1, 5].Number = sanzahl;
|
||||
|
||||
var mk = Beurteilung(sanzahl);
|
||||
|
||||
worksheet.Range[2, 5].Text = mk.Item1;
|
||||
|
||||
worksheet.Range[3, 5].Text = mk.Item2;
|
||||
}
|
||||
|
||||
public static Tuple<string,string> Beurteilung(int sanierungsbedarfzahl)
|
||||
@@ -198,11 +358,19 @@ namespace dcnsanplanung.bewertung
|
||||
case "BDE": abstractCode = new BDE(); break;
|
||||
}
|
||||
|
||||
if (abstractCode == null) return result;
|
||||
if (abstractCode == null)
|
||||
{
|
||||
result.Add("D", 5);
|
||||
result.Add("B", 5);
|
||||
result.Add("S", 5);
|
||||
return result;
|
||||
}
|
||||
|
||||
abstractCode.WriteCH1(ch1);
|
||||
abstractCode.WriteCH2(ch2);
|
||||
float _q1 = float.Parse(q1);
|
||||
float _q1 = 0;
|
||||
if (!q1.Equals(string.Empty))
|
||||
_q1 = float.Parse(q1);
|
||||
//float _q2 = float.Parse(q2);
|
||||
abstractCode.WriteQ1(_q1);
|
||||
//abstractCode.WriteQ2(_q2);
|
||||
|
||||
Reference in New Issue
Block a user