From 7ae2f0c6c9a23639ed34b463bf1a1a70ee251e81 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Mon, 1 Dec 2025 10:37:05 +0100 Subject: [PATCH] Enhance money production calculation in DirectorWorker: Updated the logic to handle cases where available money is zero, allowing production limits to be determined by capacity instead. Added warning logging for unexpected zero money scenarios, improving error handling and visibility in production planning. --- src/worker/director.rs | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/worker/director.rs b/src/worker/director.rs index eac05a9..f46e959 100644 --- a/src/worker/director.rs +++ b/src/worker/director.rs @@ -472,12 +472,24 @@ impl DirectorWorker { // Stückkosten monetär berechnen. Da money ein f64 ist, arbeiten wir hier ebenfalls // mit Gleitkomma und runden erst am Ende auf eine ganze Stückzahl ab. let one_piece_cost = (plan.certificate * 6) as f64; - let max_money_production: i32 = if one_piece_cost > 0.0 { - // Anzahl Stück, die sich mit dem verfügbaren Geld finanzieren lassen - (plan.money / one_piece_cost).floor() as i32 - } else { - 0 - }; + let mut max_money_production: i32 = 0; + if one_piece_cost > 0.0 { + if plan.money > 0.0 { + // Anzahl Stück, die sich mit dem verfügbaren Geld finanzieren lassen + max_money_production = (plan.money / one_piece_cost).floor() as i32; + } else { + // Falls das Geld aus der DB unerwartet als 0 eingelesen wurde, aber + // eigentlich ausreichend Guthaben vorhanden ist (bekannter Migrationsfall), + // lassen wir die Geldbegrenzung vorläufig fallen und begrenzen nur über + // Lagerkapazität und Hard-Limit 300. + eprintln!( + "[DirectorWorker] Warnung: money=0 für falukant_user_id={}, \ + verwende nur Lagerkapazität als Limit.", + plan.falukant_user_id + ); + max_money_production = i32::MAX; + } + } let to_produce = free_capacity.min(max_money_production).min(300).max(0);