# 数据库迁移说明 ## 工单处理过程记录系统迁移 ### 新增表:`work_order_process_history` ```sql CREATE TABLE IF NOT EXISTS work_order_process_history ( id INTEGER PRIMARY KEY AUTOINCREMENT, work_order_id INTEGER NOT NULL, processor_name VARCHAR(100) NOT NULL, processor_role VARCHAR(50), processor_region VARCHAR(50), process_content TEXT NOT NULL, action_type VARCHAR(50) NOT NULL, previous_status VARCHAR(50), new_status VARCHAR(50), assigned_module VARCHAR(50), process_time DATETIME NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (work_order_id) REFERENCES work_orders(id) ); CREATE INDEX idx_process_history_workorder ON work_order_process_history(work_order_id); CREATE INDEX idx_process_history_time ON work_order_process_history(process_time); ``` ### WorkOrder表新增字段 如果使用SQLite,可以使用以下SQL添加字段: ```sql -- 注意:SQLite不支持直接ALTER TABLE添加多个列,需要逐个添加 ALTER TABLE work_orders ADD COLUMN assigned_module VARCHAR(50); ALTER TABLE work_orders ADD COLUMN module_owner VARCHAR(100); ALTER TABLE work_orders ADD COLUMN dispatcher VARCHAR(100); ALTER TABLE work_orders ADD COLUMN dispatch_time DATETIME; ALTER TABLE work_orders ADD COLUMN region VARCHAR(50); ``` ### 使用Python脚本迁移(推荐) 创建迁移脚本 `migrate_process_history.py`: ```python # -*- coding: utf-8 -*- """ 数据库迁移脚本:添加工单处理过程记录表和相关字段 """ from src.core.database import db_manager from src.core.models import Base, WorkOrderProcessHistory from sqlalchemy import text def migrate_database(): """执行数据库迁移""" try: with db_manager.get_session() as session: # 创建新表 WorkOrderProcessHistory.__table__.create(db_manager.engine, checkfirst=True) # 检查并添加新字段(SQLite需要特殊处理) try: # 尝试添加字段(如果已存在会报错,可以忽略) session.execute(text("ALTER TABLE work_orders ADD COLUMN assigned_module VARCHAR(50)")) except Exception as e: print(f"字段 assigned_module 可能已存在: {e}") try: session.execute(text("ALTER TABLE work_orders ADD COLUMN module_owner VARCHAR(100)")) except Exception as e: print(f"字段 module_owner 可能已存在: {e}") try: session.execute(text("ALTER TABLE work_orders ADD COLUMN dispatcher VARCHAR(100)")) except Exception as e: print(f"字段 dispatcher 可能已存在: {e}") try: session.execute(text("ALTER TABLE work_orders ADD COLUMN dispatch_time DATETIME")) except Exception as e: print(f"字段 dispatch_time 可能已存在: {e}") try: session.execute(text("ALTER TABLE work_orders ADD COLUMN region VARCHAR(50)")) except Exception as e: print(f"字段 region 可能已存在: {e}") session.commit() print("数据库迁移完成!") except Exception as e: print(f"数据库迁移失败: {e}") raise if __name__ == "__main__": migrate_database() ``` ### 执行迁移 运行迁移脚本: ```bash python migrate_process_history.py ``` 或者直接在Python交互式环境中执行: ```python from migrate_process_history import migrate_database migrate_database() ``` ## 注意事项 1. **备份数据库**:在执行迁移前,请务必备份现有数据库 2. **SQLite限制**:如果使用SQLite,ALTER TABLE添加列的操作在某些情况下可能失败,如果字段已存在会报错 3. **数据迁移**:现有工单的处理过程历史记录(存储在`resolution`字段中的)不会自动迁移到新表,需要手动处理 4. **索引优化**:新表已包含必要的索引,如果数据量大可以考虑添加更多索引