# 按上线时间解析测试环境，并从各系统读实际配置（只读）

**核心思想**：一个上线窗口对应一个**测试环境**（`test1`~`test5` / `uat`）。环境名 = 上线窗口记录里的 `environmentType`。
拿到环境名后，就能去**对应环境**的 Nacos / XXL-Job / 网关平台读到该服务的实际配置，用来给交付页签补值 / 校验 / 取模板。

> 这些系统只做**只读**（查现值、取模板、对照）。配置写入仍只走 `saveDeliver`（见 [api-and-auth.md](api-and-auth.md)）。

## 1. 上线时间 → 测试环境

```
GET /zqyl-devops-base-api/onlinetime/queryOnlineTimelist?page=1&pageRow=20&time={时间戳}&environment=&type=&onlineCommander=
→ data[0].environmentType     # test1 / test2 / ... / uat
```
下文 `{env}` 一律替换成它。若同一时间戳命中多个窗口（多 `environmentType`），按窗口/部门/创建人向用户确认。

## 2. Nacos —— 补 `nacos` 页签的值

**必须用 `curl`（Nacos 只有 http；用会把 http 升级成 https 的抓取器取不到数据）。**

```bash
# 精确取一个配置文件正文
curl -s "http://www.{env}.yljr.com/nacos/v1/cs/configs?show=all&dataId={dataId}&group={group}&tenant={env}&namespaceId={env}"
# 不知道 dataId 时按关键字模糊搜（dataId 支持 * 通配）
curl -s "http://www.{env}.yljr.com/nacos/v1/cs/configs?search=blur&pageNo=1&pageSize=20&tenant={env}&group=&dataId=*{关键字}*"
```
返回 `content`（properties 正文）/ `dataId` / `group`。
`dataId`/`group` 先从项目 `bootstrap.yml` 的 `spring.cloud.nacos.config.ext-config[*]` 找，找不到就模糊搜。
用途：代码 diff 里出现新增 `@Value("${x.y}")`/新配置键但没给值时，来这里查 `x.y` 现值再回填。

## 3. XXL-Job 调度中心 —— 读 `cronJobs` 现值

地址 `http://www.{env}.yljr.com/xxl-job-admin`，账号 `admin` / `123456`。

```bash
curl -s -c xxl.txt -X POST "http://www.{env}.yljr.com/xxl-job-admin/login" --data "userName=admin&password=123456"
curl -s -b xxl.txt -X POST "http://www.{env}.yljr.com/xxl-job-admin/jobinfo/pageList" \
  --data "jobGroupTitle=&triggerStatus=-1&jobId=&jobDesc=&executorHandler={JobHandler名}&start=0&length=10"
```
返回的任务字段**直接映射**到交付 `cronJobs.jobs`（详见 [../tabs/cronjobs.md](../tabs/cronjobs.md)）。

## 4. 网关管理平台 —— 读/导出网关配置（每个网关页签一个平台）

账号一律 `admin` / `123456`。**每个交付网关页签对应各自的平台**：

| 交付网关页签 | 网关平台 (context path) | 主机 | verifyMode |
|---|---|---|---|
| 外网网关 `outGateway` | `routerView` | `http://www.{env}.yljr.com` | **1（外网）** |
| 内网网关 `innerGateway` | `routerView` | `http://www.{env}.yljr.com` | **2（内网）** |
| 文件流网关 `outFileGateway` | `routerFileView` | `http://www.{env}.yljr.com` | 1 |
| 中台网关 `midGateway` | `routerMpsView` | `http://mps.{env}.yljr.com`（注意 `mps.` 主机） | 1 |

> 内网/外网**同一个 routerView**，靠 `verifyMode` 区分（`1=外网`/`2=内网`，导出文件名带「路由-外网/路由-内网」）。
> **按本次改动接口筛选→导出→上传的完整流程见 [gateway-export-workflow.md](gateway-export-workflow.md)。**

三平台**结构一致**（登录参数、页面路径、表头、新增/检索表单字段都相同）。下用 `{gw}` 代表平台、`{HOST}` 代表主机：

```bash
curl -s -c gw.txt -X POST "{HOST}/{gw}/login" --data "username=admin&password=123456"
curl -s -b gw.txt "{HOST}/{gw}/gatewayRouter/show?verifyMode=1"   # JSP 列表，数据在 HTML
```
平台首页提示：**"新版不用配 ip 和 port，路由页面的服务名和 nacos 中服务名保持一致"**。
**导出**（页面「导出数据」按钮 = `goExportBack`）：把检索表单字段 POST 到 `/{gw}/{type}/export` → 返回真正的 `.xls`（`application/ms-excel`），**遵从检索过滤条件**。检索为 LIKE 子串匹配，路由用 `uri`(服务名)+`routerCode`(接口)，熔断/限流/参数用 `routerCode`。

各「网关 type」对应页面（`type` 即 gatewayType code）：

| type | 页面 `show` | 增/改端点 |
|---|---|---|
| 1 服务 / 2 路由 | `/{gw}/gatewayRouter/show` | `add`→`insert`、`edit`→`update`、`export`/`uploadImport` |
| 3 参数 | `/{gw}/gatewayAddParam/show` | 同上前缀 |
| 4 限流 | `/{gw}/gatewayRateLimiter/show` | 同上前缀 |
| 5 熔断 | `/{gw}/gatewayMeltdown/show` | 同上前缀 |
| 6 过滤 | `/{gw}/gatewayFilter/show` | 同上前缀 |
| 7 白名单 | `/{gw}/gatewayWhiteIp/show` | 同上前缀 |
| 8 黑名单 | `/{gw}/gatewayBlackIp/show` | 同上前缀 |
| 9 动态绕行 | `/routerView/gatewayBypass/show` | 仅 routerView 有该页 |
| 10 日志展示 | `/{gw}/csvShow/show` | — |

**路由新增字段**（`GET /{gw}/gatewayRouter/add` → `POST /{gw}/gatewayRouter/insert`）：
`routerCode`(唯一标识) / `path`(匹配路径) / `uri`(**= nacos 服务名 = 本服务名**) / `routerNote` / `userLevel` / `predicates` / `filters` / `orderNumber` / `routerGroup` / `routerStatus` / `bizType` / `csvOpen` / `decrypt`。

**意义**：交付「网关」页签要上传的 Excel = 对应平台 `export` 导出的格式。导一条现有路由即得**列模板**；给出服务名 + 匹配路径，路由类可直接成表；限流/熔断/过滤/参数/黑白名单等按对应平台现有规则对照后成表。IP/port 新版已不需要。
