From 2c092c4c01791f51b0987bd791bf4794dac8d3ee Mon Sep 17 00:00:00 2001 From: yueli Date: Tue, 1 Sep 2026 13:53:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20MOM=20=E5=87=BA=E5=BA=93=E8=81=94?= =?UTF-8?q?=E5=8A=A8=20Track=20=E6=A0=87=E8=AE=B0=E5=B7=B2=E5=87=BA?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 发货出库时反查库存表 serial_number(Track 身份证),commit 后通知 Track mom-outbound - notify_track 支持指定 webhook url(TRACK_OUTBOUND_WEBHOOK_URL) --- .../app/services/outbound_service.py | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/inventory-backend/app/services/outbound_service.py b/inventory-backend/app/services/outbound_service.py index 667c8f3..a3842f6 100644 --- a/inventory-backend/app/services/outbound_service.py +++ b/inventory-backend/app/services/outbound_service.py @@ -15,6 +15,8 @@ from app.models.base import MaterialBase from app.models.transaction import TransRepair # 引入系统用户表 from app.models.system import SysUser +# Track 联动通知(出库 → Track 标记"已出库") +from app.services.track_webhook_service import notify_track, get_current_operator class OutboundService: @@ -194,6 +196,9 @@ class OutboundService: 'stock_product': StockProduct } + # ★ Track 联动收集:(serial_number, source_table, quantity) + track_notifications = [] + try: for item in items: source_table = item.get('source_table') @@ -214,6 +219,9 @@ class OutboundService: repair.repair_status = '已出库' repair.shipping_date = current_time + # 收集 Track 联动信息(维修单带 serial_number) + track_notifications.append((getattr(repair, 'serial_number', None), source_table, quantity)) + # 创建出库记录 new_record = TransOutbound( sku=item.get('sku'), @@ -242,6 +250,9 @@ class OutboundService: stock_record.stock_quantity = float(stock_record.stock_quantity) - quantity stock_record.available_quantity = float(stock_record.available_quantity) - quantity + # 收集 Track 联动信息(库存表 serial_number = Track 身份证) + track_notifications.append((getattr(stock_record, 'serial_number', None), source_table, quantity)) + new_record = TransOutbound( sku=item.get('sku'), source_table=source_table, @@ -262,6 +273,26 @@ class OutboundService: # ★ 先提交事务,释放所有行锁,避免 SMTP 调用延长锁持有时间 db.session.commit() + # ★ 出库后通知 Track(发货出库 → Track 标记"已出库") + # 仅在配置 TRACK_OUTBOUND_WEBHOOK_URL 时生效;notify_track 自身容错不阻断业务 + try: + from flask import current_app + outbound_url = current_app.config.get('TRACK_OUTBOUND_WEBHOOK_URL') + for sn, src_tbl, qty in track_notifications: + if not sn: + continue + notify_track({ + 'event': 'outbound.created', + 'source_table': src_tbl, + 'serial_number': str(sn), + 'quantity': float(qty or 0), + 'outbound_type': common_data['outbound_type'], + 'operator': get_current_operator(), + }, url=outbound_url) + except Exception as e: + import logging + logging.getLogger(__name__).warning(f"⚠️ Track 出库通知失败: {e}") + # ★ 出库后检查低库存预警(移到 commit 之后,避免事务内网络调用) try: from app.services.inventory_task import InventoryWarningService