Files
smart_grid_iot/.trae/specs/add-icc-line-sync/tasks.md
T
wk 160ad85051 feat(line): 智电改造线路台账接入 ICC 消防探测器真实同步
- 重建 electric_line 表结构(迁移20261024_icc_line_rebuild.sql并同步db_init/db_seed):删building_id/floor_no/location/icc_device_code占位字段,equip_id改可空,新增imei/gateway_id/type_code/type_name/fire_system_code/fire_system_name/part_unit_loop_code/channel_no/channel_sn/produce_date,gateway_id外键→electric_gateway
- 同步服务IccLineSyncService复用OAuth2真实鉴权分页拉取探测器(POST /detector/subsystem/page,pageSize=50短页停止),按line_code(detectorCode)幂等upsert写icc_sync_log;customer_id由orgCode→customer.icc_code解析、gateway_id由parentCode→electric_gateway.device_code匹配、equip_id同步不填充
- 列表接口返回gateway/type/imei等新字段,keyword检索含imei;前端台账页更新为新列(IMEI/所属网关/探测器类型/回路通道/消防系统/生产日期),保留手动同步按钮与筛选
- 更新系统设计文档electric_line表定义与spec(add-icc-line-sync)
2026-10-24 13:50:32 +08:00

3.4 KiB
Raw Blame History

Tasks

  • Task 1: 数据库迁移:重建 electric_line 结构(删 building_id/floor_no/location/icc_device_code;equip_id 改可空;新增 imei/gateway_id/type_code/type_name/fire_system_code/fire_system_name/part_unit_loop_code/channel_no/channel_sn/produce_date),迁移脚本 database/migrations/20261024_icc_line_rebuild.sql,同步更新 database/db_seed.sql(fk_line_gateway 幂等补充)与 database/db_init.sql(基线建表);gateway_id 建 REFERENCES electric_gateway(id) 与索引
    • SubTask 1.1: 核对生产库 electric_line 现状(旧结构迁移而来,无占位数据阻碍),确认 ALTER 方案幂等
    • SubTask 1.2: 执行迁移到远程生产库并验证字段/索引/外键(columns 18 个、idx_line_gateway/imei、fk_line_gateway 均就绪)
    • SubTask 1.3: 同步 系统设计/表结构新增及变更.md(补充 electric_line 新表结构定义)
  • Task 2: 后端实体:按新字段重写 server/src/entity/electric_line.entity.ts(gatewayId FK→ElectricGateway,删除 building/floor/location/iccDeviceCode)
  • Task 3: 映射层:重写 server/src/task/icc_line_mapper.ts
    • SubTask 3.1: 定义 ICC_LINE_ENDPOINT = /evo-apigw/evo-fdbu/{version}/detector/subsystem/page 与 DetectorVO 字段映射(lineCode=detectorCode、lineName=detectorName、imei、typeCode/typeName、fireSystemCode/Name、partUnitLoopCode、channelNo、channelSn、produceDate、status 归一 01→1/02→0、orgCode、parentCode 作为匹配键透出)
    • SubTask 3.2: parseLinePage(payload) 解析 PageVO{nextPage,totalCount,pageData}(兼容数组形态)
  • Task 4: 同步服务:重写 server/src/service/icc_line_sync.service.ts,复用 getIccAccessToken/iccFetch,POST 分页 pageSize=50 短页停止全量拉取;预取 orgCode→customer.id(customer.icc_code)与 parentCode→gateway.id(electric_gateway.device_code)映射避免 N+1;按 line_code 幂等 upsert(equip_id 不填);写 icc_sync_log(sync_type=electric_line);拉取失败仅记日志不抛
    • SubTask 4.1: 定时任务 icc_line_sync.task.ts(jobKey/cron 不变)与 job_registry/JobRuntime(job_scheduler.service.ts syncIccLines)链路可用
    • SubTask 4.2: 控制器 POST /api/electric-lines/sync 复用返回结构(pulled/inserted/updated/skipped/synced)
  • Task 5: 列表服务:server/src/service/electric_line.service.ts 更新 decorate(删除 building 反查,新增 gateway/type/imei 展示字段);keyword 检索范围补充 imei
  • Task 6: 前端:client/src/api/device.ts 更新 ElectricLine 类型(新字段);client/src/views/device/line/index.vue 删除建筑/楼层/位置列,新增 IMEI/探测器类型/回路/通道/消防系统/生产日期/所属网关列,筛选/分页/同步按钮保留
  • Task 7: 验证:
    • SubTask 7.1: 后端 tsc --noEmit、前端 vue-tsc -b 均 0 错误
    • SubTask 7.2: 真实拉取 ICC 探测器(admin token,拉取 4 条插入 4 条;重跑幂等 updated=4;icc_sync_log 3 条 status=1;列表接口返回新字段)
    • SubTask 7.3: 浏览器 admin 登录验证 /device/line 页面新列渲染与手动同步按钮(11 列齐全、同步提示「拉取 4 条,新增 0,更新 4」)

Task Dependencies

  • Task 2/3/6 依赖 Task 1(表结构先就绪)
  • Task 4 依赖 Task 2/3
  • Task 5 依赖 Task 2
  • Task 7 依赖全部