import { writeFile } from 'node:fs/promises' import assert from 'node:assert/strict' import { toPipeNetwork } from '../../../src/modules/cockpit/domain/pipeNetwork.js' import { planPipeModels } from '../../../src/modules/cockpit/domain/pipeModels.js' const response=await fetch('http://192.168.110.96:8301/api/cockpit/v1/infrastructure/geometry') const payload=await response.json();assert.equal(response.status,200);assert.equal(payload.code,200) const network=toPipeNetwork(payload.data) const groups=new Map() for(const pipe of network.pipes){ const group=pipe.name.includes('城南')?'名称含城南':pipe.name.includes('黔中')?'名称含黔中':pipe.name.includes('太常')?'名称含太常':'其它名称' if(!groups.has(group))groups.set(group,[]) groups.get(group).push(pipe) } const result={at:new Date().toISOString(),note:'名称分组用于复现,不伪造后端district字段;不能据前缀推断正式片区。',groups:[]} for(const [name,pipes]of groups){ const plan=planPipeModels({pipes,components:[]}) result.groups.push({name,count:pipes.length,diameterSummary:plan.diameterSummary,modeledBusinessPipes:new Set(plan.instances.filter(i=>i.kind==='spline').map(i=>i.id)).size,examples:pipes.filter(p=>!Number.isFinite(p.diameter)||p.diameter<=0).slice(0,3).map(p=>({code:p.code,name:p.name,diameter:p.diameter,remark:p.remark}))}) } await writeFile(new URL('./artifacts/t32/view-mode-live-diagnosis.json',import.meta.url),JSON.stringify(result,null,2)+'\n') console.log(JSON.stringify(result,null,2))