# 新增功能：获取业务对象流程节点接口

## 概述

为 Stateflow 模块新增了获取业务对象所属流程的所有状态节点的功能。

## 变更内容

### 1. Services 层 (`stateflow/services.py`)

新增函数 `get_process_nodes(business_object)`:

```python
def get_process_nodes(business_object: 'models.BusinessObject') -> List[dict]:
    """
    获取业务对象所属流程的所有状态节点列表
    
    参数:
        business_object: BusinessObject 实例
    
    返回:
        节点列表，每个元素包含：
        {
            'id': ProcessNode ID,
            'state': State对象,
            'state_id': State ID,
            'state_name': State 名称,
            'order': 节点顺序号
        }
    """
```

**用途**: 获取完整的流程节点列表，包含节点顺序和状态信息。

### 2. API 层 (`api_v1/views/stateflow/business_object.py`)

新增 API 端点:

- **URL**: `GET /api/v1/stateflow/business-objects/{id}/process-nodes/`
- **描述**: 获取指定业务对象所属流程的所有状态节点
- **响应格式**:

```json
{
  "count": 3,
  "nodes": [
    {
      "id": 1,
      "state_id": 10,
      "state_name": "质检",
      "order": 0
    },
    {
      "id": 2,
      "state_id": 11,
      "state_name": "包装",
      "order": 1
    },
    {
      "id": 3,
      "state_id": 12,
      "state_name": "发货",
      "order": 2
    }
  ]
}
```

### 3. 测试覆盖

#### 功能测试 (`stateflow/tests/test_services.py`)

新增测试: `test_get_process_nodes`

- ✅ 验证节点数量正确
- ✅ 验证节点顺序正确
- ✅ 验证节点字段完整性
- ✅ 验证每个节点包含必要字段

#### API 测试 (`stateflow/tests/test_business_object_api.py`)

新增测试: `test_get_process_nodes`

- ✅ 验证 HTTP 200 响应
- ✅ 验证响应包含 count 和 nodes 字段
- ✅ 验证节点数据格式正确
- ✅ 验证节点顺序和内容准确

### 4. 文档更新

#### API 文档 (`stateflow/API.md`)

新增章节: **3.7.5. 获取流程的所有节点**

- 📝 完整的接口说明
- 📝 请求/响应示例
- 📝 Python/JavaScript/curl 使用示例

## 测试结果

```bash
# 功能测试
$ python manage.py test stateflow.tests.test_services.StateFlowServicesTestCase.test_get_process_nodes
✅ OK

# API 测试
$ python manage.py test stateflow.tests.test_business_object_api.BusinessObjectAPITestCase.test_get_process_nodes
✅ OK

# 完整测试套件
$ python manage.py test stateflow
✅ Ran 80 tests in 11.122s - OK
```

## 使用示例

### Python

```python
import requests

headers = {'Authorization': f'Bearer {token}'}
response = requests.get(
    'http://localhost:8000/api/v1/stateflow/business-objects/1/process-nodes/',
    headers=headers
)
data = response.json()

print(f"流程共有 {data['count']} 个节点:")
for node in data['nodes']:
    print(f"  节点 {node['order']}: {node['state_name']}")
```

### JavaScript

```javascript
const response = await fetch(
  `/api/v1/stateflow/business-objects/${businessObjectId}/process-nodes/`,
  { headers: { 'Authorization': `Bearer ${token}` } }
);
const data = await response.json();
console.log(`流程共有 ${data.count} 个节点:`, data.nodes);
```

### curl

```bash
curl -X GET "http://localhost:8000/api/v1/stateflow/business-objects/1/process-nodes/" \
  -H "Authorization: Bearer <token>"
```

## 应用场景

1. **前端流程可视化**: 获取完整的流程节点列表用于渲染流程图
2. **进度追踪**: 结合 timeline 接口展示完整的流程进度
3. **流程分析**: 分析流程包含的所有节点和顺序
4. **文档生成**: 自动生成流程说明文档

## 兼容性

- ✅ 完全向后兼容
- ✅ 不影响现有 API
- ✅ 所有现有测试通过 (80/80)
- ✅ 新增测试覆盖完整

## 相关文件

- `stateflow/services.py` - 新增 `get_process_nodes()` 函数
- `api_v1/views/stateflow/business_object.py` - 新增 `process_nodes()` action
- `stateflow/tests/test_services.py` - 新增功能测试
- `stateflow/tests/test_business_object_api.py` - 新增 API 测试
- `stateflow/API.md` - 更新文档
- `examples/test_process_nodes_api.py` - 使用示例

## 完成日期

2025-11-17
