Files
his/MD/bugs/BUG_748_ANALYSIS.md

98 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Bug #748 诸葛亮分析报告
> **文档类型**: Bug分析
> **分析时间**: 2026-06-12 22:48:02
> **分析模型**: mimo-v2.5 (LLM深度分析)
---
## 基本信息
- **Bug #**: 748
- **标题**: 【临床路径】临床路径管理下的操作按钮报错Error updating database. Cause: org.postgresql.util.PSQLException:
- **模块**: 系统管理
- **提出人**: 王栩坤
---
Analysis complete. Here's my full report:
---
### 一、Bug 理解
**禅道 Bug #748【临床路径】临床路径管理下的操作按钮报错**
> **重现步骤**登录内科医生1的账号doctor1/123456→ 进入临床路径 → 点击操作下的按钮(入径/完成/变异)
>
> **期望结果**:能够正常响应这几个按钮的操作,不会出现报错
**附图关键信息**:页面顶部显示红色错误提示框:
```
ERROR: column "create_by" of relation "clinical_pathway_execution" does not exist
SQL: INSERT INTO clinical_pathway_execution (id, pathway_id, enter_date, status, create_by, create_time, tenant_id) VALUES (?, ?, ?, ?, ?, ?, ?)
```
页面列表正常显示了临床路径数据J18.9 肺炎 / 社区获得性肺炎临床路径),但点击操作按钮即报错。
**综合总结**:用户在临床路径管理页面点击"入径"等操作按钮时,系统尝试向 `clinical_pathway_execution` 表插入记录,但 SQL 中包含了表里不存在的 `create_by` 列,导致 PostgreSQL 抛出 PSQLException。这是 Entity 继承 HisBaseEntity 后引入的字段与数据库表结构不匹配的问题。
---
### 二、根因分析
**完整因果链**
1. **Entity 层**`ClinicalPathwayExecution extends HisBaseEntity``healthlink-his-domain/.../clinical/domain/ClinicalPathwayExecution.java`
2. **HisBaseEntity** 定义了 6 个字段:`createBy``createTime``updateBy``updateTime``tenantId``deleteFlag`
3. **MyBatis-Plus** 自动映射为列名:`create_by``create_time``update_by``update_time``tenant_id``delete_flag`
4. **V30 迁移脚本**建表时只包含:`create_time``tenant_id``delete_flag`3/6 匹配)
5. **缺失列**`create_by``update_by``update_time`3 个字段缺失)
6. **V43 迁移脚本**`V43__add_hisbase_columns_to_clinical_pathway_execution.sql`)已存在,意图修复此问题,但**该迁移在目标数据库上未成功执行**
7. INSERT 时 MyBatis-Plus 生成了包含 `create_by` 的 SQL → **PSQLException: column does not exist**
**涉及文件**
- `healthlink-his-domain/.../clinical/domain/ClinicalPathwayExecution.java` — Entity 继承 HisBaseEntity
- `core-common/.../domain/HisBaseEntity.java` — 基类定义 createBy 等字段
- `V30__remaining_capabilities.sql` — 原始建表(缺 3 列)
- `V43__add_hisbase_columns_to_clinical_pathway_execution.sql` — 修复迁移(未生效)
---
### 三、修复方案
**方案:创建新的 Flyway 迁移脚本**,确保 `clinical_pathway_execution` 表包含 HisBaseEntity 所需的全部列。
**修改文件**:新建 `V2026_0612__fix_clinical_pathway_execution_hisbase_columns.sql`
```sql
-- Fix Bug #748: clinical_pathway_execution 缺少 HisBaseEntity 列
-- V43 迁移未在目标数据库执行,此处重新添加缺失列
ALTER TABLE clinical_pathway_execution ADD COLUMN IF NOT EXISTS create_by VARCHAR(64) DEFAULT '';
ALTER TABLE clinical_pathway_execution ADD COLUMN IF NOT EXISTS update_by VARCHAR(64) DEFAULT '';
ALTER TABLE clinical_pathway_execution ADD COLUMN IF NOT EXISTS update_time TIMESTAMP;
```
**要点**
- 只添加 V30 缺失的 3 列(`create_by``update_by``update_time`),不碰已有列
- 使用 `ADD COLUMN IF NOT EXISTS` 保证幂等性
- `create_time``tenant_id``delete_flag` 已在 V30 中存在,不需要重复添加
- 新版本号 `V2026_0612` 高于所有现有迁移,确保被执行
**无需修改 Java 代码**——Entity 和 Mapper 都是正确的,问题纯粹是数据库迁移未执行。
---
### 四、路由决策
**FIXER: xunyu荀彧 / DBA**
**REASON**: 本 Bug 是纯粹的数据库迁移缺失问题——V43 迁移未在目标环境执行,需要 DBA 确认新迁移脚本的创建和验证。不涉及 Java 代码或前端修改,属于数据库结构对齐范畴。
---
## 路由决策
- **FIXER_ID**: xunyu
- **修复 Agent**: xunyu数据库
- **原因**: LLM 分析决策
> ⚠️ 修复人员请先验证以上分析是否正确,再执行修复。