forked from erp-dev/erp
2.2 KiB
2.2 KiB
2026-01-16 工作日志
背景
需要在 stateflow 模块提供一种通用查询能力:按“已完成的状态节点(state_id)+ 工艺参数 key/value”反查相关的 BusinessObject 列表。
典型场景:查找所有 已完成“画图中”节点,且工艺参数“设计师名称”为“AAA”的业务对象(并可通过 content_type/object_id 追溯到实际业务对象,如 printing.plateorder)。
今日任务
- 为
GET /api/v1/stateflow/business-objects/增加过滤条件:state_id+param_key+param_value - 增加 PostgreSQL JSONB 查询性能优化:为
StateLogParameterRecord.parameters添加 GIN(jsonb_path_ops)索引 - 补齐/更新测试用例,验证过滤行为与撤销记录处理
今日完成
1) BusinessObject 查询能力增强(按已完成节点 + 工艺参数过滤)
在 api_v1/views/stateflow/business_object.py 的 BusinessObjectFilterSet 中新增过滤参数:
state_id:状态节点 ID(表示“已完成该节点”,仅匹配StateFlowRecord.is_cancelled=False)param_key:工艺参数 keyparam_value:工艺参数 value
典型用法(示例:查 printing.plateorder 类型):
GET /api/v1/stateflow/business-objects/?content_type_str=printing.plateorder&state_id=<id>¶m_key=设计师名称¶m_value=AAA&limit=500&offset=0
实现方式使用 Exists(OuterRef) 子查询,避免 join + distinct 的重复行问题,性能更稳定。
2) PostgreSQL JSONB 索引优化
新增迁移:stateflow/migrations/0022_statelogparameterrecord_parameters_gin_index.py
- 为
StateLogParameterRecord.parameters增加GIN(jsonb_path_ops)索引 - 主要加速
parameters__contains={key: value}(即jsonb @> ...)这类查询
3) 测试补齐
在 stateflow/tests/test_business_object_crud_and_filters_api.py 增加用例,覆盖:
- 命中:已完成节点 + 参数匹配
- 不命中:参数值不一致
- 排除:已撤销的
StateFlowRecord不参与匹配
另外,为保证 stateflow 测试集可持续运行,恢复了 stateflow.services.clone_business_object() 的实现(此前曾临时禁用导致测试失败)。