Files
his/.agentforge/analysis/bug545_analysis.md

2.0 KiB
Raw Blame History

Bug #545 分析报告:长效诊断标识设置保存就清空

根因定位

保存诊断后,前端调用 getList() 刷新数据,getEncounterDiagnosis SQL 查询未包含 long_term_flag 字段,且 DiagnosisQueryDto 缺少对应属性,导致返回数据中不含 longTermFlag,前端覆盖 form.value.diagnosisList 后下拉框清空。

数据流追踪

  1. 前端用户在 diagnosis.vue 第218-231行的 el-select 下拉框选择"长期有效/临时有效",值绑定到 scope.row.longTermFlag
  2. 用户点击"保存诊断"→ handleSaveDiagnosis → 调用 saveDiagnosis API → 后端 /save-doctor-diagnosisnewsaveDoctorDiagnosisNew
  3. 后端 saveDoctorDiagnosisNew 第376行和第404行已正确保存 encounterDiagnosis.setLongTermFlag(saveDiagnosisChildParam.getLongTermFlag())
  4. 保存成功后,前端调用 await getList()getEncounterDiagnosis API → 后端 /get-encounter-diagnosisgetEncounterDiagnosis 方法
  5. 断点在此: SQL (DoctorStationDiagnosisAppMapper.xml:122-150) SELECT 列表缺少 T1.long_term_flagDTO (DiagnosisQueryDto.java) 缺少 longTermFlag 属性
  6. 前端第351行 form.value.diagnosisList = res.data.filter(...) 用不含 longTermFlag 的数据替换了原有数据
  7. 结果:longTermFlag 变为 undefined,下拉框清空

修复方案

  1. SQL: DoctorStationDiagnosisAppMapper.xml getEncounterDiagnosis 查询新增 T1.long_term_flag AS longTermFlag
  2. DTO: DiagnosisQueryDto.java 新增 private Integer longTermFlag; 属性

Gate 验证

  • Gate A: 根因已定位到具体代码行XML第122-150行SQL缺少字段Java DTO缺少属性
  • Gate B: 已读取所有相关文件(前后端+SQL+DTO+ServiceImpl理解完整数据流
  • Gate C: 修复方案与验收标准一致(保存后刷新列表,长效诊断标识保留不清空)
  • Gate D: 不涉及新增数据库字段(adm_encounter_diagnosis.long_term_flag 已存在Entity 第89行已有定义