Files
wk 41765cdf44 feat: 新增智电改造线路台账功能(ICC拉取同步)
- 数据库:新增迁移脚本20261011_icc_line_ledger.sql(electric_line/line_room/icc_sync_log三表、菜单61、role_menu(1,61)、定时任务icc_line_sync),同步db_seed.sql
- 后端:新增ElectricLine/IccSyncLog实体、查询DTO、线路台账服务与ICC拉取同步服务、/api/electric-lines控制器,接入RBAC(device:list)与定时任务
- 前端:新增智电改造线路台账页面及路由,API封装electricLineApi
- ICC同步采用本系统主动拉取模式,失败仅记日志不抛错,接口统一code/message/data格式兼容APP
2026-10-12 15:57:02 +08:00

2.3 KiB
Raw Permalink Blame History

Tasks

  • Task 1: 数据库层:新建 migration 建 electric_line(按 db_design.html:575-589 字段)、line_room、icc_sync_log(若不存在),并把建表语句同步进 db_seed.sql;幂等(IF NOT EXISTS / 增量)
    • SubTask 1.1: 核对生产库是否已有 electric_line/line_room/icc_sync_log,避免重复
    • SubTask 1.2: 写 migration(migrations/20261011_icc_line_ledger.sql)并执行到远程生产库
  • Task 2: 后端实体+DTO:新增 ElectricLine entity(timestamps:false,仅 created_at)、IccSyncLog entity;electric_line.dto.ts 定义查询/同步入参(line_code 必填、字段校验、长度限制)
  • Task 3: 后端 Service:
    • SubTask 3.1: ElectricLineService.list(page, filter)(Op.like/Op.in 参数绑定,非 ADMIN 限定 customer_id)
    • SubTask 3.2: IccLineSyncService.syncFromIcc():读 .env 的 ICC_BASE_URL/ICC_TOKEN 占位配置,请求 ICC 线路列表(路径与字段映射集中在 icc_line_mapper),按 line_code 批量 upsert + 写 icc_sync_log + 失败捕获不抛业务错误
  • Task 4: 后端 Controller + RBAC:
    • SubTask 4.1: electric_line.controller.ts:GET /api/electric-lines(列表/详情)、POST /api/electric-lines/sync(调 IccLineSyncService)
    • SubTask 4.2: rbac.middleware.ts 追加 /api/electric-lines → device:list
    • SubTask 4.3: .env 增加 ICC_BASE_URL、ICC_TOKEN(占位);定时任务注册 icc_line_sync.task(@midwayjs/cron,默认每 10 分钟)
  • Task 5: 前端 API:client/src/api/device.ts(或新 line.ts)新增 electricLineApi.list/get/sync
  • Task 6: 前端页面:views/device/line/index.vue(搜索+同步按钮+表格+分页+状态 tag),路由 /device/line(permission device:list),菜单 id=61 挂设备监控(4) + role_menu(1,61),同步 db_seed.sql
  • Task 7: 验证:
    • SubTask 7.1: 后端 tsc --noEmit、前端 vue-tsc -b 类型检查
    • SubTask 7.2: 启动后端/前端,接口实测(无 token 401、有权限 200、无权限 403、sync 接口鉴权、ICC 拉取失败不报错)
    • SubTask 7.3: 浏览器验证菜单出现、页面渲染、筛选/分页/同步按钮可用

Task Dependencies

  • Task 2/5 依赖 Task 1(表存在)
  • Task 3 依赖 Task 2
  • Task 4 依赖 Task 3
  • Task 6 依赖 Task 5
  • Task 7 依赖全部