From 700486d5d5db5a1d6c7854d54e1a17497ac5bbdc Mon Sep 17 00:00:00 2001 From: duxingchen Date: Tue, 22 Sep 2026 13:46:12 +0800 Subject: [PATCH] =?UTF-8?q?fix(webhook):=20=E7=99=BD=E5=90=8D=E5=8D=95?= =?UTF-8?q?=E5=88=A4=E5=AE=9A=E5=AE=B9=E5=BF=8D=E5=A4=A7=E5=B0=8F=E5=86=99?= =?UTF-8?q?=EF=BC=8C=E5=A0=B5=E4=BD=8F=E3=80=8C=E4=B8=A4=E8=BE=B9=E9=83=BD?= =?UTF-8?q?=E4=B8=A2=E5=BC=83=E3=80=8D=E7=9A=84=E9=9D=99=E9=BB=98=E9=BB=91?= =?UTF-8?q?=E6=B4=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _belongs_to_this_org 此前是 (company_name or "").strip() == ORG_DEPARTMENT —— 只 strip 不 upper,而 IRIS 的 _is_foreign_company 做了 .upper()。两边口径不一致 的后果: company_name = "lica" / "Lica" → IRIS:.upper() 命中外来名单,拒掉 → LICA:不等于 "LICA",白名单拒掉 → 双方都回 200,消息彻底静默丢失 这正是本文档最该防的那种「漏」。改为 .strip().upper() 与 IRIS 对齐。 「严格」指的是白名单语义(只有本部门才收),不是逐字节比对 —— 空白值依然被 拒、未知部门名依然被拒,只是不再因为大小写写法白白丢消息。 实测 11 种取值:修复前 "lica" / "Lica" 是两个黑洞(两边都丢弃),修复后 0 个; 空白 / 全空格 / "IRIS" / "UNKNOWN" / None 仍然全部忽略,严格性未放松。 顺带修正 outbound_type 的取值注释:MOM 的 TransOutbound.outbound_type 实际是 SALES / USE / PRODUCTION(见 projects inventory-backend/app/models/outbound.py 第 136 行),原注释漏了 USE。 --- backend/app/api/v1/endpoints/webhooks.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/backend/app/api/v1/endpoints/webhooks.py b/backend/app/api/v1/endpoints/webhooks.py index 9df5e20..bb7ff62 100644 --- a/backend/app/api/v1/endpoints/webhooks.py +++ b/backend/app/api/v1/endpoints/webhooks.py @@ -63,8 +63,13 @@ def _belongs_to_this_org(company_name: str | None) -> bool: 配置,不收就彻底丢了。 LICA 没有兜底角色,空白值只可能来自"MOM 没判定出公司",那本就该由 IRIS 兜。**宁可漏,不可误收**:误收会把别的部门的设备状态改掉。 + + ⚠️ 大小写与首尾空白都容忍(.strip().upper()),与 IRIS 的判定口径对齐。 + 两边若一个容忍、一个不容忍,小写写法("lica")会同时被 IRIS 当外来户 + 拒掉、又被本实例的白名单拒掉 —— 双方都回 200,消息静默丢失,正是本文 + 档最该防的那种「漏」。「严格」指的是白名单语义,不是逐字节比对。 """ - return (company_name or "").strip() == settings.ORG_DEPARTMENT + return (company_name or "").strip().upper() == settings.ORG_DEPARTMENT.strip().upper() def _attribute_audit_to_mom_operator(request: Request, operator: str | None) -> None: @@ -407,7 +412,7 @@ class MomOutboundPayload(BaseModel): outbound_time: datetime | None = None # 出库时间 # ↓ 2026-09 新增:部门路由键,本实例只认 "LICA"(见 _belongs_to_this_org) company_name: str | None = None # IRIS / LICA - outbound_type: str | None = None # SALES / PRODUCTION(MOM 一直在发,此前被丢弃) + outbound_type: str | None = None # SALES / USE / PRODUCTION(MOM 一直在发,此前被丢弃) @router.post("/mom-outbound")