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()