forked from erp-dev/erp
feat: big
This commit is contained in:
40
business/notifications.py
Normal file
40
business/notifications.py
Normal file
@@ -0,0 +1,40 @@
|
||||
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', ''))
|
||||
Reference in New Issue
Block a user