diff --git a/bug432_analysis.md b/bug432_analysis.md new file mode 100644 index 000000000..1ac83faff --- /dev/null +++ b/bug432_analysis.md @@ -0,0 +1,43 @@ +# Bug #432 分析报告 + +## 根因分析 + +**根因**:后端 `OpCreateScheduleDto` 缺少 `@JsonIgnoreProperties(ignoreUnknown = true)` 注解。 + +Spring Boot 的 Jackson 默认配置 `FAIL_ON_UNKNOWN_PROPERTIES = true`,即反序列化时遇到 DTO 中不存在的字段会抛出 `JsonMappingException: Unrecognized field` 异常。 + +前端 `submitForm()` 使用 `{ ...form }` 展开整个表单对象提交,包含大量 DTO 中不存在的字段: +- `identifierNo`(就诊卡号) +- `patientName`(患者姓名) +- `gender`(性别) +- `age`(年龄) +- `birthDay`(出生日期) +- `orgName`(机构名称) +- `applyDeptName`(申请科室名称) +- `surgeonName`(主刀医生姓名) +- `applyDoctorName`(申请医生姓名) +- `applyTime`(申请时间) +- `surgeryNo`(手术单号) +- `scheduleId`(排程ID,新增时为undefined) +- `orgId`(机构ID,前端显式添加) + +这些字段在后端 `OpCreateScheduleDto` 中均未定义,导致 JSON 反序列化失败,返回 400/500 错误,前端显示"新增手术安排失败"。 + +## 影响范围 + +- **后端文件**:`OpCreateScheduleDto.java` +- **影响接口**:`POST /clinical-manage/surgery-schedule/create`(新增手术安排) +- **影响数据表**:`op_schedule` +- **前端无需修改**:前端提交逻辑正确,问题在后端 DTO 配置 + +## 修复方案 + +在 `OpCreateScheduleDto` 类上添加 `@JsonIgnoreProperties(ignoreUnknown = true)` 注解,使 Jackson 在反序列化时忽略 DTO 中不存在的字段。 + +这是最小侵入性修复(仅添加 1 行注解),不影响现有业务逻辑。 + +## 验证计划 + +1. 修改后运行 Maven 编译确认无语法错误 +2. 部署后按 Bug 步骤操作:新增手术安排 → 查找并选择手术申请 → 填写入室时间 → 保存 +3. 确认保存成功,无报错 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/dto/OpCreateScheduleDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/dto/OpCreateScheduleDto.java index 05554875e..fcc854712 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/dto/OpCreateScheduleDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/dto/OpCreateScheduleDto.java @@ -1,5 +1,6 @@ package com.openhis.web.clinicalmanage.dto; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; @@ -7,6 +8,7 @@ import java.math.BigDecimal; import java.time.LocalDateTime; @Data +@JsonIgnoreProperties(ignoreUnknown = true) public class OpCreateScheduleDto { /** * 申请单ID