4.4 KiB
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 后引入的字段与数据库表结构不匹配的问题。
二、根因分析
完整因果链:
- Entity 层:
ClinicalPathwayExecution extends HisBaseEntity(healthlink-his-domain/.../clinical/domain/ClinicalPathwayExecution.java) - HisBaseEntity 定义了 6 个字段:
createBy、createTime、updateBy、updateTime、tenantId、deleteFlag - MyBatis-Plus 自动映射为列名:
create_by、create_time、update_by、update_time、tenant_id、delete_flag - V30 迁移脚本建表时只包含:
create_time、tenant_id、delete_flag(3/6 匹配) - 缺失列:
create_by、update_by、update_time(3 个字段缺失) - V43 迁移脚本(
V43__add_hisbase_columns_to_clinical_pathway_execution.sql)已存在,意图修复此问题,但该迁移在目标数据库上未成功执行 - INSERT 时 MyBatis-Plus 生成了包含
create_by的 SQL → PSQLException: column does not exist
涉及文件:
healthlink-his-domain/.../clinical/domain/ClinicalPathwayExecution.java— Entity 继承 HisBaseEntitycore-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
-- 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 分析决策
⚠️ 修复人员请先验证以上分析是否正确,再执行修复。