3.8 KiB
3.8 KiB
Bug #721 诸葛亮分析报告
文档类型: Bug分析 分析时间: 2026-06-13 01:44:34 分析模型: mimo-v2.5 (LLM深度分析)
基本信息
- Bug #: 721
- 标题: 【影像管理】点击新增检查出现sql语句报错
- 模块: 住院医生工作站
- 提出人: 王栩坤
已定位根因,分析完成。
一、Bug 理解
禅道原文:
Bug #721:【影像管理】点击新增检查出现sql语句报错
重现步骤:登录内科医生1的账号:doctor1 密码:123456进入影像管理→点击新增检查→填写新增影像检查记录→确认 → 出现报错
期望结果:能够正常的新增成功不会出现报错
附图关键信息:
- 错误信息:
ERROR: null value in column "patient_id" of relation "radiology_image_comparison" violates not-null constraint - 失败的 INSERT SQL:
INSERT INTO radiology_image_comparison (id, examination_type, examination_name, body_part, finding_text, conclusion_text, doctor_name, create_by, create_time, tenant_id)— 注意patient_id列根本不在 INSERT 语句中,说明实体的patientId字段始终为 null - 表单弹窗里没有患者ID字段,只有检查类型、检查名称、检查部位等字段
综合总结: 用户在影像对比页面点击"新增检查"时,弹窗表单没有 patientId 字段,提交后后端实体的 patientId 为 null,而数据库表 radiology_image_comparison.patient_id 有 NOT NULL 约束,导致插入失败。
二、根因分析
根因:前后端均缺失 patientId 传递
| 层级 | 问题 |
|---|---|
前端 index.vue |
formData 初始值无 patientId,弹窗表单无患者ID输入,submitForm() 直接提交 formData.value,不含 patientId |
| 后端 Controller | addRecord(@RequestBody RadiologyImageComparison record) 直接 save(),既不校验 patientId 是否为空,也不从页面查询区的 patientId 中获取 |
| 数据库 | radiology_image_comparison.patient_id 列有 NOT NULL 约束,插入空值失败 |
涉及文件:
healthlink-his-ui/src/views/radiologycomparison/index.vue— formData 缺少 patientIdhealthlink-his-server/.../RadiologyComparisonController.java— addRecord 未校验/设置 patientId
三、修复方案
修改 1:前端 index.vue — submitForm() 中补充 patientId
async function submitForm() {
// 补充患者ID(来自页面查询区)
formData.value.patientId = patientId.value ? Number(patientId.value) : null
await addRecord(formData.value)
ElMessage.success('新增成功')
showAdd.value = false
loadData()
}
修改 2:后端 RadiologyComparisonController.java — addRecord 增加参数校验
@PostMapping("/add")
@Transactional(rollbackFor = Exception.class)
public R<?> addRecord(@RequestBody RadiologyImageComparison record) {
if (record.getPatientId() == null) {
return R.fail("患者ID不能为空");
}
record.setCreateTime(new Date());
comparisonService.save(record);
return R.ok(record);
}
修改范围: 2个文件,改动量极小,不破坏现有功能。
四、路由决策
FIXER: guanyu REASON: 后端 Controller 缺少参数校验是核心根因(后端权重更高),前端 formData 传递也需要同步修复,优先由 guanyu 处理后端校验 + 前端联动调整。
路由决策
- FIXER_ID: guanyu
- 修复 Agent: guanyu(后端)
- 原因: 后端 Controller 缺少参数校验是核心根因(后端权重更高),前端 formData 传递也需要同步修复,优先由 guanyu 处理后端校验 + 前端联动调整。**
⚠️ 修复人员请先验证以上分析是否正确,再执行修复。