533 lines
31 KiB
Markdown
533 lines
31 KiB
Markdown
## 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 ps`:`api/web/celery/db/redis/minio` 均为 Up,`api/db/redis` healthy。
|
||
- `docker compose logs --tail=80 api`:Uvicorn 启动完成,`GET /health` 返回 200。
|
||
- `docker compose logs --tail=80 web`:Next.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.py`、`api/app/models/__init__.py` 取消 `system_message` 模型导入。
|
||
- `api/app/services/seed_service.py` 删除默认权限、默认菜单和 admin 菜单绑定。
|
||
- `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` 删除 `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_message`、`admin.inbox`、`admin.code_review`、`admin.git_desktop` 被保留在 removed/disabled 集合中,仅用于过滤历史菜单。
|
||
|
||
## Work Log - 文件管理页去掉左侧挂载点(2026-04-26)
|
||
|
||
- 背景:
|
||
- 用户要求:文件管理仅会有本地/SFTP/S3 三种后端,不会出现多挂载点场景,去掉左侧挂载点。
|
||
|
||
- 本次改动(最小闭环):
|
||
- `web/src/app/admin/files/page.tsx`
|
||
- 删除左侧“挂载点”卡片与挂载点列表按钮组。
|
||
- 删除前端挂载点切换状态与逻辑(`mountCode`、`handleSelectMount`)。
|
||
- 文件列表查询改为仅按 `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.use`、`file.*`、`model.*`、`requirement.*`、`todo.*` 默认权限,删除对应默认菜单与 admin 绑定。
|
||
- `api/app/services/admin_service.py`、`legacy_admin_rbac_service.py`、`legacy_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` 均缺少 FastAPI,`PYTHONPATH=api python -c "from app.api.router import api_router"` 无法作为导入验证;已用 `compileall` 覆盖语法级后端检查。
|
||
- 模型注册表/路由表仍保留给内部 LLM 网关与寿命倒计时等内部能力使用,但后台模型管理/API 测试页面和 admin API 已移除。
|
||
|
||
## Work Log - 打包镜像并发布功能下线更新(2026-04-26)
|
||
|
||
- 背景:
|
||
- 用户要求“打包镜像并发布更新”。
|
||
|
||
- 本次执行:
|
||
- `docker compose build`
|
||
- `fquiz-api`、`fquiz-web`、`fquiz-celery-worker`、`fquiz-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-db`、`fquiz-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 api`:Uvicorn 启动完成,`/health` 返回 200。
|
||
- `docker compose logs --tail=100 web`:Next.js Ready。
|
||
- `docker compose logs --tail=80 celery-worker`:worker 连接 Redis 并 ready。
|
||
- `docker compose logs --tail=80 celery-beat`:beat 启动完成。
|
||
- 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__.py`、`api/app/core/database.py` 重新注册 `file_storage` 模型。
|
||
- 恢复权限/菜单/订阅口径:
|
||
- `api/app/services/seed_service.py` 恢复 `file.read`/`file.manage`、`admin.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__.py`、`api/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.py`、`legacy_admin_rbac_service.py`、`admin_service.py`、`topic_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 ps`:`api/web/celery-worker/celery-beat/db/redis/minio` 均为 `Up`,`api/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 api`:Uvicorn 启动完成,`/health` 返回 200。
|
||
- `docker compose logs --tail=100 web`:Next.js Ready。
|
||
- `docker compose logs --tail=80 celery-worker`:worker 连接 Redis 并 ready(保留 root 运行警告)。
|
||
- `docker compose logs --tail=80 celery-beat`:beat 启动完成。
|
||
|
||
- 风险与影响:
|
||
- 本次为镜像重建与容器重启,存在短时服务切换窗口。
|
||
- `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 10` 与 `BUS_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=true` 需 `tower.manage` 或 `lightning.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`)下拉选项更新为:`Urgent`、`High`、`Medium`、`Low`。
|
||
- 将现有 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 可关联到需求。
|
||
|
||
- 本次改动:
|
||
- Base:`https://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 明细,可后续补一个双向/反向展示字段。
|