From 0f929468a8829c6e2a66d21476c499dbbf8d0ac0 Mon Sep 17 00:00:00 2001 From: yueli Date: Tue, 22 Sep 2026 13:13:53 +0800 Subject: [PATCH] =?UTF-8?q?fix(track):=20track-lookup=20=E6=8C=89=E5=85=AC?= =?UTF-8?q?=E5=8F=B8=E8=B7=AF=E7=94=B1=EF=BC=8C=E4=BF=AE=E5=A4=8D=20LICA?= =?UTF-8?q?=20=E6=89=AB=E7=A0=81=E8=AF=AF=E6=8A=A5"=E7=89=A9=E6=96=99?= =?UTF-8?q?=E4=B8=8D=E5=AD=98=E5=9C=A8"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit lookup_product() 此前写死读全局 TRACK_API_URL(指向 IRIS)。LICA 员工在 LICA 业务里扫码 → 请求打到 IRIS 库 → 查不到 → MOM 报"物料不存在"。 改用 get_current_company_filter() + resolve_track_route(…, 'api') 选实例, 复用既有工具而非另写一套。无请求/JWT 上下文时(脚本、后台任务)包一层 异常保护回落默认实例,不阻断查询。 实测(身份证 0000000000000001 只存在于 LICA 库): LICA 员工 → company_filter='LICA' → 命中 sn='0000000000000001' IRIS 员工 → company_filter='IRIS' → 未命中 改造前两者都会打到 IRIS,LICA 员工必然查不到。 --- .../app/services/track_query_service.py | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/inventory-backend/app/services/track_query_service.py b/inventory-backend/app/services/track_query_service.py index 4219919..11530f6 100644 --- a/inventory-backend/app/services/track_query_service.py +++ b/inventory-backend/app/services/track_query_service.py @@ -29,15 +29,28 @@ def lookup_product(code): sku/material_name/spec_model/material_type/order_no),未命中或异常返回 None。 """ try: - base_url = (current_app.config.get('TRACK_API_URL') or '').strip() api_key = (current_app.config.get('TRACK_WEBHOOK_KEY') or '').strip() - if not base_url: - logger.info("[TrackQuery] 未配置 TRACK_API_URL,跳过查询") - return None if not api_key: logger.info("[TrackQuery] 未配置 TRACK_WEBHOOK_KEY,跳过查询") return None + # ★ 按当前用户所属公司路由到对应的 Track 实例(IRIS / LICA)。 + # 复用 get_current_company_filter():超管/跨域用户返回 None → 回落默认实例。 + # 改造前这里写死读 TRACK_API_URL,LICA 员工在 LICA 业务里扫码会打到 IRIS 库, + # 查不到 → MOM 误报"物料不存在"。 + from app.services.track_webhook_service import resolve_track_route + from app.utils.decorators import get_current_company_filter + try: + company = get_current_company_filter() + except Exception: + # 无请求/JWT 上下文(脚本、后台任务)时回落默认实例,不阻断查询 + company = None + + base_url = resolve_track_route(company, 'api') + if not base_url: + logger.info("[TrackQuery] 未解析到 Track API 地址,跳过查询") + return None + url = f'{base_url}/api/v1/external/products/lookup' headers = { 'Content-Type': 'application/json',