forked from erp-dev/erp
feat: wecomm setting clean
This commit is contained in:
@@ -3,7 +3,9 @@
|
|||||||
#### 1) 新增:企业微信机器人 Webhook(text 消息)util 与测试命令
|
#### 1) 新增:企业微信机器人 Webhook(text 消息)util 与测试命令
|
||||||
|
|
||||||
- settings:
|
- settings:
|
||||||
- `flower/settings.py` 新增 `WECOM_WEBHOOK_BASE_URL` / `WECOM_WEBHOOK_KEY`(按当前需求直接写入 settings,未接入 .env)
|
- `flower/settings.py` 新增 `WECOM_WEBHOOK_BASE_URL` / `WECOM_WEBHOOK_KEY`
|
||||||
|
- `WECOM_WEBHOOK_KEY` 已改为从 `.env` 读取(默认空);若为空,发送时会报错(不会静默吞掉)
|
||||||
|
- 仓库内提供 `env.example`(等价于常见的 `.env.example`),可用 `cp env.example .env` 生成本地 `.env`
|
||||||
- util:
|
- util:
|
||||||
- `api_v1/utils/wecom_webhook.py`
|
- `api_v1/utils/wecom_webhook.py`
|
||||||
- 提供 `send_wecom_webhook_message(content=..., msgtype=..., key=..., timeout_seconds=...)`
|
- 提供 `send_wecom_webhook_message(content=..., msgtype=..., key=..., timeout_seconds=...)`
|
||||||
@@ -36,7 +38,11 @@
|
|||||||
- `PRINTING_JOB_STATE_ADVANCED_WECOM_MARKDOWN_TEMPLATE`
|
- `PRINTING_JOB_STATE_ADVANCED_WECOM_MARKDOWN_TEMPLATE`
|
||||||
- 开关:`PRINTING_JOB_STATE_ADVANCED_WECOM_NOTIFY_ENABLED`(默认测试环境关闭,非测试环境开启)
|
- 开关:`PRINTING_JOB_STATE_ADVANCED_WECOM_NOTIFY_ENABLED`(默认测试环境关闭,非测试环境开启)
|
||||||
- 模板已增加字段:`{sender}`(发送者)
|
- 模板已增加字段:`{sender}`(发送者)
|
||||||
- 模板已增加字段:`{followup_url}`(跟进地址,来自 `PRINTING_JOB_STATE_ADVANCED_FOLLOWUP_URL_TEMPLATE`)
|
- 跟进地址:
|
||||||
|
- `.env`:`PRINTING_JOB_STATE_ADVANCED_FOLLOWUP_URL_TEMPLATE`(默认空)
|
||||||
|
- 若为空则**消息中省略“跟进地址”字段**,但消息仍然发送
|
||||||
|
- 模板占位符:
|
||||||
|
- `{followup_line}`(由 service 渲染:有 url 才会输出“跟进地址”行)
|
||||||
- 模板已增加字段:`{process_params_markdown}`(工序参数,来自 `state_log.get_all_parameters_summary()`)
|
- 模板已增加字段:`{process_params_markdown}`(工序参数,来自 `state_log.get_all_parameters_summary()`)
|
||||||
|
|
||||||
#### 3) 重构:提取“发送最新状态到企业微信”逻辑为可复用 service(便于后续 API 化)
|
#### 3) 重构:提取“发送最新状态到企业微信”逻辑为可复用 service(便于后续 API 化)
|
||||||
|
|||||||
105
env.example
Normal file
105
env.example
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
# Copy this file to ".env" (same directory as manage.py), then fill values.
|
||||||
|
# 注意:这里是示例文件,请勿提交真实密钥到仓库。
|
||||||
|
|
||||||
|
############################
|
||||||
|
# Django / 基础
|
||||||
|
############################
|
||||||
|
SECRET_KEY=replace_me_with_a_strong_secret
|
||||||
|
DEBUG=False
|
||||||
|
|
||||||
|
# 逗号分隔(django-environ Env.list)
|
||||||
|
ALLOWED_HOSTS=yuwenerp.yuwen.cloud,localhost,127.0.0.1
|
||||||
|
CSRF_TRUSTED_ORIGINS=https://yuwenerp.yuwen.cloud,http://localhost:8000
|
||||||
|
|
||||||
|
DATA_UPLOAD_MAX_NUMBER_FIELDS=20000
|
||||||
|
|
||||||
|
############################
|
||||||
|
# 数据库(必填)
|
||||||
|
############################
|
||||||
|
DB_NAME=flower
|
||||||
|
DB_USER=flower
|
||||||
|
DB_PASSWORD=replace_me
|
||||||
|
DB_HOST=localhost
|
||||||
|
DB_PORT=6432
|
||||||
|
CONN_MAX_AGE=0
|
||||||
|
|
||||||
|
############################
|
||||||
|
# 缓存(可选)
|
||||||
|
############################
|
||||||
|
# 二选一:优先使用 CACHE_URL;否则使用 CACHE_HOST/CACHE_PORT/CACHE_DB 组合
|
||||||
|
#CACHE_URL=redis://localhost:6379/0
|
||||||
|
CACHE_HOST=localhost
|
||||||
|
CACHE_PORT=6379
|
||||||
|
CACHE_DB=0
|
||||||
|
CACHE_KEY_PREFIX=flower
|
||||||
|
CACHE_DEFAULT_TIMEOUT=300
|
||||||
|
|
||||||
|
############################
|
||||||
|
# 日志(可选)
|
||||||
|
############################
|
||||||
|
LOG_LEVEL=INFO
|
||||||
|
DJANGO_LOG_LEVEL=INFO
|
||||||
|
UVICORN_LOG_LEVEL=INFO
|
||||||
|
UVICORN_ACCESS_LOG_LEVEL=INFO
|
||||||
|
|
||||||
|
############################
|
||||||
|
# 明道云同步(可选)
|
||||||
|
############################
|
||||||
|
MDY_MERCHANT_ID=1
|
||||||
|
MDY_PRODUCT_CATEGORY_ID=1
|
||||||
|
MDY_SYNC_PAGE_SIZE=100
|
||||||
|
MDY_SYNC_MAX_PAGES=2
|
||||||
|
MDY_SYNC_MAX_RECORDS=200
|
||||||
|
|
||||||
|
############################
|
||||||
|
# 腾讯云 TIIA(建议必填:生产环境请务必使用真实值)
|
||||||
|
############################
|
||||||
|
TENCENTCLOUD_SECRET_ID=replace_me
|
||||||
|
TENCENTCLOUD_SECRET_KEY=replace_me
|
||||||
|
TENCENTCLOUD_TOKEN=
|
||||||
|
TENCENTCLOUD_TIIA_GROUP_ID=168
|
||||||
|
TENCENTCLOUD_TIIA_REGION=ap-guangzhou
|
||||||
|
TENCENTCLOUD_TIIA_ENDPOINT=tiia.tencentcloudapi.com
|
||||||
|
TENCENTCLOUD_TIIA_PIC_NAME_PREFIX=plate_order
|
||||||
|
TENCENTCLOUD_TIIA_QPS=10
|
||||||
|
|
||||||
|
############################
|
||||||
|
# 企业微信机器人(WeCom Webhook)
|
||||||
|
############################
|
||||||
|
# 为空时发送会报错:WeCom webhook key 未配置
|
||||||
|
WECOM_WEBHOOK_KEY=
|
||||||
|
|
||||||
|
# PrintingJob 状态推进通知的“跟进地址”模板;为空则消息里省略“跟进地址”字段
|
||||||
|
PRINTING_JOB_STATE_ADVANCED_FOLLOWUP_URL_TEMPLATE=https://app.yuwen.cloud/workstation/production/batch-advance?orderId={order_id}
|
||||||
|
|
||||||
|
############################
|
||||||
|
# Printing 自动创建销售品(可选)
|
||||||
|
############################
|
||||||
|
AUTO_CREATE_SALESITEM_FROM_PRINT_ORDER=False
|
||||||
|
|
||||||
|
# 必填(settings 中无默认值),用于从指定 State 读取参数创建 SalesItem
|
||||||
|
PRINTING_SALES_ITEM_SOURCE_STATE_ID=0
|
||||||
|
|
||||||
|
############################
|
||||||
|
# Celery(可选)
|
||||||
|
############################
|
||||||
|
# 二选一:优先使用 CELERY_BROKER_URL;否则使用 host/port/user/password/vhost 组合
|
||||||
|
#CELERY_BROKER_URL=amqp://guest:guest@localhost:5672//
|
||||||
|
CELERY_BROKER_HOST=localhost
|
||||||
|
CELERY_BROKER_PORT=5672
|
||||||
|
CELERY_BROKER_USER=guest
|
||||||
|
CELERY_BROKER_PASSWORD=guest
|
||||||
|
CELERY_BROKER_VHOST=/
|
||||||
|
|
||||||
|
# 二选一:优先使用 CELERY_RESULT_BACKEND;否则使用 host/port/db 组合
|
||||||
|
#CELERY_RESULT_BACKEND=redis://localhost:6379/1
|
||||||
|
CELERY_RESULT_HOST=localhost
|
||||||
|
CELERY_RESULT_PORT=6379
|
||||||
|
CELERY_RESULT_DB=1
|
||||||
|
|
||||||
|
############################
|
||||||
|
# CORS(可选)
|
||||||
|
############################
|
||||||
|
# 逗号分隔
|
||||||
|
CORS_ALLOWED_ORIGINS=http://localhost:8000,http://127.0.0.1:5173,http://127.0.0.1:5174,http://127.0.0.1:5179,https://yuwenerp.yuwen.cloud
|
||||||
|
|
||||||
@@ -79,7 +79,7 @@ TENCENTCLOUD_TIIA_QPS = env.int('TENCENTCLOUD_TIIA_QPS', default=10) # Tencent
|
|||||||
# 企业微信机器人 Webhook(目前按需求直接写入 settings,不走 .env)
|
# 企业微信机器人 Webhook(目前按需求直接写入 settings,不走 .env)
|
||||||
# 使用:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx
|
# 使用:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx
|
||||||
WECOM_WEBHOOK_BASE_URL = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send'
|
WECOM_WEBHOOK_BASE_URL = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send'
|
||||||
WECOM_WEBHOOK_KEY = 'cc88bdef-a13f-4d7e-bdb6-ee51b68b8205'
|
WECOM_WEBHOOK_KEY = env('WECOM_WEBHOOK_KEY', default='')
|
||||||
|
|
||||||
|
|
||||||
# CORS 配置
|
# CORS 配置
|
||||||
@@ -272,9 +272,7 @@ else:
|
|||||||
PRINTING_JOB_STATE_ADVANCED_WECOM_NOTIFY_ENABLED = (not TESTING)
|
PRINTING_JOB_STATE_ADVANCED_WECOM_NOTIFY_ENABLED = (not TESTING)
|
||||||
# PrintingJob 跟进地址(用于企业微信通知里展示/点击)
|
# PrintingJob 跟进地址(用于企业微信通知里展示/点击)
|
||||||
# orderId 使用 PrintingOrder.id
|
# orderId 使用 PrintingOrder.id
|
||||||
PRINTING_JOB_STATE_ADVANCED_FOLLOWUP_URL_TEMPLATE = (
|
PRINTING_JOB_STATE_ADVANCED_FOLLOWUP_URL_TEMPLATE = env('PRINTING_JOB_STATE_ADVANCED_FOLLOWUP_URL_TEMPLATE', default='')
|
||||||
"https://app.yuwen.cloud/workstation/production/batch-advance?orderId={order_id}"
|
|
||||||
)
|
|
||||||
PRINTING_JOB_STATE_ADVANCED_WECOM_MARKDOWN_TEMPLATE = (
|
PRINTING_JOB_STATE_ADVANCED_WECOM_MARKDOWN_TEMPLATE = (
|
||||||
"### 印染任务状态推进\n"
|
"### 印染任务状态推进\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -283,7 +281,7 @@ PRINTING_JOB_STATE_ADVANCED_WECOM_MARKDOWN_TEMPLATE = (
|
|||||||
"- **推进状态**:**{state_name}**\n"
|
"- **推进状态**:**{state_name}**\n"
|
||||||
"- **推进时间**:`{advanced_at}`\n"
|
"- **推进时间**:`{advanced_at}`\n"
|
||||||
"- **发送者**:{sender}\n"
|
"- **发送者**:{sender}\n"
|
||||||
"- **跟进地址**:[{followup_url}]({followup_url})\n"
|
"{followup_line}"
|
||||||
"\n"
|
"\n"
|
||||||
"**工序参数**:\n"
|
"**工序参数**:\n"
|
||||||
"{process_params_markdown}\n"
|
"{process_params_markdown}\n"
|
||||||
|
|||||||
@@ -28,8 +28,11 @@ def build_printing_job_followup_url(*, printing_order_id: int | None) -> str:
|
|||||||
tmpl = getattr(
|
tmpl = getattr(
|
||||||
settings,
|
settings,
|
||||||
"PRINTING_JOB_STATE_ADVANCED_FOLLOWUP_URL_TEMPLATE",
|
"PRINTING_JOB_STATE_ADVANCED_FOLLOWUP_URL_TEMPLATE",
|
||||||
"https://app.yuwen.cloud/workstation/production/batch-advance?orderId={order_id}",
|
"",
|
||||||
)
|
)
|
||||||
|
tmpl = (str(tmpl or "")).strip()
|
||||||
|
if not tmpl:
|
||||||
|
return ""
|
||||||
oid = printing_order_id if printing_order_id is not None else ""
|
oid = printing_order_id if printing_order_id is not None else ""
|
||||||
try:
|
try:
|
||||||
return str(tmpl).format(order_id=str(oid))
|
return str(tmpl).format(order_id=str(oid))
|
||||||
@@ -128,19 +131,21 @@ def render_printing_job_state_markdown(
|
|||||||
"- **推进状态**:**{state_name}**\n"
|
"- **推进状态**:**{state_name}**\n"
|
||||||
"- **推进时间**:`{advanced_at}`\n"
|
"- **推进时间**:`{advanced_at}`\n"
|
||||||
"- **发送者**:{sender}\n"
|
"- **发送者**:{sender}\n"
|
||||||
"- **跟进地址**:[{followup_url}]({followup_url})\n"
|
"{followup_line}"
|
||||||
"\n"
|
"\n"
|
||||||
"**工序参数**:\n"
|
"**工序参数**:\n"
|
||||||
"{process_params_markdown}\n"
|
"{process_params_markdown}\n"
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
followup_url = (followup_url or "").strip()
|
||||||
|
followup_line = f"- **跟进地址**:[{followup_url}]({followup_url})\n" if followup_url else ""
|
||||||
return template.format(
|
return template.format(
|
||||||
printing_order_id=str(printing_order_id),
|
printing_order_id=str(printing_order_id),
|
||||||
printing_job_id=str(printing_job_id),
|
printing_job_id=str(printing_job_id),
|
||||||
state_name=str(state_name),
|
state_name=str(state_name),
|
||||||
advanced_at=str(advanced_at),
|
advanced_at=str(advanced_at),
|
||||||
sender=str(sender_label or "系统自动发送"),
|
sender=str(sender_label or "系统自动发送"),
|
||||||
followup_url=str(followup_url),
|
followup_line=str(followup_line),
|
||||||
process_params_markdown=str(process_params_markdown),
|
process_params_markdown=str(process_params_markdown),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user