forked from erp-dev/erp
feat: added wecom notify when printing_job production was completed(new status) and shipment was created
This commit is contained in:
@@ -6,6 +6,7 @@ from django.conf import settings
|
||||
from django.db import transaction
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from printing import models as printing_models
|
||||
from printing.signals import printing_job_production_completed, printing_order_created
|
||||
from stateflow import models as stateflow_models
|
||||
from stateflow import services as stateflow_services
|
||||
|
||||
@@ -55,7 +56,6 @@ class PrintingOrderService:
|
||||
# domain event: printing order created
|
||||
# handler will ensure transaction.on_commit for external side effects (e.g. WeCom notify)
|
||||
try:
|
||||
from printing.signals import printing_order_created
|
||||
printing_order_created.send(
|
||||
sender=printing_models.PrintingOrder,
|
||||
instance=order,
|
||||
@@ -173,6 +173,8 @@ class PrintingJobService:
|
||||
Returns:
|
||||
创建的任务实例
|
||||
"""
|
||||
data = dict(data)
|
||||
data.pop('is_production_completed', None)
|
||||
printing_order = data.get('printing_order')
|
||||
|
||||
# 绑定创建人
|
||||
@@ -218,6 +220,9 @@ class PrintingJobService:
|
||||
Returns:
|
||||
(success, message, updated_job)
|
||||
"""
|
||||
data = dict(data)
|
||||
data.pop('is_production_completed', None)
|
||||
|
||||
# 更新字段
|
||||
for field, value in data.items():
|
||||
# 不允许直接修改 business_object
|
||||
@@ -227,6 +232,31 @@ class PrintingJobService:
|
||||
|
||||
printing_job.save()
|
||||
return True, '更新成功', printing_job
|
||||
|
||||
@staticmethod
|
||||
@transaction.atomic
|
||||
def make_printing_job_production_completed(
|
||||
printing_job: printing_models.PrintingJob,
|
||||
triggered_by=None,
|
||||
) -> printing_models.PrintingJob:
|
||||
"""显式标记 PrintingJob 已完成生产,并触发领域信号。"""
|
||||
if not printing_job.is_production_completed:
|
||||
printing_job.is_production_completed = True
|
||||
printing_job.save(update_fields=['is_production_completed', 'updated_at'])
|
||||
|
||||
try:
|
||||
printing_job_production_completed.send(
|
||||
sender=printing_models.PrintingJob,
|
||||
instance=printing_job,
|
||||
triggered_by=triggered_by,
|
||||
)
|
||||
except Exception:
|
||||
import logging
|
||||
logging.getLogger(__name__).exception(
|
||||
"[api_v1.views.printing.services] 触发 printing_job_production_completed signal 失败(已忽略)"
|
||||
)
|
||||
|
||||
return printing_job
|
||||
|
||||
@staticmethod
|
||||
def get_job_status(printing_job: printing_models.PrintingJob) -> Dict[str, Any]:
|
||||
@@ -243,5 +273,6 @@ class PrintingJobService:
|
||||
'status': printing_job.status,
|
||||
'status_id': printing_job.status_id,
|
||||
'is_completed': printing_job.is_completed,
|
||||
'is_production_completed': printing_job.is_production_completed,
|
||||
'has_started': printing_job.has_started,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user