feat(surgery): 完善手术管理功能模块
- 添加手术申请相关API接口,包括根据患者ID查询就诊列表功能 - 在医生工作站界面集成手术申请功能选项卡 - 实现手术管理页面的完整功能,包括手术申请的增删改查 - 添加手术排期、开始、完成等状态流转功能 - 优化手术管理页面表格展示,增加手术类型、等级、计划时间等字段 - 实现手术申请表单的完整编辑和查看模式 - 集成患者信息和就诊记录关联功能 - 添加手术室、医生、护士等资源选择功能 - 更新系统依赖配置,添加core-common模块 - 优化图标资源和manifest配置文件 - 调整患者档案和门诊记录相关状态枚举
This commit is contained in:
215
手术申请医生科室字段保存问题解决方案.md
Normal file
215
手术申请医生科室字段保存问题解决方案.md
Normal file
@@ -0,0 +1,215 @@
|
||||
# 手术申请医生科室字段保存问题解决方案
|
||||
|
||||
## 问题确认
|
||||
数据库中只保存了 ID 字段(`apply_doctor_id`、`apply_dept_id`),但没有保存名称字段(`apply_doctor_name`、`apply_dept_name`)。
|
||||
|
||||
## 根本原因
|
||||
**数据库表中缺少 `apply_doctor_name` 和 `apply_dept_name` 这两个字段!**
|
||||
|
||||
虽然 MyBatis 映射文件和实体类都配置了这些字段,但如果数据库表中不存在这些列,MyBatis 在插入时会静默忽略这些字段(不会报错),导致只有 ID 被保存。
|
||||
|
||||
## 解决步骤
|
||||
|
||||
### 步骤 1:执行数据库迁移脚本(必须!)
|
||||
|
||||
使用 Navicat Premium 17 执行以下 SQL:
|
||||
|
||||
```sql
|
||||
-- 方法1:使用 IF NOT EXISTS 语法(推荐)
|
||||
ALTER TABLE public.cli_surgery ADD COLUMN IF NOT EXISTS apply_doctor_name VARCHAR(100);
|
||||
COMMENT ON COLUMN public.cli_surgery.apply_doctor_name IS '申请医生姓名';
|
||||
|
||||
ALTER TABLE public.cli_surgery ADD COLUMN IF NOT EXISTS apply_dept_name VARCHAR(100);
|
||||
COMMENT ON COLUMN public.cli_surgery.apply_dept_name IS '申请科室名称';
|
||||
|
||||
-- 验证字段是否添加成功
|
||||
SELECT column_name, data_type, character_maximum_length
|
||||
FROM information_schema.columns
|
||||
WHERE table_name = 'cli_surgery'
|
||||
AND column_name IN ('apply_doctor_name', 'apply_dept_name');
|
||||
```
|
||||
|
||||
**预期结果**:
|
||||
```
|
||||
apply_doctor_name | character varying | 100
|
||||
apply_dept_name | character varying | 100
|
||||
```
|
||||
|
||||
### 步骤 2:重启后端服务
|
||||
|
||||
执行数据库迁移后,必须重启后端服务以重新加载表结构。
|
||||
|
||||
### 步骤 3:新增手术并查看日志
|
||||
|
||||
1. 打开后端控制台或日志文件
|
||||
2. 在前端新增一条手术记录
|
||||
3. 查看后端日志,应该能看到:
|
||||
|
||||
```
|
||||
设置申请医生信息 - doctorId: 123, doctorName: 张医生, deptId: 456, deptName: 普外科
|
||||
前端提交的数据 - applyDoctorId: 123, applyDoctorName: 张医生, applyDeptId: 456, applyDeptName: 普外科
|
||||
准备插入手术记录 - applyDoctorId: 123, applyDoctorName: 张医生, applyDeptId: 456, deptName: 普外科
|
||||
准备插入手术记录 - applyDoctorId: 123, applyDoctorName: 张医生, applyDeptId: 456, deptName: 普外科
|
||||
插入后查询结果 - applyDoctorId: 123, applyDoctorName: 张医生, applyDeptId: 456, deptName: 普外科
|
||||
手术记录插入成功 - surgeryId: 1234567890123456789, surgeryNo: OP202501051234
|
||||
```
|
||||
|
||||
**关键检查点**:
|
||||
- `准备插入手术记录` 这行日志中,`applyDoctorName` 和 `applyDeptName` 必须有值(不能为 null)
|
||||
- `插入后查询结果` 这行日志中,这两个字段也必须有值
|
||||
|
||||
### 步骤 4:验证数据库
|
||||
|
||||
执行以下 SQL 查询最新插入的记录:
|
||||
|
||||
```sql
|
||||
SELECT
|
||||
id,
|
||||
surgery_no,
|
||||
apply_doctor_id,
|
||||
apply_doctor_name,
|
||||
apply_dept_id,
|
||||
apply_dept_name,
|
||||
surgery_name,
|
||||
create_time
|
||||
FROM public.cli_surgery
|
||||
WHERE delete_flag = '0'
|
||||
ORDER BY create_time DESC
|
||||
LIMIT 1;
|
||||
```
|
||||
|
||||
**预期结果**:
|
||||
- `apply_doctor_id`:有值(例如:123)
|
||||
- `apply_doctor_name`:有值(例如:张医生)
|
||||
- `apply_dept_id`:有值(例如:456)
|
||||
- `apply_dept_name`:有值(例如:普外科)
|
||||
|
||||
### 步骤 5:测试前端显示
|
||||
|
||||
1. 刷新手术管理页面
|
||||
2. 查看列表中是否显示申请医生和申请科室列
|
||||
3. 点击"查看"或"编辑"按钮,检查详情对话框是否显示这些信息
|
||||
|
||||
## 常见问题和解决
|
||||
|
||||
### 问题 1:执行 SQL 后报错 "column does not exist"
|
||||
|
||||
**原因**:数据库表结构可能不同,或者表名不是 `cli_surgery`
|
||||
|
||||
**解决**:先执行以下 SQL 检查表名:
|
||||
|
||||
```sql
|
||||
SELECT table_name
|
||||
FROM information_schema.tables
|
||||
WHERE table_name LIKE '%surgery%'
|
||||
AND table_schema = 'public';
|
||||
```
|
||||
|
||||
### 问题 2:执行 SQL 后字段仍然不存在
|
||||
|
||||
**原因**:可能是权限问题或 SQL 语法问题
|
||||
|
||||
**解决**:尝试使用更简单的方式:
|
||||
|
||||
```sql
|
||||
-- 先检查表结构
|
||||
\d public.cli_surgery
|
||||
|
||||
-- 手动添加字段(如果不存在)
|
||||
-- 注意:如果字段已存在,这个语句会报错,这是正常的
|
||||
ALTER TABLE public.cli_surgery ADD COLUMN apply_doctor_name VARCHAR(100);
|
||||
ALTER TABLE public.cli_surgery ADD COLUMN apply_dept_name VARCHAR(100);
|
||||
```
|
||||
|
||||
### 问题 3:字段添加成功,但插入时仍然为空
|
||||
|
||||
**原因**:MyBatis 或 MyBatis-Plus 配置问题
|
||||
|
||||
**解决**:
|
||||
1. 检查实体类字段是否有 `@TableField` 注解
|
||||
2. 检查字段名是否与数据库列名一致
|
||||
3. 查看后端日志中的 `插入后查询结果`
|
||||
|
||||
### 问题 4:后端日志显示字段为 null
|
||||
|
||||
**原因**:后端代码中 `applyDoctorName` 或 `applyDeptName` 被设置为 null
|
||||
|
||||
**解决**:
|
||||
1. 检查 `SecurityUtils.getLoginUser().getUser().getNickName()` 是否返回 null
|
||||
2. 检查 `SecurityUtils.getLoginUser().getOrgId()` 是否返回 null
|
||||
3. 检查 `organizationService.getById(orgId)` 是否返回 null
|
||||
|
||||
## 验证清单
|
||||
|
||||
- [ ] 数据库迁移脚本已执行
|
||||
- [ ] 数据库字段已添加(步骤 1 验证 SQL 有结果)
|
||||
- [ ] 后端服务已重启
|
||||
- [ ] 后端日志显示 `准备插入手术记录` 且字段有值
|
||||
- [ ] 后端日志显示 `插入后查询结果` 且字段有值
|
||||
- [ ] 数据库查询显示字段有值(步骤 4)
|
||||
- [ ] 前端列表正确显示
|
||||
- [ ] 前端详情正确显示
|
||||
|
||||
## 调试 SQL 脚本
|
||||
|
||||
如果需要手动测试插入功能,可以执行:
|
||||
|
||||
```sql
|
||||
-- 测试插入(确保字段存在)
|
||||
INSERT INTO public.cli_surgery (
|
||||
surgery_no,
|
||||
patient_id,
|
||||
encounter_id,
|
||||
apply_doctor_id,
|
||||
apply_doctor_name,
|
||||
apply_dept_id,
|
||||
apply_dept_name,
|
||||
surgery_name,
|
||||
status_enum,
|
||||
delete_flag,
|
||||
create_time,
|
||||
update_time
|
||||
) VALUES (
|
||||
'TEST202501050002',
|
||||
(SELECT id FROM public.adm_patient WHERE delete_flag = '0' LIMIT 1),
|
||||
(SELECT id FROM public.adm_encounter WHERE delete_flag = '0' LIMIT 1),
|
||||
999,
|
||||
'手动测试医生',
|
||||
999,
|
||||
'手动测试科室',
|
||||
'手动测试手术',
|
||||
0,
|
||||
'0',
|
||||
NOW(),
|
||||
NOW()
|
||||
);
|
||||
|
||||
-- 查询刚才插入的数据
|
||||
SELECT
|
||||
surgery_no,
|
||||
apply_doctor_id,
|
||||
apply_doctor_name,
|
||||
apply_dept_id,
|
||||
apply_dept_name,
|
||||
surgery_name
|
||||
FROM public.cli_surgery
|
||||
WHERE surgery_no = 'TEST202501050002';
|
||||
|
||||
-- 清理测试数据
|
||||
-- DELETE FROM public.cli_surgery WHERE surgery_no = 'TEST202501050002';
|
||||
```
|
||||
|
||||
## 联系支持
|
||||
|
||||
如果以上步骤都无法解决问题,请提供:
|
||||
|
||||
1. **数据库表结构查询结果**:
|
||||
```sql
|
||||
\d public.cli_surgery
|
||||
```
|
||||
|
||||
2. **后端日志**:特别是 `准备插入手术记录` 和 `插入后查询结果` 这两行
|
||||
|
||||
3. **数据库查询结果**:执行步骤 4 中的 SQL,告诉我结果
|
||||
|
||||
4. **错误信息**:如果有任何错误提示
|
||||
Reference in New Issue
Block a user