Verbessere SQL-Abfragen im Produktionsworker: Optimiere die Abfrage für abgeschlossene Produktionen und verbessere die Lesbarkeit der Preisberechnung.

This commit is contained in:
Torsten Schulz (local)
2025-12-13 12:17:00 +01:00
parent 10bc1e5a52
commit ce06b1a4f0

View File

@@ -8,6 +8,7 @@ pub const QUERY_GET_MONEY: &str = r#"
SELECT money FROM falukant_data.falukant_user WHERE id = $1; SELECT money FROM falukant_data.falukant_user WHERE id = $1;
"#; "#;
pub const QUERY_GET_RANDOM_USER: &str = r#" pub const QUERY_GET_RANDOM_USER: &str = r#"
SELECT id FROM falukant_data.falukant_user ORDER BY RANDOM() LIMIT 1; SELECT id FROM falukant_data.falukant_user ORDER BY RANDOM() LIMIT 1;
"#; "#;
@@ -1360,26 +1361,22 @@ pub const QUERY_GET_FINISHED_PRODUCTIONS: &str = r#"
p.quantity, p.quantity,
p.start_timestamp, p.start_timestamp,
pr.production_time, pr.production_time,
-- Aggregierte Qualitätsbewertung pro Produktion inkl. Wettereinfluss br.region_id,
MAX( br.falukant_user_id,
GREATEST(
0,
LEAST(
100,
MAX(
GREATEST(
0,
LEAST(
100,
ROUND( ROUND(
GREATEST(
0,
LEAST(
100,
( (
COALESCE(k.knowledge, 0) + COALESCE(k2.knowledge, 0) COALESCE(k.knowledge, 0) * 0.6
)::numeric + COALESCE(k2.knowledge, 0) * 0.3
+ COALESCE(pwe.quality_effect, 0) * 2.5 + COALESCE(pwe.worth_percent, 100) * 0.1
) )
) )
)::int )
) AS quality, )::int AS quality
FROM falukant_data.production p
JOIN falukant_type.product pr JOIN falukant_type.product pr
ON p.product_id = pr.id ON p.product_id = pr.id
JOIN falukant_data.branch br JOIN falukant_data.branch br
@@ -1389,27 +1386,15 @@ pub const QUERY_GET_FINISHED_PRODUCTIONS: &str = r#"
JOIN falukant_data.knowledge k JOIN falukant_data.knowledge k
ON p.product_id = k.product_id ON p.product_id = k.product_id
AND k.character_id = c.id AND k.character_id = c.id
JOIN falukant_data.stock s
ON s.branch_id = br.id
-- Optionaler Wettereinfluss: pro (Produkt, Wetter) genau ein Datensatz
LEFT JOIN falukant_type.product_weather_effect pwe
ON pwe.product_id = p.product_id
AND pwe.weather_type_id = p.weather_type_id
LEFT JOIN falukant_data.director d LEFT JOIN falukant_data.director d
ON d.employer_user_id = c.user_id ON d.employer_user_id = c.user_id
LEFT JOIN falukant_data.knowledge k2 LEFT JOIN falukant_data.knowledge k2
ON k2.character_id = d.director_character_id ON k2.character_id = d.director_character_id
AND k2.product_id = p.product_id AND k2.product_id = p.product_id
LEFT JOIN falukant_type.product_weather_effect pwe
ON pwe.product_id = p.product_id
AND pwe.weather_type_id = p.weather_type_id
WHERE p.start_timestamp + INTERVAL '1 minute' * pr.production_time <= NOW() WHERE p.start_timestamp + INTERVAL '1 minute' * pr.production_time <= NOW()
GROUP BY
p.id,
p.branch_id,
p.product_id,
p.quantity,
p.start_timestamp,
pr.production_time,
br.region_id,
br.falukant_user_id
ORDER BY p.start_timestamp; ORDER BY p.start_timestamp;
"#; "#;