让七月迭代具备可直接部署的配置基线
补齐三套环境配置、测试环境部署门禁与 system_config 初始化,并按当前无企微应用的约束将企微凭据改为明文存储。 Constraint: 当前测试环境尚无企微应用及历史企微密文数据 Rejected: 使用启动环境变量加密企微凭据 | 用户明确要求直接明文保存并移除加密密钥 Confidence: high Scope-risk: moderate Directive: 企微真实闭环完成前保持两个旧审批入口开关为 true Tested: gofmt;git diff --check;bash -n;docker compose config;Gitea workflow YAML 解析;OpenAPI 重新生成 Not-tested: go test;常规 go build;LSP;实际数据库迁移;真实测试环境部署;企微真实联调
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
## 交付状态
|
||||
|
||||
本说明覆盖 `deliver-july-iteration-confirmed-scope` 的企业微信、Gateway、Redis/Asynq、对象存储和前端联调输入。生产代码、增量迁移和 OpenAPI 已生成至可联调状态;测试库已执行至 `000194` 并完成结构核对,尚未执行自动化测试、完整构建、LSP 或真实外部环境闭环。
|
||||
本说明覆盖 `deliver-july-iteration-confirmed-scope` 的企业微信、Gateway、Redis/Asynq、对象存储和前端联调输入。生产代码、增量迁移和 OpenAPI 已生成至可联调状态;仓库迁移已新增至 `000196`,测试环境下次部署时由 API 启动脚本自动执行,尚未执行自动化测试、完整构建、LSP 或真实外部环境闭环。
|
||||
|
||||
接口统一使用 `{code,msg,data,timestamp}` 响应。完整请求和响应结构以 `docs/admin-openapi.yaml` 为准。
|
||||
|
||||
@@ -14,8 +14,7 @@
|
||||
| --- | --- | --- |
|
||||
| `JUNHONG_WECOM_BASE_URL` | 环境变量 | 默认 `https://qyapi.weixin.qq.com` |
|
||||
| `JUNHONG_WECOM_TIMEOUT` | 环境变量 | 默认 `10s` |
|
||||
| `JUNHONG_WECOM_CREDENTIAL_ENCRYPTION_KEY` | 环境变量 | 32 字节随机密钥的 Base64 文本;更换前必须先完成历史凭据重加密 |
|
||||
| `corp_id`、`agent_id`、Secret | `POST /api/admin/wecom/applications` | 管理端按明文提交,服务端加密保存;超级管理员读取时返回明文,业务日志不记录 |
|
||||
| `corp_id`、`agent_id`、Secret | `POST /api/admin/wecom/applications` | 管理端按明文提交并保存;超级管理员读取时返回明文,业务日志不记录 |
|
||||
| 回调 Token、EncodingAESKey | 同上 | Token 按明文提交;EncodingAESKey 固定 43 位 |
|
||||
| 默认发起人 | `PUT /api/admin/wecom/applications/:id/default-creator` | 必须先同步可见成员,再从当前可见成员中选择 |
|
||||
| `template_id` 和控件映射 | `PUT /api/admin/wecom/scenes/:business_type` | 模板必须先在企微后台创建,本系统只校验和绑定 |
|
||||
@@ -28,7 +27,7 @@ GET/POST {API_PUBLIC_BASE_URL}/api/callback/wecom/approval/{application_id}
|
||||
|
||||
### 配置和联调顺序
|
||||
|
||||
1. 配置加密 Key,部署 API 和 Worker。
|
||||
1. 部署 API 和 Worker,并确认数据库迁移已执行至最新版本。
|
||||
2. 创建应用配置并调用 `POST /api/admin/wecom/applications/:id/test` 验证取 token。
|
||||
3. 调用 `POST /api/admin/wecom/applications/:id/members/sync`,再分页查询成员。
|
||||
4. 为内部系统账号调用 `PUT /api/admin/accounts/:id/wecom-binding` 绑定 `(corp_id,userid)`。
|
||||
@@ -80,6 +79,19 @@ API 与 Worker 必须连接同一 Redis/Asynq。新增或复用的任务如下
|
||||
|
||||
联调时确认 Worker 启动日志已注册上述 Handler,且 `JUNHONG_WORKER_ROLE` 的部署拓扑为单实例 `all`,或严格一个 `leader` 加多个 `consumer`。
|
||||
|
||||
## System Config 初始化
|
||||
|
||||
迁移 `000195_seed_july_system_config` 初始化以下 6 个代码已注册配置;使用 `ON CONFLICT DO NOTHING`,不会覆盖环境管理员已经保存的值:
|
||||
|
||||
- `carrier_callback.ctcc_realname.enabled=false`
|
||||
- `carrier_callback.cmcc_realname.enabled=false`
|
||||
- `carrier_callback.cucc_realname.enabled=false`
|
||||
- `carrier_callback.cucc_realname_removal.enabled=false`
|
||||
- `c2b.payment.card_allowed_methods=["wallet","wechat","alipay"]`
|
||||
- `c2b.payment.device_allowed_methods=["wallet","wechat","alipay"]`
|
||||
|
||||
部署后通过 `GET /api/admin/system-configs` 核对 6 项均为 `registered=true`。运营商回调默认关闭,完成对应运营商联调后再逐项开启;支付方式默认全选,可由超级管理员按卡和设备分别调整。
|
||||
|
||||
## 对象存储和 CSV
|
||||
|
||||
先调用 `POST /api/admin/storage/upload-url` 获取预签名地址,再把文件直传对象存储,业务接口只接收返回的 `file_key`。
|
||||
@@ -115,11 +127,11 @@ API 与 Worker 必须连接同一 Redis/Asynq。新增或复用的任务如下
|
||||
- 卡限速不保存本地当前档位,结果未知必须人工向 Gateway 核对。
|
||||
- CSV 任务逐行部分成功,不保证整批业务原子性;任务详情是失败和跳过原因的权威展示。
|
||||
- 店铺登录限制不主动吊销既有 C 端 Token。
|
||||
- 测试库已完成 `000182`~`000194` 结构落库和注释核对;其他环境尚未执行迁移,外部系统闭环和前端浏览器验收也未完成。
|
||||
- 测试库此前已完成 `000182`~`000194` 结构落库和注释核对;`000195`~`000196` 将在下一次测试环境部署时执行,外部系统闭环和前端浏览器验收尚未完成。
|
||||
|
||||
## 发布和回滚
|
||||
|
||||
1. 测试库已执行至 `000194`;其他环境发布时仍须按迁移顺序执行并核对最终版本和表结构。
|
||||
1. 发布目标数据库必须执行至 `000196`,并核对 `tb_system_config` 已出现 6 个七月迭代默认配置、`tb_wecom_application` 已使用明文凭据字段;测试环境由 API 容器启动脚本自动迁移。
|
||||
2. 先部署数据库兼容代码、API 和 Worker,保持旧审批入口开启;再配置企微应用、模板、回调和默认发起人。
|
||||
3. 真实审批闭环通过后,先隐藏前端旧按钮,再关闭旧入口配置并重启 API。
|
||||
4. 回滚时先停止新批量任务和新审批提交,等待已领取任务结束,再回退应用版本。新增表和列暂不删除。
|
||||
|
||||
Reference in New Issue
Block a user