125 lines
4.8 KiB
C#
125 lines
4.8 KiB
C#
using dcnsanplanung.bewertung.M149_3;
|
|
using dcnsanplanung.shared.Model;
|
|
using System.Diagnostics;
|
|
|
|
namespace dcnsanplanung.bewertung
|
|
{
|
|
public static class BewM149
|
|
{
|
|
|
|
public static Dictionary<int, int> StartWert = new Dictionary<int, int>()
|
|
{
|
|
{0,400 },
|
|
{1,300 },
|
|
{2,200 },
|
|
{3,100 },
|
|
{4,0 },
|
|
{5,0 }
|
|
};
|
|
|
|
public static float SXj(int sk,float length)
|
|
{
|
|
return (5 - sk) * length;
|
|
}
|
|
|
|
public static Dictionary<string, int> ObjektKlasse(List<Schaden> schaeden)
|
|
{
|
|
Dictionary<string, int> result = new Dictionary<string, int>();
|
|
|
|
result.Add("B", schaeden.Select(x => x.KB).Min());
|
|
result.Add("D", schaeden.Select(x => x.KD).Min());
|
|
result.Add("S", schaeden.Select(x => x.KS).Min());
|
|
|
|
return result;
|
|
}
|
|
|
|
public static void CalculateHaltung(Haltung haltung)
|
|
{
|
|
var k = ObjektKlasse(haltung.Kodierungen);
|
|
|
|
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);
|
|
}
|
|
|
|
float Haltungslaenge = (float)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();
|
|
|
|
float ObjektDSumme = SXj(k["D"],Haltungslaenge);
|
|
float ObjektSSumme = SXj(k["S"],Haltungslaenge);
|
|
float ObjektBSumme = SXj(k["B"],Haltungslaenge);
|
|
|
|
float SchadensDichteD = KDSumme / ObjektDSumme;
|
|
float SchadensDichteS = KSSumme / ObjektSSumme;
|
|
float SchadensDichteB = KBSumme / ObjektBSumme;
|
|
|
|
float zuschlagD = 50 * SchadensDichteD;
|
|
float zuschlagS = 50 * SchadensDichteS;
|
|
float zuschlagB = 50 * SchadensDichteB;
|
|
|
|
int startWertD = StartWert[k["D"]];
|
|
int startWertB = StartWert[k["B"]];
|
|
int startWertS = StartWert[k["S"]];
|
|
|
|
int ZustandPunkteD = startWertD + (int)zuschlagD;
|
|
int ZustandPunkteB = startWertB + (int)zuschlagB;
|
|
int ZustandPunkteS = startWertS + (int)zuschlagS;
|
|
}
|
|
public static Dictionary<string, int> Klassifiziere(string hauptcode, string ch1, string ch2, string q1, string q2, int dn)
|
|
{
|
|
AbstractCode? abstractCode = null;
|
|
|
|
Dictionary<string,int> result = new Dictionary<string,int>();
|
|
|
|
switch(hauptcode)
|
|
{
|
|
case "BAA": abstractCode = new BAA(EGeltungsbereich.biegesteif); break;
|
|
case "BAB": abstractCode = new BAB(); break;
|
|
case "BAC": abstractCode = new BAC(); break;
|
|
case "BAD": abstractCode = new BAD(); break;
|
|
case "BAE": abstractCode = new BAE(); break;
|
|
case "BAF": abstractCode = new BAF(); break;
|
|
case "BAG": abstractCode = new BAG(dn); break;
|
|
case "BAH": abstractCode = new BAH(); break;
|
|
case "BAI": abstractCode = new BAI(); break;
|
|
case "BAJ": abstractCode = new BAJ(); break;
|
|
case "BAK": abstractCode = new BAK(); break;
|
|
case "BAL": abstractCode = new BAL(); break;
|
|
case "BAM": abstractCode = new BAM(); break;
|
|
case "BAN": abstractCode = new BAN(); break;
|
|
case "BAO": abstractCode = new BAO(); break;
|
|
case "BAP": abstractCode = new BAP(); break;
|
|
case "BBA": abstractCode = new BBA(); break;
|
|
case "BBB": abstractCode = new BBB(); break;
|
|
case "BBC": abstractCode = new BBC(); break;
|
|
case "BBD": abstractCode = new BBD(); break;
|
|
case "BBE": abstractCode = new BBE(); break;
|
|
case "BBF": abstractCode = new BBF(); break;
|
|
case "BBG": abstractCode = new BBG(); break;
|
|
case "BBH": abstractCode = new BBH(); break;
|
|
case "BDB": abstractCode = new BDB(); break;
|
|
case "BDE": abstractCode = new BDE(); break;
|
|
}
|
|
|
|
if (abstractCode == null) return result;
|
|
|
|
abstractCode.WriteCH1(ch1);
|
|
abstractCode.WriteCH2(ch2);
|
|
float _q1 = float.Parse(q1);
|
|
//float _q2 = float.Parse(q2);
|
|
abstractCode.WriteQ1(_q1);
|
|
//abstractCode.WriteQ2(_q2);
|
|
|
|
result.Add("D", abstractCode.CalculateDK());
|
|
result.Add("B", abstractCode.CalculateBK());
|
|
result.Add("S", abstractCode.CalculateSK());
|
|
|
|
return result;
|
|
}
|
|
}
|
|
} |