feat: add database migration script for ops tables
This commit is contained in:
parent
bed5f88da7
commit
b24e0818f0
|
|
@ -0,0 +1,227 @@
|
|||
-- ============================================
|
||||
-- V3.0__ops_maintenance_and_energy.sql
|
||||
-- 运营管理模块 - 维保计划、维保任务、能耗监控
|
||||
-- ============================================
|
||||
|
||||
-- ============================================
|
||||
-- 维保计划表
|
||||
-- ============================================
|
||||
CREATE TABLE IF NOT EXISTS ops_maintenance_plan (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
project_id UUID NOT NULL,
|
||||
plan_code VARCHAR(50) UNIQUE NOT NULL,
|
||||
plan_name VARCHAR(100) NOT NULL,
|
||||
equipment_type VARCHAR(50),
|
||||
trigger_type VARCHAR(30) NOT NULL,
|
||||
trigger_value INTEGER,
|
||||
trigger_unit VARCHAR(20),
|
||||
maintenance_items TEXT,
|
||||
estimated_duration INTEGER,
|
||||
assigned_to UUID,
|
||||
sla_response_hours INTEGER,
|
||||
sla_complete_hours INTEGER,
|
||||
status VARCHAR(20) DEFAULT 'ACTIVE',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_maintenance_plan_project ON ops_maintenance_plan(project_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_maintenance_plan_status ON ops_maintenance_plan(status);
|
||||
CREATE INDEX IF NOT EXISTS idx_maintenance_plan_trigger ON ops_maintenance_plan(trigger_type);
|
||||
|
||||
-- ============================================
|
||||
-- 维保任务表
|
||||
-- ============================================
|
||||
CREATE TABLE IF NOT EXISTS ops_maintenance_task (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
project_id UUID NOT NULL,
|
||||
task_code VARCHAR(50) UNIQUE NOT NULL,
|
||||
plan_id UUID,
|
||||
equipment_id UUID,
|
||||
task_type VARCHAR(20) DEFAULT 'PREVENTIVE',
|
||||
trigger_type VARCHAR(30),
|
||||
maintenance_items TEXT,
|
||||
status VARCHAR(20) DEFAULT 'PENDING',
|
||||
assigned_to UUID,
|
||||
scheduled_date TIMESTAMP,
|
||||
actual_start_date TIMESTAMP,
|
||||
actual_end_date TIMESTAMP,
|
||||
labor_hours DECIMAL(10,2),
|
||||
materials_cost DECIMAL(12,2),
|
||||
remarks TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_maintenance_task_project ON ops_maintenance_task(project_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_maintenance_task_status ON ops_maintenance_task(status);
|
||||
CREATE INDEX IF NOT EXISTS idx_maintenance_task_equipment ON ops_maintenance_task(equipment_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_maintenance_task_assignee ON ops_maintenance_task(assigned_to);
|
||||
CREATE INDEX IF NOT EXISTS idx_maintenance_task_scheduled ON ops_maintenance_task(scheduled_date);
|
||||
|
||||
-- ============================================
|
||||
-- 能耗计量点表
|
||||
-- ============================================
|
||||
CREATE TABLE IF NOT EXISTS ops_energy_meter (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
project_id UUID NOT NULL,
|
||||
meter_code VARCHAR(50) UNIQUE NOT NULL,
|
||||
meter_name VARCHAR(100) NOT NULL,
|
||||
energy_type VARCHAR(20) NOT NULL,
|
||||
space_node_id UUID,
|
||||
installation_location VARCHAR(200),
|
||||
rated_capacity DECIMAL(10,2),
|
||||
unit_price DECIMAL(10,4),
|
||||
status VARCHAR(20) DEFAULT 'ACTIVE',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_energy_meter_project ON ops_energy_meter(project_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_energy_meter_type ON ops_energy_meter(energy_type);
|
||||
CREATE INDEX IF NOT EXISTS idx_energy_meter_space ON ops_energy_meter(space_node_id);
|
||||
|
||||
-- ============================================
|
||||
-- 能耗记录表
|
||||
-- ============================================
|
||||
CREATE TABLE IF NOT EXISTS ops_energy_consumption (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
project_id UUID NOT NULL,
|
||||
meter_id UUID NOT NULL,
|
||||
consumption_date DATE NOT NULL,
|
||||
previous_reading DECIMAL(12,2),
|
||||
current_reading DECIMAL(12,2) NOT NULL,
|
||||
consumption DECIMAL(12,2) NOT NULL,
|
||||
amount DECIMAL(10,2),
|
||||
recorded_by UUID,
|
||||
record_method VARCHAR(20) DEFAULT 'MANUAL',
|
||||
remarks TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_energy_consumption_meter ON ops_energy_consumption(meter_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_energy_consumption_date ON ops_energy_consumption(consumption_date);
|
||||
CREATE INDEX IF NOT EXISTS idx_energy_consumption_project ON ops_energy_consumption(project_id);
|
||||
|
||||
-- ============================================
|
||||
-- 备件分类表
|
||||
-- ============================================
|
||||
CREATE TABLE IF NOT EXISTS ops_spare_part_category (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
parent_id UUID,
|
||||
category_code VARCHAR(50) UNIQUE NOT NULL,
|
||||
category_name VARCHAR(100) NOT NULL,
|
||||
description VARCHAR(500),
|
||||
sort_order INTEGER DEFAULT 0,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_spare_part_category_parent ON ops_spare_part_category(parent_id);
|
||||
|
||||
-- ============================================
|
||||
-- 备件表
|
||||
-- ============================================
|
||||
CREATE TABLE IF NOT EXISTS ops_spare_part (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
project_id UUID NOT NULL,
|
||||
spare_part_code VARCHAR(50) UNIQUE NOT NULL,
|
||||
spare_part_name VARCHAR(100) NOT NULL,
|
||||
category_id UUID,
|
||||
specification VARCHAR(200),
|
||||
unit VARCHAR(20) NOT NULL,
|
||||
safe_stock INTEGER DEFAULT 0,
|
||||
current_stock INTEGER DEFAULT 0,
|
||||
unit_price DECIMAL(10,2),
|
||||
supplier VARCHAR(200),
|
||||
supplier_contact VARCHAR(100),
|
||||
location VARCHAR(200),
|
||||
remarks TEXT,
|
||||
status VARCHAR(20) DEFAULT 'ACTIVE',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_spare_part_project ON ops_spare_part(project_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_spare_part_category ON ops_spare_part(category_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_spare_part_stock ON ops_spare_part(current_stock);
|
||||
|
||||
-- ============================================
|
||||
-- 备件记录表
|
||||
-- ============================================
|
||||
CREATE TABLE IF NOT EXISTS ops_spare_part_record (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
record_code VARCHAR(50) UNIQUE NOT NULL,
|
||||
record_type VARCHAR(20) NOT NULL,
|
||||
spare_part_id UUID NOT NULL,
|
||||
quantity INTEGER NOT NULL,
|
||||
balance INTEGER NOT NULL,
|
||||
related_order_id UUID,
|
||||
recorded_by UUID,
|
||||
record_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
remarks TEXT
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_spare_part_record_part ON ops_spare_part_record(spare_part_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_spare_part_record_order ON ops_spare_part_record(related_order_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_spare_part_record_date ON ops_spare_part_record(record_date);
|
||||
|
||||
-- ============================================
|
||||
-- 设备故障历史表
|
||||
-- ============================================
|
||||
CREATE TABLE IF NOT EXISTS ops_equipment_failure_history (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
equipment_id UUID NOT NULL,
|
||||
failure_date TIMESTAMP NOT NULL,
|
||||
failure_type VARCHAR(50),
|
||||
failure_cause VARCHAR(200),
|
||||
failure_description TEXT,
|
||||
repair_start_time TIMESTAMP,
|
||||
repair_end_time TIMESTAMP,
|
||||
repair_duration DECIMAL(10,2),
|
||||
repair_cost DECIMAL(12,2),
|
||||
spare_parts_used TEXT,
|
||||
work_order_id UUID,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_equipment_failure_equipment ON ops_equipment_failure_history(equipment_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_equipment_failure_date ON ops_equipment_failure_history(failure_date);
|
||||
|
||||
-- ============================================
|
||||
-- 设备健康度表
|
||||
-- ============================================
|
||||
CREATE TABLE IF NOT EXISTS ops_equipment_health_score (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
equipment_id UUID NOT NULL,
|
||||
score_date DATE NOT NULL,
|
||||
health_score DECIMAL(5,2),
|
||||
mtbf DECIMAL(10,2),
|
||||
mttr DECIMAL(10,2),
|
||||
failure_count INTEGER,
|
||||
maintenance_completion_rate DECIMAL(5,2),
|
||||
alert_level VARCHAR(20) DEFAULT 'NORMAL',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_equipment_health_equipment ON ops_equipment_health_score(equipment_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_equipment_health_date ON ops_equipment_health_score(score_date);
|
||||
|
||||
-- ============================================
|
||||
-- 点检模板表
|
||||
-- ============================================
|
||||
CREATE TABLE IF NOT EXISTS ops_inspection_template (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
project_id UUID NOT NULL,
|
||||
template_code VARCHAR(50) UNIQUE NOT NULL,
|
||||
template_name VARCHAR(100) NOT NULL,
|
||||
equipment_type VARCHAR(50),
|
||||
inspection_items TEXT,
|
||||
estimated_duration INTEGER,
|
||||
status VARCHAR(20) DEFAULT 'ACTIVE',
|
||||
version INTEGER DEFAULT 1,
|
||||
created_by UUID,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_inspection_template_project ON ops_inspection_template(project_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_inspection_template_type ON ops_inspection_template(equipment_type);
|
||||
Loading…
Reference in New Issue