fix(webhook): 白名单判定容忍大小写,堵住「两边都丢弃」的静默黑洞
_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。
This commit is contained in:
@ -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")
|
||||
|
||||
Reference in New Issue
Block a user