Add vehicle repair automation in DirectorWorker: Implement functionality to automatically repair vehicles based on their condition and region. Update SQL queries to support vehicle selection and repair operations, enhancing the Director's capabilities in managing vehicle maintenance.

This commit is contained in:
Torsten Schulz (local)
2025-12-22 15:07:02 +01:00
parent fce7400303
commit 08563c956c
2 changed files with 146 additions and 1 deletions

View File

@@ -72,7 +72,14 @@ SELECT sell_cost, sell_cost AS original_sell_cost FROM falukant_type.product WHE
"#;
pub const QUERY_GET_DIRECTORS: &str = r#"
SELECT d.may_produce, d.may_sell, d.may_start_transport, b.id AS branch_id, fu.id AS falukantUserId, d.id
SELECT
d.may_produce,
d.may_sell,
d.may_start_transport,
d.may_repair_vehicles,
b.id AS branch_id,
fu.id AS falukant_user_id,
d.id
FROM falukant_data.director d
JOIN falukant_data.falukant_user fu ON fu.id = d.employer_user_id
JOIN falukant_data.character c ON c.id = d.director_character_id
@@ -80,6 +87,40 @@ JOIN falukant_data.branch b ON b.region_id = c.region_id AND b.falukant_user_id
WHERE current_time BETWEEN '08:00:00' AND '17:00:00';
"#;
// Director: vehicle repair automation
pub const QUERY_GET_VEHICLES_TO_REPAIR_IN_REGION: &str = r#"
SELECT
v.id AS vehicle_id,
v.condition,
vt.cost,
COALESCE(vt.build_time_minutes, 0) AS build_time_minutes
FROM falukant_data.vehicle v
JOIN falukant_type.vehicle vt ON vt.id = v.vehicle_type_id
WHERE v.falukant_user_id = $1
AND v.region_id = $2
AND v.condition < 10
AND v.condition < 100
AND v.available_from <= NOW()
AND NOT EXISTS (
SELECT 1 FROM falukant_data.transport t WHERE t.vehicle_id = v.id
)
ORDER BY v.condition ASC, v.id ASC;
"#;
pub const QUERY_REPAIR_VEHICLE: &str = r#"
UPDATE falukant_data.vehicle v
SET condition = 100,
available_from = NOW() + (COALESCE(vt.build_time_minutes, 0) * INTERVAL '1 minute'),
updated_at = NOW()
FROM falukant_type.vehicle vt
WHERE vt.id = v.vehicle_type_id
AND v.id = $1
AND v.condition < 100
AND v.available_from <= NOW()
AND NOT EXISTS (SELECT 1 FROM falukant_data.transport t WHERE t.vehicle_id = v.id)
RETURNING v.id AS vehicle_id, v.available_from, COALESCE(vt.build_time_minutes, 0) AS build_time_minutes;
"#;
pub const QUERY_GET_BEST_PRODUCTION: &str = r#"
SELECT fdu.id falukant_user_id, CAST(fdu.money AS text) AS money, fdu.certificate, ftp.id product_id, ftp.label_tr, fdb.region_id,
(SELECT SUM(quantity) FROM falukant_data.stock fds WHERE fds.branch_id = fdb.id) AS stock_size,