feat: MOM 出库联动 Track 标记已出库

- 发货出库时反查库存表 serial_number(Track 身份证),commit 后通知 Track mom-outbound
- notify_track 支持指定 webhook url(TRACK_OUTBOUND_WEBHOOK_URL)
This commit is contained in:
yueli
2026-09-01 13:53:00 +08:00
parent bee037f925
commit 2c092c4c01

View File

@ -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