From 516d2ef2a697599172fc4cfdebd76a8df23058f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=8E=E4=BD=97?= Date: Sat, 13 Jun 2026 01:44:34 +0800 Subject: [PATCH] =?UTF-8?q?docs(bug):=20=E8=AF=B8=E8=91=9B=E4=BA=AE?= =?UTF-8?q?=E5=88=86=E6=9E=90=E6=8A=A5=E5=91=8A=20Bug=20#721?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MD/bugs/BUG_721_ANALYSIS.md | 101 ++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 MD/bugs/BUG_721_ANALYSIS.md diff --git a/MD/bugs/BUG_721_ANALYSIS.md b/MD/bugs/BUG_721_ANALYSIS.md new file mode 100644 index 000000000..3ab228555 --- /dev/null +++ b/MD/bugs/BUG_721_ANALYSIS.md @@ -0,0 +1,101 @@ +# 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 缺少 patientId +- `healthlink-his-server/.../RadiologyComparisonController.java` — addRecord 未校验/设置 patientId + +--- + +### 三、修复方案 + +**修改 1:前端 `index.vue`** — `submitForm()` 中补充 `patientId` + +```js +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` 增加参数校验 + +```java +@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 处理后端校验 + 前端联动调整。** + +> ⚠️ 修复人员请先验证以上分析是否正确,再执行修复。