Files
his/md/手术申请医生科室数据保存问题排查指南.md
chenqi cb268fe26d feat(operating-room): 添加手术室类型和所属科室字段
- 新增手术室类型字段支持急诊、择期、日间、复合手术室四种类型
- 添加所属科室字段实现科室级别资源管理
- 前端列表页面新增类型和所属科室显示列
- 新增类型选择器和科室选择器组件
- 后端实体类和服务类添加对应字段处理逻辑
- 数据库添加room_type_enum字段和相关索引
- 创建手术室类型字典数据和字典项配置
- 生成手术室管理功能说明文档
2026-01-13 10:03:57 +08:00

6.1 KiB
Raw Blame History

手术申请医生科室数据保存问题排查指南

问题现象

新增手术后,列表页面和编辑查看页面没有显示申请医生名称和科室名称。

排查步骤

步骤1检查数据库字段是否存在

执行以下 SQL 检查字段是否已添加:

SELECT column_name, data_type 
FROM information_schema.columns 
WHERE table_name = 'cli_surgery' 
AND column_name IN ('apply_doctor_name', 'apply_dept_name');

预期结果:应该返回两条记录

apply_doctor_name | character varying
apply_dept_name    | character varying

如果结果为空:说明字段未添加,需要执行迁移脚本。

步骤2检查数据库迁移脚本是否执行

执行迁移脚本(如果未执行):

-- 检查并添加申请医生姓名字段
DO $$
BEGIN
    IF NOT EXISTS (
        SELECT 1 
        FROM information_schema.columns 
        WHERE table_name = 'cli_surgery' 
        AND column_name = 'apply_doctor_name'
    ) THEN
        ALTER TABLE public.cli_surgery ADD COLUMN apply_doctor_name VARCHAR(100);
        COMMENT ON COLUMN public.cli_surgery.apply_doctor_name IS '申请医生姓名';
    END IF;
END $$;

-- 检查并添加申请科室名称字段
DO $$
BEGIN
    IF NOT EXISTS (
        SELECT 1 
        FROM information_schema.columns 
        WHERE table_name = 'cli_surgery' 
        AND column_name = 'apply_dept_name'
    ) THEN
        ALTER TABLE public.cli_surgery ADD COLUMN apply_dept_name VARCHAR(100);
        COMMENT ON COLUMN public.cli_surgery.apply_dept_name IS '申请科室名称';
    END IF;
END $$;

步骤3重启后端服务

执行数据库迁移后,必须重启后端服务。

步骤4新增手术并查看后端日志

  1. 打开后端控制台或日志文件
  2. 在前端新增一条手术记录
  3. 查看后端日志,应该能看到以下信息:
设置申请医生信息 - doctorId: 123, doctorName: 张医生, deptId: 456, deptName: 普外科
前端提交的数据 - applyDoctorId: 123, applyDoctorName: 张医生, applyDeptId: 456, applyDeptName: 普外科
准备插入手术记录 - applyDoctorId: 123, applyDoctorName: 张医生, applyDeptId: 456, deptName: 普外科
手术记录插入成功 - surgeryId: 1234567890123456789, surgeryNo: OP202501051234

如果看不到这些日志:说明代码没有执行到这里,检查是否有异常抛出。

如果看到 "前端提交的数据 - applyDoctorName: null":说明前端提交的数据为空,需要检查前端代码。

步骤5检查数据库中是否保存成功

执行以下 SQL 查询最新插入的记录:

SELECT 
    id,
    surgery_no,
    patient_id,
    apply_doctor_id,
    apply_doctor_name,
    apply_dept_id,
    apply_dept_name,
    surgery_name,
    status_enum,
    create_time
FROM public.cli_surgery
WHERE delete_flag = '0'
ORDER BY create_time DESC
LIMIT 5;

如果 apply_doctor_name 和 apply_dept_name 字段为空:说明数据没有保存成功。

如果字段有值:说明保存成功,问题出在前端显示。

步骤6检查前端 API 响应

  1. 打开浏览器开发者工具F12
  2. 切换到 Network 标签
  3. 新增手术
  4. 找到 /clinical-manage/surgery/surgery-page 请求
  5. 点击查看响应内容

检查响应数据中是否包含 applyDoctorNameapplyDeptName 字段。

如果响应中没有这些字段:说明 MyBatis 映射有问题,检查 XML 配置。

如果响应中有这些字段但值为 null说明数据库中为空回到步骤5。

步骤7检查前端表格显示

查看前端代码中的表格列配置:

<el-table-column label="申请医生" align="center" prop="applyDoctorName" width="100" />
<el-table-column label="申请科室" align="center" prop="applyDeptName" width="120" show-overflow-tooltip />

确保 prop 属性与后端返回的字段名一致(注意大小写)。

常见问题和解决方案

问题1数据库字段未添加

症状:后端报错 "column apply_doctor_name does not exist" 解决:执行数据库迁移脚本

问题2后端日志显示 applyDoctorName 为 null

症状:日志中 "前端提交的数据 - applyDoctorName: null" 原因前端提交数据时disabled 字段没有被包含 解决:检查前端 submitForm 函数,确保手动设置了这些字段

问题3数据库中有值但前端不显示

症状:数据库查询有值,前端响应也有值,但表格不显示 原因

  1. 前端 prop 属性名与后端字段名不一致(大小写问题)
  2. 前端数据未正确绑定 解决
  3. 检查 prop 属性名,确保与后端返回的 JSON 字段名一致
  4. 检查浏览器控制台是否有 JavaScript 错误

问题4MyBatis 映射未生效

症状:后端保存成功,但查询时字段为 null 原因XML 映射文件未正确配置 解决

  1. 检查 SurgeryMapper.xml 中的 resultMap 配置
  2. 检查 SQL 查询中是否包含这些字段
  3. 重启后端服务

验证清单

  • 数据库迁移脚本已执行
  • 数据库字段已添加步骤1
  • 后端服务已重启
  • 后端日志显示申请医生信息步骤4
  • 数据库中已保存数据步骤5
  • 前端 API 响应包含这些字段步骤6
  • 前端表格正确显示步骤7

附加 SQL 脚本

查看统计信息

SELECT 
    COUNT(*) as total_count,
    COUNT(apply_doctor_name) as has_doctor_name_count,
    COUNT(apply_dept_name) as has_dept_name_count
FROM public.cli_surgery
WHERE delete_flag = '0';

手动更新测试数据

如果需要手动更新已有的测试数据:

UPDATE public.cli_surgery
SET apply_doctor_name = '测试医生',
    apply_dept_name = '测试科室'
WHERE apply_doctor_name IS NULL
AND delete_flag = '0';

联系支持

如果以上步骤都无法解决问题,请提供以下信息:

  1. 数据库字段查询结果步骤1
  2. 后端日志截图步骤4
  3. 数据库查询结果步骤5
  4. 浏览器 Network 响应截图步骤6
  5. 浏览器 Console 错误信息