1
0
forked from erp-dev/erp
Files
erpnew/business/notifications.py
2026-07-01 11:51:13 +08:00

41 lines
1.1 KiB
Python

import logging
from django.conf import settings
from django.db import transaction
logger = logging.getLogger(__name__)
def enqueue_business_order_speech(*, order, order_label: str, action_label: str) -> None:
if not getattr(settings, 'BUSINESS_ORDER_SPEECH_NOTIFY_ENABLED', True):
return
if _is_external_order(order):
return
order_id = _get_order_identifier(order)
text = f'{order_label} {order_id}{action_label}'
def _enqueue():
try:
from business.tasks import notify_business_order_speech
notify_business_order_speech.delay(text=text)
except Exception:
logger.exception('[business.notifications] 投递业务单据语音播报任务失败(已忽略)')
transaction.on_commit(_enqueue)
def _is_external_order(order) -> bool:
return bool(
getattr(order, 'is_external_source', False)
or getattr(order, 'external_source_id', None)
)
def _get_order_identifier(order) -> str:
human_id = getattr(order, 'human_id', None)
if human_id:
return str(human_id)
return str(getattr(order, 'id', ''))