certflow.controllers.correction_queue_controller 源代码

# certflow/controllers/correction_queue_controller.py
"""校正队列控制器

桥接校正队列界面(View)与校正队列服务(Service):
- 读:列出黄标(flag)销售计划记录 + 未释放隔离(quarantine)记录;
- 写:校正黄标(upsert 字典自学习)/ 释放隔离(重建 SalePlan)/ 删除隔离。

架构层次:View (CorrectionQueueView) → Controller (CorrectionQueueController)
         → Service (CorrectionQueueService)
         → Model (SalePlan / QuarantineSalePlan / CaliberMapping / ModelParamMapping)
"""

from __future__ import annotations

from typing import Any

from certflow.controllers.base_controller import BaseController
from certflow.services.correction_queue_service import CorrectionQueueService
from certflow.utils.logger import logger


[文档] class CorrectionQueueController(BaseController): """校正队列控制器 — 校正队列界面的业务调度层""" def __init__(self, db_session=None, db_manager=None, use_shared: bool = True): super().__init__(db_session=db_session, db_manager=db_manager, use_shared=use_shared) self._service = self.get_service(CorrectionQueueService) # ============================================================ # 读操作 # ============================================================
[文档] def list_flagged(self) -> list[Any]: """返回全部黄标(flag=True)销售计划记录。""" return self._service.list_flagged()
[文档] def list_quarantined(self) -> list[Any]: """返回全部未释放隔离记录。""" return self._service.list_quarantined()
[文档] def quarantine_stats(self) -> dict[str, int]: """隔离统计(总数/已释放/待处理)。""" return self._service.quarantine_stats()
[文档] def get_sale_plan(self, sale_plan_id: int) -> Any: return self._service.get_sale_plan(sale_plan_id)
[文档] def get_quarantine(self, quarantine_id: int) -> Any: return self._service.get_quarantine(quarantine_id)
# ============================================================ # 写操作(提交事务) # ============================================================
[文档] def correct_sale_plan( self, sale_plan_id: int, corrections: dict[str, Any], learn: bool = True, recheck: bool = True, ) -> Any: """校正一条黄标记录:写字段 + 完整性核对清 flag + upsert 字典自学习。 Returns: (SalePlan, 仍未解决字段列表);列表非空表示黄标已保留。 """ try: result = self._service.correct_sale_plan( sale_plan_id, corrections, learn=learn, recheck=recheck ) self.commit() return result except Exception as e: self.rollback() logger.error(f"校正黄标记录失败: {e}") raise
[文档] def release_quarantine( self, quarantine_id: int, corrections: dict[str, Any] | None = None ) -> Any: """释放一条隔离记录:用原始快照 + 校正重建 SalePlan,标记隔离已处理。""" try: result = self._service.release_quarantine(quarantine_id, corrections) self.commit() return result except Exception as e: self.rollback() logger.error(f"释放隔离记录失败: {e}") raise
[文档] def delete_quarantine(self, quarantine_id: int) -> bool: """直接删除一条隔离记录(确认无效)。""" try: result = self._service.delete_quarantine(quarantine_id) self.commit() return result except Exception as e: self.rollback() logger.error(f"删除隔离记录失败: {e}") raise
# ============================================================ # 资源清理 # ============================================================
[文档] def refresh(self) -> None: """刷新会话(重新加载)。""" try: self.session.commit() except Exception as e: # pragma: no cover - 防御性 logger.debug(f"refresh 提交失败(忽略): {e}") self.session.rollback() self.session.expire_all()