86870f4610
## 重构目标
将高程数据管理从"数据集中心"模式重构为"文件中心"模式,去掉 ElevationDataset 概念,
扁平化为 ElevationFileRecord,每条记录对应一个高程文件。
## 主要变更
### 数据库层
- 新增 `elevation_file_record` 表,合并原 dataset 核心字段
- 更新 `elevation_apply_job` 和 `elevation_data_import_job`,添加 `file_record_id` 字段
- 创建数据迁移脚本 `001_add_elevation_file_record.sql`
- 保留旧表用于向后兼容
### 后端 API
- 新增 `/api/v1/elevation/records` 路由组(推荐使用)
- GET /records - 文件记录列表
- POST /records - 上传文件并创建记录(上传即创建)
- GET /records/{id} - 获取记录详情
- PATCH /records/{id} - 更新记录
- DELETE /records/{id} - 删除记录
- POST /records/{id}/analyze - 触发分析
- POST /records/{id}/terrain/build - 生成地形瓦片
- GET /records/{id}/preview - 预览数据
- 保留 `/api/v1/elevation/datasets` 路由用于向后兼容
- Apply API 支持 `file_record_id` 和 `dataset_id` 双 ID
### 后端代码
- 新增 `elevation_file_record_service.py` (601 行),包含完整 CRUD 和操作逻辑
- 新增模型 `ElevationFileRecord`
- 新增 Schema:FileRecordSummary, CreateRequest, UpdateRequest 等
- 新增 Celery 任务:
- `analyze_elevation_file_record_job`
- `build_elevation_file_record_terrain_job`
- 新增执行函数:
- `execute_file_record_analysis_job`
- `execute_file_record_terrain_build_job`
- 更新模型字段,支持双 ID 关联
### 前端
- 新增简化页面 `/admin/elevation-records` (542 行)
- 从原 1760 行简化到 542 行
- 上传即创建,无需先建数据集
- 每行直接对应一个文件
- 操作更直观
### 文档
- 新增 `REFACTOR_SUMMARY.md` 完整重构说明
- 新增 `api/migrations/README.md` 迁移指南
## 用户体验改进
旧流程(4步):
1. 创建数据集(填编码+名称)
2. 导入文件到数据集
3. 分析数据集
4. 预览/地形/回填
新流程(2步):
1. 上传文件(填来源+分辨率)→ 自动创建+分析
2. 预览/地形/回填
## 向后兼容
- 保留旧表和旧 API,新旧系统可并存
- Apply Job 同时支持新旧 ID
- 提供平滑迁移路径
## 技术指标
- 代码简化:前端从 1760 行 → 542 行(-69%)
- 概念简化:去除"数据集"中间层
- API 数量:新增 8 个文件记录端点
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.1 KiB
2.1 KiB
数据库迁移说明
本目录包含数据库迁移脚本,用于重构高程数据管理功能。
迁移文件
001_add_elevation_file_record.sql
目的: 将高程数据管理从数据集中心模式重构为文件中心模式
主要变更:
-
创建新表
elevation_file_record- 包含所有文件记录相关字段
- 每个文件对应一条记录
- 合并了原
elevation_dataset的核心字段
-
数据迁移
- 从
elevation_dataset迁移数据到elevation_file_record - 保留原有的 ID 以保持关联关系
- 从
-
更新关联表
elevation_apply_job添加file_record_id字段elevation_data_import_job添加file_record_id字段- 将现有的
dataset_id值复制到新字段
-
向后兼容
- 保留旧表和旧字段用于过渡期
- 创建兼容性视图
elevation_dataset_compat
执行迁移
# 使用 psql 执行迁移
psql -U your_user -d your_database -f 001_add_elevation_file_record.sql
# 或使用 Python 脚本执行
python -c "
from app.core.database import engine
with open('migrations/001_add_elevation_file_record.sql') as f:
sql = f.read()
with engine.begin() as conn:
conn.execute(sql)
"
回滚计划
如需回滚,执行以下操作:
- 停止使用新的
/recordsAPI - 删除
elevation_file_record表 - 删除
elevation_apply_job.file_record_id和elevation_data_import_job.file_record_id字段 - 继续使用原有的
/datasetsAPI
注意事项
- 迁移前务必备份数据库
- 迁移过程中保留旧表,确保可以回滚
- 完全迁移完成并测试通过后,再考虑删除旧表
- 新旧 API 可以并存一段时间,逐步切换
后续清理
当确认新系统运行稳定后,可执行清理:
-- 删除旧表
DROP TABLE IF EXISTS elevation_dataset_file_meta;
DROP TABLE IF EXISTS elevation_dataset CASCADE;
-- 删除旧字段
ALTER TABLE elevation_apply_job DROP COLUMN IF EXISTS dataset_id;
ALTER TABLE elevation_data_import_job DROP COLUMN IF EXISTS dataset_id;
-- 删除兼容性视图
DROP VIEW IF EXISTS elevation_dataset_compat;