对齐讲解业务单元静态数据口径
- 刷新讲解静态数据包并保留完整 outline 树 - 按后台顶层业务单元口径归并讲解点统计 - 更新讲解静态数据刷新操作文档 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
352
docs/Data/explain-static-data-refresh-runbook.md
Normal file
352
docs/Data/explain-static-data-refresh-runbook.md
Normal file
@@ -0,0 +1,352 @@
|
||||
# 讲解业务静态数据包更新操作文档
|
||||
|
||||
本文固化 `frontend-miniapp` 项目中“讲解”业务静态数据包的检查与更新流程。操作范围覆盖讲解展厅、后台讲解树业务单元、讲解点、讲解内容、音频内容元数据,以及讲解到位置预览的关联数据;不扩展到馆内导览模型、路线图、Tencent 地图或小程序专项构建。
|
||||
|
||||
## 适用范围
|
||||
|
||||
- 项目目录:`E:\MyWork\深圳国际艺术馆\museum-guide\museum-guide-v4.0\frontend-miniapp`
|
||||
- 静态包目录:`static/guide-data`
|
||||
- 导出脚本:`scripts/export-guide-static-data.py`
|
||||
- 达梦数据库服务器:`1.92.206.90`
|
||||
- 后端数据库配置来源:`E:\MyWork\深圳国际艺术馆\智慧导览\smart-navigation-system\yudao-server\src\main\resources\application-local.yaml`
|
||||
- 当前 nav-assets 包:`static/nav-assets/codex_nav_20260621_175310_museum_default_centerline_finalxy`
|
||||
|
||||
不要在文档、提交信息或终端输出中记录数据库密码。脚本从后端本地配置读取连接信息,操作文档只记录配置文件路径。
|
||||
|
||||
## 讲解业务数据源结论
|
||||
|
||||
讲解内容数据源由 `VITE_GUIDE_CONTENT_SOURCE_MODE` 控制,共 3 个模式:
|
||||
|
||||
- `static`:默认模式,读取 `static/guide-data` 静态包。
|
||||
- `remote`:后端接口模式,`BackendExplainContentProvider` 加载后端搜索、详情、展厅和讲解点接口,并保留静态兜底。
|
||||
- `mock`:开发环境显式 mock,仅在 `import.meta.env.DEV` 下启用。
|
||||
|
||||
代码入口:
|
||||
|
||||
- `src/config/dataSource.ts`
|
||||
- `src/data/providers/staticMuseumContentProvider.ts`
|
||||
- `src/data/providers/staticGuideDataProvider.ts`
|
||||
- `src/data/providers/backendExplainContentProvider.ts`
|
||||
- `src/data/adapters/guideDataAdapter.ts`
|
||||
- `src/repositories/ExplainRepository.ts`
|
||||
- `src/repositories/MediaRepository.ts`
|
||||
|
||||
音频播放解析还有独立后端 API:
|
||||
|
||||
- `src/repositories/AudioPlayInfoRepository.ts`
|
||||
- `src/repositories/PublishedExhibitAudioRepository.ts`
|
||||
|
||||
该音频 API 用于播放地址、讲解词正文和目标解析,不等同于讲解列表/内容静态包数据源。
|
||||
|
||||
## 业务单元口径
|
||||
|
||||
后台管理端 `http://1.92.206.90:3001/guide/exhibits` 的讲解树使用后端接口:
|
||||
|
||||
```text
|
||||
GET /guide/exhibits/tree
|
||||
GET /guide/exhibits/tree/{nodeId}/children
|
||||
```
|
||||
|
||||
后端实现位于:
|
||||
|
||||
```text
|
||||
E:\MyWork\深圳国际艺术馆\智慧导览\smart-navigation-system\yudao-module-gis\src\main\java\cn\iocoder\yudao\module\gis\controller\admin\guide\V2ExhibitTreeController.java
|
||||
```
|
||||
|
||||
该接口的业务单元来源是 `NATURE_SGS.SGS_EXHIBIT_OUTLINE`,不是 `SGS_EXHIBITION_UNIT`。后台树的关键口径:
|
||||
|
||||
- 展厅节点来自 `SGS_EXHIBITION_HALL`。
|
||||
- 业务单元来自展厅下的顶层 `SGS_EXHIBIT_OUTLINE`,即 `outline.parentId == hall.id`。
|
||||
- 统计讲解点时,讲解点可归并到所属顶层业务单元;如果顶层业务单元下没有有效讲解点,也仍然显示为业务单元。
|
||||
- 因此 `outlines.json` 必须保留完整 `SGS_EXHIBIT_OUTLINE` 树,不能再过滤为“有讲解点引用的 outline 子集”。
|
||||
|
||||
前端静态 adapter 的对应口径:
|
||||
|
||||
- `businessUnitCount`:展厅下顶层、未删除的 outline 数量。
|
||||
- `guideStopCount`:这些顶层 outline 及其后代下未删除讲解点数量。
|
||||
- 空业务单元保留展示,`guideStopCount = 0`。
|
||||
|
||||
当前用于回归的人类厅示例:
|
||||
|
||||
```text
|
||||
人类厅:5 个业务单元 · 38 个讲解点
|
||||
```
|
||||
|
||||
其中:
|
||||
|
||||
- 第一单元:什么是灵长类,27 个讲解点
|
||||
- 第二单元:猿与猴,5 个讲解点
|
||||
- 第三单元:丛林远足,6 个讲解点
|
||||
- 第四单元:与巨兽同行,0 个讲解点
|
||||
- 第五单元:从燧石到硅基,0 个讲解点
|
||||
|
||||
## 静态包文件边界
|
||||
|
||||
讲解首页、讲解展厅、业务单元、讲解点、详情、位置预览和媒体可用状态由以下文件共同生成:
|
||||
|
||||
- `manifest.json`
|
||||
- `halls.json`
|
||||
- `outlines.json`
|
||||
- `guide-stops.json`
|
||||
- `guide-contents.json`
|
||||
- `poi-bridge.json`
|
||||
|
||||
同一目录下的 `exhibits.json`、`pois.json`、`indexes.json` 也应随导出一并保持一致。虽然它们不都是讲解主列表的直接输入,但会参与详情兜底、内容关联、POI 桥接和索引一致性。不要只覆盖单个 JSON,避免 manifest、索引和桥接统计不一致。
|
||||
|
||||
注意:
|
||||
|
||||
- `outlines.json` 是完整后台讲解树,不是用户端“可播放讲解点”的子集。
|
||||
- `indexes.outlinesByHallId` 包含展厅下所有后代 outline,用于索引和详情关联;用户端业务单元数量不要直接用该数组长度,应由 adapter 取顶层 outline 计算。
|
||||
|
||||
## 操作前检查
|
||||
|
||||
确认依赖可用:
|
||||
|
||||
```powershell
|
||||
python -c "import importlib.util; print('pyodbc', bool(importlib.util.find_spec('pyodbc'))); print('yaml', bool(importlib.util.find_spec('yaml')))"
|
||||
Get-OdbcDriver | Where-Object { $_.Name -like '*DM*' -or $_.Name -like '*Dameng*' } | Select-Object Name,Platform | Format-List
|
||||
```
|
||||
|
||||
预期:
|
||||
|
||||
- `pyodbc True`
|
||||
- `yaml True`
|
||||
- 存在 `DM8 ODBC DRIVER`
|
||||
|
||||
确认 nav-assets 包存在:
|
||||
|
||||
```powershell
|
||||
Test-Path 'static\nav-assets\codex_nav_20260621_175310_museum_default_centerline_finalxy\app_nav_manifest.json'
|
||||
Test-Path 'static\nav-assets\codex_nav_20260621_175310_museum_default_centerline_finalxy\data\poi_all.json'
|
||||
```
|
||||
|
||||
预期均为 `True`。
|
||||
|
||||
## 导出静态包
|
||||
|
||||
优先直接使用后端原配置导出。脚本会读取配置中的达梦连接信息,不需要把含密码配置复制到项目目录:
|
||||
|
||||
```powershell
|
||||
$repo = 'E:\MyWork\深圳国际艺术馆\museum-guide\museum-guide-v4.0\frontend-miniapp'
|
||||
$sourceConfig = 'E:\MyWork\深圳国际艺术馆\智慧导览\smart-navigation-system\yudao-server\src\main\resources\application-local.yaml'
|
||||
$navAssets = Join-Path $repo 'static\nav-assets\codex_nav_20260621_175310_museum_default_centerline_finalxy'
|
||||
|
||||
Set-Location $repo
|
||||
python 'scripts\export-guide-static-data.py' `
|
||||
--config $sourceConfig `
|
||||
--output 'static\guide-data' `
|
||||
--nav-assets $navAssets
|
||||
```
|
||||
|
||||
成功输出示例:
|
||||
|
||||
```text
|
||||
Exported sgs-guide-static/v1 to ...\static\guide-data
|
||||
Counts: {"exhibits": 4700, "guide-contents": 717, "guide-stops": 391, "halls": 8, "outlines": 250, "pois": 2244}
|
||||
Bridge: {"hallBridgeCount": 8, "navPoiCount": 298, "sgsPoiBridgeCount": 876, "sgsPoiCandidateCount": 13}
|
||||
```
|
||||
|
||||
异常时不要手动编辑单个 JSON,先排查数据库连接、ODBC 驱动、schema 或 nav-assets 路径。
|
||||
|
||||
## SSH 隧道兜底方案
|
||||
|
||||
如果当前网络不能直连 `1.92.206.90:5237`,再使用 SSH 隧道。SSH 密钥路径:
|
||||
|
||||
```text
|
||||
E:\MyWork\深圳自然馆\服务器信息\KeyPair-c006.pem
|
||||
```
|
||||
|
||||
确认 SSH 能登录服务器:
|
||||
|
||||
```powershell
|
||||
ssh -i 'E:\MyWork\深圳自然馆\服务器信息\KeyPair-c006.pem' -o BatchMode=yes -o StrictHostKeyChecking=accept-new -o ConnectTimeout=10 root@1.92.206.90 hostname
|
||||
```
|
||||
|
||||
确认本地转发端口空闲:
|
||||
|
||||
```powershell
|
||||
Get-NetTCPConnection -LocalPort 15237 -ErrorAction SilentlyContinue | Select-Object LocalAddress,LocalPort,State,OwningProcess
|
||||
```
|
||||
|
||||
启动本地端口转发:
|
||||
|
||||
```powershell
|
||||
$sshArgs = @(
|
||||
'-i', 'E:\MyWork\深圳自然馆\服务器信息\KeyPair-c006.pem',
|
||||
'-o', 'BatchMode=yes',
|
||||
'-o', 'ExitOnForwardFailure=yes',
|
||||
'-o', 'StrictHostKeyChecking=accept-new',
|
||||
'-N',
|
||||
'-L', '127.0.0.1:15237:127.0.0.1:5237',
|
||||
'root@1.92.206.90'
|
||||
)
|
||||
$tunnel = Start-Process -FilePath 'ssh' -ArgumentList $sshArgs -WindowStyle Hidden -PassThru
|
||||
Start-Sleep -Seconds 3
|
||||
$tunnel.Id
|
||||
```
|
||||
|
||||
确认隧道可用:
|
||||
|
||||
```powershell
|
||||
Test-NetConnection 127.0.0.1 -Port 15237 | Select-Object ComputerName,RemotePort,TcpTestSucceeded | Format-List
|
||||
```
|
||||
|
||||
创建临时配置。临时配置只把 JDBC 地址从服务器地址替换为本地隧道地址,不修改原后端配置文件,也不要写入项目目录:
|
||||
|
||||
```powershell
|
||||
$repo = 'E:\MyWork\深圳国际艺术馆\museum-guide\museum-guide-v4.0\frontend-miniapp'
|
||||
$sourceConfig = 'E:\MyWork\深圳国际艺术馆\智慧导览\smart-navigation-system\yudao-server\src\main\resources\application-local.yaml'
|
||||
$tmpRoot = Join-Path $env:TEMP ('sgs-explain-export-' + (Get-Date -Format 'yyyyMMddHHmmss'))
|
||||
New-Item -ItemType Directory -Path $tmpRoot | Out-Null
|
||||
$tmpConfig = Join-Path $tmpRoot 'application-local-tunnel.yaml'
|
||||
(Get-Content -Raw -LiteralPath $sourceConfig).Replace('jdbc:dm://1.92.206.90:5237','jdbc:dm://127.0.0.1:15237') | Set-Content -LiteralPath $tmpConfig -Encoding UTF8
|
||||
```
|
||||
|
||||
导出到项目静态包:
|
||||
|
||||
```powershell
|
||||
Set-Location $repo
|
||||
python 'scripts\export-guide-static-data.py' `
|
||||
--config $tmpConfig `
|
||||
--output 'static\guide-data' `
|
||||
--nav-assets 'static\nav-assets\codex_nav_20260621_175310_museum_default_centerline_finalxy'
|
||||
```
|
||||
|
||||
导出通过本地隧道完成时,脚本会在 `manifest.json` 记录 `127.0.0.1:15237` 和临时配置路径。提交前应改回真实来源:
|
||||
|
||||
```json
|
||||
"source": {
|
||||
"type": "dameng",
|
||||
"host": "1.92.206.90",
|
||||
"port": "5237",
|
||||
"schema": "NATURE_SGS",
|
||||
"configPath": "E:\\MyWork\\深圳国际艺术馆\\智慧导览\\smart-navigation-system\\yudao-server\\src\\main\\resources\\application-local.yaml"
|
||||
}
|
||||
```
|
||||
|
||||
## 校验
|
||||
|
||||
JSON 与 `rowCount` 校验:
|
||||
|
||||
```powershell
|
||||
node -e "const fs=require('fs'); const dir='static/guide-data'; const m=JSON.parse(fs.readFileSync(dir+'/manifest.json','utf8')); for (const f of Object.values(m.files)) { const j=JSON.parse(fs.readFileSync(dir+'/'+f,'utf8')); if (j.rows && typeof j.rowCount==='number' && j.rows.length!==j.rowCount) throw new Error(f+' rowCount mismatch'); } console.log(JSON.stringify({generatedAt:m.generatedAt,counts:m.counts,bridgeStats:m.bridgeStats,source:m.source},null,2));"
|
||||
```
|
||||
|
||||
讲解内容和音频 URL 数量检查:
|
||||
|
||||
```powershell
|
||||
node -e "const fs=require('fs'); const m=JSON.parse(fs.readFileSync('static/guide-data/manifest.json','utf8')); const g=JSON.parse(fs.readFileSync('static/guide-data/guide-contents.json','utf8')); const playable=g.rows.filter(r=>r.standardAudioUrl||r.extendedAudioUrl||r.audioUrl||r.standardAudioUrlEn||r.extendedAudioUrlEn).length; console.log(JSON.stringify({generatedAt:m.generatedAt,counts:m.counts,bridgeStats:m.bridgeStats,guideContentsRowCount:g.rowCount,guideContentsWithAudioUrl:playable},null,2));"
|
||||
```
|
||||
|
||||
业务单元口径回归校验。人类厅应为 5 个业务单元、38 个有效讲解点:
|
||||
|
||||
```powershell
|
||||
$script = @'
|
||||
const fs = require('fs')
|
||||
const dir = 'static/guide-data'
|
||||
const halls = JSON.parse(fs.readFileSync(dir + '/halls.json', 'utf8')).rows
|
||||
const outlines = JSON.parse(fs.readFileSync(dir + '/outlines.json', 'utf8')).rows
|
||||
const stops = JSON.parse(fs.readFileSync(dir + '/guide-stops.json', 'utf8')).rows
|
||||
const human = halls.find((h) => h.name === '人类厅')
|
||||
const hallIds = new Set(halls.filter((h) => !(h.deleted === 1 || h.deleted === true || h.deleted === '1')).map((h) => String(h.id)))
|
||||
const outlineById = new Map(outlines.filter((o) => !(o.deleted === 1 || o.deleted === true || o.deleted === '1')).map((o) => [String(o.id), o]))
|
||||
const topOutlines = outlines.filter((o) => String(o.parentId) === String(human.id) && !(o.deleted === 1 || o.deleted === true || o.deleted === '1'))
|
||||
const topForStop = (stop) => {
|
||||
let current = outlineById.get(String(stop.outlineId))
|
||||
for (let guard = 0; current && guard < 16; guard++) {
|
||||
const parentId = String(current.parentId)
|
||||
if (hallIds.has(parentId)) return current
|
||||
current = outlineById.get(parentId)
|
||||
}
|
||||
}
|
||||
const visibleStops = stops.filter((s) => !(s.deleted === 1 || s.deleted === true || s.deleted === '1'))
|
||||
const units = topOutlines.map((u) => ({ id: String(u.id), name: u.name, guideStopCount: visibleStops.filter((s) => String(topForStop(s)?.id) === String(u.id)).length }))
|
||||
if (units.length !== 5) throw new Error('人类厅业务单元数量不为 5: ' + units.length)
|
||||
const guideStopCount = units.reduce((sum, u) => sum + u.guideStopCount, 0)
|
||||
if (guideStopCount !== 38) throw new Error('人类厅讲解点数量不为 38: ' + guideStopCount)
|
||||
console.log(JSON.stringify({ hall: '人类厅', businessUnitCount: units.length, guideStopCount, units }, null, 2))
|
||||
'@
|
||||
$script | node
|
||||
```
|
||||
|
||||
最小代码边界校验:
|
||||
|
||||
```powershell
|
||||
pnpm type-check
|
||||
```
|
||||
|
||||
如果本次仅更新静态 JSON,一般不需要运行 `pnpm build:h5`,因为它会写入 `dist`。若同时改了读取逻辑、adapter、repository 或 UI,再补充:
|
||||
|
||||
```powershell
|
||||
pnpm lint
|
||||
pnpm build:h5
|
||||
```
|
||||
|
||||
## 关闭隧道
|
||||
|
||||
仅在使用 SSH 隧道兜底时需要执行。用启动隧道时返回的进程 ID 关闭:
|
||||
|
||||
```powershell
|
||||
Stop-Process -Id <tunnel-process-id> -ErrorAction SilentlyContinue
|
||||
Start-Sleep -Seconds 1
|
||||
Get-NetTCPConnection -LocalPort 15237 -ErrorAction SilentlyContinue | Select-Object LocalAddress,LocalPort,State,OwningProcess
|
||||
```
|
||||
|
||||
预期:没有残留监听。
|
||||
|
||||
## 2026-07-02 最新更新记录
|
||||
|
||||
本次使用后端原始配置连接 `1.92.206.90` 达梦数据库,导出并更新 `static/guide-data`。
|
||||
|
||||
更新后关键统计:
|
||||
|
||||
- `halls`: `8`
|
||||
- `outlines`: `250`
|
||||
- `guide-stops`: `391`
|
||||
- `exhibits`: `4700`
|
||||
- `guide-contents`: `717`
|
||||
- `pois`: `2244`
|
||||
- `sgsPoiBridgeCount`: `876`
|
||||
- `sgsPoiCandidateCount`: `13`
|
||||
- 有音频 URL 的讲解内容:`382`
|
||||
|
||||
业务单元口径修正:
|
||||
|
||||
- `outlines.json` 恢复完整 `SGS_EXHIBIT_OUTLINE` 树,不再裁剪到 28 条。
|
||||
- 前端 adapter 改为按展厅下顶层 outline 生成业务单元,空业务单元也保留。
|
||||
- 人类厅回归结果:`5 个业务单元 · 38 个讲解点`。
|
||||
|
||||
更新文件:
|
||||
|
||||
- `scripts/export-guide-static-data.py`
|
||||
- `src/data/adapters/guideDataAdapter.ts`
|
||||
- `static/guide-data/README.md`
|
||||
- `static/guide-data/exhibits.json`
|
||||
- `static/guide-data/guide-contents.json`
|
||||
- `static/guide-data/guide-stops.json`
|
||||
- `static/guide-data/halls.json`
|
||||
- `static/guide-data/indexes.json`
|
||||
- `static/guide-data/manifest.json`
|
||||
- `static/guide-data/outlines.json`
|
||||
- `static/guide-data/poi-bridge.json`
|
||||
- `static/guide-data/pois.json`
|
||||
|
||||
已完成校验:
|
||||
|
||||
- JSON 全量解析通过。
|
||||
- `rowCount` 与 `rows.length` 一致。
|
||||
- 人类厅业务单元回归校验通过。
|
||||
- `pnpm type-check` 通过。
|
||||
- `pnpm lint` 通过。
|
||||
- `pnpm build:h5` 通过。
|
||||
|
||||
## 常见风险
|
||||
|
||||
- 不要直接读取或改写 `src/assets/data`,该目录是历史 demo 数据。
|
||||
- 不要把 `remote` 或 `mock` 模式误判为当前默认生产数据源;默认是 `static`。
|
||||
- 不要只更新 `guide-contents.json`,否则 `manifest`、`indexes`、`poi-bridge` 可能与内容数据不一致。
|
||||
- 不要把本地隧道地址提交到 `manifest.json`。
|
||||
- 不要把 `outlines.json` 过滤成只有讲解点引用的子集;后台业务单元需要完整 outline 树和顶层 outline 口径。
|
||||
- 不要用 `indexes.outlinesByHallId.length` 当作用户端业务单元数量,该索引包含所有后代 outline。
|
||||
- 不要因为 `poi-bridge.json` 增加了位置关联就宣称已支持正式路线规划;当前用户侧仍应按位置预览能力表述。
|
||||
- 不要在文档、日志或提交中复制数据库密码、MinIO 密钥、微信密钥等敏感配置。
|
||||
@@ -496,8 +496,10 @@ def export_package(config_path: Path, output_dir: Path, nav_assets_dir: Path) ->
|
||||
output_dir.mkdir(parents=True, exist_ok=True)
|
||||
data: dict[str, list[dict[str, Any]]] = {}
|
||||
for table, file_stem in TABLES.items():
|
||||
rows = fetch_table(connection, schema, table)
|
||||
data[file_stem] = rows
|
||||
data[file_stem] = fetch_table(connection, schema, table)
|
||||
|
||||
for table, file_stem in TABLES.items():
|
||||
rows = data[file_stem]
|
||||
write_json(
|
||||
output_dir / f"{file_stem}.json",
|
||||
{
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
import type {
|
||||
ExplainBusinessUnit,
|
||||
ExplainGuideStop,
|
||||
ExplainTrack,
|
||||
GuideLocationResolution,
|
||||
GuideLocationResolutionStatus,
|
||||
@@ -17,6 +19,7 @@ import type {
|
||||
GuideStaticContentPayload,
|
||||
GuideStaticDataset,
|
||||
GuideStaticExplainDataset,
|
||||
GuideStaticExplainNavigationDataset,
|
||||
GuideStaticExhibitPayload,
|
||||
GuideStaticHallPayload,
|
||||
GuideStaticOutlinePayload,
|
||||
@@ -32,11 +35,20 @@ export interface GuideContentDataAdapterResult {
|
||||
mediaAssets: MediaAsset[]
|
||||
}
|
||||
|
||||
export interface GuideExplainNavigationAdapterResult {
|
||||
halls: MuseumHall[]
|
||||
guideStops: ExplainGuideStop[]
|
||||
businessUnitsByHallId: Record<string, ExplainBusinessUnit[]>
|
||||
}
|
||||
|
||||
export interface GuideExplainDataAdapterResult {
|
||||
halls: MuseumHall[]
|
||||
exhibits: MuseumExhibit[]
|
||||
tracks: ExplainTrack[]
|
||||
mediaAssets: MediaAsset[]
|
||||
guideStops: ExplainGuideStop[]
|
||||
businessUnitsByHallId: Record<string, ExplainBusinessUnit[]>
|
||||
exhibitByStopId: Record<string, MuseumExhibit>
|
||||
}
|
||||
|
||||
const stringifyId = (value: string | number | null | undefined) => (
|
||||
@@ -239,6 +251,176 @@ const toHallModels = (
|
||||
}
|
||||
})
|
||||
|
||||
const toExplainBusinessUnitsByHallId = (
|
||||
stops: ExplainGuideStop[],
|
||||
topOutlines: Array<{ id: string; name: string; hallId: string; sort?: number }> = []
|
||||
) => {
|
||||
const unitsByHallId: Record<string, ExplainBusinessUnit[]> = {}
|
||||
const stopGroupsByHall = new Map<string, Map<string, ExplainGuideStop[]>>()
|
||||
const unitNameByKey = new Map<string, string>()
|
||||
const unitOrderByKey = new Map<string, number>()
|
||||
|
||||
topOutlines.forEach((outline) => {
|
||||
const hallGroups = stopGroupsByHall.get(outline.hallId) || new Map<string, ExplainGuideStop[]>()
|
||||
if (!hallGroups.has(outline.id)) {
|
||||
hallGroups.set(outline.id, [])
|
||||
}
|
||||
stopGroupsByHall.set(outline.hallId, hallGroups)
|
||||
unitNameByKey.set(`${outline.hallId}:${outline.id}`, outline.name)
|
||||
unitOrderByKey.set(`${outline.hallId}:${outline.id}`, outline.sort ?? 0)
|
||||
})
|
||||
|
||||
stops
|
||||
.slice()
|
||||
.sort((a, b) => (a.sort ?? 0) - (b.sort ?? 0))
|
||||
.forEach((stop) => {
|
||||
const hallId = stop.hallId || ''
|
||||
if (!hallId) return
|
||||
|
||||
const unitId = stop.outlineId || `ungrouped-${hallId}`
|
||||
const unitName = stop.outlineName || '其他讲解'
|
||||
const hallGroups = stopGroupsByHall.get(hallId) || new Map<string, ExplainGuideStop[]>()
|
||||
const groupStops = hallGroups.get(unitId) || []
|
||||
groupStops.push(stop)
|
||||
hallGroups.set(unitId, groupStops)
|
||||
stopGroupsByHall.set(hallId, hallGroups)
|
||||
if (!unitNameByKey.has(`${hallId}:${unitId}`)) {
|
||||
unitNameByKey.set(`${hallId}:${unitId}`, unitName)
|
||||
}
|
||||
if (!unitOrderByKey.has(`${hallId}:${unitId}`)) {
|
||||
unitOrderByKey.set(`${hallId}:${unitId}`, stop.sort ?? 0)
|
||||
}
|
||||
})
|
||||
|
||||
stopGroupsByHall.forEach((groupMap, hallId) => {
|
||||
unitsByHallId[hallId] = Array.from(groupMap.entries())
|
||||
.map(([unitId, groupStops]) => ({
|
||||
id: unitId,
|
||||
name: unitNameByKey.get(`${hallId}:${unitId}`) || '其他讲解',
|
||||
hallId,
|
||||
guideStopCount: groupStops.length,
|
||||
stops: groupStops
|
||||
}))
|
||||
.sort((a, b) => (
|
||||
(unitOrderByKey.get(`${hallId}:${a.id}`) ?? 0) - (unitOrderByKey.get(`${hallId}:${b.id}`) ?? 0)
|
||||
))
|
||||
})
|
||||
|
||||
return unitsByHallId
|
||||
}
|
||||
|
||||
const createExplainNavigationAdapter = (
|
||||
dataset: GuideStaticExplainNavigationDataset,
|
||||
hallGuideCounts = new Map<string, number>(),
|
||||
poiBridge: {
|
||||
hallToNavPoiId?: Record<string, GuideStaticPoiBridgeEntryPayload>
|
||||
sgsPoiToNavPoiId?: Record<string, GuideStaticPoiBridgeEntryPayload>
|
||||
} = {}
|
||||
): GuideExplainNavigationAdapterResult => {
|
||||
const visibleHalls = visibleHallsFrom(dataset.halls)
|
||||
const visibleOutlines = visibleOutlinesFrom(dataset.outlines)
|
||||
const visibleStops = visibleStopsFrom(dataset.guideStops)
|
||||
const hallById = new Map(visibleHalls.map((hall) => [stringifyId(hall.id), hall]))
|
||||
const outlineById = new Map(visibleOutlines.map((outline) => [stringifyId(outline.id), outline]))
|
||||
const hallBridgeById = poiBridge.hallToNavPoiId || {}
|
||||
const sgsPoiBridgeById = poiBridge.sgsPoiToNavPoiId || {}
|
||||
|
||||
const findHallForOutline = (outline: GuideStaticOutlinePayload | undefined) => {
|
||||
let current = outline
|
||||
let guard = 0
|
||||
|
||||
while (current && guard < 16) {
|
||||
const parentId = stringifyId(current.parentId)
|
||||
if (parentId && hallById.has(parentId)) {
|
||||
return hallById.get(parentId)
|
||||
}
|
||||
|
||||
current = parentId ? outlineById.get(parentId) : undefined
|
||||
guard += 1
|
||||
}
|
||||
|
||||
return undefined
|
||||
}
|
||||
|
||||
const findHallForStop = (stop: GuideStaticStopPayload | undefined) => (
|
||||
findHallForOutline(outlineById.get(stringifyId(stop?.outlineId)))
|
||||
)
|
||||
|
||||
const findTopOutlineForStop = (stop: GuideStaticStopPayload | undefined) => {
|
||||
let current = outlineById.get(stringifyId(stop?.outlineId))
|
||||
let guard = 0
|
||||
|
||||
while (current && guard < 16) {
|
||||
const parentId = stringifyId(current.parentId)
|
||||
if (parentId && hallById.has(parentId)) {
|
||||
return current
|
||||
}
|
||||
|
||||
current = parentId ? outlineById.get(parentId) : undefined
|
||||
guard += 1
|
||||
}
|
||||
|
||||
return outlineById.get(stringifyId(stop?.outlineId))
|
||||
}
|
||||
|
||||
const topOutlines = visibleOutlines.flatMap((outline) => {
|
||||
const id = stringifyId(outline.id)
|
||||
const parentId = stringifyId(outline.parentId)
|
||||
if (!id || !parentId || !hallById.has(parentId)) return []
|
||||
|
||||
return [{
|
||||
id,
|
||||
name: outline.name || `业务单元 ${id}`,
|
||||
hallId: parentId,
|
||||
sort: typeof outline.sort === 'number' ? outline.sort : undefined
|
||||
}]
|
||||
})
|
||||
|
||||
const resolveHallLocation = (hall: GuideStaticHallPayload | undefined) => {
|
||||
const hallId = stringifyId(hall?.id)
|
||||
const sourcePoiId = stringifyId(hall?.poiId)
|
||||
const bridgedHall = hallId ? toLocationResolution(hallBridgeById[hallId], 'exact', sourcePoiId) : undefined
|
||||
if (bridgedHall) return bridgedHall
|
||||
|
||||
return sourcePoiId ? toLocationResolution(sgsPoiBridgeById[sourcePoiId], 'exact', sourcePoiId) : undefined
|
||||
}
|
||||
|
||||
const halls = toHallModels(visibleHalls, hallGuideCounts, hallBridgeById, sgsPoiBridgeById)
|
||||
const guideStops: ExplainGuideStop[] = visibleStops.map((stop) => {
|
||||
const topOutline = findTopOutlineForStop(stop)
|
||||
const hall = findHallForStop(stop)
|
||||
const location = resolveHallLocation(hall)
|
||||
const floorId = location?.floorId || formatFloorId(hall, undefined) || stop.floorCode || stringifyId(stop.floorId)
|
||||
|
||||
return {
|
||||
id: stringifyId(stop.id) || '',
|
||||
name: firstText(stop.name) || `讲解点 ${stringifyId(stop.id) || ''}`,
|
||||
hallId: stringifyId(hall?.id),
|
||||
hallName: hall?.name || undefined,
|
||||
floorId,
|
||||
targetType: 'STOP',
|
||||
targetId: stringifyId(stop.id) || '',
|
||||
coverImageUrl: resolveImage(stop.coverImageUrl, hall?.coverImageUrl, hall?.galleryUrls),
|
||||
description: firstText(stop.name),
|
||||
hasAudio: Boolean(stop.audioUrl),
|
||||
poiId: location?.poiId,
|
||||
outlineId: stringifyId(topOutline?.id),
|
||||
outlineName: topOutline?.name || undefined,
|
||||
sort: typeof stop.sort === 'number' ? stop.sort : undefined
|
||||
}
|
||||
})
|
||||
|
||||
return {
|
||||
halls,
|
||||
guideStops,
|
||||
businessUnitsByHallId: toExplainBusinessUnitsByHallId(guideStops, topOutlines)
|
||||
}
|
||||
}
|
||||
|
||||
export const createGuideExplainNavigationAdapter = (
|
||||
dataset: GuideStaticExplainNavigationDataset
|
||||
): GuideExplainNavigationAdapterResult => createExplainNavigationAdapter(dataset)
|
||||
|
||||
export const createGuideExplainDataAdapter = (dataset: GuideStaticExplainDataset): GuideExplainDataAdapterResult => {
|
||||
const visibleHalls = visibleHallsFrom(dataset.halls)
|
||||
const visibleOutlines = visibleOutlinesFrom(dataset.outlines)
|
||||
@@ -272,6 +454,36 @@ export const createGuideExplainDataAdapter = (dataset: GuideStaticExplainDataset
|
||||
findHallForOutline(outlineById.get(stringifyId(stop?.outlineId)))
|
||||
)
|
||||
|
||||
const findTopOutlineForStop = (stop: GuideStaticStopPayload | undefined) => {
|
||||
let current = outlineById.get(stringifyId(stop?.outlineId))
|
||||
let guard = 0
|
||||
|
||||
while (current && guard < 16) {
|
||||
const parentId = stringifyId(current.parentId)
|
||||
if (parentId && hallById.has(parentId)) {
|
||||
return current
|
||||
}
|
||||
|
||||
current = parentId ? outlineById.get(parentId) : undefined
|
||||
guard += 1
|
||||
}
|
||||
|
||||
return outlineById.get(stringifyId(stop?.outlineId))
|
||||
}
|
||||
|
||||
const topOutlines = visibleOutlines.flatMap((outline) => {
|
||||
const id = stringifyId(outline.id)
|
||||
const parentId = stringifyId(outline.parentId)
|
||||
if (!id || !parentId || !hallById.has(parentId)) return []
|
||||
|
||||
return [{
|
||||
id,
|
||||
name: outline.name || `业务单元 ${id}`,
|
||||
hallId: parentId,
|
||||
sort: typeof outline.sort === 'number' ? outline.sort : undefined
|
||||
}]
|
||||
})
|
||||
|
||||
const resolveHallLocation = (
|
||||
hall: GuideStaticHallPayload | undefined,
|
||||
status: Exclude<GuideLocationResolutionStatus, 'unavailable'>
|
||||
@@ -313,6 +525,36 @@ export const createGuideExplainDataAdapter = (dataset: GuideStaticExplainDataset
|
||||
|
||||
const halls = toHallModels(visibleHalls, hallGuideCounts, hallBridgeById, sgsPoiBridgeById)
|
||||
|
||||
const guideStops: ExplainGuideStop[] = visibleStops.map((stop) => {
|
||||
const topOutline = findTopOutlineForStop(stop)
|
||||
const hall = findHallForStop(stop)
|
||||
const preciseLocation = resolveSgsPoiLocation([stop.poiId], 'exact')
|
||||
const location = preciseLocation || resolveHallLocation(hall, 'hallFallback')
|
||||
const floorId = location?.floorId || formatFloorId(hall, undefined) || stop.floorCode || stringifyId(stop.floorId)
|
||||
const stopGuide = visibleGuides.find((guide) => (
|
||||
guide.targetType?.toUpperCase() === 'STOP'
|
||||
&& stringifyId(guide.targetId) === stringifyId(stop.id)
|
||||
))
|
||||
|
||||
return {
|
||||
id: stringifyId(stop.id) || '',
|
||||
name: firstText(stop.name, stopGuide?.title) || `讲解点 ${stringifyId(stop.id) || ''}`,
|
||||
hallId: stringifyId(hall?.id),
|
||||
hallName: hall?.name || undefined,
|
||||
floorId,
|
||||
targetType: 'STOP',
|
||||
targetId: stringifyId(stop.id) || '',
|
||||
coverImageUrl: resolveImage(stop.coverImageUrl, stopGuide?.mediaGallery, hall?.coverImageUrl, hall?.galleryUrls),
|
||||
description: firstText(stopGuide?.standardText, stopGuide?.extendedText, stop.name),
|
||||
hasAudio: stopGuide ? Boolean(primaryAudioUrl(stopGuide)) : Boolean(stop.audioUrl),
|
||||
poiId: location?.poiId,
|
||||
outlineId: stringifyId(topOutline?.id),
|
||||
outlineName: topOutline?.name || undefined,
|
||||
sort: typeof stop.sort === 'number' ? stop.sort : undefined
|
||||
}
|
||||
})
|
||||
const businessUnitsByHallId = toExplainBusinessUnitsByHallId(guideStops, topOutlines)
|
||||
|
||||
const mediaAssets: MediaAsset[] = visibleGuides.map((guide) => {
|
||||
const id = `media-${stringifyId(guide.id) || 'unknown'}`
|
||||
const url = primaryAudioUrl(guide)
|
||||
@@ -374,6 +616,13 @@ export const createGuideExplainDataAdapter = (dataset: GuideStaticExplainDataset
|
||||
}
|
||||
})
|
||||
|
||||
const exhibitByStopId = exhibits.reduce<Record<string, MuseumExhibit>>((result, exhibit) => {
|
||||
if (exhibit.playTargetType === 'STOP' && exhibit.playTargetId) {
|
||||
result[exhibit.playTargetId] = exhibit
|
||||
}
|
||||
return result
|
||||
}, {})
|
||||
|
||||
const tracks: ExplainTrack[] = visibleGuides.map((guide) => {
|
||||
const id = stringifyId(guide.id) || ''
|
||||
const exhibitId = stringifyId(guide.exhibitId) || `guide-${id}`
|
||||
@@ -409,7 +658,10 @@ export const createGuideExplainDataAdapter = (dataset: GuideStaticExplainDataset
|
||||
halls,
|
||||
exhibits,
|
||||
tracks,
|
||||
mediaAssets
|
||||
mediaAssets,
|
||||
guideStops,
|
||||
businessUnitsByHallId,
|
||||
exhibitByStopId
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -225,6 +225,13 @@ export interface GuideStaticDataset {
|
||||
poiBridge: GuideStaticPoiBridgePayload
|
||||
}
|
||||
|
||||
export interface GuideStaticExplainNavigationDataset {
|
||||
manifest: GuideStaticManifestPayload
|
||||
halls: GuideStaticHallPayload[]
|
||||
outlines: GuideStaticOutlinePayload[]
|
||||
guideStops: GuideStaticStopPayload[]
|
||||
}
|
||||
|
||||
export interface GuideStaticExplainDataset {
|
||||
manifest: GuideStaticManifestPayload
|
||||
halls: GuideStaticHallPayload[]
|
||||
@@ -297,6 +304,7 @@ export interface StaticGuideDataProvider {
|
||||
assetUrl(relativePath: string): string
|
||||
loadManifest(): Promise<GuideStaticManifestPayload>
|
||||
loadIndexes(): Promise<GuideStaticIndexesPayload>
|
||||
loadExplainNavigationDataset(): Promise<GuideStaticExplainNavigationDataset>
|
||||
loadExplainDataset(): Promise<GuideStaticExplainDataset>
|
||||
loadDataset(): Promise<GuideStaticDataset>
|
||||
}
|
||||
@@ -309,6 +317,8 @@ export const createStaticGuideDataProvider = (
|
||||
let manifestRequest: Promise<GuideStaticManifestPayload> | null = null
|
||||
let indexesCache: GuideStaticIndexesPayload | null = null
|
||||
let indexesRequest: Promise<GuideStaticIndexesPayload> | null = null
|
||||
let explainNavigationDatasetCache: GuideStaticExplainNavigationDataset | null = null
|
||||
let explainNavigationDatasetRequest: Promise<GuideStaticExplainNavigationDataset> | null = null
|
||||
let explainDatasetCache: GuideStaticExplainDataset | null = null
|
||||
let explainDatasetRequest: Promise<GuideStaticExplainDataset> | null = null
|
||||
let datasetCache: GuideStaticDataset | null = null
|
||||
@@ -349,6 +359,46 @@ export const createStaticGuideDataProvider = (
|
||||
|
||||
return indexesRequest
|
||||
},
|
||||
async loadExplainNavigationDataset() {
|
||||
if (explainNavigationDatasetCache) return explainNavigationDatasetCache
|
||||
if (datasetCache) {
|
||||
explainNavigationDatasetCache = {
|
||||
manifest: datasetCache.manifest,
|
||||
halls: datasetCache.halls,
|
||||
outlines: datasetCache.outlines,
|
||||
guideStops: datasetCache.guideStops
|
||||
}
|
||||
return explainNavigationDatasetCache
|
||||
}
|
||||
if (explainNavigationDatasetRequest) return explainNavigationDatasetRequest
|
||||
|
||||
explainNavigationDatasetRequest = provider.loadManifest()
|
||||
.then(async (manifest) => {
|
||||
const [
|
||||
halls,
|
||||
outlines,
|
||||
guideStops
|
||||
] = await Promise.all([
|
||||
requestJson<GuideStaticPackagePayload<GuideStaticHallPayload>>(provider.assetUrl(manifest.files.halls)),
|
||||
requestJson<GuideStaticPackagePayload<GuideStaticOutlinePayload>>(provider.assetUrl(manifest.files.outlines)),
|
||||
requestJson<GuideStaticPackagePayload<GuideStaticStopPayload>>(provider.assetUrl(manifest.files.guideStops))
|
||||
])
|
||||
|
||||
explainNavigationDatasetCache = {
|
||||
manifest,
|
||||
halls: halls.rows,
|
||||
outlines: outlines.rows,
|
||||
guideStops: guideStops.rows
|
||||
}
|
||||
|
||||
return explainNavigationDatasetCache
|
||||
})
|
||||
.finally(() => {
|
||||
explainNavigationDatasetRequest = null
|
||||
})
|
||||
|
||||
return explainNavigationDatasetRequest
|
||||
},
|
||||
async loadExplainDataset() {
|
||||
if (explainDatasetCache) return explainDatasetCache
|
||||
if (datasetCache) {
|
||||
@@ -364,29 +414,20 @@ export const createStaticGuideDataProvider = (
|
||||
}
|
||||
if (explainDatasetRequest) return explainDatasetRequest
|
||||
|
||||
explainDatasetRequest = provider.loadManifest()
|
||||
.then(async (manifest) => {
|
||||
explainDatasetRequest = provider.loadExplainNavigationDataset()
|
||||
.then(async (navigationDataset) => {
|
||||
const [
|
||||
halls,
|
||||
outlines,
|
||||
guideStops,
|
||||
guideContents,
|
||||
poiBridge
|
||||
] = await Promise.all([
|
||||
requestJson<GuideStaticPackagePayload<GuideStaticHallPayload>>(provider.assetUrl(manifest.files.halls)),
|
||||
requestJson<GuideStaticPackagePayload<GuideStaticOutlinePayload>>(provider.assetUrl(manifest.files.outlines)),
|
||||
requestJson<GuideStaticPackagePayload<GuideStaticStopPayload>>(provider.assetUrl(manifest.files.guideStops)),
|
||||
requestJson<GuideStaticPackagePayload<GuideStaticContentPayload>>(provider.assetUrl(manifest.files.guideContents)),
|
||||
manifest.files.poiBridge
|
||||
? requestJson<GuideStaticPoiBridgePayload>(provider.assetUrl(manifest.files.poiBridge))
|
||||
requestJson<GuideStaticPackagePayload<GuideStaticContentPayload>>(provider.assetUrl(navigationDataset.manifest.files.guideContents)),
|
||||
navigationDataset.manifest.files.poiBridge
|
||||
? requestJson<GuideStaticPoiBridgePayload>(provider.assetUrl(navigationDataset.manifest.files.poiBridge))
|
||||
: Promise.resolve(emptyPoiBridge)
|
||||
])
|
||||
|
||||
explainDatasetCache = {
|
||||
manifest,
|
||||
halls: halls.rows,
|
||||
outlines: outlines.rows,
|
||||
guideStops: guideStops.rows,
|
||||
...navigationDataset,
|
||||
guideContents: guideContents.rows,
|
||||
poiBridge
|
||||
}
|
||||
|
||||
@@ -14,9 +14,11 @@ import {
|
||||
} from '@/config/dataSource'
|
||||
import {
|
||||
createGuideExplainDataAdapter,
|
||||
createGuideExplainNavigationAdapter,
|
||||
createGuideContentDataAdapter,
|
||||
type GuideContentDataAdapterResult,
|
||||
type GuideExplainDataAdapterResult
|
||||
type GuideExplainDataAdapterResult,
|
||||
type GuideExplainNavigationAdapterResult
|
||||
} from '@/data/adapters/guideDataAdapter'
|
||||
import {
|
||||
staticGuideDataProvider,
|
||||
@@ -112,12 +114,20 @@ const unavailableMockAudio = (id: string): MediaAsset => ({
|
||||
export class StaticGuideContentProvider implements ExplainContentProvider {
|
||||
private adapterCache: GuideContentDataAdapterResult | null = null
|
||||
private explainAdapterCache: GuideExplainDataAdapterResult | null = null
|
||||
private explainNavigationAdapterCache: GuideExplainNavigationAdapterResult | null = null
|
||||
|
||||
constructor(private readonly provider: StaticGuideDataProvider = staticGuideDataProvider) {}
|
||||
|
||||
private async loadExplainNavigationAdapter() {
|
||||
if (this.explainNavigationAdapterCache) return this.explainNavigationAdapterCache
|
||||
|
||||
const dataset = await this.provider.loadExplainNavigationDataset()
|
||||
this.explainNavigationAdapterCache = createGuideExplainNavigationAdapter(dataset)
|
||||
return this.explainNavigationAdapterCache
|
||||
}
|
||||
|
||||
private async loadExplainAdapter() {
|
||||
if (this.explainAdapterCache) return this.explainAdapterCache
|
||||
if (this.adapterCache) return this.adapterCache
|
||||
|
||||
const dataset = await this.provider.loadExplainDataset()
|
||||
this.explainAdapterCache = createGuideExplainDataAdapter(dataset)
|
||||
@@ -137,13 +147,30 @@ export class StaticGuideContentProvider implements ExplainContentProvider {
|
||||
return adapter.exhibits
|
||||
}
|
||||
|
||||
async getExhibitById(id: string) {
|
||||
const adapter = await this.loadExplainAdapter()
|
||||
return adapter.exhibits.find((exhibit) => exhibit.id === id)
|
||||
|| adapter.exhibitByStopId[id]
|
||||
|| null
|
||||
}
|
||||
|
||||
async listGuideStopsByHall(hallId: string) {
|
||||
const adapter = await this.loadExplainNavigationAdapter()
|
||||
return adapter.guideStops.filter((stop) => stop.hallId === hallId)
|
||||
}
|
||||
|
||||
async listTemporaryBusinessUnitsByHall(hallId: string) {
|
||||
const adapter = await this.loadExplainNavigationAdapter()
|
||||
return adapter.businessUnitsByHallId[hallId] || []
|
||||
}
|
||||
|
||||
async listExhibits() {
|
||||
const adapter = await this.loadAdapter()
|
||||
return adapter.exhibits
|
||||
}
|
||||
|
||||
async listHalls() {
|
||||
const adapter = await this.loadExplainAdapter()
|
||||
const adapter = await this.loadExplainNavigationAdapter()
|
||||
return adapter.halls
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,10 @@ Re-export:
|
||||
python scripts/export-guide-static-data.py
|
||||
```
|
||||
|
||||
Operational runbook for SSH tunnel export and explain-business refresh:
|
||||
|
||||
- `docs/Data/explain-static-data-refresh-runbook.md`
|
||||
|
||||
Optional arguments:
|
||||
|
||||
```bash
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": null,
|
||||
"stopId": null
|
||||
"stopId": "1780909532310"
|
||||
},
|
||||
{
|
||||
"id": "1780909532241",
|
||||
@@ -118,7 +118,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": null,
|
||||
"stopId": null
|
||||
"stopId": "1780909532368"
|
||||
},
|
||||
{
|
||||
"id": "1780578602690728",
|
||||
@@ -83557,7 +83557,7 @@
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"narrationText": null,
|
||||
"coverImageUrl": "http://1.92.206.90:9000/museum-assets/exhibit_images/20260606/universe/861c1ffa31d447a195120a72d349fa2c.png",
|
||||
"coverImageUrl": "http://1.92.206.90:9000/museum-assets/20260629/image16.png",
|
||||
"galleryUrls": "[\"http://1.92.206.90:9000/museum-assets/exhibit_images/20260606/legacy/75ecedd88dc24e519488d828512537c9.png\"]",
|
||||
"audioUrl": null,
|
||||
"audioDuration": 0,
|
||||
@@ -83578,7 +83578,7 @@
|
||||
"tenantId": "0",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": "重点展品",
|
||||
"stopId": "1823450596859000"
|
||||
"stopId": "1823450596863811"
|
||||
},
|
||||
{
|
||||
"id": "1780620049205588",
|
||||
@@ -83635,7 +83635,7 @@
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"narrationText": null,
|
||||
"coverImageUrl": null,
|
||||
"coverImageUrl": "http://1.92.206.90:9000/museum-assets/20260629/image16.png",
|
||||
"galleryUrls": null,
|
||||
"audioUrl": null,
|
||||
"audioDuration": 0,
|
||||
@@ -83656,7 +83656,7 @@
|
||||
"tenantId": "0",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": null,
|
||||
"stopId": "1823450596859000"
|
||||
"stopId": "1823450596863811"
|
||||
},
|
||||
{
|
||||
"id": "1780620049205590",
|
||||
@@ -83812,7 +83812,7 @@
|
||||
"tenantId": "0",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": "重点展品",
|
||||
"stopId": "1823450596859000"
|
||||
"stopId": "1823450596869980"
|
||||
},
|
||||
{
|
||||
"id": "1780620049205594",
|
||||
@@ -92314,7 +92314,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": "核心展品",
|
||||
"stopId": null
|
||||
"stopId": "178090181119217"
|
||||
},
|
||||
{
|
||||
"id": "7151780752527597",
|
||||
@@ -92353,7 +92353,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": "核心展品",
|
||||
"stopId": null
|
||||
"stopId": "178090181119528"
|
||||
},
|
||||
{
|
||||
"id": "7151780752527630",
|
||||
@@ -92392,7 +92392,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": "重点展品",
|
||||
"stopId": null
|
||||
"stopId": "178090181119899"
|
||||
},
|
||||
{
|
||||
"id": "7151780753844465",
|
||||
@@ -105358,7 +105358,7 @@
|
||||
"description": "生态标本,皮张完整,体色和状态自然。游泳姿态。\r\n尺寸: 37*38*10 cm",
|
||||
"descriptionEn": null,
|
||||
"narrationText": null,
|
||||
"coverImageUrl": null,
|
||||
"coverImageUrl": "http://1.92.206.90:9000/museum-assets/20260629/image2.jpeg",
|
||||
"galleryUrls": null,
|
||||
"audioUrl": null,
|
||||
"audioDuration": 0,
|
||||
@@ -105379,7 +105379,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": null,
|
||||
"stopId": null
|
||||
"stopId": "1780908246192"
|
||||
},
|
||||
{
|
||||
"id": "715795000000000192",
|
||||
@@ -105808,7 +105808,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": null,
|
||||
"stopId": null
|
||||
"stopId": "1780907025592"
|
||||
},
|
||||
{
|
||||
"id": "715795000000000203",
|
||||
@@ -106801,7 +106801,7 @@
|
||||
"description": "",
|
||||
"descriptionEn": null,
|
||||
"narrationText": null,
|
||||
"coverImageUrl": null,
|
||||
"coverImageUrl": "http://1.92.206.90:9000/museum-assets/20260629/image8.jpeg",
|
||||
"galleryUrls": null,
|
||||
"audioUrl": null,
|
||||
"audioDuration": 0,
|
||||
@@ -106822,7 +106822,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": null,
|
||||
"stopId": null
|
||||
"stopId": "1823450596499784"
|
||||
},
|
||||
{
|
||||
"id": "715795000000000229",
|
||||
@@ -110332,7 +110332,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": null,
|
||||
"stopId": null
|
||||
"stopId": "1780907025090"
|
||||
},
|
||||
{
|
||||
"id": "715795000000000319",
|
||||
@@ -113782,7 +113782,7 @@
|
||||
"description": "1、仿真模型:虎纹蛙\r\n2、尺寸:12cm\r\n3、编号:G6-4.3-12\r\n4、做法工艺:3D建模打印加固上色\r\n5、含制作、运输、安装、保险、模型支撑支架等\r\n6、满足招标文件、设计图纸、方案图册及相关规范等全部要求",
|
||||
"descriptionEn": null,
|
||||
"narrationText": null,
|
||||
"coverImageUrl": null,
|
||||
"coverImageUrl": "http://1.92.206.90:9000/museum-assets/20260629/image9.jpeg",
|
||||
"galleryUrls": null,
|
||||
"audioUrl": null,
|
||||
"audioDuration": 0,
|
||||
@@ -113803,7 +113803,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": null,
|
||||
"stopId": null
|
||||
"stopId": "1823450596525991"
|
||||
},
|
||||
{
|
||||
"id": "715795000000000408",
|
||||
@@ -124177,7 +124177,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": null,
|
||||
"stopId": null
|
||||
"stopId": "1823450595664409"
|
||||
},
|
||||
{
|
||||
"id": "715795000000000674",
|
||||
@@ -135682,7 +135682,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": null,
|
||||
"stopId": null
|
||||
"stopId": "1780907692487"
|
||||
},
|
||||
{
|
||||
"id": "715796000000000004",
|
||||
@@ -149644,7 +149644,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": "重点展品",
|
||||
"stopId": null
|
||||
"stopId": "178090181115241"
|
||||
},
|
||||
{
|
||||
"id": "715797000000000039",
|
||||
@@ -166336,7 +166336,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": "重点展品",
|
||||
"stopId": null
|
||||
"stopId": "1823450595935856"
|
||||
},
|
||||
{
|
||||
"id": "715803000000000019",
|
||||
@@ -166765,7 +166765,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": "重点展品",
|
||||
"stopId": null
|
||||
"stopId": "1823450595956295"
|
||||
},
|
||||
{
|
||||
"id": "715803000000000030",
|
||||
@@ -166804,7 +166804,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": "重点展品",
|
||||
"stopId": null
|
||||
"stopId": "1823450595961957"
|
||||
},
|
||||
{
|
||||
"id": "715803000000000031",
|
||||
@@ -170704,7 +170704,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": null,
|
||||
"stopId": null
|
||||
"stopId": "1823450595709143"
|
||||
},
|
||||
{
|
||||
"id": "715814000000000012",
|
||||
@@ -174916,7 +174916,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": "重点展品",
|
||||
"stopId": null
|
||||
"stopId": "178090181115752"
|
||||
},
|
||||
{
|
||||
"id": "715816000000000107",
|
||||
@@ -174955,7 +174955,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": "重点展品",
|
||||
"stopId": null
|
||||
"stopId": "178090181116150"
|
||||
},
|
||||
{
|
||||
"id": "715816000000000108",
|
||||
@@ -175072,7 +175072,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": "重点展品",
|
||||
"stopId": null
|
||||
"stopId": "178090181116427"
|
||||
},
|
||||
{
|
||||
"id": "715816000000000111",
|
||||
@@ -175111,7 +175111,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": null,
|
||||
"stopId": null
|
||||
"stopId": "178090181117787"
|
||||
},
|
||||
{
|
||||
"id": "715816000000000112",
|
||||
@@ -175540,7 +175540,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": "重点展品",
|
||||
"stopId": null
|
||||
"stopId": "178090181116688"
|
||||
},
|
||||
{
|
||||
"id": "715816000000000123",
|
||||
@@ -175774,7 +175774,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": "重点展品",
|
||||
"stopId": null
|
||||
"stopId": "178090181116952"
|
||||
},
|
||||
{
|
||||
"id": "715816000000000129",
|
||||
@@ -177022,7 +177022,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": "重点展品",
|
||||
"stopId": null
|
||||
"stopId": "178090181118029"
|
||||
},
|
||||
{
|
||||
"id": "715816000000000161",
|
||||
@@ -177061,7 +177061,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": "重点展品",
|
||||
"stopId": null
|
||||
"stopId": "178090181118237"
|
||||
},
|
||||
{
|
||||
"id": "715816000000000162",
|
||||
@@ -177334,7 +177334,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": "核心展品",
|
||||
"stopId": null
|
||||
"stopId": "178090181118531"
|
||||
},
|
||||
{
|
||||
"id": "715816000000000169",
|
||||
@@ -177529,7 +177529,7 @@
|
||||
"tenantId": "1",
|
||||
"spatialNodeId": null,
|
||||
"exhibitLevel": "重点展品",
|
||||
"stopId": null
|
||||
"stopId": "178090181118826"
|
||||
},
|
||||
{
|
||||
"id": "715816000000000174",
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -6,16 +6,16 @@
|
||||
{
|
||||
"id": "715792102100832256",
|
||||
"mapId": null,
|
||||
"floorId": null,
|
||||
"floorId": "2065808921272119298",
|
||||
"poiId": null,
|
||||
"hallCode": "E5",
|
||||
"name": "人类厅",
|
||||
"nameEn": null,
|
||||
"subtitle": null,
|
||||
"description": null,
|
||||
"description": "我们是谁?从哪里来?到哪里去?这不仅仅是哲学命题,也是研究人类进化最渴望了解的真相。100多年来,科学家通过对大量化石的研究,发现人类起源于灵长类,人与猿具有共同的祖先,经过数百万年的演化走到今天。但是这个演化过程并不是一帆风顺,充满了曲折与偶然,它的每个进步在生物史上都是一次飞跃。",
|
||||
"descriptionEn": null,
|
||||
"narrationText": null,
|
||||
"coverImageUrl": null,
|
||||
"coverImageUrl": "/minio/museum-assets/temp-exhibition/20260630/%E5%B1%95%E5%8E%85%E7%A9%BA%E9%97%B4__%E4%BA%BA%E7%B1%BB%E5%8E%85__coverImageUrl__cf4b63c7e9_1782805919765.webp",
|
||||
"galleryUrls": null,
|
||||
"audioUrl": null,
|
||||
"audioDuration": null,
|
||||
@@ -28,25 +28,25 @@
|
||||
"tenantId": "1",
|
||||
"creator": "",
|
||||
"createTime": "2026-06-08T00:32:35",
|
||||
"updater": "",
|
||||
"updateTime": "2026-06-08T00:32:35",
|
||||
"updater": "142",
|
||||
"updateTime": "2026-07-02T17:15:43.802058",
|
||||
"deleted": 0,
|
||||
"floorCode": "L1",
|
||||
"schematicImageUrl": null
|
||||
"schematicImageUrl": "/minio/museum-assets/temp-exhibition/20260630/%E5%B1%95%E5%8E%85%E7%A9%BA%E9%97%B4__%E4%BA%BA%E7%B1%BB%E5%8E%85__coverImageUrl__cf4b63c7e9_1782805919765.webp"
|
||||
},
|
||||
{
|
||||
"id": "715792102100832257",
|
||||
"mapId": null,
|
||||
"floorId": null,
|
||||
"floorId": "2065808920714276866",
|
||||
"poiId": null,
|
||||
"hallCode": "E2",
|
||||
"name": "地球厅",
|
||||
"nameEn": null,
|
||||
"subtitle": null,
|
||||
"description": null,
|
||||
"description": "欢迎来到“地球厅”展区!在这里,我们将从宏观到微观,从过去到现在,全面了解这颗我们赖以生存的蓝色星球,带您踏上一场探索地球奥秘的奇妙之旅,地球厅的探索旅程将分为四个单元,每个单元都聚焦于地球的不同方面,带您领略地球的神奇与壮丽。在“宜居地球”单元,我们将带您从宇宙的视角审视地球的独特性.了解地球的蔚蓝色外观、其独特的生命孕育环境,以及太阳与地球内部能量如何共同作用,维持着地球的生机与活力.通过互动展示和多媒体演示,直观感受到地球的圈层结构如何相互依存,共同创造了这个生命的摇篮。\n“地史探源\"单元将带您穿越时空,回到地球诞生之初,见证其45亿年的演化历程,您将了解地球的绝对年龄是如何测定的,探索地层的相对年龄,以及地球从熔融状态逐。渐冷却、演化出水圈和大气圈的复杂过程。通过化石、岩石和模拟模型,见证生命的起\n源、演化与灭绝事件,感受地球历史的波澜壮阔。\n“华夏格局”单元聚焦于中国地质的特色与多样性。这里,您将了解内力如何塑造了\n中国的大地格局,外力如何雕刻出秀美的河山.从青藏高原的隆升到珠江的蜿蜒流淌,从黄土高原的沟壑纵横到南海的波涛汹涌,您将领略华夏大地的壮丽景观和地质变迁,\n感受这片土地的沧桑巨变。\n在最后的“地球的馈赠”单元,我们将一同探索矿物资源如何成为人类文明发展的基石.从古代的石器、青铜器、铁器,到现代的新能源材料和高科技元件,看到矿物资源在各个历史时期的重要应用。通过展示硅、铝、钛等新材料的特性和应用,您将了解材料科学如何推动技术革命,引领人类走向更高效、可持续的未来。\n现在,让我们一同开启这场跨越时空、深人地球内部的奇妙之旅,探索地球的奥秘与人类文明的紧密联系。",
|
||||
"descriptionEn": null,
|
||||
"narrationText": null,
|
||||
"coverImageUrl": null,
|
||||
"coverImageUrl": "/minio/museum-assets/temp-exhibition/20260630/%E5%B1%95%E5%8E%85%E7%A9%BA%E9%97%B4__%E5%9C%B0%E7%90%83%E5%8E%85__coverImageUrl__01b7636aa9_1782805894116.webp",
|
||||
"galleryUrls": null,
|
||||
"audioUrl": null,
|
||||
"audioDuration": null,
|
||||
@@ -59,25 +59,25 @@
|
||||
"tenantId": "1",
|
||||
"creator": "",
|
||||
"createTime": "2026-06-08T00:32:35",
|
||||
"updater": "",
|
||||
"updateTime": "2026-06-08T00:32:35",
|
||||
"updater": "142",
|
||||
"updateTime": "2026-07-02T18:19:27.817944",
|
||||
"deleted": 0,
|
||||
"floorCode": "L-2",
|
||||
"schematicImageUrl": null
|
||||
"schematicImageUrl": "/minio/museum-assets/temp-exhibition/20260630/%E5%B1%95%E5%8E%85%E7%A9%BA%E9%97%B4__%E5%9C%B0%E7%90%83%E5%8E%85__coverImageUrl__01b7636aa9_1782805894116.webp"
|
||||
},
|
||||
{
|
||||
"id": "715792102100832258",
|
||||
"mapId": null,
|
||||
"floorId": null,
|
||||
"floorId": "2065808920714276866",
|
||||
"poiId": null,
|
||||
"hallCode": "E1",
|
||||
"name": "宇宙厅",
|
||||
"nameEn": null,
|
||||
"subtitle": null,
|
||||
"description": null,
|
||||
"description": "宇宙是浩瀚、神秘、包罗万象的,人类对宇宙的想象和探索是漫长的、多元的、永无止境的。\n 首先,展览以地球为主视角,从天文学史的角度切入,内容涉及宇宙观、方法论、人类对于自然乃至整个宇宙的基本态度,强调思想、艺术、技术的结合。\n 然后,从地球延伸至宇宙,讲述等级宇宙结构,诠释整个世界的尺度结构。围绕天体类型,将行星系统、恒星系统、星系系统等较为前沿的天文发现和热点融入其中。\n 最后,再次由遥远宇宙回到我们身边,讲述行星科学和深空探测。通过陨石、行星采样的微观视角切入,将外星球的样本呈现在我们眼前,以小见大地探索这个神奇的宇宙。",
|
||||
"descriptionEn": null,
|
||||
"narrationText": null,
|
||||
"coverImageUrl": null,
|
||||
"coverImageUrl": "/minio/museum-assets/temp-exhibition/20260702/%E5%9C%B0%E7%90%83%E9%A6%86_1782983255673.webp",
|
||||
"galleryUrls": null,
|
||||
"audioUrl": null,
|
||||
"audioDuration": null,
|
||||
@@ -90,25 +90,25 @@
|
||||
"tenantId": "1",
|
||||
"creator": "",
|
||||
"createTime": "2026-06-08T00:32:35",
|
||||
"updater": "",
|
||||
"updateTime": "2026-06-08T00:32:35",
|
||||
"updater": "142",
|
||||
"updateTime": "2026-07-02T17:07:41.804589",
|
||||
"deleted": 0,
|
||||
"floorCode": "L-2",
|
||||
"schematicImageUrl": null
|
||||
"schematicImageUrl": "/minio/museum-assets/exhibition-hall/20260702/%E5%9C%B0%E7%90%83%E9%A6%86_1782983215322.webp"
|
||||
},
|
||||
{
|
||||
"id": "715792102100832259",
|
||||
"mapId": null,
|
||||
"floorId": null,
|
||||
"floorId": "2065808920714276866",
|
||||
"poiId": null,
|
||||
"hallCode": "E3",
|
||||
"name": "演化厅",
|
||||
"nameEn": null,
|
||||
"subtitle": null,
|
||||
"description": null,
|
||||
"description": "在漫长的38亿年生命演化史中,探寻生命进化的内因与外因规律,并在化石记录中寻找演化的事实证据。在展示演化史脉络同时,融入了学科史介绍一些重要的基础理论观点;结合遗传学介绍演化的物质基础;结合特殊的生物学现象介绍演化的驱动。",
|
||||
"descriptionEn": null,
|
||||
"narrationText": null,
|
||||
"coverImageUrl": null,
|
||||
"coverImageUrl": "/minio/museum-assets/temp-exhibition/20260630/%E5%B1%95%E5%8E%85%E7%A9%BA%E9%97%B4__%E6%BC%94%E5%8C%96%E5%8E%85__coverImageUrl__544444b670_1782805902349.webp",
|
||||
"galleryUrls": null,
|
||||
"audioUrl": null,
|
||||
"audioDuration": null,
|
||||
@@ -121,25 +121,25 @@
|
||||
"tenantId": "1",
|
||||
"creator": "",
|
||||
"createTime": "2026-06-08T00:32:35",
|
||||
"updater": "",
|
||||
"updateTime": "2026-06-08T00:32:35",
|
||||
"updater": "142",
|
||||
"updateTime": "2026-07-02T17:14:23.460037",
|
||||
"deleted": 0,
|
||||
"floorCode": "L-2",
|
||||
"schematicImageUrl": null
|
||||
"schematicImageUrl": "/minio/museum-assets/temp-exhibition/20260630/%E5%B1%95%E5%8E%85%E7%A9%BA%E9%97%B4__%E6%BC%94%E5%8C%96%E5%8E%85__coverImageUrl__544444b670_1782805902349.webp"
|
||||
},
|
||||
{
|
||||
"id": "715792102100832260",
|
||||
"mapId": null,
|
||||
"floorId": null,
|
||||
"floorId": "2065808920714276866",
|
||||
"poiId": null,
|
||||
"hallCode": "E4",
|
||||
"name": "恐龙厅",
|
||||
"nameEn": null,
|
||||
"subtitle": null,
|
||||
"description": null,
|
||||
"description": "该展厅前承地球生命的演化之路,后续哺乳动物与人类生命的进化篇章,展示了地球曾经最为兴盛的物种之一一一恐龙。展览首先从发现恐龙化石开始,讲述了早期科学家们从各类化石中判定了恐龙的存在;通过科学的研究与分析,进而了解了恐龙这种生物的物种及其演化信息;中间以专题形式,展开讲述了粤赣恐龙故乡的发现与研究成果;接着通过进一步的研究,科学家们以有力的证据论证了恐龙生活的时代及其生活的习性特征;最终,以恐龙灭绝谜题的假想与探究,继续揭秘着恐龙的研究故事,拼凑起世界的恐龙地图。",
|
||||
"descriptionEn": null,
|
||||
"narrationText": null,
|
||||
"coverImageUrl": null,
|
||||
"coverImageUrl": "/minio/museum-assets/temp-exhibition/20260702/%E6%81%90%E9%BE%99%E9%A6%86_1782983676437.webp",
|
||||
"galleryUrls": null,
|
||||
"audioUrl": null,
|
||||
"audioDuration": null,
|
||||
@@ -152,25 +152,25 @@
|
||||
"tenantId": "1",
|
||||
"creator": "",
|
||||
"createTime": "2026-06-08T00:32:35",
|
||||
"updater": "",
|
||||
"updateTime": "2026-06-08T00:32:35",
|
||||
"updater": "142",
|
||||
"updateTime": "2026-07-02T17:14:54.791898",
|
||||
"deleted": 0,
|
||||
"floorCode": "L-2",
|
||||
"schematicImageUrl": null
|
||||
"schematicImageUrl": "/minio/museum-assets/exhibition-hall/20260702/%E6%81%90%E9%BE%99%E9%A6%86_1782983683613.webp"
|
||||
},
|
||||
{
|
||||
"id": "715792102100832261",
|
||||
"mapId": null,
|
||||
"floorId": null,
|
||||
"floorId": "2065808921578303490",
|
||||
"poiId": null,
|
||||
"hallCode": "E6",
|
||||
"name": "生物厅",
|
||||
"nameEn": null,
|
||||
"subtitle": null,
|
||||
"description": null,
|
||||
"description": "生物多样性是生物与环境形成的生态复合体以及与此相关的各种生态过程的总和。缤纷多彩的生物世界一方面值得我们去惊叹、去赞美,另一方面也向我们提出了问题--究竟是什么造就了地球上的生命形态如此纷繁复杂?是环境的选择还是生命自身的内在需求,抑或其它。\n地球因生命而精彩。这些丰富多彩的生物是人类生存和发展\n的基础,也是需要珍惜和保护重要资源。",
|
||||
"descriptionEn": null,
|
||||
"narrationText": null,
|
||||
"coverImageUrl": null,
|
||||
"coverImageUrl": "/minio/museum-assets/temp-exhibition/20260702/%E7%94%9F%E6%80%81%E8%A7%82_1782983756830.webp",
|
||||
"galleryUrls": null,
|
||||
"audioUrl": null,
|
||||
"audioDuration": null,
|
||||
@@ -183,25 +183,25 @@
|
||||
"tenantId": "1",
|
||||
"creator": "",
|
||||
"createTime": "2026-06-08T00:32:35",
|
||||
"updater": "",
|
||||
"updateTime": "2026-06-08T00:32:35",
|
||||
"updater": "142",
|
||||
"updateTime": "2026-07-02T17:16:11.025493",
|
||||
"deleted": 0,
|
||||
"floorCode": "L2",
|
||||
"schematicImageUrl": null
|
||||
"schematicImageUrl": "/minio/museum-assets/exhibition-hall/20260702/%E7%94%9F%E6%80%81%E8%A7%82_1782983762387.webp"
|
||||
},
|
||||
{
|
||||
"id": "715792102100832262",
|
||||
"mapId": null,
|
||||
"floorId": null,
|
||||
"floorId": "2065808921578303490",
|
||||
"poiId": null,
|
||||
"hallCode": "E7",
|
||||
"name": "生态厅",
|
||||
"nameEn": null,
|
||||
"subtitle": null,
|
||||
"description": null,
|
||||
"description": "展示全球主要生态系统及生态景观,包括海洋、森林、湿地、荒漠、草原、山、极地、淡水等,突出淡水中生物与环境的生态关系;基于动物地理学理念,呈现世界生物地理区系及其形成因素。讲述生物的捕食防御、求偶繁殖等生存智慧;并从环境因素、人为因素角度反映物种濒危问题,唤醒观众对生物生态的关怀。",
|
||||
"descriptionEn": null,
|
||||
"narrationText": null,
|
||||
"coverImageUrl": null,
|
||||
"coverImageUrl": "/minio/museum-assets/temp-exhibition/20260630/%E5%B1%95%E5%8E%85%E7%A9%BA%E9%97%B4__%E7%94%9F%E6%80%81%E5%8E%85__coverImageUrl__0d91adb197_1782805948214.webp",
|
||||
"galleryUrls": null,
|
||||
"audioUrl": null,
|
||||
"audioDuration": null,
|
||||
@@ -214,25 +214,25 @@
|
||||
"tenantId": "1",
|
||||
"creator": "",
|
||||
"createTime": "2026-06-08T00:32:35",
|
||||
"updater": "",
|
||||
"updateTime": "2026-06-08T00:32:35",
|
||||
"updater": "142",
|
||||
"updateTime": "2026-07-02T18:20:10.553529",
|
||||
"deleted": 0,
|
||||
"floorCode": "L2",
|
||||
"schematicImageUrl": null
|
||||
"schematicImageUrl": "/minio/museum-assets/temp-exhibition/20260630/%E5%B1%95%E5%8E%85%E7%A9%BA%E9%97%B4__%E7%94%9F%E6%80%81%E5%8E%85__coverImageUrl__0d91adb197_1782805948214.webp"
|
||||
},
|
||||
{
|
||||
"id": "715792102100832263",
|
||||
"mapId": null,
|
||||
"floorId": null,
|
||||
"floorId": "2065808921578303490",
|
||||
"poiId": null,
|
||||
"hallCode": "E8",
|
||||
"name": "家园厅",
|
||||
"nameEn": null,
|
||||
"subtitle": null,
|
||||
"description": null,
|
||||
"description": "展馆空间设计策略以“家园”为核心概念,用“河流”和“山地岛屿”的形态方式作为空间灵感,巧妙的运用二者之间的“流动”和“穿插”,沟通起展厅的四个单元内容。其中,第一单元“万物共生”也是整个展厅的体验重点,围绕原本环形的空间结构,随着曲折蜿蛾的动线进行层层展演,呈现深圳十二时辰“自然、城市、共生”的家园景观。",
|
||||
"descriptionEn": null,
|
||||
"narrationText": null,
|
||||
"coverImageUrl": null,
|
||||
"coverImageUrl": "/minio/museum-assets/temp-exhibition/20260630/%E5%B1%95%E5%8E%85%E7%A9%BA%E9%97%B4__%E5%AE%B6%E5%9B%AD%E5%8E%85__coverImageUrl__89581a4213_1782805958654.webp",
|
||||
"galleryUrls": null,
|
||||
"audioUrl": null,
|
||||
"audioDuration": null,
|
||||
@@ -245,11 +245,11 @@
|
||||
"tenantId": "1",
|
||||
"creator": "",
|
||||
"createTime": "2026-06-08T00:32:35",
|
||||
"updater": "",
|
||||
"updateTime": "2026-06-08T00:32:35",
|
||||
"updater": "142",
|
||||
"updateTime": "2026-07-02T17:17:11.579353",
|
||||
"deleted": 0,
|
||||
"floorCode": "L2",
|
||||
"schematicImageUrl": null
|
||||
"schematicImageUrl": "/minio/museum-assets/temp-exhibition/20260630/%E5%B1%95%E5%8E%85%E7%A9%BA%E9%97%B4__%E5%AE%B6%E5%9B%AD%E5%8E%85__coverImageUrl__89581a4213_1782805958654.webp"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": "sgs-guide-static/v1",
|
||||
"generatedAt": "2026-06-22T01:54:11.876097+00:00",
|
||||
"generatedAt": "2026-07-02T17:36:16.697936+00:00",
|
||||
"source": {
|
||||
"type": "dameng",
|
||||
"host": "1.92.206.90",
|
||||
@@ -23,13 +23,13 @@
|
||||
"outlines": 250,
|
||||
"guide-stops": 391,
|
||||
"exhibits": 4700,
|
||||
"guide-contents": 706,
|
||||
"pois": 2238
|
||||
"guide-contents": 717,
|
||||
"pois": 2244
|
||||
},
|
||||
"bridgeStats": {
|
||||
"hallBridgeCount": 8,
|
||||
"sgsPoiBridgeCount": 869,
|
||||
"sgsPoiCandidateCount": 12,
|
||||
"sgsPoiBridgeCount": 876,
|
||||
"sgsPoiCandidateCount": 13,
|
||||
"navPoiCount": 298
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schemaVersion": "sgs-guide-poi-bridge/v1",
|
||||
"generatedAt": "2026-06-22T01:54:11.869004+00:00",
|
||||
"generatedAt": "2026-07-02T17:36:16.690423+00:00",
|
||||
"source": {
|
||||
"guideStaticSchemaVersion": "sgs-guide-static/v1",
|
||||
"navAssetRunId": "codex_nav_20260621_175310_museum_default_centerline_finalxy",
|
||||
@@ -8,8 +8,8 @@
|
||||
},
|
||||
"stats": {
|
||||
"hallBridgeCount": 8,
|
||||
"sgsPoiBridgeCount": 869,
|
||||
"sgsPoiCandidateCount": 12,
|
||||
"sgsPoiBridgeCount": 876,
|
||||
"sgsPoiCandidateCount": 13,
|
||||
"navPoiCount": 298
|
||||
},
|
||||
"sgsFloorIdToNavFloorId": {
|
||||
@@ -7759,6 +7759,46 @@
|
||||
"sourcePoiId": "5523",
|
||||
"sourcePoiName": "女卫生间04"
|
||||
},
|
||||
"5524": {
|
||||
"navPoiId": "connector_0043_L_2_停车场_楼梯01",
|
||||
"navPoiName": "停车场_楼梯01",
|
||||
"navFloorId": "L-2",
|
||||
"method": "name_floor_coordinate",
|
||||
"confidence": "high",
|
||||
"distanceMeters": 1.144218,
|
||||
"sourcePoiId": "5524",
|
||||
"sourcePoiName": "停车场楼梯01"
|
||||
},
|
||||
"5525": {
|
||||
"navPoiId": "connector_0044_L_2_停车场_楼梯02",
|
||||
"navPoiName": "停车场_楼梯02",
|
||||
"navFloorId": "L-2",
|
||||
"method": "name_floor_coordinate",
|
||||
"confidence": "high",
|
||||
"distanceMeters": 1.125434,
|
||||
"sourcePoiId": "5525",
|
||||
"sourcePoiName": "停车场楼梯02"
|
||||
},
|
||||
"5526": {
|
||||
"navPoiId": "connector_0045_L_2_停车场_楼梯03",
|
||||
"navPoiName": "停车场_楼梯03",
|
||||
"navFloorId": "L-2",
|
||||
"method": "name_floor_coordinate",
|
||||
"confidence": "high",
|
||||
"distanceMeters": 1.198595,
|
||||
"sourcePoiId": "5526",
|
||||
"sourcePoiName": "停车场楼梯03"
|
||||
},
|
||||
"5527": {
|
||||
"navPoiId": "connector_0046_L_2_停车场_楼梯27",
|
||||
"navPoiName": "停车场_楼梯27",
|
||||
"navFloorId": "L-2",
|
||||
"method": "name_floor_coordinate",
|
||||
"confidence": "high",
|
||||
"distanceMeters": 1.248401,
|
||||
"sourcePoiId": "5527",
|
||||
"sourcePoiName": "停车场楼梯27"
|
||||
},
|
||||
"5529": {
|
||||
"navPoiId": "connector_0021_L_2_A_扶梯",
|
||||
"navPoiName": "A_扶梯",
|
||||
@@ -7769,6 +7809,46 @@
|
||||
"sourcePoiId": "5529",
|
||||
"sourcePoiName": "L-2_A扶梯"
|
||||
},
|
||||
"5550": {
|
||||
"navPoiId": "connector_0088_L_1_停车场_楼梯01",
|
||||
"navPoiName": "停车场_楼梯01",
|
||||
"navFloorId": "L-1",
|
||||
"method": "name_floor_coordinate",
|
||||
"confidence": "high",
|
||||
"distanceMeters": 0.841848,
|
||||
"sourcePoiId": "5550",
|
||||
"sourcePoiName": "停车场楼梯01"
|
||||
},
|
||||
"5551": {
|
||||
"navPoiId": "connector_0089_L_1_停车场_楼梯02",
|
||||
"navPoiName": "停车场_楼梯02",
|
||||
"navFloorId": "L-1",
|
||||
"method": "name_floor_coordinate",
|
||||
"confidence": "high",
|
||||
"distanceMeters": 1.130357,
|
||||
"sourcePoiId": "5551",
|
||||
"sourcePoiName": "停车场楼梯02"
|
||||
},
|
||||
"5552": {
|
||||
"navPoiId": "connector_0090_L_1_停车场_楼梯03",
|
||||
"navPoiName": "停车场_楼梯03",
|
||||
"navFloorId": "L-1",
|
||||
"method": "name_floor_coordinate",
|
||||
"confidence": "high",
|
||||
"distanceMeters": 0.530654,
|
||||
"sourcePoiId": "5552",
|
||||
"sourcePoiName": "停车场楼梯03"
|
||||
},
|
||||
"5553": {
|
||||
"navPoiId": "connector_0091_L_1_停车场_楼梯04",
|
||||
"navPoiName": "停车场_楼梯04",
|
||||
"navFloorId": "L-1",
|
||||
"method": "name_floor_coordinate",
|
||||
"confidence": "high",
|
||||
"distanceMeters": 0.796205,
|
||||
"sourcePoiId": "5553",
|
||||
"sourcePoiName": "停车场楼梯04"
|
||||
},
|
||||
"5556": {
|
||||
"navPoiId": "connector_0067_L_1_A_扶梯",
|
||||
"navPoiName": "A_扶梯",
|
||||
@@ -7979,16 +8059,6 @@
|
||||
"sourcePoiId": "5628",
|
||||
"sourcePoiName": "女卫生间002"
|
||||
},
|
||||
"5629": {
|
||||
"navPoiId": "poi_0041_L2_卫生间",
|
||||
"navPoiName": "卫生间",
|
||||
"navFloorId": "L2",
|
||||
"method": "name_floor_coordinate",
|
||||
"confidence": "high",
|
||||
"distanceMeters": 4.483514,
|
||||
"sourcePoiId": "5629",
|
||||
"sourcePoiName": "卫生间"
|
||||
},
|
||||
"5630": {
|
||||
"navPoiId": "poi_0047_L2_无障碍卫生间001",
|
||||
"navPoiName": "无障碍卫生间001",
|
||||
@@ -8231,6 +8301,16 @@
|
||||
"sourcePoiId": "5522",
|
||||
"sourcePoiName": "女卫生间03"
|
||||
},
|
||||
"5554": {
|
||||
"navPoiId": "connector_0092_L_1_停车场_楼梯27",
|
||||
"navPoiName": "停车场_楼梯27",
|
||||
"navFloorId": "L-1",
|
||||
"method": "name_floor_coordinate_candidate",
|
||||
"confidence": "low",
|
||||
"distanceMeters": 16.274469,
|
||||
"sourcePoiId": "5554",
|
||||
"sourcePoiName": "停车场楼梯27"
|
||||
},
|
||||
"5595": {
|
||||
"navPoiId": "poi_0024_L1_无障碍卫生间",
|
||||
"navPoiName": "无障碍卫生间",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"schemaVersion": "sgs-guide-static/v1",
|
||||
"sourceTable": "SGS_POI",
|
||||
"rowCount": 2238,
|
||||
"rowCount": 2244,
|
||||
"rows": [
|
||||
{
|
||||
"id": "596",
|
||||
@@ -62543,7 +62543,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781621747364\",\"code\":\"RPOI_L1_088\",\"floorCode\":\"L1\",\"sourceFloorCode\":\"L1\",\"modelGroup\":\"L1\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"C\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":7,\"sourceNodeNames\":[\"L1_C_楼梯10\",\"L1_C_楼梯11\",\"L1_C_楼梯11.001\",\"L1_C_楼梯12\",\"L1_C_楼梯13\",\"L1_C_楼梯14\",\"L1_C_楼梯15\"],\"sourcePoiCodes\":[\"POI_L1_STAIRS_137\",\"POI_L1_STAIRS_138\",\"POI_L1_STAIRS_139\",\"POI_L1_STAIRS_140\",\"POI_L1_STAIRS_141\",\"POI_L1_STAIRS_142\",\"POI_L1_STAIRS_143\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"aggregated_from_multiple_model_nodes\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781621747364\",\"code\":\"RPOI_L1_088\",\"floorCode\":\"L1\",\"sourceFloorCode\":\"L1\",\"modelGroup\":\"L1\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"C\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":8,\"sourceNodeNames\":[\"L1_C_楼梯10\",\"L1_C_楼梯11\",\"L1_C_楼梯11.001\",\"L1_C_楼梯12\",\"L1_C_楼梯13\",\"L1_C_楼梯14\",\"L1_C_楼梯15\",\"L1_C_楼梯033\"],\"sourcePoiCodes\":[\"POI_L1_STAIRS_137\",\"POI_L1_STAIRS_138\",\"POI_L1_STAIRS_139\",\"POI_L1_STAIRS_140\",\"POI_L1_STAIRS_141\",\"POI_L1_STAIRS_142\",\"POI_L1_STAIRS_143\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"aggregated_from_multiple_model_nodes\",\"modelUpdateFix\":\"2026-06-24-L1-C033\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 87,
|
||||
@@ -62553,8 +62553,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-16T22:55:59.132440",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-16T23:06:12.102849",
|
||||
"updater": "codex-data-fix",
|
||||
"updateTime": "2026-06-24T19:49:03.797973",
|
||||
"deleted": true,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -68983,7 +68983,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781622457665\",\"code\":\"RPOI_L1_088\",\"floorCode\":\"L1\",\"sourceFloorCode\":\"L1\",\"modelGroup\":\"L1\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"C\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":7,\"sourceNodeNames\":[\"L1_C_楼梯10\",\"L1_C_楼梯11\",\"L1_C_楼梯11.001\",\"L1_C_楼梯12\",\"L1_C_楼梯13\",\"L1_C_楼梯14\",\"L1_C_楼梯15\"],\"sourcePoiCodes\":[\"POI_L1_STAIRS_137\",\"POI_L1_STAIRS_138\",\"POI_L1_STAIRS_139\",\"POI_L1_STAIRS_140\",\"POI_L1_STAIRS_141\",\"POI_L1_STAIRS_142\",\"POI_L1_STAIRS_143\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"aggregated_from_multiple_model_nodes\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781622457665\",\"code\":\"RPOI_L1_088\",\"floorCode\":\"L1\",\"sourceFloorCode\":\"L1\",\"modelGroup\":\"L1\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"C\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":8,\"sourceNodeNames\":[\"L1_C_楼梯10\",\"L1_C_楼梯11\",\"L1_C_楼梯11.001\",\"L1_C_楼梯12\",\"L1_C_楼梯13\",\"L1_C_楼梯14\",\"L1_C_楼梯15\",\"L1_C_楼梯033\"],\"sourcePoiCodes\":[\"POI_L1_STAIRS_137\",\"POI_L1_STAIRS_138\",\"POI_L1_STAIRS_139\",\"POI_L1_STAIRS_140\",\"POI_L1_STAIRS_141\",\"POI_L1_STAIRS_142\",\"POI_L1_STAIRS_143\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"aggregated_from_multiple_model_nodes\",\"modelUpdateFix\":\"2026-06-24-L1-C033\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 87,
|
||||
@@ -68993,8 +68993,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-16T23:07:48.946917",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-16T23:19:13.923371",
|
||||
"updater": "codex-data-fix",
|
||||
"updateTime": "2026-06-24T19:49:03.919981",
|
||||
"deleted": true,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -83449,7 +83449,7 @@
|
||||
"floorId": "2065808920714276866",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "L-2_停车场楼梯",
|
||||
"name": "停车场楼梯01",
|
||||
"nameEn": null,
|
||||
"type": "stairs",
|
||||
"exhibitCode": null,
|
||||
@@ -83463,7 +83463,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_LB2_010\",\"floorCode\":\"L-2\",\"sourceFloorCode\":\"L-2\",\"modelGroup\":\"L-2\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L-2_停车场_楼梯01\"],\"sourcePoiCodes\":[\"POI_LB2_STAIRS_010\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_LB2_010\",\"floorCode\":\"L-2\",\"sourceFloorCode\":\"L-2\",\"modelGroup\":\"L-2\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场楼梯01\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L-2_停车场_楼梯01\"],\"sourcePoiCodes\":[\"POI_LB2_STAIRS_010\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 9,
|
||||
@@ -83473,8 +83473,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:25:59.600693",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:25:59.600693",
|
||||
"updater": "codex-parking-stair-rename",
|
||||
"updateTime": "2026-06-28T14:03:01.126795",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -83489,7 +83489,7 @@
|
||||
"floorId": "2065808920714276866",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "L-2_停车场楼梯",
|
||||
"name": "停车场楼梯02",
|
||||
"nameEn": null,
|
||||
"type": "stairs",
|
||||
"exhibitCode": null,
|
||||
@@ -83503,7 +83503,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_LB2_011\",\"floorCode\":\"L-2\",\"sourceFloorCode\":\"L-2\",\"modelGroup\":\"L-2\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L-2_停车场_楼梯02\"],\"sourcePoiCodes\":[\"POI_LB2_STAIRS_011\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_LB2_011\",\"floorCode\":\"L-2\",\"sourceFloorCode\":\"L-2\",\"modelGroup\":\"L-2\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场楼梯02\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L-2_停车场_楼梯02\"],\"sourcePoiCodes\":[\"POI_LB2_STAIRS_011\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 10,
|
||||
@@ -83513,8 +83513,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:25:59.662044",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:25:59.662044",
|
||||
"updater": "codex-parking-stair-rename",
|
||||
"updateTime": "2026-06-28T14:03:01.235047",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -83529,7 +83529,7 @@
|
||||
"floorId": "2065808920714276866",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "L-2_停车场楼梯",
|
||||
"name": "停车场楼梯03",
|
||||
"nameEn": null,
|
||||
"type": "stairs",
|
||||
"exhibitCode": null,
|
||||
@@ -83543,7 +83543,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_LB2_012\",\"floorCode\":\"L-2\",\"sourceFloorCode\":\"L-2\",\"modelGroup\":\"L-2\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L-2_停车场_楼梯03\"],\"sourcePoiCodes\":[\"POI_LB2_STAIRS_012\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_LB2_012\",\"floorCode\":\"L-2\",\"sourceFloorCode\":\"L-2\",\"modelGroup\":\"L-2\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场楼梯03\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L-2_停车场_楼梯03\"],\"sourcePoiCodes\":[\"POI_LB2_STAIRS_012\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 11,
|
||||
@@ -83553,8 +83553,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:25:59.727990",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:25:59.727990",
|
||||
"updater": "codex-parking-stair-rename",
|
||||
"updateTime": "2026-06-28T14:03:01.301538",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -83569,7 +83569,7 @@
|
||||
"floorId": "2065808920714276866",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "L-2_停车场楼梯",
|
||||
"name": "停车场楼梯27",
|
||||
"nameEn": null,
|
||||
"type": "stairs",
|
||||
"exhibitCode": null,
|
||||
@@ -83583,7 +83583,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_LB2_013\",\"floorCode\":\"L-2\",\"sourceFloorCode\":\"L-2\",\"modelGroup\":\"L-2\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L-2_停车场_楼梯27\"],\"sourcePoiCodes\":[\"POI_LB2_STAIRS_013\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_LB2_013\",\"floorCode\":\"L-2\",\"sourceFloorCode\":\"L-2\",\"modelGroup\":\"L-2\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场楼梯27\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L-2_停车场_楼梯27\"],\"sourcePoiCodes\":[\"POI_LB2_STAIRS_013\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 12,
|
||||
@@ -83593,8 +83593,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:25:59.792337",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:25:59.792337",
|
||||
"updater": "codex-parking-stair-rename",
|
||||
"updateTime": "2026-06-28T14:03:01.359528",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -84489,7 +84489,7 @@
|
||||
"floorId": "2065808920466812930",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "L-1_停车场楼梯",
|
||||
"name": "停车场楼梯01",
|
||||
"nameEn": null,
|
||||
"type": "stairs",
|
||||
"exhibitCode": null,
|
||||
@@ -84503,7 +84503,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_LB1_036\",\"floorCode\":\"L-1\",\"sourceFloorCode\":\"L-1\",\"modelGroup\":\"L-1\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L-1_停车场_楼梯01\"],\"sourcePoiCodes\":[\"POI_LB1_STAIRS_056\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_LB1_036\",\"floorCode\":\"L-1\",\"sourceFloorCode\":\"L-1\",\"modelGroup\":\"L-1\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场楼梯01\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L-1_停车场_楼梯01\"],\"sourcePoiCodes\":[\"POI_LB1_STAIRS_056\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 35,
|
||||
@@ -84513,8 +84513,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:26:01.236787",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:26:01.236787",
|
||||
"updater": "codex-parking-stair-rename",
|
||||
"updateTime": "2026-06-28T14:03:01.423036",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -84529,7 +84529,7 @@
|
||||
"floorId": "2065808920466812930",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "L-1_停车场楼梯",
|
||||
"name": "停车场楼梯02",
|
||||
"nameEn": null,
|
||||
"type": "stairs",
|
||||
"exhibitCode": null,
|
||||
@@ -84543,7 +84543,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_LB1_037\",\"floorCode\":\"L-1\",\"sourceFloorCode\":\"L-1\",\"modelGroup\":\"L-1\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L-1_停车场_楼梯02\"],\"sourcePoiCodes\":[\"POI_LB1_STAIRS_057\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_LB1_037\",\"floorCode\":\"L-1\",\"sourceFloorCode\":\"L-1\",\"modelGroup\":\"L-1\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场楼梯02\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L-1_停车场_楼梯02\"],\"sourcePoiCodes\":[\"POI_LB1_STAIRS_057\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 36,
|
||||
@@ -84553,8 +84553,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:26:01.298944",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:26:01.298944",
|
||||
"updater": "codex-parking-stair-rename",
|
||||
"updateTime": "2026-06-28T14:03:01.491084",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -84569,7 +84569,7 @@
|
||||
"floorId": "2065808920466812930",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "L-1_停车场楼梯",
|
||||
"name": "停车场楼梯03",
|
||||
"nameEn": null,
|
||||
"type": "stairs",
|
||||
"exhibitCode": null,
|
||||
@@ -84583,7 +84583,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_LB1_038\",\"floorCode\":\"L-1\",\"sourceFloorCode\":\"L-1\",\"modelGroup\":\"L-1\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L-1_停车场_楼梯03\"],\"sourcePoiCodes\":[\"POI_LB1_STAIRS_058\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_LB1_038\",\"floorCode\":\"L-1\",\"sourceFloorCode\":\"L-1\",\"modelGroup\":\"L-1\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场楼梯03\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L-1_停车场_楼梯03\"],\"sourcePoiCodes\":[\"POI_LB1_STAIRS_058\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 37,
|
||||
@@ -84593,8 +84593,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:26:01.357618",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:26:01.357618",
|
||||
"updater": "codex-parking-stair-rename",
|
||||
"updateTime": "2026-06-28T14:03:01.558048",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -84609,7 +84609,7 @@
|
||||
"floorId": "2065808920466812930",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "L-1_停车场楼梯",
|
||||
"name": "停车场楼梯04",
|
||||
"nameEn": null,
|
||||
"type": "stairs",
|
||||
"exhibitCode": null,
|
||||
@@ -84623,7 +84623,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_LB1_039\",\"floorCode\":\"L-1\",\"sourceFloorCode\":\"L-1\",\"modelGroup\":\"L-1\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L-1_停车场_楼梯04\"],\"sourcePoiCodes\":[\"POI_LB1_STAIRS_059\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_LB1_039\",\"floorCode\":\"L-1\",\"sourceFloorCode\":\"L-1\",\"modelGroup\":\"L-1\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场楼梯04\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L-1_停车场_楼梯04\"],\"sourcePoiCodes\":[\"POI_LB1_STAIRS_059\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 38,
|
||||
@@ -84633,8 +84633,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:26:01.416453",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:26:01.416453",
|
||||
"updater": "codex-parking-stair-rename",
|
||||
"updateTime": "2026-06-28T14:03:01.619055",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -84649,7 +84649,7 @@
|
||||
"floorId": "2065808920466812930",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "L-1_停车场楼梯",
|
||||
"name": "停车场楼梯27",
|
||||
"nameEn": null,
|
||||
"type": "stairs",
|
||||
"exhibitCode": null,
|
||||
@@ -84663,7 +84663,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_LB1_040\",\"floorCode\":\"L-1\",\"sourceFloorCode\":\"L-1\",\"modelGroup\":\"L-1\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L-1_停车场_楼梯27\"],\"sourcePoiCodes\":[\"POI_LB1_STAIRS_060\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_LB1_040\",\"floorCode\":\"L-1\",\"sourceFloorCode\":\"L-1\",\"modelGroup\":\"L-1\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场楼梯27\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L-1_停车场_楼梯27\"],\"sourcePoiCodes\":[\"POI_LB1_STAIRS_060\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 39,
|
||||
@@ -84673,8 +84673,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:26:01.476972",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:26:01.476972",
|
||||
"updater": "codex-parking-stair-rename",
|
||||
"updateTime": "2026-06-28T14:03:01.683030",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -85929,7 +85929,7 @@
|
||||
"floorId": "2065808919904776194",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "EXTERIOR_室外楼梯",
|
||||
"name": "停车场楼梯01",
|
||||
"nameEn": null,
|
||||
"type": "stairs",
|
||||
"exhibitCode": null,
|
||||
@@ -85943,7 +85943,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_EXTERIOR_072\",\"floorCode\":\"EXTERIOR\",\"sourceFloorCode\":\"L1\",\"modelGroup\":\"EXTERIOR\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"室外\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L1_室外_楼梯01\"],\"sourcePoiCodes\":[\"POI_L1_STAIRS_113\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_EXTERIOR_072\",\"floorCode\":\"EXTERIOR\",\"sourceFloorCode\":\"L1\",\"modelGroup\":\"EXTERIOR\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场楼梯01\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L1_室外_楼梯01\"],\"sourcePoiCodes\":[\"POI_L1_STAIRS_113\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 71,
|
||||
@@ -85953,8 +85953,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:26:03.540058",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:26:03.540058",
|
||||
"updater": "codex-parking-stair-rename",
|
||||
"updateTime": "2026-06-28T14:03:01.741026",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -85969,7 +85969,7 @@
|
||||
"floorId": "2065808919904776194",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "EXTERIOR_室外楼梯",
|
||||
"name": "停车场楼梯02",
|
||||
"nameEn": null,
|
||||
"type": "stairs",
|
||||
"exhibitCode": null,
|
||||
@@ -85983,7 +85983,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_EXTERIOR_073\",\"floorCode\":\"EXTERIOR\",\"sourceFloorCode\":\"L1\",\"modelGroup\":\"EXTERIOR\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"室外\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L1_室外_楼梯02\"],\"sourcePoiCodes\":[\"POI_L1_STAIRS_114\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_EXTERIOR_073\",\"floorCode\":\"EXTERIOR\",\"sourceFloorCode\":\"L1\",\"modelGroup\":\"EXTERIOR\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场楼梯02\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L1_室外_楼梯02\"],\"sourcePoiCodes\":[\"POI_L1_STAIRS_114\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 72,
|
||||
@@ -85993,8 +85993,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:26:03.603255",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:26:03.603255",
|
||||
"updater": "codex-parking-stair-rename",
|
||||
"updateTime": "2026-06-28T14:03:01.804041",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -86009,7 +86009,7 @@
|
||||
"floorId": "2065808919904776194",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "EXTERIOR_室外楼梯",
|
||||
"name": "停车场楼梯03",
|
||||
"nameEn": null,
|
||||
"type": "stairs",
|
||||
"exhibitCode": null,
|
||||
@@ -86023,7 +86023,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_EXTERIOR_074\",\"floorCode\":\"EXTERIOR\",\"sourceFloorCode\":\"L1\",\"modelGroup\":\"EXTERIOR\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"室外\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L1_室外_楼梯03\"],\"sourcePoiCodes\":[\"POI_L1_STAIRS_115\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_EXTERIOR_074\",\"floorCode\":\"EXTERIOR\",\"sourceFloorCode\":\"L1\",\"modelGroup\":\"EXTERIOR\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场楼梯03\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L1_室外_楼梯03\"],\"sourcePoiCodes\":[\"POI_L1_STAIRS_115\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 73,
|
||||
@@ -86033,8 +86033,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:26:03.663405",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:26:03.663405",
|
||||
"updater": "codex-parking-stair-rename",
|
||||
"updateTime": "2026-06-28T14:03:01.895472",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -86049,7 +86049,7 @@
|
||||
"floorId": "2065808919904776194",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "EXTERIOR_室外楼梯",
|
||||
"name": "停车场楼梯04",
|
||||
"nameEn": null,
|
||||
"type": "stairs",
|
||||
"exhibitCode": null,
|
||||
@@ -86063,7 +86063,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_EXTERIOR_075\",\"floorCode\":\"EXTERIOR\",\"sourceFloorCode\":\"L1\",\"modelGroup\":\"EXTERIOR\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"室外\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L1_室外_楼梯04\"],\"sourcePoiCodes\":[\"POI_L1_STAIRS_116\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_EXTERIOR_075\",\"floorCode\":\"EXTERIOR\",\"sourceFloorCode\":\"L1\",\"modelGroup\":\"EXTERIOR\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场楼梯04\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L1_室外_楼梯04\"],\"sourcePoiCodes\":[\"POI_L1_STAIRS_116\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 74,
|
||||
@@ -86073,8 +86073,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:26:03.723734",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:26:03.723734",
|
||||
"updater": "codex-parking-stair-rename",
|
||||
"updateTime": "2026-06-28T14:03:01.966045",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -86089,7 +86089,7 @@
|
||||
"floorId": "2065808919904776194",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "EXTERIOR_室外楼梯",
|
||||
"name": "停车场楼梯27",
|
||||
"nameEn": null,
|
||||
"type": "stairs",
|
||||
"exhibitCode": null,
|
||||
@@ -86103,7 +86103,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_EXTERIOR_076\",\"floorCode\":\"EXTERIOR\",\"sourceFloorCode\":\"L1\",\"modelGroup\":\"EXTERIOR\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"室外\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L1_室外_楼梯27\"],\"sourcePoiCodes\":[\"POI_L1_STAIRS_117\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_EXTERIOR_076\",\"floorCode\":\"EXTERIOR\",\"sourceFloorCode\":\"L1\",\"modelGroup\":\"EXTERIOR\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"停车场楼梯27\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L1_室外_楼梯27\"],\"sourcePoiCodes\":[\"POI_L1_STAIRS_117\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 75,
|
||||
@@ -86113,8 +86113,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:26:03.789369",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:26:03.789369",
|
||||
"updater": "codex-parking-stair-rename",
|
||||
"updateTime": "2026-06-28T14:03:02.031516",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -86150,11 +86150,11 @@
|
||||
"isGuidePoint": false,
|
||||
"viewCount": 0,
|
||||
"guidePlayCount": 0,
|
||||
"status": 1,
|
||||
"status": 2,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:26:03.852621",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:26:03.852621",
|
||||
"updater": "codex-s12g",
|
||||
"updateTime": "2026-06-27T14:42:02.750652",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -86583,7 +86583,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_L1_088\",\"floorCode\":\"L1\",\"sourceFloorCode\":\"L1\",\"modelGroup\":\"L1\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"C\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":7,\"sourceNodeNames\":[\"L1_C_楼梯10\",\"L1_C_楼梯11\",\"L1_C_楼梯11.001\",\"L1_C_楼梯12\",\"L1_C_楼梯13\",\"L1_C_楼梯14\",\"L1_C_楼梯15\"],\"sourcePoiCodes\":[\"POI_L1_STAIRS_137\",\"POI_L1_STAIRS_138\",\"POI_L1_STAIRS_139\",\"POI_L1_STAIRS_140\",\"POI_L1_STAIRS_141\",\"POI_L1_STAIRS_142\",\"POI_L1_STAIRS_143\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"aggregated_from_multiple_model_nodes\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_L1_088\",\"floorCode\":\"L1\",\"sourceFloorCode\":\"L1\",\"modelGroup\":\"L1\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"C\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":8,\"sourceNodeNames\":[\"L1_C_楼梯10\",\"L1_C_楼梯11\",\"L1_C_楼梯11.001\",\"L1_C_楼梯12\",\"L1_C_楼梯13\",\"L1_C_楼梯14\",\"L1_C_楼梯15\",\"L1_C_楼梯033\"],\"sourcePoiCodes\":[\"POI_L1_STAIRS_137\",\"POI_L1_STAIRS_138\",\"POI_L1_STAIRS_139\",\"POI_L1_STAIRS_140\",\"POI_L1_STAIRS_141\",\"POI_L1_STAIRS_142\",\"POI_L1_STAIRS_143\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"aggregated_from_multiple_model_nodes\",\"modelUpdateFix\":\"2026-06-24-L1-C033\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 87,
|
||||
@@ -86593,8 +86593,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:26:04.531702",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:26:04.531702",
|
||||
"updater": "codex-data-fix",
|
||||
"updateTime": "2026-06-24T19:49:04.029956",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -87463,7 +87463,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_L1P5_110\",\"floorCode\":\"L1.5\",\"sourceFloorCode\":\"L1.5\",\"modelGroup\":\"L1.5\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"C\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":5,\"sourceNodeNames\":[\"L1.5_C_楼梯12\",\"L1.5_C_楼梯13\",\"L1.5_C_楼梯14\",\"L1.5_C_楼梯31\",\"L1.5_C_楼梯32\"],\"sourcePoiCodes\":[\"POI_L1P5_STAIRS_184\",\"POI_L1P5_STAIRS_185\",\"POI_L1P5_STAIRS_186\",\"POI_L1P5_STAIRS_187\",\"POI_L1P5_STAIRS_188\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"aggregated_from_multiple_model_nodes\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_L1P5_110\",\"floorCode\":\"L1.5\",\"sourceFloorCode\":\"L1.5\",\"modelGroup\":\"L1.5\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"C\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":6,\"sourceNodeNames\":[\"L1.5_C_楼梯12\",\"L1.5_C_楼梯13\",\"L1.5_C_楼梯14\",\"L1.5_C_楼梯31\",\"L1.5_C_楼梯32\",\"L1.5_C_楼梯11\"],\"sourcePoiCodes\":[\"POI_L1P5_STAIRS_184\",\"POI_L1P5_STAIRS_185\",\"POI_L1P5_STAIRS_186\",\"POI_L1P5_STAIRS_187\",\"POI_L1P5_STAIRS_188\",\"POI_L1P5_STAIRS_189\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"aggregated_from_multiple_model_nodes\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 109,
|
||||
@@ -87473,8 +87473,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:26:05.959649",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:26:05.959649",
|
||||
"updater": "codex-s12g",
|
||||
"updateTime": "2026-06-27T14:42:06.100350",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -87649,7 +87649,7 @@
|
||||
"floorId": "2065808921578303490",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "卫生间",
|
||||
"name": "卫生间01",
|
||||
"nameEn": null,
|
||||
"type": "toilet",
|
||||
"exhibitCode": null,
|
||||
@@ -87663,7 +87663,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_L2_115\",\"floorCode\":\"L2\",\"sourceFloorCode\":\"L2\",\"modelGroup\":\"L2\",\"poiTypeLabel\":\"卫生间\",\"poiCategory\":\"sanitation\",\"poiCategoryLabel\":\"卫生设施\",\"connectorGroup\":\"卫生间\",\"aggregationPolicy\":\"single\",\"sourceCount\":1,\"sourceNodeNames\":[\"L2_卫生间\"],\"sourcePoiCodes\":[\"POI_L2_TOILET_193\"],\"routeCandidate\":false,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"extParams": "{\"source\":\"model_update_review\",\"batchCode\":\"V20260627093736_e73e3\",\"code\":\"POI_L2_卫生间\",\"floorCode\":\"L2\",\"sourceFloorCode\":\"L2\",\"modelGroup\":\"L2\",\"poiTypeLabel\":\"卫生间\",\"poiCategory\":\"sanitation\",\"poiCategoryLabel\":\"卫生设施\",\"connectorGroup\":\"卫生间01\",\"aggregationPolicy\":\"single\",\"sourceCount\":1,\"sourceNodeNames\":[\"L2_卫生间\"],\"sourcePoiCodes\":[\"POI_L2_卫生间\"],\"routeCandidate\":false,\"reviewRequired\":true,\"reviewReason\":\"sprint_12g_user_confirmed\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 114,
|
||||
@@ -87673,8 +87673,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:26:06.275289",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:26:06.275289",
|
||||
"updater": "codex-s12g-rename",
|
||||
"updateTime": "2026-06-27T14:47:09.801927",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -87903,7 +87903,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_L2_121\",\"floorCode\":\"L2\",\"sourceFloorCode\":\"L2\",\"modelGroup\":\"L2\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"B\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L2_B_楼梯09\"],\"sourcePoiCodes\":[\"POI_L2_STAIRS_207\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_L2_121\",\"floorCode\":\"L2\",\"sourceFloorCode\":\"L2\",\"modelGroup\":\"L2\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"B\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":2,\"sourceNodeNames\":[\"L2_B_楼梯09\",\"L2_B_楼梯10\"],\"sourcePoiCodes\":[\"POI_L2_STAIRS_207\",\"POI_L2_STAIRS_B10\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 120,
|
||||
@@ -87913,8 +87913,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:26:06.645688",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:26:06.645688",
|
||||
"updater": "codex-s12g",
|
||||
"updateTime": "2026-06-27T14:42:06.854098",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -87943,7 +87943,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_L2_122\",\"floorCode\":\"L2\",\"sourceFloorCode\":\"L2\",\"modelGroup\":\"L2\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"C\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":5,\"sourceNodeNames\":[\"L2_C_楼梯10\",\"L2_C_楼梯11\",\"L2_C_楼梯12\",\"L2_C_楼梯13\",\"L2_C_楼梯33\"],\"sourcePoiCodes\":[\"POI_L2_STAIRS_208\",\"POI_L2_STAIRS_209\",\"POI_L2_STAIRS_210\",\"POI_L2_STAIRS_211\",\"POI_L2_STAIRS_212\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"aggregated_from_multiple_model_nodes\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_L2_122\",\"floorCode\":\"L2\",\"sourceFloorCode\":\"L2\",\"modelGroup\":\"L2\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"C\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":4,\"sourceNodeNames\":[\"L2_C_楼梯11\",\"L2_C_楼梯12\",\"L2_C_楼梯13\",\"L2_C_楼梯33\"],\"sourcePoiCodes\":[\"POI_L2_STAIRS_209\",\"POI_L2_STAIRS_210\",\"POI_L2_STAIRS_211\",\"POI_L2_STAIRS_212\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"aggregated_from_multiple_model_nodes\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 121,
|
||||
@@ -87953,8 +87953,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:26:06.715412",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:26:06.715412",
|
||||
"updater": "codex-s12g",
|
||||
"updateTime": "2026-06-27T14:42:06.967086",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -89103,7 +89103,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_L4_151\",\"floorCode\":\"L4\",\"sourceFloorCode\":\"L4\",\"modelGroup\":\"L4\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"B\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L4_B_楼梯09\"],\"sourcePoiCodes\":[\"POI_L4_STAIRS_261\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_L4_151\",\"floorCode\":\"L4\",\"sourceFloorCode\":\"L4\",\"modelGroup\":\"L4\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"B\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":2,\"sourceNodeNames\":[\"L4_B_楼梯09\",\"L4_B_楼梯10\"],\"sourcePoiCodes\":[\"POI_L4_STAIRS_261\",\"POI_L4_STAIRS_B10\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"single_model_node_candidate\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 150,
|
||||
@@ -89113,8 +89113,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:26:08.619166",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:26:08.619166",
|
||||
"updater": "codex-s12g",
|
||||
"updateTime": "2026-06-27T14:42:07.903095",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -89143,7 +89143,7 @@
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_L4_152\",\"floorCode\":\"L4\",\"sourceFloorCode\":\"L4\",\"modelGroup\":\"L4\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"C\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":4,\"sourceNodeNames\":[\"L4_C_楼梯10\",\"L4_C_楼梯12\",\"L4_C_楼梯13\",\"L4_C_楼梯33\"],\"sourcePoiCodes\":[\"POI_L4_STAIRS_262\",\"POI_L4_STAIRS_263\",\"POI_L4_STAIRS_264\",\"POI_L4_STAIRS_265\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"aggregated_from_multiple_model_nodes\"}",
|
||||
"extParams": "{\"source\":\"acceptance_review_poi\",\"batchCode\":\"BATCH_1781630718479\",\"code\":\"RPOI_L4_152\",\"floorCode\":\"L4\",\"sourceFloorCode\":\"L4\",\"modelGroup\":\"L4\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"C\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":3,\"sourceNodeNames\":[\"L4_C_楼梯12\",\"L4_C_楼梯13\",\"L4_C_楼梯33\"],\"sourcePoiCodes\":[\"POI_L4_STAIRS_263\",\"POI_L4_STAIRS_264\",\"POI_L4_STAIRS_265\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"aggregated_from_multiple_model_nodes\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 151,
|
||||
@@ -89153,8 +89153,8 @@
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-17T01:26:08.682540",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-17T01:26:08.682540",
|
||||
"updater": "codex-s12g",
|
||||
"updateTime": "2026-06-27T14:42:08.012087",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
@@ -89522,6 +89522,246 @@
|
||||
"z": 27.164301,
|
||||
"spatialAreaId": null,
|
||||
"spatialAreaName": null
|
||||
},
|
||||
{
|
||||
"id": "5676",
|
||||
"mapId": "1",
|
||||
"floorId": "2065808921272119298",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "L1_J楼梯",
|
||||
"nameEn": null,
|
||||
"type": "stairs",
|
||||
"exhibitCode": null,
|
||||
"x": -10.880158,
|
||||
"y": 0.510898,
|
||||
"longitude": null,
|
||||
"latitude": null,
|
||||
"boundaryGeojson": null,
|
||||
"address": null,
|
||||
"iconUrl": null,
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"model_update_manual_fix\",\"batchCode\":\"MODEL_FIX_20260624\",\"floorCode\":\"L1\",\"sourceFloorCode\":\"L1\",\"modelGroup\":\"L1\",\"poiTypeLabel\":\"楼梯\",\"poiCategory\":\"vertical_transport\",\"poiCategoryLabel\":\"垂直交通\",\"connectorGroup\":\"J\",\"aggregationPolicy\":\"by_floor_type_shaft_zone\",\"sourceCount\":1,\"sourceNodeNames\":[\"L1_J_楼梯029\"],\"routeCandidate\":true,\"reviewRequired\":false,\"reviewReason\":\"confirmed_new_vertical_connector\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 0,
|
||||
"isGuidePoint": false,
|
||||
"viewCount": 0,
|
||||
"guidePlayCount": 0,
|
||||
"status": 1,
|
||||
"creator": "codex-data-fix",
|
||||
"createTime": "2026-06-24T19:49:04.296000",
|
||||
"updater": "codex-data-fix",
|
||||
"updateTime": "2026-06-24T19:49:04.296000",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
"images": null,
|
||||
"z": 0.064167,
|
||||
"spatialAreaId": null,
|
||||
"spatialAreaName": null
|
||||
},
|
||||
{
|
||||
"id": "5677",
|
||||
"mapId": "1",
|
||||
"floorId": "2065808921272119298",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "售票处",
|
||||
"nameEn": null,
|
||||
"type": "ticket_office",
|
||||
"exhibitCode": null,
|
||||
"x": 23.253601,
|
||||
"y": 23.566392,
|
||||
"longitude": null,
|
||||
"latitude": null,
|
||||
"boundaryGeojson": null,
|
||||
"address": null,
|
||||
"iconUrl": null,
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"model_update_review\",\"batchCode\":\"V20260627093736_e73e3\",\"code\":\"POI_L1_售票处\",\"floorCode\":\"L1\",\"sourceFloorCode\":\"L1\",\"modelGroup\":\"L1\",\"poiTypeLabel\":\"售票处\",\"poiCategory\":\"visitor_service\",\"poiCategoryLabel\":\"观众服务\",\"connectorGroup\":\"售票处\",\"aggregationPolicy\":\"single\",\"sourceCount\":1,\"sourceNodeNames\":[\"L1_售票处\"],\"sourcePoiCodes\":[\"POI_L1_售票处\"],\"routeCandidate\":false,\"reviewRequired\":true,\"reviewReason\":\"sprint_12g_user_confirmed\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 112,
|
||||
"isGuidePoint": false,
|
||||
"viewCount": 0,
|
||||
"guidePlayCount": 0,
|
||||
"status": 1,
|
||||
"creator": "codex-s12g",
|
||||
"createTime": "2026-06-27T14:42:03.431967",
|
||||
"updater": "codex-s12g",
|
||||
"updateTime": "2026-06-27T14:42:03.431969",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
"images": null,
|
||||
"z": 0.241455,
|
||||
"spatialAreaId": null,
|
||||
"spatialAreaName": null
|
||||
},
|
||||
{
|
||||
"id": "5678",
|
||||
"mapId": "1",
|
||||
"floorId": "2065808921578303490",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "L2_闸机",
|
||||
"nameEn": null,
|
||||
"type": "entrance_exit",
|
||||
"exhibitCode": null,
|
||||
"x": -79.206632,
|
||||
"y": -38.1329,
|
||||
"longitude": null,
|
||||
"latitude": null,
|
||||
"boundaryGeojson": null,
|
||||
"address": null,
|
||||
"iconUrl": null,
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"model_update_review\",\"batchCode\":\"V20260627093736_e73e3\",\"code\":\"POI_L2_闸机\",\"floorCode\":\"L2\",\"sourceFloorCode\":\"L2\",\"modelGroup\":\"L2\",\"poiTypeLabel\":\"出入口\",\"poiCategory\":\"access\",\"poiCategoryLabel\":\"出入口\",\"connectorGroup\":\"闸机\",\"aggregationPolicy\":\"single\",\"sourceCount\":1,\"sourceNodeNames\":[\"L2_闸机\"],\"sourcePoiCodes\":[\"POI_L2_闸机\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"sprint_12g_user_confirmed\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 142,
|
||||
"isGuidePoint": false,
|
||||
"viewCount": 0,
|
||||
"guidePlayCount": 0,
|
||||
"status": 1,
|
||||
"creator": "codex-s12g",
|
||||
"createTime": "2026-06-27T14:42:04.234471",
|
||||
"updater": "codex-s12g",
|
||||
"updateTime": "2026-06-27T14:42:04.234474",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
"images": null,
|
||||
"z": 10.583146,
|
||||
"spatialAreaId": null,
|
||||
"spatialAreaName": null
|
||||
},
|
||||
{
|
||||
"id": "5679",
|
||||
"mapId": "1",
|
||||
"floorId": "2065808920714276866",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "L-2_闸机",
|
||||
"nameEn": null,
|
||||
"type": "entrance_exit",
|
||||
"exhibitCode": null,
|
||||
"x": 18.389145,
|
||||
"y": 10.345641,
|
||||
"longitude": null,
|
||||
"latitude": null,
|
||||
"boundaryGeojson": null,
|
||||
"address": null,
|
||||
"iconUrl": null,
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"model_update_review\",\"batchCode\":\"V20260627093736_e73e3\",\"code\":\"POI_LB2_闸机\",\"floorCode\":\"L-2\",\"sourceFloorCode\":\"L-2\",\"modelGroup\":\"L-2\",\"poiTypeLabel\":\"出入口\",\"poiCategory\":\"access\",\"poiCategoryLabel\":\"出入口\",\"connectorGroup\":\"闸机\",\"aggregationPolicy\":\"single\",\"sourceCount\":1,\"sourceNodeNames\":[\"L-2_闸机\"],\"sourcePoiCodes\":[\"POI_LB2_闸机\"],\"routeCandidate\":true,\"reviewRequired\":true,\"reviewReason\":\"sprint_12g_user_confirmed\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 44,
|
||||
"isGuidePoint": false,
|
||||
"viewCount": 0,
|
||||
"guidePlayCount": 0,
|
||||
"status": 1,
|
||||
"creator": "codex-s12g",
|
||||
"createTime": "2026-06-27T14:42:04.927965",
|
||||
"updater": "codex-s12g",
|
||||
"updateTime": "2026-06-27T14:42:04.927968",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
"images": null,
|
||||
"z": -13.751693,
|
||||
"spatialAreaId": null,
|
||||
"spatialAreaName": null
|
||||
},
|
||||
{
|
||||
"id": "5680",
|
||||
"mapId": "1",
|
||||
"floorId": "2065808921578303490",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "卫生间02",
|
||||
"nameEn": null,
|
||||
"type": "toilet",
|
||||
"exhibitCode": null,
|
||||
"x": 105.095766,
|
||||
"y": 39.954363,
|
||||
"longitude": null,
|
||||
"latitude": null,
|
||||
"boundaryGeojson": null,
|
||||
"address": null,
|
||||
"iconUrl": null,
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": "{\"source\":\"model_update_review\",\"batchCode\":\"V20260627093736_e73e3\",\"code\":\"POI_L2_卫生间02\",\"floorCode\":\"L2\",\"sourceFloorCode\":\"L2\",\"modelGroup\":\"L2\",\"poiTypeLabel\":\"卫生间\",\"poiCategory\":\"sanitation\",\"poiCategoryLabel\":\"卫生设施\",\"connectorGroup\":\"卫生间02\",\"aggregationPolicy\":\"single\",\"sourceCount\":1,\"sourceNodeNames\":[\"L2_卫生间02\"],\"sourcePoiCodes\":[\"POI_L2_卫生间02\"],\"routeCandidate\":false,\"reviewRequired\":true,\"reviewReason\":\"sprint_12g_user_confirmed\"}",
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 152,
|
||||
"isGuidePoint": false,
|
||||
"viewCount": 0,
|
||||
"guidePlayCount": 0,
|
||||
"status": 1,
|
||||
"creator": "codex-s12g",
|
||||
"createTime": "2026-06-27T14:42:05.760570",
|
||||
"updater": "codex-s12g-rename",
|
||||
"updateTime": "2026-06-27T14:47:10.063634",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
"images": null,
|
||||
"z": 10.273865,
|
||||
"spatialAreaId": null,
|
||||
"spatialAreaName": null
|
||||
},
|
||||
{
|
||||
"id": "5681",
|
||||
"mapId": "1",
|
||||
"floorId": "2065808921272119298",
|
||||
"clsExhibitionId": null,
|
||||
"clsAssetIds": null,
|
||||
"name": "测试",
|
||||
"nameEn": null,
|
||||
"type": "shop",
|
||||
"exhibitCode": null,
|
||||
"x": -57.026,
|
||||
"y": 10.446,
|
||||
"longitude": null,
|
||||
"latitude": null,
|
||||
"boundaryGeojson": null,
|
||||
"address": null,
|
||||
"iconUrl": null,
|
||||
"coverImageUrl": null,
|
||||
"description": null,
|
||||
"descriptionEn": null,
|
||||
"extParams": null,
|
||||
"phone": null,
|
||||
"businessHours": null,
|
||||
"sortOrder": 0,
|
||||
"isGuidePoint": false,
|
||||
"viewCount": 0,
|
||||
"guidePlayCount": 0,
|
||||
"status": 1,
|
||||
"creator": "1",
|
||||
"createTime": "2026-06-30T18:12:42.903760",
|
||||
"updater": "1",
|
||||
"updateTime": "2026-06-30T18:12:42.903760",
|
||||
"deleted": false,
|
||||
"tenantId": "1",
|
||||
"externalUrl": null,
|
||||
"images": null,
|
||||
"z": 3.263,
|
||||
"spatialAreaId": null,
|
||||
"spatialAreaName": null
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user