From de34a939d08581382f6cde40c6fc3af436c9552f Mon Sep 17 00:00:00 2001 From: yueli Date: Tue, 22 Sep 2026 13:13:52 +0800 Subject: [PATCH] =?UTF-8?q?feat(track):=20=E6=96=B0=E5=A2=9E=20TRACK=5FROU?= =?UTF-8?q?TES=20=E5=A4=9A=E5=AE=9E=E4=BE=8B=E8=B7=AF=E7=94=B1=E8=A1=A8?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Track 现在有两个独立实例(IRIS / LICA),MOM 此前所有 Track 配置都写死 指向 IRIS,LICA 的业务拿不到入库/出库联动,且 /track-lookup 对 LICA 员工是坏的。 新增 TRACK_ROUTES 环境变量(JSON),按 material_base.company_name 决定 业务落到哪个实例: {"IRIS": {"api":..., "inbound":..., "outbound":...}, "LICA": {...}} 原有三个扁平变量(TRACK_API_URL / TRACK_WEBHOOK_URL / TRACK_OUTBOUND_WEBHOOK_URL)保留为「未命中路由表」时的回落默认值; TRACK_ROUTES 缺省为空表时,行为与改造前逐字节一致(向后兼容)。 ⚠️ JSON 解析失败直接抛异常让进程起不来(fail fast)——路由表写坏却静默 回落,会造成"某些公司悄悄断链",比启动报错难排查得多。 docker-compose.yml 用容器名互访(inventory_api / track_backend / lica_backend 三个容器同属 projects_default 网络,不走宿主机端口)。 判定维度用 company_name 而非 category:实测 category 两个方向都会错 (10 条 LICA 物料挂在 IRIS/ 分类下;IRIS 分类里含 "IRIS/成品/LICA/..." 那是产品线名不是部门名,共 171 条)。 --- docker-compose.yml | 10 ++++++++++ inventory-backend/config.py | 15 +++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index f1f13a2..c981bbe 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -41,6 +41,16 @@ services: TRACK_API_URL: ${TRACK_API_URL:-} # Track 出库 webhook(发货出库时通知 Track 标记"已出库") TRACK_OUTBOUND_WEBHOOK_URL: ${TRACK_OUTBOUND_WEBHOOK_URL:-} + # ★ 多 Track 实例路由表:按 material_base.company_name 决定走哪个实例。 + # 上面三个扁平变量保留为「未命中路由表」时的回落默认值(向后兼容)。 + # ★ 用容器名互访(同属 projects_default 网络),不走宿主机端口。 + TRACK_ROUTES: >- + {"IRIS":{"api":"http://track_backend:8000", + "inbound":"http://track_backend:8000/api/v1/external/webhooks/mom-inbound", + "outbound":"http://track_backend:8000/api/v1/external/webhooks/mom-outbound"}, + "LICA":{"api":"http://lica_backend:8000", + "inbound":"http://lica_backend:8000/api/v1/external/webhooks/mom-inbound", + "outbound":"http://lica_backend:8000/api/v1/external/webhooks/mom-outbound"}} depends_on: - db diff --git a/inventory-backend/config.py b/inventory-backend/config.py index b23cd7c..8f6d5cd 100644 --- a/inventory-backend/config.py +++ b/inventory-backend/config.py @@ -1,3 +1,4 @@ +import json import os from datetime import timedelta @@ -85,3 +86,17 @@ class Config: TRACK_API_URL = os.getenv('TRACK_API_URL', 'http://track_backend:8000') # Track 出库 webhook 接收地址(发货出库时通知 Track 标记"已出库") TRACK_OUTBOUND_WEBHOOK_URL = os.getenv('TRACK_OUTBOUND_WEBHOOK_URL', '') + + # ========================================================= + # 9. 多 Track 实例路由表 (IRIS / LICA) + # ========================================================= + # JSON 结构: {"IRIS": {"api": "...", "inbound": "...", "outbound": "..."}, "LICA": {...}} + # 由 material_base.company_name 决定业务落到哪个 Track 实例。 + # 缺省为空字典 → 全部回落到上面第 7/8 节的扁平变量,行为与改造前一致。 + # + # ⚠️ 解析失败直接让进程起不来(fail fast)——路由表写坏却静默回落, + # 会造成"某些公司悄悄断链",比启动报错难排查得多。 + try: + TRACK_ROUTES = json.loads(os.getenv('TRACK_ROUTES', '{}') or '{}') + except ValueError as e: + raise RuntimeError(f'TRACK_ROUTES 不是合法 JSON,请检查环境变量: {e}')