From 66b19fbe7ccdd337187201102d91934f4dee52af Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Wed, 3 Dec 2025 16:52:38 +0100 Subject: [PATCH] Enhance logging in DirectorWorker for transport planning: Added detailed error and status messages throughout the transport planning process, including inventory checks, transport feasibility assessments, and pricing evaluations. This improves traceability and debugging capabilities for transport operations associated with directors. --- src/worker/director.rs | 68 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/src/worker/director.rs b/src/worker/director.rs index 15b7271..955a261 100644 --- a/src/worker/director.rs +++ b/src/worker/director.rs @@ -686,8 +686,17 @@ impl DirectorWorker { let mut items: Vec = rows.into_iter().filter_map(Self::map_row_to_inventory_item).collect(); + eprintln!( + "[DirectorWorker] Transportprüfung für Director {} (branch_id={}): {} Inventar-Items gefunden", + director.id, director.branch_id, items.len() + ); + // Falls es nichts zu transportieren gibt, können wir sofort zurückkehren. if items.is_empty() { + eprintln!( + "[DirectorWorker] Keine Inventar-Items für Transporte gefunden für Director {} (branch_id={})", + director.id, director.branch_id + ); return Ok(()); } @@ -699,6 +708,11 @@ impl DirectorWorker { // - ggf. Transport-Einträge erzeugt // - Inventar-Mengen reduziert for item in items.iter_mut() { + eprintln!( + "[DirectorWorker] Prüfe Transport für Item: product_id={}, quantity={}, quality={}, region_id={}, branch_id={}", + item.product_id, item.quantity, item.quality, item.region_id, item.branch_id + ); + let shipped = self.plan_transports_for_item( &mut conn, falukant_user_id, @@ -706,6 +720,10 @@ impl DirectorWorker { )?; if shipped > 0 { + eprintln!( + "[DirectorWorker] Transport geplant: {} Einheiten von Produkt {} transportiert", + shipped, item.product_id + ); if shipped >= item.quantity { // Alles wurde in Transporte umgewandelt, Inventar komplett entfernen. conn.prepare("remove_inventory", QUERY_REMOVE_INVENTORY)?; @@ -717,6 +735,11 @@ impl DirectorWorker { Self::update_inventory_quantity(&mut conn, item.id, remaining)?; item.quantity = remaining; } + } else { + eprintln!( + "[DirectorWorker] Kein lohnender Transport gefunden für Produkt {} (region_id={})", + item.product_id, item.region_id + ); } } @@ -918,9 +941,18 @@ impl DirectorWorker { } if worth_by_region.is_empty() { + eprintln!( + "[DirectorWorker] Keine worth_percent-Werte für Produkt {} gefunden", + item.product_id + ); return Ok(0); } + eprintln!( + "[DirectorWorker] Gefundene Regionen für Produkt {}: {} Regionen", + item.product_id, worth_by_region.len() + ); + // Lokalen Stückpreis berechnen (neue Preisberechnung) let local_percent = worth_by_region .get(&item.region_id) @@ -938,6 +970,11 @@ impl DirectorWorker { let knowledge_factor = item.quality as f64; let local_piece_price = local_min_price + (local_max_price - local_min_price) * (knowledge_factor / 100.0); + eprintln!( + "[DirectorWorker] Lokaler Preis für Produkt {}: {:.2} (worth_percent={:.2}, quality={})", + item.product_id, local_piece_price, local_percent, item.quality + ); + let mut best_target_region: Option = None; let mut best_quantity: i32 = 0; let mut best_remote_piece_price: f64 = 0.0; @@ -962,7 +999,16 @@ impl DirectorWorker { let remote_piece_price = remote_min_price + (remote_max_price - remote_min_price) * (knowledge_factor / 100.0); let delta_per_unit = remote_piece_price - local_piece_price; + eprintln!( + "[DirectorWorker] Region {}: Preis {:.2}, Delta {:.2}", + region_id, remote_piece_price, delta_per_unit + ); + if delta_per_unit <= 0.0 { + eprintln!( + "[DirectorWorker] Region {}: Kein Preisvorteil (Delta <= 0)", + region_id + ); continue; } @@ -974,7 +1020,16 @@ impl DirectorWorker { region_id, )?; + eprintln!( + "[DirectorWorker] Region {}: {} verfügbare Transportmittel", + region_id, vehicles.len() + ); + if vehicles.is_empty() { + eprintln!( + "[DirectorWorker] Region {}: Keine verfügbaren Transportmittel", + region_id + ); continue; } @@ -1004,11 +1059,24 @@ impl DirectorWorker { }; let net_gain = extra_revenue - transport_cost; + eprintln!( + "[DirectorWorker] Region {}: extra_revenue={:.2}, transport_cost={:.2}, net_gain={:.2}, qty={}", + region_id, extra_revenue, transport_cost, net_gain, qty + ); + if net_gain <= 0.0 { + eprintln!( + "[DirectorWorker] Region {}: Netto-Gewinn <= 0, überspringe", + region_id + ); continue; } if net_gain > best_gain { + eprintln!( + "[DirectorWorker] Region {}: Neuer bester Transport (Gewinn {:.2})", + region_id, net_gain + ); best_gain = net_gain; best_target_region = Some(region_id); best_quantity = qty;