# 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 个测试用例全部通过