Files
makemd/archive/handover/order-api.md
wurenzhi 136c2fa579 feat: 初始化项目结构并添加核心功能模块
- 新增文档模板和导航结构
- 实现服务器基础API路由和控制器
- 添加扩展插件配置和前端框架
- 引入多租户和权限管理模块
- 集成日志和数据库配置
- 添加核心业务模型和类型定义
2026-03-17 22:07:19 +08:00

529 lines
10 KiB
Markdown
Raw 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.
# 订单管理 API 文档
## 1. 概述
本文档描述了订单管理服务的 API 接口,包括订单的创建、查询、更新、删除,以及订单状态流转、售后处理等功能。
## 2. 基础信息
- **API 基础路径**: `/api/v1/orders`
- **认证方式**: JWT Token + Trace Context
- **权限要求**: 不同接口需要不同的权限,详见各接口说明
## 3. 核心接口
### 3.1 订单管理
#### 创建订单
- **方法**: POST
- **路径**: `/api/v1/orders`
- **权限**: `order:write`
- **请求体**:
```json
{
"shop_id": "string",
"platform": "SHOPIFY",
"platform_order_id": "string",
"customer_name": "string",
"customer_email": "string",
"shipping_address": {"street": "string", "city": "string"},
"items": [{"skuId": "string", "title": "string", "price": 100, "quantity": 1}],
"total_amount": 100,
"currency": "USD",
"status": "PAID",
"payment_status": "COMPLETED",
"fulfillment_status": "PENDING",
"trace_id": "string"
}
```
- **响应**:
```json
{
"success": true,
"orderId": "ORD-12345-67890"
}
```
#### 获取订单详情
- **方法**: GET
- **路径**: `/api/v1/orders/:id`
- **权限**: `order:read`
- **响应**:
```json
{
"success": true,
"data": {
"id": "ORD-12345-67890",
"tenant_id": "tenant1",
"shop_id": "shop1",
"platform": "SHOPIFY",
"platform_order_id": "12345",
"customer_name": "Test Customer",
"shipping_address": {"street": "123 Test St"},
"items": [{"skuId": "SKU001", "title": "Test Product"}],
"total_amount": 100,
"currency": "USD",
"status": "PAID",
"payment_status": "COMPLETED",
"fulfillment_status": "PENDING",
"created_at": "2026-03-17T00:00:00.000Z",
"updated_at": "2026-03-17T00:00:00.000Z"
}
}
```
#### 更新订单
- **方法**: PUT
- **路径**: `/api/v1/orders/:id`
- **权限**: `order:write`
- **请求体**:
```json
{
"status": "SHIPPED",
"fulfillment_status": "SHIPPED"
}
```
- **响应**:
```json
{
"success": true,
"message": "Order updated successfully"
}
```
#### 删除订单
- **方法**: DELETE
- **路径**: `/api/v1/orders/:id`
- **权限**: `order:delete`
- **响应**:
```json
{
"success": true,
"message": "Order deleted successfully"
}
```
#### 获取订单列表
- **方法**: GET
- **路径**: `/api/v1/orders`
- **权限**: `order:read`
- **查询参数**:
- `page`: 页码 (默认: 1)
- `pageSize`: 每页数量 (默认: 20)
- `status`: 订单状态
- `platform`: 平台
- `startDate`: 开始日期
- `endDate`: 结束日期
- **响应**:
```json
{
"success": true,
"data": {
"orders": [/* 订单列表 */],
"total": 100
}
}
```
### 3.2 批量操作
#### 批量更新订单
- **方法**: PUT
- **路径**: `/api/v1/orders/batch`
- **权限**: `order:write`
- **请求体**:
```json
{
"orderIds": ["ORD-1", "ORD-2"],
"updates": {
"status": "PAID"
}
}
```
- **响应**:
```json
{
"success": true,
"data": {
"success": 2,
"failed": 0
}
}
```
#### 批量审核订单
- **方法**: POST
- **路径**: `/api/v1/orders/batch/audit`
- **权限**: `order:write`
- **请求体**:
```json
{
"orderIds": ["ORD-1", "ORD-2"]
}
```
- **响应**:
```json
{
"success": true,
"data": {
"success": 2,
"failed": 0
}
}
```
#### 批量发货
- **方法**: POST
- **路径**: `/api/v1/orders/batch/ship`
- **权限**: `order:write`
- **请求体**:
```json
{
"orderIds": ["ORD-1", "ORD-2"]
}
```
- **响应**:
```json
{
"success": true,
"data": {
"success": 2,
"failed": 0
}
}
```
### 3.3 订单状态管理
#### 订单状态流转
- **方法**: POST
- **路径**: `/api/v1/orders/:id/status`
- **权限**: `order:write`
- **请求体**:
```json
{
"status": "SHIPPED",
"reason": "Order shipped"
}
```
- **响应**:
```json
{
"success": true,
"message": "Order status updated successfully"
}
```
#### 标记订单为异常
- **方法**: POST
- **路径**: `/api/v1/orders/:id/exception`
- **权限**: `order:write`
- **请求体**:
```json
{
"reason": "Out of stock"
}
```
- **响应**:
```json
{
"success": true,
"message": "Order marked as exception"
}
```
#### 自动改派订单
- **方法**: POST
- **路径**: `/api/v1/orders/:id/reroute`
- **权限**: `order:write`
- **响应**:
```json
{
"success": true,
"message": "Order rerouted successfully"
}
```
#### 重试异常订单
- **方法**: POST
- **路径**: `/api/v1/orders/:id/retry`
- **权限**: `order:write`
- **响应**:
```json
{
"success": true,
"message": "Order retried successfully"
}
```
#### 取消订单
- **方法**: POST
- **路径**: `/api/v1/orders/:id/cancel`
- **权限**: `order:write`
- **请求体**:
```json
{
"reason": "Customer cancelled"
}
```
- **响应**:
```json
{
"success": true,
"message": "Order cancelled successfully"
}
```
#### 完成订单
- **方法**: POST
- **路径**: `/api/v1/orders/:id/complete`
- **权限**: `order:write`
- **响应**:
```json
{
"success": true,
"message": "Order completed successfully"
}
```
### 3.4 售后管理
#### 申请退款
- **方法**: POST
- **路径**: `/api/v1/orders/:id/refund`
- **权限**: `order:write`
- **请求体**:
```json
{
"reason": "Product damaged",
"amount": 100
}
```
- **响应**:
```json
{
"success": true,
"refundId": "REF-12345"
}
```
#### 审批退款
- **方法**: POST
- **路径**: `/api/v1/orders/refund/:id/approve`
- **权限**: `order:write`
- **请求体**:
```json
{
"approved": true,
"note": "Refund approved"
}
```
- **响应**:
```json
{
"success": true,
"message": "Refund processed successfully"
}
```
#### 申请售后
- **方法**: POST
- **路径**: `/api/v1/orders/:id/after-sales`
- **权限**: `order:write`
- **请求体**:
```json
{
"type": "REFUND",
"reason": "Product damaged",
"items": [{"skuId": "SKU001", "quantity": 1}]
}
```
- **响应**:
```json
{
"success": true,
"serviceId": "SVC-12345"
}
```
#### 处理售后申请
- **方法**: POST
- **路径**: `/api/v1/orders/after-sales/:id/process`
- **权限**: `order:write`
- **请求体**:
```json
{
"action": "APPROVE",
"note": "After-sales service approved"
}
```
- **响应**:
```json
{
"success": true,
"message": "After-sales service processed successfully"
}
```
### 3.5 订单同步
#### 平台 Webhook 接收
- **方法**: POST
- **路径**: `/api/v1/orders/webhook/:platform`
- **说明**: 接收来自不同平台的订单 Webhook 推送
- **响应**:
```json
{
"success": true,
"orderId": "ORD-12345-67890"
}
```
#### 手动触发同步
- **方法**: POST
- **路径**: `/api/v1/orders/sync`
- **权限**: `trade:write`
- **请求体**:
```json
{
"platform": "SHOPIFY",
"shopId": "shop1"
}
```
- **响应**:
```json
{
"success": true,
"message": "Manual sync triggered for SHOPIFY"
}
```
#### 获取订单统计
- **方法**: GET
- **路径**: `/api/v1/orders/stats`
- **权限**: `trade:read`
- **响应**:
```json
{
"success": true,
"data": {
"status_counts": [
{"status": "PAID", "count": 10},
{"status": "SHIPPED", "count": 5}
],
"total_revenue": 1500
}
}
```
## 4. 数据模型
### 4.1 订单模型
| 字段名 | 类型 | 描述 |
|-------|------|------|
| id | string | 订单ID |
| tenant_id | string | 租户ID |
| shop_id | string | 店铺ID |
| platform | string | 平台 |
| site | string | 站点 |
| platform_order_id | string | 平台订单ID |
| customer_name | string | 客户名称 |
| customer_email | string | 客户邮箱 |
| shipping_address | json | 收货地址 |
| items | json | 订单商品 |
| total_amount | decimal(15,2) | 总金额 |
| currency | string | 货币 |
| status | string | 订单状态 |
| payment_status | string | 支付状态 |
| fulfillment_status | string | 物流状态 |
| exception_reason | string | 异常原因 |
| auto_heal_status | string | 自愈状态 |
| profit_snapshot | json | 利润快照 |
| trace_id | string | 追踪ID |
| created_at | datetime | 创建时间 |
| updated_at | datetime | 更新时间 |
### 4.2 订单状态
- **UNPAID**: 未支付
- **PAID**: 已支付
- **PENDING_AUDIT**: 待审核
- **WAITING_SHIPMENT**: 待发货
- **READY_TO_SHIP**: 准备发货
- **PROCESSING**: 处理中
- **SHIPPED**: 已发货
- **DELIVERED**: 已送达
- **CANCELLED**: 已取消
- **EXCEPTION**: 异常
### 4.3 支付状态
- **PENDING**: 待支付
- **COMPLETED**: 已完成
- **REFUNDED**: 已退款
- **FAILED**: 支付失败
### 4.4 物流状态
- **PENDING**: 待处理
- **PROCESSING**: 处理中
- **SHIPPED**: 已发货
- **PARTIAL_SHIPPED**: 部分发货
- **FAILED**: 发货失败
## 5. 错误处理
| 错误码 | 描述 |
|-------|------|
| 400 | 请求参数错误 |
| 401 | 未授权 |
| 403 | 权限不足 |
| 404 | 资源不存在 |
| 500 | 服务器内部错误 |
## 6. 性能指标
- **订单创建**: < 200ms
- **订单查询**: < 50ms (缓存命中) / < 100ms (缓存未命中)
- **批量操作**: < 500ms (100个订单以内)
- **状态流转**: < 100ms
## 7. 安全考虑
- 所有API端点都需要适当的权限验证
- 敏感操作需要额外的安全检查
- 订单数据需要加密存储
- 防止SQL注入和XSS攻击
## 8. 集成指南
### 8.1 前端集成
前端应用可以通过以下步骤集成订单管理API
1. 获取认证Token
2. 设置Trace Context头
3. 调用相应的API端点
4. 处理响应和错误
### 8.2 第三方平台集成
第三方平台可以通过Webhook方式与订单系统集成
1. 在平台设置Webhook URL: `https://your-domain.com/api/v1/orders/webhook/:platform`
2. 确保包含必要的认证信息
3. 按照平台的格式发送订单数据
## 9. 监控与日志
- 所有API调用都有详细的日志记录
- 关键操作有审计追踪
- 性能指标实时监控
- 异常情况自动告警
## 10. 版本控制
- **v1**: 当前版本
- 后续版本将通过URL路径进行区分