t32-view-live-diagnosis.mjs 1.5 KB

1234567891011121314151617181920
  1. import { writeFile } from 'node:fs/promises'
  2. import assert from 'node:assert/strict'
  3. import { toPipeNetwork } from '../../../src/modules/cockpit/domain/pipeNetwork.js'
  4. import { planPipeModels } from '../../../src/modules/cockpit/domain/pipeModels.js'
  5. const response=await fetch('http://192.168.110.96:8301/api/cockpit/v1/infrastructure/geometry')
  6. const payload=await response.json();assert.equal(response.status,200);assert.equal(payload.code,200)
  7. const network=toPipeNetwork(payload.data)
  8. const groups=new Map()
  9. for(const pipe of network.pipes){
  10. const group=pipe.name.includes('城南')?'名称含城南':pipe.name.includes('黔中')?'名称含黔中':pipe.name.includes('太常')?'名称含太常':'其它名称'
  11. if(!groups.has(group))groups.set(group,[])
  12. groups.get(group).push(pipe)
  13. }
  14. const result={at:new Date().toISOString(),note:'名称分组用于复现,不伪造后端district字段;不能据前缀推断正式片区。',groups:[]}
  15. for(const [name,pipes]of groups){
  16. const plan=planPipeModels({pipes,components:[]})
  17. 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}))})
  18. }
  19. await writeFile(new URL('./artifacts/t32/view-mode-live-diagnosis.json',import.meta.url),JSON.stringify(result,null,2)+'\n')
  20. console.log(JSON.stringify(result,null,2))