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.

This commit is contained in:
Torsten Schulz (local)
2025-12-03 16:52:38 +01:00
parent d2c8b62156
commit 66b19fbe7c

View File

@@ -686,8 +686,17 @@ impl DirectorWorker {
let mut items: Vec<InventoryItem> =
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<i32> = 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;