Files
his/MD/bugs/BUG_748_ANALYSIS.md

4.4 KiB
Raw Blame History

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 HisBaseEntityhealthlink-his-domain/.../clinical/domain/ClinicalPathwayExecution.java
  2. HisBaseEntity 定义了 6 个字段:createBycreateTimeupdateByupdateTimetenantIddeleteFlag
  3. MyBatis-Plus 自动映射为列名:create_bycreate_timeupdate_byupdate_timetenant_iddelete_flag
  4. V30 迁移脚本建表时只包含:create_timetenant_iddelete_flag3/6 匹配)
  5. 缺失列create_byupdate_byupdate_time3 个字段缺失)
  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

-- 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_byupdate_byupdate_time),不碰已有列
  • 使用 ADD COLUMN IF NOT EXISTS 保证幂等性
  • create_timetenant_iddelete_flag 已在 V30 中存在,不需要重复添加
  • 新版本号 V2026_0612 高于所有现有迁移,确保被执行

无需修改 Java 代码——Entity 和 Mapper 都是正确的,问题纯粹是数据库迁移未执行。


四、路由决策

FIXER: xunyu荀彧 / DBA

REASON: 本 Bug 是纯粹的数据库迁移缺失问题——V43 迁移未在目标环境执行,需要 DBA 确认新迁移脚本的创建和验证。不涉及 Java 代码或前端修改,属于数据库结构对齐范畴。


路由决策

  • FIXER_ID: xunyu
  • 修复 Agent: xunyu数据库
  • 原因: LLM 分析决策

⚠️ 修复人员请先验证以上分析是否正确,再执行修复。