员工岗位可重新启用;调价认空运航线;会话存档跳号补拉;陆运报价按车型列回填

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
linmianxun
2026-10-28 19:48:47 +08:00
co-authored by Cursor
parent 2b528758b4
commit 56ba8e93b5
62 changed files with 2960 additions and 793 deletions
+55 -63
View File
@@ -1,93 +1,85 @@
# 提示词:测试环境部署(同机并存)
# 提示词:测试环境部署(独立测服机)
你只部署 **测试环境**。现网继续跑。不要按现网累计发布器去切 `C:\yutongda`。现网密钥对照 `03`,进程形态见 `01`/`11`,环境对照见 `13`。
你只部署 **测试环境**。正服继续跑。不要按现网累计发布器去切 `C:\yutongda` / `E:\wwwroot`。现网密钥对照 `03`,进程形态见 `01`/`11`,环境对照见 `13`。运维细则见 `deploy/TEST-ENV.md`。
机器与现网同一台:公网 `129.211.181.80`,主机名 `10_206_0_15`,SSH `ytd_extdev_0903`,指纹见 `03`。私钥优先 `~/.ssh/id_ed25519_ytd`。出口白名单不变。不得输出私钥和 Secret。
## 现网禁止触碰
- 目录:`C:\yutongda`、`releases\`、`ops\active-release*.json`
- 端口:旧 8080/8809/8810/8811/8813 已停。新主账占用 **8080**,不要再起回 8180。企微回调 URL 不要改。
- 站点:`https://ai.ytd-scm.com` 及 `/wecom/callback`、`/inquiry-form`(Nginx 反代目标切流前不准改)
- 库:`jeecg-boot`、`ytd_runtime`;Redis `ytd:prod:node01-07`;桶 `ytd-inquiry`
- 企微询价应用 `1000010` 的后台设置(不要重置 Secret、不要改回调 URL)
- 脚本:禁止对现网执行 `Deploy-YtdCumulativeRelease.ps1`
- 禁止改 `C:\yutongda\secure\`、现网 `.env`、现网 `ai.conf` 已有 location
## 测试环境落点
## 测服机器(产品决策:域名即开关)
| 项 | 值 |
|---|---|
| 运行根 | `E:\wwwroot`(`admin\current` / `agent\current`) |
| 公网 | `183.11.229.69` |
| 主机名 | `PC-20260706MVVZ` |
| SSH | `Administrator`,私钥 `~/.ssh/id_ed25519` |
| 运行根 | **`C:\inquiry-robot`** |
| 域名 | **`ai-test.ytd-scm.com`**(HTTPS;证书用 win-acme / Let’s Encrypt) |
| 开关 | 打开 `ai.ytd-scm.com`=正服;打开 `ai-test.ytd-scm.com`=测服。不做后台页面切库 |
正服 `129.211.181.80` / `E:\wwwroot` / `ai.ytd-scm.com`:**禁止**在测服发版流程里改 Nginx、`.env`、企微回调。
## 正服禁止触碰
- 目录:`C:\yutongda`、`E:\wwwroot`、`releases\`、`ops\active-release*.json`
- 站点:`https://ai.ytd-scm.com` 及 `/wecom/callback`、`/inquiry-form`
- 库:正服 `inquiry_robot` / 旧 `jeecg-boot`;Redis 正服前缀;桶正服
- 企微询价应用 `1000010` 后台设置(不要重置 Secret、**不要改回调 URL**)
- 脚本:禁止对正服执行累计切流发布器
## 测服落点
| 项 | 值 |
|---|---|
| 运行根 | `C:\inquiry-robot`(`admin\current` / `agent\current` / `inquiry-new`) |
| 主账 | **8080** |
| 智能体 HTTP | **8910**(H5 + 企微回调 + 主账唤醒,一个进程) |
| AIBOT | **8913** 仅 127.0.0.1 |
| 智能体 HTTP | **8910**(H5 + 回调入口 + 主账唤醒,一个进程) |
| AIBOT | **8913** 仅 127.0.0.1;默认 **关** |
| Worker | 无对外端口;LibreOffice 1 槽,HTTP 类 2~3 槽 |
| MySQL | 库/用户 `inquiry_robot`(数据机 `10.206.0.14:3306`,口令新开) |
| PostgreSQL | 库/用户 `inquiry_robot_runtime` |
| Redis | db1,前缀 `inquiry_robot:` |
| MinIO | 桶 `inquiry_robot`(实例仍 9000) |
| MySQL | 本机 `inquiry_robot` |
| PostgreSQL | 本机 `inquiry_robot_runtime` |
| Redis | 本机 db1,前缀 `inquiry_robot:` |
| MinIO | 本机桶 `inquiry-robot` |
| Nginx | `C:\nginx-1.18.0\myconf\ai-test.conf`;证书目录 `cert\` |
不要开 8809/8811/8812。不要 Redis 全局单例锁。Nginx 80/443、SSH 22、3306/5432/6379、9000 不要关。
不要开 8809/8811/8812。不要 Redis 全局单例锁。
`MYSQL_*` / `PG_*` / `REDIS_URL`(**db1**)/ `REDIS_KEY_PREFIX=inquiry_robot:` / `OBJECT_STORAGE_BUCKET=inquiry_robot` 完整对照见 `13`。口令新开,勿把现网 `MYSQL_PASSWORD`/`PG_PASSWORD` 写进新系统 `.env`。
## 域名与企微
## 域名与企微(与正式相同)
测试 **不另开域名、不另申请证书、不新建企微应用、不新建智能机器人**。
从 `03` 原样抄入测试 `.env`:`WECOM_AGENT_ID=1000010`、Secret、Callback Token、EncodingAESKey、`WECOM_CALLBACK_URL=https://ai.ytd-scm.com/wecom/callback`、`INQUIRY_FORM_PUBLIC_BASE_URL=https://ai.ytd-scm.com/inquiry-form`、AIBOT BotId/Secret、运维 `1000014`。可信域名已是 `ai.ytd-scm.com`,不用再配。
**并存期:** 不要改 `ai.conf`,公网回调和 H5 仍进现网。测试用本机 `8910` 联调。`WECOM_AIBOT_ENABLED` 默认关,避免和现网 8813 抢长连接。要用企微真收消息验收新系统 = 切流(改 Nginx 反代 + 停现网 AIBOT 再起 8913),现网会暂停收询价。
- 测服公网 URL 用 `https://ai-test.ytd-scm.com/...`(`.env` 自洽)。
- **企微后台回调仍保持** `https://ai.ytd-scm.com/wecom/callback`(本阶段不改;真回调进测服须另批)。
- 同一企微应用 `1000010` / 运维 `1000014`;`WECOM_AIBOT_ENABLED=false`,避免与正服抢长连接。
- 前端构建:`VITE_GLOB_API_URL=/jeecgboot`,`VITE_GLOB_DOMAIN_URL=https://ai-test.ytd-scm.com`。
```text
YTD_ENV=test
WECOM_CALLBACK_URL=https://ai.ytd-scm.com/wecom/callback
INQUIRY_FORM_PUBLIC_BASE_URL=https://ai.ytd-scm.com/inquiry-form
YTD_DEPLOY_ROOT=C:\inquiry-robot
PUBLIC_BASE_URL=https://ai-test.ytd-scm.com
WECOM_CALLBACK_URL=https://ai-test.ytd-scm.com/wecom/callback
INQUIRY_FORM_PUBLIC_BASE_URL=https://ai-test.ytd-scm.com/inquiry-form
BIZ_API_BASE_URL=http://127.0.0.1:8080/jeecgboot
AGENT_CALLBACK_BASE_URL=http://127.0.0.1:8910
WECOM_AIBOT_BRIDGE_URL=http://127.0.0.1:8913
WECOM_AIBOT_INGRESS_URL=http://127.0.0.1:8910/internal/aibot/inbound
# 空运群发文件后马上回话:先停现网 8813,再 WECOM_AIBOT_ENABLED=true,并填 BOT_ID/SECRET。该群须先 @ 过小助手。
WECOM_AIBOT_ENABLED=false
```
前端 `VITE_GLOB_API_URL=/jeecgboot`,`VITE_GLOB_DOMAIN_URL=https://ai.ytd-scm.com`。不要加 `ai-test.conf`。
## 证书
- 测服本机申请 Let’s Encrypt(win-acme)。**必须**在云安全组放行公网 80/443。
- 未放行前可用自签;外网可临时 `https://ai-test.ytd-scm.com:8081`(浏览器不信任属预期)。
## TMS
现网 BaseURL + Client 三件套(`03`)。QUERY / 详情 / 字典照旧。空运群锁舱/释放由新主账出站打真实 TMS。智能体只打新主账 8080,不直连 TMS。
现网 BaseURL + Client 三件套(`03`)。QUERY / 详情 / 字典可用。测服默认关真实 LOCK/RELEASE。智能体只打本机主账 8080。
## 库表(测试库可直接改)
## 库表
开发需要加表、加字段、改字段时:**直接对 `inquiry_robot` / `inquiry_robot_runtime` 做版本化迁移**,不必先等 Task 批准。
仍须批准的:改现网库、改现网 Secret、对非测试人员发企微。测服 LOCK/RELEASE 已纳入空运群定稿,但必须现网锁舱已停。
开发加表加字段:对测服 `inquiry_robot` / `inquiry_robot_runtime` 做版本化迁移。禁止写正服库。
## 发布原则
1. 新版本写入 `E:\wwwroot\` 的 `agent\releases` / `admin\releases`,再切 `current` 联接;禁止覆盖正在跑的 current 目标目录内容(先发 release 再切联接)。
2. 用测试自己的指针;失败回指上一测试版本。
3. 先停 **测试** 侧进程再起新的;禁止停现网服务。
4. 禁止 scp 几个文件当正式发布。
5. 构建不含 `.env`、密钥、日志、用户附件、dump。
6. 健康检查 200 ≠ 业务验收。
## 部署前必须同时成立
- 新主账在 **8080**,智能体在 8910,AIBOT 在 8913
- 不要把主账起回 8180
- 未改 `C:\yutongda\ops\` 活动指针
误停现网端口或改了现网指针:立即停手,先恢复现网,再报告。
## 未经 Task 批准不得
- 现网与测服同时 LOCK/RELEASE(测服锁舱须现网已停;QUERY 按任务批准)
- 给测试可见范围以外的人或生产客户群发企微
- 写现网库
- 改现网 Secret、防火墙、`1000010` 回调
- Git 强推
1. 新版本写入 `C:\inquiry-robot\` 的 `agent\releases` / `admin\releases`,再切 `current` junction。
2. 先停测服计划任务再起;禁止停正服服务。
3. 构建不含 `.env`、密钥、日志、用户附件、dump。
4. 健康检查 200 ≠ 业务验收。
## 汇报
Task、分支 commit、测试目录与端口、是否误碰 `C:\yutongda`(必须为否)、现网端口仍监听、TMS/企微次数、回滚点、尚未完成的企微 fresh 验收。
测服目录与端口、是否误碰正服(必须为否)、证书状态(LE / 自签 / 待放行)、尚未完成的企微 fresh 验收。
+51 -94
View File
@@ -1,123 +1,80 @@
# 现网 vs 新系统 inquiry_robot(切换只改配置,不改代码)
# 正服 vs 测服 inquiry_robot(切换只改配置,不改代码)
同一套制品。用 `YTD_ENV=prod` 或 `YTD_ENV=test` 区分阶段(变量名仍叫 YTD_*,与 `03` 对齐)。
**域名与企微与现网相同**(`ai.ytd-scm.com`、应用 `1000010`)。
**产品决策(域名即开关)**:`ai.ytd-scm.com`=正服;`ai-test.ytd-scm.com`=测服。不做后台页面切库。
**新系统资源名一律 `inquiry_robot*`**,禁止再用 `ytd_test` / `ytd:test:` / `ytd-test`。
禁止在代码里写死域名/库名。
切流目标(方案 B):`E:\wwwroot` 取代 `C:\yutongda`。清单见 `deploy/CUTOVER-TO-PROD.md`。
对照表是切换清单。现网发布仍走甲方原流程与 `C:\yutongda` 指针;新系统只写 `E:\wwwroot`。
禁止在代码里写死域名/库名。运维见 `deploy/TEST-ENV.md`、`deploy/CUTOVER-TO-PROD.md`。
## 对照
| 项 | 现网(仍在跑) | 新系统 `inquiry_robot` |
| 项 | 正服 | 测服(独立机) |
|---|---|---|
| `YTD_ENV` | `prod`(现网进程) | 切流前可用 `test`;切流日改 `prod` |
| 公网域名 | `ai.ytd-scm.com` | **同一域名** |
| DNS / 证书 / Nginx | 已有 `ai.conf` | **不要另开域名/证书**;反代按切流改 |
| 站点 / H5 / 企微回调 | 同左 | 配置字符串相同;企微回调 URL **不用改** |
| 后台 API 前缀 | `/jeecgboot` → 旧 Jeecg 8080 | `/jeecgboot` → **新主账 8080**(旧进程已停) |
| 运行根 | `C:\yutongda` | **`E:\wwwroot`**(`admin\current` / `agent\current`) |
| 主账端口 | 8080(旧 Jeecg,已停) | **8080**(新 Java 主账) |
| 智能体 HTTP | 8810(另 8809/8811) | **8910**(合并) |
| AIBOT | 8813 | **8913**(切流前勿双连) |
| MySQL | `jeecg-boot` / `ytd_jeecg` | **`inquiry_robot` / `inquiry_robot`** |
| PostgreSQL | `ytd_runtime` | **`inquiry_robot_runtime`** |
| Redis | db0 `ytd:prod:node01-07` | db1 **`inquiry_robot:`** |
| MinIO 桶 | `ytd-inquiry` | **`inquiry-robot`**(S3 桶名不能用下划线) |
| 询价企微应用 | `1000010` | **同一套** |
| 运维企微 | `1000014` | **同一套**;切流前告警可加 `[test]` |
| AIBOT Bot | 现网 Bot | **同一套**;切流先停 8813 再开 8913 |
| TMS | `03` 现网 Client | 同一套;切流前默认关 lock/release |
| 发布脚本 | 现网累计发布器 | 只写 `E:\wwwroot` |
| 告警前缀 | 无 | 切流前 `[test]`;切流后去掉 |
| `YTD_ENV` | `prod` | `test` |
| 公网 IP | `129.211.181.80` | `183.11.229.69` |
| 公网域名 | `ai.ytd-scm.com` | **`ai-test.ytd-scm.com`** |
| DNS / 证书 / Nginx | `ai.conf` + 正服证书 | **`ai-test.conf` + 测服证书(win-acme)** |
| 站点 / H5 | 正服域名 | 测服域名 |
| 企微回调 URL(企微后台) | `https://ai.ytd-scm.com/wecom/callback` | **暂不改后台**;测服 `.env` 可自洽写 ai-test |
| 后台 API 前缀 | `/jeecgboot` → 主账 8080 | 同左(本机 8080) |
| 运行根 | **`E:\wwwroot`** | **`C:\inquiry-robot`** |
| 主账端口 | 8080 | 8080 |
| 智能体 HTTP | 8910 | 8910 |
| AIBOT | 8913(正服可启) | 8913;**默认关** |
| MySQL | 正服 `inquiry_robot` | **本机** `inquiry_robot` |
| PostgreSQL | 正服 `inquiry_robot_runtime` | **本机** `inquiry_robot_runtime` |
| Redis | 正服 db1 `inquiry_robot:` | **本机** db1 `inquiry_robot:` |
| MinIO 桶 | `inquiry-robot` | **本机** `inquiry-robot` |
| 询价企微应用 | `1000010` | 同一套密钥,不抢长连接 |
| 运维企微 | `1000014` | 同一套;告警加 `[test]` |
| TMS | `03` | 同一套;默认关 lock/release |
| 发布 | 只写 `E:\wwwroot` | 只写 `C:\inquiry-robot` |
| 告警前缀 | 无 | `[test]` |
数据机 IP、3306/5432/6379、MinIO `127.0.0.1:9000` **两边相同**。只换库名、用户、Redis db/前缀、桶。
**切换环境 = 换域名 / 换对应机器上的 `.env` 取值,不改代码。**
测服与正服库主机不同(测服本机),禁止测服进程连正服库。
## 数据库与存储(同一套变量名)
代码、YAML 只读变量名,**禁止**写死库名。现网明文见 `03`;新系统口令新开,写入 `E:\wwwroot\.env`。
代码、YAML 只读变量名,**禁止**写死库名。正服明文见 `03`;测服口令写在测服本机 `C:\inquiry-robot\.env`(勿进 Git)。
| 变量 | 现网 | 新系统 |
| 变量 | 正服 | 测服 |
|---|---|---|
| `MYSQL_HOST` | `10.206.0.14` | 同左 |
| `MYSQL_PORT` | `3306` | 同左 |
| `MYSQL_DB` | `jeecg-boot` | **`inquiry_robot`** |
| `MYSQL_USER` | `ytd_jeecg` | **`inquiry_robot`** |
| `MYSQL_PASSWORD` | 见 `03` | **新开,勿抄现网口令** |
| `YTD_MYSQL_URL` / JDBC | `.../jeecg-boot?...` | `.../inquiry_robot?...` |
| `PG_HOST` | `10.206.0.14` | 同左 |
| `PG_PORT` | `5432` | 同左 |
| `PG_DATABASE` | `ytd_runtime` | **`inquiry_robot_runtime`** |
| `PG_USER` | `ytd_runtime` | **`inquiry_robot_runtime`** |
| `PG_PASSWORD` | 见 `03` | **新开** |
| `PG_SSLMODE` | `prefer` | `prefer` |
| `CHECKPOINT_BACKEND` | `postgres` | `postgres` |
| `YTD_REDIS_HOST` | `10.206.0.14` | 同左 |
| `YTD_REDIS_PORT` | `6379` | 同左 |
| `YTD_REDIS_USERNAME` | `ytd_app` | 可同账号或新账号 |
| `REDIS_URL` | `...6379/0` | **`...6379/1`** |
| `REDIS_KEY_PREFIX` | `ytd:prod:node01-07` | **`inquiry_robot:`** |
| `OBJECT_STORAGE_BUCKET` | `ytd-inquiry` | **`inquiry-robot`** |
| `MYSQL_HOST` | 正服数据机 | **`127.0.0.1`** |
| `MYSQL_PORT` | `3306` | `3306` |
| `MYSQL_DB` / `MYSQL_USER` | `inquiry_robot` | `inquiry_robot` |
| `PG_HOST` | 正服数据机 | **`127.0.0.1`** |
| `PG_DATABASE` / `PG_USER` | `inquiry_robot_runtime` | 同左 |
| `YTD_REDIS_HOST` | 正服数据机 | **`127.0.0.1`** |
| `REDIS_URL` | `.../1` | **本机 `.../1`** |
| `REDIS_KEY_PREFIX` | `inquiry_robot:` | `inquiry_robot:` |
| `OBJECT_STORAGE_ENDPOINT_URL` | 正服 MinIO | **`http://127.0.0.1:9000`** |
| `OBJECT_STORAGE_BUCKET` | `inquiry-robot` | `inquiry-robot` |
新系统 `.env` 片段(口令留空):
测服 `.env` 片段(口令留空):
```text
YTD_ENV=test
YTD_DEPLOY_ROOT=E:\wwwroot
YTD_DEPLOY_ROOT=C:\inquiry-robot
PUBLIC_BASE_URL=https://ai-test.ytd-scm.com
WECOM_CALLBACK_URL=https://ai-test.ytd-scm.com/wecom/callback
INQUIRY_FORM_PUBLIC_BASE_URL=https://ai-test.ytd-scm.com/inquiry-form
BIZ_API_BASE_URL=http://127.0.0.1:8080/jeecgboot
MYSQL_HOST=127.0.0.1
MYSQL_DB=inquiry_robot
MYSQL_USER=inquiry_robot
YTD_MYSQL_URL=jdbc:mysql://10.206.0.14:3306/inquiry_robot?characterEncoding=UTF-8&useUnicode=true&useSSL=true&requireSSL=true&verifyServerCertificate=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
PG_HOST=127.0.0.1
PG_DATABASE=inquiry_robot_runtime
PG_USER=inquiry_robot_runtime
REDIS_URL=redis://ytd_app:<密码>@10.206.0.14:6379/1
REDIS_URL=redis://:<密码>@127.0.0.1:6379/1
REDIS_KEY_PREFIX=inquiry_robot:
OBJECT_STORAGE_BUCKET=inquiry-robot
```
**切换环境 = 换 `.env` 取值,不改代码、不在迁移里写死库名。**
切流前新进程不得连 `jeecg-boot` / `ytd_runtime` / Redis `/0` 且前缀 `ytd:prod:` / 桶 `ytd-inquiry`。
## 代码约定
所有环境差异只进 `.env` / 前端构建参数 / Nginx,例如:
```text
YTD_ENV=test
PUBLIC_BASE_URL=https://ai.ytd-scm.com
WECOM_CALLBACK_URL=https://ai.ytd-scm.com/wecom/callback
INQUIRY_FORM_PUBLIC_BASE_URL=https://ai.ytd-scm.com/inquiry-form
BIZ_API_BASE_URL=http://127.0.0.1:8080
AGENT_CALLBACK_BASE_URL=http://127.0.0.1:8910
WECOM_AIBOT_BRIDGE_URL=http://127.0.0.1:8913
WECOM_AIBOT_INGRESS_URL=http://127.0.0.1:8910/internal/aibot/inbound
WECOM_AIBOT_ENABLED=false
WECOM_AIBOT_BOT_ID=
WECOM_AIBOT_SECRET=
WECOM_AIBOT_WS_URL=wss://openws.work.weixin.qq.com
REDIS_KEY_PREFIX=inquiry_robot:
PG_DATABASE=inquiry_robot_runtime
MYSQL_DB=inquiry_robot
OBJECT_STORAGE_BUCKET=inquiry_robot
```
两套 `.env` 分开放:现网仍在 `C:\yutongda\...`,新系统在 `E:\wwwroot\.env`。不要互相覆盖。
## 以后切到正式(新系统接管)
见 `deploy/CUTOVER-TO-PROD.md`。顺序摘要:
1. 新进程在隔离库 `inquiry_robot*` 验收通过。
2. `.env`:`YTD_ENV=prod`;库继续 `inquiry_robot*`(或甲方最终名)。
3. Nginx 反代切到新主账/智能体;企微回调 URL 不用改。
4. 停现网 8813,再起 8913。
5. 去掉告警 `[test]`。
**切换环境 = 换域名 / 换对应机器 `.env`,不改代码。**
## 禁止
- 新进程连 `jeecg-boot` / `ytd:prod:` / 桶 `ytd-inquiry`
- 测服连正服库 / 正服 Redis / 正服桶
- 新系统再使用 `ytd_test` / `ytd:test:` / `ytd-test` 命名
- 并存期与现网 **同时** 连接同一 AIBOT 长连接
- 与正服 **同时** 连接同一 AIBOT 长连接
- 一份 `.env` 混用两套库
- 测服发版改正服 Nginx / 企微回调 URL