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