1
0
forked from erp-dev/erp

feat: wecomm notification support command

This commit is contained in:
2026-01-23 16:11:03 +08:00
parent 88688f9481
commit 34483e9753
5 changed files with 217 additions and 5 deletions

View File

@@ -0,0 +1,48 @@
from __future__ import annotations
from django.core.management.base import BaseCommand, CommandError
from printing.services import send_printing_job_latest_state_wecom
class Command(BaseCommand):
help = "发送指定 PrintingJob 的“最新状态”到企业微信机器人markdown"
def add_arguments(self, parser):
parser.add_argument("printing_job_id", type=int, help="PrintingJob.id")
parser.add_argument("--key", type=str, default=None, help="可选:临时覆盖 settings.WECOM_WEBHOOK_KEY")
parser.add_argument("--timeout", type=float, default=10.0, help="HTTP 超时(秒)")
parser.add_argument(
"--dry-run",
action="store_true",
help="仅输出将要发送的 markdown 内容,不实际调用企业微信 webhook适用于无 https 出网环境)",
)
def handle(self, *args, **options):
printing_job_id = int(options["printing_job_id"])
key = options.get("key")
timeout = float(options.get("timeout") or 10.0)
dry_run = bool(options.get("dry_run"))
try:
result = send_printing_job_latest_state_wecom(
printing_job_id=printing_job_id,
sender_label="系统自动发送",
key=key,
timeout_seconds=timeout,
dry_run=dry_run,
)
except Exception as exc:
raise CommandError(str(exc)) from exc
if dry_run:
self.stdout.write(result["message"])
return
if not bool(result.get("ok")):
raise CommandError(
f"WeCom webhook 返回失败errcode={result.get('errcode')}, errmsg={result.get('errmsg')}, raw={result.get('wecom')}"
)
self.stdout.write(self.style.SUCCESS(f"OK: {result.get('wecom')}"))