- Added TaskCategorizationService to categorize tasks based on keywords in descriptions. - Implemented fuzzy matching using Levenshtein distance for better keyword matching. - Introduced caching for categories and keywords to optimize database queries. - Added methods for categorizing individual tasks and batch processing for project tasks. - Created SQL migration scripts for task_categories and category_keywords tables. - Included default categories and keywords for initial setup. - Enhanced project_tasks table with new columns for categorization data. - Added statistics export functionality for category performance analysis.
55 lines
2.6 KiB
SQL
55 lines
2.6 KiB
SQL
-- Feature 2: Geometry Calculation Improvements
|
|
-- Date: 2025-01-XX
|
|
-- Description: Forbedrer tag geometri beregning med stern-til-kip højde, vinkel og spærafstand
|
|
|
|
-- Rename wall_height to stern_to_ridge_height for klarhed
|
|
ALTER TABLE roof_geometry
|
|
CHANGE COLUMN wall_height stern_to_ridge_height DECIMAL(8,2) DEFAULT 0.00 COMMENT 'Højde fra stern til kip i meter';
|
|
|
|
-- Tilføj nye felter til geometri beregning
|
|
ALTER TABLE roof_geometry
|
|
ADD COLUMN roof_angle_degrees DECIMAL(5,2) DEFAULT NULL COMMENT 'Tagvinkel i grader (alternativ til roof_pitch)',
|
|
ADD COLUMN spaer_distance DECIMAL(5,2) DEFAULT 0.6 COMMENT 'Afstand mellem spær i meter (0.6m eller 1.0m standard)',
|
|
ADD COLUMN spaer_count INT DEFAULT NULL COMMENT 'Antal spær beregnet baseret på længde og afstand',
|
|
ADD COLUMN total_spaer_length DECIMAL(10,2) DEFAULT NULL COMMENT 'Total længde af alle spær i meter',
|
|
ADD COLUMN allow_angle_edit BOOLEAN DEFAULT TRUE COMMENT 'Om vinkel kan redigeres uden at nulstille andre værdier',
|
|
ADD COLUMN calculation_method ENUM('pitch', 'angle', 'manual') DEFAULT 'pitch' COMMENT 'Metode brugt til beregning af taggeometri',
|
|
ADD COLUMN actual_spaer_distance DECIMAL(5,2) DEFAULT NULL COMMENT 'Faktisk spærafstand efter beregning';
|
|
|
|
-- Tilføj index til ofte brugte søgefelter
|
|
ALTER TABLE roof_geometry
|
|
ADD INDEX idx_roof_angle (roof_angle_degrees),
|
|
ADD INDEX idx_calculation_method (calculation_method);
|
|
|
|
-- Opdater eksisterende records med default værdier
|
|
UPDATE roof_geometry
|
|
SET
|
|
spaer_distance = 0.6,
|
|
allow_angle_edit = TRUE,
|
|
calculation_method = 'pitch'
|
|
WHERE spaer_distance IS NULL;
|
|
|
|
-- Beregn roof_angle_degrees baseret på eksisterende roof_pitch (hvis muligt)
|
|
UPDATE roof_geometry
|
|
SET roof_angle_degrees = DEGREES(ATAN(roof_pitch))
|
|
WHERE roof_pitch IS NOT NULL AND roof_angle_degrees IS NULL;
|
|
|
|
-- Beregn spær count baseret på længde (hvis muligt)
|
|
UPDATE roof_geometry
|
|
SET spaer_count = CEIL(length_main / spaer_distance) + 1
|
|
WHERE length_main IS NOT NULL AND spaer_distance IS NOT NULL AND spaer_count IS NULL;
|
|
|
|
-- Beregn actual_spaer_distance baseret på faktisk antal spær
|
|
UPDATE roof_geometry
|
|
SET actual_spaer_distance = length_main / (spaer_count - 1)
|
|
WHERE length_main IS NOT NULL AND spaer_count > 1 AND actual_spaer_distance IS NULL;
|
|
|
|
-- Vis status
|
|
SELECT 'Feature 2 Migration Complete!' as Status;
|
|
SELECT
|
|
COUNT(*) as total_records,
|
|
SUM(CASE WHEN roof_angle_degrees IS NOT NULL THEN 1 ELSE 0 END) as records_with_angle,
|
|
SUM(CASE WHEN spaer_count IS NOT NULL THEN 1 ELSE 0 END) as records_with_spaer_count,
|
|
AVG(spaer_distance) as avg_spaer_distance
|
|
FROM roof_geometry;
|