1
0
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:
2026-04-09 17:35:14 +08:00
parent 76ea445880
commit 646dbe7f18
27 changed files with 1122 additions and 13 deletions

View File

@@ -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,
}