feat(operating-room): 添加手术室类型和所属科室字段
- 新增手术室类型字段支持急诊、择期、日间、复合手术室四种类型 - 添加所属科室字段实现科室级别资源管理 - 前端列表页面新增类型和所属科室显示列 - 新增类型选择器和科室选择器组件 - 后端实体类和服务类添加对应字段处理逻辑 - 数据库添加room_type_enum字段和相关索引 - 创建手术室类型字典数据和字典项配置 - 生成手术室管理功能说明文档
This commit is contained in:
68467
sql/20251224init脚本(使用Navicat Premium 17导入).sql
Normal file
68467
sql/20251224init脚本(使用Navicat Premium 17导入).sql
Normal file
File diff suppressed because one or more lines are too long
33
sql/CheckTicketStatus.java
Normal file
33
sql/CheckTicketStatus.java
Normal file
@@ -0,0 +1,33 @@
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.Statement;
|
||||
|
||||
public class CheckTicketStatus {
|
||||
public static void main(String[] args) {
|
||||
String url = "jdbc:postgresql://192.168.110.252:15432/postgresql?currentSchema=hisdev&characterEncoding=UTF-8&client_encoding=UTF-8";
|
||||
String user = "postgresql";
|
||||
String password = "Jchl1528";
|
||||
|
||||
try {
|
||||
Class.forName("org.postgresql.Driver");
|
||||
Connection conn = DriverManager.getConnection(url, user, password);
|
||||
Statement stmt = conn.createStatement();
|
||||
ResultSet rs = stmt.executeQuery("SELECT id, status, delete_flag FROM clinical_ticket WHERE id = 1");
|
||||
|
||||
if (rs.next()) {
|
||||
System.out.println("Ticket ID: " + rs.getLong("id"));
|
||||
System.out.println("Status: " + rs.getString("status"));
|
||||
System.out.println("Delete Flag: " + rs.getString("delete_flag"));
|
||||
} else {
|
||||
System.out.println("Ticket ID 1 not found");
|
||||
}
|
||||
|
||||
rs.close();
|
||||
stmt.close();
|
||||
conn.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
11
sql/add_new_fields_to_cli_surgery.sql
Normal file
11
sql/add_new_fields_to_cli_surgery.sql
Normal file
@@ -0,0 +1,11 @@
|
||||
-- 添加新字段到cli_surgery表
|
||||
ALTER TABLE cli_surgery ADD COLUMN emergency_flag int2 DEFAULT 0;
|
||||
ALTER TABLE cli_surgery ADD COLUMN implant_flag int2 DEFAULT 0;
|
||||
ALTER TABLE cli_surgery ADD COLUMN operating_room_confirm_time timestamp;
|
||||
ALTER TABLE cli_surgery ADD COLUMN operating_room_confirm_user varchar(100);
|
||||
|
||||
-- 添加字段注释
|
||||
COMMENT ON COLUMN cli_surgery.emergency_flag IS '急诊标志 0-否 1-是';
|
||||
COMMENT ON COLUMN cli_surgery.implant_flag IS '植入高值耗材标志 0-否 1-是';
|
||||
COMMENT ON COLUMN cli_surgery.operating_room_confirm_time IS '手术室确认时间';
|
||||
COMMENT ON COLUMN cli_surgery.operating_room_confirm_user IS '手术室确认人';
|
||||
182
sql/add_operating_room_type_fields.sql
Normal file
182
sql/add_operating_room_type_fields.sql
Normal file
@@ -0,0 +1,182 @@
|
||||
-- 为手术室管理表添加类型和所属科室字段(PostgreSQL版本)
|
||||
-- 作者: 系统管理员
|
||||
-- 日期: 2026-01-09
|
||||
-- 说明: 添加手术室类型字段,区分不同类型的手术室(急诊、择期、日间、复合手术室)
|
||||
|
||||
-- 1. 检查并添加手术室类型字段到 adm_operating_room 表
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = 'public'
|
||||
AND table_name = 'adm_operating_room'
|
||||
AND column_name = 'room_type_enum'
|
||||
) THEN
|
||||
ALTER TABLE adm_operating_room
|
||||
ADD COLUMN room_type_enum INTEGER DEFAULT 2;
|
||||
|
||||
COMMENT ON COLUMN adm_operating_room.room_type_enum IS
|
||||
'手术室类型:1-急诊手术室,2-择期手术室,3-日间手术室,4-复合手术室';
|
||||
|
||||
RAISE NOTICE '已添加字段 room_type_enum';
|
||||
ELSE
|
||||
RAISE NOTICE '字段 room_type_enum 已存在,跳过添加';
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- 2. 更新现有数据的默认值为择期手术室(2)
|
||||
UPDATE adm_operating_room
|
||||
SET room_type_enum = 2
|
||||
WHERE room_type_enum IS NULL;
|
||||
|
||||
-- 3. 检查并添加索引以提高查询性能
|
||||
DO $$
|
||||
BEGIN
|
||||
-- 检查并添加 room_type_enum 索引
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM pg_indexes
|
||||
WHERE schemaname = 'public'
|
||||
AND tablename = 'adm_operating_room'
|
||||
AND indexname = 'idx_room_type'
|
||||
) THEN
|
||||
CREATE INDEX idx_room_type ON adm_operating_room(room_type_enum);
|
||||
RAISE NOTICE '已创建索引 idx_room_type';
|
||||
ELSE
|
||||
RAISE NOTICE '索引 idx_room_type 已存在,跳过创建';
|
||||
END IF;
|
||||
|
||||
-- 检查并添加 organization_id 索引
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM pg_indexes
|
||||
WHERE schemaname = 'public'
|
||||
AND tablename = 'adm_operating_room'
|
||||
AND indexname = 'idx_org_id'
|
||||
) THEN
|
||||
CREATE INDEX idx_org_id ON adm_operating_room(organization_id);
|
||||
RAISE NOTICE '已创建索引 idx_org_id';
|
||||
ELSE
|
||||
RAISE NOTICE '索引 idx_org_id 已存在,跳过创建';
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- 4. 检查并插入手术室类型字典数据
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM sys_dict_type
|
||||
WHERE dict_type = 'operating_room_type'
|
||||
) THEN
|
||||
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark)
|
||||
VALUES ('手术室类型', 'operating_room_type', '0', 'system', NOW(), '手术室类型字典');
|
||||
RAISE NOTICE '已添加字典类型 operating_room_type';
|
||||
ELSE
|
||||
RAISE NOTICE '字典类型 operating_room_type 已存在,跳过添加';
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- 5. 检查并插入手术室类型字典项数据
|
||||
DO $$
|
||||
BEGIN
|
||||
-- 检查字典项是否已存在,避免重复插入
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM sys_dict_data
|
||||
WHERE dict_type = 'operating_room_type'
|
||||
AND dict_value = '1'
|
||||
) THEN
|
||||
INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, status, create_by, create_time, remark)
|
||||
VALUES ('room_type_emergency', 1, '急诊手术室', '1', 'operating_room_type', '0', 'system', NOW(), '用于急诊手术的手术室');
|
||||
RAISE NOTICE '已添加字典项:急诊手术室';
|
||||
ELSE
|
||||
RAISE NOTICE '字典项:急诊手术室 已存在,跳过添加';
|
||||
END IF;
|
||||
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM sys_dict_data
|
||||
WHERE dict_type = 'operating_room_type'
|
||||
AND dict_value = '2'
|
||||
) THEN
|
||||
INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, status, create_by, create_time, remark)
|
||||
VALUES ('room_type_elective', 2, '择期手术室', '2', 'operating_room_type', '0', 'system', NOW(), '用于择期手术的手术室');
|
||||
RAISE NOTICE '已添加字典项:择期手术室';
|
||||
ELSE
|
||||
RAISE NOTICE '字典项:择期手术室 已存在,跳过添加';
|
||||
END IF;
|
||||
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM sys_dict_data
|
||||
WHERE dict_type = 'operating_room_type'
|
||||
AND dict_value = '3'
|
||||
) THEN
|
||||
INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, status, create_by, create_time, remark)
|
||||
VALUES ('room_type_day_surgery', 3, '日间手术室', '3', 'operating_room_type', '0', 'system', NOW(), '用于日间手术的手术室');
|
||||
RAISE NOTICE '已添加字典项:日间手术室';
|
||||
ELSE
|
||||
RAISE NOTICE '字典项:日间手术室 已存在,跳过添加';
|
||||
END IF;
|
||||
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM sys_dict_data
|
||||
WHERE dict_type = 'operating_room_type'
|
||||
AND dict_value = '4'
|
||||
) THEN
|
||||
INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, status, create_by, create_time, remark)
|
||||
VALUES ('room_type_hybrid', 4, '复合手术室', '4', 'operating_room_type', '0', 'system', NOW(), '用于复合手术的手术室');
|
||||
RAISE NOTICE '已添加字典项:复合手术室';
|
||||
ELSE
|
||||
RAISE NOTICE '字典项:复合手术室 已存在,跳过添加';
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- 6. 验证修改 - 查看新增的字段
|
||||
SELECT
|
||||
table_name,
|
||||
column_name,
|
||||
data_type,
|
||||
is_nullable,
|
||||
column_default,
|
||||
col_description(pgc_catalog.oid, pg_namespace.oid, pg_class.oid, pg_attribute.attnum) AS column_comment
|
||||
FROM
|
||||
information_schema.columns
|
||||
WHERE
|
||||
table_schema = 'public'
|
||||
AND table_name = 'adm_operating_room'
|
||||
AND column_name = 'room_type_enum';
|
||||
|
||||
-- 7. 显示所有手术室及其类型
|
||||
SELECT
|
||||
id,
|
||||
bus_no AS "手术室编码",
|
||||
name AS "手术室名称",
|
||||
CASE room_type_enum
|
||||
WHEN 1 THEN '急诊手术室'
|
||||
WHEN 2 THEN '择期手术室'
|
||||
WHEN 3 THEN '日间手术室'
|
||||
WHEN 4 THEN '复合手术室'
|
||||
ELSE '未知'
|
||||
END AS "手术室类型",
|
||||
organization_id AS "所属科室ID",
|
||||
status_enum AS "状态",
|
||||
create_time AS "创建时间"
|
||||
FROM
|
||||
adm_operating_room
|
||||
ORDER BY
|
||||
display_order, create_time DESC;
|
||||
|
||||
-- 8. 验证字典数据
|
||||
SELECT * FROM sys_dict_type WHERE dict_type = 'operating_room_type';
|
||||
SELECT * FROM sys_dict_data WHERE dict_type = 'operating_room_type' ORDER BY dict_sort;
|
||||
|
||||
-- 回滚脚本(如需撤销修改,请执行以下语句):
|
||||
-- DROP INDEX IF EXISTS idx_room_type ON adm_operating_room;
|
||||
-- DROP INDEX IF EXISTS idx_org_id ON adm_operating_room;
|
||||
-- DELETE FROM sys_dict_data WHERE dict_type = 'operating_room_type';
|
||||
-- DELETE FROM sys_dict_type WHERE dict_type = 'operating_room_type';
|
||||
-- ALTER TABLE adm_operating_room DROP COLUMN IF EXISTS room_type_enum;
|
||||
188
sql/check_activity_definition.sql
Normal file
188
sql/check_activity_definition.sql
Normal file
@@ -0,0 +1,188 @@
|
||||
-- ============================================
|
||||
-- 诊疗项目数据检查SQL语句
|
||||
-- ============================================
|
||||
|
||||
-- 1. 查询所有诊疗项目(基础查询)
|
||||
SELECT
|
||||
T1.id,
|
||||
T1.bus_no,
|
||||
T1.name AS advice_name,
|
||||
T1.py_str,
|
||||
T1.wb_str,
|
||||
T1.status_enum,
|
||||
T1.pricing_flag,
|
||||
T1.delete_flag,
|
||||
T1.org_id,
|
||||
T1.category_code,
|
||||
T1.type_enum AS activity_type
|
||||
FROM wor_activity_definition AS T1
|
||||
WHERE T1.delete_flag = '0'
|
||||
ORDER BY T1.id;
|
||||
|
||||
-- 2. 查询状态为ACTIVE的诊疗项目(status_enum = 1)
|
||||
SELECT
|
||||
T1.id,
|
||||
T1.bus_no,
|
||||
T1.name AS advice_name,
|
||||
T1.status_enum,
|
||||
T1.pricing_flag,
|
||||
T1.org_id
|
||||
FROM wor_activity_definition AS T1
|
||||
WHERE T1.delete_flag = '0'
|
||||
AND T1.status_enum = 1
|
||||
ORDER BY T1.id;
|
||||
|
||||
-- 3. 查询有划价标记的诊疗项目(pricing_flag = 1)
|
||||
SELECT
|
||||
T1.id,
|
||||
T1.bus_no,
|
||||
T1.name AS advice_name,
|
||||
T1.pricing_flag,
|
||||
T1.status_enum
|
||||
FROM wor_activity_definition AS T1
|
||||
WHERE T1.delete_flag = '0'
|
||||
AND T1.status_enum = 1
|
||||
AND (T1.pricing_flag = 1 OR T1.pricing_flag IS NULL)
|
||||
ORDER BY T1.id;
|
||||
|
||||
-- 4. 查询关联了费用定价表的诊疗项目
|
||||
SELECT
|
||||
T1.id,
|
||||
T1.bus_no,
|
||||
T1.name AS advice_name,
|
||||
T2.id AS charge_item_definition_id,
|
||||
T2.instance_table,
|
||||
T2.status_enum AS charge_status
|
||||
FROM wor_activity_definition AS T1
|
||||
LEFT JOIN adm_charge_item_definition AS T2
|
||||
ON T2.instance_id = T1.ID
|
||||
AND T2.delete_flag = '0'
|
||||
AND T2.status_enum = 1
|
||||
AND T2.instance_table = 'wor_activity_definition'
|
||||
WHERE T1.delete_flag = '0'
|
||||
AND T1.status_enum = 1
|
||||
ORDER BY T1.id;
|
||||
|
||||
-- 5. 完整查询(模拟后端实际执行的SQL,用于门诊划价)
|
||||
-- 注意:需要替换 #{statusEnum} 为实际值(通常是 1),#{activityTableName} 为 'wor_activity_definition'
|
||||
SELECT DISTINCT ON (T1.ID)
|
||||
T1.tenant_id,
|
||||
3 AS advice_type,
|
||||
T1.bus_no AS bus_no,
|
||||
T1.category_code AS category_code,
|
||||
'' AS pharmacology_category_code,
|
||||
1 AS part_percent,
|
||||
0 AS unit_conversion_ratio,
|
||||
null AS part_attribute_enum,
|
||||
null AS tho_part_attribute_enum,
|
||||
null AS skin_test_flag,
|
||||
null AS inject_flag,
|
||||
T1.ID AS advice_definition_id,
|
||||
T1.NAME AS advice_name,
|
||||
T1.bus_no AS advice_bus_no,
|
||||
T1.py_str AS py_str,
|
||||
T1.wb_str AS wb_str,
|
||||
T1.yb_no AS yb_no,
|
||||
'' AS product_name,
|
||||
T1.type_enum AS activity_type,
|
||||
'' AS unit_code,
|
||||
'' AS min_unit_code,
|
||||
'' AS volume,
|
||||
'' AS method_code,
|
||||
'' AS rate_code,
|
||||
T1.org_id AS org_id,
|
||||
T1.location_id AS location_id,
|
||||
'' AS dose,
|
||||
'' AS dose_unit_code,
|
||||
'' AS supplier,
|
||||
null AS supplier_id,
|
||||
'' AS manufacturer,
|
||||
T2.ID AS charge_item_definition_id,
|
||||
T2.instance_table AS advice_table_name,
|
||||
T3.organization_id AS position_id,
|
||||
0 AS restricted_flag,
|
||||
'' AS restricted_scope,
|
||||
'' AS dosage_instruction,
|
||||
T1.chrgitm_lv as chrgitm_lv
|
||||
FROM wor_activity_definition AS T1
|
||||
LEFT JOIN adm_charge_item_definition AS T2
|
||||
ON T2.instance_id = T1.ID
|
||||
AND T2.delete_flag = '0'
|
||||
AND T2.status_enum = 1
|
||||
AND T2.instance_table = 'wor_activity_definition'
|
||||
LEFT JOIN adm_organization_location AS T3
|
||||
ON T3.activity_definition_id = T1.ID
|
||||
AND T3.delete_flag = '0'
|
||||
AND (CURRENT_TIME :: time (6) BETWEEN T3.start_time AND T3.end_time)
|
||||
WHERE T1.delete_flag = '0'
|
||||
AND (T1.pricing_flag = 1 OR T1.pricing_flag IS NULL)
|
||||
AND T1.status_enum = 1
|
||||
ORDER BY T1.ID;
|
||||
|
||||
-- 6. 统计查询 - 查看各状态的数量
|
||||
SELECT
|
||||
COUNT(*) AS total_count,
|
||||
COUNT(CASE WHEN status_enum = 1 THEN 1 END) AS active_count,
|
||||
COUNT(CASE WHEN pricing_flag = 1 THEN 1 END) AS pricing_flag_count,
|
||||
COUNT(CASE WHEN pricing_flag IS NULL THEN 1 END) AS pricing_flag_null_count
|
||||
FROM wor_activity_definition
|
||||
WHERE delete_flag = '0';
|
||||
|
||||
-- 7. 检查是否有费用定价关联
|
||||
SELECT
|
||||
COUNT(DISTINCT T1.id) AS activity_count,
|
||||
COUNT(DISTINCT T2.id) AS charge_item_count,
|
||||
COUNT(DISTINCT CASE WHEN T2.id IS NOT NULL THEN T1.id END) AS linked_count
|
||||
FROM wor_activity_definition AS T1
|
||||
LEFT JOIN adm_charge_item_definition AS T2
|
||||
ON T2.instance_id = T1.ID
|
||||
AND T2.delete_flag = '0'
|
||||
AND T2.status_enum = 1
|
||||
AND T2.instance_table = 'wor_activity_definition'
|
||||
WHERE T1.delete_flag = '0'
|
||||
AND T1.status_enum = 1;
|
||||
|
||||
-- 8. 按科室查询诊疗项目(如果前端传了organizationId)
|
||||
-- 注意:需要替换 #{organizationId} 为实际的科室ID
|
||||
-- SELECT DISTINCT ON (T1.ID)
|
||||
-- T1.id,
|
||||
-- T1.name AS advice_name,
|
||||
-- T1.org_id,
|
||||
-- T2.id AS charge_item_definition_id
|
||||
-- FROM wor_activity_definition AS T1
|
||||
-- LEFT JOIN adm_charge_item_definition AS T2
|
||||
-- ON T2.instance_id = T1.ID
|
||||
-- AND T2.delete_flag = '0'
|
||||
-- AND T2.status_enum = 1
|
||||
-- AND T2.instance_table = 'wor_activity_definition'
|
||||
-- WHERE T1.delete_flag = '0'
|
||||
-- AND (T1.pricing_flag = 1 OR T1.pricing_flag IS NULL)
|
||||
-- AND T1.status_enum = 1
|
||||
-- AND T1.org_id = #{organizationId} -- 替换为实际科室ID
|
||||
-- ORDER BY T1.ID;
|
||||
|
||||
-- 9. 模糊查询(模拟前端搜索)
|
||||
-- 注意:需要替换 #{searchKey} 为实际的搜索关键字
|
||||
-- SELECT DISTINCT ON (T1.ID)
|
||||
-- T1.id,
|
||||
-- T1.name AS advice_name,
|
||||
-- T1.py_str,
|
||||
-- T1.wb_str
|
||||
-- FROM wor_activity_definition AS T1
|
||||
-- LEFT JOIN adm_charge_item_definition AS T2
|
||||
-- ON T2.instance_id = T1.ID
|
||||
-- AND T2.delete_flag = '0'
|
||||
-- AND T2.status_enum = 1
|
||||
-- AND T2.instance_table = 'wor_activity_definition'
|
||||
-- WHERE T1.delete_flag = '0'
|
||||
-- AND (T1.pricing_flag = 1 OR T1.pricing_flag IS NULL)
|
||||
-- AND T1.status_enum = 1
|
||||
-- AND (
|
||||
-- T1.advice_name LIKE '%' || #{searchKey} || '%'
|
||||
-- OR T1.py_str LIKE '%' || #{searchKey} || '%'
|
||||
-- OR T1.wb_str LIKE '%' || #{searchKey} || '%'
|
||||
-- )
|
||||
-- ORDER BY T1.ID;
|
||||
|
||||
|
||||
|
||||
10
sql/check_surgery_fields.sql
Normal file
10
sql/check_surgery_fields.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
-- 检查手术表中所有字段是否存在
|
||||
SELECT
|
||||
column_name,
|
||||
data_type,
|
||||
character_maximum_length,
|
||||
is_nullable
|
||||
FROM information_schema.columns
|
||||
WHERE table_name = 'cli_surgery'
|
||||
AND column_name LIKE '%name%'
|
||||
ORDER BY column_name;
|
||||
67
sql/create_clinical_ticket_table.sql
Normal file
67
sql/create_clinical_ticket_table.sql
Normal file
@@ -0,0 +1,67 @@
|
||||
-- 创建序列
|
||||
CREATE SEQUENCE "hisdev"."clinical_ticket_id_seq"
|
||||
INCREMENT 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 9223372036854775807
|
||||
START 1
|
||||
CACHE 1;
|
||||
|
||||
-- 创建号源表clinical_ticket
|
||||
CREATE TABLE "hisdev"."clinical_ticket" (
|
||||
"id" bigint NOT NULL DEFAULT nextval('hisdev.clinical_ticket_id_seq'::regclass),
|
||||
"bus_no" varchar(50) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
|
||||
"department" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
|
||||
"doctor" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
|
||||
"ticket_type" varchar(20) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
|
||||
"time" varchar(50) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
|
||||
"status" varchar(20) COLLATE "pg_catalog"."default" NOT NULL DEFAULT 'unbooked'::character varying,
|
||||
"fee" varchar(20) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
|
||||
"patient_id" bigint,
|
||||
"patient_name" varchar(100) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
|
||||
"medical_card" varchar(50) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
|
||||
"phone" varchar(20) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
|
||||
"appointment_date" timestamptz(6),
|
||||
"appointment_time" timestamptz(6),
|
||||
"department_id" bigint,
|
||||
"doctor_id" bigint,
|
||||
"create_by" varchar(32) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
|
||||
"create_time" timestamptz(6) NOT NULL,
|
||||
"update_by" varchar(32) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
|
||||
"update_time" timestamptz(6),
|
||||
"remark" varchar(500) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
|
||||
"delete_flag" char(1) COLLATE "pg_catalog"."default" NOT NULL DEFAULT 0,
|
||||
"tenant_id" bigint NOT NULL,
|
||||
PRIMARY KEY ("id")
|
||||
)
|
||||
WITH (
|
||||
OIDS = FALSE
|
||||
)
|
||||
;
|
||||
|
||||
ALTER SEQUENCE "hisdev"."clinical_ticket_id_seq" OWNED BY "hisdev"."clinical_ticket"."id";
|
||||
|
||||
-- 添加注释
|
||||
COMMENT ON TABLE "hisdev"."clinical_ticket" IS '号源管理表';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."id" IS 'ID';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."bus_no" IS '号源编码';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."department" IS '科室名称';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."doctor" IS '医生姓名';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."ticket_type" IS '号源类型 (普通/专家)';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."time" IS '挂号时间';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."status" IS '状态 (unbooked:未预约, booked:已预约, checked:已取号, cancelled:已取消, locked:已锁定)';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."fee" IS '挂号费';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."patient_id" IS '患者ID';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."patient_name" IS '患者姓名';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."medical_card" IS '就诊卡号';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."phone" IS '手机号';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."appointment_date" IS '预约日期';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."appointment_time" IS '预约时间';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."department_id" IS '科室ID';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."doctor_id" IS '医生ID';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."create_by" IS '创建人';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."create_time" IS '创建时间';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."update_by" IS '更新人';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."update_time" IS '更新时间';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."remark" IS '备注';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."delete_flag" IS '删除状态';
|
||||
COMMENT ON COLUMN "hisdev"."clinical_ticket"."tenant_id" IS '租户ID';
|
||||
82
sql/fill_missing_surgery_name_fields.sql
Normal file
82
sql/fill_missing_surgery_name_fields.sql
Normal file
@@ -0,0 +1,82 @@
|
||||
-- 修复已存在的手术记录中缺失的名称字段
|
||||
-- 注意:这只是一个示例,实际执行前请根据您的数据库表结构调整
|
||||
|
||||
-- 填充患者姓名
|
||||
UPDATE public.cli_surgery s
|
||||
SET patient_name = p.name
|
||||
FROM public.adm_patient p
|
||||
WHERE s.patient_id = p.id
|
||||
AND s.patient_name IS NULL
|
||||
AND s.delete_flag = '0';
|
||||
|
||||
-- 填充主刀医生姓名
|
||||
UPDATE public.cli_surgery s
|
||||
SET main_surgeon_name = u.nick_name
|
||||
FROM public.sys_user u
|
||||
WHERE s.main_surgeon_id = u.user_id
|
||||
AND s.main_surgeon_name IS NULL
|
||||
AND s.delete_flag = '0';
|
||||
|
||||
-- 填充麻醉医生姓名
|
||||
UPDATE public.cli_surgery s
|
||||
SET anesthetist_name = u.nick_name
|
||||
FROM public.sys_user u
|
||||
WHERE s.anesthetist_id = u.user_id
|
||||
AND s.anesthetist_name IS NULL
|
||||
AND s.delete_flag = '0';
|
||||
|
||||
-- 填充助手1姓名
|
||||
UPDATE public.cli_surgery s
|
||||
SET assistant_1_name = u.nick_name
|
||||
FROM public.sys_user u
|
||||
WHERE s.assistant_1_id = u.user_id
|
||||
AND s.assistant_1_name IS NULL
|
||||
AND s.delete_flag = '0';
|
||||
|
||||
-- 填充助手2姓名
|
||||
UPDATE public.cli_surgery s
|
||||
SET assistant_2_name = u.nick_name
|
||||
FROM public.sys_user u
|
||||
WHERE s.assistant_2_id = u.user_id
|
||||
AND s.assistant_2_name IS NULL
|
||||
AND s.delete_flag = '0';
|
||||
|
||||
-- 填充巡回护士姓名
|
||||
UPDATE public.cli_surgery s
|
||||
SET scrub_nurse_name = u.nick_name
|
||||
FROM public.sys_user u
|
||||
WHERE s.scrub_nurse_id = u.user_id
|
||||
AND s.scrub_nurse_name IS NULL
|
||||
AND s.delete_flag = '0';
|
||||
|
||||
-- 填充手术室名称
|
||||
UPDATE public.cli_surgery s
|
||||
SET operating_room_name = r.name
|
||||
FROM public.cli_operating_room r
|
||||
WHERE s.operating_room_id = r.id
|
||||
AND s.operating_room_name IS NULL
|
||||
AND s.delete_flag = '0';
|
||||
|
||||
-- 填充执行科室名称
|
||||
UPDATE public.cli_surgery s
|
||||
SET org_name = o.name
|
||||
FROM public.adm_organization o
|
||||
WHERE s.org_id = o.id
|
||||
AND s.org_name IS NULL
|
||||
AND s.delete_flag = '0';
|
||||
|
||||
-- 填充申请科室名称
|
||||
UPDATE public.cli_surgery s
|
||||
SET apply_dept_name = o.name
|
||||
FROM public.adm_organization o
|
||||
WHERE s.apply_dept_id = o.id
|
||||
AND s.apply_dept_name IS NULL
|
||||
AND s.delete_flag = '0';
|
||||
|
||||
-- 填充申请医生姓名
|
||||
UPDATE public.cli_surgery s
|
||||
SET apply_doctor_name = u.nick_name
|
||||
FROM public.sys_user u
|
||||
WHERE s.apply_doctor_id = u.user_id
|
||||
AND s.apply_doctor_name IS NULL
|
||||
AND s.delete_flag = '0';
|
||||
148
sql/fix_operating_room_type_fields.sql
Normal file
148
sql/fix_operating_room_type_fields.sql
Normal file
@@ -0,0 +1,148 @@
|
||||
-- 修复脚本:完成手术室类型和所属科室字段的添加(版本2)
|
||||
-- 说明: 此脚本会跳过已存在的字段,继续完成剩余的任务
|
||||
-- 日期: 2026-01-09
|
||||
|
||||
-- 设置客户端编码
|
||||
SET client_encoding = 'UTF8';
|
||||
|
||||
-- 1. 先检查字段是否存在,如果不存在则添加
|
||||
-- 使用异常处理来避免重复添加的错误
|
||||
DO $$
|
||||
BEGIN
|
||||
-- 尝试添加字段,如果字段已存在则捕获异常并忽略
|
||||
BEGIN
|
||||
ALTER TABLE adm_operating_room
|
||||
ADD COLUMN room_type_enum INTEGER DEFAULT 2;
|
||||
|
||||
COMMENT ON COLUMN adm_operating_room.room_type_enum IS
|
||||
'手术室类型:1-急诊手术室,2-择期手术室,3-日间手术室,4-复合手术室';
|
||||
|
||||
RAISE NOTICE '已添加字段 room_type_enum';
|
||||
EXCEPTION
|
||||
WHEN duplicate_column THEN
|
||||
RAISE NOTICE '字段 room_type_enum 已存在,跳过添加';
|
||||
END;
|
||||
END $$;
|
||||
|
||||
-- 2. 更新现有数据的默认值为择期手术室(2)
|
||||
UPDATE adm_operating_room
|
||||
SET room_type_enum = 2
|
||||
WHERE room_type_enum IS NULL;
|
||||
|
||||
RAISE NOTICE '已更新现有记录的默认值';
|
||||
|
||||
-- 3. 检查并添加索引以提高查询性能
|
||||
DO $$
|
||||
BEGIN
|
||||
-- 添加 room_type_enum 索引
|
||||
BEGIN
|
||||
CREATE INDEX idx_room_type ON adm_operating_room(room_type_enum);
|
||||
RAISE NOTICE '已创建索引 idx_room_type';
|
||||
EXCEPTION
|
||||
WHEN duplicate_table THEN
|
||||
RAISE NOTICE '索引 idx_room_type 已存在,跳过创建';
|
||||
END;
|
||||
|
||||
-- 添加 organization_id 索引
|
||||
BEGIN
|
||||
CREATE INDEX idx_org_id ON adm_operating_room(organization_id);
|
||||
RAISE NOTICE '已创建索引 idx_org_id';
|
||||
EXCEPTION
|
||||
WHEN duplicate_table THEN
|
||||
RAISE NOTICE '索引 idx_org_id 已存在,跳过创建';
|
||||
END;
|
||||
END $$;
|
||||
|
||||
-- 4. 检查并插入手术室类型字典数据
|
||||
DO $$
|
||||
BEGIN
|
||||
-- 插入字典类型
|
||||
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark)
|
||||
VALUES ('手术室类型', 'operating_room_type', '0', 'system', NOW(), '手术室类型字典')
|
||||
ON CONFLICT (dict_type) DO NOTHING;
|
||||
|
||||
RAISE NOTICE '已处理字典类型 operating_room_type';
|
||||
END $$;
|
||||
|
||||
-- 5. 插入手术室类型字典项数据
|
||||
DO $$
|
||||
BEGIN
|
||||
-- 插入字典项,使用 ON CONFLICT 避免重复(不包含dict_code字段,使用自增)
|
||||
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, status, create_by, create_time, remark)
|
||||
VALUES (1, '急诊手术室', '1', 'operating_room_type', '0', 'system', NOW(), '用于急诊手术的手术室')
|
||||
ON CONFLICT (dict_type, dict_value) DO NOTHING;
|
||||
|
||||
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, status, create_by, create_time, remark)
|
||||
VALUES (2, '择期手术室', '2', 'operating_room_type', '0', 'system', NOW(), '用于择期手术的手术室')
|
||||
ON CONFLICT (dict_type, dict_value) DO NOTHING;
|
||||
|
||||
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, status, create_by, create_time, remark)
|
||||
VALUES (3, '日间手术室', '3', 'operating_room_type', '0', 'system', NOW(), '用于日间手术的手术室')
|
||||
ON CONFLICT (dict_type, dict_value) DO NOTHING;
|
||||
|
||||
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, status, create_by, create_time, remark)
|
||||
VALUES (4, '复合手术室', '4', 'operating_room_type', '0', 'system', NOW(), '用于复合手术的手术室')
|
||||
ON CONFLICT (dict_type, dict_value) DO NOTHING;
|
||||
|
||||
RAISE NOTICE '已处理所有字典项';
|
||||
END $$;
|
||||
|
||||
-- 6. 验证修改 - 查看新增的字段
|
||||
SELECT
|
||||
'字段验证' AS 验证项,
|
||||
table_name,
|
||||
column_name,
|
||||
data_type,
|
||||
is_nullable,
|
||||
column_default,
|
||||
col_description(pgc_catalog.oid, pg_namespace.oid, pg_class.oid, pg_attribute.attnum) AS column_comment
|
||||
FROM
|
||||
information_schema.columns
|
||||
WHERE
|
||||
table_schema = 'public'
|
||||
AND table_name = 'adm_operating_room'
|
||||
AND column_name = 'room_type_enum';
|
||||
|
||||
-- 7. 显示所有手术室及其类型
|
||||
SELECT
|
||||
'数据验证' AS 验证项,
|
||||
id,
|
||||
bus_no AS "手术室编码",
|
||||
name AS "手术室名称",
|
||||
CASE room_type_enum
|
||||
WHEN 1 THEN '急诊手术室'
|
||||
WHEN 2 THEN '择期手术室'
|
||||
WHEN 3 THEN '日间手术室'
|
||||
WHEN 4 THEN '复合手术室'
|
||||
ELSE '未知'
|
||||
END AS "手术室类型",
|
||||
organization_id AS "所属科室ID",
|
||||
status_enum AS "状态",
|
||||
create_time AS "创建时间"
|
||||
FROM
|
||||
adm_operating_room
|
||||
ORDER BY
|
||||
display_order, create_time DESC;
|
||||
|
||||
-- 8. 验证字典数据
|
||||
SELECT
|
||||
'字典类型验证' AS 验证项,
|
||||
* FROM sys_dict_type WHERE dict_type = 'operating_room_type';
|
||||
|
||||
SELECT
|
||||
'字典项验证' AS 验证项,
|
||||
* FROM sys_dict_data WHERE dict_type = 'operating_room_type' ORDER BY dict_sort;
|
||||
|
||||
-- 9. 验证索引
|
||||
SELECT
|
||||
'索引验证' AS 验证项,
|
||||
indexname,
|
||||
indexdef
|
||||
FROM
|
||||
pg_indexes
|
||||
WHERE
|
||||
schemaname = 'public'
|
||||
AND tablename = 'adm_operating_room'
|
||||
AND indexname IN ('idx_room_type', 'idx_org_id');
|
||||
|
||||
RAISE NOTICE '脚本执行完成!请查看上述验证结果确认所有操作均已成功执行。';
|
||||
56
sql/verify_surgery_name_fields.sql
Normal file
56
sql/verify_surgery_name_fields.sql
Normal file
@@ -0,0 +1,56 @@
|
||||
-- 验证手术表中所有名称字段的填充情况
|
||||
SELECT
|
||||
id,
|
||||
surgery_no,
|
||||
patient_id,
|
||||
patient_name,
|
||||
main_surgeon_id,
|
||||
main_surgeon_name,
|
||||
anesthetist_id,
|
||||
anesthetist_name,
|
||||
assistant_1_id,
|
||||
assistant_1_name,
|
||||
assistant_2_id,
|
||||
assistant_2_name,
|
||||
scrub_nurse_id,
|
||||
scrub_nurse_name,
|
||||
operating_room_id,
|
||||
operating_room_name,
|
||||
org_id,
|
||||
org_name,
|
||||
apply_doctor_id,
|
||||
apply_doctor_name,
|
||||
apply_dept_id,
|
||||
apply_dept_name,
|
||||
create_time
|
||||
FROM public.cli_surgery
|
||||
WHERE delete_flag = '0'
|
||||
ORDER BY create_time DESC
|
||||
LIMIT 10;
|
||||
|
||||
-- 统计名称字段的填充情况
|
||||
SELECT
|
||||
COUNT(*) as total_count,
|
||||
COUNT(patient_name) as has_patient_name_count,
|
||||
COUNT(main_surgeon_name) as has_main_surgeon_name_count,
|
||||
COUNT(anesthetist_name) as has_anesthetist_name_count,
|
||||
COUNT(assistant_1_name) as has_assistant_1_name_count,
|
||||
COUNT(assistant_2_name) as has_assistant_2_name_count,
|
||||
COUNT(scrub_nurse_name) as has_scrub_nurse_name_count,
|
||||
COUNT(operating_room_name) as has_operating_room_name_count,
|
||||
COUNT(org_name) as has_org_name_count,
|
||||
COUNT(apply_doctor_name) as has_apply_doctor_name_count,
|
||||
COUNT(apply_dept_name) as has_apply_dept_name_count,
|
||||
-- 计算填写率
|
||||
ROUND(COUNT(patient_name) * 100.0 / COUNT(*), 2) as patient_name_fill_rate,
|
||||
ROUND(COUNT(main_surgeon_name) * 100.0 / COUNT(*), 2) as main_surgeon_name_fill_rate,
|
||||
ROUND(COUNT(anesthetist_name) * 100.0 / COUNT(*), 2) as anesthetist_name_fill_rate,
|
||||
ROUND(COUNT(assistant_1_name) * 100.0 / COUNT(*), 2) as assistant_1_name_fill_rate,
|
||||
ROUND(COUNT(assistant_2_name) * 100.0 / COUNT(*), 2) as assistant_2_name_fill_rate,
|
||||
ROUND(COUNT(scrub_nurse_name) * 100.0 / COUNT(*), 2) as scrub_nurse_name_fill_rate,
|
||||
ROUND(COUNT(operating_room_name) * 100.0 / COUNT(*), 2) as operating_room_name_fill_rate,
|
||||
ROUND(COUNT(org_name) * 100.0 / COUNT(*), 2) as org_name_fill_rate,
|
||||
ROUND(COUNT(apply_doctor_name) * 100.0 / COUNT(*), 2) as apply_doctor_name_fill_rate,
|
||||
ROUND(COUNT(apply_dept_name) * 100.0 / COUNT(*), 2) as apply_dept_name_fill_rate
|
||||
FROM public.cli_surgery
|
||||
WHERE delete_flag = '0';
|
||||
18
sql/填充手术人员字段姓名.sql
Normal file
18
sql/填充手术人员字段姓名.sql
Normal file
@@ -0,0 +1,18 @@
|
||||
SELECT
|
||||
id,
|
||||
surgery_no,
|
||||
main_surgeon_id,
|
||||
main_surgeon_name,
|
||||
anesthetist_id,
|
||||
anesthetist_name,
|
||||
assistant_1_id,
|
||||
assistant_1_name,
|
||||
assistant_2_id,
|
||||
assistant_2_name,
|
||||
operating_room_id,
|
||||
operating_room_name,
|
||||
org_id,
|
||||
org_name
|
||||
FROM cli_surgery
|
||||
WHERE delete_flag = '0'
|
||||
ORDER BY create_time DESC
|
||||
25
sql/检查surgery_indication字段.sql
Normal file
25
sql/检查surgery_indication字段.sql
Normal file
@@ -0,0 +1,25 @@
|
||||
-- 检查cli_surgery表中是否有surgery_indication字段
|
||||
SELECT
|
||||
column_name,
|
||||
data_type,
|
||||
is_nullable,
|
||||
column_default
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = 'public'
|
||||
AND table_name = 'cli_surgery'
|
||||
AND column_name = 'surgery_indication';
|
||||
|
||||
-- 查看cli_surgery表的所有字段
|
||||
SELECT
|
||||
column_name,
|
||||
data_type,
|
||||
is_nullable,
|
||||
column_default
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = 'public'
|
||||
AND table_name = 'cli_surgery'
|
||||
ORDER BY ordinal_position;
|
||||
|
||||
-- 如果字段不存在,添加该字段
|
||||
-- ALTER TABLE cli_surgery ADD COLUMN surgery_indication TEXT;
|
||||
-- COMMENT ON COLUMN cli_surgery.surgery_indication IS '手术指征';
|
||||
113
sql/检查和填充手术人员字段.sql
Normal file
113
sql/检查和填充手术人员字段.sql
Normal file
@@ -0,0 +1,113 @@
|
||||
-- 检查和填充手术表中的人员字段
|
||||
-- 执行时间:2025-01-05
|
||||
|
||||
-- 1. 查询最近10条手术记录,检查人员字段的填写情况
|
||||
SELECT
|
||||
id,
|
||||
surgery_no,
|
||||
main_surgeon_id,
|
||||
main_surgeon_name,
|
||||
anesthetist_id,
|
||||
anesthetist_name,
|
||||
assistant_1_id,
|
||||
assistant_1_name,
|
||||
assistant_2_id,
|
||||
assistant_2_name,
|
||||
operating_room_id,
|
||||
operating_room_name,
|
||||
org_id,
|
||||
org_name,
|
||||
create_time
|
||||
FROM public.cli_surgery
|
||||
WHERE delete_flag = '0'
|
||||
ORDER BY create_time DESC
|
||||
LIMIT 10;
|
||||
|
||||
-- 2. 统计人员字段的填写情况
|
||||
SELECT
|
||||
COUNT(*) as total_count,
|
||||
COUNT(main_surgeon_name) as has_main_surgeon_name_count,
|
||||
COUNT(anesthetist_name) as has_anesthetist_name_count,
|
||||
COUNT(assistant_1_name) as has_assistant_1_name_count,
|
||||
COUNT(assistant_2_name) as has_assistant_2_name_count,
|
||||
COUNT(operating_room_name) as has_operating_room_name_count,
|
||||
COUNT(org_name) as has_org_name_count,
|
||||
-- 计算填写率
|
||||
ROUND(COUNT(main_surgeon_name) * 100.0 / COUNT(*), 2) as main_surgeon_name_fill_rate,
|
||||
ROUND(COUNT(anesthetist_name) * 100.0 / COUNT(*), 2) as anesthetist_name_fill_rate,
|
||||
ROUND(COUNT(assistant_1_name) * 100.0 / COUNT(*), 2) as assistant_1_name_fill_rate,
|
||||
ROUND(COUNT(assistant_2_name) * 100.0 / COUNT(*), 2) as assistant_2_name_fill_rate,
|
||||
ROUND(COUNT(operating_room_name) * 100.0 / COUNT(*), 2) as operating_room_name_fill_rate,
|
||||
ROUND(COUNT(org_name) * 100.0 / COUNT(*), 2) as org_name_fill_rate
|
||||
FROM public.cli_surgery
|
||||
WHERE delete_flag = '0';
|
||||
|
||||
-- 3. 根据 ID 查询医生表,填充主刀医生姓名
|
||||
-- 注意:这只是一个示例,实际需要根据您的医生表结构调整
|
||||
UPDATE public.cli_surgery s
|
||||
SET main_surgeon_name = u.nick_name
|
||||
FROM public.sys_user u
|
||||
WHERE s.main_surgeon_id = u.user_id
|
||||
AND s.main_surgeon_name IS NULL
|
||||
AND s.delete_flag = '0';
|
||||
|
||||
-- 4. 根据 ID 查询医生表,填充麻醉医生姓名
|
||||
UPDATE public.cli_surgery s
|
||||
SET anesthetist_name = u.nick_name
|
||||
FROM public.sys_user u
|
||||
WHERE s.anesthetist_id = u.user_id
|
||||
AND s.anesthetist_name IS NULL
|
||||
AND s.delete_flag = '0';
|
||||
|
||||
-- 5. 根据 ID 查询医生表,填充助手1姓名
|
||||
UPDATE public.cli_surgery s
|
||||
SET assistant_1_name = u.nick_name
|
||||
FROM public.sys_user u
|
||||
WHERE s.assistant_1_id = u.user_id
|
||||
AND s.assistant_1_name IS NULL
|
||||
AND s.delete_flag = '0';
|
||||
|
||||
-- 6. 根据 ID 查询医生表,填充助手2姓名
|
||||
UPDATE public.cli_surgery s
|
||||
SET assistant_2_name = u.nick_name
|
||||
FROM public.sys_user u
|
||||
WHERE s.assistant_2_id = u.user_id
|
||||
AND s.assistant_2_name IS NULL
|
||||
AND s.delete_flag = '0';
|
||||
|
||||
-- 7. 根据 ID 查询手术室表,填充手术室名称
|
||||
UPDATE public.cli_surgery s
|
||||
SET operating_room_name = r.name
|
||||
FROM public.cli_operating_room r
|
||||
WHERE s.operating_room_id = r.id
|
||||
AND s.operating_room_name IS NULL
|
||||
AND s.delete_flag = '0';
|
||||
|
||||
-- 8. 根据 ID 查询机构表,填充执行科室名称
|
||||
UPDATE public.cli_surgery s
|
||||
SET org_name = o.name
|
||||
FROM public.adm_organization o
|
||||
WHERE s.org_id = o.id
|
||||
AND s.org_name IS NULL
|
||||
AND s.delete_flag = '0';
|
||||
|
||||
-- 9. 再次查询,验证更新结果
|
||||
SELECT
|
||||
id,
|
||||
surgery_no,
|
||||
main_surgeon_id,
|
||||
main_surgeon_name,
|
||||
anesthetist_id,
|
||||
anesthetist_name,
|
||||
assistant_1_id,
|
||||
assistant_1_name,
|
||||
assistant_2_id,
|
||||
assistant_2_name,
|
||||
operating_room_id,
|
||||
operating_room_name,
|
||||
org_id,
|
||||
org_name
|
||||
FROM public.cli_surgery
|
||||
WHERE delete_flag = '0'
|
||||
ORDER BY create_time DESC
|
||||
LIMIT 10;
|
||||
58
sql/测试手术表插入.sql
Normal file
58
sql/测试手术表插入.sql
Normal file
@@ -0,0 +1,58 @@
|
||||
-- 测试手术表的插入,验证 apply_doctor_name 和 apply_dept_name 字段
|
||||
-- 执行时间:2025-01-05
|
||||
|
||||
-- 1. 先检查字段是否存在
|
||||
SELECT
|
||||
column_name,
|
||||
data_type,
|
||||
character_maximum_length,
|
||||
is_nullable
|
||||
FROM information_schema.columns
|
||||
WHERE table_name = 'cli_surgery'
|
||||
AND column_name IN ('apply_doctor_id', 'apply_doctor_name', 'apply_dept_id', 'apply_dept_name')
|
||||
ORDER BY column_name;
|
||||
|
||||
-- 2. 插入测试数据(如果字段存在)
|
||||
INSERT INTO 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 (
|
||||
'TEST202501050001',
|
||||
(SELECT id FROM public.adm_patient WHERE delete_flag = '0' LIMIT 1),
|
||||
(SELECT id FROM public.adm_encounter WHERE delete_flag = '0' LIMIT 1),
|
||||
1,
|
||||
'测试医生',
|
||||
1,
|
||||
'测试科室',
|
||||
'测试手术',
|
||||
0,
|
||||
'0',
|
||||
NOW(),
|
||||
NOW()
|
||||
)
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- 3. 查询刚才插入的测试数据
|
||||
SELECT
|
||||
id,
|
||||
surgery_no,
|
||||
apply_doctor_id,
|
||||
apply_doctor_name,
|
||||
apply_dept_id,
|
||||
apply_dept_name,
|
||||
surgery_name
|
||||
FROM public.cli_surgery
|
||||
WHERE surgery_no = 'TEST202501050001';
|
||||
|
||||
-- 4. 清理测试数据(如果测试成功)
|
||||
-- DELETE FROM public.cli_surgery WHERE surgery_no = 'TEST202501050001';
|
||||
59
sql/验证手术指征字段返回数据.sql
Normal file
59
sql/验证手术指征字段返回数据.sql
Normal file
@@ -0,0 +1,59 @@
|
||||
-- 验证手术指征字段的数据
|
||||
-- 执行时间:2025-01-06
|
||||
-- 说明:查询手术数据,验证surgery_indication字段是否有值
|
||||
|
||||
-- 1. 查询最近的手术记录,检查surgery_indication字段
|
||||
SELECT
|
||||
id,
|
||||
surgery_no,
|
||||
surgery_name,
|
||||
surgery_indication,
|
||||
patient_name,
|
||||
apply_doctor_name,
|
||||
status_enum,
|
||||
create_time
|
||||
FROM cli_surgery
|
||||
WHERE delete_flag = '0'
|
||||
ORDER BY create_time DESC
|
||||
LIMIT 5;
|
||||
|
||||
-- 2. 检查surgery_indication字段是否为NULL
|
||||
SELECT
|
||||
COUNT(*) as total_count,
|
||||
COUNT(surgery_indication) as has_surgery_indication_count,
|
||||
COUNT(*) - COUNT(surgery_indication) as null_count,
|
||||
ROUND(COUNT(surgery_indication) * 100.0 / COUNT(*), 2) as fill_rate
|
||||
FROM cli_surgery
|
||||
WHERE delete_flag = '0';
|
||||
|
||||
-- 3. 查询有surgery_indication数据的记录
|
||||
SELECT
|
||||
id,
|
||||
surgery_no,
|
||||
surgery_name,
|
||||
surgery_indication,
|
||||
LENGTH(surgery_indication) as text_length,
|
||||
SUBSTRING(surgery_indication, 1, 100) as preview_text
|
||||
FROM cli_surgery
|
||||
WHERE delete_flag = '0'
|
||||
AND surgery_indication IS NOT NULL
|
||||
AND surgery_indication != ''
|
||||
ORDER BY create_time DESC
|
||||
LIMIT 3;
|
||||
|
||||
-- 4. 验证Mapper XML中的SQL查询
|
||||
-- 模拟getSurgeryDetail接口的查询
|
||||
SELECT
|
||||
s.id,
|
||||
s.surgery_no,
|
||||
s.surgery_name,
|
||||
s.surgery_indication,
|
||||
s.patient_id,
|
||||
p.name as patient_name,
|
||||
s.apply_doctor_id,
|
||||
s.apply_doctor_name,
|
||||
s.status_enum
|
||||
FROM cli_surgery s
|
||||
LEFT JOIN adm_patient p ON s.patient_id = p.id
|
||||
WHERE s.id = (SELECT id FROM cli_surgery WHERE delete_flag = '0' ORDER BY create_time DESC LIMIT 1)
|
||||
AND s.delete_flag = '0';
|
||||
4
sql/验证手术申请医生科室数据.sql
Normal file
4
sql/验证手术申请医生科室数据.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
SELECT column_name, data_type
|
||||
FROM information_schema.columns
|
||||
WHERE table_name = 'cli_surgery'
|
||||
AND column_name IN ('apply_doctor_name', 'apply_dept_name');
|
||||
Reference in New Issue
Block a user