模块 B:种子数据生成器 (Seed Data Generator)
目标: 编写 CLI 脚本,一键生成“清华园”、“安徽省十五五”等示例工程的完整树形数据(含财务/资源节点),用于演示和测试。
前置条件:
- 模块 A 已完成(数据库字段已更新)
- Node.js 18+ 环境
- 熟悉 TypeScript 和 TypeORM
负责人: 一龙 状态: 待开始
1. 数据结构设计
1.1 清华园工程 (Template: Qinghuayuan 5021)
根节点: qh_5021_root
子结构:
qh_5021_root (总工程)
├── qh_edu (教育子工程)
│ ├── qh_reading (阅读习惯)
│ │ ├── behavior: 每天阅读 30 分钟 (budget: 0, cost: 0)
│ │ └── behavior: 购买绘本 (budget: 500, cost: 120) [资源节点]
│ └── qh_school (学校教育)
│ ├── qh_chinese (语文)
│ └── qh_math (数学)
├── qh_health (健康子工程)
│ └── behavior: 每天跳绳 500 下
└── qh_finance (家庭财务总控) [资源节点]
├── qh_fund_edu (教育基金) (budget: 50000, actual: 12500)
└── qh_fund_health (健康基金) (budget: 20000, actual: 3000)
1.2 安徽省十五五规划 (Template: Anhui 15th Plan)
根节点: anhui_15th_root
子结构:
anhui_15th_root
├── eco_dev (经济发展)
│ ├── new_energy (新能源产业)
│ │ └── byd_project (比亚迪园区工程)
│ │ ├── behavior: 一期厂房建设
│ │ └── behavior: 招聘 5000 人
│ └── bio_med (生物医药)
├── people_livelihood (民生改善)
└── tech_innovation (科技创新)
2. 执行步骤
Step 1: 创建种子脚本文件
文件: backend/src/seeders/qinghuayuan.seeder.ts
Step 2: 实现生成逻辑
- 定义树形数据结构 (JSON)。
- 递归函数
createNode(parentId, nodeData)。 - 批量插入数据库。
Step 3: 添加 CLI 命令
文件: backend/package.json
"scripts": {
"seed:qinghuayuan": "nest ts-node src/seeders/qinghuayuan.seeder.ts",
"seed:anhui15th": "nest ts-node src/seeders/anhui15th.seeder.ts"
}
Step 4: 运行并验证
npm run seed:qinghuayuan
curl "http://localhost:3000/api/v1/engineering/tree?tenantId=qh_5021"
3. 验收标准
- 运行脚本后,数据库中存在完整的树形数据。
- API 能正确返回带
budget和actual_cost的节点。 - 脚本可重复运行(先清理旧数据)。
4. 注意事项
- 幂等性: 脚本运行前先
TRUNCATE相关表,或检查节点是否存在。 - 性能: 使用 TypeORM 的
QueryBuilder批量插入,避免 N+1 问题。
下一步:模块 C (基础 API 增强)