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.transaction import TransRepair
|
||||||
# 引入系统用户表
|
# 引入系统用户表
|
||||||
from app.models.system import SysUser
|
from app.models.system import SysUser
|
||||||
|
# Track 联动通知(出库 → Track 标记"已出库")
|
||||||
|
from app.services.track_webhook_service import notify_track, get_current_operator
|
||||||
|
|
||||||
|
|
||||||
class OutboundService:
|
class OutboundService:
|
||||||
@ -194,6 +196,9 @@ class OutboundService:
|
|||||||
'stock_product': StockProduct
|
'stock_product': StockProduct
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ★ Track 联动收集:(serial_number, source_table, quantity)
|
||||||
|
track_notifications = []
|
||||||
|
|
||||||
try:
|
try:
|
||||||
for item in items:
|
for item in items:
|
||||||
source_table = item.get('source_table')
|
source_table = item.get('source_table')
|
||||||
@ -214,6 +219,9 @@ class OutboundService:
|
|||||||
repair.repair_status = '已出库'
|
repair.repair_status = '已出库'
|
||||||
repair.shipping_date = current_time
|
repair.shipping_date = current_time
|
||||||
|
|
||||||
|
# 收集 Track 联动信息(维修单带 serial_number)
|
||||||
|
track_notifications.append((getattr(repair, 'serial_number', None), source_table, quantity))
|
||||||
|
|
||||||
# 创建出库记录
|
# 创建出库记录
|
||||||
new_record = TransOutbound(
|
new_record = TransOutbound(
|
||||||
sku=item.get('sku'),
|
sku=item.get('sku'),
|
||||||
@ -242,6 +250,9 @@ class OutboundService:
|
|||||||
stock_record.stock_quantity = float(stock_record.stock_quantity) - quantity
|
stock_record.stock_quantity = float(stock_record.stock_quantity) - quantity
|
||||||
stock_record.available_quantity = float(stock_record.available_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(
|
new_record = TransOutbound(
|
||||||
sku=item.get('sku'),
|
sku=item.get('sku'),
|
||||||
source_table=source_table,
|
source_table=source_table,
|
||||||
@ -262,6 +273,26 @@ class OutboundService:
|
|||||||
# ★ 先提交事务,释放所有行锁,避免 SMTP 调用延长锁持有时间
|
# ★ 先提交事务,释放所有行锁,避免 SMTP 调用延长锁持有时间
|
||||||
db.session.commit()
|
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 之后,避免事务内网络调用)
|
# ★ 出库后检查低库存预警(移到 commit 之后,避免事务内网络调用)
|
||||||
try:
|
try:
|
||||||
from app.services.inventory_task import InventoryWarningService
|
from app.services.inventory_task import InventoryWarningService
|
||||||
|
|||||||
Reference in New Issue
Block a user