Files
steel_prices_service/CLAUDE.md
2026-01-06 09:19:12 +08:00

15 KiB
Raw Permalink Blame History

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                           │
│  价格查询  │  趋势分析  │  数据导出                        │
└─────────────────────────────────────────────────────────────┘

模块结构图

graph TD
    Root["steel_prices_service<br/>(根目录)"]
    Root --> Data["data/<br/>📦 数据模块"]

    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 格式) 已完成 查看文档
服务模块 (待创建) 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


运行与开发

当前状态

项目目前只有数据文件,尚未搭建服务层代码。

建议的开发环境

  • 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 项目

    npm init -y
    
  2. 安装依赖

    npm install express mysql2 dotenv cors
    npm install --save-dev nodemon jest
    
  3. 创建数据库表

    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)

    DB_HOST=localhost
    DB_PORT=3306
    DB_USER=root
    DB_PASSWORD=your_password
    DB_NAME=steel_prices
    PORT=3000
    NODE_ENV=development
    
  5. 导入数据

    node scripts/import-data.js
    
  6. 启动服务

    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. 考虑使用时序数据库或数据仓库

相关资源

技术文档

相关工具

  • 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/ 模块文档 | GitHub | API 文档 (待开发)