modify:新增小程序

This commit is contained in:
ECRZ
2026-01-06 18:00:43 +08:00
parent 498fa0e915
commit da4a055c1c
47 changed files with 7321 additions and 61 deletions

975
Sale/swagger.json Normal file
View File

@@ -0,0 +1,975 @@
{
"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"
}
}
}
}
}
}
}
}
}