fix(rush): 试排世界急单全量重排改走柔性引擎
rush.apply 升级/直接采用路径此前固定用主轨 RULE 引擎;试排世界 (planningContext.trialOnly)的主数据都在 flex* 表,RULE 引擎只能产出 0 工单的空壳 V 版本,导致「急单已加入订单池,但排产推演/查看排产结果 看不到」。现按世界形态分流:trialOnly 世界先 sync_sales_orders_to_flex 桥接急单进柔性订单池,再用 PoolEngine 重排生成 FV 草稿版本; 正式世界保持原 RULE 全量重排不变。 新增 _FlexSolveResultView 把 PoolEngine 的 dict 结果适配为回复文案 所需的属性读取口径。golden:rush/flex/order/workflow 196 项全过。
This commit is contained in:
parent
323eeb353c
commit
d02d9d5fee
|
|
@ -308,11 +308,37 @@ def _strategy_cn(s: str) -> str:
|
|||
}.get(s, s)
|
||||
|
||||
|
||||
class _FlexSolveResultView:
|
||||
"""PoolEngine 的 dict 结果适配成主轨结果对象的属性读取口径。
|
||||
|
||||
workflow 的 rush.apply 回复文案按属性读 versionNo/orderCount/conflictCount/
|
||||
totalTardiness;柔性引擎返回 dict,这里做一次只读视图转换。
|
||||
"""
|
||||
|
||||
def __init__(self, payload: dict[str, Any]) -> None:
|
||||
self.versionNo = payload.get("versionNo")
|
||||
self.orderCount = int(payload.get("orderCount") or 0)
|
||||
self.conflictCount = int(payload.get("conflictCount") or 0)
|
||||
self.totalTardiness = float(payload.get("totalTardiness") or 0.0)
|
||||
self.solveStatus = payload.get("solveStatus")
|
||||
|
||||
|
||||
def apply_rush(world: World, next_id, payload: dict[str, Any]) -> dict[str, Any]:
|
||||
"""采用插单:写主干订单池 + 生成 DRAFT 排产版本。调用方负责 checkpoint/审计。"""
|
||||
rush = resolve_rush_payload(world, payload.get("payload") or payload)
|
||||
strategy = str(payload.get("strategy") or "DELIVERY_FIRST").upper()
|
||||
order = inject_rush_trunk(world, next_id, rush)
|
||||
planning_context = world.get("planningContext") or {}
|
||||
if planning_context.get("trialOnly"):
|
||||
# 试排世界必须走柔性能力池引擎:主轨 RULE 引擎读不到 flex* 主数据,
|
||||
# 全量重排只会产出 0 工单的空壳版本,排产推演/查看排产结果都看不到急单。
|
||||
# 改为先把主干急单桥接进柔性订单池,再重跑 PoolEngine 试排(与 run_flex_schedule 同轨)。
|
||||
from server.aps_domain.orders import sync_sales_orders_to_flex
|
||||
from server.engines import PoolEngine
|
||||
|
||||
sync_sales_orders_to_flex(world)
|
||||
flex_result = PoolEngine().solve(world, next_id, trial=True)
|
||||
return {"order": order, "result": _FlexSolveResultView(flex_result), "strategy": strategy}
|
||||
# 正式试排写草稿版本
|
||||
from server.aps_domain.constraints import engine_constraint_flags
|
||||
from server.aps_domain.params import get_schedule_params
|
||||
|
|
|
|||
Loading…
Reference in New Issue