Files
steel_prices_service/Sale/swagger.json
2026-01-06 18:00:43 +08:00

975 lines
29 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"openapi": "3.0.0",
"info": {
"title": "Steel Prices Service API",
"version": "1.0.0",
"description": "\n 钢材价格查询与分析服务平台 API 文档\n\n ## 功能特性\n - 📊 **价格查询** - 按地区、材质、规格等多维度查询钢材价格\n - 🔍 **智能搜索** - 支持多条件组合搜索和分页\n - 📈 **统计分析** - 价格统计、趋势分析、均价计算\n - 💾 **数据导入** - 批量导入钢材价格数据\n - 🚀 **高性能** - 数据库索引优化,查询响应快速\n\n ## 数据源\n - 我的钢铁网(重庆、成都、广州、南宁)\n - 德钢指导价(云南地区)\n - 云南钢协(昆明、玉溪、楚雄、大理)\n\n ## 认证\n 当前版本无需认证,后续版本将添加 API Key 认证。\n ",
"contact": {
"name": "Steel Prices Service",
"email": "support@example.com"
},
"license": {
"name": "MIT",
"url": "https://opensource.org/licenses/MIT"
}
},
"servers": [
{
"url": "http://localhost:3000",
"description": "开发服务器"
},
{
"url": "https://api.steel-prices.com",
"description": "生产服务器"
}
],
"tags": [
{
"name": "Health",
"description": "健康检查和系统状态"
},
{
"name": "Prices",
"description": "价格查询、搜索和统计分析"
},
{
"name": "Data",
"description": "数据导入和管理"
}
],
"components": {
"schemas": {
"Price": {
"type": "object",
"description": "钢材价格数据模型",
"properties": {
"id": {
"type": "integer",
"description": "价格记录ID",
"example": 1
},
"region": {
"type": "string",
"description": "地区",
"example": "昆明"
},
"city": {
"type": "string",
"description": "城市",
"example": "昆明",
"nullable": true
},
"material": {
"type": "string",
"description": "材质",
"example": "HPB300"
},
"specification": {
"type": "string",
"description": "规格型号",
"example": "Φ8",
"nullable": true
},
"price": {
"type": "number",
"format": "decimal",
"description": "价格(元/吨)",
"example": 3840
},
"unit": {
"type": "string",
"description": "单位",
"example": "元/吨"
},
"date": {
"type": "string",
"format": "date",
"description": "价格日期",
"example": "2026-01-05"
},
"source": {
"type": "string",
"description": "数据来源",
"example": "云南钢协",
"nullable": true
},
"warehouse": {
"type": "string",
"description": "仓库/厂家",
"example": "玉昆",
"nullable": true
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "创建时间"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "更新时间"
}
},
"required": [
"region",
"material",
"price",
"date"
]
},
"SuccessResponse": {
"type": "object",
"properties": {
"success": {
"type": "boolean",
"example": true
},
"data": {
"type": "object"
}
}
},
"ErrorResponse": {
"type": "object",
"properties": {
"success": {
"type": "boolean",
"example": false
},
"message": {
"type": "string",
"description": "错误信息",
"example": "参数验证失败"
},
"statusCode": {
"type": "integer",
"description": "HTTP 状态码",
"example": 400
}
}
},
"Pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer",
"description": "当前页码",
"example": 1
},
"pageSize": {
"type": "integer",
"description": "每页数量",
"example": 20
},
"total": {
"type": "integer",
"description": "总记录数",
"example": 100
},
"totalPages": {
"type": "integer",
"description": "总页数",
"example": 5
}
}
},
"PriceStats": {
"type": "object",
"properties": {
"count": {
"type": "integer",
"description": "记录数量",
"example": 150
},
"avgPrice": {
"type": "number",
"description": "平均价格",
"example": 3950.5
},
"minPrice": {
"type": "number",
"description": "最低价格",
"example": 3500
},
"maxPrice": {
"type": "number",
"description": "最高价格",
"example": 4500
},
"stdDev": {
"type": "number",
"description": "标准差",
"example": 250.3
},
"trend": {
"type": "string",
"enum": [
"up",
"down",
"stable"
],
"description": "价格趋势",
"example": "up"
},
"changeRate": {
"type": "string",
"description": "变化率",
"example": "+2.5%"
}
}
},
"TrendData": {
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date",
"description": "日期",
"example": "2026-01-05"
},
"avgPrice": {
"type": "number",
"description": "当日平均价格",
"example": 3950.5
},
"minPrice": {
"type": "number",
"description": "当日最低价格",
"example": 3800
},
"maxPrice": {
"type": "number",
"description": "当日最高价格",
"example": 4100
}
}
}
},
"parameters": {
"RegionParam": {
"name": "region",
"in": "query",
"description": "地区名称(如:昆明、玉溪、大理等)",
"required": true,
"schema": {
"type": "string"
},
"example": "昆明"
},
"DateParam": {
"name": "date",
"in": "query",
"description": "价格日期格式YYYY-MM-DD",
"required": false,
"schema": {
"type": "string",
"format": "date"
},
"example": "2026-01-05"
},
"MaterialParam": {
"name": "material",
"in": "query",
"description": "材质HPB300、HRB400、HRB500E 等)",
"required": false,
"schema": {
"type": "string"
},
"example": "HPB300"
},
"DaysParam": {
"name": "days",
"in": "query",
"description": "统计天数1-3650天",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 3650
},
"example": 30
},
"PageParam": {
"name": "page",
"in": "query",
"description": "页码从1开始",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"default": 1
},
"example": 1
},
"PageSizeParam": {
"name": "pageSize",
"in": "query",
"description": "每页数量1-1000",
"required": false,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"default": 20
},
"example": 20
}
}
},
"paths": {
"/api/health": {
"get": {
"tags": [
"Health"
],
"summary": "健康检查",
"description": "检查服务是否正常运行",
"responses": {
"200": {
"description": "服务正常",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"success": {
"type": "boolean",
"example": true
},
"message": {
"type": "string",
"example": "Steel Prices Service is running"
},
"timestamp": {
"type": "string",
"format": "date-time"
}
}
}
}
}
}
}
}
},
"/api/prices/region": {
"get": {
"tags": [
"Prices"
],
"summary": "按地区查询价格",
"description": "根据地区和日期查询钢材价格数据,支持按日期筛选或查询该地区所有价格数据",
"parameters": [
{
"$ref": "#/components/parameters/RegionParam"
},
{
"$ref": "#/components/parameters/DateParam"
}
],
"responses": {
"200": {
"description": "查询成功",
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/SuccessResponse"
},
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Price"
}
},
"total": {
"type": "integer",
"description": "返回的记录数量",
"example": 50
}
}
}
]
}
}
}
},
"400": {
"description": "参数错误",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"500": {
"description": "服务器错误",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
},
"examples": {
"query_by_region_and_date": {
"summary": "查询昆明地区 2026-01-05 的价格",
"value": {
"region": "昆明",
"date": "2026-01-05"
}
},
"query_by_region_only": {
"summary": "查询昆明地区所有价格数据",
"value": {
"region": "昆明"
}
}
}
}
},
"/api/prices/search": {
"get": {
"tags": [
"Prices"
],
"summary": "搜索价格数据",
"description": "根据多个条件组合搜索钢材价格数据,支持分页返回结果。\n\n**搜索条件:**\n- material: 材质(支持模糊搜索)\n- specification: 规格型号(支持模糊搜索)\n- startDate: 开始日期\n- endDate: 结束日期\n- region: 地区\n\n**分页参数:**\n- page: 页码(默认 1\n- pageSize: 每页数量(默认 20最大 1000\n",
"parameters": [
{
"name": "material",
"in": "query",
"description": "材质支持模糊搜索HPB300、HRB400、HRB500E",
"required": false,
"schema": {
"type": "string"
},
"example": "HPB300"
},
{
"name": "specification",
"in": "query",
"description": "规格型号支持模糊搜索Φ8、Φ16、HRB400",
"required": false,
"schema": {
"type": "string"
},
"example": "Φ8"
},
{
"name": "startDate",
"in": "query",
"description": "开始日期格式YYYY-MM-DD",
"required": false,
"schema": {
"type": "string",
"format": "date"
},
"example": "2026-01-01"
},
{
"name": "endDate",
"in": "query",
"description": "结束日期格式YYYY-MM-DD",
"required": false,
"schema": {
"type": "string",
"format": "date"
},
"example": "2026-01-05"
},
{
"name": "region",
"in": "query",
"description": "地区",
"required": false,
"schema": {
"type": "string"
},
"example": "昆明"
},
{
"$ref": "#/components/parameters/PageParam"
},
{
"$ref": "#/components/parameters/PageSizeParam"
}
],
"responses": {
"200": {
"description": "搜索成功",
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/SuccessResponse"
},
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Price"
}
},
"pagination": {
"$ref": "#/components/schemas/Pagination"
}
}
}
]
}
}
}
},
"400": {
"description": "参数错误",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"500": {
"description": "服务器错误",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
},
"examples": {
"search_by_material": {
"summary": "按材质搜索",
"value": {
"material": "HPB300",
"page": 1,
"pageSize": 20
}
},
"search_by_date_range": {
"summary": "按日期范围搜索",
"value": {
"material": "HRB400",
"startDate": "2026-01-01",
"endDate": "2026-01-05",
"page": 1,
"pageSize": 50
}
}
}
}
},
"/api/prices/stats": {
"get": {
"tags": [
"Prices"
],
"summary": "获取价格统计",
"description": "获取钢材价格的统计数据,包括平均值、最大值、最小值、标准差等。\n\n**筛选条件:**\n- region: 指定地区\n- material: 指定材质\n- days: 统计最近 N 天的数据\n- startDate/endDate: 指定日期范围\n\n**统计指标:**\n- count: 记录数量\n- avgPrice: 平均价格\n- minPrice: 最低价格\n- maxPrice: 最高价格\n- stdDev: 标准差\n- trend: 价格趋势up/down/stable\n- changeRate: 变化率(相对于上一周期)\n",
"parameters": [
{
"name": "region",
"in": "query",
"description": "地区(可选)",
"required": false,
"schema": {
"type": "string"
},
"example": "昆明"
},
{
"name": "material",
"in": "query",
"description": "材质(可选,支持模糊搜索)",
"required": false,
"schema": {
"type": "string"
},
"example": "HPB300"
},
{
"$ref": "#/components/parameters/DaysParam"
},
{
"name": "startDate",
"in": "query",
"description": "开始日期格式YYYY-MM-DD",
"required": false,
"schema": {
"type": "string",
"format": "date"
},
"example": "2026-01-01"
},
{
"name": "endDate",
"in": "query",
"description": "结束日期格式YYYY-MM-DD",
"required": false,
"schema": {
"type": "string",
"format": "date"
},
"example": "2026-01-05"
}
],
"responses": {
"200": {
"description": "统计成功",
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/SuccessResponse"
},
{
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/PriceStats"
}
}
}
]
}
}
}
},
"400": {
"description": "参数错误",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"500": {
"description": "服务器错误",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
},
"examples": {
"stats_by_region_and_days": {
"summary": "统计昆明地区最近 30 天的 HPB300 价格",
"value": {
"region": "昆明",
"material": "HPB300",
"days": 30
}
},
"stats_by_date_range": {
"summary": "统计指定日期范围内的价格",
"value": {
"startDate": "2026-01-01",
"endDate": "2026-01-05"
}
}
}
}
},
"/api/prices/trend": {
"get": {
"tags": [
"Prices"
],
"summary": "获取价格趋势",
"description": "获取钢材价格的时间序列趋势数据,按日期分组统计。\n\n**筛选条件:**\n- region: 指定地区\n- material: 指定材质\n- days: 统计最近 N 天的数据\n\n**返回数据:**\n- date: 日期\n- avgPrice: 当日平均价格\n- minPrice: 当日最低价格\n- maxPrice: 当日最高价格\n\n**适用场景:**\n- 绘制价格走势图\n- 分析价格波动规律\n- 预测价格趋势\n",
"parameters": [
{
"name": "region",
"in": "query",
"description": "地区(可选)",
"required": false,
"schema": {
"type": "string"
},
"example": "昆明"
},
{
"name": "material",
"in": "query",
"description": "材质(可选,支持模糊搜索)",
"required": false,
"schema": {
"type": "string"
},
"example": "HPB300"
},
{
"$ref": "#/components/parameters/DaysParam"
}
],
"responses": {
"200": {
"description": "查询成功",
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/SuccessResponse"
},
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TrendData"
}
}
}
}
]
}
}
}
},
"400": {
"description": "参数错误",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"500": {
"description": "服务器错误",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
},
"examples": {
"trend_by_region": {
"summary": "获取昆明地区最近 30 天的价格趋势",
"value": {
"region": "昆明",
"days": 30
}
},
"trend_by_material": {
"summary": "获取 HPB300 最近 60 天的价格趋势",
"value": {
"material": "HPB300",
"days": 60
}
}
}
}
},
"/api/prices/import": {
"post": {
"tags": [
"Data"
],
"summary": "导入价格数据",
"description": "批量导入钢材价格数据到数据库。\n\n**请求体格式:**\n```json\n{\n \"prices\": [\n {\n \"region\": \"昆明\",\n \"city\": \"昆明\",\n \"material\": \"HPB300\",\n \"specification\": \"Φ8\",\n \"price\": 3840.00,\n \"unit\": \"元/吨\",\n \"date\": \"2026-01-05\",\n \"source\": \"云南钢协\",\n \"warehouse\": \"玉昆\"\n }\n ]\n}\n```\n\n**注意事项:**\n- 必填字段region, material, price, date\n- price 必须为数字类型\n- date 格式必须为 YYYY-MM-DD\n- 重复数据会自动更新\n",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"prices"
],
"properties": {
"prices": {
"type": "array",
"description": "价格数据数组",
"items": {
"type": "object",
"required": [
"region",
"material",
"price",
"date"
],
"properties": {
"region": {
"type": "string",
"description": "地区",
"example": "昆明"
},
"city": {
"type": "string",
"description": "城市",
"example": "昆明"
},
"material": {
"type": "string",
"description": "材质",
"example": "HPB300"
},
"specification": {
"type": "string",
"description": "规格型号",
"example": "Φ8"
},
"price": {
"type": "number",
"format": "decimal",
"description": "价格",
"example": 3840
},
"unit": {
"type": "string",
"description": "单位",
"example": "元/吨"
},
"date": {
"type": "string",
"format": "date",
"description": "日期",
"example": "2026-01-05"
},
"source": {
"type": "string",
"description": "数据来源",
"example": "云南钢协"
},
"warehouse": {
"type": "string",
"description": "仓库/厂家",
"example": "玉昆"
}
}
}
}
}
},
"examples": {
"single_record": {
"summary": "单条记录",
"value": {
"prices": [
{
"region": "昆明",
"city": "昆明",
"material": "HPB300",
"specification": "Φ8",
"price": 3840,
"unit": "元/吨",
"date": "2026-01-05",
"source": "云南钢协",
"warehouse": "玉昆"
}
]
}
},
"multiple_records": {
"summary": "多条记录",
"value": {
"prices": [
{
"region": "昆明",
"material": "HPB300",
"price": 3840,
"date": "2026-01-05",
"source": "云南钢协"
},
{
"region": "玉溪",
"material": "HRB400",
"price": 3750,
"date": "2026-01-05",
"source": "德钢指导价"
}
]
}
}
}
}
}
},
"responses": {
"200": {
"description": "导入成功",
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/SuccessResponse"
},
{
"type": "object",
"properties": {
"message": {
"type": "string",
"example": "成功导入 100 条数据"
},
"data": {
"type": "object",
"properties": {
"imported": {
"type": "integer",
"description": "实际导入的记录数",
"example": 100
}
}
}
}
}
]
}
}
}
},
"400": {
"description": "参数错误或数据格式错误",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"500": {
"description": "服务器错误",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
}
}
}