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.

This commit is contained in:
Torsten Schulz (local)
2025-12-01 10:37:05 +01:00
parent cf874a7b8d
commit 7ae2f0c6c9

View File

@@ -472,12 +472,24 @@ impl DirectorWorker {
// Stückkosten monetär berechnen. Da money ein f64 ist, arbeiten wir hier ebenfalls // 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. // mit Gleitkomma und runden erst am Ende auf eine ganze Stückzahl ab.
let one_piece_cost = (plan.certificate * 6) as f64; let one_piece_cost = (plan.certificate * 6) as f64;
let max_money_production: i32 = if one_piece_cost > 0.0 { let mut max_money_production: i32 = 0;
// Anzahl Stück, die sich mit dem verfügbaren Geld finanzieren lassen if one_piece_cost > 0.0 {
(plan.money / one_piece_cost).floor() as i32 if plan.money > 0.0 {
} else { // Anzahl Stück, die sich mit dem verfügbaren Geld finanzieren lassen
0 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); let to_produce = free_capacity.min(max_money_production).min(300).max(0);