public void NeuArbeitsplatz(Arbeitsplatz arb) { if (!this.arbeitsplatz.ContainsKey(arb.Nummer)) { this.arbeitsplatz[arb.Nummer] = arb; } else { throw new Exception("Arbeitsplatz mit der Nummer " + arb.Nummer + " bereits vorhanden"); } }
/// <summary> /// findet die Reihenfolge für einen Aebreitsplatz /// </summary> /// <param name="arb">Arbeitsplatz objekt</param> /// <param name="tmp">temporäres Dictionary</param> private void ReihenfolgeAnpassung(Arbeitsplatz arb,ref Dictionary<int, int[]> tmp) { int lastPos; int counter=0; bool lastposChgd; bool notInserted; if (!tmp.ContainsKey(arb.Nummer)) { tmp[arb.Nummer] = new int[arb.HergestelteTeile.Count]; lastPos = arb.HergestelteTeile.Count - 1; foreach (ETeil hergestellt in arb.HergestelteTeile) // alle Teile die an diesem Arbeitsplatz hergestellt werden { lastposChgd = false; notInserted = true; foreach (KeyValuePair<Teil, int> bestandTeil in hergestellt.Zusammensetzung) //die Teile aus dennen sich die hergestellten Teile Zusammensetzen { if (bestandTeil.Key is ETeil) //Teil ist ETeil und wir produziert { if ((bestandTeil.Key.Lagerstand - bestandTeil.Key.VerbrauchAktuell) < 0) // Falls Verbrauch höher Lagerstand dieses Teil am Arbeitsplatz bevorzugen { tmp[arb.Nummer][lastPos] = hergestellt.Nummer; lastposChgd = true; notInserted = false; } if (bestandTeil.Key.Lagerstand - bestandTeil.Key.VerbrauchAktuell >= 0) // Falls Verbrauch kleiner/gleich Lagerstand { bool präferenz = false; foreach (ETeil nachfolger in (bestandTeil.Key as ETeil).IstTeilVon) // Teile die von ersten Teil abhängig sind prüfen { if (nachfolger.Lagerstand - nachfolger.VerbrauchAktuell < 0) { präferenz = true; // Diese Teile bevorzugen da nicht mehr vorhanden break; } } if (präferenz) { int c = tmp[arb.Nummer][0]; tmp[arb.Nummer][0] = hergestellt.Nummer; tmp[arb.Nummer][counter] = c; notInserted = false; } else { tmp[arb.Nummer][counter] = hergestellt.Nummer; notInserted = false; } } } }//foreach KeyValuePair<Teil,int> if (notInserted) { tmp[arb.Nummer][counter] = hergestellt.Nummer; } if (lastposChgd) { lastPos--; } else { counter++; } }//foreach Eteil }//if }