Files
fquiz/memory/2026-04-26.md
T
2026-04-26 16:13:09 +08:00

31 KiB
Raw Blame History

Work Log - 去除后台左侧菜单标题与底部角色状态文案(2026-04-26)

  • 背景:

    • 用户要求去掉左侧导航中的“系统菜单”文案,以及底部“当前角色:admin”“账号状态:active”两行。
  • 本次改动(最小闭环):

    • web/src/app/admin/layout.tsx
      • 删除桌面端侧栏顶部文案“系统菜单”。
      • 删除桌面端侧栏底部角色/状态信息块。
      • 移动端左侧抽屉标题改为 null,不再显示“系统菜单”。
      • 菜单开关按钮 aria-label 同步调整为“打开菜单/展开菜单/收起菜单”。
  • 验证:

    • rg -n "系统菜单|当前角色:|账号状态:" web/src/app/admin/layout.tsx -S -> 无匹配。
    • npm --workspace web exec tsc --noEmit --pretty false -> 通过。
  • 风险与影响:

    • 仅影响后台左侧导航展示文案,不涉及菜单权限、路由与接口逻辑。

Work Log - 打包镜像并发布更新(2026-04-26)

  • 背景:

    • 用户要求执行“打包镜像并发布更新”。
  • 本次执行:

    • docker compose build
    • docker compose up -d
  • 验证:

    • docker compose psapi/web/celery/db/redis/minio 均为 Upapi/db/redis healthy。
    • docker compose logs --tail=80 apiUvicorn 启动完成,GET /health 返回 200。
    • docker compose logs --tail=80 webNext.js Ready。
    • curl -fsS http://127.0.0.1:8000/health:返回 {"status":"ok","service":"fquiz-api","version":"0.1.0"}
    • curl -I -fsS http://127.0.0.1:3000/:返回 HTTP/1.1 200 OK
  • 风险与影响:

    • 本次为镜像重建与容器滚动重启,存在短时服务切换窗口;未执行数据库结构变更。

Work Log - 下线收件箱、提示词管理、代码评审与 Git管理(2026-04-26

  • 背景:

    • 用户要求删除“收件箱、提示词管理、代码评审、Git管理”功能。
  • 本次改动:

    • 前端:
      • 删除后台页面入口:
        • web/src/app/admin/inbox/page.tsx
        • web/src/app/admin/prompt/page.tsx
        • web/src/app/admin/system-message/page.tsx
        • web/src/app/admin/code-review/page.tsx
        • web/src/app/admin/git-desktop/page.tsx
      • web/src/app/admin/page.tsx 删除对应后台首页卡片。
      • web/src/app/admin/menus/page.tsx 删除对应受保护菜单编码。
      • web/src/types/auth.ts 删除系统消息/提示词管理相关类型。
    • 后端:
      • 删除提示词管理 API、schema、service、model
        • api/app/api/v1/system_messages.py
        • api/app/schemas/system_message.py
        • api/app/services/system_message_service.py
        • api/app/models/system_message.py
      • api/app/api/router.py 取消 /api/v1/admin/system-messages* 路由挂载。
      • api/app/core/database.pyapi/app/models/__init__.py 取消 system_message 模型导入。
      • api/app/services/seed_service.py 删除默认权限、默认菜单和 admin 菜单绑定。
      • api/app/services/admin_service.pyapi/app/services/legacy_admin_rbac_service.pyapi/app/services/legacy_authz_service.py 将四个历史菜单编码纳入已下线过滤,避免存量菜单继续展示。
      • api/app/services/topic_registry.py 删除 admin.system-messages 订阅规则。
  • 验证:

    • python3 -m py_compile api/app/api/router.py api/app/core/database.py api/app/models/__init__.py api/app/services/seed_service.py api/app/services/admin_service.py api/app/services/legacy_admin_rbac_service.py api/app/services/legacy_authz_service.py api/app/services/topic_registry.py -> 通过。
    • npm --workspace web exec tsc --noEmit --pretty false -> 通过(清理 .next 后复跑)。
    • npx eslint src/app/admin/page.tsx src/app/admin/menus/page.tsx src/types/auth.ts -> 通过。
    • npm run build:web -> 通过,构建路由列表已不再包含 /admin/inbox/admin/prompt/admin/system-message/admin/code-review/admin/git-desktop
    • git diff --check(命中文件)-> 通过。
    • npx @ant-design/cli lint src/app/admin/page.tsx --format json:默认 npx cache 报 ENOTEMPTY;改用 /tmp 独立 cache 后命令长时间无返回,已终止卡住进程,未得到有效 AntD CLI lint 结果。
  • 风险与影响:

    • 本次仅下线入口、路由、默认权限/菜单和提示词管理执行链路,不执行数据库 drop;存量 system_messages 表如果已存在,会作为历史数据保留。
    • admin.system_messageadmin.inboxadmin.code_reviewadmin.git_desktop 被保留在 removed/disabled 集合中,仅用于过滤历史菜单。

Work Log - 文件管理页去掉左侧挂载点(2026-04-26)

  • 背景:

    • 用户要求:文件管理仅会有本地/SFTP/S3 三种后端,不会出现多挂载点场景,去掉左侧挂载点。
  • 本次改动(最小闭环):

    • web/src/app/admin/files/page.tsx
      • 删除左侧“挂载点”卡片与挂载点列表按钮组。
      • 删除前端挂载点切换状态与逻辑(mountCodehandleSelectMount)。
      • 文件列表查询改为仅按 path 拉取,由后端返回 current_mount 作为当前挂载上下文。
      • 保留文件操作接口参数 mount_code,统一使用当前响应中的 current_mount.code
  • 验证:

    • npm --workspace web exec tsc --noEmit --pretty false -> 通过。
  • 风险与影响:

    • 前端不再支持多挂载点手动切换;若后续恢复多挂载点产品形态,需要补回挂载点切换入口。
    • 后端接口与数据模型未改动,仍兼容多挂载点能力。

Work Log - 任务监控功能彻底收口(2026-04-26)

  • 背景:

    • 用户要求“补充任务监控功能”并“彻底收口”。
  • 本次改动:

    • 后端接口对齐 Celery 监控语义:
      • api/app/api/v1/task_monitor.py
        • 查询参数统一为 task_limit / history_limit
        • 权限校验统一为 celery.read / celery.manage
        • 移除旧的需求/待办聚合参数与依赖(risk_limit / stale_hours)。
    • 前端页面按 Celery schema 重写:
      • web/src/app/admin/task-monitor/page.tsx
        • 请求参数改为 task_limit / history_limit
        • 页面展示改为 Worker / Queue / Task 三块监控表格。
        • 统计卡片改为在线 Worker、总并发、队列待处理、采样任务数。
        • 状态分布改为任务状态桶(STARTED/RECEIVED/SCHEDULED/...)。
        • 页面权限改为 celery.read / celery.manage
    • 后台首页入口口径同步:
      • web/src/app/admin/page.tsx
        • “任务监控”卡片文案改为 Celery 监控描述。
        • 可见权限改为 celery.read / celery.manage
  • 验证:

    • npm --workspace web exec tsc --noEmit --pretty false -> 通过。
    • python3 -m compileall api/app/api/v1/task_monitor.py api/app/services/task_monitor_service.py api/app/schemas/task_monitor.py -> 通过。
  • 风险与影响:

    • 任务监控口径从“需求/待办风险聚合”切换为“Celery 运行态监控”;若历史调用仍传 risk_limit/stale_hours,将不再生效。
    • 页面和接口权限都已切至 celery.*,需要对应角色具备 Celery 权限才可访问。

Work Log - 任务监控补齐 Celery 队列积压与历史状态(2026-04-26)

  • 背景:

    • 用户确认“任务监控要监控 Celery 队列和任务状态”,需要从方案落到可运行实现。
  • 本次补齐:

    • 后端 api/app/services/task_monitor_service.py
      • inspect.active/reserved/scheduled/active_queues/stats/ping 聚合 Worker 与实时任务。
      • Broker 为 Redis 时按队列执行 LLEN,输出真实 pending_count(不再用 reserved/scheduled 近似值)。
      • Result backend 为 Redis 时扫描 celery-task-meta-*,补齐 SUCCESS/FAILURE/RETRY/REVOKED 历史状态。
      • 任务明细按状态优先级 + 时间排序,支持 task_limit/history_limit
    • 接口与权限:
      • api/app/api/v1/task_monitor.py 改为 task_limit/history_limit 参数。
      • 权限校验统一为 celery.read / celery.manage
    • 权限映射与菜单:
      • api/app/services/seed_service.py 增加 celery.read/celery.manage,并将 admin.task_monitor 权限改为 celery.read
      • api/app/services/legacy_authz_service.py 同步 admin.task_monitor -> celery.* 映射。
    • 前端 web/src/app/admin/task-monitor/page.tsx
      • 展示 Worker/Queue/Task 三块监控视图;
      • 自动刷新、任务上限、历史扫描上限可配置;
      • 状态 Tag 与失败摘要展示。
  • 验证:

    • python3 -m py_compile api/app/schemas/task_monitor.py api/app/services/task_monitor_service.py api/app/api/v1/task_monitor.py api/app/services/seed_service.py api/app/services/legacy_authz_service.py -> 通过。
    • npm --workspace web exec tsc --noEmit --pretty false -> 通过。
  • 风险与影响:

    • Redis 扫描历史任务采用 SCAN + 限流(history_limit * 20)策略;历史量极大时仅展示采样窗口内数据。
    • 当前未新增 DB 持久化索引,历史任务名称在 result backend 未携带时会显示为 -

Work Log - 移除后台页面顶部标题与描述信息(2026-04-26)

  • 背景:

    • 用户要求去掉所有后台页面顶部的标题和描述信息(例如“线路管理”“按角色权限访问当前模块,完成查询、维护、协作与操作留痕”)。
  • 本次改动(最小闭环):

    • web/src/app/admin/layout.tsx
      • 删除后台壳层内容区顶部公共信息块(Breadcrumb + 页面标题 + 页面描述)。
      • 同步清理对应的 breadcrumb/title 计算逻辑与无用导入。
  • 验证:

    • npm --workspace web exec tsc --noEmit --pretty false -> 通过。
  • 风险与影响:

    • 仅影响后台页面顶部展示,不涉及页面业务逻辑、接口、权限与路由行为。

Work Log - 下线 AI/编排/MCP/模型/API测试/知识集/图谱/需求/日程功能(2026-04-26

  • 背景:

    • 用户要求删除“AI 聊天、编排管理、MCP管理、模型管理、API测试、知识集管理、流程图、思维导图、需求管理、日程管理”功能。
  • 本次改动:

    • 前端入口与页面删除:
      • 删除 /admin/chat/admin/agent/admin/orchestration/admin/mcp-server/admin/models/admin/api-tester/admin/files/admin/knowledge-set/admin/mermaid-mgr/admin/mindmap/admin/requirements/admin/schedule 对应页面文件。
      • web/src/app/admin/page.tsx 删除对应后台首页卡片,仅保留用户/角色/菜单/系统参数/任务监控/线路/雷电/系统日志/Wine 执行器。
      • web/src/app/admin/menus/page.tsx 删除已下线菜单的前端受保护编码。
      • web/src/types/auth.ts 删除 File/Model/TokenUsage/Chat/MindMap/Mermaid/Requirement/Todo 等已下线前端 DTO 类型。
    • 后端公开 API 下线:
      • api/app/api/router.py 取消挂载 chat/admin-files/calendar/mermaid/mindmap/requirements/todos/project_requirement 等路由。
      • 删除对应 route/schema/service/model 文件:chat、file_storage、mermaid、mind_map;删除 public requirements/todos/calendar/project_requirement API。
      • api/app/api/v1/admin.py 删除模型管理与模型路由管理端点。
    • 默认权限/菜单收口:
      • api/app/services/seed_service.py 删除 chat.usefile.*model.*requirement.*todo.* 默认权限,删除对应默认菜单与 admin 绑定。
      • api/app/services/admin_service.pylegacy_admin_rbac_service.pylegacy_authz_service.py 将已下线菜单编码放入 removed/disabled 过滤集合,屏蔽存量菜单。
      • api/app/services/topic_registry.py 删除已下线模块订阅规则。
    • 任务监控适配:
      • /admin/task-monitor 保留,但口径固定为 Celery Worker/Queue/Task 监控,不再读取需求/待办数据。
      • api/app/services/model_service.py 保留内部模型注册/路由基础设施,但移除已下线 /api/v1/admin/models* 刷新提示,并将 topic 改为内部 model.registry
  • 验证:

    • python3 -m compileall api/app -> 通过。
    • npm --workspace web exec tsc --noEmit --pretty false -> 通过(删除 .next 后复跑,避免旧路由类型缓存)。
    • npx eslint src/app/admin/page.tsx src/app/admin/menus/page.tsx src/app/admin/task-monitor/page.tsx src/types/auth.ts -> 通过。
    • npm run build:web -> 通过;构建路由列表仅保留 /admin/admin/users/admin/roles/admin/menus/admin/system-params/admin/task-monitor/admin/power-lines/admin/lightning-currents/admin/lightning-distribution/admin/syslog/admin/wine-runner
    • git diff --check -> 通过。
  • 风险与影响:

    • 本次不执行数据库 drop;历史表和历史数据保留。
    • 本机 Python 与 .venv 均缺少 FastAPIPYTHONPATH=api python -c "from app.api.router import api_router" 无法作为导入验证;已用 compileall 覆盖语法级后端检查。
    • 模型注册表/路由表仍保留给内部 LLM 网关与寿命倒计时等内部能力使用,但后台模型管理/API 测试页面和 admin API 已移除。

Work Log - 打包镜像并发布功能下线更新(2026-04-26)

  • 背景:

    • 用户要求“打包镜像并发布更新”。
  • 本次执行:

    • docker compose build
      • fquiz-apifquiz-webfquiz-celery-workerfquiz-celery-beat 构建完成。
      • Web 镜像构建阶段 next build 通过,路由列表仅保留当前有效后台模块。
    • docker compose up -d
      • 重建并启动 api/web/celery-worker/celery-beat
      • db/redis/minio 继续复用运行中容器。
  • 验证:

    • docker compose ps
      • fquiz-api Up 且 healthy。
      • fquiz-web Up。
      • fquiz-celery-worker Up。
      • fquiz-celery-beat Up。
      • fquiz-dbfquiz-redis healthy。
    • curl -fsS http://127.0.0.1:8000/health -> {"status":"ok","service":"fquiz-api","version":"0.1.0"}
    • curl -I -fsS http://127.0.0.1:3000/ -> HTTP/1.1 200 OK
    • docker compose logs --tail=120 apiUvicorn 启动完成,/health 返回 200。
    • docker compose logs --tail=100 webNext.js Ready。
    • docker compose logs --tail=80 celery-workerworker 连接 Redis 并 ready。
    • docker compose logs --tail=80 celery-beatbeat 启动完成。
    • OpenAPI 运行态检查:/api/v1/chat/api/v1/admin/files/api/v1/calendar/api/v1/mermaids/api/v1/mindmap/api/v1/requirements/api/v1/todos/api/project/requirement/api/v1/admin/models/api/v1/admin/model-routes 均无匹配。
  • 风险与影响:

    • 发布过程重启了 API、Web、Celery Worker、Celery Beat,存在短时服务切换窗口。
    • Celery Worker 日志仍有 root 用户运行的既有安全警告,服务状态正常但后续生产化可考虑设置非 root 用户。

Work Log - 还原文件管理模块(2026-04-26)

  • 背景:

    • 用户要求恢复系统文件管理模块,并延续此前“单挂载点交互”约束。
  • 本次改动:

    • 恢复文件管理核心代码:
      • api/app/api/v1/admin_files.py
      • api/app/models/file_storage.py
      • api/app/schemas/file_storage.py
      • api/app/services/file_service.py
      • api/app/services/storage_driver.py
      • web/src/app/admin/files/page.tsx
    • 恢复后端接线:
      • api/app/api/router.py 重新挂载 admin_files_router
      • api/app/models/__init__.pyapi/app/core/database.py 重新注册 file_storage 模型。
    • 恢复权限/菜单/订阅口径:
      • api/app/services/seed_service.py 恢复 file.read/file.manageadmin.files 菜单、默认存储后端与挂载 seed。
      • api/app/services/legacy_authz_service.py 恢复 admin.files 权限映射与 synthetic legacy menu。
      • api/app/services/topic_registry.py 恢复 admin.files topic 订阅规则。
      • api/app/services/admin_service.py / legacy_admin_rbac_service.py 恢复 admin.files 为受保护菜单,并从 removed/disabled 过滤中放开。
      • web/src/app/admin/menus/page.tsx 恢复 admin.files 为前端受保护菜单。
      • web/src/app/admin/page.tsx 恢复“文件管理”入口卡片。
      • web/src/types/auth.ts 恢复文件管理相关类型定义。
    • 文件管理页面按单挂载点收口:
      • 去掉左侧挂载点列表与挂载切换状态,仅保留当前挂载上下文下的目录浏览与文件操作。
  • 验证:

    • python3 -m compileall api/app/api/router.py api/app/api/v1/admin_files.py api/app/core/database.py api/app/models/__init__.py api/app/models/file_storage.py api/app/schemas/file_storage.py api/app/services/file_service.py api/app/services/storage_driver.py api/app/services/seed_service.py api/app/services/topic_registry.py api/app/services/legacy_authz_service.py api/app/services/legacy_admin_rbac_service.py api/app/services/admin_service.py -> 通过。
    • npm --workspace web exec tsc --noEmit --pretty false -> 通过。
    • npm --workspace web exec eslint src/app/admin/files/page.tsx src/app/admin/page.tsx src/app/admin/menus/page.tsx src/types/auth.ts --max-warnings=0 -> 通过。
  • 风险与影响:

    • 现有仓库仍包含大量其他未提交改动;本次仅在文件管理恢复相关文件完成闭环,未触及其他下线模块恢复。
    • 若现网数据库已经移除历史 menu/role_menu_rela 数据,需要重启后触发 seed 才能自动补齐 admin.files 菜单和默认挂载。

Work Log - ATP 仿真模型管理一期落地(2026-04-26)

  • 背景:

    • 用户确认按“ATPDraw 产物版本管理 + ATP 引擎调用”方案实现。
  • 本次改动:

    • 后端新增 ATP 模块(模型/版本/运行):
      • 新增数据模型:
        • api/app/models/atp_model.py
          • atp_model(模型台账)
          • atp_model_version(版本与产物元数据)
          • atp_simulation_run(仿真运行记录)
      • 新增 schema
        • api/app/schemas/atp_model.py
      • 新增服务:
        • api/app/services/atp_model_service.py
          • 模型 CRUD、版本管理、激活版本、运行记录查询
          • ATP 引擎状态检查与同步执行落库(支持 wine/native
      • 新增 API
        • api/app/api/v1/atp_models.py
        • 路由前缀:/api/v1/atp/models
        • 关键端点:
          • GET /engine/status
          • GET/POST/PATCH/DELETE /
          • GET/POST/PATCH /{model_id}/versions*
          • POST /{model_id}/versions/{version_id}/activate
          • GET/POST /{model_id}/runs*
    • 后端接线与权限菜单:
      • api/app/api/router.py 挂载 ATP 路由。
      • api/app/core/config.py 新增 ATP 引擎配置:
        • atp_engine_mode
        • atp_engine_executable
        • atp_storage_root
        • atp_engine_workdir
        • atp_engine_default_timeout_seconds
        • atp_engine_max_timeout_seconds
      • api/app/models/__init__.pyapi/app/core/database.py 注册 ATP 模型。
      • api/app/services/seed_service.py 新增权限:
        • atp.read / atp.manage / atp.run
        • 新增默认菜单 admin.atp_models/admin/power-lines/atp-viewer
      • api/app/services/legacy_authz_service.pylegacy_admin_rbac_service.pyadmin_service.pytopic_registry.py 同步 ATP 菜单权限映射、受保护菜单与订阅主题(admin.atp-models)。
    • 前端 ATP 页面升级:
      • web/src/app/admin/power-lines/atp-viewer/page.tsx
        • 从“纯查看器”升级为“模型台账 + 版本管理 + 仿真运行 + 文本转换预览”四块。
        • 支持模型创建/编辑/删除、版本创建/激活、版本加载回编辑区、运行任务执行与日志查看。
        • 保留 ATP 文本解析与 maxGraph 渲染能力。
      • web/src/types/auth.ts 增加 ATP 模块类型定义。
      • web/src/app/admin/page.tsx ATP 卡片升级为“ATP模型管理”,权限切到 atp.*
      • web/src/app/admin/power-lines/page.tsx 线路页入口文案改为“ATP模型管理”,并按 atp.* 权限显示。
      • web/src/app/admin/menus/page.tsx 新增 admin.atp_models 受保护菜单码。
  • 验证:

    • 后端:
      • python3 -m compileall api/app -> 通过。
    • 前端:
      • npm --workspace web exec tsc --noEmit --pretty false -> 通过。
      • npm --workspace web exec eslint src/app/admin/power-lines/atp-viewer/page.tsx src/app/admin/page.tsx src/app/admin/menus/page.tsx src/types/auth.ts --max-warnings=0 -> 通过。
      • npm run build:web -> 通过;路由包含 /admin/power-lines/atp-viewer
  • 风险与影响:

    • ATP 运行为同步执行(请求内完成),长耗时任务会占用 API worker;后续可升级为 Celery 异步执行。
    • atp_engine_executable 默认值仅为占位,实际运行需按部署环境配置可执行 ATP 引擎路径。

Work Log - 线路管理地图专题化为线路走向图(2026-04-26)

  • 背景:

    • 用户要求“线路管理页面的图用于展示线路在地图上的分布走向,不要通用地图功能”。
  • 本次改动(A 方案,最小闭环):

    • web/src/components/power-line-cesium-map.tsx
      • Cesium Viewer 改为专题化初始化:显式 baseLayer: false,关闭 skyBox/skyAtmosphere,弱化通用地图能力。
      • 保留线路业务核心可视化:按杆塔 seq_no 连线、杆塔点位、起点/终点标识。
      • 新增线路走向专题控件:按风险着色显示塔号居中重置
      • 新增走向统计信息:有效坐标数、缺失坐标数、断点段数、线路估算长度(Haversine)。
      • 对缺失坐标导致的序号断档按分段折线绘制,避免误连成单条连续线路。
    • web/src/app/admin/power-lines/page.tsx
      • 视图切换文案由“地图”改为“走向图”。
      • 当前视图状态文案同步改为“走向图”。
  • 验证:

    • npm --workspace web exec tsc --noEmit --pretty false -> 通过。
  • 风险与影响:

    • 本次仅修改前端展示逻辑,不涉及后端接口、权限、路由与数据库结构。
    • 因专题化禁用了默认底图,视觉上会更偏“线路走向专题视图”;若后续需要叠加真实底图,应单独评估并显式配置地图源。

Work Log - 打包镜像并发布线路走向图更新(2026-04-26)

  • 背景:

    • 用户要求执行“打包镜像并发布更新”。
  • 本次执行:

    • docker compose build
    • docker compose up -d
  • 验证:

    • docker compose psapi/web/celery-worker/celery-beat/db/redis/minio 均为 Upapi/db/redis healthy。
    • curl -fsS http://127.0.0.1:8000/health:返回 {"status":"ok","service":"fquiz-api","version":"0.1.0"}
    • curl -I -fsS http://127.0.0.1:3000/:返回 HTTP/1.1 200 OK
    • docker compose logs --tail=120 apiUvicorn 启动完成,/health 返回 200。
    • docker compose logs --tail=100 webNext.js Ready。
    • docker compose logs --tail=80 celery-workerworker 连接 Redis 并 ready(保留 root 运行警告)。
    • docker compose logs --tail=80 celery-beatbeat 启动完成。
  • 风险与影响:

    • 本次为镜像重建与容器重启,存在短时服务切换窗口。
    • celery-worker 仍以 root 运行,功能可用但生产化建议后续切换为非 root 用户。

Work Log - ATP 文本转 JSON 并用 maxGraph 查看(2026-04-26

  • 背景:

    • 用户要求开发“ATP 转 JSON,然后给 maxGraph 渲染”的查看能力,重点是展示,不涉及仿真。
  • 本次改动(前端最小闭环):

    • 新增依赖:
      • web/package.json 增加 @maxgraph/core
    • 新增 ATP 解析能力:
      • web/src/lib/atp/types.ts:定义 ATP 图 JSON 结构(nodes/edges/stats/warnings)。
      • web/src/lib/atp/parse-atp-text.ts:实现 ATP 文本解析器(支持常见 R1 BUS_A BUS_B 10BUS_A BUS_B R 10 两类行格式)。
      • web/src/lib/atp/sample.ts:提供可直接试跑的 ATP 示例文本。
    • 新增 maxGraph 只读渲染组件:
      • web/src/components/atp-maxgraph-viewer.tsx:渲染节点/正交连线,支持适配视图与缩放,不提供编辑能力。
    • 新增业务页面:
      • web/src/app/admin/power-lines/atp-viewer/page.tsx:提供上传 ATP 文本、转换 JSON、JSON 预览、maxGraph 图形查看、导出 JSON。
    • 增加入口:
      • web/src/app/admin/power-lines/page.tsx:在“线路管理”卡片增加 ATP查看器 入口按钮。
      • web/src/app/admin/page.tsx:后台首页新增 ATP查看器 卡片入口(沿用线路模块权限)。
  • 验证:

    • npm --workspace web exec tsc --noEmit --pretty false -> 通过。
    • cd web && npx eslint src/components/atp-maxgraph-viewer.tsx src/lib/atp/parse-atp-text.ts src/lib/atp/types.ts src/lib/atp/sample.ts src/app/admin/power-lines/atp-viewer/page.tsx -> 通过。
    • 构建产物确认:web/.next/server/app/admin/power-lines/atp-viewer/page.js 与相关 rsc/html 已生成。
  • 风险与影响:

    • 解析器当前是“查看优先”的通用文本解析,不覆盖 ATP/ATPDraw 全量语法;复杂模型卡、控制卡可能被忽略并进入 warnings。
    • 本次不涉及后端 API/数据库改动,不影响现有线路与雷电业务接口。

Work Log - 雷电模块补齐地面倾角计算链路(2026-04-26)

  • 背景:

    • 用户要求按“高程+坐标+3x3 邻域(Horn)”方案改造雷电分布统计中的地形倾角能力。
  • 本次改动:

    • 后端 schema 与响应扩展:
      • api/app/schemas/lightning.py
        • 新增 LightningTowerTerrainMetrics
        • 新增 LightningTowerTerrainComputeRequest/Response
        • LightningTowerBufferStatsResponse 增加 terrain_metrics
        • 新增 dem_grid_m 的 3x3 校验
    • 后端服务能力补齐:
      • api/app/services/lightning_service.py
        • 补齐 Horn 梯度、坡向、邻域坡度统计、分位数、线路方向纵横坡、质量评分、角差/方向导数等辅助函数。
        • 新增 compute_tower_terrain_metrics(...),支持:
          • 基于 3x3 DEM 计算倾角/坡向/纵横坡/起伏量/暴露指数
          • 可选按权限持久化到 power_line_tower.raw_extra_json.terrain_metrics
        • get_tower_buffer_stats(...) 增加地形指标读取与风险修正(地形暴露指数参与 Ng 风险权重)
    • 后端 API 新增:
      • api/app/api/v1/lightning.py
        • 新增 POST /api/v1/lightning-currents/stats/tower-terrain
        • 权限:读权限可计算,persist=truetower.managelightning.manage(或 admin
    • 前端类型与展示:
      • web/src/types/auth.ts
        • 新增 LightningTowerTerrainMetrics
        • 新增 LightningTowerTerrainComputeRequest/Response
        • 扩展 LightningTowerBufferStatsResponse.terrain_metrics
      • web/src/app/admin/lightning-currents/page.tsx
        • 杆塔缓冲区结果区新增地形字段展示:倾角、坡向、暴露指数、纵/横坡、质量等级/评分、DEM 分辨率与来源
  • 验证:

    • python3 -m py_compile api/app/services/lightning_service.py api/app/api/v1/lightning.py api/app/schemas/lightning.py -> 通过。
    • npm --workspace web exec tsc --noEmit --pretty false -> 通过。
  • 风险与影响:

    • 当前计算输入 DEM 由调用方提供(3x3 高程矩阵),尚未接入自动 DEM 切片检索;生产精度仍依赖上游 DEM 分辨率与采样质量。
    • 杆塔缓冲区风险等级已引入地形暴露权重,可能导致部分杆塔风险分级相对旧口径发生变化。

Work Log - 飞书需求管理多维表格(下拉版)创建(2026-04-26)

  • 背景:

    • 用户要求“重新创建一个需求管理多维表格,能够用下拉的用下拉”。
  • 本次执行:

    • 通过 lark-cli base 新建 Base需求管理多维表格
    • 将默认表重命名为 需求管理
    • 字段下拉化(type=select)并配置选项:
      • 优先级P0/P1/P2/P3
      • 状态待开始/进行中/评审中/已完成/阻塞
      • 需求类型功能需求/缺陷修复/优化改进/技术债务
      • 需求来源产品/运营/客户反馈/内部改进
      • 负责人程凯/待分配
      • 风险等级低/中/高/紧急
      • 进度0%/25%/50%/75%/100%
      • 标签(多选):前端/后端/测试/接口/高优先
    • 文本/日期字段:需求ID需求名称开始日期截止日期备注(保留 附件 字段)。
    • 写入 3 条示例需求记录,验证下拉与日期写入均正常。
  • 验证:

    • HOME=/tmp lark-cli base +field-list --as user --base-token Xpsgb3jEUaZHlksbnY1cEXMrnpd --table-id tbleJyrScpTGtRdR -> 下拉字段及选项已生效。
    • HOME=/tmp lark-cli base +record-batch-create ... -> 返回 ok: true,成功写入 3 条记录。
    • Base 地址:https://my.feishu.cn/base/Xpsgb3jEUaZHlksbnY1cEXMrnpd
  • 风险与影响:

    • 飞书 field-update 接口存在频控(800004135),本次采用“删除默认字段 + 重建字段”兜底策略完成配置。
    • 保留了系统默认 附件 字段;若需极简字段集,可后续删除该列。

Work Log - 需求多维表优先级改为英文四档(2026-04-26)

  • 背景:

    • 用户要求将“优先级”下拉改为 Urgent/High/Medium/Low
  • 本次改动:

    • 多维表:https://my.feishu.cn/base/Xpsgb3jEUaZHlksbnY1cEXMrnpd
    • 表:需求管理tbleJyrScpTGtRdR
    • 字段 优先级fld02jCtl7)下拉选项更新为:UrgentHighMediumLow
    • 将现有 3 条示例记录优先级同步为:
      • REQ-001 -> High
      • REQ-002 -> Medium
      • REQ-003 -> Urgent
  • 验证:

    • HOME=/tmp lark-cli base +record-list --as user --base-token Xpsgb3jEUaZHlksbnY1cEXMrnpd --table-id tbleJyrScpTGtRdR --limit 20
    • 返回数据中三条记录优先级分别为 High/Medium/Urgent
  • 风险与影响:

    • 飞书 record-batch-update 存在短时限频(800004135),本次通过串行+间隔重试完成。

Work Log - 需求多维表新增 issue 关联表(2026-04-26

  • 背景:

    • 用户要求将主表名改为“需求列表”,并在同一 Base 中新增“issue列表”,且 issue 可关联到需求。
  • 本次改动:

    • Basehttps://my.feishu.cn/base/Xpsgb3jEUaZHlksbnY1cEXMrnpd
    • 表改名:
      • 需求管理 -> 需求列表tbleJyrScpTGtRdR
    • 新增表:
      • issue列表tblkI3rjksLcef67
    • issue列表 字段:
      • Issue标题text
      • 状态select: Open/In Progress/Resolved/Closed
      • 严重级别select: P0/P1/P2/P3
      • 指派给select: 程凯/待分配)
      • 截止日期datetime
      • 备注text
      • 关联需求link -> tbleJyrScpTGtRdR
    • 新增 2 条 issue 示例,并已关联到需求记录:
      • 登录页按钮样式偏差 -> REQ-001
      • 导出接口返回字段缺失 -> REQ-002
  • 验证:

    • HOME=/tmp lark-cli base +table-list --as user --base-token Xpsgb3jEUaZHlksbnY1cEXMrnpd -> 表列表包含 需求列表issue列表
    • HOME=/tmp lark-cli base +record-list --as user --base-token Xpsgb3jEUaZHlksbnY1cEXMrnpd --table-id tblkI3rjksLcef67 --limit 20 -> 关联需求 字段返回目标需求 record id
  • 风险与影响:

    • 当前 link 字段为单向关联(bidirectional=false);需求表未自动新增反向聚合列。如需在需求表中直接看 issue 明细,可后续补一个双向/反向展示字段。