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;