# Bug 修复报告 ## 基本信息 - 日期:2025-11-22 - 模块:stateflow(流程状态管理) - 修复者:Cline --- ## 问题描述 API `GET /api/v1/stateflow/business-objects/xxx/state-logs/` 无法获取已撤销状态的工艺参数。 **具体表现**:当一个状态流转记录被撤销后,通过该API获取状态日志列表时,已撤销状态记录的工艺参数会被过滤掉,导致参数丢失。 **影响范围**: 1. 使用 `GET /api/v1/stateflow/business-objects/xxx/state-logs/` API 获取包含已撤销状态的日志列表 2. 依赖这些日志进行审计、回溯或数据分析的功能 --- ## 根本原因 在 `StateFlowRecordWithParametersSerializer` 中调用 `get_all_parameters_summary()` 时未传递 `include_cancelled=True` 参数,导致已撤销状态的参数被 `get_all_parameters_summary()` 方法内部逻辑过滤掉。 --- ## 修复方案 修改 `/home/f/coding/flower/stateflow/serializers.py` 中的 `get_parameters_summary` 方法: **修改前**: ```python def get_parameters_summary(self, obj): """获取参数摘要""" return obj.get_all_parameters_summary() ``` **修改后**: ```python def get_parameters_summary(self, obj): """获取参数摘要,包含已撤销状态的参数""" return obj.get_all_parameters_summary(include_cancelled=True) ``` --- ## 测试验证 1. **创建测试用例**:在 `/home/f/coding/flower/stateflow/tests/test_business_object_api.py` 中创建 `test_get_state_logs_api_cancelled_state_with_parameters` 测试用例,用于复现和验证bug。 2. **验证修复**: - 运行测试用例 `test_get_state_logs_api_cancelled_state_with_parameters` - 修复前测试失败,修复后测试通过 - 验证已撤销状态的工艺参数能够正确返回 --- ## 总结 该修复确保了已撤销状态的工艺参数不会丢失,与未撤销状态的处理方式保持一致,符合业务需求。修复仅涉及一行代码的修改,但确保了数据完整性和API的一致性。