forked from erp-dev/erp
feat: added command for pre sales order message notify
This commit is contained in:
0
business/management/__init__.py
Normal file
0
business/management/__init__.py
Normal file
0
business/management/commands/__init__.py
Normal file
0
business/management/commands/__init__.py
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
|
from django.utils import timezone
|
||||||
|
|
||||||
|
from api_v1.utils.wecom_webhook import send_wecom_webhook_message
|
||||||
|
from business import models as business_models
|
||||||
|
from business.pre_order_services import render_pre_sales_order_created_markdown
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = "发送预销售单创建通知到企业微信,并在控制台输出渲染后的消息内容"
|
||||||
|
|
||||||
|
def add_arguments(self, parser):
|
||||||
|
parser.add_argument("pre_sales_order_id", type=int, help="预销售单 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 超时(秒)",
|
||||||
|
)
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
pre_sales_order_id = options["pre_sales_order_id"]
|
||||||
|
key = options["key"]
|
||||||
|
timeout = options["timeout"]
|
||||||
|
|
||||||
|
try:
|
||||||
|
order = (
|
||||||
|
business_models.PreSalesOrder.objects.select_related(
|
||||||
|
"customer",
|
||||||
|
"warehouse",
|
||||||
|
"operator",
|
||||||
|
"created_by",
|
||||||
|
)
|
||||||
|
.get(id=pre_sales_order_id)
|
||||||
|
)
|
||||||
|
except business_models.PreSalesOrder.DoesNotExist as exc:
|
||||||
|
raise CommandError(f"预销售单 {pre_sales_order_id} 不存在") from exc
|
||||||
|
|
||||||
|
created_by = getattr(order, "created_by", None)
|
||||||
|
operator = getattr(order, "operator", None)
|
||||||
|
|
||||||
|
operator_label = getattr(operator, "name", None) if operator else None
|
||||||
|
emp = getattr(created_by, "employee", None) if created_by else None
|
||||||
|
created_by_employee_name = getattr(emp, "name", None) if emp is not None else None
|
||||||
|
created_by_username = getattr(created_by, "username", None) if created_by else None
|
||||||
|
sender_label = operator_label or created_by_employee_name or created_by_username or "系统自动发送"
|
||||||
|
|
||||||
|
customer_name = getattr(getattr(order, "customer", None), "name", None) or "-"
|
||||||
|
warehouse_name = getattr(getattr(order, "warehouse", None), "name", None) or "-"
|
||||||
|
try:
|
||||||
|
kind_label = getattr(order, "get_kind_display", lambda: None)() or None
|
||||||
|
except Exception:
|
||||||
|
kind_label = None
|
||||||
|
|
||||||
|
items_count = order.items.count()
|
||||||
|
|
||||||
|
created_at_dt = getattr(order, "created_at", None)
|
||||||
|
created_at = (
|
||||||
|
timezone.localtime(created_at_dt).strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
if created_at_dt is not None
|
||||||
|
else timezone.localtime(timezone.now()).strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
)
|
||||||
|
|
||||||
|
message = render_pre_sales_order_created_markdown(
|
||||||
|
pre_sales_order_id=str(getattr(order, "id", "-") or "-"),
|
||||||
|
human_id=str(getattr(order, "human_id", "-") or "-"),
|
||||||
|
created_at=str(created_at),
|
||||||
|
sender_label=str(sender_label),
|
||||||
|
customer_name=str(customer_name),
|
||||||
|
warehouse_name=str(warehouse_name),
|
||||||
|
kind=str(kind_label or "-"),
|
||||||
|
items_count=int(items_count or 0),
|
||||||
|
)
|
||||||
|
|
||||||
|
self.stdout.write("\n===== Rendered WeCom Markdown =====\n")
|
||||||
|
self.stdout.write(message)
|
||||||
|
self.stdout.write("\n===== End =====\n")
|
||||||
|
|
||||||
|
try:
|
||||||
|
resp = send_wecom_webhook_message(
|
||||||
|
content=message,
|
||||||
|
msgtype="markdown",
|
||||||
|
key=key,
|
||||||
|
timeout_seconds=timeout,
|
||||||
|
)
|
||||||
|
except Exception as exc:
|
||||||
|
raise CommandError(str(exc)) from exc
|
||||||
|
|
||||||
|
if not resp.ok:
|
||||||
|
raise CommandError(f"WeCom webhook 返回失败:errcode={resp.errcode}, errmsg={resp.errmsg}, raw={resp.raw}")
|
||||||
|
|
||||||
|
self.stdout.write(self.style.SUCCESS(f"OK: {resp.raw}"))
|
||||||
Reference in New Issue
Block a user