docs(bug): 诸葛亮分析报告 Bug #748
This commit is contained in:
97
MD/bugs/BUG_748_ANALYSIS.md
Normal file
97
MD/bugs/BUG_748_ANALYSIS.md
Normal file
@@ -0,0 +1,97 @@
|
||||
# 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 分析决策
|
||||
|
||||
> ⚠️ 修复人员请先验证以上分析是否正确,再执行修复。
|
||||
Reference in New Issue
Block a user