1
0
forked from erp-dev/erp
Files
erpnew/stateflow/BusinessObject_API.md

584 lines
12 KiB
Markdown
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.
# Stateflow 业务对象 API 文档
## 概述
业务对象BusinessObject是流程的实例支持状态流转、参数管理和进度控制。
**基础路径**: `/api/v1/stateflow/business-objects/`
---
## 1. 查询下一步节点(可选带参数)
### 获取下一个待执行节点
**接口**: `GET /api/v1/stateflow/business-objects/{id}/next_pending_state/`
**描述**: 获取业务对象的下一个待执行状态节点,默认包含该状态的参数定义列表。
**查询参数**:
- `include_parameters` (可选): 是否包含参数列表,默认 `true`
- `true`: 返回参数定义列表
- `false`: 只返回状态信息
**成功响应** (200):
```json
{
"state": {
"id": 5,
"name": "质量检验",
"description": "对产品进行质量检查"
},
"order": 3,
"parameters": [
{
"id": 1,
"name": "temperature",
"display_name": "温度",
"is_required": true,
"is_image_path": false
},
{
"id": 2,
"name": "humidity",
"display_name": "湿度",
"is_required": false,
"is_image_path": false
}
]
}
```
**无待执行节点** (200):
```json
{
"next_state": null,
"message": "没有待执行节点(未开始或已完成)"
}
```
**示例**:
```bash
# 获取下一个节点及参数
GET /api/v1/stateflow/business-objects/123/next_pending_state/
# 只获取下一个节点,不要参数
GET /api/v1/stateflow/business-objects/123/next_pending_state/?include_parameters=false
```
---
## 2. 查询已存在的参数(可选仅包括必填)
### 2.1 获取当前状态的参数定义
**接口**: `GET /api/v1/stateflow/business-objects/{id}/current_state_parameters/`
**描述**: 获取当前状态(最后完成的状态)的参数定义列表。
**查询参数**:
- `required_only` (可选): 是否只返回必填参数,默认 `false`
- `true`: 只返回必填参数
- `false`: 返回所有参数
**成功响应** (200):
```json
{
"state": {
"id": 4,
"name": "生产加工",
"description": "进行生产加工"
},
"parameters": [
{
"id": 3,
"name": "machine_number",
"display_name": "机器编号",
"is_required": true,
"is_image_path": false
},
{
"id": 4,
"name": "operator",
"display_name": "操作员",
"is_required": true,
"is_image_path": false
}
],
"count": 2
}
```
**未完成任何状态** (200):
```json
{
"parameters": [],
"message": "尚未完成任何状态"
}
```
**示例**:
```bash
# 获取当前状态的所有参数定义
GET /api/v1/stateflow/business-objects/123/current_state_parameters/
# 只获取必填参数
GET /api/v1/stateflow/business-objects/123/current_state_parameters/?required_only=true
```
### 2.2 获取状态记录的实际参数值
**接口**: `GET /api/v1/stateflow/business-objects/{id}/state-logs/{log_id}/parameters/`
**描述**: 获取指定状态流转记录的实际参数值(用户填写的数据)。
**查询参数**:
- `key` (可选): 指定参数键,返回该参数的历史记录
- `include_cancelled` (可选): 是否包含已撤销状态的参数,默认 `false`
**成功响应 - 所有参数** (200):
```json
{
"state_log_id": 456,
"is_cancelled": false,
"count": 2,
"summary": {
"temperature": "25.5",
"humidity": "60%",
"operator": "张三"
},
"records": [
{
"id": 1,
"state_log": 456,
"parameters": {
"temperature": "25.5",
"humidity": "60%"
},
"remark": "",
"created_at": "2025-11-15T10:30:00Z",
"created_by": 1
},
{
"id": 2,
"state_log": 456,
"parameters": {
"operator": "张三"
},
"remark": "补充操作员信息",
"created_at": "2025-11-15T11:00:00Z",
"created_by": 2
}
]
}
```
**成功响应 - 指定参数历史** (200):
```json
{
"state_log_id": 456,
"key": "temperature",
"is_cancelled": false,
"history": [
{
"value": "25.5",
"created_at": "2025-11-15T10:30:00Z",
"created_by": 1,
"remark": ""
}
]
}
```
**状态记录不存在** (404):
```json
{
"success": false,
"message": "状态流转记录不存在"
}
```
**示例**:
```bash
# 获取状态记录的所有参数
GET /api/v1/stateflow/business-objects/123/state-logs/456/parameters/
# 获取特定参数的历史
GET /api/v1/stateflow/business-objects/123/state-logs/456/parameters/?key=temperature
# 包含已撤销状态的参数
GET /api/v1/stateflow/business-objects/123/state-logs/456/parameters/?include_cancelled=true
```
---
## 3. 推进到下一步(校验必填参数)
**接口**: `POST /api/v1/stateflow/business-objects/{id}/advance/`
**描述**: 推进业务对象到下一个状态,自动校验必填参数。
**请求体**:
```json
{
"parameters": {
"temperature": "25.5",
"humidity": "60%",
"operator": "张三"
}
}
```
**参数说明**:
- `parameters` (可选): 参数字典
- 如果下一个状态有必填参数,则必须提供所有必填参数
- 可以包含可选参数
- 参数值以字符串形式存储
**成功响应** (200):
```json
{
"success": true,
"message": "已推进到状态: 质量检验",
"state_log": {
"id": 456,
"state": {
"id": 5,
"name": "质量检验"
},
"completed_at": "2025-11-15T10:30:00Z",
"completed_by": {
"id": 1,
"username": "zhangsan"
},
"is_cancelled": false,
"parameters_summary": {
"temperature": "25.5",
"humidity": "60%"
}
},
"business_object": {
"id": 123,
"name": "订单-001",
"process": {...},
"overall_status": "in_progress",
"current_state": {...}
}
}
```
**校验失败 - 缺少必填参数** (400):
```json
{
"success": false,
"message": "缺少必填参数: temperature, operator"
}
```
**其他失败情况** (400):
```json
{
"success": false,
"message": "已经完成所有状态"
}
```
**示例**:
```bash
# 推进到下一状态(带参数)
curl -X POST /api/v1/stateflow/business-objects/123/advance/ \
-H "Content-Type: application/json" \
-d '{"parameters": {"temperature": "25.5", "humidity": "60%"}}'
# 推进到下一状态(无参数)
curl -X POST /api/v1/stateflow/business-objects/123/advance/ \
-H "Content-Type: application/json" \
-d '{}'
```
---
## 4. 回退
**接口**: `POST /api/v1/stateflow/business-objects/{id}/step_back/`
**描述**: 回退一步,撤销最后一次完成的状态(标记为已撤销,不删除记录)。
**请求体**: 无需请求体
**成功响应** (200):
```json
{
"success": true,
"message": "已回退到状态: 生产加工",
"business_object": {
"id": 123,
"name": "订单-001",
"process": {...},
"overall_status": "in_progress",
"current_state": {...}
}
}
```
**失败响应** (400):
```json
{
"success": false,
"message": "没有可回退的状态"
}
```
**示例**:
```bash
curl -X POST /api/v1/stateflow/business-objects/123/step_back/
```
---
## 5. 针对已完成的状态节点添加新的参数集
**接口**: `POST /api/v1/stateflow/business-objects/{id}/state-logs/{log_id}/add-parameters/`
**描述**: 为已完成的状态流转记录补充参数(追加新的参数记录)。
**请求体**:
```json
{
"parameters": {
"additional_note": "发现轻微瑕疵",
"inspector": "李四"
},
"remark": "质检员补充信息"
}
```
**参数说明**:
- `parameters` (必填): 参数字典,不能为空
- `remark` (可选): 备注说明
**成功响应** (200):
```json
{
"success": true,
"parameter_record": {
"id": 789,
"state_log": 456,
"parameters": {
"additional_note": "发现轻微瑕疵",
"inspector": "李四"
},
"remark": "质检员补充信息",
"created_at": "2025-11-15T14:30:00Z",
"created_by": 2
}
}
```
**失败响应 - 状态记录不存在** (404):
```json
{
"success": false,
"message": "状态流转记录不存在"
}
```
**失败响应 - 参数为空** (400):
```json
{
"success": false,
"message": "参数不能为空"
}
```
**示例**:
```bash
curl -X POST /api/v1/stateflow/business-objects/123/state-logs/456/add-parameters/ \
-H "Content-Type: application/json" \
-d '{
"parameters": {
"additional_note": "发现轻微瑕疵",
"inspector": "李四"
},
"remark": "质检员补充信息"
}'
```
---
## 6. 其他相关接口
### 6.1 获取状态时间线
**接口**: `GET /api/v1/stateflow/business-objects/{id}/timeline/`
**描述**: 获取业务对象的完整状态时间线。
**成功响应** (200):
```json
[
{
"state": {
"id": 1,
"name": "接单"
},
"status": "completed",
"order": 1,
"completed_at": "2025-11-15T09:00:00Z",
"completed_by": "zhangsan",
"cancelled_at": null,
"is_cancelled": false
},
{
"state": {
"id": 2,
"name": "生产加工"
},
"status": "completed",
"order": 2,
"completed_at": "2025-11-15T10:00:00Z",
"completed_by": "lisi",
"cancelled_at": null,
"is_cancelled": false
},
{
"state": {
"id": 3,
"name": "质量检验"
},
"status": "pending",
"order": 3,
"completed_at": null,
"completed_by": null,
"cancelled_at": null,
"is_cancelled": false
}
]
```
### 6.2 获取所有待执行节点
**接口**: `GET /api/v1/stateflow/business-objects/{id}/pending_states/`
**描述**: 获取所有待执行的状态节点列表(不包含参数)。
**成功响应** (200):
```json
{
"count": 2,
"pending_states": [
{
"state": {
"id": 3,
"name": "质量检验"
},
"order": 3
},
{
"state": {
"id": 4,
"name": "打包发货"
},
"order": 4
}
]
}
```
### 6.3 重置进度
**接口**: `POST /api/v1/stateflow/business-objects/{id}/reset/`
**描述**: 重置业务对象的进度(删除所有状态记录)。
**成功响应** (200):
```json
{
"success": true,
"message": "进度已重置",
"business_object": {...}
}
```
---
## 完整性检查清单
根据您的需求,所有接口都已齐全:
-**查询下一步节点(可选带参数)**: `GET next_pending_state/` (支持 `include_parameters` 参数)
-**查询已存在的参数(可选仅包括必填)**:
- `GET current_state_parameters/` (支持 `required_only` 参数) - 参数定义
- `GET state-logs/{log_id}/parameters/` - 实际参数值
-**回退**: `POST step_back/`
-**推进到下一步(校验必填参数)**: `POST advance/` (自动校验必填参数)
-**针对已完成的状态节点添加新的参数集**: `POST state-logs/{log_id}/add-parameters/`
---
## 典型使用流程
### 场景 1: 推进到下一状态
```bash
# 1. 查询下一个待执行节点及参数要求
GET /api/v1/stateflow/business-objects/123/next_pending_state/
# 响应显示需要 temperature (必填) 和 humidity (可选)
# 2. 推进到下一状态(提供必填参数)
POST /api/v1/stateflow/business-objects/123/advance/
{
"parameters": {
"temperature": "25.5",
"humidity": "60%"
}
}
```
### 场景 2: 补充参数
```bash
# 1. 从时间线获取已完成状态的 state_log_id
GET /api/v1/stateflow/business-objects/123/timeline/
# 2. 为指定状态记录补充参数
POST /api/v1/stateflow/business-objects/123/state-logs/456/add-parameters/
{
"parameters": {
"inspector": "李四",
"note": "补充检验员信息"
},
"remark": "质检后补充"
}
```
### 场景 3: 查询参数
```bash
# 1. 查询当前状态的必填参数定义
GET /api/v1/stateflow/business-objects/123/current_state_parameters/?required_only=true
# 2. 查询某个状态记录的实际参数值
GET /api/v1/stateflow/business-objects/123/state-logs/456/parameters/
# 3. 查询某个参数的修改历史
GET /api/v1/stateflow/business-objects/123/state-logs/456/parameters/?key=temperature
```
---
## 重要说明
1. **参数存储**: 所有参数值以字符串形式存储在 JSONField 中,支持灵活的数据结构
2. **参数校验**: 仅校验必填参数是否提供,不校验参数值的格式或类型
3. **撤销状态**: 回退操作不删除记录,而是标记为已撤销(`is_cancelled=True`
4. **参数可见性**: 默认情况下,已撤销状态的参数不会返回,需要显式传递 `include_cancelled=true`
5. **参数追加**: 可以多次为同一个状态记录添加参数,所有记录都会保留
6. **参数历史**: 支持查询单个参数的修改历史,按时间顺序返回
---
**文档版本**: 2025-11-15
**测试覆盖**: 55 个测试用例全部通过