chengkml
8e12b8a6e0
fix: 修复 ai_chat 模块导入错误,将 require_user 改为 get_current_user
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-21 00:34:12 +08:00
chengkai3
483fdb982b
feat:[FL-165][给系统开发一个操作文档管理和展示功能]
...
- 创建后端数据库模型:DocumentChapter 和 Document,支持按章节组织的树形文档结构
- 创建数据库迁移文件:002_add_document_management.sql
- 创建 Pydantic schemas:定义文档和章节的请求/响应模型
- 创建后端服务层:document_service.py 实现 CRUD 和树形结构构建
- 创建 API 路由:/api/v1/documents 和 /api/v1/documents/chapters,支持完整的 RESTful 操作
- 创建前端类型定义:document.ts
- 创建文档管理页面:/admin/documents,包含章节树形目录和文档表格,支持增删改查
- 创建文档展示页面:/admin/docs-view,左侧目录树右侧内容展示,支持 Markdown 渲染
- 安装 react-markdown 依赖用于文档内容展示
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Co-authored-by: multica-agent <github@multica.ai >
2026-06-20 23:22:03 +08:00
chengkai3
21f9839dd6
feat: [FL-166] 实现AI问答功能
...
- 后端实现:
- 添加 ai_chat_conversations 和 ai_chat_messages 数据模型
- 创建 AI 问答 API 路由(/api/v1/ai-chat)
- 实现对话管理和消息发送服务
- 集成 OpenAI API 进行对话交互
- 支持流式对话历史和上下文管理
- 前端实现:
- 创建 ChatGPT 风格的聊天界面(/admin/ai-chat)
- 支持新建、选择、删除对话
- 实现消息发送和实时显示
- 使用 Ant Design 组件构建响应式 UI
- 系统参数配置:
- ai_chat.openai_api_key: OpenAI API 密钥
- ai_chat.model: 使用的 AI 模型(默认 gpt-3.5-turbo)
- ai_chat.base_url: API 基础 URL(支持第三方兼容接口)
- 数据库迁移:
- 002_add_ai_chat.sql: 创建对话和消息表
- 003_add_ai_chat_params.sql: 添加系统参数默认配置
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Co-authored-by: multica-agent <github@multica.ai >
2026-06-20 23:20:26 +08:00
chengkai3
6a653a4960
fix:[FL-220][菜单禁用访问控制]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-20 18:40:29 +08:00
chengkai3
899d5316cf
feat:[FL-211][高程管理扁平化为文件记录]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-20 18:03:27 +08:00
chengkai3
86870f4610
feat: 高程管理重构 - 从数据集中心到文件中心
...
## 重构目标
将高程数据管理从"数据集中心"模式重构为"文件中心"模式,去掉 ElevationDataset 概念,
扁平化为 ElevationFileRecord,每条记录对应一个高程文件。
## 主要变更
### 数据库层
- 新增 `elevation_file_record` 表,合并原 dataset 核心字段
- 更新 `elevation_apply_job` 和 `elevation_data_import_job`,添加 `file_record_id` 字段
- 创建数据迁移脚本 `001_add_elevation_file_record.sql`
- 保留旧表用于向后兼容
### 后端 API
- 新增 `/api/v1/elevation/records` 路由组(推荐使用)
- GET /records - 文件记录列表
- POST /records - 上传文件并创建记录(上传即创建)
- GET /records/{id} - 获取记录详情
- PATCH /records/{id} - 更新记录
- DELETE /records/{id} - 删除记录
- POST /records/{id}/analyze - 触发分析
- POST /records/{id}/terrain/build - 生成地形瓦片
- GET /records/{id}/preview - 预览数据
- 保留 `/api/v1/elevation/datasets` 路由用于向后兼容
- Apply API 支持 `file_record_id` 和 `dataset_id` 双 ID
### 后端代码
- 新增 `elevation_file_record_service.py` (601 行),包含完整 CRUD 和操作逻辑
- 新增模型 `ElevationFileRecord`
- 新增 Schema:FileRecordSummary, CreateRequest, UpdateRequest 等
- 新增 Celery 任务:
- `analyze_elevation_file_record_job`
- `build_elevation_file_record_terrain_job`
- 新增执行函数:
- `execute_file_record_analysis_job`
- `execute_file_record_terrain_build_job`
- 更新模型字段,支持双 ID 关联
### 前端
- 新增简化页面 `/admin/elevation-records` (542 行)
- 从原 1760 行简化到 542 行
- 上传即创建,无需先建数据集
- 每行直接对应一个文件
- 操作更直观
### 文档
- 新增 `REFACTOR_SUMMARY.md` 完整重构说明
- 新增 `api/migrations/README.md` 迁移指南
## 用户体验改进
旧流程(4步):
1. 创建数据集(填编码+名称)
2. 导入文件到数据集
3. 分析数据集
4. 预览/地形/回填
新流程(2步):
1. 上传文件(填来源+分辨率)→ 自动创建+分析
2. 预览/地形/回填
## 向后兼容
- 保留旧表和旧 API,新旧系统可并存
- Apply Job 同时支持新旧 ID
- 提供平滑迁移路径
## 技术指标
- 代码简化:前端从 1760 行 → 542 行(-69%)
- 概念简化:去除"数据集"中间层
- API 数量:新增 8 个文件记录端点
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-20 09:01:16 +08:00
chengkai3
09835543a2
[feat]:[FL-159][杆塔模型管理页面一致性优化]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-20 08:38:07 +08:00
chengkai3
b2dd07d8e8
feat:[FL-158][ATP模型管理页面一致性优化]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-20 08:04:37 +08:00
chengkai3
a9a2d32fd5
[feat]:[FL-154][系统消息页面一致性优化]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-20 07:00:47 +08:00
chengkai3
012b62fab9
[feat]:[FL-153][系统参数管理页面一致性优化]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-20 06:50:53 +08:00
chengkai3
4834a567a8
[feat]:[FL-120][角色管理页面对齐用户管理分页交互]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-19 23:26:20 +08:00
chengkai3
a1fc8add9f
fix: use Chinese messages for user ID validation API
...
- Change "User ID already exists" to "用户 ID 已存在,请更换后重试"
- Change "User ID is available" to "用户 ID 可用"
- Change "Current user ID" to "当前用户ID"
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Co-authored-by: multica-agent <github@multica.ai >
2026-06-19 11:15:55 +08:00
chengkai3
6cd959c528
refactor: use backend API for user ID uniqueness validation
...
- Add GET /api/v1/users/check-id/{user_id} endpoint for real-time validation
- Replace frontend local validation with debounced API calls (500ms)
- Support exclude_user_id parameter for edit scenarios
- Add UserIdCheckResponse schema
- Maintain format validation (alphanumeric + underscore) on frontend
- Clean up timeout on component unmount
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Co-authored-by: multica-agent <github@multica.ai >
2026-06-19 11:04:39 +08:00
chengkai3
23db30d0f0
fix: [FL-199][拆分用户创建错误消息以明确失败原因]
...
将模糊的 409 错误消息 "User id/email/username already exists or default role missing"
拆分为三种具体的异常类型:
1. UserDuplicateError (409) - 用户ID/邮箱/用户名已存在
2. UserRoleAssignmentError (500) - 默认角色未配置或角色分配失败
3. UserCreateError (500) - 其他用户创建失败
改动内容:
- 在 user_service.py 中定义三个异常类
- 将 create_user 返回类型从 UserPublic | None 改为 UserPublic(抛出异常)
- 在 API 层捕获具体异常并返回对应的 HTTP 状态码和明确错误消息
- 更新和新增测试以验证错误消息准确性
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Co-authored-by: multica-agent <github@multica.ai >
2026-06-18 13:13:51 +08:00
chengkai3
e67475aad6
[fix]:[FL-198][菜单管理 - 创建失败且错误信息不明确]
...
## 改动摘要
- 新增自定义异常类用于菜单验证错误的精确识别
- 修改 create_menu 服务函数,使用异常替代返回 None
- 修改 API 端点捕获异常并返回详细错误信息
## 详细改动
### 1. 新增异常类 (api/app/exceptions/menu_exceptions.py)
创建了以下异常类以区分不同的验证失败场景:
- `MenuValidationError`: 基础菜单验证异常类
- `EmptyMenuCodeError`: 菜单编码为空
- `EmptyMenuNameError`: 菜单名称为空
- `DuplicateMenuCodeError`: 菜单编码重复
- `RemovedMenuCodeError`: 使用已移除的菜单编码
- `SelfParentError`: 菜单将自己设为父菜单
- `ParentNotFoundError`: 父菜单不存在
### 2. 修改服务层 (api/app/services/legacy_admin_rbac_service.py)
- 在 create_menu 函数中,将所有返回 None 的地方替换为抛出对应的异常
- 为数据库异常添加更具体的错误上下文
- 修改返回类型从 `MenuPublic | None` 为 `MenuPublic`
### 3. 修改 API 端点 (api/app/api/v1/admin.py)
- 在 create_menu_endpoint 中捕获 MenuValidationError 异常
- 返回详细的错误信息,包括具体的字段名(如有)
- 替换原来的模糊错误信息"Invalid menu payload or duplicate menu code"
## 测试验证
- 已通过 Python 语法检查
- 所有修改的文件编译通过
- 异常类可以正常导入
## 解决的问题
修复了 Issue FL-198 中描述的问题:
- 之前:所有创建失败都返回同一个模糊错误"Invalid menu payload or duplicate menu code"
- 现在:返回具体的错误原因,如"菜单编码 'xxx' 已存在 (字段: code)"、"父菜单 'xxx' 不存在 (字段: parent_id)"等
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Co-authored-by: multica-agent <github@multica.ai >
2026-06-18 12:43:37 +08:00
chengkai3
96f83923f6
fix:[FL-197][角色管理 - 修复数据库表 user_role 不存在错误]
...
修复角色创建功能在使用现代表结构(roles)时因硬编码查询 user_role 表而导致的数据库错误。
问题分析:
- admin.py:72 直接硬编码查询 user_role 表检查角色是否存在
- legacy_admin_rbac_service.py:201 也硬编码查询 user_role 表
- 实际项目使用的是现代表结构 roles(定义在 rbac.py)
- 导致 psycopg.errors.UndefinedTable: relation "user_role" does not exist
修复方案:
1. 移除 admin.py 中的硬编码表查询,将重复检查逻辑委托给 create_role 服务函数
2. 在 create_role 函数中添加 role_source 检测逻辑
3. 根据检测结果使用正确的表名(user_role 或 roles)和字段
4. 确保 legacy 和 modern 模式下都能正常工作
影响范围:
- 角色创建功能现在支持两种表结构
- 保持向后兼容性(legacy 模式仍使用 user_role)
- 修复 modern 模式下的角色创建功能
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Co-authored-by: multica-agent <github@multica.ai >
2026-06-18 12:35:32 +08:00
chengkai3
cdc0b4b054
feat:[FL-165][角色管理页面查询时合并角色和菜单请求]
...
将角色管理页面的角色和菜单两个独立API请求合并为单个请求,减少网络开销。
后端改动:
- 新增 RolesWithMenusResponse 响应模型
- 新增 list_roles_with_menus 服务函数
- 新增 GET /api/v1/admin/roles-with-menus 接口
前端改动:
- 更新 loadData 函数使用新的合并接口
- 减少从两个并发请求改为单个请求
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Co-authored-by: multica-agent <github@multica.ai >
2026-06-18 00:05:11 +08:00
chengkai3
f281a1aebc
[fix]:[FL-168][新建角色时角色编码要加唯一性校验]
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Co-authored-by: multica-agent <github@multica.ai >
2026-06-17 23:55:57 +08:00
chengkai3
dd15768623
feat:[FL-160][角色管理页面表单过滤改成后台查询]
...
- 后端API新增keyword查询参数支持角色搜索
- 在数据库层面实现基础过滤优化性能
- 前端移除客户端过滤逻辑改为调用后端API
- 添加搜索按钮和回车搜索功能
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Co-authored-by: multica-agent <github@multica.ai >
2026-06-17 23:23:38 +08:00
chengkai3
9f4a121712
feat:[FL-156][菜单管理页面的过滤表单实时查询后台数据]
...
- 后端API添加keyword和status查询参数支持
- 前端改为调用后端API进行实时过滤
- 添加300ms防抖优化性能
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Co-authored-by: multica-agent <github@multica.ai >
2026-06-17 18:41:37 +08:00
chengkai3
3899a2345e
[fix]:[FL-145][系统消息要支持删除]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-16 17:44:11 +08:00
chengkai3
60d5d8e305
feat:[FL-139][ATP模型管理要分页]
...
- 在atp_model_service.py的list_models函数添加limit和offset参数
- 在atp_models.py的get_atp_model_list端点添加limit和offset查询参数
- 默认limit=100,offset=0,limit最大值500
- 保持向后兼容,不传参数时使用默认值
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Co-authored-by: multica-agent <github@multica.ai >
2026-06-15 22:27:27 +08:00
chengkai3
1d11bf9fc3
[feat]:[FL-109][增加系统消息发送功能]
...
- 后端:创建system_messages表模型和Schema
- 后端:实现消息创建、查询、标记已读的服务层
- 后端:新增REST API接口(需admin.system_message权限)
- 前端:完善系统消息抽屉弹窗,显示消息列表
- 前端:自动加载未读数量,支持标记已读
- 数据库:新增迁移脚本建表
Co-authored-by: multica-agent <github@multica.ai >
2026-06-13 23:27:29 +08:00
chengkai3
0f5b338a93
fix:[FL-99][修复ATP版本上传接口响应模型不匹配导致500错误]
...
问题:POST /api/v1/atp/assets/{asset_id}/releases/upload 接口声明
response_model=AtpAssetReleaseDetail,但实际返回 {task_id, status} 字典,
导致FastAPI响应验证失败,返回500错误。
解决方案:
1. 新增 AtpAssetReleaseUploadResponse 响应模型,包含 task_id 和 status 字段
2. 更新接口声明使用正确的响应模型
3. 返回类型注解改为 AtpAssetReleaseUploadResponse
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Co-authored-by: multica-agent <github@multica.ai >
2026-06-12 23:35:52 +08:00
chengkai3
da9fd1cd3a
[feat]:[FL-84][ATP模型管理改造11]
...
1. 为AtpAsset模型增加避雷器装设组合配置项(arrester_config)
2. 将release zip上传改为异步处理
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Co-authored-by: multica-agent <github@multica.ai >
2026-06-12 12:48:46 +08:00
chengkai3
4328d9fd34
[fix/feat]:[FL-82][ATP模型管理改造]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-11 23:45:57 +08:00
chengkai3
fac37ddb8d
[fix/feat]:[FL-81][ATP模型管理改造为资产发布制]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-11 22:39:48 +08:00
chengkai3
61a1954034
[feat]:[FL-80][高程数据导入异步并支持进度回看]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-10 15:38:10 +08:00
chengkai3
2a54857fe1
[fix/feat]:[FL-76][高程数据导入报错]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-10 08:26:51 +08:00
chengkai3
2ad2405cd3
[fix/feat]:[FL-74][高程数据支持DEM地形瓦片预览和线路地形图]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-10 00:26:09 +08:00
chengkai3
4ce57708b4
[fix]:[FL-70][删除线路时,塔杆要一起删除]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-09 12:30:27 +08:00
chengkai3
d36aeb8636
[feat]:[FL-65][新增定时任务管理页面]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-09 12:00:59 +08:00
chengkai3
f26f7859cd
[feat]:[FL-62][补充系统日志审计覆盖范围]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-09 11:31:00 +08:00
chengkai3
4e2b3dcdad
[fix]:[FL-57][统一计算任务到 Celery worker]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-09 08:29:10 +08:00
chengkai3
1adec62d6c
[feat]:[FL-51][ATP模型管理去掉版本管理]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-08 23:44:18 +08:00
chengkai3
5a41cd4d3d
[fix/feat]:[FL-42][清理题库 Markdown 导题 热搜遗留模块]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-08 12:48:12 +08:00
chengkai3
dd8dd9244d
[fix]:[FL-43][清理遗留需求协同待办日程JWT生成器模块]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-08 12:32:11 +08:00
chengkai3
4d7f67f73a
[fix/feat]:[FL-39][移除 seed 启动自动调用,改为管理员手动接口触发]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-08 09:08:01 +08:00
chengkai3
171a4a6089
[migrate]:[FL-35][杆塔多回路几何专用编辑器]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-08 03:29:41 +08:00
chengkai3
0746e3ce28
[migrate]:[FL-31][add fl-analysis result export]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-07 23:28:54 +08:00
chengkai3
aebf152cd4
[migrate]:[FL-24][参数准备闭环与就绪校验]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-07 20:37:53 +08:00
chengkai3
6417c295e5
[migrate]:[FL-16][补齐报告生成与导出工作流]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-07 17:39:20 +08:00
chengkai3
8a2af9135f
[migrate]:[FL-18][迁移故障复现工具]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-07 17:35:43 +08:00
chengkai3
632d2a2d17
[migrate]:[818141ae-204d-4339-8914-a1896eb8e4dc][防雷改造迁移]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-07 16:06:52 +08:00
chengkai3
4c143e2842
[fix]:[FL-9][线路管理-创建线路优化]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-07 11:49:10 +08:00
chengkai3
5194638af2
[fix/feat]:[FL-8][线路管理-新建线路表单调整]
...
Co-authored-by: multica-agent <github@multica.ai >
2026-06-07 11:35:02 +08:00
chengkml
95d6ed9461
chore: normalize fl-analysis api file mode
2026-06-06 23:40:02 +08:00
chengkml
0f8f4a0efb
feat: add fl-analysis grading and result page
2026-06-06 23:39:12 +08:00
chengkml
98f97bec01
feat: migrate tower profile professional fields
2026-06-06 22:16:09 +08:00
chengkml
578d124607
feat: add fl analysis backend skeleton
2026-06-06 20:56:44 +08:00