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