fix: merge后14个测试修复+前端TS编译修复 - 895/895通过+前端零错误

This commit is contained in:
logan committed 2026-05-23 17:50:13 +08:00
1 parent 58eb78c987
commit b39c426317
24 files changed
+3918 -760

No files matched your search

+238
View File
@@ -0,0 +1,238 @@
# 优化包合并分析报告
## 📋 总览
| 文件 | 行数变化 | 冲突模型引用 | 安全合并? | 策略 |
|------|---------|------------|----------|------|
| models/user.py | 23→299 (+276) | ⚠️ **核心冲突** | ❌ | 手动合并 |
| models/workflow.py | 55→362 (+307) | ✅ 无 | ✅ | 直接覆盖 |
| services/workflow_engine.py | 359→1319 (+960) | ✅ 无 | ✅ | 直接覆盖 |
| services/query_service.py | 709→1253 (+544) | ✅ 无 | ✅ | 直接覆盖 |
| services/audit_engine.py | 234→790 (+556) | ✅ 无 | ✅ | 直接覆盖 |
| services/ticket_executor.py | 1384→1688 (+304) | ✅ 无 | ✅ | 直接覆盖 |
| api/v1/endpoints/ticket.py | 747→1029 (+282) | ⚠️ AuditLog引用 | ✅ | 直接覆盖 |
| api/v1/endpoints/query.py | 226→426 (+200) | ⚠️ AuditLog引用 | ✅ | 直接覆盖 |
| api/v1/endpoints/user.py | 116→116 (0) | ⚠️ AuditLogService | ✅ | 直接覆盖 |
---
## 🔴 冲突分析
### 冲突1:`user_groups` 表名冲突
| 维度 | 我们的版本 | 优化包版本 |
|------|-----------|-----------|
| **位置** | `models/instance_group.py` | `models/user.py` |
| **类型** | `Table()` 关联表 | `class UserGroup(Base)` ORM模型 |
| **表名** | `user_groups` | `user_groups` |
| **列** | user_id, group_id, permissions | id, name, description, group_permissions, ... |
| **用途** | User ↔ InstanceGroup 多对多关联 | 独立的用户组权限管理实体 |
**冲突本质**:两个完全不同的数据库表结构映射到同一个表名。优化包的 `UserGroup` 是一个完整的权限组系统,我们的 `user_groups` 只是一个简单的关联表。
### 冲突2:AuditLog 双重定义
| 维度 | 我们的版本 (`models/audit_log.py`) | 优化包版本 (`models/user.py`) |
|------|----------------------------------|-------------------------------|
| **表名** | `audit_logs` | `audit_logs` |
| **字段风格** | 运维审计(target_type, query_content, db_type) | 通用审计(resource_type, before_data, after_data) |
| **关系** | 无 relationship | `user = relationship("User", ...)` |
**关键发现**:优化包的 `ticket.py` 和 `query.py` 都 `from app.models.audit_log import AuditLog`(即使用的是我们的版本),而不是从 `models.user` 导入!
### 冲突3:新增模型类(无冲突但需数据库迁移)
优化包 `models/user.py` 新增了:
- `UserGroup` — 用户组模型(表名与我们的关联表冲突)
- `UserGroupMember` — 用户组成员关联表
- `AuditLog` — 审计日志(与 `models/audit_log.py` 重复定义)
---
## 📁 逐文件分析
### 1. models/user.py — ⚠️ 需手动合并
**差异概要**:
- User 模型新增了 4 个 JSON 权限字段(data_source_permissions, custom_permissions, column_permissions, permissions_updated_at)
- User 模型新增了 5 个 relationship(tickets, approvals, audit_logs, query_histories, user_groups)
- User 模型新增了 5 个方法(has_permission, has_data_source_permission, get_allowed_columns, to_dict, __repr__)
- 新增 3 个类:UserGroup, UserGroupMember, AuditLog
**冲突点**:
- `secondary="user_groups"` — 与 instance_group.py 的 Table 定义冲突
- `user_groups = relationship("UserGroup", ...)` — 引用同文件 UserGroup
- `audit_logs = relationship("AuditLog", ...)` — 引用同文件 AuditLog
- `to_dict()` 中 `self.user_groups` — 引用 UserGroup relationship
**合并策略**:
```
✅ 直接采纳:User 模型的 JSON 权限字段(4个新字段)
✅ 直接采纳:User 的便捷方法(has_permission, to_dict 等)
⚠️ 需修改:User.groups 的 secondary 保持 "user_groups"(不改,与 instance_group.py 兼容)
❌ 不采纳:User.user_groups relationship(引用冲突的 UserGroup)
❌ 不采纳:User.tickets/approvals/audit_logs/query_histories(跨模型耦合,按需添加)
❌ 不采纳:UserGroup 类(表名冲突)
❌ 不采纳:UserGroupMember 类(依赖 UserGroup)
❌ 不采纳:AuditLog 类(已在 audit_log.py 独立定义)
⚠️ to_dict() 中的 user_groups 引用需要改为 groups 或移除
```
### 2. models/workflow.py — ✅ 可安全覆盖
**差异概要**:
- WorkflowDefinition 新增 category, updated_at, created_by, flow_config, trigger_conditions 字段
- 新增 WorkflowVersion 类(版本控制)
- WorkflowStep 大幅增强(description, approver_assignment, entry_conditions, transition_conditions, field_permissions)
- TicketApproval 大幅增强(workflow_id, version_id, step_type, actual_approver_id, transfer 信息, 超时标记)
- 新增 WorkflowExecutionLog 类(执行日志)
**新增依赖**:`json`, `UniqueConstraint`, `JSON` — 标准库/SQLAlchemy
**安全评估**:无冲突模型引用,纯功能增强。✅
### 3. services/workflow_engine.py — ✅ 可安全覆盖
**差异概要**:
- 从简单引擎升级为支持条件审批、超时策略、中断恢复的完整引擎
- 新增 WorkflowStatus/ApprovalAction/TimeoutStrategy 枚举
- 新增 ConditionResult/ApproverAssignment 数据类
- 引擎核心方法大幅扩展
**import 检查**:
- `from app.models.workflow import (WorkflowDefinition, WorkflowStep, WorkflowVersion, TicketApproval, WorkflowExecutionLog)` — 全部来自 workflow.py
- `from app.models.user import User` — 只用 User 基础字段
- 无冲突模型引用
### 4. services/query_service.py — ✅ 可安全覆盖
**差异概要**:查询服务增强,支持更多数据库类型和查询优化。
**import 检查**:
- `from app.models.instance import Instance` — ✅
- `from app.schemas.query import UnifiedQueryResult` — ✅
- `from app.services.db_connector import DBConnector` — ✅
- 无冲突模型引用
### 5. services/audit_engine.py — ✅ 可安全覆盖
**差异概要**:审计引擎增强,新增枚举和条件判断。
**import 检查**:
- 无外部模型导入,仅标准库 + typing
- 无冲突模型引用
### 6. services/ticket_executor.py — ✅ 可安全覆盖
**差异概要**:工单执行器增强,支持更多 SQL 解析和执行策略。
**import 检查**:
- `from app.models.instance import Instance` — ✅
- `from app.models.ticket import Ticket` — ✅
- `from app.services.sql_analyzer import SQLAnalyzer, SQLType` — ✅
- 无冲突模型引用
### 7. api/v1/endpoints/ticket.py — ✅ 可安全覆盖
**AuditLog 使用情况**:
- `from app.models.audit_log import AuditLog` — ✅ 使用我们的独立 AuditLog
- `AuditLog.target_type`, `AuditLog.target_id`, `AuditLog.created_at` — ✅ 我们模型有这些字段
- `AuditLogService.log(target_type=..., detail=...)` — ✅ audit_log_service.py 两版完全相同
**注意**:ticket.py 使用的 AuditLog 字段(target_type, target_id, detail, db_type, status)全部存在于我们的 `models/audit_log.py`。
### 8. api/v1/endpoints/query.py — ✅ 可安全覆盖(需注意字段)
**AuditLog 使用情况**:
- `from app.models.audit_log import AuditLog` — ✅ 使用我们的独立 AuditLog
- 直接创建 `AuditLog(...)` 实例,使用字段:
- ✅ 我们模型有:user_id, username, action, target_type, target_id, instance_name, db_type, database_name, query_content, execution_time_ms, rows_affected, result_status, detail
- ⚠️ **`query_type`** — 我们模型没有这个字段!
- ⚠️ **`status`** — 我们模型没有 `status`,只有 `result_status`
**需要的处理**:在我们的 `models/audit_log.py` 中新增 `query_type` 字段:
```python
query_type = Column(String(20), nullable=True) # 新增:查询类型
```
### 9. api/v1/endpoints/user.py — ✅ 可安全覆盖
**差异**:两版完全相同(0 差异),优化包版本多了 AuditLogService 引用但代码一致。
---
## 🗂️ 推荐执行顺序
### 第一阶段:无冲突文件直接覆盖(7个文件)
```bash
# 1. models/workflow.py
# 2. services/workflow_engine.py
# 3. services/query_service.py
# 4. services/audit_engine.py
# 5. services/ticket_executor.py
# 6. api/v1/endpoints/ticket.py
# 7. api/v1/endpoints/user.py (两版相同,跳过)
```
### 第二阶段:小修复
在 `models/audit_log.py` 新增 `query_type` 字段:
```python
query_type = Column(String(20), nullable=True) # 查询类型(SELECT/INSERT/UPDATE/DELETE等)
```
### 第三阶段:手动合并 models/user.py
**保留我们现有结构**,只合并以下安全内容:
1. **新增 User 字段**(JSON 权限相关):
```python
data_source_permissions = Column(JSON, nullable=True, default=list)
custom_permissions = Column(JSON, nullable=True, default=dict)
column_permissions = Column(JSON, nullable=True, default=dict)
permissions_updated_at = Column(DateTime, nullable=True)
```
2. **新增 User 方法**:
```python
def has_permission(self, action: str) -> bool: ...
def has_data_source_permission(self, ...) -> bool: ...
def get_allowed_columns(self, ...) -> list: ...
def to_dict(self, include_sensitive=False) -> dict: ...
```
3. **不合并的内容**:
- `UserGroup` 类 → 如果需要用户组功能,必须改名或用不同表名
- `UserGroupMember` 类 → 同上
- `AuditLog` 类 → 已有独立文件,不重复定义
- `User.user_groups` relationship → 依赖冲突的 UserGroup
- `User.audit_logs` relationship → 需要评估是否添加(跨模型耦合)
- `User.tickets`/`approvals`/`query_histories` → 按需添加
4. **to_dict 方法调整**:
- 将 `self.user_groups` 改为 `self.groups`(匹配现有 InstanceGroup 关系)
### 第四阶段:数据库迁移
新增/修改的数据库表:
- `workflow_versions` — 新增表
- `workflow_execution_logs` — 新增表
- `workflow_definitions` — 新增 category, updated_at, created_by, flow_config, trigger_conditions 字段
- `workflow_steps` — 新增多个字段
- `ticket_approvals` — 新增多个字段
- `audit_logs` — 新增 query_type 字段
- `users` — 新增 4 个 JSON 权限字段
---
## ⚠️ 风险提示
1. **UserGroup/user_groups 冲突**:如果未来需要优化包的用户组功能,需要:
- 将优化包的 `UserGroup` 改表名为 `user_permission_groups`
- 或将我们的关联表 `user_groups` 改名为 `user_instance_groups`
- 同时更新所有外键和 relationship 引用
2. **AuditLog 双定义**:SQLAlchemy 的 metadata 中如果同时注册两个同名 `__tablename__` 的类会报错。只要不同时 import 就没问题。确保不 import `models/user.py` 中的 AuditLog 即可。
3. **workflow.py 的 relationship 指向 "User"**:通过字符串引用,SQLAlchemy 在运行时解析。只要所有模型在 metadata 中注册时 User 类存在即可。