# steel_prices_service - 钢材价格服务 > **项目状态**: 🌱 初始阶段(数据准备完成,待开发服务层) > > **最后更新**: 2026-01-05 16:13:47 --- ## 变更记录 (Changelog) ### 2026-01-05 16:13:47 - 初始化根级文档 - 完成项目结构分析 - 识别数据模块并生成模块文档 - 创建 Mermaid 架构图 - 定义开发路线图 --- ## 项目愿景 **steel_prices_service** 是一个钢材价格数据解析与查询服务,旨在: 1. **数据整合**: 从多个来源(我的钢铁网、钢厂官方、行业协会)采集钢材价格数据 2. **标准化存储**: 使用 MySQL 数据库统一存储和管理价格数据 3. **高效查询**: 提供快速、灵活的价格查询 API 4. **实时更新**: 支持定时任务自动采集和更新价格数据 ### 核心价值 - 为钢材采购决策提供实时市场价格参考 - 支持历史价格趋势分析 - 多地区、多钢厂价格对比 - 自动化数据采集减少人工成本 --- ## 架构总览 ### 技术栈(规划中) 根据项目 README 和数据结构,预计技术栈为: - **后端框架**: Express.js (Node.js) - **数据库**: MySQL - **数据格式**: JSON(导入格式) - **API 设计**: RESTful > 注意:项目目前处于数据准备阶段,尚未实现服务代码。 ### 系统架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ 数据采集层 │ │ 我的钢铁网 │ 钢厂官方 │ 行业协会 │ 手动导入 │ └─────────────────────┬───────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 数据处理层 │ │ JSON 解析 │ 数据清洗 │ 验证 │ 转换 │ └─────────────────────┬───────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 数据存储层 │ │ MySQL 数据库 │ │ 价格表 │ 索引优化 │ 定时归档 │ └─────────────────────┬───────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 服务接口层 │ │ Express.js REST API │ │ 价格查询 │ 趋势分析 │ 数据导出 │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 模块结构图 ```mermaid graph TD Root["steel_prices_service
(根目录)"] Root --> Data["data/
📦 数据模块"] click Data "d:/Code/steel_prices_service/data/CLAUDE.md" "查看 data 模块文档" style Root fill:#e1f5ff,stroke:#01579b,stroke-width:3px style Data fill:#fff9c4,stroke:#f57f17,stroke-width:2px ``` --- ## 模块索引 | 模块名 | 路径 | 职责 | 状态 | 文档 | |--------|------|------|------|------| | **数据模块** | `data/` | 存储和管理钢材价格原始数据(JSON 格式) | ✅ 已完成 | [查看文档](./data/CLAUDE.md) | | **服务模块** | (待创建) | Express.js 服务、API 接口 | ⏳ 待开发 | - | | **数据导入** | (待创建) | JSON 解析、数据清洗、数据库导入 | ⏳ 待开发 | - | | **测试模块** | (待创建) | 单元测试、集成测试 | ⏳ 待开发 | - | --- ## 数据资产 ### 当前数据 | 数据源 | 文件 | 记录数 | 地区覆盖 | 更新日期 | |--------|------|--------|----------|----------| | **我的钢铁网** | `data/钢材网架.json` | 211+ 条 | 重庆、成都、广州、南宁 | 2026-01-05 | | **德钢指导价** | `data/钢厂指导价.json` | 29,987 条 | 云南省内(玉溪、昭通等) | 2025-09-04 | | **云南钢协** | `data/刚协指导价.json` | 900 条 | 昆明、玉溪、楚雄、大理 | 2026-01-05 | ### 数据模型 所有价格数据遵循统一的结构,包含以下关键字段: - **商品信息**: 材质 (GOODS_MATERIAL)、规格 (GOODS_SPEC)、品名 (PARTSNAME_NAME) - **价格信息**: 挂牌价、钢厂价、涨跌幅 - **来源信息**: 钢厂 (PRODUCTAREA_NAME)、地区 (PR_PRICE_REGION)、来源 (PR_PRICE_SOURCE) - **时间信息**: 价格日期 (PIRCE_DATE) - **唯一标识**: PRICE_ID 详细数据结构请参考 [data/CLAUDE.md](./data/CLAUDE.md) --- ## 运行与开发 ### 当前状态 项目目前只有数据文件,尚未搭建服务层代码。 ### 建议的开发环境 - **Node.js**: v18+ (推荐使用 LTS 版本) - **MySQL**: 8.0+ - **包管理器**: npm 或 yarn ### 推荐的项目结构 ``` steel_prices_service/ ├── data/ # 数据文件目录(已存在) │ ├── 钢材网架.json │ ├── 钢厂指导价.json │ └── 刚协指导价.json ├── src/ # 源代码目录(待创建) │ ├── app.js # Express 应用入口 │ ├── config/ # 配置文件 │ │ └── database.js # 数据库连接配置 │ ├── routes/ # API 路由 │ │ └── prices.js # 价格查询接口 │ ├── models/ # 数据模型 │ │ └── Price.js # 价格数据模型 │ ├── services/ # 业务逻辑 │ │ ├── parser.js # JSON 解析服务 │ │ ├── importer.js # 数据导入服务 │ │ └── query.js # 查询服务 │ └── utils/ # 工具函数 │ └── validator.js # 数据验证 ├── scripts/ # 脚本目录(待创建) │ └── import-data.js # 数据导入脚本 ├── tests/ # 测试目录(待创建) │ ├── unit/ # 单元测试 │ └── integration/ # 集成测试 ├── .env.example # 环境变量示例(待创建) ├── .gitignore # Git 忽略规则(待创建) ├── package.json # 项目配置(待创建) ├── README.md # 项目说明(已存在) └── CLAUDE.md # AI 文档(本文件) ``` ### 初始化步骤 1. **初始化 Node.js 项目** ```bash npm init -y ``` 2. **安装依赖** ```bash npm install express mysql2 dotenv cors npm install --save-dev nodemon jest ``` 3. **创建数据库表** ```sql CREATE TABLE steel_prices ( id BIGINT PRIMARY KEY AUTO_INCREMENT, price_id VARCHAR(64) UNIQUE NOT NULL COMMENT '价格唯一ID', goods_material VARCHAR(32) NOT NULL COMMENT '材质牌号', goods_spec VARCHAR(16) NOT NULL COMMENT '规格型号', partsname_name VARCHAR(32) NOT NULL COMMENT '品名', productarea_name VARCHAR(64) NOT NULL COMMENT '产地/钢厂', price_source VARCHAR(32) NOT NULL COMMENT '价格来源', price_region VARCHAR(32) NOT NULL COMMENT '价格地区', pntree_name VARCHAR(32) NOT NULL COMMENT '分类名称', price_date DATETIME NOT NULL COMMENT '价格日期', make_price INT COMMENT '钢厂价(元/吨)', hang_price INT COMMENT '挂牌价(元/吨)', last_make_price INT COMMENT '上次钢厂价', last_hang_price INT COMMENT '上次挂牌价', make_price_updw VARCHAR(8) COMMENT '钢厂价涨跌', hang_price_updw VARCHAR(8) COMMENT '挂牌价涨跌', operator_code VARCHAR(16) COMMENT '操作员代码', operator_name VARCHAR(32) COMMENT '操作员名称', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_price_date (price_date), INDEX idx_region_material (price_region, goods_material), INDEX idx_source_date (price_source, price_date) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='钢材价格表'; ``` 4. **配置环境变量** (.env) ```env DB_HOST=localhost DB_PORT=3306 DB_USER=root DB_PASSWORD=your_password DB_NAME=steel_prices PORT=3000 NODE_ENV=development ``` 5. **导入数据** ```bash node scripts/import-data.js ``` 6. **启动服务** ```bash npm start ``` --- ## 测试策略 ### 测试金字塔(建议) ``` ┌──────────────┐ / E2E 测试 \ (端到端测试) /__________________\ / 集成测试 (API) \ (API 接口测试) /______________________\ / 单元测试 (业务逻辑) \ (函数/类测试) /____________________________\ ``` ### 测试工具推荐 - **单元测试**: Jest + Supertest - **集成测试**: Jest + Test Database - **E2E 测试**: Cypress 或 Playwright - **API 测试**: Postman + Newman ### 关键测试场景 1. **数据导入测试** - JSON 文件解析正确性 - 数据验证与清洗 - 重复数据处理 - 批量插入性能 2. **API 接口测试** - 价格查询接口(按地区、材质、日期) - 数据统计接口(平均价、涨跌幅) - 错误处理(无效参数、数据不存在) 3. **性能测试** - 大数据量查询响应时间 - 并发请求处理能力 - 数据库索引效果验证 --- ## 编码规范 ### JavaScript/Node.js 规范(建议) 1. **代码风格** - 使用 ESLint + Prettier - 采用 Airbnb Style Guide - 强制使用分号 2. **命名约定** - 变量和函数:camelCase - 类和构造函数:PascalCase - 常量:UPPER_SNAKE_CASE - 文件名:kebab-case 3. **注释规范** - JSDoc 格式文档注释 - 关键业务逻辑必须注释 - API 接口使用 OpenAPI/Swagger 文档 4. **错误处理** - 使用 async/await + try-catch - 统一错误中间件 - 详细的错误日志 ### SQL 规范 - 表名:snake_case - 字段名:snake_case - 索引名:idx_表名_字段名 - 必须添加字段注释 --- ## AI 使用指引 ### 给 AI 的提示词模板 #### 1. 数据库相关 ``` "请根据 data/CLAUDE.md 中的数据结构,设计 MySQL 建表语句" ``` #### 2. API 开发 ``` "请创建 Express.js 路由,实现按地区和材质查询价格的功能" ``` #### 3. 数据导入 ``` "请编写 Node.js 脚本,将 data/*.json 文件导入到 MySQL 数据库" ``` #### 4. 性能优化 ``` "请优化价格查询接口,支持快速查询最近30天的平均价格" ``` ### 项目上下文快速加载 在与 AI 对话时,可以这样说: > "我正在开发 steel_prices_service 项目,这是一个钢材价格查询服务。项目使用 Express.js + MySQL,数据文件在 data/ 目录下。请参考根目录的 CLAUDE.md 了解项目结构。" --- ## 开发路线图 ### 第一阶段:基础搭建(预计 1-2 周) - [ ] 初始化 Node.js 项目 - [ ] 创建数据库表结构 - [ ] 实现 JSON 数据解析模块 - [ ] 实现数据导入脚本 - [ ] 基础 API 框架搭建 ### 第二阶段:核心功能(预计 2-3 周) - [ ] 价格查询 API(按地区、材质、日期) - [ ] 价格统计 API(平均价、最高价、最低价) - [ ] 趋势分析 API(涨跌幅、历史曲线) - [ ] 数据验证与清洗逻辑 - [ ] 错误处理与日志记录 ### 第三阶段:增强功能(预计 1-2 周) - [ ] 定时任务自动采集数据 - [ ] 数据变更通知 - [ ] 数据导出功能(Excel、CSV) - [ ] API 文档(Swagger) - [ ] 性能优化与缓存 ### 第四阶段:测试与部署(预计 1 周) - [ ] 单元测试覆盖 - [ ] 集成测试 - [ ] Docker 容器化 - [ ] CI/CD 流程 - [ ] 生产环境部署 --- ## 常见问题 (FAQ) ### Q: 为什么选择 Express.js 而不是其他框架? A: Express.js 是成熟稳定的 Node.js 框架,具有以下优势: - 轻量级,灵活性高 - 中间件生态丰富 - 社区活跃,文档完善 - 适合构建 RESTful API 如果需要更完整的解决方案,也可以考虑 NestJS 或 Fastify。 ### Q: 数据库如何选择? A: 根据项目特点,MySQL 是合适的选择: - 结构化数据,关系清晰 - 事务支持强 - 索引优化成熟 - 运维成本低 未来如果数据量激增,可考虑: - 分库分表(Sharding) - 时序数据库(InfluxDB) - 数据仓库(ClickHouse) ### Q: 如何保证数据一致性? A: 建议采用以下策略: 1. 使用 PRICE_ID 作为唯一标识,避免重复导入 2. 使用 UPSERT 语句(INSERT ... ON DUPLICATE KEY UPDATE) 3. 添加数据校验和(checksum) 4. 记录数据导入日志 ### Q: 如何处理大量历史数据? A: 建议采用以下策略: 1. 按日期分表(如 `steel_prices_2025_01`) 2. 定期归档历史数据(如 2 年前的数据) 3. 使用冷热数据分离(热数据在 SSD,冷数据在 HDD) 4. 考虑使用时序数据库或数据仓库 --- ## 相关资源 ### 技术文档 - [Express.js 官方文档](https://expressjs.com/) - [MySQL 文档](https://dev.mysql.com/doc/) - [Node.js 最佳实践](https://github.com/goldbergyoni/nodebestpractices) ### 相关工具 - **API 测试**: Postman, Insomnia - **数据库管理**: MySQL Workbench, DBeaver - **代码质量**: ESLint, Prettier - **版本控制**: Git + GitHub --- ## 贡献指南 ### 开发流程 1. Fork 本仓库 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 开启 Pull Request ### Commit 规范 遵循 Conventional Commits 规范: ``` feat: 添加价格查询接口 fix: 修复数据导入时的编码问题 docs: 更新 API 文档 style: 代码格式化 refactor: 重构数据验证逻辑 test: 添加单元测试 chore: 更新依赖包 ``` --- ## 联系方式 - **项目位置**: `d:\Code\steel_prices_service` - **文档维护**: AI Context Architect - **最后更新**: 2026-01-05 16:13:47 --- **导航**: [data/ 模块文档](./data/CLAUDE.md) | [GitHub](https://github.com) | [API 文档](#) (待开发)