feat: MOM 出库联动 Track 标记已出库
- 发货出库时反查库存表 serial_number(Track 身份证),commit 后通知 Track mom-outbound - notify_track 支持指定 webhook url(TRACK_OUTBOUND_WEBHOOK_URL)
This commit is contained in:
@ -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
|
||||
|
||||
Reference in New Issue
Block a user