diff --git a/inventory-backend/app/services/outbound_service.py b/inventory-backend/app/services/outbound_service.py index bb77bf4..35d81a5 100644 --- a/inventory-backend/app/services/outbound_service.py +++ b/inventory-backend/app/services/outbound_service.py @@ -285,6 +285,13 @@ class OutboundService: # 在那里引用 approval 会直接 UnboundLocalError(上线时踩过)。 common_data['applicant_id'] = approval.applicant_id + # ★ 来源申请单也一并记下(同样必须在 approval 取出**之后**)。只落 + # applicant_id 的话,从一条出库明细反查不到它属于哪张单 —— 单号 + # request_no、申请说明、明细快照 items_json 全都在申请单上。 + # ⚠ 这是**表里真实存在的列**,可以进 common_data;下面 notify_track + # 里那些只发给 Track 的展示字段(request_no / applicant_name)不行。 + common_data['request_id'] = approval.id + model_map = { 'stock_buy': StockBuy, 'stock_semi': StockSemi, @@ -442,6 +449,19 @@ class OutboundService: 'outbound_type': common_data['outbound_type'], 'company_name': company, 'operator': get_current_operator(), + # ↓ 单据上下文:Track 侧据此在产品详情展示「这台设备对应 + # MOM 的哪张出库单」。这几个字段整批共用,直接读 + # common_data / approval(两者在 notify_track 处都在作用域内)。 + # ⚠ 只发给 Track 的展示字段,**不要**写进 common_data —— + # 它会被 ** 展开进 TransOutbound(**common_data), + # 多一个不在表里的键会直接抛 TypeError。 + 'outbound_no': common_data['outbound_no'], + 'request_no': approval.request_no, + 'consumer_name': common_data['consumer_name'], + 'applicant_name': approval._get_user_name(approval.applicant_id), + # naive datetime 必须先转字符串,JSON 序列化不了 + 'outbound_time': current_time.isoformat(), + 'remark': common_data['remark'], }) except Exception as e: import logging