forked from erp-dev/erp
feat: wecomm notification support command
This commit is contained in:
@@ -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')}"))
|
||||
|
||||
Reference in New Issue
Block a user