120 lines
4.0 KiB
Markdown
120 lines
4.0 KiB
Markdown
|
|
# 数据库迁移说明
|
|||
|
|
|
|||
|
|
## 工单处理过程记录系统迁移
|
|||
|
|
|
|||
|
|
### 新增表:`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. **索引优化**:新表已包含必要的索引,如果数据量大可以考虑添加更多索引
|
|||
|
|
|