certflow.services.correction_queue_service module

#30 P1 校正队列服务(黄标校正 + 隔离释放 + upsert 自学习)

替代 VBA D 阶段的「InputBox 人工兜底 + Stop 硬断 + CanShuSheet 回写」: - 导入后黄标行(flag=True:口径/型号无标准号待复核)与隔离行(quarantine)

统一在校正队列 UI 列出;

  • 人工校正后 upsert 进字典表(CaliberMapping / ModelParamMapping), 下次同值导入即自动命中(等价 VBA 自学习回写,但非阻塞、可追溯、团队共享);

  • 隔离行可释放重建为 SalePlan(补全要货单号后回归正常导入)。

架构层次:View (CorrectionQueueView) → Controller (CorrectionQueueController)

→ Service (CorrectionQueueService) → Model (SalePlan/QuarantineSalePlan/字典表)

class certflow.services.correction_queue_service.CorrectionQueueService(session)[源代码]

基类:object

校正队列服务:黄标校正 + 隔离释放 + 字典自学习。

参数:

session (Session)

list_flagged(limit=500)[源代码]

列出黄标(flag=True)的销售计划记录(待人工复核口径/标准号)。

参数:

limit (int)

返回类型:

list[SalePlan]

list_quarantined(limit=500)[源代码]

列出未释放(resolved=False)的隔离记录。

参数:

limit (int)

返回类型:

list[QuarantineSalePlan]

get_quarantine(quarantine_id)[源代码]
参数:

quarantine_id (int)

返回类型:

QuarantineSalePlan | None

get_sale_plan(sale_plan_id)[源代码]
参数:

sale_plan_id (int)

返回类型:

SalePlan | None

correct_sale_plan(sale_plan_id, corrections, learn=True, recheck=True)[源代码]

校正一条黄标销售计划记录,并可选 upsert 进字典表自学习。

补录后做**完整性核对**:仅当该行全部必填空白(口径 + 公称压力)都已 解决才清除黄标;仍有缺口则保留黄标,等后续续补。避免「补了一个口径就 默认整行补齐、误清黄标」(标准号导入期留空、打印回填,不计入黄标)。

合同口径保护`product_spec`(合同口径)与 `product_model`(型号) 参与导入去重的唯一键计算,校正**一律不修改**这两列(空白必须保持空白, 否则重导入时 key 变化无法与原始记录对应)。从型号等推得的口径改写入 合格证字段 `cert_product_spec`(口径串)与 `spec_norm`(规范化数字, 不参与重导入 key,可安全写)。

参数:
  • sale_plan_id (int) -- 销售计划主键

  • corrections (dict[str, Any]) -- 校正字段。可写列:spec_norm / pressure_value / test_standard / cert_product_specproduct_spec / product_model 即使传入也被忽略(保护唯一键,仅作学习键读取)。

  • learn (bool) -- 是否把校正结果 upsert 进字典表(CaliberMapping/ModelParamMapping), 默认 True。仅校正字段非空且对应原始键存在时才学习。

  • recheck (bool) -- 是否做完整性核对决定黄标去留(默认 True)。为 False 时 强制清除黄标(对应 UI「仅标记已复核」)。

返回:

(更新后的 SalePlan, 仍未解决的字段中文名列表);id 不存在返回 (None, [])。 列表非空表示黄标已保留、仍有 N 处待补录。

返回类型:

tuple[SalePlan | None, list[str]]

release_quarantine(quarantine_id, corrections=None)[源代码]

释放一条隔离记录:用原始快照 + 人工校正重建 SalePlan,并标记隔离已处理。

参数:
  • quarantine_id (int) -- 隔离记录主键

  • corrections (dict[str, Any] | None) -- 人工补全字段(通常含 sales_order_no/production_order_no/plan_no 等要货单号,使其不再被门控)

返回:

新建的 SalePlan;id 不存在或已释放返回 None。

返回类型:

SalePlan | None

delete_quarantine(quarantine_id)[源代码]

直接删除一条隔离记录(确认无效、不释放)。

参数:

quarantine_id (int)

返回类型:

bool

quarantine_stats()[源代码]

隔离统计:未释放 / 已释放 / 总数。

返回类型:

dict[str, int]