Refactor inventory handling in DirectorWorker: Updated transport planning logic to ensure inventory is reduced immediately after successful transport creation. Removed redundant inventory updates from the planning phase, enhancing consistency and clarity in inventory management. Improved logging to reflect changes in inventory status during transport operations.
This commit is contained in:
@@ -851,22 +851,12 @@ impl DirectorWorker {
|
||||
item,
|
||||
)?;
|
||||
|
||||
// Inventar wird bereits in plan_transports_for_item reduziert
|
||||
if shipped > 0 {
|
||||
eprintln!(
|
||||
"[DirectorWorker] Transport geplant: {} Einheiten von Produkt {} transportiert",
|
||||
"[DirectorWorker] Transport geplant: {} Einheiten von Produkt {} transportiert (Inventar bereits reduziert)",
|
||||
shipped, item.product_id
|
||||
);
|
||||
if shipped >= item.quantity {
|
||||
// Alles wurde in Transporte umgewandelt, Inventar komplett entfernen.
|
||||
conn.prepare("remove_inventory", QUERY_REMOVE_INVENTORY)?;
|
||||
conn.execute("remove_inventory", &[&item.id])?;
|
||||
item.quantity = 0;
|
||||
} else {
|
||||
// Inventar-Menge in der DB reduzieren und im Item anpassen.
|
||||
let remaining = item.quantity - shipped;
|
||||
Self::update_inventory_quantity(&mut conn, item.id, remaining)?;
|
||||
item.quantity = remaining;
|
||||
}
|
||||
} else {
|
||||
eprintln!(
|
||||
"[DirectorWorker] Kein lohnender Transport gefunden für Produkt {} (region_id={})",
|
||||
@@ -937,7 +927,7 @@ impl DirectorWorker {
|
||||
// Vor dem eigentlichen Verkauf versucht der Director, lohnende
|
||||
// Transporte zu planen. Dabei werden:
|
||||
// - ggf. Transport-Einträge erzeugt
|
||||
// - Inventar-Mengen reduziert
|
||||
// - Inventar-Mengen reduziert (geschieht bereits in plan_transports_for_item)
|
||||
// Die zurückgegebenen Mengen werden dann lokal verkauft.
|
||||
for item in items.iter_mut() {
|
||||
let shipped = self.plan_transports_for_item(
|
||||
@@ -946,17 +936,8 @@ impl DirectorWorker {
|
||||
item,
|
||||
)?;
|
||||
|
||||
if shipped > 0 {
|
||||
if shipped >= item.quantity {
|
||||
// Alles wurde in Transporte umgewandelt, lokal nichts mehr zu verkaufen.
|
||||
item.quantity = 0;
|
||||
} else {
|
||||
// Inventar-Menge in der DB reduzieren und im Item anpassen.
|
||||
let remaining = item.quantity - shipped;
|
||||
Self::update_inventory_quantity(&mut conn, item.id, remaining)?;
|
||||
item.quantity = remaining;
|
||||
}
|
||||
}
|
||||
// Inventar wird bereits in plan_transports_for_item reduziert
|
||||
// item.quantity wurde dort bereits aktualisiert
|
||||
}
|
||||
|
||||
// Anschließend lokale Verkäufe für die verbleibenden Mengen durchführen.
|
||||
@@ -1295,10 +1276,23 @@ impl DirectorWorker {
|
||||
|
||||
let shipped = best_quantity - remaining.max(0);
|
||||
|
||||
// Optional: Logging zur Nachvollziehbarkeit
|
||||
// Inventar sofort reduzieren, nachdem Transporte erfolgreich angelegt wurden
|
||||
// Dies stellt sicher, dass Inventar und Transporte immer konsistent sind
|
||||
if shipped > 0 {
|
||||
if shipped >= item.quantity {
|
||||
// Alles wurde in Transporte umgewandelt, Inventar komplett entfernen
|
||||
conn.prepare("remove_inventory", QUERY_REMOVE_INVENTORY)?;
|
||||
conn.execute("remove_inventory", &[&item.id])?;
|
||||
item.quantity = 0;
|
||||
} else {
|
||||
// Inventar-Menge in der DB reduzieren und im Item anpassen
|
||||
let remaining_quantity = item.quantity - shipped;
|
||||
Self::update_inventory_quantity(conn, item.id, remaining_quantity)?;
|
||||
item.quantity = remaining_quantity;
|
||||
}
|
||||
|
||||
eprintln!(
|
||||
"[DirectorWorker] Transport geplant: {} Einheiten von Produkt {} von Region {} nach Region {} (Stückpreis lokal {:.2}, remote {:.2})",
|
||||
"[DirectorWorker] Transport geplant: {} Einheiten von Produkt {} von Region {} nach Region {} (Stückpreis lokal {:.2}, remote {:.2}). Inventar reduziert.",
|
||||
shipped, item.product_id, item.region_id, target_region, local_piece_price, best_remote_piece_price
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user