/// <summary> /// Legt ein neues E teil ein /// </summary> /// <param name="nr">Teilnummer</param> /// <param name="bestand">Bestand</param> /// <param name="verw">Verwendung{K,D,H,KDH}</param> public void NewTeil(int nr, string bezeichnung, int bestand, string verw) { if (!this.teile.ContainsKey(nr)) { ETeil et = new ETeil(nr, bezeichnung); et.Lagerstand = bestand; et.Verwendung = verw; this.teile[nr] = et; } else { throw new InputException(string.Format("Es ist bereits ein Teil mit der nummer {0} vorhandet", nr)); } }
/// <summary> /// Fügt ein neues E teil hinzu /// </summary> /// <param name="teil">Objekt der KLasse E teil</param> public void AddETeil(ETeil teil) { if (!this.teile.ContainsKey(teil.Nummer)) { this.teile[teil.Nummer] = teil; } else { throw new InputException(string.Format("Die Teilnummer {0} wird doppelt verwendet", teil.Nummer)); } }
public bool Equals(ETeil et) { if (this.nr == et.Nummer) { return true; } else { return false; } }
private void VerbrauchBerechnen(ETeil teil) { foreach (KeyValuePair<Teil, int> kvp in teil.zusammensetzung) { if (kvp.Key.Nummer == 17 || kvp.Key.Nummer == 16 || kvp.Key.Nummer == 26) { //Math.Ceiling berechnet ganzzahlig -> 7.2 wird zu 8 int Lagerbestand = Convert.ToInt32(Math.Ceiling(kvp.Key.Lagerstand / 3.0)); int Pufferwert = Convert.ToInt32(Math.Ceiling(kvp.Key.Pufferwert / 3.0)); ETeil eTemp = kvp.Key as ETeil; int verbrauch = kvp.Value * teil.Produktionsmenge; kvp.Key.VerbrauchAktuell += VerbrauchAlgorithmus(verbrauch, Lagerbestand, Pufferwert, eTemp.InWarteschlange); //kvp.Key.VerbrauchAktuell += (kvp.Value * teil.Produktionsmenge) - Lagerbestand + Pufferwert - eTemp.InWarteschlange; //TODO: was hat der Zähler c zu bedeutet? if (c < 4 && kvp.Key.Lagerstand % 3 != 0) { kvp.Key.VerbrauchAktuell += 1; c++; } } else { if (kvp.Key is Kaufteil) { //Lagerwert wird in PrimaerPlanung abgezogen //kvp.Key.VerbrauchAktuell += (kvp.Value * teil.Produktionsmenge) - kvp.Key.Lagerstand + kvp.Key.Pufferwert; int verbrauch = kvp.Value * teil.Produktionsmenge; kvp.Key.VerbrauchAktuell += VerbrauchAlgorithmus(verbrauch, kvp.Key.Lagerstand, kvp.Key.Pufferwert, kvp.Key.Warteschlange); if(kvp.Key.Warteschlange != 0) { Console.WriteLine(kvp.Key.Warteschlange); } kvp.Key.VerbrauchPrognose1 += kvp.Value * teil.VerbrauchPrognose1; kvp.Key.VerbrauchPrognose2 += kvp.Value * teil.VerbrauchPrognose2; kvp.Key.VerbrauchPrognose3 += kvp.Value * teil.VerbrauchPrognose3; } else { ETeil e = kvp.Key as ETeil; int verbrauch = kvp.Value * teil.Produktionsmenge; e.VerbrauchAktuell += VerbrauchAlgorithmus(verbrauch, e.Lagerstand, e.Pufferwert, e.InWarteschlange); //e.VerbrauchAktuell += (kvp.Value * teil.Produktionsmenge) - e.Lagerstand + e.Pufferwert - e.InWarteschlange; } } if(kvp.Key is ETeil) { //TODO: Warum hier ein if? Sonderbehandlung notwendig? /*if (kvp.Key.Nummer == 51 ||kvp.Key.Nummer == 16) { * }*/ ETeil eteil = kvp.Key as ETeil; if (eteil.VerbrauchAktuell < 0) { eteil.Produktionsmenge = 0; } else { eteil.Produktionsmenge = eteil.VerbrauchAktuell; } eteil.VerbrauchPrognose1 += kvp.Value * teil.VerbrauchPrognose1; eteil.VerbrauchPrognose2 += kvp.Value * teil.VerbrauchPrognose2; eteil.VerbrauchPrognose3 += kvp.Value * teil.VerbrauchPrognose3; VerbrauchBerechnen(eteil); } } }
/// <summary> /// Berechnung: ProdMenge = aktuellerVerbrauch - Lagerbestand + Puffer /// </summary> private void PrimaereProduktionsplanung() { //TODO: Berücksichtung von Warteschlangen?!? ETeil p1 = this.cont.ETeilList[0]; //p1.Produktionsmenge = - p1.Lagerstand + p1.Pufferwert; // +p1.Warteschlange; p1.Produktionsmenge = VerbrauchAlgorithmus( p1.VerbrauchAktuell, p1.Lagerstand, p1.Pufferwert, p1.Warteschlange); if(p1.Produktionsmenge > 0) { VerbrauchBerechnen(p1); } // Teile 16, 17 und 26 werden für alle drei Primärprodukte benötigt ETeil teil16 = cont.GetTeil(16) as ETeil; ETeil teil17 = cont.GetTeil(17) as ETeil; ETeil teil26 = cont.GetTeil(26) as ETeil; ETeil teil16tmp = new ETeil(16, ""); ETeil teil17tmp = new ETeil(17, ""); ETeil teil26tmp = new ETeil(26, ""); teil16tmp.VerbrauchAktuell = teil16.VerbrauchAktuell; teil16tmp.VerbrauchPrognose1 = teil16.VerbrauchPrognose1; teil16tmp.VerbrauchPrognose2 = teil16.VerbrauchPrognose2; teil16tmp.VerbrauchPrognose3 = teil16.VerbrauchPrognose3; teil16.VerbrauchAktuell = 0; teil16.VerbrauchPrognose1 = 0; teil16.VerbrauchPrognose2 = 0; teil16.VerbrauchPrognose3 = 0; teil17tmp.VerbrauchAktuell = teil17.VerbrauchAktuell; teil17tmp.VerbrauchPrognose1 = teil17.VerbrauchPrognose1; teil17tmp.VerbrauchPrognose2 = teil17.VerbrauchPrognose2; teil17tmp.VerbrauchPrognose3 = teil17.VerbrauchPrognose3; teil17.VerbrauchAktuell = 0; teil17.VerbrauchPrognose1 = 0; teil17.VerbrauchPrognose2 = 0; teil17.VerbrauchPrognose3 = 0; teil26tmp.VerbrauchAktuell = teil26.VerbrauchAktuell; teil26tmp.VerbrauchPrognose1 = teil26.VerbrauchPrognose1; teil26tmp.VerbrauchPrognose2 = teil26.VerbrauchPrognose2; teil26tmp.VerbrauchPrognose3 = teil26.VerbrauchPrognose3; teil26.VerbrauchAktuell = 0; teil26.VerbrauchPrognose1 = 0; teil26.VerbrauchPrognose2 = 0; teil26.VerbrauchPrognose3 = 0; ETeil p2 = this.cont.ETeilList[1]; //p2.Produktionsmenge = p2.VerbrauchAktuell - p2.Lagerstand + p2.Pufferwert;// -p2.InWarteschlange; p2.Produktionsmenge = VerbrauchAlgorithmus(p2.VerbrauchAktuell, p2.Lagerstand, p2.Pufferwert, p2.Warteschlange); if (p2.Produktionsmenge > 0) { VerbrauchBerechnen(p2); } // Teile 16, 17 und 26 werden für alle drei Primärprodukte benötigt teil16tmp.VerbrauchAktuell += teil16.VerbrauchAktuell; teil16tmp.VerbrauchPrognose1 += teil16.VerbrauchPrognose1; teil16tmp.VerbrauchPrognose2 += teil16.VerbrauchPrognose2; teil16tmp.VerbrauchPrognose3 += teil16.VerbrauchPrognose3; teil16.VerbrauchAktuell = 0; teil16.VerbrauchPrognose1 = 0; teil16.VerbrauchPrognose2 = 0; teil16.VerbrauchPrognose3 = 0; teil17tmp.VerbrauchAktuell += teil17.VerbrauchAktuell; teil17tmp.VerbrauchPrognose1 += teil17.VerbrauchPrognose1; teil17tmp.VerbrauchPrognose2 += teil17.VerbrauchPrognose2; teil17tmp.VerbrauchPrognose3 += teil17.VerbrauchPrognose3; teil17.VerbrauchAktuell = 0; teil17.VerbrauchPrognose1 = 0; teil17.VerbrauchPrognose2 = 0; teil17.VerbrauchPrognose3 = 0; teil26tmp.VerbrauchAktuell += teil26.VerbrauchAktuell; teil26tmp.VerbrauchPrognose1 += teil26.VerbrauchPrognose1; teil26tmp.VerbrauchPrognose2 += teil26.VerbrauchPrognose2; teil26tmp.VerbrauchPrognose3 += teil26.VerbrauchPrognose3; teil26.VerbrauchAktuell = 0; teil26.VerbrauchPrognose1 = 0; teil26.VerbrauchPrognose2 = 0; teil26.VerbrauchPrognose3 = 0; ETeil p3 = this.cont.ETeilList[2]; //p3.Produktionsmenge = p3.VerbrauchAktuell - p3.Lagerstand + p3.Pufferwert;// -p3.InWarteschlange; p3.Produktionsmenge = VerbrauchAlgorithmus(p3.VerbrauchAktuell, p3.Lagerstand, p3.Pufferwert, p3.Warteschlange); if (p3.Produktionsmenge > 0) { VerbrauchBerechnen(p3); } // Teile 16, 17 und 26 werden für alle drei Primärprodukte benötigt teil16.VerbrauchAktuell += teil16tmp.VerbrauchAktuell; teil16.VerbrauchPrognose1 += teil16tmp.VerbrauchPrognose1; teil16.VerbrauchPrognose2 += teil16tmp.VerbrauchPrognose2; teil16.VerbrauchPrognose3 += teil16tmp.VerbrauchPrognose3; teil17.VerbrauchAktuell += teil17tmp.VerbrauchAktuell; teil17.VerbrauchPrognose1 += teil17tmp.VerbrauchPrognose1; teil17.VerbrauchPrognose2 += teil17tmp.VerbrauchPrognose2; teil17.VerbrauchPrognose3 += teil17tmp.VerbrauchPrognose3; teil26.VerbrauchAktuell += teil26tmp.VerbrauchAktuell; teil26.VerbrauchPrognose1 += teil26tmp.VerbrauchPrognose1; teil26.VerbrauchPrognose2 += teil26tmp.VerbrauchPrognose2; teil26.VerbrauchPrognose3 += teil26tmp.VerbrauchPrognose3; }
/// <summary> /// Berücksichtigt, dass für ETeile in der Warteschlange noch die Komponententeile aus dem Lager geholt werden müssen. /// </summary> /// <param name="eteil">Das ETeil in der Warteschlange.</param> private void LagerbestandAbziehenZusammengesetzteTeile(ETeil eteil) { foreach (KeyValuePair<Teil, int> kvp in eteil.Zusammensetzung) { Teil teil = DataContainer.Instance.GetTeil(kvp.Key.Nummer); teil.Lagerstand -= eteil.InWarteschlange * kvp.Value; if (teil is ETeil) { ETeil eteilNeu = teil as ETeil; this.LagerbestandAbziehenZusammengesetzteTeile(eteilNeu); } } }