991 lines
22 KiB
Markdown
991 lines
22 KiB
Markdown
# 智能项目定价模型 - API 接口设计
|
||
|
||
> **版本**:v1.0
|
||
> **创建日期**:2026-01-19
|
||
> **最后更新**:2026-01-19
|
||
> **负责人**:待定
|
||
|
||
---
|
||
|
||
## 1. 接口规范
|
||
|
||
### 1.1 基础规范
|
||
|
||
| 项目 | 规范 |
|
||
|------|------|
|
||
| **协议** | HTTPS |
|
||
| **基础路径** | `/api/v1` |
|
||
| **数据格式** | JSON (UTF-8) |
|
||
| **时间格式** | ISO 8601 (`YYYY-MM-DDTHH:mm:ss`) |
|
||
| **时区** | Asia/Shanghai (UTC+8) |
|
||
| **认证方式** | Bearer Token (OAuth) |
|
||
|
||
### 1.2 请求头
|
||
|
||
```http
|
||
Content-Type: application/json
|
||
Authorization: Bearer <access_token>
|
||
Accept: application/json
|
||
```
|
||
|
||
### 1.3 响应格式
|
||
|
||
**成功响应**
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"message": "success",
|
||
"data": { ... }
|
||
}
|
||
```
|
||
|
||
**失败响应**
|
||
|
||
```json
|
||
{
|
||
"code": 10001,
|
||
"message": "参数错误:project_name 不能为空",
|
||
"data": null
|
||
}
|
||
```
|
||
|
||
**分页响应**
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"message": "success",
|
||
"data": {
|
||
"items": [ ... ],
|
||
"total": 100,
|
||
"page": 1,
|
||
"page_size": 20,
|
||
"total_pages": 5
|
||
}
|
||
}
|
||
```
|
||
|
||
### 1.4 错误码定义
|
||
|
||
| 错误码 | 说明 |
|
||
|--------|------|
|
||
| 0 | 成功 |
|
||
| 10001 | 参数错误 |
|
||
| 10002 | 数据不存在 |
|
||
| 10003 | 数据已存在 |
|
||
| 10004 | 操作不允许 |
|
||
| 20001 | 认证失败 |
|
||
| 20002 | 权限不足 |
|
||
| 20003 | Token 过期 |
|
||
| 30001 | 系统内部错误 |
|
||
| 30002 | 服务暂不可用 |
|
||
| 40001 | AI 服务调用失败 |
|
||
| 40002 | AI 服务超时 |
|
||
|
||
### 1.5 通用参数
|
||
|
||
**分页参数**
|
||
|
||
| 参数 | 类型 | 必填 | 默认 | 说明 |
|
||
|------|------|------|------|------|
|
||
| page | int | 否 | 1 | 页码 |
|
||
| page_size | int | 否 | 20 | 每页数量(最大100)|
|
||
|
||
**排序参数**
|
||
|
||
| 参数 | 类型 | 必填 | 默认 | 说明 |
|
||
|------|------|------|------|------|
|
||
| sort_by | string | 否 | created_at | 排序字段 |
|
||
| sort_order | string | 否 | desc | 排序方向:asc/desc |
|
||
|
||
---
|
||
|
||
## 2. 接口列表概览
|
||
|
||
### 2.1 基础数据管理
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| GET | `/categories` | 获取项目分类列表 |
|
||
| POST | `/categories` | 创建项目分类 |
|
||
| PUT | `/categories/{id}` | 更新项目分类 |
|
||
| DELETE | `/categories/{id}` | 删除项目分类 |
|
||
| GET | `/materials` | 获取耗材列表 |
|
||
| POST | `/materials` | 创建耗材 |
|
||
| PUT | `/materials/{id}` | 更新耗材 |
|
||
| DELETE | `/materials/{id}` | 删除耗材 |
|
||
| POST | `/materials/import` | 批量导入耗材 |
|
||
| GET | `/equipments` | 获取设备列表 |
|
||
| POST | `/equipments` | 创建设备 |
|
||
| PUT | `/equipments/{id}` | 更新设备 |
|
||
| DELETE | `/equipments/{id}` | 删除设备 |
|
||
| GET | `/staff-levels` | 获取人员级别列表 |
|
||
| POST | `/staff-levels` | 创建人员级别 |
|
||
| PUT | `/staff-levels/{id}` | 更新人员级别 |
|
||
| DELETE | `/staff-levels/{id}` | 删除人员级别 |
|
||
| GET | `/fixed-costs` | 获取固定成本列表 |
|
||
| POST | `/fixed-costs` | 创建固定成本 |
|
||
| PUT | `/fixed-costs/{id}` | 更新固定成本 |
|
||
| DELETE | `/fixed-costs/{id}` | 删除固定成本 |
|
||
|
||
### 2.2 成本核算模块
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| GET | `/projects` | 获取服务项目列表 |
|
||
| POST | `/projects` | 创建服务项目 |
|
||
| GET | `/projects/{id}` | 获取项目详情 |
|
||
| PUT | `/projects/{id}` | 更新项目 |
|
||
| DELETE | `/projects/{id}` | 删除项目 |
|
||
| GET | `/projects/{id}/cost-items` | 获取项目成本明细 |
|
||
| POST | `/projects/{id}/cost-items` | 添加成本明细 |
|
||
| PUT | `/projects/{id}/cost-items/{item_id}` | 更新成本明细 |
|
||
| DELETE | `/projects/{id}/cost-items/{item_id}` | 删除成本明细 |
|
||
| GET | `/projects/{id}/labor-costs` | 获取项目人工成本 |
|
||
| POST | `/projects/{id}/labor-costs` | 添加人工成本 |
|
||
| PUT | `/projects/{id}/labor-costs/{item_id}` | 更新人工成本 |
|
||
| DELETE | `/projects/{id}/labor-costs/{item_id}` | 删除人工成本 |
|
||
| POST | `/projects/{id}/calculate-cost` | 计算项目总成本 |
|
||
| GET | `/projects/{id}/cost-summary` | 获取成本汇总 |
|
||
|
||
### 2.3 市场行情模块
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| GET | `/competitors` | 获取竞品机构列表 |
|
||
| POST | `/competitors` | 创建竞品机构 |
|
||
| GET | `/competitors/{id}` | 获取竞品详情 |
|
||
| PUT | `/competitors/{id}` | 更新竞品机构 |
|
||
| DELETE | `/competitors/{id}` | 删除竞品机构 |
|
||
| GET | `/competitors/{id}/prices` | 获取竞品价格列表 |
|
||
| POST | `/competitors/{id}/prices` | 添加竞品价格 |
|
||
| PUT | `/competitor-prices/{id}` | 更新竞品价格 |
|
||
| DELETE | `/competitor-prices/{id}` | 删除竞品价格 |
|
||
| GET | `/benchmark-prices` | 获取标杆价格列表 |
|
||
| POST | `/benchmark-prices` | 创建标杆价格 |
|
||
| PUT | `/benchmark-prices/{id}` | 更新标杆价格 |
|
||
| DELETE | `/benchmark-prices/{id}` | 删除标杆价格 |
|
||
| POST | `/projects/{id}/market-analysis` | 执行市场分析 |
|
||
| GET | `/projects/{id}/market-analysis` | 获取市场分析结果 |
|
||
|
||
### 2.4 智能定价模块
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| GET | `/pricing-plans` | 获取定价方案列表 |
|
||
| POST | `/pricing-plans` | 创建定价方案 |
|
||
| GET | `/pricing-plans/{id}` | 获取定价方案详情 |
|
||
| PUT | `/pricing-plans/{id}` | 更新定价方案 |
|
||
| DELETE | `/pricing-plans/{id}` | 删除定价方案 |
|
||
| POST | `/projects/{id}/generate-pricing` | AI 生成定价建议 |
|
||
| POST | `/projects/{id}/simulate-strategy` | 模拟定价策略 |
|
||
| GET | `/pricing-plans/{id}/export` | 导出定价报告 |
|
||
|
||
### 2.5 利润模拟模块
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| GET | `/profit-simulations` | 获取利润模拟列表 |
|
||
| POST | `/profit-simulations` | 创建利润模拟 |
|
||
| GET | `/profit-simulations/{id}` | 获取模拟详情 |
|
||
| DELETE | `/profit-simulations/{id}` | 删除模拟记录 |
|
||
| POST | `/pricing-plans/{id}/simulate-profit` | 执行利润模拟 |
|
||
| POST | `/profit-simulations/{id}/sensitivity` | 敏感性分析 |
|
||
| GET | `/profit-simulations/{id}/sensitivity` | 获取敏感性分析结果 |
|
||
| GET | `/pricing-plans/{id}/breakeven` | 获取盈亏平衡分析 |
|
||
|
||
### 2.6 仪表盘与统计
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| GET | `/dashboard/summary` | 仪表盘概览数据 |
|
||
| GET | `/dashboard/cost-trend` | 成本趋势 |
|
||
| GET | `/dashboard/market-trend` | 市场价格趋势 |
|
||
| GET | `/statistics/ai-usage` | AI 使用统计 |
|
||
|
||
### 2.7 系统接口
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| GET | `/health` | 健康检查 |
|
||
| GET | `/me` | 当前用户信息 |
|
||
|
||
---
|
||
|
||
## 3. 接口详细设计
|
||
|
||
### 3.1 健康检查
|
||
|
||
#### GET `/health`
|
||
|
||
**描述**:检查服务健康状态
|
||
|
||
**认证**:不需要
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"message": "success",
|
||
"data": {
|
||
"status": "healthy",
|
||
"version": "1.0.0",
|
||
"database": "connected",
|
||
"timestamp": "2026-01-19T10:00:00"
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 3.2 服务项目
|
||
|
||
#### GET `/projects`
|
||
|
||
**描述**:获取服务项目列表
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| page | int | 否 | 页码,默认 1 |
|
||
| page_size | int | 否 | 每页数量,默认 20 |
|
||
| category_id | int | 否 | 分类筛选 |
|
||
| keyword | string | 否 | 关键词搜索(名称/编码)|
|
||
| is_active | bool | 否 | 是否启用 |
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"message": "success",
|
||
"data": {
|
||
"items": [
|
||
{
|
||
"id": 1,
|
||
"project_code": "PRJ001",
|
||
"project_name": "光子嫩肤",
|
||
"category_id": 3,
|
||
"category_name": "光电类",
|
||
"description": "IPL 光子嫩肤项目",
|
||
"duration_minutes": 60,
|
||
"is_active": true,
|
||
"cost_summary": {
|
||
"total_cost": 280.50,
|
||
"material_cost": 120.00,
|
||
"equipment_cost": 50.50,
|
||
"labor_cost": 80.00,
|
||
"fixed_cost_allocation": 30.00
|
||
},
|
||
"created_at": "2026-01-15T10:00:00",
|
||
"updated_at": "2026-01-15T10:00:00"
|
||
}
|
||
],
|
||
"total": 50,
|
||
"page": 1,
|
||
"page_size": 20,
|
||
"total_pages": 3
|
||
}
|
||
}
|
||
```
|
||
|
||
#### POST `/projects`
|
||
|
||
**描述**:创建服务项目
|
||
|
||
**请求体**:
|
||
|
||
```json
|
||
{
|
||
"project_code": "PRJ002",
|
||
"project_name": "水光针",
|
||
"category_id": 2,
|
||
"description": "水光针注射项目",
|
||
"duration_minutes": 45,
|
||
"is_active": true
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"message": "创建成功",
|
||
"data": {
|
||
"id": 2,
|
||
"project_code": "PRJ002",
|
||
"project_name": "水光针",
|
||
"category_id": 2,
|
||
"description": "水光针注射项目",
|
||
"duration_minutes": 45,
|
||
"is_active": true,
|
||
"created_at": "2026-01-19T10:00:00"
|
||
}
|
||
}
|
||
```
|
||
|
||
#### GET `/projects/{id}`
|
||
|
||
**描述**:获取项目详情(含成本明细)
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"message": "success",
|
||
"data": {
|
||
"id": 1,
|
||
"project_code": "PRJ001",
|
||
"project_name": "光子嫩肤",
|
||
"category_id": 3,
|
||
"category_name": "光电类",
|
||
"description": "IPL 光子嫩肤项目",
|
||
"duration_minutes": 60,
|
||
"is_active": true,
|
||
"cost_items": [
|
||
{
|
||
"id": 1,
|
||
"item_type": "material",
|
||
"item_id": 5,
|
||
"item_name": "冷凝胶",
|
||
"quantity": 20,
|
||
"unit": "ml",
|
||
"unit_cost": 2.00,
|
||
"total_cost": 40.00
|
||
},
|
||
{
|
||
"id": 2,
|
||
"item_type": "equipment",
|
||
"item_id": 1,
|
||
"item_name": "光子仪",
|
||
"quantity": 1,
|
||
"unit": "次",
|
||
"unit_cost": 50.50,
|
||
"total_cost": 50.50
|
||
}
|
||
],
|
||
"labor_costs": [
|
||
{
|
||
"id": 1,
|
||
"staff_level_id": 2,
|
||
"level_name": "中级美容师",
|
||
"duration_minutes": 60,
|
||
"hourly_rate": 50.00,
|
||
"labor_cost": 50.00
|
||
}
|
||
],
|
||
"cost_summary": {
|
||
"material_cost": 120.00,
|
||
"equipment_cost": 50.50,
|
||
"labor_cost": 80.00,
|
||
"fixed_cost_allocation": 30.00,
|
||
"total_cost": 280.50,
|
||
"calculated_at": "2026-01-19T09:00:00"
|
||
},
|
||
"created_at": "2026-01-15T10:00:00",
|
||
"updated_at": "2026-01-15T10:00:00"
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 3.3 成本计算
|
||
|
||
#### POST `/projects/{id}/calculate-cost`
|
||
|
||
**描述**:计算并保存项目总成本
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| fixed_cost_allocation_method | string | 否 | 分摊方式:count/revenue/duration,默认 count |
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"message": "计算完成",
|
||
"data": {
|
||
"project_id": 1,
|
||
"project_name": "光子嫩肤",
|
||
"cost_breakdown": {
|
||
"material_cost": {
|
||
"items": [
|
||
{"name": "冷凝胶", "quantity": 20, "unit_cost": 2.00, "total": 40.00},
|
||
{"name": "一次性床单", "quantity": 1, "unit_cost": 5.00, "total": 5.00}
|
||
],
|
||
"subtotal": 120.00
|
||
},
|
||
"equipment_cost": {
|
||
"items": [
|
||
{"name": "光子仪", "depreciation_per_use": 50.50, "total": 50.50}
|
||
],
|
||
"subtotal": 50.50
|
||
},
|
||
"labor_cost": {
|
||
"items": [
|
||
{"level": "中级美容师", "duration_minutes": 60, "hourly_rate": 50.00, "total": 50.00},
|
||
{"level": "高级美容师", "duration_minutes": 30, "hourly_rate": 80.00, "total": 40.00}
|
||
],
|
||
"subtotal": 80.00
|
||
},
|
||
"fixed_cost_allocation": {
|
||
"method": "count",
|
||
"total_fixed_cost": 30000.00,
|
||
"project_count": 1000,
|
||
"allocation": 30.00
|
||
}
|
||
},
|
||
"total_cost": 280.50,
|
||
"min_price_suggestion": 280.50,
|
||
"calculated_at": "2026-01-19T10:30:00"
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 3.4 市场分析
|
||
|
||
#### POST `/projects/{id}/market-analysis`
|
||
|
||
**描述**:执行市场价格分析
|
||
|
||
**请求体**:
|
||
|
||
```json
|
||
{
|
||
"competitor_ids": [1, 2, 3],
|
||
"include_benchmark": true
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"message": "分析完成",
|
||
"data": {
|
||
"project_id": 1,
|
||
"project_name": "光子嫩肤",
|
||
"analysis_date": "2026-01-19",
|
||
"competitor_count": 5,
|
||
"price_statistics": {
|
||
"min_price": 380.00,
|
||
"max_price": 1280.00,
|
||
"avg_price": 680.00,
|
||
"median_price": 580.00,
|
||
"std_deviation": 220.50
|
||
},
|
||
"price_distribution": {
|
||
"low": {"range": "300-500", "count": 2, "percentage": 40},
|
||
"medium": {"range": "500-800", "count": 2, "percentage": 40},
|
||
"high": {"range": "800-1500", "count": 1, "percentage": 20}
|
||
},
|
||
"competitor_prices": [
|
||
{
|
||
"competitor_name": "美丽人生",
|
||
"positioning": "medium",
|
||
"original_price": 680.00,
|
||
"promo_price": 480.00,
|
||
"collected_at": "2026-01-15"
|
||
}
|
||
],
|
||
"benchmark_reference": {
|
||
"tier": "medium",
|
||
"min_price": 400.00,
|
||
"max_price": 800.00,
|
||
"avg_price": 600.00
|
||
},
|
||
"suggested_range": {
|
||
"min": 480.00,
|
||
"max": 780.00,
|
||
"recommended": 580.00
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 3.5 智能定价建议
|
||
|
||
#### POST `/projects/{id}/generate-pricing`
|
||
|
||
**描述**:调用 AI 生成定价建议
|
||
|
||
**请求体**:
|
||
|
||
```json
|
||
{
|
||
"target_margin": 50,
|
||
"strategies": ["traffic", "profit", "premium"],
|
||
"stream": true
|
||
}
|
||
```
|
||
|
||
**请求参数说明**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| target_margin | float | 否 | 目标毛利率(%),默认 50 |
|
||
| strategies | array | 否 | 策略类型,默认全部 |
|
||
| stream | bool | 否 | 是否流式返回,默认 false |
|
||
|
||
**非流式响应**:
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"message": "success",
|
||
"data": {
|
||
"project_id": 1,
|
||
"project_name": "光子嫩肤",
|
||
"cost_base": 280.50,
|
||
"market_reference": {
|
||
"min": 380.00,
|
||
"max": 1280.00,
|
||
"avg": 680.00
|
||
},
|
||
"pricing_suggestions": {
|
||
"traffic": {
|
||
"strategy": "引流款",
|
||
"suggested_price": 388.00,
|
||
"margin": 27.7,
|
||
"description": "低于市场均价,适合引流获客"
|
||
},
|
||
"profit": {
|
||
"strategy": "利润款",
|
||
"suggested_price": 580.00,
|
||
"margin": 51.6,
|
||
"description": "接近市场均价,平衡利润与竞争力"
|
||
},
|
||
"premium": {
|
||
"strategy": "高端款",
|
||
"suggested_price": 880.00,
|
||
"margin": 68.1,
|
||
"description": "定位高端,需配套优质服务"
|
||
}
|
||
},
|
||
"ai_advice": {
|
||
"summary": "建议采用利润款定价策略...",
|
||
"cost_analysis": "成本结构合理,耗材成本占比...",
|
||
"market_analysis": "市场价格区间较大...",
|
||
"risk_notes": "注意竞品促销活动的影响...",
|
||
"recommendations": [
|
||
"常规定价建议 580 元",
|
||
"新客首单可设置 388 元引流价",
|
||
"VIP 会员可享 520 元优惠价"
|
||
]
|
||
},
|
||
"ai_usage": {
|
||
"provider": "4sapi",
|
||
"model": "gemini-3-flash-preview",
|
||
"tokens": 1250,
|
||
"latency_ms": 2300
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
**流式响应(SSE)**:
|
||
|
||
```
|
||
event: message
|
||
data: {"type": "chunk", "content": "根据您提供的成本数据..."}
|
||
|
||
event: message
|
||
data: {"type": "chunk", "content": "建议采用以下定价策略..."}
|
||
|
||
event: message
|
||
data: {"type": "done", "summary": {...}}
|
||
```
|
||
|
||
---
|
||
|
||
### 3.6 利润模拟
|
||
|
||
#### POST `/pricing-plans/{id}/simulate-profit`
|
||
|
||
**描述**:执行利润模拟测算
|
||
|
||
**请求体**:
|
||
|
||
```json
|
||
{
|
||
"price": 580.00,
|
||
"estimated_volume": 100,
|
||
"period_type": "monthly"
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"message": "success",
|
||
"data": {
|
||
"simulation_id": 1,
|
||
"pricing_plan_id": 5,
|
||
"project_name": "光子嫩肤",
|
||
"input": {
|
||
"price": 580.00,
|
||
"cost_per_unit": 280.50,
|
||
"estimated_volume": 100,
|
||
"period_type": "monthly"
|
||
},
|
||
"result": {
|
||
"estimated_revenue": 58000.00,
|
||
"estimated_cost": 28050.00,
|
||
"estimated_profit": 29950.00,
|
||
"profit_margin": 51.64,
|
||
"profit_per_unit": 299.50
|
||
},
|
||
"breakeven_analysis": {
|
||
"breakeven_volume": 48,
|
||
"current_volume": 100,
|
||
"safety_margin": 52,
|
||
"safety_margin_percentage": 52.0
|
||
},
|
||
"created_at": "2026-01-19T11:00:00"
|
||
}
|
||
}
|
||
```
|
||
|
||
#### POST `/profit-simulations/{id}/sensitivity`
|
||
|
||
**描述**:执行敏感性分析
|
||
|
||
**请求体**:
|
||
|
||
```json
|
||
{
|
||
"price_change_rates": [-20, -15, -10, -5, 0, 5, 10, 15, 20]
|
||
}
|
||
```
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"message": "success",
|
||
"data": {
|
||
"simulation_id": 1,
|
||
"base_price": 580.00,
|
||
"base_profit": 29950.00,
|
||
"sensitivity_results": [
|
||
{
|
||
"price_change_rate": -20,
|
||
"adjusted_price": 464.00,
|
||
"adjusted_profit": 18350.00,
|
||
"profit_change_rate": -38.73
|
||
},
|
||
{
|
||
"price_change_rate": -10,
|
||
"adjusted_price": 522.00,
|
||
"adjusted_profit": 24150.00,
|
||
"profit_change_rate": -19.37
|
||
},
|
||
{
|
||
"price_change_rate": 0,
|
||
"adjusted_price": 580.00,
|
||
"adjusted_profit": 29950.00,
|
||
"profit_change_rate": 0
|
||
},
|
||
{
|
||
"price_change_rate": 10,
|
||
"adjusted_price": 638.00,
|
||
"adjusted_profit": 35750.00,
|
||
"profit_change_rate": 19.37
|
||
},
|
||
{
|
||
"price_change_rate": 20,
|
||
"adjusted_price": 696.00,
|
||
"adjusted_profit": 41550.00,
|
||
"profit_change_rate": 38.73
|
||
}
|
||
],
|
||
"insights": {
|
||
"price_elasticity": "价格每变动1%,利润变动约1.94%",
|
||
"risk_level": "中等",
|
||
"recommendation": "价格下降20%仍可盈利,但利润空间大幅收窄"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 3.7 仪表盘
|
||
|
||
#### GET `/dashboard/summary`
|
||
|
||
**描述**:获取仪表盘概览数据
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"message": "success",
|
||
"data": {
|
||
"project_overview": {
|
||
"total_projects": 50,
|
||
"active_projects": 45,
|
||
"projects_with_pricing": 30
|
||
},
|
||
"cost_overview": {
|
||
"avg_project_cost": 320.50,
|
||
"highest_cost_project": {
|
||
"id": 12,
|
||
"name": "热玛吉",
|
||
"cost": 1500.00
|
||
},
|
||
"lowest_cost_project": {
|
||
"id": 5,
|
||
"name": "基础清洁",
|
||
"cost": 45.00
|
||
}
|
||
},
|
||
"market_overview": {
|
||
"competitors_tracked": 15,
|
||
"price_records_this_month": 120,
|
||
"avg_market_price": 680.00
|
||
},
|
||
"pricing_overview": {
|
||
"pricing_plans_count": 85,
|
||
"avg_target_margin": 48.5,
|
||
"strategies_distribution": {
|
||
"traffic": 20,
|
||
"profit": 50,
|
||
"premium": 15
|
||
}
|
||
},
|
||
"ai_usage_this_month": {
|
||
"total_calls": 150,
|
||
"total_tokens": 185000,
|
||
"total_cost_usd": 2.35,
|
||
"provider_distribution": {
|
||
"4sapi": 140,
|
||
"openrouter": 10
|
||
}
|
||
},
|
||
"recent_activities": [
|
||
{
|
||
"type": "pricing_created",
|
||
"project_name": "水光针",
|
||
"user": "张三",
|
||
"time": "2026-01-19T10:30:00"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 4. 耗材管理
|
||
|
||
### POST `/materials/import`
|
||
|
||
**描述**:批量导入耗材
|
||
|
||
**请求**:`multipart/form-data`
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| file | file | 是 | Excel 文件 (.xlsx) |
|
||
| update_existing | bool | 否 | 是否更新已存在数据,默认 false |
|
||
|
||
**Excel 模板格式**:
|
||
|
||
| 耗材编码 | 耗材名称 | 单位 | 单价 | 供应商 | 类型 |
|
||
|----------|----------|------|------|--------|------|
|
||
| MAT001 | 冷凝胶 | ml | 2.00 | 供应商A | consumable |
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"message": "导入完成",
|
||
"data": {
|
||
"total": 50,
|
||
"success": 48,
|
||
"failed": 2,
|
||
"errors": [
|
||
{"row": 15, "error": "耗材编码 MAT015 已存在"},
|
||
{"row": 23, "error": "单价格式错误"}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 5. 竞品管理
|
||
|
||
### GET `/competitors`
|
||
|
||
**描述**:获取竞品机构列表
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| page | int | 否 | 页码 |
|
||
| page_size | int | 否 | 每页数量 |
|
||
| positioning | string | 否 | 定位筛选:high/medium/budget |
|
||
| is_key_competitor | bool | 否 | 是否重点关注 |
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"message": "success",
|
||
"data": {
|
||
"items": [
|
||
{
|
||
"id": 1,
|
||
"competitor_name": "美丽人生医美",
|
||
"address": "XX市XX路100号",
|
||
"distance_km": 2.5,
|
||
"positioning": "medium",
|
||
"is_key_competitor": true,
|
||
"price_count": 25,
|
||
"last_price_update": "2026-01-15",
|
||
"created_at": "2026-01-01T10:00:00"
|
||
}
|
||
],
|
||
"total": 15,
|
||
"page": 1,
|
||
"page_size": 20
|
||
}
|
||
}
|
||
```
|
||
|
||
### POST `/competitors/{id}/prices`
|
||
|
||
**描述**:添加竞品价格记录
|
||
|
||
**请求体**:
|
||
|
||
```json
|
||
{
|
||
"project_id": 1,
|
||
"project_name": "光子嫩肤",
|
||
"original_price": 680.00,
|
||
"promo_price": 480.00,
|
||
"member_price": 580.00,
|
||
"price_source": "meituan",
|
||
"collected_at": "2026-01-19",
|
||
"remark": "美团活动价"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 6. 定价方案
|
||
|
||
### GET `/pricing-plans`
|
||
|
||
**描述**:获取定价方案列表
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| project_id | int | 否 | 项目筛选 |
|
||
| strategy_type | string | 否 | 策略类型筛选 |
|
||
| is_active | bool | 否 | 是否启用 |
|
||
|
||
**响应示例**:
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"message": "success",
|
||
"data": {
|
||
"items": [
|
||
{
|
||
"id": 1,
|
||
"project_id": 1,
|
||
"project_name": "光子嫩肤",
|
||
"plan_name": "2026年Q1定价",
|
||
"strategy_type": "profit",
|
||
"base_cost": 280.50,
|
||
"target_margin": 50.00,
|
||
"suggested_price": 561.00,
|
||
"final_price": 580.00,
|
||
"is_active": true,
|
||
"created_at": "2026-01-15T10:00:00",
|
||
"created_by_name": "张三"
|
||
}
|
||
],
|
||
"total": 30,
|
||
"page": 1,
|
||
"page_size": 20
|
||
}
|
||
}
|
||
```
|
||
|
||
### GET `/pricing-plans/{id}/export`
|
||
|
||
**描述**:导出定价报告
|
||
|
||
**请求参数**:
|
||
|
||
| 参数 | 类型 | 必填 | 说明 |
|
||
|------|------|------|------|
|
||
| format | string | 否 | 导出格式:pdf/excel,默认 pdf |
|
||
|
||
**响应**:文件下载
|
||
|
||
---
|
||
|
||
## 7. 附录
|
||
|
||
### 7.1 数据类型说明
|
||
|
||
| 字段类型 | JSON 类型 | 示例 |
|
||
|----------|-----------|------|
|
||
| id | number | 1 |
|
||
| 金额 | number | 280.50 |
|
||
| 百分比 | number | 50.00 (表示 50%) |
|
||
| 日期时间 | string | "2026-01-19T10:00:00" |
|
||
| 日期 | string | "2026-01-19" |
|
||
| 布尔值 | boolean | true/false |
|
||
|
||
### 7.2 AI 接口说明
|
||
|
||
AI 相关接口(如 `/generate-pricing`)遵循《瑞小美 AI 接入规范》:
|
||
|
||
- 通过 `shared_backend.AIService` 调用
|
||
- 支持流式输出(SSE)
|
||
- 自动降级:4sapi.com → OpenRouter.ai
|
||
- 调用日志记录到 `ai_call_logs` 表
|
||
- 使用 `prompt_name` 参数用于统计
|
||
|
||
### 7.3 接口版本管理
|
||
|
||
- 当前版本:v1
|
||
- 接口路径包含版本号:`/api/v1/...`
|
||
- 重大变更时发布新版本(v2)
|
||
- 旧版本保持兼容至少 6 个月
|
||
|
||
---
|
||
|
||
*瑞小美技术团队 · 2026-01-19*
|