Revert "Fix Bug #550: AI修复"

This reverts commit 16c42ca108.
This commit is contained in:
2026-05-27 08:59:07 +08:00
parent bd14563691
commit 9db5ced4e3
5432 changed files with 778638 additions and 171 deletions

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,16 @@
-- 为 adm_encounter_diagnosis 表添加发病日期和诊断日期字段
-- 执行日期: 2026-03-11
-- 问题: 诊断保存后发病日期和诊断日期不显示
-- 原因: 数据库表缺少这两个字段
-- 添加发病日期字段
ALTER TABLE public.adm_encounter_diagnosis
ADD COLUMN IF NOT EXISTS onset_date date;
COMMENT ON COLUMN public.adm_encounter_diagnosis.onset_date IS '发病日期';
-- 添加诊断日期字段
ALTER TABLE public.adm_encounter_diagnosis
ADD COLUMN IF NOT EXISTS diagnosis_time date;
COMMENT ON COLUMN public.adm_encounter_diagnosis.diagnosis_time IS '诊断日期';

33
sql/CheckTicketStatus.java Executable file
View 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();
}
}
}

View 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 '手术室确认人';

View File

@@ -0,0 +1,90 @@
-- 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_sort, dict_label, dict_value, dict_type, status, create_by, create_time, remark)
VALUES (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_sort, dict_label, dict_value, dict_type, status, create_by, create_time, remark)
VALUES (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_sort, dict_label, dict_value, dict_type, status, create_by, create_time, remark)
VALUES (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_sort, dict_label, dict_value, dict_type, status, create_by, create_time, remark)
VALUES (4, '复合手术室', '4', 'operating_room_type', '0', 'system', NOW(), '用于复合手术的手术室');
RAISE NOTICE '已添加字典项:复合手术室';
ELSE
RAISE NOTICE '字典项:复合手术室 已存在,跳过添加';
END IF;
END $$;
-- 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;

240
sql/bug_318_repair_execute.sql Executable file
View File

@@ -0,0 +1,240 @@
-- ============================================================
-- Bug #318 历史数据修复 - 简化版SQL脚本
-- 为已存在但未生成手术医嘱的手术申请单补齐数据
-- ============================================================
-- 执行说明:
-- 1. 在数据库管理工具中执行(如 DBeaver、pgAdmin
-- 2. 建议先执行查询部分确认数据
-- 3. 备份数据库后再执行修复
-- ============================================================
-- 步骤1: 查看需要修复的记录数
-- ============================================================
SELECT
'需要修复的手术申请单数量' as ,
COUNT(*) as
FROM doc_request_form rf
LEFT JOIN wor_service_request sr ON sr.prescription_no = rf.prescription_no
AND sr.delete_flag = '0'
WHERE rf.type_code = 'PROCEDURE'
AND rf.delete_flag = '0'
AND sr.id IS NULL;
-- 步骤2: 查看详细列表(可选)
-- ============================================================
/*
SELECT
rf.id as request_form_id,
rf.prescription_no as 手术单号,
rf.encounter_id as 就诊ID,
rf.patient_id as 患者ID,
rf.create_time as 申请时间
FROM doc_request_form rf
LEFT JOIN wor_service_request sr ON sr.prescription_no = rf.prescription_no
AND sr.delete_flag = '0'
WHERE rf.type_code = 'PROCEDURE'
AND rf.delete_flag = '0'
AND sr.id IS NULL
ORDER BY rf.create_time DESC
LIMIT 10;
*/
-- 步骤3: 执行修复 - 生成手术医嘱ServiceRequest
-- ============================================================
-- ⚠️ 请在确认备份数据库后执行以下语句
INSERT INTO wor_service_request (
bus_no,
prescription_no,
status_enum,
generate_source_enum,
therapy_enum,
quantity,
unit_code,
category_enum,
patient_id,
requester_id,
encounter_id,
authored_time,
org_id,
content_json,
delete_flag,
create_time,
create_by,
tenant_id
)
SELECT
LPAD(FLOOR(RANDOM() * 10000)::TEXT, 4, '0') as bus_no, -- 生成4位随机数
rf.prescription_no,
1 as status_enum, -- 1-待签发
1 as generate_source_enum, -- 1-医生处方
2 as therapy_enum, -- 2-临时医嘱
1 as quantity,
'' as unit_code,
4 as category_enum, -- 4-手术
rf.patient_id,
rf.requester_id,
rf.encounter_id,
rf.create_time as authored_time,
rf.org_id,
rf.desc_json as content_json, -- 存储手术详情
'0' as delete_flag,
rf.create_time,
rf.requester_id as create_by,
1 as tenant_id
FROM doc_request_form rf
LEFT JOIN wor_service_request sr ON sr.prescription_no = rf.prescription_no
AND sr.delete_flag = '0'
WHERE rf.type_code = 'PROCEDURE'
AND rf.delete_flag = '0'
AND sr.id IS NULL;
-- 步骤4: 查看生成的手术医嘱数量
-- ============================================================
SELECT
'生成的手术医嘱数量' as ,
COUNT(*) as
FROM wor_service_request
WHERE category_enum = 4
AND delete_flag = '0'
AND create_time > CURRENT_TIMESTAMP - INTERVAL '1 hour'; -- 最近1小时生成的
-- 步骤5: 生成手术收费项目ChargeItem
-- ============================================================
-- 先创建临时表存储新生成的ServiceRequest
CREATE TEMPORARY TABLE temp_new_service_requests AS
SELECT
sr.id as service_request_id,
sr.bus_no,
sr.prescription_no,
sr.patient_id,
sr.encounter_id,
sr.requester_id,
sr.create_time,
sr.org_id,
sr.content_json
FROM wor_service_request sr
WHERE sr.category_enum = 4
AND sr.delete_flag = '0'
AND sr.create_time > CURRENT_TIMESTAMP - INTERVAL '1 hour'; -- 最近1小时生成的
-- 插入手术费用收费项目
INSERT INTO adm_charge_item (
bus_no,
status_enum,
generate_source_enum,
patient_id,
context_enum,
encounter_id,
enterer_id,
entered_date,
service_table,
service_id,
product_table,
requesting_org_id,
quantity_value,
quantity_unit,
unit_price,
total_price,
delete_flag,
create_time,
create_by,
tenant_id
)
SELECT
'CI' || t.bus_no as bus_no,
1 as status_enum, -- 1-草稿
1 as generate_source_enum, -- 1-医生处方
t.patient_id,
3 as context_enum, -- 3-诊疗
t.encounter_id,
t.requester_id as enterer_id,
t.create_time as entered_date,
'wor_service_request' as service_table,
t.service_request_id as service_id,
'wor_activity_definition' as product_table,
t.org_id as requesting_org_id,
1 as quantity_value,
'' as quantity_unit,
COALESCE((t.content_json::jsonb->>'surgeryFee')::numeric, 0) as unit_price,
COALESCE((t.content_json::jsonb->>'surgeryFee')::numeric, 0) as total_price,
'0' as delete_flag,
t.create_time,
t.requester_id as create_by,
1 as tenant_id
FROM temp_new_service_requests t
WHERE COALESCE((t.content_json::jsonb->>'surgeryFee')::numeric, 0) >= 0;
-- 插入麻醉费用收费项目(如果有麻醉费用)
INSERT INTO adm_charge_item (
bus_no,
status_enum,
generate_source_enum,
patient_id,
context_enum,
encounter_id,
enterer_id,
entered_date,
service_table,
service_id,
product_table,
requesting_org_id,
quantity_value,
quantity_unit,
unit_price,
total_price,
delete_flag,
create_time,
create_by,
tenant_id
)
SELECT
'CI' || t.bus_no || '_A' as bus_no,
1 as status_enum,
1 as generate_source_enum,
t.patient_id,
3 as context_enum,
t.encounter_id,
t.requester_id as enterer_id,
t.create_time as entered_date,
'wor_service_request' as service_table,
t.service_request_id as service_id,
'wor_activity_definition' as product_table,
t.org_id as requesting_org_id,
1 as quantity_value,
'' as quantity_unit,
(t.content_json::jsonb->>'anesthesiaFee')::numeric as unit_price,
(t.content_json::jsonb->>'anesthesiaFee')::numeric as total_price,
'0' as delete_flag,
t.create_time,
t.requester_id as create_by,
1 as tenant_id
FROM temp_new_service_requests t
WHERE t.content_json::jsonb->>'anesthesiaFee' IS NOT NULL
AND (t.content_json::jsonb->>'anesthesiaFee')::numeric > 0;
-- 步骤6: 验证修复结果
-- ============================================================
SELECT
'手术医嘱总数' as ,
COUNT(*) as
FROM wor_service_request
WHERE category_enum = 4
AND delete_flag = '0';
SELECT
'手术收费项目总数' as ,
COUNT(*) as
FROM adm_charge_item ci
WHERE ci.service_table = 'wor_service_request'
AND EXISTS (
SELECT 1 FROM wor_service_request sr
WHERE sr.id = ci.service_id AND sr.category_enum = 4
);
-- 清理临时表
DROP TABLE IF EXISTS temp_new_service_requests;
-- ============================================================
-- ✓ 修复完成!
-- ============================================================

View File

@@ -0,0 +1,254 @@
-- ========================================================
-- Bug #318 历史数据修复脚本
-- 为已存在但未生成手术医嘱的手术申请单补齐数据
-- ========================================================
-- 1. 查询所有未生成手术医嘱的手术申请单
SELECT
rf.id as request_form_id,
rf.prescription_no,
rf.encounter_id,
rf.patient_id,
rf.requester_id,
rf.create_time,
rf.desc_json
FROM doc_request_form rf
LEFT JOIN wor_service_request sr ON sr.prescription_no = rf.prescription_no
AND sr.delete_flag = '0'
WHERE rf.type_code = 'PROCEDURE' -- 手术申请单
AND rf.delete_flag = '0'
AND sr.id IS NULL -- 没有对应的手术医嘱
ORDER BY rf.create_time DESC;
-- ========================================================
-- 2. 修复脚本:为缺失的手术申请单生成手术医嘱
-- ========================================================
-- 创建临时表存储需要修复的数据
CREATE TEMPORARY TABLE IF NOT EXISTS temp_surgery_repair AS
SELECT
rf.id as request_form_id,
rf.prescription_no,
rf.encounter_id,
rf.patient_id,
rf.requester_id,
rf.create_time,
rf.desc_json,
rf.org_id
FROM doc_request_form rf
LEFT JOIN wor_service_request sr ON sr.prescription_no = rf.prescription_no
AND sr.delete_flag = '0'
WHERE rf.type_code = 'PROCEDURE'
AND rf.delete_flag = '0'
AND sr.id IS NULL;
-- 查看需要修复的记录数
SELECT COUNT(*) as need_repair_count FROM temp_surgery_repair;
-- ========================================================
-- 3. 插入手术医嘱ServiceRequest
-- ========================================================
INSERT INTO wor_service_request (
id,
bus_no,
prescription_no,
status_enum,
generate_source_enum,
therapy_enum,
quantity,
unit_code,
category_enum,
patient_id,
requester_id,
encounter_id,
authored_time,
org_id,
content_json,
delete_flag,
create_time,
create_by
)
SELECT
nextval('wor_service_request_id_seq'), -- 使用序列生成ID
LPAD(FLOOR(RANDOM() * 10000)::TEXT, 4, '0'), -- 生成4位随机bus_no
prescription_no,
1, -- status_enum: 1-待签发(DRAFT)
1, -- generate_source_enum: 1-医生处方
2, -- therapy_enum: 2-临时医嘱(TEMPORARY)
1, -- quantity: 1
'', -- unit_code
4, -- category_enum: 4-手术
patient_id,
requester_id,
encounter_id,
create_time,
org_id,
CASE
WHEN desc_json IS NOT NULL AND desc_json != '' THEN desc_json
ELSE NULL
END, -- content_json: 存储手术详情
'0', -- delete_flag
create_time,
requester_id
FROM temp_surgery_repair;
-- ========================================================
-- 4. 插入手术收费项目ChargeItem
-- ========================================================
-- 首先创建临时表关联新生成的ServiceRequest
CREATE TEMPORARY TABLE IF NOT EXISTS temp_new_service_request AS
SELECT
sr.id as service_request_id,
sr.prescription_no,
sr.patient_id,
sr.encounter_id,
sr.requester_id,
sr.create_time,
sr.org_id,
sr.bus_no,
t.desc_json
FROM wor_service_request sr
JOIN temp_surgery_repair t ON t.prescription_no = sr.prescription_no
WHERE sr.category_enum = 4
AND sr.delete_flag = '0'
AND sr.create_time > NOW() - INTERVAL '1 hour'; -- 只取最近1小时新增的
-- 插入手术费用收费项目
INSERT INTO adm_charge_item (
id,
bus_no,
status_enum,
generate_source_enum,
patient_id,
context_enum,
encounter_id,
enterer_id,
entered_date,
service_table,
service_id,
product_table,
requesting_org_id,
quantity_value,
quantity_unit,
unit_price,
total_price,
delete_flag,
create_time,
create_by
)
SELECT
nextval('adm_charge_item_id_seq'),
'CI' || bus_no,
1, -- status_enum: 1-草稿(DRAFT)
1, -- generate_source_enum: 1-医生处方
patient_id,
3, -- context_enum: 3-诊疗
encounter_id,
requester_id,
create_time,
'wor_service_request', -- service_table
service_request_id, -- service_id
'wor_activity_definition', -- product_table
org_id,
1, -- quantity_value
'', -- quantity_unit
COALESCE(
(desc_json::jsonb->>'surgeryFee')::numeric,
0
), -- unit_price: 从desc_json解析手术费用
COALESCE(
(desc_json::jsonb->>'surgeryFee')::numeric,
0
), -- total_price
'0',
create_time,
requester_id
FROM temp_new_service_request;
-- 插入麻醉费用收费项目(如果有麻醉费用)
INSERT INTO adm_charge_item (
id,
bus_no,
status_enum,
generate_source_enum,
patient_id,
context_enum,
encounter_id,
enterer_id,
entered_date,
service_table,
service_id,
product_table,
requesting_org_id,
quantity_value,
quantity_unit,
unit_price,
total_price,
delete_flag,
create_time,
create_by
)
SELECT
nextval('adm_charge_item_id_seq'),
'CI' || bus_no || '_A',
1,
1,
patient_id,
3,
encounter_id,
requester_id,
create_time,
'wor_service_request',
service_request_id,
'wor_activity_definition',
org_id,
1,
'',
(desc_json::jsonb->>'anesthesiaFee')::numeric,
(desc_json::jsonb->>'anesthesiaFee')::numeric,
'0',
create_time,
requester_id
FROM temp_new_service_request
WHERE desc_json::jsonb->>'anesthesiaFee' IS NOT NULL
AND (desc_json::jsonb->>'anesthesiaFee')::numeric > 0;
-- ========================================================
-- 5. 验证修复结果
-- ========================================================
-- 查看修复后的手术医嘱数量
SELECT
'修复后的手术医嘱数量' as check_item,
COUNT(*) as count
FROM wor_service_request sr
WHERE sr.category_enum = 4
AND sr.delete_flag = '0'
AND EXISTS (
SELECT 1 FROM doc_request_form rf
WHERE rf.prescription_no = sr.prescription_no
AND rf.type_code = 'PROCEDURE'
);
-- 查看修复后的收费项目数量
SELECT
'修复后的手术收费项目数量' as check_item,
COUNT(*) as count
FROM adm_charge_item ci
WHERE ci.service_table = 'wor_service_request'
AND ci.delete_flag = '0'
AND EXISTS (
SELECT 1 FROM wor_service_request sr
WHERE sr.id = ci.service_id
AND sr.category_enum = 4
);
-- 清理临时表
DROP TABLE IF EXISTS temp_surgery_repair;
DROP TABLE IF EXISTS temp_new_service_request;
-- ========================================================
-- 完成!
-- ========================================================

17
sql/bug_318_step1_check.sql Executable file
View File

@@ -0,0 +1,17 @@
-- Bug #318 历史数据修复 - 步骤1查询需要修复的手术申请单
-- 执行此SQL查看有多少手术申请单需要修复
SELECT
rf.id as request_form_id,
rf.prescription_no as ,
rf.encounter_id as ID,
rf.patient_id as ID,
rf.create_time as ,
SUBSTRING(rf.desc_json::text, 1, 100) as
FROM doc_request_form rf
LEFT JOIN wor_service_request sr ON sr.prescription_no = rf.prescription_no
AND sr.delete_flag = '0'
WHERE rf.type_code = 'PROCEDURE' -- 手术申请单
AND rf.delete_flag = '0'
AND sr.id IS NULL -- 没有对应的手术医嘱
ORDER BY rf.create_time DESC;

159
sql/bug_318_step2_repair.sql Executable file
View File

@@ -0,0 +1,159 @@
-- Bug #318 历史数据修复 - 步骤2执行修复
-- ⚠️ 请在执行前备份数据库!
-- =====================================================
-- 步骤 2.1: 创建临时表存储需要修复的手术申请单
-- =====================================================
CREATE TEMPORARY TABLE temp_repair_list AS
SELECT
rf.id as request_form_id,
rf.prescription_no,
rf.encounter_id,
rf.patient_id,
rf.requester_id,
rf.create_time,
rf.org_id,
rf.desc_json
FROM doc_request_form rf
LEFT JOIN wor_service_request sr ON sr.prescription_no = rf.prescription_no
AND sr.delete_flag = '0'
WHERE rf.type_code = 'PROCEDURE'
AND rf.delete_flag = '0'
AND sr.id IS NULL;
-- 查看需要修复的记录数
SELECT COUNT(*) as FROM temp_repair_list;
-- =====================================================
-- 步骤 2.2: 生成手术医嘱ServiceRequest
-- =====================================================
INSERT INTO wor_service_request (
bus_no,
prescription_no,
status_enum,
generate_source_enum,
therapy_enum,
quantity,
unit_code,
category_enum,
patient_id,
requester_id,
encounter_id,
authored_time,
org_id,
content_json,
delete_flag,
create_time,
create_by,
tenant_id
)
SELECT
LPAD(FLOOR(RANDOM() * 10000)::TEXT, 4, '0'),
prescription_no,
1, -- 待签发
1, -- 医生处方
2, -- 临时医嘱
1,
'',
4, -- 手术
patient_id,
requester_id,
encounter_id,
create_time,
org_id,
desc_json,
'0',
create_time,
requester_id,
1 -- tenant_id
FROM temp_repair_list;
-- 查看生成的手术医嘱数量
SELECT '生成的手术医嘱数量' as , COUNT(*) as
FROM wor_service_request
WHERE prescription_no IN (SELECT prescription_no FROM temp_repair_list);
-- =====================================================
-- 步骤 2.3: 生成手术收费项目ChargeItem
-- =====================================================
-- 获取刚生成的ServiceRequest
CREATE TEMPORARY TABLE temp_new_requests AS
SELECT
sr.id as service_request_id,
sr.prescription_no,
sr.patient_id,
sr.encounter_id,
sr.requester_id,
sr.create_time,
sr.org_id,
sr.bus_no,
t.desc_json
FROM wor_service_request sr
JOIN temp_repair_list t ON t.prescription_no = sr.prescription_no
WHERE sr.category_enum = 4
AND sr.delete_flag = '0';
-- 插入手术费用
INSERT INTO adm_charge_item (
bus_no,
status_enum,
generate_source_enum,
patient_id,
context_enum,
encounter_id,
enterer_id,
entered_date,
service_table,
service_id,
product_table,
requesting_org_id,
quantity_value,
quantity_unit,
unit_price,
total_price,
delete_flag,
create_time,
create_by,
tenant_id
)
SELECT
'CI' || bus_no,
1, -- 草稿
1, -- 医生处方
patient_id,
3, -- 诊疗
encounter_id,
requester_id,
create_time,
'wor_service_request',
service_request_id,
'wor_activity_definition',
org_id,
1,
'',
COALESCE((desc_json::jsonb->>'surgeryFee')::numeric, 0),
COALESCE((desc_json::jsonb->>'surgeryFee')::numeric, 0),
'0',
create_time,
requester_id,
1
FROM temp_new_requests;
-- 查看生成的收费项目数量
SELECT '生成的手术收费项目数量' as , COUNT(*) as
FROM adm_charge_item
WHERE service_id IN (SELECT service_request_id FROM temp_new_requests);
-- =====================================================
-- 步骤 2.4: 清理临时表
-- =====================================================
DROP TABLE IF EXISTS temp_repair_list;
DROP TABLE IF EXISTS temp_new_requests;
-- =====================================================
-- 完成!
-- =====================================================

View File

@@ -0,0 +1,5 @@
-- Bug #434 修复:为 op_schedule 表添加 incision_level 字段
-- 手术安排表需要存储切口类型,以便在编辑弹窗中正确回显和保存
ALTER TABLE op_schedule ADD COLUMN IF NOT EXISTS incision_level INT2;
COMMENT ON COLUMN op_schedule.incision_level IS '手术切口等级 1-I级切口 2-II级切口 3-III级切口 4-IV级切口';

View File

@@ -0,0 +1,15 @@
-- Bug #462: 诊疗目录编辑弹窗中"所需标本"下拉框数据加载失败
-- 根因: hisprd schema 中 sys_dict_type 存在 specimen_code 类型,但 sys_dict_data 中缺少对应的7条数据记录
-- 修复: 在 hisprd schema 中插入7条标本数据
-- 验证: hisdev/histest1 已有数据,仅 hisprd 缺失
-- 注意: hisprd 的 sys_dict_data 表无 py_str 字段(旧表结构)
INSERT INTO hisprd.sys_dict_data (dict_sort, dict_label, dict_value, dict_type, status, create_by, create_time, remark)
VALUES
(1, '血液', '1', 'specimen_code', '0', 'admin', NOW(), '血液标本'),
(2, '尿液', '2', 'specimen_code', '0', 'admin', NOW(), '尿液标本'),
(3, '粪便', '3', 'specimen_code', '0', 'admin', NOW(), '粪便标本'),
(4, '呼吸道', '4', 'specimen_code', '0', 'admin', NOW(), '呼吸道标本'),
(5, '无菌体液', '5', 'specimen_code', '0', 'admin', NOW(), '无菌体液标本'),
(6, '生殖道', '6', 'specimen_code', '0', 'admin', NOW(), '生殖道标本'),
(7, '其他', '99', 'specimen_code', '0', 'admin', NOW(), '其他标本');

189
sql/check_activity_definition.sql Executable file
View File

@@ -0,0 +1,189 @@
-- ============================================
-- 诊疗项目数据检查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 Executable file
View 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;

View 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';

View File

@@ -0,0 +1,62 @@
-- =============================================
-- 创建 lab_observation 表
-- 用途: 实验室观察记录表
-- 创建时间: 2026-03-09
-- =============================================
-- 删除已存在的表(如果存在)
DROP TABLE IF EXISTS lab_observation;
-- 创建序列(如果不存在)
DROP SEQUENCE IF EXISTS lab_observation_id_seq;
CREATE SEQUENCE lab_observation_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
-- 创建表
CREATE TABLE lab_observation (
id BIGINT PRIMARY KEY DEFAULT nextval('lab_observation_id_seq'),
patient_id BIGINT,
encounter_id BIGINT,
specimen_id BIGINT,
observation_definition_id BIGINT,
observation_result TEXT,
observation_date TIMESTAMP,
technician_id BIGINT,
delete_flag VARCHAR(1) DEFAULT '0',
create_by VARCHAR(64) DEFAULT '',
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_by VARCHAR(64) DEFAULT '',
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
remark VARCHAR(500)
);
-- 添加表注释
COMMENT ON TABLE lab_observation IS '实验室观察记录表';
-- 添加字段注释
COMMENT ON COLUMN lab_observation.id IS '观察记录的唯一标识符';
COMMENT ON COLUMN lab_observation.patient_id IS '患者ID';
COMMENT ON COLUMN lab_observation.encounter_id IS '就诊ID';
COMMENT ON COLUMN lab_observation.specimen_id IS '关联的样本ID';
COMMENT ON COLUMN lab_observation.observation_definition_id IS '观察定义ID';
COMMENT ON COLUMN lab_observation.observation_result IS '观察结果,可能是文本描述或数值';
COMMENT ON COLUMN lab_observation.observation_date IS '观察的日期和时间';
COMMENT ON COLUMN lab_observation.technician_id IS '执行观察的技术员ID';
COMMENT ON COLUMN lab_observation.delete_flag IS '删除状态0-未删除1-已删除';
COMMENT ON COLUMN lab_observation.create_by IS '创建者';
COMMENT ON COLUMN lab_observation.create_time IS '创建时间';
COMMENT ON COLUMN lab_observation.update_by IS '更新者';
COMMENT ON COLUMN lab_observation.update_time IS '更新时间';
COMMENT ON COLUMN lab_observation.remark IS '备注';
-- 创建索引
CREATE INDEX idx_lab_observation_patient_id ON lab_observation(patient_id);
CREATE INDEX idx_lab_observation_specimen_id ON lab_observation(specimen_id);
CREATE INDEX idx_lab_observation_observation_date ON lab_observation(observation_date);
-- 打印完成信息
SELECT 'lab_observation 表创建成功!' AS message;

View File

@@ -0,0 +1,86 @@
-- 创建 lab_specimen 检验标本表
CREATE TABLE hisdev.lab_specimen (
id BIGINT NOT NULL,
service_id BIGINT,
tenant_id BIGINT,
specimen_definition_id BIGINT,
collection_status_enum INTEGER,
collection_date TIMESTAMP WITHOUT TIME ZONE,
received_date TIMESTAMP WITHOUT TIME ZONE,
specimen_volume VARCHAR(50),
specimen_unit VARCHAR(20),
create_by VARCHAR(50),
create_time TIMESTAMP WITHOUT TIME ZONE,
update_by VARCHAR(50),
update_time TIMESTAMP WITH TIME ZONE,
PRIMARY KEY (id)
);
COMMENT ON TABLE hisdev.lab_specimen IS '检验标本表';
COMMENT ON COLUMN hisdev.lab_specimen.id IS '主键ID';
COMMENT ON COLUMN hisdev.lab_specimen.service_id IS '服务请求ID(关联wor_service_request)';
COMMENT ON COLUMN hisdev.lab_specimen.tenant_id IS '租户ID';
COMMENT ON COLUMN hisdev.lab_specimen.specimen_definition_id IS '标本定义ID(关联adm_specimen_definition)';
COMMENT ON COLUMN hisdev.lab_specimen.collection_status_enum IS '采集状态(1:待采集 2:已采集 3:已接收)';
COMMENT ON COLUMN hisdev.lab_specimen.collection_date IS '采集时间';
COMMENT ON COLUMN hisdev.lab_specimen.received_date IS '接收时间';
COMMENT ON COLUMN hisdev.lab_specimen.specimen_volume IS '标本量';
COMMENT ON COLUMN hisdev.lab_specimen.specimen_unit IS '标本单位';
COMMENT ON COLUMN hisdev.lab_specimen.create_by IS '创建人';
COMMENT ON COLUMN hisdev.lab_specimen.create_time IS '创建时间';
COMMENT ON COLUMN hisdev.lab_specimen.update_by IS '更新人';
COMMENT ON COLUMN hisdev.lab_specimen.update_time IS '更新时间';
-- 创建 adm_specimen_definition 标本定义表
CREATE TABLE hisdev.adm_specimen_definition (
id BIGINT NOT NULL,
code VARCHAR(50),
name VARCHAR(100),
specimen_name VARCHAR(100),
delete_flag CHAR(1) DEFAULT '0',
create_by VARCHAR(50),
create_time TIMESTAMP WITHOUT TIME ZONE,
update_by VARCHAR(50),
update_time TIMESTAMP WITH TIME ZONE,
PRIMARY KEY (id)
);
COMMENT ON TABLE hisdev.adm_specimen_definition IS '标本定义表';
COMMENT ON COLUMN hisdev.adm_specimen_definition.id IS '主键ID';
COMMENT ON COLUMN hisdev.adm_specimen_definition.code IS '标本编码';
COMMENT ON COLUMN hisdev.adm_specimen_definition.name IS '标本名称';
COMMENT ON COLUMN hisdev.adm_specimen_definition.specimen_name IS '标本显示名称';
COMMENT ON COLUMN hisdev.adm_specimen_definition.delete_flag IS '删除标志(0:正常 1:删除)';
-- 创建 adm_observation_definition 检验项目定义表
CREATE TABLE hisdev.adm_observation_definition (
id BIGINT NOT NULL,
code VARCHAR(50),
name VARCHAR(100),
category VARCHAR(50),
unit VARCHAR(20),
reference_range VARCHAR(200),
normal_range VARCHAR(200),
delete_flag CHAR(1) DEFAULT '0',
create_by VARCHAR(50),
create_time TIMESTAMP WITHOUT TIME ZONE,
update_by VARCHAR(50),
update_time TIMESTAMP WITH TIME ZONE,
PRIMARY KEY (id)
);
COMMENT ON TABLE hisdev.adm_observation_definition IS '检验项目定义表';
COMMENT ON COLUMN hisdev.adm_observation_definition.id IS '主键ID';
COMMENT ON COLUMN hisdev.adm_observation_definition.code IS '项目编码';
COMMENT ON COLUMN hisdev.adm_observation_definition.name IS '项目名称';
COMMENT ON COLUMN hisdev.adm_observation_definition.category IS '项目类别';
COMMENT ON COLUMN hisdev.adm_observation_definition.unit IS '单位';
COMMENT ON COLUMN hisdev.adm_observation_definition.reference_range IS '参考范围';
COMMENT ON COLUMN hisdev.adm_observation_definition.normal_range IS '正常范围';
COMMENT ON COLUMN hisdev.adm_observation_definition.delete_flag IS '删除标志(0:正常 1:删除)';
-- 创建索引
CREATE INDEX idx_lab_specimen_service_id ON hisdev.lab_specimen(service_id);
CREATE INDEX idx_lab_specimen_specimen_def ON hisdev.lab_specimen(specimen_definition_id);
CREATE INDEX idx_adm_specimen_definition_code ON hisdev.adm_specimen_definition(code);
CREATE INDEX idx_adm_observation_definition_code ON hisdev.adm_observation_definition(code);

View 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';

85
sql/fix_audit_fields.sql Executable file
View File

@@ -0,0 +1,85 @@
-- 数据库审计字段修复脚本
-- 用于确保所有表都能正确处理 create_by 和 create_time 字段
-- 步骤 1: 检查哪些表有审计字段但没有正确设置
-- 查询所有包含审计字段的表及其约束状态
SELECT
table_name,
column_name,
is_nullable,
column_default
FROM
information_schema.columns
WHERE
table_schema = 'public'
AND column_name IN ('create_by', 'create_time', 'update_by', 'update_time')
AND is_nullable = 'NO' -- 表示有NOT NULL约束
ORDER BY
table_name, column_name;
-- 步骤 2: 为所有审计字段设置合理的默认值(可选)
-- 这样即使自动填充失败,也不会违反约束
ALTER TABLE "public"."adm_practitioner" ALTER COLUMN "create_by" SET DEFAULT 'system';
ALTER TABLE "public"."adm_practitioner" ALTER COLUMN "update_by" SET DEFAULT 'system';
-- 步骤 3: 检查并更新现有数据确保没有NULL值
-- 对于create_by字段
UPDATE "public"."adm_practitioner"
SET "create_by" = 'system'
WHERE "create_by" IS NULL OR "create_by" = '';
-- 对于update_by字段
UPDATE "public"."adm_practitioner"
SET "update_by" = 'system'
WHERE "update_by" IS NULL;
-- 步骤 4: 为其他可能存在相同问题的表执行类似操作
-- 以下是根据数据库结构推测的一些表名,您可能需要根据实际情况调整
DO $$
DECLARE
table_name text;
tables_with_audit_fields CURSOR FOR
SELECT DISTINCT t.table_name
FROM information_schema.tables t
JOIN information_schema.columns c ON t.table_name = c.table_name
WHERE t.table_schema = 'public'
AND c.column_name IN ('create_by', 'create_time', 'update_by', 'update_time')
AND c.is_nullable = 'NO';
BEGIN
FOR rec IN tables_with_audit_fields LOOP
BEGIN
-- 为每个表设置审计字段的默认值
EXECUTE format('ALTER TABLE "public"."%I" ALTER COLUMN "create_by" SET DEFAULT ''system''', rec.table_name);
EXECUTE format('ALTER TABLE "public"."%I" ALTER COLUMN "update_by" SET DEFAULT ''system''', rec.table_name);
-- 更新现有的NULL值
EXECUTE format('UPDATE "public"."%I" SET "create_by" = ''system'' WHERE "create_by" IS NULL OR "create_by" = ''''', rec.table_name);
EXECUTE format('UPDATE "public"."%I" SET "update_by" = ''system'' WHERE "update_by" IS NULL', rec.table_name);
RAISE NOTICE 'Processed table: %', rec.table_name;
EXCEPTION
WHEN OTHERS THEN
RAISE NOTICE 'Could not process table: %, Error: %', rec.table_name, SQLERRM;
END;
END LOOP;
END $$;
-- 步骤 5: 验证修复结果
-- 检查是否还有表存在审计字段的NULL值
SELECT
table_name,
column_name,
COUNT(*) as null_count
FROM (
SELECT 'adm_practitioner' as table_name, 'create_by' as column_name, create_by FROM "public"."adm_practitioner" WHERE create_by IS NULL
UNION ALL
SELECT 'adm_practitioner' as table_name, 'update_by' as column_name, update_by FROM "public"."adm_practitioner" WHERE update_by IS NULL
-- 在这里添加其他表的检查
) t
GROUP BY table_name, column_name;
-- 注意事项:
-- 1. 在生产环境执行前务必备份数据库
-- 2. 根据实际业务需求调整默认值(例如使用实际的用户名而非'system'
-- 3. 确保应用程序层面的自动填充机制正常工作
-- 4. 考虑在应用程序启动时进行审计字段的完整性检查

View 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 '脚本执行完成!请查看上述验证结果确认所有操作均已成功执行。';

116
sql/query_encounter_id.sql Executable file
View File

@@ -0,0 +1,116 @@
-- 查询挂号记录表主键的SQL语句
-- 表名adm_encounter
-- 主键字段id (bigint雪花算法生成)
-- ========================================
-- 1. 查询所有挂号记录的主键(简单查询)
-- ========================================
SELECT id
FROM adm_encounter
WHERE delete_flag = '0'
ORDER BY id DESC;
-- ========================================
-- 2. 查询最近N条挂号记录的主键
-- ========================================
SELECT id
FROM adm_encounter
WHERE delete_flag = '0'
ORDER BY start_time DESC
LIMIT 10;
-- ========================================
-- 3. 查询指定日期范围内的挂号记录主键
-- ========================================
SELECT id
FROM adm_encounter
WHERE delete_flag = '0'
AND DATE(start_time) >= '2026-01-01'
AND DATE(start_time) <= '2026-01-31'
ORDER BY start_time DESC;
-- ========================================
-- 4. 查询指定科室的挂号记录主键
-- ========================================
SELECT id
FROM adm_encounter
WHERE delete_flag = '0'
AND organization_id = 123 -- 替换为实际的科室ID
ORDER BY start_time DESC;
-- ========================================
-- 5. 查询指定患者的挂号记录主键
-- ========================================
SELECT id
FROM adm_encounter
WHERE delete_flag = '0'
AND patient_id = 456 -- 替换为实际的患者ID
ORDER BY start_time DESC;
-- ========================================
-- 6. 查询主键及基本信息(常用)
-- ========================================
SELECT
id AS ID,
bus_no AS ,
patient_id AS ID,
organization_id AS ID,
registrar_id AS ID,
display_order AS ,
start_time AS ,
status_enum AS
FROM adm_encounter
WHERE delete_flag = '0'
ORDER BY start_time DESC
LIMIT 20;
-- ========================================
-- 7. 统计主键数量(按日期分组)
-- ========================================
SELECT
DATE(start_time) AS ,
COUNT(id) AS ,
MIN(id) AS ID,
MAX(id) AS ID
FROM adm_encounter
WHERE delete_flag = '0'
GROUP BY DATE(start_time)
ORDER BY DESC
LIMIT 30;
-- ========================================
-- 8. 查询主键的最大值、最小值、总数
-- ========================================
SELECT
COUNT(*) AS ,
MIN(id) AS ID,
MAX(id) AS ID,
MAX(id) - MIN(id) AS ID范围
FROM adm_encounter
WHERE delete_flag = '0';
-- ========================================
-- 9. 根据主键查询单条记录(精确查询)
-- ========================================
SELECT *
FROM adm_encounter
WHERE id = 1996923066055286785 -- 替换为实际的主键ID
AND delete_flag = '0';
-- ========================================
-- 10. 查询主键及关联的患者信息
-- ========================================
SELECT
e.id AS ID,
e.bus_no AS ,
e.display_order AS ,
e.start_time AS ,
p.id AS ID,
p.name AS ,
p.bus_no AS
FROM adm_encounter e
INNER JOIN adm_patient p ON e.patient_id = p.id AND p.delete_flag = '0'
WHERE e.delete_flag = '0'
ORDER BY e.start_time DESC
LIMIT 20;

View File

@@ -0,0 +1,224 @@
-- ============================================
-- 查询今日门诊患者数据(用于调试分诊排队页面)
-- 简化版:直接查询,不考虑登录和租户
-- ============================================
-- 1. 最简单查询:查看今天所有的挂号记录(不关联患者表)
SELECT
enc.id AS encounterId,
enc.patient_id AS patientId,
enc.start_time AS registerTime,
enc.status_enum AS statusEnum,
enc.organization_id AS departmentId,
enc.tenant_id AS tenantId,
enc.delete_flag AS deleteFlag,
enc.bus_no AS encounterBusNo
FROM adm_encounter enc
WHERE enc.delete_flag = '0'
AND enc.start_time::DATE = CURRENT_DATE
ORDER BY enc.start_time DESC
LIMIT 100;
-- ============================================
-- 2. 完整查询:直接查询患者信息(简化版,不考虑租户)
-- ============================================
SELECT
enc.id AS encounterId,
enc.patient_id AS patientId,
pt.name AS patientName,
pt.gender_enum AS genderEnum,
pt.birth_date AS birthDate,
pt.id_card AS idCard,
pt.phone AS phone,
enc.bus_no AS encounterBusNo,
enc.start_time AS registerTime,
enc.reception_time AS receptionTime,
enc.status_enum AS statusEnum,
enc.subject_status_enum AS subjectStatusEnum,
CASE
WHEN enc.reception_time IS NOT NULL
THEN EXTRACT(EPOCH FROM (enc.reception_time - enc.start_time)) / 60
ELSE EXTRACT(EPOCH FROM (NOW() - enc.start_time)) / 60
END AS waitingDuration,
CASE
WHEN enc.end_time IS NOT NULL AND enc.reception_time IS NOT NULL
THEN EXTRACT(EPOCH FROM (enc.end_time - enc.reception_time)) / 60
ELSE NULL
END AS visitDuration,
pt.type_code AS typeCode,
enc.important_flag AS importantFlag,
-- 医生信息(左关联)
ep.practitioner_id AS doctorId
FROM adm_encounter enc
INNER JOIN adm_patient pt
ON enc.patient_id = pt.id
AND pt.delete_flag = '0'
LEFT JOIN adm_encounter_participant ep
ON enc.id = ep.encounter_id
AND ep.type_code = 'admitter'
AND ep.delete_flag = '0'
WHERE enc.delete_flag = '0'
AND enc.start_time::DATE = CURRENT_DATE
ORDER BY enc.start_time DESC
LIMIT 10000;
-- ============================================
-- 3. 检查数据条件:查看可能影响查询结果的数据
-- ============================================
-- 3.1 检查今天的挂号记录总数
SELECT
COUNT(*) AS total_count,
COUNT(CASE WHEN delete_flag = '0' THEN 1 END) AS not_deleted_count,
COUNT(CASE WHEN delete_flag = '1' THEN 1 END) AS deleted_count
FROM adm_encounter
WHERE start_time::DATE = CURRENT_DATE;
-- 3.2 检查不同租户的数据分布
SELECT
tenant_id,
COUNT(*) AS count,
COUNT(CASE WHEN delete_flag = '0' THEN 1 END) AS not_deleted_count
FROM adm_encounter
WHERE start_time::DATE = CURRENT_DATE
GROUP BY tenant_id
ORDER BY tenant_id;
-- 3.3 检查不同状态的数据分布
SELECT
status_enum,
COUNT(*) AS count,
COUNT(CASE WHEN delete_flag = '0' THEN 1 END) AS not_deleted_count
FROM adm_encounter
WHERE start_time::DATE = CURRENT_DATE
AND delete_flag = '0'
GROUP BY status_enum
ORDER BY status_enum;
-- 3.4 检查是否有患者数据关联
SELECT
COUNT(DISTINCT enc.id) AS encounter_count,
COUNT(DISTINCT pt.id) AS patient_count,
COUNT(DISTINCT CASE WHEN pt.delete_flag = '0' THEN pt.id END) AS patient_not_deleted_count
FROM adm_encounter enc
LEFT JOIN adm_patient pt ON enc.patient_id = pt.id
WHERE enc.start_time::DATE = CURRENT_DATE
AND enc.delete_flag = '0';
-- 3.5 检查医生参与信息
SELECT
COUNT(DISTINCT enc.id) AS encounter_count,
COUNT(DISTINCT ep.encounter_id) AS has_doctor_count,
COUNT(DISTINCT ep.practitioner_id) AS doctor_count
FROM adm_encounter enc
LEFT JOIN adm_encounter_participant ep
ON enc.id = ep.encounter_id
AND ep.type_code = 'admitter'
AND ep.delete_flag = '0'
WHERE enc.start_time::DATE = CURRENT_DATE
AND enc.delete_flag = '0';
-- ============================================
-- 4. 快速查询:直接查看患者姓名和挂号信息(最简单)
-- ============================================
SELECT
enc.id AS ID,
pt.name AS ,
pt.id_card AS ,
pt.phone AS ,
enc.start_time AS ,
enc.create_time AS ,
enc.status_enum AS ,
enc.bus_no AS
FROM adm_encounter enc
INNER JOIN adm_patient pt ON enc.patient_id = pt.id
WHERE enc.delete_flag = '0'
AND pt.delete_flag = '0'
AND enc.start_time::DATE = CURRENT_DATE
ORDER BY enc.start_time DESC;
-- ============================================
-- 4.1 使用 create_time 查询(和门诊挂号页面一致)
-- ============================================
SELECT
enc.id AS ID,
pt.name AS ,
pt.id_card AS ,
pt.phone AS ,
enc.create_time AS ,
enc.start_time AS ,
enc.status_enum AS ,
enc.bus_no AS
FROM adm_encounter enc
INNER JOIN adm_patient pt ON enc.patient_id = pt.id
WHERE enc.delete_flag = '0'
AND pt.delete_flag = '0'
AND enc.create_time::DATE = CURRENT_DATE
ORDER BY enc.create_time DESC;
-- ============================================
-- 4.2 完全模拟门诊挂号页面的查询(包含支付状态)
-- ============================================
SELECT
enc.id AS ID,
pt.name AS ,
pt.id_card AS ,
pt.phone AS ,
enc.create_time AS ,
enc.status_enum AS ,
enc.bus_no AS ,
ci.total_price AS ,
pr.status_enum AS
FROM adm_encounter enc
INNER JOIN adm_patient pt ON enc.patient_id = pt.id AND pt.delete_flag = '0'
LEFT JOIN adm_charge_item ci ON enc.id = ci.encounter_id AND ci.delete_flag = '0' AND ci.context_enum = 1
LEFT JOIN fin_payment_reconciliation pr ON ci.id::TEXT = ANY(string_to_array(pr.charge_item_ids,','))
AND pr.delete_flag = '0'
AND pr.status_enum = 1
WHERE enc.delete_flag = '0'
AND enc.class_enum = 1 -- 门诊
AND enc.create_time::DATE = CURRENT_DATE
ORDER BY enc.create_time DESC;
-- ============================================
-- 5. 快速检查查看最近7天的挂号记录数量使用 start_time
-- ============================================
SELECT
start_time::DATE AS register_date,
COUNT(*) AS total_count,
COUNT(CASE WHEN delete_flag = '0' THEN 1 END) AS not_deleted_count
FROM adm_encounter
WHERE start_time::DATE >= CURRENT_DATE - INTERVAL '7 days'
GROUP BY start_time::DATE
ORDER BY start_time::DATE DESC;
-- ============================================
-- 5.1 快速检查查看最近7天的挂号记录数量使用 create_time
-- ============================================
SELECT
create_time::DATE AS register_date,
COUNT(*) AS total_count,
COUNT(CASE WHEN delete_flag = '0' THEN 1 END) AS not_deleted_count
FROM adm_encounter
WHERE create_time::DATE >= CURRENT_DATE - INTERVAL '7 days'
AND class_enum = 1 -- 门诊
GROUP BY create_time::DATE
ORDER BY create_time::DATE DESC;
-- ============================================
-- 6. 对比 start_time 和 create_time 的差异
-- ============================================
SELECT
id AS ID,
start_time AS ,
create_time AS ,
(start_time::DATE) AS ,
(create_time::DATE) AS ,
status_enum AS ,
delete_flag AS
FROM adm_encounter
WHERE (start_time::DATE = CURRENT_DATE OR create_time::DATE = CURRENT_DATE)
AND delete_flag = '0'
ORDER BY create_time DESC
LIMIT 20;

View File

@@ -0,0 +1,35 @@
-- 移除 adm_practitioner 表中 create_by 列的 NOT NULL 约束
-- 用于解决 org.postgresql.util.PSQLException: ERROR: null value in column "create_by" of relation "adm_practitioner" violates not-null constraint
-- 在PostgreSQL中NOT NULL约束实际上是列的一个属性而不是命名约束
-- 因此我们使用 ALTER COLUMN ... DROP NOT NULL 来移除它
-- 可选:先查看当前表结构及约束信息
-- 注意:\d 命令仅在 psql 中有效,在脚本中不能使用
/*
SELECT
c.column_name,
c.is_nullable,
c.data_type,
tc.constraint_type
FROM
information_schema.columns c
LEFT JOIN
information_schema.constraint_column_usage ccu ON c.column_name = ccu.column_name AND c.table_name = ccu.table_name
LEFT JOIN
information_schema.table_constraints tc ON ccu.constraint_name = tc.constraint_name
WHERE
c.table_name = 'adm_practitioner'
AND c.column_name = 'create_by';
*/
-- 移除 create_by 列的 NOT NULL 约束
ALTER TABLE "public"."adm_practitioner"
ALTER COLUMN "create_by" DROP NOT NULL;
-- 可选:如果需要,可以同时移除默认值
-- ALTER TABLE "public"."adm_practitioner"
-- ALTER COLUMN "create_by" DROP DEFAULT;
-- 提示执行此脚本后create_by 列将允许 NULL 值
-- 这将解决插入数据时因缺少 create_by 值而导致的违反非空约束错误

View File

@@ -0,0 +1,58 @@
-- 安全移除 adm_practitioner 表中 create_by 列的 NOT NULL 约束
-- 用于解决 org.postgresql.util.PSQLException: ERROR: null value in column "create_by" of relation "adm_practitioner" violates not-null constraint
-- 步骤 1: 检查当前表结构
-- 查看 create_by 列的当前约束情况
SELECT
column_name,
is_nullable,
data_type,
column_default
FROM
information_schema.columns
WHERE
table_schema = 'public'
AND table_name = 'adm_practitioner'
AND column_name = 'create_by';
-- 步骤 2: 备份重要数据(可选但推荐)
-- 创建一个临时表来保存当前数据概览
CREATE TEMPORARY TABLE adm_practitioner_backup_check AS
SELECT id, name, create_by, create_time
FROM public.adm_practitioner
LIMIT 10; -- 只取前10条记录作为样本检查
-- 显示备份样本以供参考
SELECT * FROM adm_practitioner_backup_check;
-- 步骤 3: 执行约束移除操作
-- 在PostgreSQL中NOT NULL约束实际上是列的一个属性而不是命名约束
-- 使用 ALTER COLUMN ... DROP NOT NULL 来移除它
ALTER TABLE "public"."adm_practitioner"
ALTER COLUMN "create_by" DROP NOT NULL;
-- 步骤 4: 验证更改
-- 再次检查列属性确认NOT NULL约束已被移除
SELECT
column_name,
is_nullable,
data_type,
column_default
FROM
information_schema.columns
WHERE
table_schema = 'public'
AND table_name = 'adm_practitioner'
AND column_name = 'create_by';
-- 步骤 5: 测试插入操作(可选)
-- 尝试插入一条不带create_by值的数据来验证约束是否已移除
-- 注意:实际执行时请根据需要调整其他必需字段
-- INSERT INTO "public"."adm_practitioner" (name, user_id, tenant_id, delete_flag, create_time)
-- VALUES ('Test Practitioner', 0, 1, '0', NOW());
-- 提示:
-- 1. 执行此脚本前建议先备份整个表或数据库
-- 2. 执行后 create_by 列将允许 NULL 值
-- 3. 这将解决插入数据时因缺少 create_by 值而导致的违反非空约束错误
-- 4. 考虑在应用程序层面处理可能的 NULL 值

161
sql/sequence_explanation.md Executable file
View File

@@ -0,0 +1,161 @@
# PostgreSQL SEQUENCE序列详解
## 语句解析
```sql
DROP SEQUENCE IF EXISTS "public"."adm_encounter_id_seq";
CREATE SEQUENCE "public"."adm_encounter_id_seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 99999999
START 200
CACHE 1;
```
## 逐行解释
### 1. `DROP SEQUENCE IF EXISTS "public"."adm_encounter_id_seq";`
- **作用**:如果序列已存在,先删除它
- **`IF EXISTS`**:如果序列不存在,不会报错,直接跳过
- **`"public"."adm_encounter_id_seq"`**:序列的完整名称
- `public`模式schema默认模式
- `adm_encounter_id_seq`:序列名称
### 2. `CREATE SEQUENCE "public"."adm_encounter_id_seq"`
- **作用**:创建一个新的序列
- **序列名称**`adm_encounter_id_seq`(用于 `adm_encounter` 表的主键自增)
### 3. `INCREMENT 1`
- **作用**:每次递增的步长
- **含义**:每次调用 `nextval()` 时,序列值增加 1
- **示例**:如果当前值是 200下次调用 `nextval()` 返回 201
### 4. `MINVALUE 1`
- **作用**:序列的最小值
- **含义**:序列值不能小于 1
- **注意**:如果序列达到最小值后继续递减,会报错(除非设置了 `CYCLE`
### 5. `MAXVALUE 99999999`
- **作用**:序列的最大值
- **含义**:序列值不能超过 999999998位数
- **注意**:如果序列达到最大值后继续递增,会报错(除非设置了 `CYCLE`
### 6. `START 200`
- **作用**:序列的起始值
- **含义**:序列从 200 开始
- **示例**:第一次调用 `nextval()` 返回 200第二次返回 201以此类推
### 7. `CACHE 1`
- **作用**:缓存大小
- **含义**:每次从数据库获取序列值时,预分配 1 个值到内存
- **说明**
- `CACHE 1`:每次只缓存 1 个值(最安全,但性能较低)
- `CACHE 20`:每次缓存 20 个值(性能更好,但可能跳号)
- **注意**:如果数据库重启,缓存中未使用的序列值会丢失,导致跳号
## 使用示例
### 1. 在表定义中使用(自动自增)
```sql
CREATE TABLE "adm_encounter" (
"id" int8 NOT NULL DEFAULT nextval('adm_encounter_id_seq'::regclass),
...
);
```
### 2. 手动获取下一个值
```sql
-- 获取下一个序列值
SELECT nextval('adm_encounter_id_seq');
-- 返回200第一次调用
SELECT nextval('adm_encounter_id_seq');
-- 返回201第二次调用
```
### 3. 查看当前值(不递增)
```sql
SELECT currval('adm_encounter_id_seq');
-- 返回:当前序列值(不会增加)
```
### 4. 重置序列
```sql
-- 将序列重置为指定值
SELECT setval('adm_encounter_id_seq', 200);
```
## 实际应用场景
### 场景1插入数据时自动生成ID
```sql
INSERT INTO adm_encounter (patient_id, organization_id, ...)
VALUES (123, 456, ...);
-- id 字段会自动使用序列的下一个值(如 200, 201, 202...
```
### 场景2手动指定ID不推荐
```sql
INSERT INTO adm_encounter (id, patient_id, ...)
VALUES (999, 123, ...);
-- 注意如果手动插入的ID与序列值冲突可能导致问题
```
## 注意事项
### 1. 序列与雪花算法的区别
- **序列**简单的数字递增1, 2, 3...
- **雪花算法**分布式ID生成算法1996923066055286785
- **当前项目**:虽然定义了序列,但实际使用的是雪花算法(`IdType.ASSIGN_ID`
### 2. 序列跳号的原因
- 事务回滚:如果事务回滚,序列值不会回退
- 缓存:`CACHE > 1` 时,数据库重启可能导致跳号
- 手动插入手动插入ID后序列不会自动调整
### 3. 序列的优缺点
**优点**
- 简单易用
- 性能好(预分配)
- 保证唯一性
**缺点**
- 可能跳号
- 不适合分布式环境
- 最大值有限制
## 相关查询语句
### 查看序列信息
```sql
-- 查看序列的详细信息
SELECT
sequence_name AS 序列名称,
last_value AS 当前值,
start_value AS 起始值,
increment_by AS 递增步长,
max_value AS 最大值,
min_value AS 最小值,
cache_size AS 缓存大小
FROM information_schema.sequences
WHERE sequence_name = 'adm_encounter_id_seq';
```
### 查看序列的下一个值(不实际使用)
```sql
SELECT last_value, is_called
FROM adm_encounter_id_seq;
```
### 修改序列
```sql
-- 修改序列的起始值
ALTER SEQUENCE adm_encounter_id_seq RESTART WITH 1000;
-- 修改序列的最大值
ALTER SEQUENCE adm_encounter_id_seq MAXVALUE 999999999;
-- 修改序列的缓存大小
ALTER SEQUENCE adm_encounter_id_seq CACHE 20;
```

View 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';

View 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

View File

@@ -0,0 +1,13 @@
SELECT
id,
surgery_no,
apply_doctor_id,
apply_doctor_name,
apply_dept_id,
apply_dept_name,
surgery_name,
create_time
FROM cli_surgery
WHERE delete_flag = '0'
ORDER BY create_time DESC
LIMIT 1;

View 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 '手术指征';

View 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 Executable file
View 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';

View File

@@ -0,0 +1,16 @@
-- 创建 __MigrationsHistory 表(迁移历史表)
CREATE TABLE __MigrationsHistory (
-- 迁移ID唯一标识一条迁移记录非空
MigrationId VARCHAR(150) NOT NULL,
-- 产品版本:记录迁移对应的框架/产品版本,非空
ProductVersion VARCHAR(32) NOT NULL,
-- 主键约束:确保 MigrationId 唯一(迁移记录不可重复)
CONSTRAINT pk___migrationshistory PRIMARY KEY (MigrationId)
);
-- 为表添加备注
COMMENT ON TABLE __MigrationsHistory IS '用于记录数据库迁移历史的表,跟踪每次迁移的执行情况';
-- 为字段添加备注
COMMENT ON COLUMN __MigrationsHistory.MigrationId IS '迁移操作的唯一标识符,用于区分不同的迁移脚本';
COMMENT ON COLUMN __MigrationsHistory.ProductVersion IS '执行迁移时使用的产品/框架版本,用于版本兼容性检查';

View File

@@ -0,0 +1,20 @@
--使使
TRUNCATE TABLE adm_encounter ;-- 清空就诊记录表
TRUNCATE TABLE adm_encounter_location;-- 清空就诊地点表
TRUNCATE TABLE adm_encounter_reason;-- 清空就诊原因表
TRUNCATE TABLE adm_encounter_diagnosis;-- 清空就诊诊断表
TRUNCATE TABLE adm_encounter_participant;-- 清空就诊参与者表
TRUNCATE TABLE adm_charge_item;-- 清空费用项目表
TRUNCATE TABLE elep_medication_request;-- 清空用药申请表
--
-- TRUNCATE TABLE med_medication_definition;-- 清空药品定义表
-- TRUNCATE TABLE med_medication ;-- 清空药品表
-- TRUNCATE TABLE adm_device_definition;-- 清空耗材定义表
-- TRUNCATE TABLE wor_activity_definition;-- 清空诊疗定义表
-- TRUNCATE TABLE adm_charge_item_definition;-- 清空费用定义表
-- TRUNCATE TABLE adm_charge_item_def_detail;-- 清空费用定义明细表

View File

@@ -0,0 +1,3 @@
ALTER TABLE doc_statistics ADD COLUMN definition_id INT8 NULL;
COMMENT ON COLUMN doc_statistics.definition_id IS '文书ID';

View File

@@ -0,0 +1,4 @@
ALTER TABLE doc_statistics ADD COLUMN time_point VARCHAR NULL;
COMMENT ON COLUMN doc_statistics.time_point IS '时间点';

View File

@@ -0,0 +1,8 @@
-- 添加公告/通知优先级字段
ALTER TABLE sys_notice ADD COLUMN priority VARCHAR(1) DEFAULT '3';
-- 添加字段注释
COMMENT ON COLUMN sys_notice.priority IS '优先级1高 2中 3低';
-- 更新现有数据的优先级为中等
UPDATE sys_notice SET priority = '2' WHERE priority IS NULL;

View File

@@ -0,0 +1,8 @@
-- 添加公告/通知发布状态字段
ALTER TABLE sys_notice ADD COLUMN publish_status VARCHAR(1) DEFAULT '0';
-- 添加字段注释
COMMENT ON COLUMN sys_notice.publish_status IS '发布状态0未发布 1已发布';
-- 更新现有数据为已发布状态
UPDATE sys_notice SET publish_status = '1' WHERE publish_status IS NULL;

View File

@@ -0,0 +1,26 @@
-- 公告/通知已读记录表
CREATE TABLE IF NOT EXISTS sys_notice_read (
read_id BIGINT PRIMARY KEY,
notice_id BIGINT NOT NULL,
user_id BIGINT NOT NULL,
read_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT uk_notice_user UNIQUE (notice_id, user_id)
);
COMMENT ON TABLE sys_notice_read IS '公告/通知已读记录表';
COMMENT ON COLUMN sys_notice_read.read_id IS '阅读ID';
COMMENT ON COLUMN sys_notice_read.notice_id IS '公告/通知ID';
COMMENT ON COLUMN sys_notice_read.user_id IS '用户ID';
COMMENT ON COLUMN sys_notice_read.read_time IS '阅读时间';
-- 创建序列
CREATE SEQUENCE IF NOT EXISTS sys_notice_read_read_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 99999999
START 200
CACHE 1;
-- 索引
CREATE INDEX IF NOT EXISTS idx_notice_read_notice_id ON sys_notice_read(notice_id);
CREATE INDEX IF NOT EXISTS idx_notice_read_user_id ON sys_notice_read(user_id);

View File

@@ -0,0 +1,6 @@
-- 为 cli_surgery 表添加 tenant_id 字段
-- 创建时间: 2025-12-31
-- 说明: 添加租户ID字段以支持多租户功能
ALTER TABLE cli_surgery ADD COLUMN tenant_id int4;
COMMENT ON COLUMN cli_surgery.tenant_id IS '租户ID';

View File

@@ -0,0 +1,12 @@
-- 更新 cli_surgery 表的 tenant_id 字段
-- 创建时间: 2025-01-04
-- 说明: 为已存在的手术记录设置默认租户ID
-- 将所有 tenant_id 为 NULL 的记录设置为默认租户ID1
UPDATE cli_surgery
SET tenant_id = 1
WHERE tenant_id IS NULL;
-- 添加非空约束(可选,根据业务需求决定是否执行)
-- ALTER TABLE cli_surgery ALTER COLUMN tenant_id SET NOT NULL;
-- ALTER TABLE cli_surgery ALTER COLUMN tenant_id SET DEFAULT 1;

View File

@@ -0,0 +1 @@
-- 检查手术表中所有字段是否存在

View File

@@ -0,0 +1,30 @@
-- 为手术表添加申请医生名称和申请科室名称字段
-- 执行时间2025-01-05
-- 说明:用于存储申请医生的姓名和科室名称,避免每次都需要关联查询
-- 检查字段是否存在,如果不存在则添加
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 $$;

View File

@@ -0,0 +1,163 @@
-- ============================================
-- 科室预约工作时间维护表结构
-- 创建日期: 2025-01-05
-- ============================================
-- 如果表不存在,创建表
CREATE TABLE IF NOT EXISTS dept_appointment_hours (
id BIGSERIAL PRIMARY KEY,
institution_name VARCHAR(100) DEFAULT NULL,
dept_name VARCHAR(100) DEFAULT NULL,
morning_start VARCHAR(20) DEFAULT NULL,
morning_end VARCHAR(20) DEFAULT NULL,
afternoon_start VARCHAR(20) DEFAULT NULL,
afternoon_end VARCHAR(20) DEFAULT NULL,
limit_count INTEGER DEFAULT NULL,
create_by VARCHAR(50) DEFAULT NULL,
create_time TIMESTAMP DEFAULT NULL,
update_time TIMESTAMP DEFAULT NULL
);
-- 如果表已存在但缺少列,添加缺失的列
-- 添加 institution_name 列
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'dept_appointment_hours'
AND column_name = 'institution_name'
) THEN
ALTER TABLE dept_appointment_hours ADD COLUMN institution_name VARCHAR(100) DEFAULT NULL;
END IF;
END $$;
-- 添加 dept_name 列
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'dept_appointment_hours'
AND column_name = 'dept_name'
) THEN
ALTER TABLE dept_appointment_hours ADD COLUMN dept_name VARCHAR(100) DEFAULT NULL;
END IF;
END $$;
-- 添加 morning_start 列
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'dept_appointment_hours'
AND column_name = 'morning_start'
) THEN
ALTER TABLE dept_appointment_hours ADD COLUMN morning_start VARCHAR(20) DEFAULT NULL;
END IF;
END $$;
-- 添加 morning_end 列
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'dept_appointment_hours'
AND column_name = 'morning_end'
) THEN
ALTER TABLE dept_appointment_hours ADD COLUMN morning_end VARCHAR(20) DEFAULT NULL;
END IF;
END $$;
-- 添加 afternoon_start 列
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'dept_appointment_hours'
AND column_name = 'afternoon_start'
) THEN
ALTER TABLE dept_appointment_hours ADD COLUMN afternoon_start VARCHAR(20) DEFAULT NULL;
END IF;
END $$;
-- 添加 afternoon_end 列
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'dept_appointment_hours'
AND column_name = 'afternoon_end'
) THEN
ALTER TABLE dept_appointment_hours ADD COLUMN afternoon_end VARCHAR(20) DEFAULT NULL;
END IF;
END $$;
-- 添加 limit_count 列
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'dept_appointment_hours'
AND column_name = 'limit_count'
) THEN
ALTER TABLE dept_appointment_hours ADD COLUMN limit_count INTEGER DEFAULT NULL;
END IF;
END $$;
-- 添加 create_by 列
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'dept_appointment_hours'
AND column_name = 'create_by'
) THEN
ALTER TABLE dept_appointment_hours ADD COLUMN create_by VARCHAR(50) DEFAULT NULL;
END IF;
END $$;
-- 添加 create_time 列
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'dept_appointment_hours'
AND column_name = 'create_time'
) THEN
ALTER TABLE dept_appointment_hours ADD COLUMN create_time TIMESTAMP DEFAULT NULL;
END IF;
END $$;
-- 添加 update_time 列
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name = 'dept_appointment_hours'
AND column_name = 'update_time'
) THEN
ALTER TABLE dept_appointment_hours ADD COLUMN update_time TIMESTAMP DEFAULT NULL;
END IF;
END $$;
-- 添加注释
COMMENT ON TABLE dept_appointment_hours IS '科室预约工作时间维护表';
COMMENT ON COLUMN dept_appointment_hours.institution_name IS '所属机构名称';
COMMENT ON COLUMN dept_appointment_hours.dept_name IS '科室名称';
COMMENT ON COLUMN dept_appointment_hours.morning_start IS '上午开始时间';
COMMENT ON COLUMN dept_appointment_hours.morning_end IS '上午结束时间';
COMMENT ON COLUMN dept_appointment_hours.afternoon_start IS '下午开始时间';
COMMENT ON COLUMN dept_appointment_hours.afternoon_end IS '下午结束时间';
COMMENT ON COLUMN dept_appointment_hours.limit_count IS '限号数量';
COMMENT ON COLUMN dept_appointment_hours.create_by IS '操作人';
COMMENT ON COLUMN dept_appointment_hours.create_time IS '创建时间';
COMMENT ON COLUMN dept_appointment_hours.update_time IS '更新时间';
-- 验证表结构
SELECT
column_name,
data_type,
is_nullable,
column_default
FROM information_schema.columns
WHERE table_name = 'dept_appointment_hours'
ORDER BY ordinal_position;

View File

@@ -0,0 +1,667 @@
-- ============================================
-- 科室预约工作时间维护 - 字段修改及测试数据
-- 生成日期: 2025-01-06
-- 说明: 字段统一命名 + 基于系统科室管理生成测试数据
-- ============================================
-- ============================================
-- 第一步:修改表结构(如果尚未执行)
-- ============================================
-- 1. 添加新字段
ALTER TABLE dept_appointment_hours ADD COLUMN IF NOT EXISTS institution VARCHAR(100);
ALTER TABLE dept_appointment_hours ADD COLUMN IF NOT EXISTS department VARCHAR(100);
ALTER TABLE dept_appointment_hours ADD COLUMN IF NOT EXISTS quota INTEGER;
ALTER TABLE dept_appointment_hours ADD COLUMN IF NOT EXISTS operator VARCHAR(50);
ALTER TABLE dept_appointment_hours ADD COLUMN IF NOT EXISTS created_time TIMESTAMP;
ALTER TABLE dept_appointment_hours ADD COLUMN IF NOT EXISTS updated_time TIMESTAMP;
-- 2. 将旧字段数据复制到新字段
UPDATE dept_appointment_hours SET institution = institution_name WHERE institution IS NULL AND institution_name IS NOT NULL;
UPDATE dept_appointment_hours SET department = dept_name WHERE department IS NULL AND dept_name IS NOT NULL;
UPDATE dept_appointment_hours SET quota = limit_count WHERE quota IS NULL AND limit_count IS NOT NULL;
UPDATE dept_appointment_hours SET operator = create_by WHERE operator IS NULL AND create_by IS NOT NULL;
UPDATE dept_appointment_hours SET created_time = create_time WHERE created_time IS NULL AND create_time IS NOT NULL;
UPDATE dept_appointment_hours SET updated_time = update_time WHERE updated_time IS NULL AND update_time IS NOT NULL;
-- 3. 删除旧字段
ALTER TABLE dept_appointment_hours DROP COLUMN IF EXISTS institution_name;
ALTER TABLE dept_appointment_hours DROP COLUMN IF EXISTS dept_name;
ALTER TABLE dept_appointment_hours DROP COLUMN IF EXISTS limit_count;
ALTER TABLE dept_appointment_hours DROP COLUMN IF EXISTS create_by;
ALTER TABLE dept_appointment_hours DROP COLUMN IF EXISTS create_time;
ALTER TABLE dept_appointment_hours DROP COLUMN IF EXISTS update_time;
-- 4. 重置序列使id从1开始
SELECT setval('dept_appointment_hours_id_seq', 1, false);
-- ============================================
-- 第二步:更新列注释
-- ============================================
COMMENT ON COLUMN dept_appointment_hours.institution IS '所属机构';
COMMENT ON COLUMN dept_appointment_hours.department IS '科室名称';
COMMENT ON COLUMN dept_appointment_hours.morning_start IS '上午开始时间';
COMMENT ON COLUMN dept_appointment_hours.morning_end IS '上午结束时间';
COMMENT ON COLUMN dept_appointment_hours.afternoon_start IS '下午开始时间';
COMMENT ON COLUMN dept_appointment_hours.afternoon_end IS '下午结束时间';
COMMENT ON COLUMN dept_appointment_hours.quota IS '限号数量';
COMMENT ON COLUMN dept_appointment_hours.operator IS '操作人';
COMMENT ON COLUMN dept_appointment_hours.created_time IS '创建时间';
COMMENT ON COLUMN dept_appointment_hours.updated_time IS '更新时间';
-- ============================================
-- 第三步:清空现有数据并插入测试数据
-- ============================================
-- 清空表数据(如果需要保留现有数据,请注释此行)
TRUNCATE TABLE dept_appointment_hours RESTART IDENTITY;
-- ============================================
-- 插入测试数据 - 基于系统管理-基础数据-科室管理中的科室
-- ============================================
-- 1. 内科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'内科门诊',
'08:00',
'12:00',
'14:00',
'17:30',
80,
'admin',
NOW()
);
-- 2. 外科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'外科门诊',
'08:00',
'12:00',
'14:00',
'17:30',
60,
'admin',
NOW()
);
-- 3. 妇产科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'妇产科门诊',
'08:30',
'12:00',
'14:00',
'17:30',
50,
'admin',
NOW()
);
-- 4. 儿科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'儿科门诊',
'08:00',
'12:00',
'14:30',
'17:30',
70,
'admin',
NOW()
);
-- 5. 眼科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'眼科门诊',
'08:30',
'11:30',
'14:00',
'17:00',
40,
'admin',
NOW()
);
-- 6. 耳鼻喉科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'耳鼻喉科门诊',
'08:30',
'12:00',
'14:00',
'17:00',
45,
'admin',
NOW()
);
-- 7. 口腔科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'口腔科门诊',
'08:00',
'11:30',
'14:00',
'17:00',
35,
'admin',
NOW()
);
-- 8. 皮肤科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'皮肤科门诊',
'08:30',
'12:00',
'14:00',
'17:30',
55,
'admin',
NOW()
);
-- 9. 中医科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'中医科门诊',
'08:00',
'12:00',
'14:00',
'17:00',
40,
'admin',
NOW()
);
-- 10. 心内科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'心内科门诊',
'08:00',
'11:30',
'14:00',
'17:00',
50,
'admin',
NOW()
);
-- 11. 神经内科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'神经内科门诊',
'08:30',
'12:00',
'14:00',
'17:00',
45,
'admin',
NOW()
);
-- 12. 呼吸科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'呼吸科门诊',
'08:00',
'12:00',
'14:00',
'17:30',
55,
'admin',
NOW()
);
-- 13. 消化内科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'消化内科门诊',
'08:30',
'12:00',
'14:00',
'17:00',
50,
'admin',
NOW()
);
-- 14. 骨科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'骨科门诊',
'08:00',
'12:00',
'14:00',
'17:00',
45,
'admin',
NOW()
);
-- 15. 泌尿外科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'泌尿外科门诊',
'08:30',
'12:00',
'14:00',
'17:00',
40,
'admin',
NOW()
);
-- 16. 精神科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'精神科门诊',
'09:00',
'12:00',
'14:00',
'17:00',
30,
'admin',
NOW()
);
-- 17. 感染科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'感染科门诊',
'08:00',
'12:00',
'14:00',
'17:30',
50,
'admin',
NOW()
);
-- 18. 急诊科
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'急诊科',
'00:00',
'23:59',
'00:00',
'23:59',
100,
'admin',
NOW()
);
-- 19. 康复科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'康复科门诊',
'08:00',
'12:00',
'14:00',
'17:00',
35,
'admin',
NOW()
);
-- 20. 体检中心
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'体检中心',
'07:30',
'12:00',
'14:00',
'17:30',
100,
'admin',
NOW()
);
-- 21. 血液科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'血液科门诊',
'08:30',
'12:00',
'14:00',
'17:00',
35,
'admin',
NOW()
);
-- 22. 内分泌科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'内分泌科门诊',
'08:00',
'12:00',
'14:00',
'17:00',
45,
'admin',
NOW()
);
-- 23. 普外科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'普外科门诊',
'08:00',
'12:00',
'14:00',
'17:30',
55,
'admin',
NOW()
);
-- 24. 神经外科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'神经外科门诊',
'08:30',
'12:00',
'14:00',
'17:00',
40,
'admin',
NOW()
);
-- 25. 烧伤科门诊
INSERT INTO dept_appointment_hours (
institution,
department,
morning_start,
morning_end,
afternoon_start,
afternoon_end,
quota,
operator,
created_time
) VALUES (
'演示医院',
'烧伤科门诊',
'08:00',
'12:00',
'14:00',
'17:00',
30,
'admin',
NOW()
);
-- ============================================
-- 验证插入的数据
-- ============================================
SELECT
id,
institution AS "所属机构",
department AS "科室名称",
morning_start AS "上午开始",
morning_end AS "上午结束",
afternoon_start AS "下午开始",
afternoon_end AS "下午结束",
quota AS "限号数量",
operator AS "操作人",
created_time AS "创建时间"
FROM dept_appointment_hours
ORDER BY id;
-- 统计总记录数
SELECT
COUNT(*) AS "总记录数"
FROM dept_appointment_hours;
-- 按科室统计
SELECT
department AS "科室",
COUNT(*) AS "数量"
FROM dept_appointment_hours
GROUP BY department
ORDER BY "数量" DESC;

View File

@@ -0,0 +1,72 @@
-- 创建序列
CREATE SEQUENCE doc_order_process_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
CREATE TABLE "doc_order_process" (
"id" int8 NOT NULL DEFAULT nextval('doc_order_process_id_seq'::regclass),
"name" varchar(100) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"encounter_id" int8 NOT NULL,
"request_id" int8 NOT NULL,
"request_table_name" varchar(100) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"original_organization_id" int8 DEFAULT NULL,
"target_organization_id" int8 DEFAULT NULL,
"original_location_id" int8 DEFAULT NULL,
"target_location_id" int8 DEFAULT NULL,
"out_way_code" varchar(100) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"tenant_id" int8 NOT NULL,
"delete_flag" char(1) COLLATE "pg_catalog"."default" NOT NULL DEFAULT 0,
"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",
"update_time" timestamptz(6),
CONSTRAINT "doc_order_process_pkey" PRIMARY KEY ("id")
)
;
ALTER TABLE "doc_order_process"
OWNER TO "postgres";
COMMENT ON COLUMN "doc_order_process"."id" IS 'ID';
COMMENT ON COLUMN "doc_order_process"."name" IS '名称';
COMMENT ON COLUMN "doc_order_process"."encounter_id" IS '就诊id';
COMMENT ON COLUMN "doc_order_process"."request_id" IS '请求id';
COMMENT ON COLUMN "doc_order_process"."request_table_name" IS '请求表名';
COMMENT ON COLUMN "doc_order_process"."original_organization_id" IS '原科室';
COMMENT ON COLUMN "doc_order_process"."target_organization_id" IS '目标科室';
COMMENT ON COLUMN "doc_order_process"."original_location_id" IS '原病区';
COMMENT ON COLUMN "doc_order_process"."target_location_id" IS '目标病区';
COMMENT ON COLUMN "doc_order_process"."out_way_code" IS '出院方式';
COMMENT ON COLUMN "doc_order_process"."tenant_id" IS '租户ID';
COMMENT ON COLUMN "doc_order_process"."delete_flag" IS '删除状态';
COMMENT ON COLUMN "doc_order_process"."create_by" IS '创建人';
COMMENT ON COLUMN "doc_order_process"."create_time" IS '创建时间';
COMMENT ON COLUMN "doc_order_process"."update_by" IS '更新人';
COMMENT ON COLUMN "doc_order_process"."update_time" IS '更新时间';
COMMENT ON TABLE "doc_order_process" IS '医嘱过程表';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202509021111add_table_doc_order_process', '1.0.0');

View File

@@ -0,0 +1,106 @@
-- 1. 创建文档模板表主键序列自增ID
CREATE SEQUENCE doc_template_id_seq
START WITH 1 -- 起始值为1
INCREMENT BY 1 -- 每次递增1
NO MINVALUE -- 无最小值限制
NO MAXVALUE -- 无最大值限制
CACHE 1; -- 缓存1个序列值提升性能
-- 2. 创建文档模板表doc_template
CREATE TABLE "doc_template" (
-- 主键字段
"id" int8 NOT NULL DEFAULT nextval('doc_template_id_seq'::regclass), -- 主键ID关联序列自增
-- 业务核心字段与实体类DocTemplate对应
"name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL, -- 模板名称非空建议100字符内
"display_order" int4 DEFAULT 0, -- 排序号默认0值越小越靠前
"context_json" text COLLATE "pg_catalog"."default" NOT NULL, -- 模板内容JSON格式非空存储模板结构
"definition_id" int8 NOT NULL, -- 文书定义ID非空关联doc_definition表主键
"use_range" int4 NOT NULL DEFAULT 0, -- 使用范围非空0-暂不使用/1-全院/2-指定科室/3-个人)
"organization_id" int8, -- 指定科室IDuse_range=2时有效关联科室表
"user_id" int8, -- 指定用户IDuse_range=3时有效关联用户表
"remark" varchar(500) COLLATE "pg_catalog"."default", -- 备注500字符内存储使用说明
-- 继承HisBaseEntity的审计字段通用字段无需实体类显式定义
"tenant_id" int8 NOT NULL, -- 租户ID非空多租户隔离
"delete_flag" char(1) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '0', -- 删除标志非空0-未删除/1-已删除)
"create_by" varchar(32) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '', -- 创建人(非空,存储用户名)
"create_time" timestamptz(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间(非空,默认当前时间,带时区)
"update_by" varchar(32) COLLATE "pg_catalog"."default", -- 更新人(存储用户名)
"update_time" timestamptz(6), -- 更新时间(带时区)
-- 主键约束
CONSTRAINT "doc_template_pkey" PRIMARY KEY ("id")
-- 外键约束(关联文书定义表,确保数据一致性)
-- CONSTRAINT "fk_doc_template_definition" FOREIGN KEY ("definition_id")
-- REFERENCES "doc_definition" ("id") ON DELETE RESTRICT, -- 文书定义删除时,限制删除(避免模板关联失效)
--
-- -- 外键约束关联科室表use_range=2时生效
-- CONSTRAINT "fk_doc_template_organization" FOREIGN KEY ("organization_id")
-- REFERENCES "sys_organization" ("id") ON DELETE SET NULL, -- 科室删除时,置空该字段
--
-- -- 外键约束关联用户表use_range=3时生效
-- CONSTRAINT "fk_doc_template_user" FOREIGN KEY ("user_id")
-- REFERENCES "sys_user" ("id") ON DELETE SET NULL, -- 用户删除时,置空该字段
--
-- -- 唯一约束(模板名称+文书定义ID唯一避免同文书下重复模板
-- CONSTRAINT "uk_doc_template_name_defid" UNIQUE ("name", "definition_id")
);
-- 3. 设置表所有者与项目数据库用户一致通常为postgres
ALTER TABLE "doc_template" OWNER TO "postgres";
-- 4. 表及字段注释(便于维护,与实体类注释对应)
COMMENT ON TABLE "doc_template" IS '文档模板表:存储各类文书的模板信息,支持全院、科室、个人等不同使用范围';
COMMENT ON COLUMN "doc_template"."id" IS '主键ID';
COMMENT ON COLUMN "doc_template"."name" IS '模板名称:唯一标识模板,同文书定义下不可重复';
COMMENT ON COLUMN "doc_template"."display_order" IS '排序号模板列表展示顺序值越小越靠前默认0';
COMMENT ON COLUMN "doc_template"."context_json" IS '模板内容JSON格式存储模板结构、字段配置等信息前端据此渲染模板';
COMMENT ON COLUMN "doc_template"."definition_id" IS '文书定义ID关联doc_definition表标识模板所属的文书类型';
COMMENT ON COLUMN "doc_template"."use_range" IS '使用范围0-暂不使用1-全院使用2-指定科室使用3-个人使用';
COMMENT ON COLUMN "doc_template"."organization_id" IS '指定科室IDuse_range=2时有效关联sys_organization表';
COMMENT ON COLUMN "doc_template"."user_id" IS '指定用户IDuse_range=3时有效关联sys_user表';
COMMENT ON COLUMN "doc_template"."remark" IS '备注:存储模板使用场景、注意事项等额外说明';
COMMENT ON COLUMN "doc_template"."tenant_id" IS '租户ID多租户系统隔离字段非空';
COMMENT ON COLUMN "doc_template"."delete_flag" IS '删除标志0-未删除1-已删除默认0';
COMMENT ON COLUMN "doc_template"."create_by" IS '创建人:存储创建者用户名,非空';
COMMENT ON COLUMN "doc_template"."create_time" IS '创建时间:默认当前时间,带时区,非空';
COMMENT ON COLUMN "doc_template"."update_by" IS '更新人:存储更新者用户名';
COMMENT ON COLUMN "doc_template"."update_time" IS '更新时间:带时区';
-- -- 5. 索引设计(优化高频查询场景,提升性能)
-- -- 1按文书定义ID查询高频查询某类文书的所有模板
-- CREATE INDEX "idx_doc_template_definition"
-- ON "doc_template" ("definition_id")
-- WHERE "delete_flag" = '0'; -- 只索引未删除数据,减少索引体积
--
-- -- 2按使用范围+科室ID查询高频科室用户查询本科室模板
-- CREATE INDEX "idx_doc_template_userange_org"
-- ON "doc_template" ("use_range", "organization_id")
-- WHERE "delete_flag" = '0';
--
-- -- 3按使用范围+用户ID查询高频个人用户查询自己的模板
-- CREATE INDEX "idx_doc_template_userange_user"
-- ON "doc_template" ("use_range", "user_id")
-- WHERE "delete_flag" = '0';
--
-- -- 4按模板名称模糊查询高频搜索模板
-- CREATE INDEX "idx_doc_template_name"
-- ON "doc_template" ("name")
-- WHERE "delete_flag" = '0';
--
-- -- 5按租户ID+创建时间查询(高频:多租户下按时间筛选模板)
-- CREATE INDEX "idx_doc_template_tenant_createtime"
-- ON "doc_template" ("tenant_id", "create_time")
-- WHERE "delete_flag" = '0';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202509011214add_table_doc_template', '1.0.0');

View File

@@ -0,0 +1,87 @@
CREATE TABLE yb_inpatient_info_recorde (
ID BIGSERIAL PRIMARY KEY,
mdtrt_id VARCHAR ( 50 ) NOT NULL,
psn_no VARCHAR ( 50 ) NOT NULL,
coner_name VARCHAR ( 100 ),
tel VARCHAR ( 30 ),
begntime TIMESTAMP,
endtime TIMESTAMP,
mdtrt_cert_type VARCHAR ( 20 ),
med_type VARCHAR ( 20 ),
ipt_otp_no VARCHAR ( 50 ),
medrcdno VARCHAR ( 50 ),
atddr_no VARCHAR ( 50 ),
chfpdr_name VARCHAR ( 100 ),
adm_diag_dscr TEXT,
adm_dept_codg VARCHAR ( 50 ),
adm_dept_name VARCHAR ( 100 ),
adm_bed VARCHAR ( 20 ),
dscg_maindiag_code VARCHAR ( 20 ),
dscg_maindiag_name VARCHAR ( 200 ),
main_cond_dscr TEXT,
dise_codg VARCHAR ( 50 ),
dise_name VARCHAR ( 200 ),
oprn_oprt_code VARCHAR ( 50 ),
oprn_oprt_name VARCHAR ( 200 ),
fpsc_no VARCHAR ( 50 ),
matn_type VARCHAR ( 20 ),
birctrl_type VARCHAR ( 20 ),
latechb_flag CHAR ( 1 ),
esso_val INTEGER,
fetts INTEGER,
fetus_cnt INTEGER,
pret_flag CHAR ( 1 ),
birctrl_matn_date DATE,
dise_type_code VARCHAR ( 20 ),
input_param TEXT,
output_result TEXT,
"tenant_id" INT8 NOT NULL,
"delete_flag" CHAR ( 1 ) COLLATE "pg_catalog"."default" NOT NULL DEFAULT 0,
"create_by" VARCHAR COLLATE "pg_catalog"."default" NOT NULL DEFAULT '' :: CHARACTER VARYING,
"create_time" TIMESTAMPTZ ( 6 ) NOT NULL,
"update_by" VARCHAR COLLATE "pg_catalog"."default",
"update_time" TIMESTAMPTZ ( 6 )
);
COMMENT ON TABLE yb_inpatient_info_recorde IS '住院信息更新记录表';
-- 添加字段注释
COMMENT ON COLUMN yb_inpatient_info_recorde.ID IS '主键ID';
COMMENT ON COLUMN yb_inpatient_info_recorde.mdtrt_id IS '就诊ID';
COMMENT ON COLUMN yb_inpatient_info_recorde.psn_no IS '人员编号';
COMMENT ON COLUMN yb_inpatient_info_recorde.coner_name IS '联系人姓名';
COMMENT ON COLUMN yb_inpatient_info_recorde.tel IS '联系电话';
COMMENT ON COLUMN yb_inpatient_info_recorde.begntime IS '开始时间格式yyyy-MM-dd HH:mm:ss';
COMMENT ON COLUMN yb_inpatient_info_recorde.endtime IS '结束时间格式yyyy-MM-dd HH:mm:ss';
COMMENT ON COLUMN yb_inpatient_info_recorde.mdtrt_cert_type IS '就诊凭证类型';
COMMENT ON COLUMN yb_inpatient_info_recorde.med_type IS '医疗类别';
COMMENT ON COLUMN yb_inpatient_info_recorde.ipt_otp_no IS '住院/门诊号';
COMMENT ON COLUMN yb_inpatient_info_recorde.medrcdno IS '病历号';
COMMENT ON COLUMN yb_inpatient_info_recorde.atddr_no IS '主治医生编码';
COMMENT ON COLUMN yb_inpatient_info_recorde.chfpdr_name IS '主诊医师姓名';
COMMENT ON COLUMN yb_inpatient_info_recorde.adm_diag_dscr IS '入院诊断描述';
COMMENT ON COLUMN yb_inpatient_info_recorde.adm_dept_codg IS '入院科室编码';
COMMENT ON COLUMN yb_inpatient_info_recorde.adm_dept_name IS '入院科室名称';
COMMENT ON COLUMN yb_inpatient_info_recorde.adm_bed IS '入院床位';
COMMENT ON COLUMN yb_inpatient_info_recorde.dscg_maindiag_code IS '住院主诊断代码';
COMMENT ON COLUMN yb_inpatient_info_recorde.dscg_maindiag_name IS '住院主诊断名称';
COMMENT ON COLUMN yb_inpatient_info_recorde.main_cond_dscr IS '主要病情描述';
COMMENT ON COLUMN yb_inpatient_info_recorde.dise_codg IS '病种编码';
COMMENT ON COLUMN yb_inpatient_info_recorde.dise_name IS '病种名称';
COMMENT ON COLUMN yb_inpatient_info_recorde.oprn_oprt_code IS '手术操作代码';
COMMENT ON COLUMN yb_inpatient_info_recorde.oprn_oprt_name IS '手术操作名称';
COMMENT ON COLUMN yb_inpatient_info_recorde.fpsc_no IS '计划生育服务证号';
COMMENT ON COLUMN yb_inpatient_info_recorde.matn_type IS '生育类别';
COMMENT ON COLUMN yb_inpatient_info_recorde.birctrl_type IS '计划生育手术类别';
COMMENT ON COLUMN yb_inpatient_info_recorde.latechb_flag IS '晚育标志';
COMMENT ON COLUMN yb_inpatient_info_recorde.esso_val IS '孕周数';
COMMENT ON COLUMN yb_inpatient_info_recorde.fetts IS '胎次';
COMMENT ON COLUMN yb_inpatient_info_recorde.fetus_cnt IS '胎儿数';
COMMENT ON COLUMN yb_inpatient_info_recorde.pret_flag IS '早产标志';
COMMENT ON COLUMN yb_inpatient_info_recorde.birctrl_matn_date IS '计划生育手术或生育日期格式yyyy-MM-dd';
COMMENT ON COLUMN yb_inpatient_info_recorde.dise_type_code IS '病种编号';
COMMENT ON COLUMN yb_inpatient_info_recorde.input_param IS '输入参数';
COMMENT ON COLUMN yb_inpatient_info_recorde.output_result IS '输出结果';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202507311413 yb_inpatient_info_recorde', '1.0.0');

View File

@@ -0,0 +1,34 @@
CREATE TABLE yb_inpatient_cancel_fee_detail (
ID BIGSERIAL PRIMARY KEY,
feedetl_sn VARCHAR ( 50 ) NOT NULL,
psn_no VARCHAR ( 50 ) NOT NULL,
mdtrt_id VARCHAR ( 50 ) NOT NULL,
exp_content TEXT,
input_param TEXT,
output_result TEXT,
"tenant_id" INT8 NOT NULL,
"delete_flag" CHAR ( 1 ) COLLATE "pg_catalog"."default" NOT NULL DEFAULT 0,
"create_by" VARCHAR COLLATE "pg_catalog"."default" NOT NULL DEFAULT '' :: CHARACTER VARYING,
"create_time" TIMESTAMPTZ ( 6 ) NOT NULL,
"update_by" VARCHAR COLLATE "pg_catalog"."default",
"update_time" TIMESTAMPTZ ( 6 )
);
COMMENT ON TABLE yb_inpatient_cancel_fee_detail IS '住院退费明细表';
-- 添加字段注释
COMMENT ON COLUMN yb_inpatient_cancel_fee_detail.ID IS '主键ID';
COMMENT ON COLUMN yb_inpatient_cancel_fee_detail.feedetl_sn IS '费用明细流水号(单次就诊内唯一)';
COMMENT ON COLUMN yb_inpatient_cancel_fee_detail.psn_no IS '人员编号(退单时传入被退单的费用明细流水号)';
COMMENT ON COLUMN yb_inpatient_cancel_fee_detail.mdtrt_id IS '就诊ID';
COMMENT ON COLUMN yb_inpatient_cancel_fee_detail.exp_content IS '字段扩展';
COMMENT ON COLUMN yb_inpatient_cancel_fee_detail.input_param IS '输入参数';
COMMENT ON COLUMN yb_inpatient_cancel_fee_detail.output_result IS '输出结果';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202507311518 yb_inpatient_cancel_fee_detail', '1.0.0');

View File

@@ -0,0 +1,124 @@
CREATE TABLE yb_inpatient_pre_settle (
ID BIGSERIAL PRIMARY KEY,
psn_no VARCHAR ( 50 ) NOT NULL,
mdtrt_cert_type VARCHAR ( 20 ),
mdtrt_cert_no VARCHAR ( 100 ),
medfee_sumamt NUMERIC ( 20, 2 ),
psn_setlway VARCHAR ( 20 ),
mdtrt_id VARCHAR ( 50 ) NOT NULL,
acct_used_flag CHAR ( 1 ),
insutype VARCHAR ( 20 ),
insuplc_admdvs VARCHAR ( 20 ),
mdtrtarea_admvs VARCHAR ( 20 ),
invono VARCHAR ( 50 ),
mid_setl_flag CHAR ( 1 ),
fulamt_ownpay_amt NUMERIC ( 20, 2 ),
overlmt_selfpay NUMERIC ( 20, 2 ),
preselfpay_amt NUMERIC ( 20, 2 ),
inscp_scp_amt NUMERIC ( 20, 2 ),
dscg_time DATE,
psn_name VARCHAR ( 100 ),
psn_cert_type VARCHAR ( 20 ),
certno VARCHAR ( 50 ),
gend CHAR ( 1 ),
naty VARCHAR ( 20 ),
brdy DATE,
age NUMERIC ( 5, 1 ),
psn_type VARCHAR ( 20 ),
cvlserv_flag CHAR ( 1 ),
setl_time TIMESTAMP,
med_type VARCHAR ( 20 ),
act_pay_dedc NUMERIC ( 20, 2 ),
hifp_pay NUMERIC ( 20, 2 ),
pool_prop_selfpay NUMERIC ( 5, 4 ),
cvlserv_pay NUMERIC ( 20, 2 ),
hifes_pay NUMERIC ( 20, 2 ),
hifmi_pay NUMERIC ( 20, 2 ),
hifob_pay NUMERIC ( 20, 2 ),
maf_pay NUMERIC ( 20, 2 ),
oth_pay NUMERIC ( 20, 2 ),
fund_pay_sumamt NUMERIC ( 20, 2 ),
psn_part_amt NUMERIC ( 20, 2 ),
acct_pay NUMERIC ( 20, 2 ),
psn_cash_pay NUMERIC ( 20, 2 ),
hosp_part_amt NUMERIC ( 20, 2 ),
balc NUMERIC ( 20, 2 ),
acct_mulaid_pay NUMERIC ( 20, 2 ),
medins_setl_id VARCHAR ( 50 ),
clr_optins VARCHAR ( 50 ),
clr_way VARCHAR ( 20 ),
clr_type VARCHAR ( 20 ),
hifdm_pay NUMERIC ( 20, 2 ),
input_param TEXT,
output_result TEXT,
"tenant_id" INT8 NOT NULL,
"delete_flag" CHAR ( 1 ) COLLATE "pg_catalog"."default" NOT NULL DEFAULT 0,
"create_by" VARCHAR COLLATE "pg_catalog"."default" NOT NULL DEFAULT '' :: CHARACTER VARYING,
"create_time" TIMESTAMPTZ ( 6 ) NOT NULL,
"update_by" VARCHAR COLLATE "pg_catalog"."default",
"update_time" TIMESTAMPTZ ( 6 )
);
COMMENT ON TABLE yb_inpatient_pre_settle IS '住院预结算信息表';
-- 添加字段注释
COMMENT ON COLUMN yb_inpatient_pre_settle.ID IS '主键ID';
COMMENT ON COLUMN yb_inpatient_pre_settle.psn_no IS '人员编号';
COMMENT ON COLUMN yb_inpatient_pre_settle.mdtrt_cert_type IS '就诊凭证类型';
COMMENT ON COLUMN yb_inpatient_pre_settle.mdtrt_cert_no IS '就诊凭证编号';
COMMENT ON COLUMN yb_inpatient_pre_settle.medfee_sumamt IS '医疗费总额';
COMMENT ON COLUMN yb_inpatient_pre_settle.psn_setlway IS '个人结算方式';
COMMENT ON COLUMN yb_inpatient_pre_settle.mdtrt_id IS '就诊ID';
COMMENT ON COLUMN yb_inpatient_pre_settle.acct_used_flag IS '个人账户使用标志';
COMMENT ON COLUMN yb_inpatient_pre_settle.insutype IS '险种类型';
COMMENT ON COLUMN yb_inpatient_pre_settle.insuplc_admdvs IS '参保地医保区划';
COMMENT ON COLUMN yb_inpatient_pre_settle.mdtrtarea_admvs IS '就医地医保区划';
COMMENT ON COLUMN yb_inpatient_pre_settle.invono IS '发票号';
COMMENT ON COLUMN yb_inpatient_pre_settle.mid_setl_flag IS '中途结算标志';
COMMENT ON COLUMN yb_inpatient_pre_settle.fulamt_ownpay_amt IS '全自费金额';
COMMENT ON COLUMN yb_inpatient_pre_settle.overlmt_selfpay IS '超限价金额';
COMMENT ON COLUMN yb_inpatient_pre_settle.preselfpay_amt IS '先行自付金额';
COMMENT ON COLUMN yb_inpatient_pre_settle.inscp_scp_amt IS '符合政策范围金额';
COMMENT ON COLUMN yb_inpatient_pre_settle.dscg_time IS '出院时间格式yyyy-MM-dd';
COMMENT ON COLUMN yb_inpatient_pre_settle.psn_name IS '人员姓名';
COMMENT ON COLUMN yb_inpatient_pre_settle.psn_cert_type IS '人员证件类型';
COMMENT ON COLUMN yb_inpatient_pre_settle.certno IS '证件号码';
COMMENT ON COLUMN yb_inpatient_pre_settle.gend IS '性别';
COMMENT ON COLUMN yb_inpatient_pre_settle.naty IS '民族';
COMMENT ON COLUMN yb_inpatient_pre_settle.brdy IS '出生日期格式yyyy-MM-dd';
COMMENT ON COLUMN yb_inpatient_pre_settle.age IS '年龄';
COMMENT ON COLUMN yb_inpatient_pre_settle.psn_type IS '人员类别';
COMMENT ON COLUMN yb_inpatient_pre_settle.cvlserv_flag IS '公务员标志';
COMMENT ON COLUMN yb_inpatient_pre_settle.setl_time IS '结算时间格式yyyy-MM-dd HH:mm:ss';
COMMENT ON COLUMN yb_inpatient_pre_settle.med_type IS '医疗类别';
COMMENT ON COLUMN yb_inpatient_pre_settle.act_pay_dedc IS '实际支付起付线';
COMMENT ON COLUMN yb_inpatient_pre_settle.hifp_pay IS '基本医疗保险统筹基金支出';
COMMENT ON COLUMN yb_inpatient_pre_settle.pool_prop_selfpay IS '基本医疗保险统筹基金支付比例';
COMMENT ON COLUMN yb_inpatient_pre_settle.cvlserv_pay IS '公务员医疗补助资金支出';
COMMENT ON COLUMN yb_inpatient_pre_settle.hifes_pay IS '企业补充医疗保险基金支出';
COMMENT ON COLUMN yb_inpatient_pre_settle.hifmi_pay IS '居民大病保险资金支出';
COMMENT ON COLUMN yb_inpatient_pre_settle.hifob_pay IS '职工大额医疗费用补助基金支出';
COMMENT ON COLUMN yb_inpatient_pre_settle.maf_pay IS '医疗救助基金支出';
COMMENT ON COLUMN yb_inpatient_pre_settle.oth_pay IS '其他支出';
COMMENT ON COLUMN yb_inpatient_pre_settle.fund_pay_sumamt IS '基金支付总额';
COMMENT ON COLUMN yb_inpatient_pre_settle.psn_part_amt IS '个人负担总金额';
COMMENT ON COLUMN yb_inpatient_pre_settle.acct_pay IS '个人账户支出';
COMMENT ON COLUMN yb_inpatient_pre_settle.psn_cash_pay IS '个人现金支出';
COMMENT ON COLUMN yb_inpatient_pre_settle.hosp_part_amt IS '医院负担金额';
COMMENT ON COLUMN yb_inpatient_pre_settle.balc IS '余额';
COMMENT ON COLUMN yb_inpatient_pre_settle.acct_mulaid_pay IS '个人账户共济支付金额';
COMMENT ON COLUMN yb_inpatient_pre_settle.medins_setl_id IS '医药机构结算ID存放发送方报文ID';
COMMENT ON COLUMN yb_inpatient_pre_settle.clr_optins IS '清算经办机构';
COMMENT ON COLUMN yb_inpatient_pre_settle.clr_way IS '清算方式';
COMMENT ON COLUMN yb_inpatient_pre_settle.clr_type IS '清算类别';
COMMENT ON COLUMN yb_inpatient_pre_settle.hifdm_pay IS '伤残人员医疗保障基金支出1.5.4新增)';
COMMENT ON COLUMN yb_inpatient_pre_settle.input_param IS '输入参数';
COMMENT ON COLUMN yb_inpatient_pre_settle.output_result IS '输出结果';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202507311620 yb_inpatient_pre_settle', '1.0.0');

View File

@@ -0,0 +1,130 @@
CREATE SEQUENCE wor_aut_supply_request_id_seq;
-- ----------------------------
-- Table structure for wor_aut_supply_request
-- ----------------------------
DROP TABLE IF EXISTS "wor_aut_supply_request";
CREATE TABLE "wor_aut_supply_request" (
"id" int8 NOT NULL DEFAULT nextval('wor_aut_supply_request_id_seq'::regclass),
"type_enum" int4 DEFAULT 1,
"status_enum" int4 DEFAULT 0,
"intent_enum" int4,
"category_enum" int4,
"priority_enum" int4 DEFAULT 0,
"summary_id" int8,
"deliver_id" int8,
"patient_id" int8,
"item_table" varchar(255) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"item_quantity" numeric(20,6),
"item_id" int8,
"unit_code" varchar(255) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"detail_json" varchar(20000) COLLATE "pg_catalog"."default" DEFAULT '{}'::character varying,
"occurrence_time" timestamptz(6),
"practitioner_id" int8,
"supplier_id" int8,
"reason" varchar(2000) COLLATE "pg_catalog"."default",
"source_type_enum" int4 DEFAULT 0,
"source_location_id" int8,
"source_location_store_id" int8,
"purpose_type_enum" int4 DEFAULT 0,
"purpose_location_id" int8,
"purpose_location_store_id" int8,
"approver_id" int8,
"approval_time" timestamptz(6),
"applicant_id" int8,
"apply_time" timestamptz(6),
"tenant_id" int8,
"delete_flag" char(1) COLLATE "pg_catalog"."default" DEFAULT 0,
"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",
"update_time" timestamptz(6),
"lot_number" varchar(255) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"trace_no" varchar(50000) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"start_time" timestamptz(6),
"end_time" timestamptz(6),
"invoice_no" varchar(255) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"price" numeric(20,6),
"total_price" numeric(20,6),
"bus_no" varchar(255) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"remake" varchar(2000) COLLATE "pg_catalog"."default",
"reason_code" varchar(255) COLLATE "pg_catalog"."default",
"original_bus_no" varchar(255) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"total_quantity" numeric(20,6),
"retail_price" numeric(20,6),
"total_retail_price" numeric(20,6),
"trace_no_unit_code" varchar(255) COLLATE "pg_catalog"."default",
"packaging_condition_enum" int4,
"acceptance_result_enum" int4,
"batch_inventory" numeric(20,6),
"specification_inventory" numeric(20,6)
)
;
COMMENT ON COLUMN "wor_aut_supply_request"."id" IS 'ID';
COMMENT ON COLUMN "wor_aut_supply_request"."type_enum" IS '类型';
COMMENT ON COLUMN "wor_aut_supply_request"."status_enum" IS '状态';
COMMENT ON COLUMN "wor_aut_supply_request"."intent_enum" IS '意图';
COMMENT ON COLUMN "wor_aut_supply_request"."category_enum" IS '分类';
COMMENT ON COLUMN "wor_aut_supply_request"."priority_enum" IS '优先权';
COMMENT ON COLUMN "wor_aut_supply_request"."summary_id" IS '汇总编号';
COMMENT ON COLUMN "wor_aut_supply_request"."deliver_id" IS '交付';
COMMENT ON COLUMN "wor_aut_supply_request"."patient_id" IS '患者id';
COMMENT ON COLUMN "wor_aut_supply_request"."item_table" IS '项目';
COMMENT ON COLUMN "wor_aut_supply_request"."item_quantity" IS '数量';
COMMENT ON COLUMN "wor_aut_supply_request"."item_id" IS '物品编码';
COMMENT ON COLUMN "wor_aut_supply_request"."unit_code" IS '物品计量单位';
COMMENT ON COLUMN "wor_aut_supply_request"."detail_json" IS '请求细节';
COMMENT ON COLUMN "wor_aut_supply_request"."occurrence_time" IS '期望时间';
COMMENT ON COLUMN "wor_aut_supply_request"."practitioner_id" IS '供应人';
COMMENT ON COLUMN "wor_aut_supply_request"."supplier_id" IS '供应商';
COMMENT ON COLUMN "wor_aut_supply_request"."reason" IS '理由';
COMMENT ON COLUMN "wor_aut_supply_request"."source_type_enum" IS '源仓库类型';
COMMENT ON COLUMN "wor_aut_supply_request"."source_location_id" IS '源仓库';
COMMENT ON COLUMN "wor_aut_supply_request"."source_location_store_id" IS '源仓位';
COMMENT ON COLUMN "wor_aut_supply_request"."purpose_type_enum" IS '目的类型';
COMMENT ON COLUMN "wor_aut_supply_request"."purpose_location_id" IS '目的仓库';
COMMENT ON COLUMN "wor_aut_supply_request"."purpose_location_store_id" IS '目的仓位';
COMMENT ON COLUMN "wor_aut_supply_request"."approver_id" IS '审批人';
COMMENT ON COLUMN "wor_aut_supply_request"."approval_time" IS '审批时间';
COMMENT ON COLUMN "wor_aut_supply_request"."applicant_id" IS '申请人';
COMMENT ON COLUMN "wor_aut_supply_request"."apply_time" IS '申请时间';
COMMENT ON COLUMN "wor_aut_supply_request"."tenant_id" IS '租户ID';
COMMENT ON COLUMN "wor_aut_supply_request"."delete_flag" IS '删除状态';
COMMENT ON COLUMN "wor_aut_supply_request"."create_by" IS '创建人';
COMMENT ON COLUMN "wor_aut_supply_request"."create_time" IS '创建时间';
COMMENT ON COLUMN "wor_aut_supply_request"."update_by" IS '更新人';
COMMENT ON COLUMN "wor_aut_supply_request"."update_time" IS '更新时间';
COMMENT ON COLUMN "wor_aut_supply_request"."lot_number" IS '产品批号';
COMMENT ON COLUMN "wor_aut_supply_request"."trace_no" IS '追溯码';
COMMENT ON COLUMN "wor_aut_supply_request"."start_time" IS '开始时间';
COMMENT ON COLUMN "wor_aut_supply_request"."end_time" IS '结束时间';
COMMENT ON COLUMN "wor_aut_supply_request"."invoice_no" IS '发票码';
COMMENT ON COLUMN "wor_aut_supply_request"."price" IS '单价';
COMMENT ON COLUMN "wor_aut_supply_request"."total_price" IS '总价';
COMMENT ON COLUMN "wor_aut_supply_request"."bus_no" IS '单据号';
COMMENT ON COLUMN "wor_aut_supply_request"."remake" IS '备注';
COMMENT ON COLUMN "wor_aut_supply_request"."reason_code" IS '理由种类';
COMMENT ON COLUMN "wor_aut_supply_request"."original_bus_no" IS '原始单据号';
COMMENT ON COLUMN "wor_aut_supply_request"."total_quantity" IS '盘点实盘数量';
COMMENT ON COLUMN "wor_aut_supply_request"."retail_price" IS '零售价';
COMMENT ON COLUMN "wor_aut_supply_request"."total_retail_price" IS '零售总价';
COMMENT ON COLUMN "wor_aut_supply_request"."trace_no_unit_code" IS '追溯码单位';
COMMENT ON COLUMN "wor_aut_supply_request"."packaging_condition_enum" IS '包装情况';
COMMENT ON COLUMN "wor_aut_supply_request"."acceptance_result_enum" IS '验收结果';
COMMENT ON COLUMN "wor_aut_supply_request"."batch_inventory" IS '批次库存';
COMMENT ON COLUMN "wor_aut_supply_request"."specification_inventory" IS '规格库存';
COMMENT ON TABLE "wor_aut_supply_request" IS '供应申请管理';
-- ----------------------------
-- Primary Key structure for table wor_aut_supply_request
-- ----------------------------
ALTER TABLE "wor_aut_supply_request" ADD CONSTRAINT "wor_aut_supply_request_pkey" PRIMARY KEY ("id");
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202507311706 wor_aut_supply_request', '1.0.0');

View File

@@ -0,0 +1,98 @@
CREATE TABLE yb_inpatient_un_settle (
ID BIGSERIAL PRIMARY KEY,
mdtrt_id VARCHAR ( 50 ) NOT NULL,
setl_id VARCHAR ( 50 ) NOT NULL,
psn_no VARCHAR ( 50 ) NOT NULL,
clr_optins VARCHAR ( 50 ),
setl_time TIMESTAMP,
medfee_sumamt NUMERIC ( 20, 2 ),
fulamt_ownpay_amt NUMERIC ( 20, 2 ),
overlmt_selfpay NUMERIC ( 20, 2 ),
preselfpay_amt NUMERIC ( 20, 2 ),
inscp_scp_amt NUMERIC ( 20, 2 ),
act_pay_dedc NUMERIC ( 20, 2 ),
hifp_pay NUMERIC ( 20, 2 ),
pool_prop_selfpay NUMERIC ( 5, 4 ),
cvlserv_pay NUMERIC ( 20, 2 ),
hifes_pay NUMERIC ( 20, 2 ),
hifmi_pay NUMERIC ( 20, 2 ),
hifob_pay NUMERIC ( 20, 2 ),
maf_pay NUMERIC ( 20, 2 ),
oth_pay NUMERIC ( 20, 2 ),
fund_pay_sumamt NUMERIC ( 20, 2 ),
psn_part_amt NUMERIC ( 20, 2 ),
acct_pay NUMERIC ( 20, 2 ),
psn_cash_pay NUMERIC ( 20, 2 ),
hosp_part_amt NUMERIC ( 20, 2 ),
balc NUMERIC ( 20, 2 ),
acct_mulaid_pay NUMERIC ( 20, 2 ),
medins_setl_id VARCHAR ( 50 ),
hifdm_pay NUMERIC ( 20, 2 ),
psn_insu_rlts_id VARCHAR ( 50 ),
insu_admdvs VARCHAR ( 20 ),
begndate DATE,
enddate DATE,
mdtrt_cert_no VARCHAR ( 100 ),
setl_type VARCHAR ( 20 ),
crt_dedc NUMERIC ( 20, 2 ),
invono VARCHAR ( 50 ),
input_param TEXT,
output_result TEXT,
"tenant_id" INT8 NOT NULL,
"delete_flag" CHAR ( 1 ) COLLATE "pg_catalog"."default" NOT NULL DEFAULT 0,
"create_by" VARCHAR COLLATE "pg_catalog"."default" NOT NULL DEFAULT '' :: CHARACTER VARYING,
"create_time" TIMESTAMPTZ ( 6 ) NOT NULL,
"update_by" VARCHAR COLLATE "pg_catalog"."default",
"update_time" TIMESTAMPTZ ( 6 )
);
COMMENT ON TABLE yb_inpatient_un_settle IS '住院未结算信息表';
-- 添加字段注释
COMMENT ON COLUMN yb_inpatient_un_settle.ID IS '主键ID';
COMMENT ON COLUMN yb_inpatient_un_settle.mdtrt_id IS '就诊ID';
COMMENT ON COLUMN yb_inpatient_un_settle.setl_id IS '结算ID';
COMMENT ON COLUMN yb_inpatient_un_settle.psn_no IS '人员编号';
COMMENT ON COLUMN yb_inpatient_un_settle.clr_optins IS '清算经办机构';
COMMENT ON COLUMN yb_inpatient_un_settle.setl_time IS '结算时间格式yyyy-MM-dd HH:mm:ss';
COMMENT ON COLUMN yb_inpatient_un_settle.medfee_sumamt IS '医疗费总额';
COMMENT ON COLUMN yb_inpatient_un_settle.fulamt_ownpay_amt IS '全自费金额';
COMMENT ON COLUMN yb_inpatient_un_settle.overlmt_selfpay IS '超限价自费费用';
COMMENT ON COLUMN yb_inpatient_un_settle.preselfpay_amt IS '先行自付金额';
COMMENT ON COLUMN yb_inpatient_un_settle.inscp_scp_amt IS '符合政策范围金额';
COMMENT ON COLUMN yb_inpatient_un_settle.act_pay_dedc IS '实际支付起付线';
COMMENT ON COLUMN yb_inpatient_un_settle.hifp_pay IS '基本医疗保险统筹基金支出';
COMMENT ON COLUMN yb_inpatient_un_settle.pool_prop_selfpay IS '基本医疗保险统筹基金支付比例';
COMMENT ON COLUMN yb_inpatient_un_settle.cvlserv_pay IS '公务员医疗补助资金支出';
COMMENT ON COLUMN yb_inpatient_un_settle.hifes_pay IS '企业补充医疗保险基金支出';
COMMENT ON COLUMN yb_inpatient_un_settle.hifmi_pay IS '居民大病保险资金支出';
COMMENT ON COLUMN yb_inpatient_un_settle.hifob_pay IS '职工大额医疗费用补助基金支出';
COMMENT ON COLUMN yb_inpatient_un_settle.maf_pay IS '医疗救助基金支出';
COMMENT ON COLUMN yb_inpatient_un_settle.oth_pay IS '其他支出';
COMMENT ON COLUMN yb_inpatient_un_settle.fund_pay_sumamt IS '基金支付总额';
COMMENT ON COLUMN yb_inpatient_un_settle.psn_part_amt IS '个人负担总金额';
COMMENT ON COLUMN yb_inpatient_un_settle.acct_pay IS '个人账户支出';
COMMENT ON COLUMN yb_inpatient_un_settle.psn_cash_pay IS '个人现金支出';
COMMENT ON COLUMN yb_inpatient_un_settle.hosp_part_amt IS '医院负担金额';
COMMENT ON COLUMN yb_inpatient_un_settle.balc IS '余额';
COMMENT ON COLUMN yb_inpatient_un_settle.acct_mulaid_pay IS '个人账户共济支付金额';
COMMENT ON COLUMN yb_inpatient_un_settle.medins_setl_id IS '医药机构结算ID存放发送方报文ID';
COMMENT ON COLUMN yb_inpatient_un_settle.hifdm_pay IS '伤残人员医疗保障基金支出';
COMMENT ON COLUMN yb_inpatient_un_settle.psn_insu_rlts_id IS '人员参保关系ID';
COMMENT ON COLUMN yb_inpatient_un_settle.insu_admdvs IS '参保机构行政区划';
COMMENT ON COLUMN yb_inpatient_un_settle.begndate IS '开始日期';
COMMENT ON COLUMN yb_inpatient_un_settle.enddate IS '结算日期';
COMMENT ON COLUMN yb_inpatient_un_settle.mdtrt_cert_no IS '就诊凭证编号';
COMMENT ON COLUMN yb_inpatient_un_settle.setl_type IS '结算类别';
COMMENT ON COLUMN yb_inpatient_un_settle.crt_dedc IS '本次起付线';
COMMENT ON COLUMN yb_inpatient_un_settle.invono IS '发票号';
COMMENT ON COLUMN yb_inpatient_un_settle.input_param IS '输入参数';
COMMENT ON COLUMN yb_inpatient_un_settle.output_result IS '输出结果';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508011023 yb_inpatient_un_settle', '1.0.0');

View File

@@ -0,0 +1,27 @@
CREATE TABLE yb_inpatient_un_discharge (
ID BIGSERIAL PRIMARY KEY,
mdtrt_id VARCHAR ( 50 ) NOT NULL,
psn_no VARCHAR ( 50 ) NOT NULL,
input_param TEXT,
output_result TEXT,
"tenant_id" INT8 NOT NULL,
"delete_flag" CHAR ( 1 ) COLLATE "pg_catalog"."default" NOT NULL DEFAULT 0,
"create_by" VARCHAR COLLATE "pg_catalog"."default" NOT NULL DEFAULT '' :: CHARACTER VARYING,
"create_time" TIMESTAMPTZ ( 6 ) NOT NULL,
"update_by" VARCHAR COLLATE "pg_catalog"."default",
"update_time" TIMESTAMPTZ ( 6 )
);
COMMENT ON TABLE yb_inpatient_un_discharge IS '住院未出院信息表';
COMMENT ON COLUMN yb_inpatient_un_discharge.ID IS '主键ID';
COMMENT ON COLUMN yb_inpatient_un_discharge.mdtrt_id IS '就诊ID';
COMMENT ON COLUMN yb_inpatient_un_discharge.psn_no IS '人员编号';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508011250 yb_inpatient_un_discharge', '1.0.0');

View File

@@ -0,0 +1,26 @@
CREATE TABLE yb_inpatient_un_reg (
ID BIGSERIAL PRIMARY KEY,
mdtrt_id VARCHAR ( 50 ) NOT NULL,
psn_no VARCHAR ( 50 ) NOT NULL,
input_param TEXT,
output_result TEXT,
"tenant_id" INT8 NOT NULL,
"delete_flag" CHAR ( 1 ) COLLATE "pg_catalog"."default" NOT NULL DEFAULT 0,
"create_by" VARCHAR COLLATE "pg_catalog"."default" NOT NULL DEFAULT '' :: CHARACTER VARYING,
"create_time" TIMESTAMPTZ ( 6 ) NOT NULL,
"update_by" VARCHAR COLLATE "pg_catalog"."default",
"update_time" TIMESTAMPTZ ( 6 )
);
COMMENT ON TABLE yb_inpatient_un_reg IS '住院未出院信息表';
COMMENT ON COLUMN yb_inpatient_un_reg.ID IS '主键ID';
COMMENT ON COLUMN yb_inpatient_un_reg.mdtrt_id IS '就诊ID';
COMMENT ON COLUMN yb_inpatient_un_reg.psn_no IS '人员编号';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508011421 yb_inpatient_un_reg', '1.0.0');

View File

@@ -0,0 +1,16 @@
ALTER TABLE "adm_device_definition"
ADD COLUMN "item_min_quantity" numeric(20,6) NOT NULL DEFAULT 0,
ADD COLUMN "item_max_quantity" numeric(20,6) NOT NULL DEFAULT 0;
COMMENT ON COLUMN "adm_device_definition"."item_min_quantity" IS '最小库存警戒数量(常规单位)';
COMMENT ON COLUMN "adm_device_definition"."item_max_quantity" IS '最大库存警戒数量(常规单位)';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508011554 adm_device_definition', '1.0.0');

View File

@@ -0,0 +1,9 @@
ALTER TABLE wor_service_request ADD therapy_enum int4 DEFAULT 1 NULL;
COMMENT ON COLUMN wor_service_request.therapy_enum IS '治疗类型';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508060915 wor_service_request', '1.0.0');

View File

@@ -0,0 +1,9 @@
ALTER TABLE med_medication_request ADD sort_number int4 DEFAULT 99 NULL;
COMMENT ON COLUMN med_medication_request.sort_number IS '排序号';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508081428 med_medication_request', '1.0.0');

View File

@@ -0,0 +1,39 @@
DROP TABLE IF EXISTS "fin_payment_rec_static";
CREATE TABLE fin_payment_rec_static (
id serial8 PRIMARY KEY,
reconciliation_id bigint,
count_by integer DEFAULT 2,
type_code varchar(32),
type_name varchar(32),
amount decimal,
charge_item_ids varchar,
tenant_id bigint,
delete_flag char(1) DEFAULT '0',
create_by varchar(32),
create_time timestamptz,
update_by varchar(32),
update_time timestamptz
);
-- 注释信息
COMMENT ON TABLE fin_payment_rec_static IS '付款记录统计表';
COMMENT ON COLUMN fin_payment_rec_static.id IS 'ID';
COMMENT ON COLUMN fin_payment_rec_static.reconciliation_id IS '付款id';
COMMENT ON COLUMN fin_payment_rec_static.count_by IS '统计方式1-字典fin_type_code2-医保十四项med_chrgitm_type';
COMMENT ON COLUMN fin_payment_rec_static.type_code IS '编码字典码1时用财富分类字典2时用医保分类的字典';
COMMENT ON COLUMN fin_payment_rec_static.type_name IS '编码名称(字典名称)';
COMMENT ON COLUMN fin_payment_rec_static.amount IS '金额';
COMMENT ON COLUMN fin_payment_rec_static.charge_item_ids IS '关联收费项Id';
COMMENT ON COLUMN fin_payment_rec_static.tenant_id IS '租户ID';
COMMENT ON COLUMN fin_payment_rec_static.delete_flag IS '删除状态';
COMMENT ON COLUMN fin_payment_rec_static.create_by IS '创建人';
COMMENT ON COLUMN fin_payment_rec_static.create_time IS '创建时间';
COMMENT ON COLUMN fin_payment_rec_static.update_by IS '更新人';
COMMENT ON COLUMN fin_payment_rec_static.update_time IS '更新时间';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508081554 fin_payment_rec_static', '1.0.0');

View File

@@ -0,0 +1,25 @@
DROP INDEX "reconciliation_id_index";
DROP INDEX "type_code_index";
ALTER TABLE "fin_payment_rec_static"
ALTER COLUMN "reconciliation_id" SET NOT NULL,
ALTER COLUMN "type_code" SET NOT NULL;
CREATE INDEX "reconciliation_id_index" ON "fin_payment_rec_static" USING btree (
"reconciliation_id"
);
CREATE INDEX "type_code_index" ON "fin_payment_rec_static" USING btree (
"type_code"
);
COMMENT ON INDEX "reconciliation_id_index" IS '付款id';
COMMENT ON INDEX "type_code_index" IS '分类类型';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508081601 fin_payment_rec_static', '1.0.0');

View File

@@ -0,0 +1,7 @@
ALTER TABLE med_medication_request ADD sign_code varchar(50) DEFAULT '' NULL;
COMMENT ON COLUMN med_medication_request.sign_code IS '签发编码';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508110809 med_medication_request', '1.0.0');

View File

@@ -0,0 +1,6 @@
ALTER TABLE wor_service_request ADD sign_code varchar(50) DEFAULT '' NULL;
COMMENT ON COLUMN wor_service_request.sign_code IS '签发编码';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508111126 wor_service_request', '1.0.0');

View File

@@ -0,0 +1,20 @@
ALTER TABLE cli_procedure RENAME COLUMN base_service_req_id TO request_id;
ALTER TABLE cli_procedure ALTER COLUMN request_id SET NOT NULL;
COMMENT ON COLUMN cli_procedure.request_id IS '医嘱id';
ALTER TABLE cli_procedure RENAME COLUMN base_med_req_id TO request_table;
ALTER TABLE cli_procedure ALTER COLUMN request_table TYPE varchar(255) USING request_table::varchar(255);
ALTER TABLE cli_procedure ALTER COLUMN request_table SET NOT NULL;
COMMENT ON COLUMN cli_procedure.request_table IS '医嘱所在表';
ALTER TABLE cli_procedure ADD encounter_id int8 NOT NULL;
COMMENT ON COLUMN cli_procedure.encounter_id IS '就诊id';
ALTER TABLE cli_procedure ADD org_id int8 NOT NULL;
COMMENT ON COLUMN cli_procedure.org_id IS '发放科室';
COMMENT ON TABLE cli_procedure IS '手术与医嘱管理';
COMMENT ON TABLE cli_procedure_performer IS '手术与医嘱执行人管理';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508111427 cli_procedure', '1.0.0');

View File

@@ -0,0 +1,9 @@
ALTER TABLE med_medication_request ADD performer_check_id int8 NULL;
COMMENT ON COLUMN med_medication_request.performer_check_id IS '校对人';
ALTER TABLE med_medication_request ADD check_time timestamptz(6) NULL;
COMMENT ON COLUMN med_medication_request.check_time IS '校对时间';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508111324 med_medication_request', '1.0.0');

View File

@@ -0,0 +1,8 @@
ALTER TABLE wor_service_request ADD check_time timestamptz(6) NULL;
COMMENT ON COLUMN wor_service_request.check_time IS '校对时间';
COMMENT ON COLUMN wor_service_request.performer_check_id IS '校对人';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508111526 wor_service_request', '1.0.0');

View File

@@ -0,0 +1,6 @@
UPDATE wor_supply_delivery SET status_enum =4 WHERE status_enum =6
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508120915 wor_supply_delivery', '1.0.0');

View File

@@ -0,0 +1,11 @@
ALTER TABLE "med_medication_dispense"
DROP COLUMN "rec_practitioner_id";
ALTER TABLE "med_medication_dispense"
ADD COLUMN "rec_practitioner_id" int8;
COMMENT ON COLUMN "med_medication_dispense"."rec_practitioner_id" IS '接收人';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508151030 med_medication_dispense', '1.0.0');

View File

@@ -0,0 +1,64 @@
-- 创建序列
CREATE SEQUENCE doc_request_form_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
CREATE TABLE "doc_request_form" (
"id" int8 NOT NULL DEFAULT nextval('doc_request_form_id_seq'::regclass),
"prescription_no" varchar(50) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"name" varchar(200) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
"encounter_id" int8 NOT NULL,
"requester_id" int8 NOT NULL,
"desc_json" text COLLATE "pg_catalog"."default",
"tenant_id" int8 NOT NULL,
"delete_flag" char(1) COLLATE "pg_catalog"."default" NOT NULL DEFAULT 0,
"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",
"update_time" timestamptz(6),
"type_code" varchar(255) COLLATE "pg_catalog"."default",
CONSTRAINT "doc_request_form_pkey" PRIMARY KEY ("id")
)
;
ALTER TABLE "doc_request_form"
OWNER TO "postgres";
COMMENT ON COLUMN "doc_request_form"."id" IS 'ID';
COMMENT ON COLUMN "doc_request_form"."prescription_no" IS '处方号';
COMMENT ON COLUMN "doc_request_form"."name" IS '名称';
COMMENT ON COLUMN "doc_request_form"."encounter_id" IS '就诊id';
COMMENT ON COLUMN "doc_request_form"."requester_id" IS '申请人';
COMMENT ON COLUMN "doc_request_form"."desc_json" IS '描述内容';
COMMENT ON COLUMN "doc_request_form"."tenant_id" IS '租户ID';
COMMENT ON COLUMN "doc_request_form"."delete_flag" IS '删除状态';
COMMENT ON COLUMN "doc_request_form"."create_by" IS '创建人';
COMMENT ON COLUMN "doc_request_form"."create_time" IS '创建时间';
COMMENT ON COLUMN "doc_request_form"."update_by" IS '更新人';
COMMENT ON COLUMN "doc_request_form"."update_time" IS '更新时间';
COMMENT ON COLUMN "doc_request_form"."type_code" IS '类型编码';
COMMENT ON TABLE "doc_request_form" IS '申请单管理表';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508171145 doc_request_form', '1.0.0');

View File

@@ -0,0 +1,92 @@
-- 1. 创建 doc_definition 表主键自增序列
CREATE SEQUENCE doc_definition_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
-- 2. 创建文书定义表doc_definition
CREATE TABLE "doc_definition" (
-- 主键ID
"id" int8 NOT NULL DEFAULT nextval('doc_definition_id_seq'::regclass),
-- 文书名称
"name" varchar(200) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
-- 文书版本号
"version" varchar(50) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
-- 文书类型一级菜单枚举值允许NULL
"primary_menu_enum" int4,
-- 文书类型(二级菜单)
"sub_menu" varchar(100) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
-- 文书业务编码
"bus_no" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
-- Vue Router路径
"vue_router" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
-- 所属医院ID
"hospital_id" int8 NOT NULL,
-- 显示顺序
"display_order" int4,
-- 是否有效 0-有效 1-无效
"is_valid" int4,
-- 使用范围枚举值允许NULL
"use_range_enum" int4,
-- 医生权限枚举值允许NULL
"doctor_permission_enum" int4,
-- 护士权限枚举值允许NULL
"nursing_permission_enum" int4,
-- 医技权限枚举值允许NULL
"medical_permission_enum" int4,
-- 药剂师权限枚举值允许NULL
"pharmacist_permission_enum" int4,
-- 通用审计字段
"tenant_id" int8 NOT NULL,
"delete_flag" char(1) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '0',
"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",
"update_time" timestamptz(6),
-- 主键约束
CONSTRAINT "doc_definition_pkey" PRIMARY KEY ("id")
);
-- 3. 设置表所有者
ALTER TABLE "doc_definition"
OWNER TO "postgres";
-- 4. 表和字段注释
COMMENT ON TABLE "doc_definition" IS '文书定义表:存储门诊病历、体温单、患者护理记录单等文书的定义信息';
COMMENT ON COLUMN "doc_definition"."id" IS 'ID';
COMMENT ON COLUMN "doc_definition"."name" IS '文书名称';
COMMENT ON COLUMN "doc_definition"."version" IS '文书的版本号';
COMMENT ON COLUMN "doc_definition"."primary_menu_enum" IS '文书类型(一级菜单),从枚举中获取 DocTypeEnum允许NULL';
COMMENT ON COLUMN "doc_definition"."sub_menu" IS '文书类型(二级菜单),自定义';
COMMENT ON COLUMN "doc_definition"."bus_no" IS '文书业务编码busNo在新建时由系统自动生成';
COMMENT ON COLUMN "doc_definition"."vue_router" IS 'Vue Router路径';
COMMENT ON COLUMN "doc_definition"."hospital_id" IS '所属医院ID';
COMMENT ON COLUMN "doc_definition"."display_order" IS '显示顺序';
COMMENT ON COLUMN "doc_definition"."is_valid" IS '是否有效 0-有效 1-无效';
COMMENT ON COLUMN "doc_definition"."use_range_enum" IS '使用范围0-暂不使用 1-全院使用 2-指定科室使用允许NULL';
COMMENT ON COLUMN "doc_definition"."doctor_permission_enum" IS '医生权限0-不限制 1-查看 2-编辑允许NULL';
COMMENT ON COLUMN "doc_definition"."nursing_permission_enum" IS '护士权限0-不限制 1-查看 2-编辑允许NULL';
COMMENT ON COLUMN "doc_definition"."medical_permission_enum" IS '医技权限0-不限制 1-查看 2-编辑允许NULL';
COMMENT ON COLUMN "doc_definition"."pharmacist_permission_enum" IS '药剂师权限0-不限制 1-查看 2-编辑允许NULL';
COMMENT ON COLUMN "doc_definition"."tenant_id" IS '租户ID';
COMMENT ON COLUMN "doc_definition"."delete_flag" IS '删除状态0-未删除1-已删除';
COMMENT ON COLUMN "doc_definition"."create_by" IS '创建人';
COMMENT ON COLUMN "doc_definition"."create_time" IS '创建时间';
COMMENT ON COLUMN "doc_definition"."update_by" IS '更新人';
COMMENT ON COLUMN "doc_definition"."update_time" IS '更新时间';
-- 5. 索引设计
--CREATE INDEX "idx_doc_definition_tenant_hospital" ON "doc_definition" ("tenant_id", "hospital_id");
CREATE INDEX "idx_doc_definition_primary_menu" ON "doc_definition" ("primary_menu_enum");
CREATE INDEX "idx_doc_definition_display_order" ON "doc_definition" ("display_order");
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508181333 doc_definition', '1.0.0');

View File

@@ -0,0 +1,63 @@
-- 1. 创建 doc_definition_organization 表主键自增序列
CREATE SEQUENCE doc_definition_organization_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
-- 2. 创建科室文书对照表
CREATE TABLE "doc_definition_organization" (
-- 主键ID
"id" int8 NOT NULL DEFAULT nextval('doc_definition_organization_id_seq'::regclass),
-- 文书定义ID
"definition_id" int8 NOT NULL,
-- 文书业务编码
"bus_no" varchar(100) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying,
-- 科室ID
"organization_id" int8 NOT NULL,
-- 通用审计字段
"tenant_id" int8 NOT NULL,
"delete_flag" char(1) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '0',
"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",
"update_time" timestamptz(6),
-- 主键约束
CONSTRAINT "doc_definition_organization_pkey" PRIMARY KEY ("id")
);
-- 3. 设置表所有者
ALTER TABLE "doc_definition_organization"
OWNER TO "postgres";
-- 4. 表和字段注释
COMMENT ON TABLE "doc_definition_organization" IS '科室文书对照表:记录文书与科室的关联关系';
COMMENT ON COLUMN "doc_definition_organization"."id" IS 'ID';
COMMENT ON COLUMN "doc_definition_organization"."definition_id" IS '文书定义ID';
COMMENT ON COLUMN "doc_definition_organization"."bus_no" IS '文书业务编码';
COMMENT ON COLUMN "doc_definition_organization"."organization_id" IS '科室ID';
COMMENT ON COLUMN "doc_definition_organization"."tenant_id" IS '租户ID';
COMMENT ON COLUMN "doc_definition_organization"."delete_flag" IS '删除状态0-未删除1-已删除';
COMMENT ON COLUMN "doc_definition_organization"."create_by" IS '创建人';
COMMENT ON COLUMN "doc_definition_organization"."create_time" IS '创建时间';
COMMENT ON COLUMN "doc_definition_organization"."update_by" IS '更新人';
COMMENT ON COLUMN "doc_definition_organization"."update_time" IS '更新时间';
-- 5. 索引设计
-- 按文书定义ID查询高频场景
CREATE INDEX "idx_doc_def_org_definition" ON "doc_definition_organization" ("definition_id");
-- 按科室ID查询高频场景
CREATE INDEX "idx_doc_def_org_organization" ON "doc_definition_organization" ("organization_id");
-- 按租户ID查询管理后台场景
--CREATE INDEX "idx_doc_def_org_tenant" ON "doc_definition_organization" ("tenant_id");
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508181410 doc_definition_organization', '1.0.0');

View File

@@ -0,0 +1,11 @@
ALTER TABLE "med_medication_dispense"
ADD COLUMN "planned_dispense_time" timestamptz(6);
COMMENT ON COLUMN "med_medication_dispense"."planned_dispense_time" IS '预定发药时间';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508190837 med_medication_dispense', '1.0.0');

View File

@@ -0,0 +1,11 @@
ALTER TABLE "wor_device_dispense"
ADD COLUMN "planned_dispense_time" timestamptz(6);
COMMENT ON COLUMN "wor_device_dispense"."planned_dispense_time" IS '预定发药时间';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508191056 wor_device_dispense', '1.0.0');

View File

@@ -0,0 +1,13 @@
ALTER TABLE "wor_supply_delivery"
ADD COLUMN "based_on_table" varchar(255),
ADD COLUMN "based_on_ids" varchar(2000);
COMMENT ON COLUMN "wor_supply_delivery"."based_on_table" IS '请求基于什么';
COMMENT ON COLUMN "wor_supply_delivery"."based_on_ids" IS '请求基于什么的ID';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508191408 wor_supply_delivery', '1.0.0');

View File

@@ -0,0 +1,7 @@
ALTER TABLE cli_procedure ADD group_id int8 NULL;
COMMENT ON COLUMN cli_procedure.group_id IS '分组id';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508191539 cli_procedure', '1.0.0');

View File

@@ -0,0 +1,93 @@
-- 1. 创建主键自增序列
CREATE SEQUENCE adm_frequency_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
/*
Navicat Premium Dump SQL
Source Server : 189信创HIS
Source Server Type : PostgreSQL
Source Server Version : 160002 (160002)
Source Host : 1.183.189.95:8020
Source Catalog : openhis
Source Schema : public
Target Server Type : PostgreSQL
Target Server Version : 160002 (160002)
File Encoding : 65001
Date: 20/08/2025 15:21:12
*/
-- ----------------------------
-- Table structure for adm_frequency
-- ----------------------------
DROP TABLE IF EXISTS "adm_frequency";
CREATE TABLE "adm_frequency" (
"id" int8 NOT NULL DEFAULT nextval('adm_frequency_id_seq'::regclass),
"rate_code" varchar(50) COLLATE "pg_catalog"."default",
"name" varchar(255) COLLATE "pg_catalog"."default",
"day_count" int4,
"day_interval" int4,
"day_times" varchar(255) COLLATE "pg_catalog"."default",
"week_cycle_flag" int4 DEFAULT 0,
"week_interval" int4,
"week_times" int4,
"continue_flag" int4 DEFAULT 0,
"total_execution_count" int4 DEFAULT 0,
"execution_period" int4,
"execution_period_unit" varchar(20) COLLATE "pg_catalog"."default",
"third_code" varchar(255) COLLATE "pg_catalog"."default",
"memo" varchar(1000) COLLATE "pg_catalog"."default",
"concurrency_stamp" int4,
"tenant_id" int8 NOT NULL,
"delete_flag" char(1) COLLATE "pg_catalog"."default" DEFAULT '0'::bpchar,
"create_by" varchar(32) COLLATE "pg_catalog"."default",
"create_time" timestamptz(6) DEFAULT now(),
"update_by" varchar(32) COLLATE "pg_catalog"."default",
"update_time" timestamptz(6) DEFAULT now()
)
;
COMMENT ON COLUMN "adm_frequency"."id" IS '唯一标识符';
COMMENT ON COLUMN "adm_frequency"."rate_code" IS '频次代码,唯一标识与字典表对应';
COMMENT ON COLUMN "adm_frequency"."name" IS '频次名称';
COMMENT ON COLUMN "adm_frequency"."day_count" IS '每天执行的次数';
COMMENT ON COLUMN "adm_frequency"."day_interval" IS '每次执行之间的间隔(天数)';
COMMENT ON COLUMN "adm_frequency"."day_times" IS '每天的具体执行时间点,逗号分隔';
COMMENT ON COLUMN "adm_frequency"."week_cycle_flag" IS '是否周期性每周执行0 为否1 为是';
COMMENT ON COLUMN "adm_frequency"."week_interval" IS '每周执行的间隔,单位为周';
COMMENT ON COLUMN "adm_frequency"."week_times" IS '每周执行的次数';
COMMENT ON COLUMN "adm_frequency"."continue_flag" IS '是否为连续执行0 为否1 为是';
COMMENT ON COLUMN "adm_frequency"."total_execution_count" IS '执行总次数,记录任务累计执行次数';
COMMENT ON COLUMN "adm_frequency"."execution_period" IS '任务执行周期长度';
COMMENT ON COLUMN "adm_frequency"."execution_period_unit" IS '任务执行周期的单位,如 day、week、month';
COMMENT ON COLUMN "adm_frequency"."third_code" IS '第三方代码,外部系统使用';
COMMENT ON COLUMN "adm_frequency"."memo" IS '备注信息';
COMMENT ON COLUMN "adm_frequency"."concurrency_stamp" IS '并发戳,用于版本控制和并发冲突检测';
COMMENT ON COLUMN "adm_frequency"."tenant_id" IS '租户ID标识所属租户';
COMMENT ON COLUMN "adm_frequency"."delete_flag" IS '删除标记1 表示已删除0 表示未删除';
COMMENT ON COLUMN "adm_frequency"."create_by" IS '创建人';
COMMENT ON COLUMN "adm_frequency"."create_time" IS '创建时间';
COMMENT ON COLUMN "adm_frequency"."update_by" IS '更新人';
COMMENT ON COLUMN "adm_frequency"."update_time" IS '更新时间';
COMMENT ON TABLE "adm_frequency" IS '频次配置表,用于频次、周期和相关信息';
-- ----------------------------
-- Records of adm_frequency
-- ----------------------------
-- ----------------------------
-- Primary Key structure for table adm_frequency
-- ----------------------------
ALTER TABLE "adm_frequency" ADD CONSTRAINT "adm_frequency_pkey" PRIMARY KEY ("id");
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508201044 adm_frequency', '1.0.0');

View File

@@ -0,0 +1,8 @@
ALTER TABLE cli_procedure ADD refund_id int8 NULL;
COMMENT ON COLUMN cli_procedure.refund_id IS '取消执行id';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508211125 cli_procedure', '1.0.0');

View File

@@ -0,0 +1,76 @@
-- 1. 创建序列
CREATE SEQUENCE doc_record_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
-- 2. 创建文书记录表
CREATE TABLE "doc_record" (
-- 主键ID
"id" int8 NOT NULL DEFAULT nextval('doc_record_id_seq'::regclass),
-- 实体类字段
"definition_id" int8 NOT NULL,
"definition_bus_no" varchar(100) COLLATE "pg_catalog"."default" NOT NULL,
"content_json" text COLLATE "pg_catalog"."default" NOT NULL,
"status_enum" int4 NOT NULL DEFAULT 0,
"organization_id" int8 NOT NULL,
"encounter_id" int8 NOT NULL,
"patient_id" int8 NOT NULL,
"record_time" timestamptz(6) NOT NULL,
-- 继承的审计字段
"tenant_id" int8 NOT NULL,
"delete_flag" char(1) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '0',
"create_by" varchar(32) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '',
"create_time" timestamptz(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"update_by" varchar(32) COLLATE "pg_catalog"."default",
"update_time" timestamptz(6),
-- 主键约束
CONSTRAINT "doc_record_pkey" PRIMARY KEY ("id")
);
-- 3. 设置表所有者
ALTER TABLE "doc_record" OWNER TO "postgres";
-- 4. 表和字段注释
COMMENT ON TABLE "doc_record" IS '文书记录表';
COMMENT ON COLUMN "doc_record"."id" IS '主键ID';
COMMENT ON COLUMN "doc_record"."definition_id" IS '定义ID';
COMMENT ON COLUMN "doc_record"."definition_bus_no" IS '业务编码';
COMMENT ON COLUMN "doc_record"."content_json" IS '文档内容(JSON格式)';
COMMENT ON COLUMN "doc_record"."status_enum" IS '状态枚举: 0-草稿/暂存,1-提交,2-归档,3-修改';
COMMENT ON COLUMN "doc_record"."organization_id" IS '科室ID';
COMMENT ON COLUMN "doc_record"."encounter_id" IS '就诊记录ID';
COMMENT ON COLUMN "doc_record"."patient_id" IS '病人ID';
COMMENT ON COLUMN "doc_record"."record_time" IS '记录时间';
COMMENT ON COLUMN "doc_record"."tenant_id" IS '租户ID';
COMMENT ON COLUMN "doc_record"."delete_flag" IS '删除标志: 0-未删除,1-已删除';
COMMENT ON COLUMN "doc_record"."create_by" IS '创建人';
COMMENT ON COLUMN "doc_record"."create_time" IS '创建时间';
COMMENT ON COLUMN "doc_record"."update_by" IS '更新人';
COMMENT ON COLUMN "doc_record"."update_time" IS '更新时间';
-- 5. 索引设计
-- 按定义ID查询高频场景
CREATE INDEX "idx_doc_record_definition" ON "doc_record" ("definition_id");
-- 按病人ID查询高频场景
CREATE INDEX "idx_doc_record_patient" ON "doc_record" ("patient_id");
-- 按就诊ID查询高频场景
CREATE INDEX "idx_doc_record_encounter" ON "doc_record" ("encounter_id");
-- 按科室ID查询
CREATE INDEX "idx_doc_record_orgnization" ON "doc_record" ("orgnization_id");
-- 按记录时间范围查询
CREATE INDEX "idx_doc_record_time" ON "doc_record" ("record_time");
-- 按状态查询
CREATE INDEX "idx_doc_record_status" ON "doc_record" ("status_enum");
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508221059 doc_record', '1.0.0');

View File

@@ -0,0 +1,53 @@
CREATE TABLE "doc_record_log" (
-- 主键ID
"record_id" int8 NOT NULL ,
-- 实体类字段
"definition_id" int8 NOT NULL,
"definition_bus_no" varchar(100) COLLATE "pg_catalog"."default" NOT NULL,
"content_json" text COLLATE "pg_catalog"."default" NOT NULL,
"status_enum" int4 NOT NULL DEFAULT 0,
"orgnization_id" int8 NOT NULL,
"encounter_id" int8 NOT NULL,
"patient_id" int8 NOT NULL,
"record_time" timestamptz(6) NOT NULL,
-- 继承的审计字段
"tenant_id" int8 NOT NULL,
"delete_flag" char(1) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '0',
"create_by" varchar(32) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '',
"create_time" timestamptz(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"update_by" varchar(32) COLLATE "pg_catalog"."default",
"update_time" timestamptz(6),
-- 主键约束
CONSTRAINT "doc_record_log_pkey" PRIMARY KEY ("record_id")
);
-- 3. 设置表所有者
ALTER TABLE "doc_record_log" OWNER TO "postgres";
-- 4. 表和字段注释
COMMENT ON TABLE "doc_record_log" IS '文书记录表';
COMMENT ON COLUMN "doc_record_log"."record_id" IS '主键ID';
COMMENT ON COLUMN "doc_record_log"."definition_id" IS '定义ID';
COMMENT ON COLUMN "doc_record_log"."definition_bus_no" IS '业务编码';
COMMENT ON COLUMN "doc_record_log"."content_json" IS '文档内容(JSON格式)';
COMMENT ON COLUMN "doc_record_log"."status_enum" IS '状态枚举: 0-草稿/暂存,1-提交,2-归档,3-修改';
COMMENT ON COLUMN "doc_record_log"."orgnization_id" IS '科室ID';
COMMENT ON COLUMN "doc_record_log"."encounter_id" IS '就诊记录ID';
COMMENT ON COLUMN "doc_record_log"."patient_id" IS '病人ID';
COMMENT ON COLUMN "doc_record_log"."record_time" IS '记录时间';
COMMENT ON COLUMN "doc_record_log"."tenant_id" IS '租户ID';
COMMENT ON COLUMN "doc_record_log"."delete_flag" IS '删除标志: 0-未删除,1-已删除';
COMMENT ON COLUMN "doc_record_log"."create_by" IS '创建人';
COMMENT ON COLUMN "doc_record_log"."create_time" IS '创建时间';
COMMENT ON COLUMN "doc_record_log"."update_by" IS '更新人';
COMMENT ON COLUMN "doc_record_log"."update_time" IS '更新时间';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508221231 doc_record_log', '1.0.0');

View File

@@ -0,0 +1,8 @@
INSERT INTO "sys_menu" ( "menu_name", "parent_id", "order_num", "path", "component", "query", "route_name", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon", "create_by", "create_time", "update_by", "update_time", "remark") VALUES ('频次', 250, 8, 'frequency', 'basicmanage/frequency/index', NULL, NULL, '1', '0', 'C', '0', '0', '', NULL, 'admin', '2025-08-21 14:56:04.952621', 'admin', '2025-08-21 14:56:57.670708', NULL);
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508221455 频次菜单路由', '1.0.0');

View File

@@ -0,0 +1,8 @@
ALTER TABLE adm_encounter ADD out_way_code varchar(255) DEFAULT '';
COMMENT ON COLUMN adm_encounter.out_way_code IS '出院方式';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508261129 adm_encounter', '1.0.0');

View File

@@ -0,0 +1,7 @@
ALTER TABLE adm_patient ADD deceased_reason varchar(255) DEFAULT NULL;
COMMENT ON COLUMN adm_patient.deceased_reason IS '死亡原因';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202508261129 adm_encounter', '1.0.0');

View File

@@ -0,0 +1,70 @@
-- 1. 创建序列
CREATE SEQUENCE doc_statistics_definition_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
-- 2. 创建文档统计定义表
CREATE TABLE "doc_statistics_definition" (
-- 主键ID
"id" int8 NOT NULL DEFAULT nextval('doc_statistics_definition_id_seq'::regclass),
-- 实体类字段
"name" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
"type_enum" int4 NOT NULL,
"code" varchar(100) COLLATE "pg_catalog"."default" NOT NULL,
"required" int4 NOT NULL DEFAULT 0,
"remark" text COLLATE "pg_catalog"."default",
"is_statistics" int4 NOT NULL DEFAULT 0,
"display_order" int4 NOT NULL DEFAULT 0,
-- 审计字段
"tenant_id" int8 NOT NULL,
"delete_flag" char(1) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '0',
"create_by" varchar(32) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '',
"create_time" timestamptz(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"update_by" varchar(32) COLLATE "pg_catalog"."default",
"update_time" timestamptz(6),
-- 主键约束
CONSTRAINT "doc_statistics_definition_pkey" PRIMARY KEY ("id")
);
-- 3. 设置表所有者
ALTER TABLE "doc_statistics_definition" OWNER TO "postgres";
-- 4. 表和字段注释
COMMENT ON TABLE "doc_statistics_definition" IS '文档统计定义表';
COMMENT ON COLUMN "doc_statistics_definition"."id" IS '主键ID';
COMMENT ON COLUMN "doc_statistics_definition"."name" IS '属性名称';
COMMENT ON COLUMN "doc_statistics_definition"."type_enum" IS '属性类型: 1-Input, 2-Date, 3-Checkbox, 4-Radio, 5-Select, 6-Textarea';
COMMENT ON COLUMN "doc_statistics_definition"."code" IS '属性代码';
COMMENT ON COLUMN "doc_statistics_definition"."required" IS '是否必填: 1-必填, 0-不必填';
COMMENT ON COLUMN "doc_statistics_definition"."remark" IS '备注';
COMMENT ON COLUMN "doc_statistics_definition"."is_statistics" IS '是否统计: 0-不统计, 1-统计';
COMMENT ON COLUMN "doc_statistics_definition_option"."display_order" IS '显示顺序';
COMMENT ON COLUMN "doc_statistics_definition"."tenant_id" IS '租户ID';
COMMENT ON COLUMN "doc_statistics_definition"."delete_flag" IS '删除标志: 0-未删除, 1-已删除';
COMMENT ON COLUMN "doc_statistics_definition"."create_by" IS '创建人';
COMMENT ON COLUMN "doc_statistics_definition"."create_time" IS '创建时间';
COMMENT ON COLUMN "doc_statistics_definition"."update_by" IS '更新人';
COMMENT ON COLUMN "doc_statistics_definition"."update_time" IS '更新时间';
-- -- 5. 索引设计
-- -- 按属性代码查询
-- CREATE INDEX "idx_doc_statistics_code" ON "doc_statistics_definition" ("code");
-- -- 按是否统计查询
-- CREATE INDEX "idx_doc_statistics_is_stat" ON "doc_statistics_definition" ("is_statistics");
-- -- 按属性类型查询
-- CREATE INDEX "idx_doc_statistics_type" ON "doc_statistics_definition" ("type_enum");
-- -- 按租户ID查询
-- CREATE INDEX "idx_doc_statistics_tenant" ON "doc_statistics_definition" ("tenant_id");
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('2025091447 doc_statistics_definition', '1.0.0');

View File

@@ -0,0 +1,64 @@
-- 1. 创建序列
CREATE SEQUENCE doc_statistics_definition_option_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
-- 2. 创建文档统计定义选项表
CREATE TABLE "doc_statistics_definition_option" (
-- 主键ID
"id" int8 NOT NULL DEFAULT nextval('doc_statistics_definition_option_id_seq'::regclass),
-- 实体类字段
"doc_statistics_definition_id" int8 NOT NULL,
"option" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
"display_order" int4 NOT NULL DEFAULT 0,
-- 审计字段
"tenant_id" int8 NOT NULL,
"delete_flag" char(1) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '0',
"create_by" varchar(32) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '',
"create_time" timestamptz(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"update_by" varchar(32) COLLATE "pg_catalog"."default",
"update_time" timestamptz(6),
-- 主键约束
CONSTRAINT "doc_statistics_definition_option_pkey" PRIMARY KEY ("id"),
-- 外键约束(关联到文档统计定义表)
CONSTRAINT "fk_doc_statistics_option_definition" FOREIGN KEY ("doc_statistics_definition_id")
REFERENCES "doc_statistics_definition" ("id") ON DELETE CASCADE
);
-- 3. 设置表所有者
ALTER TABLE "doc_statistics_definition_option" OWNER TO "postgres";
-- 4. 表和字段注释
COMMENT ON TABLE "doc_statistics_definition_option" IS '文档统计定义选项表';
COMMENT ON COLUMN "doc_statistics_definition_option"."id" IS '主键ID';
COMMENT ON COLUMN "doc_statistics_definition_option"."doc_statistics_definition_id" IS '属性编码关联文档统计定义表ID';
COMMENT ON COLUMN "doc_statistics_definition_option"."option" IS '选项值当属性类型为Checkbox、Radio、Select时使用';
COMMENT ON COLUMN "doc_statistics_definition_option"."display_order" IS '显示顺序';
COMMENT ON COLUMN "doc_statistics_definition_option"."tenant_id" IS '租户ID';
COMMENT ON COLUMN "doc_statistics_definition_option"."delete_flag" IS '删除标志: 0-未删除,1-已删除';
COMMENT ON COLUMN "doc_statistics_definition_option"."create_by" IS '创建人';
COMMENT ON COLUMN "doc_statistics_definition_option"."create_time" IS '创建时间';
COMMENT ON COLUMN "doc_statistics_definition_option"."update_by" IS '更新人';
COMMENT ON COLUMN "doc_statistics_definition_option"."update_time" IS '更新时间';
-- -- 5. 索引设计
-- -- 按统计定义ID查询主关联查询
-- CREATE INDEX "idx_doc_statistics_option_defid" ON "doc_statistics_definition_option" ("doc_statistics_definition_id");
-- -- 按显示顺序查询
-- CREATE INDEX "idx_doc_statistics_option_order" ON "doc_statistics_definition_option" ("display_order");
-- -- 按租户ID查询
-- CREATE INDEX "idx_doc_statistics_option_tenant" ON "doc_statistics_definition_option" ("tenant_id");
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202509011634 doc_statistics_definition_option', '1.0.0');

View File

@@ -0,0 +1,107 @@
-- 1. 创建文档模板表主键序列自增ID
CREATE SEQUENCE doc_template_id_seq
START WITH 1 -- 起始值为1
INCREMENT BY 1 -- 每次递增1
NO MINVALUE -- 无最小值限制
NO MAXVALUE -- 无最大值限制
CACHE 1; -- 缓存1个序列值提升性能
-- 2. 创建文档模板表doc_template
CREATE TABLE "doc_template" (
-- 主键字段
"id" int8 NOT NULL DEFAULT nextval('doc_template_id_seq'::regclass), -- 主键ID关联序列自增
-- 业务核心字段与实体类DocTemplate对应
"name" varchar(100) COLLATE "pg_catalog"."default" NOT NULL, -- 模板名称非空建议100字符内
"display_order" int4 DEFAULT 0, -- 排序号默认0值越小越靠前
"context_json" text COLLATE "pg_catalog"."default" NOT NULL, -- 模板内容JSON格式非空存储模板结构
"definition_id" int8 NOT NULL, -- 文书定义ID非空关联doc_definition表主键
"use_range" int4 NOT NULL DEFAULT 0, -- 使用范围非空0-暂不使用/1-全院/2-指定科室/3-个人)
"organization_id" int8, -- 指定科室IDuse_range=2时有效关联科室表
"user_id" int8, -- 指定用户IDuse_range=3时有效关联用户表
"remark" varchar(500) COLLATE "pg_catalog"."default", -- 备注500字符内存储使用说明
-- 继承HisBaseEntity的审计字段通用字段无需实体类显式定义
"tenant_id" int8 NOT NULL, -- 租户ID非空多租户隔离
"delete_flag" char(1) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '0', -- 删除标志非空0-未删除/1-已删除)
"create_by" varchar(32) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '', -- 创建人(非空,存储用户名)
"create_time" timestamptz(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 创建时间(非空,默认当前时间,带时区)
"update_by" varchar(32) COLLATE "pg_catalog"."default", -- 更新人(存储用户名)
"update_time" timestamptz(6), -- 更新时间(带时区)
-- 主键约束
CONSTRAINT "doc_template_pkey" PRIMARY KEY ("id")
-- 外键约束(关联文书定义表,确保数据一致性)
-- CONSTRAINT "fk_doc_template_definition" FOREIGN KEY ("definition_id")
-- REFERENCES "doc_definition" ("id") ON DELETE RESTRICT, -- 文书定义删除时,限制删除(避免模板关联失效)
--
-- -- 外键约束关联科室表use_range=2时生效
-- CONSTRAINT "fk_doc_template_organization" FOREIGN KEY ("organization_id")
-- REFERENCES "sys_organization" ("id") ON DELETE SET NULL, -- 科室删除时,置空该字段
--
-- -- 外键约束关联用户表use_range=3时生效
-- CONSTRAINT "fk_doc_template_user" FOREIGN KEY ("user_id")
-- REFERENCES "sys_user" ("id") ON DELETE SET NULL, -- 用户删除时,置空该字段
--
-- -- 唯一约束(模板名称+文书定义ID唯一避免同文书下重复模板
-- CONSTRAINT "uk_doc_template_name_defid" UNIQUE ("name", "definition_id")
);
-- 3. 设置表所有者与项目数据库用户一致通常为postgres
ALTER TABLE "doc_template" OWNER TO "postgres";
-- 4. 表及字段注释(便于维护,与实体类注释对应)
COMMENT ON TABLE "doc_template" IS '文档模板表:存储各类文书的模板信息,支持全院、科室、个人等不同使用范围';
COMMENT ON COLUMN "doc_template"."id" IS '主键ID';
COMMENT ON COLUMN "doc_template"."name" IS '模板名称:唯一标识模板,同文书定义下不可重复';
COMMENT ON COLUMN "doc_template"."display_order" IS '排序号模板列表展示顺序值越小越靠前默认0';
COMMENT ON COLUMN "doc_template"."context_json" IS '模板内容JSON格式存储模板结构、字段配置等信息前端据此渲染模板';
COMMENT ON COLUMN "doc_template"."definition_id" IS '文书定义ID关联doc_definition表标识模板所属的文书类型';
COMMENT ON COLUMN "doc_template"."use_range" IS '使用范围0-暂不使用1-全院使用2-指定科室使用3-个人使用';
COMMENT ON COLUMN "doc_template"."organization_id" IS '指定科室IDuse_range=2时有效关联sys_organization表';
COMMENT ON COLUMN "doc_template"."user_id" IS '指定用户IDuse_range=3时有效关联sys_user表';
COMMENT ON COLUMN "doc_template"."remark" IS '备注:存储模板使用场景、注意事项等额外说明';
COMMENT ON COLUMN "doc_template"."tenant_id" IS '租户ID多租户系统隔离字段非空';
COMMENT ON COLUMN "doc_template"."delete_flag" IS '删除标志0-未删除1-已删除默认0';
COMMENT ON COLUMN "doc_template"."create_by" IS '创建人:存储创建者用户名,非空';
COMMENT ON COLUMN "doc_template"."create_time" IS '创建时间:默认当前时间,带时区,非空';
COMMENT ON COLUMN "doc_template"."update_by" IS '更新人:存储更新者用户名';
COMMENT ON COLUMN "doc_template"."update_time" IS '更新时间:带时区';
-- -- 5. 索引设计(优化高频查询场景,提升性能)
-- -- 1按文书定义ID查询高频查询某类文书的所有模板
-- CREATE INDEX "idx_doc_template_definition"
-- ON "doc_template" ("definition_id")
-- WHERE "delete_flag" = '0'; -- 只索引未删除数据,减少索引体积
--
-- -- 2按使用范围+科室ID查询高频科室用户查询本科室模板
-- CREATE INDEX "idx_doc_template_userange_org"
-- ON "doc_template" ("use_range", "organization_id")
-- WHERE "delete_flag" = '0';
--
-- -- 3按使用范围+用户ID查询高频个人用户查询自己的模板
-- CREATE INDEX "idx_doc_template_userange_user"
-- ON "doc_template" ("use_range", "user_id")
-- WHERE "delete_flag" = '0';
--
-- -- 4按模板名称模糊查询高频搜索模板
-- CREATE INDEX "idx_doc_template_name"
-- ON "doc_template" ("name")
-- WHERE "delete_flag" = '0';
--
-- -- 5按租户ID+创建时间查询(高频:多租户下按时间筛选模板)
-- CREATE INDEX "idx_doc_template_tenant_createtime"
-- ON "doc_template" ("tenant_id", "create_time")
-- WHERE "delete_flag" = '0';
-- 向迁移历史表插入记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202509011722 doc_template', '1.0.0');

View File

@@ -0,0 +1,62 @@
-- 1. 创建 doc_statistics 表的主键序列自增ID用与 doc_order_process 序列逻辑一致)
CREATE SEQUENCE doc_statistics_id_seq
START WITH 1 -- 序列起始值
INCREMENT BY 1 -- 每次递增1
NO MINVALUE -- 无最小值限制
NO MAXVALUE -- 无最大值限制
CACHE 1; -- 缓存1个值提升性能
-- 2. 创建 doc_statistics 表(字段类型、约束与实体类属性一一对应)
CREATE TABLE "doc_statistics" (
"id" int8 NOT NULL DEFAULT nextval('doc_statistics_id_seq'::regclass), -- 主键,关联序列自增
"record_id" int8 DEFAULT NULL, -- 记录ID对应实体类 recordId
"statistic_definition_id" int8 DEFAULT NULL, -- 统计项定义ID对应 statisticDefinitionId
"encounter_id" int8 DEFAULT NULL, -- 就诊ID对应 encounterId
"patient_id" int8 DEFAULT NULL, -- 患者ID对应 patientId
"statistic_definition_code" varchar(100) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, -- 统计项编码(对应 statisticDefinitionCode长度适配业务需求
"organization_id" int8 DEFAULT NULL, -- 记录科室ID对应 organizationId
"value" varchar(255) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, -- 统计值(对应 value用varchar兼容多种数据类型
"record_time" timestamp(6) DEFAULT NULL, -- 记录时间(对应 recordTime实体类为DatePostgreSQL用timestamp存储
"source" varchar(100) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, -- 记录来源(对应 source
"tenant_id" int8 NOT NULL DEFAULT 1, -- 租户ID通用字段与 doc_order_process 保持一致,默认值可根据业务调整)
"delete_flag" char(1) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '0', -- 删除状态0=未删除1=已删除,与 doc_order_process 逻辑一致)
"create_by" varchar(32) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, -- 创建人(继承 HisBaseEntity 通用字段)
"create_time" timestamptz(6) NOT NULL, -- 创建时间(继承 HisBaseEntity带时区与 doc_order_process 一致)
"update_by" varchar(32) COLLATE "pg_catalog"."default" DEFAULT ''::character varying, -- 更新人(继承 HisBaseEntity
"update_time" timestamptz(6) DEFAULT NULL, -- 更新时间(继承 HisBaseEntity带时区
CONSTRAINT "doc_statistics_pkey" PRIMARY KEY ("id") -- 主键约束
)
;
-- 3. 设置表所有者(与 doc_order_process 保持一致,默认为 postgres
ALTER TABLE "doc_statistics"
OWNER TO "postgres";
-- 4. 字段注释(与实体类注释完全对应,便于维护)
COMMENT ON COLUMN "doc_statistics"."id" IS '主键ID';
COMMENT ON COLUMN "doc_statistics"."record_id" IS '记录ID';
COMMENT ON COLUMN "doc_statistics"."statistic_definition_id" IS '统计项定义ID';
COMMENT ON COLUMN "doc_statistics"."encounter_id" IS '就诊ID';
COMMENT ON COLUMN "doc_statistics"."patient_id" IS '患者ID';
COMMENT ON COLUMN "doc_statistics"."statistic_definition_code" IS '统计项编码';
COMMENT ON COLUMN "doc_statistics"."organization_id" IS '记录科室ID';
COMMENT ON COLUMN "doc_statistics"."value" IS '统计值';
COMMENT ON COLUMN "doc_statistics"."record_time" IS '记录时间格式yyyy-MM-dd HH:mm:ss';
COMMENT ON COLUMN "doc_statistics"."source" IS '记录来源';
COMMENT ON COLUMN "doc_statistics"."tenant_id" IS '租户ID';
COMMENT ON COLUMN "doc_statistics"."delete_flag" IS '删除状态0=未删除1=已删除)';
COMMENT ON COLUMN "doc_statistics"."create_by" IS '创建人';
COMMENT ON COLUMN "doc_statistics"."create_time" IS '创建时间';
COMMENT ON COLUMN "doc_statistics"."update_by" IS '更新人';
COMMENT ON COLUMN "doc_statistics"."update_time" IS '更新时间';
-- 5. 表注释
COMMENT ON TABLE "doc_statistics" IS '文档统计表(存储各类统计项数据,如医嘱统计、患者数据统计等)';
-- 插入新的迁移历史记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202509031200add_table_doc_statistics', '1.0.0');

View File

@@ -0,0 +1,8 @@
ALTER TABLE "doc_statistics_definition"
ADD COLUMN "unit" varchar(50) COLLATE "pg_catalog"."default" DEFAULT ''::character varying;
COMMENT ON COLUMN "doc_statistics_definition"."unit" IS '统计值单位如“次”“mg”“分钟”等';
-- 插入文档统计表格结构修改的迁移记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202509031300alter_table_doc_statistics_definiton', '1.0.0');

View File

@@ -0,0 +1,58 @@
ALTER TABLE "med_medication_request"
ALTER COLUMN "quantity" TYPE numeric(20,6),
ALTER COLUMN "quantity" SET DEFAULT 0,
ALTER COLUMN "quantity" SET NOT NULL;
ALTER TABLE "med_medication_request"
ALTER COLUMN "chinese_herbs_dose_quantity" TYPE numeric(20,6),
ALTER COLUMN "chinese_herbs_dose_quantity" SET DEFAULT 0;
ALTER TABLE "wor_service_request"
ALTER COLUMN "quantity" TYPE numeric(20,6),
ALTER COLUMN "quantity" SET DEFAULT 0,
ALTER COLUMN "quantity" SET NOT NULL;
ALTER TABLE "wor_device_request"
ALTER COLUMN "quantity" TYPE numeric(20,6),
ALTER COLUMN "quantity" SET DEFAULT 0,
ALTER COLUMN "quantity" SET NOT NULL;
ALTER TABLE "adm_charge_item"
ALTER COLUMN "quantity_value" TYPE numeric(20,6),
ALTER COLUMN "quantity_value" SET DEFAULT 0,
ALTER COLUMN "quantity_value" SET NOT NULL;
ALTER TABLE "med_medication_dispense"
ALTER COLUMN "quantity" TYPE numeric(20,6),
ALTER COLUMN "quantity" SET DEFAULT 0,
ALTER COLUMN "quantity" SET NOT NULL;
ALTER TABLE "wor_device_dispense"
ALTER COLUMN "quantity" TYPE numeric(20,6),
ALTER COLUMN "quantity" SET DEFAULT 0,
ALTER COLUMN "quantity" SET NOT NULL;
ALTER TABLE "med_medication_dispense"
ALTER COLUMN "dispense_quantity" TYPE numeric(20,6),
ALTER COLUMN "dispense_quantity" SET DEFAULT 0,
ALTER COLUMN "dispense_quantity" SET NOT NULL;
ALTER TABLE "wor_device_dispense"
ALTER COLUMN "dispense_quantity" TYPE numeric(20,6),
ALTER COLUMN "dispense_quantity" SET DEFAULT 0,
ALTER COLUMN "dispense_quantity" SET NOT NULL;
ALTER TABLE "tmp_activity_device"
ALTER COLUMN "quantity" TYPE numeric(20,6),
ALTER COLUMN "quantity" SET DEFAULT 0,
ALTER COLUMN "quantity" SET NOT NULL;
-- 插入修改xx_request表的迁移记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202509040915alter_table_xx_request', '1.0.0');

View File

@@ -0,0 +1,7 @@
ALTER TABLE "wor_service_request"
ADD COLUMN "rate_code" varchar(255) COLLATE "pg_catalog"."default" DEFAULT ''::character varying;
COMMENT ON COLUMN "wor_service_request"."rate_code" IS '用药频次';
-- 插入添加wor_service_request列的迁移记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202509041015add_column_wor_service_request', '1.0.0');

View File

@@ -0,0 +1,46 @@
INSERT INTO "sys_menu" (
"menu_name",
"parent_id",
"order_num",
"path",
"component",
"query",
"route_name",
"is_frame",
"is_cache",
"menu_type",
"visible",
"status",
"perms",
"icon",
"create_by",
"create_time",
"update_by",
"update_time",
"remark"
)
VALUES
(
'药房月结',
376,
9,
'pharmacyMonthlybalance',
'medicationmanagement/statisticalManagement/pharmacyMonthlybalance',
NULL,
NULL,
'1',
'0',
'C',
'0',
'0',
NULL,
NULL,
'admin',
'2025-09-01 16:38:52.620255',
NULL,
NULL,
NULL
);
-- 插入系统菜单数据插入的迁移记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202509041017insert_sys_menu', '1.0.0');

View File

@@ -0,0 +1,55 @@
-- 创建序列
CREATE SEQUENCE tmp_orders_group_package_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
CREATE TABLE "tmp_orders_group_package" (
"id" int8 NOT NULL DEFAULT nextval('tmp_orders_group_package_id_seq'::regclass),
"name" varchar(255) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"package_type_enum" int4 NOT NULL,
"organization_id" int8 DEFAULT NULL,
"practitioner_id" int8 DEFAULT NULL,
"tenant_id" int8 NOT NULL,
"delete_flag" char(1) COLLATE "pg_catalog"."default" NOT NULL DEFAULT 0,
"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",
"update_time" timestamptz(6),
CONSTRAINT "tmp_orders_group_package_pkey" PRIMARY KEY ("id")
)
;
ALTER TABLE "tmp_orders_group_package"
OWNER TO "postgres";
COMMENT ON COLUMN "tmp_orders_group_package"."id" IS 'ID';
COMMENT ON COLUMN "tmp_orders_group_package"."name" IS '名称';
COMMENT ON COLUMN "tmp_orders_group_package"."package_type_enum" IS '组套包类型';
COMMENT ON COLUMN "tmp_orders_group_package"."organization_id" IS '科室id';
COMMENT ON COLUMN "tmp_orders_group_package"."practitioner_id" IS '参与者id';
COMMENT ON COLUMN "tmp_orders_group_package"."tenant_id" IS '租户ID';
COMMENT ON COLUMN "tmp_orders_group_package"."delete_flag" IS '删除状态';
COMMENT ON COLUMN "tmp_orders_group_package"."create_by" IS '创建人';
COMMENT ON COLUMN "tmp_orders_group_package"."create_time" IS '创建时间';
COMMENT ON COLUMN "tmp_orders_group_package"."update_by" IS '更新人';
COMMENT ON COLUMN "tmp_orders_group_package"."update_time" IS '更新时间';
COMMENT ON TABLE "tmp_orders_group_package" IS '医嘱组合套餐';
-- 插入添加临时订单分组包表的迁移记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202509081020add_table_tmp_orders_group_package', '1.0.0');

View File

@@ -0,0 +1,58 @@
-- 创建序列
CREATE SEQUENCE tmp_orders_group_package_detail_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
CREATE TABLE "tmp_orders_group_package_detail" (
"id" int8 NOT NULL DEFAULT nextval('tmp_orders_group_package_detail_id_seq'::regclass),
"group_package_id" int8 NOT NULL,
"order_definition_id" int8 NOT NULL,
"order_definition_table" varchar(255) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"quantity" numeric(20, 6) DEFAULT 1,
"unit_code" varchar(255) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"tenant_id" int8 NOT NULL,
"delete_flag" char(1) COLLATE "pg_catalog"."default" NOT NULL DEFAULT 0,
"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",
"update_time" timestamptz(6),
CONSTRAINT "tmp_orders_group_package_detail_pkey" PRIMARY KEY ("id")
)
;
ALTER TABLE "tmp_orders_group_package_detail"
OWNER TO "postgres";
COMMENT ON COLUMN "tmp_orders_group_package_detail"."id" IS 'ID';
COMMENT ON COLUMN "tmp_orders_group_package_detail"."group_package_id" IS '组合套餐id';
COMMENT ON COLUMN "tmp_orders_group_package_detail"."order_definition_id" IS '医嘱定义id';
COMMENT ON COLUMN "tmp_orders_group_package_detail"."order_definition_table" IS '医嘱定义表名';
COMMENT ON COLUMN "tmp_orders_group_package_detail"."quantity" IS '数量';
COMMENT ON COLUMN "tmp_orders_group_package_detail"."unit_code" IS '单位编码';
COMMENT ON COLUMN "tmp_orders_group_package_detail"."tenant_id" IS '租户ID';
COMMENT ON COLUMN "tmp_orders_group_package_detail"."delete_flag" IS '删除状态';
COMMENT ON COLUMN "tmp_orders_group_package_detail"."create_by" IS '创建人';
COMMENT ON COLUMN "tmp_orders_group_package_detail"."create_time" IS '创建时间';
COMMENT ON COLUMN "tmp_orders_group_package_detail"."update_by" IS '更新人';
COMMENT ON COLUMN "tmp_orders_group_package_detail"."update_time" IS '更新时间';
COMMENT ON TABLE "tmp_orders_group_package_detail" IS '医嘱组合套餐明细';
-- 插入添加临时订单分组包详情表的迁移记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202509081022add_table_tmp_orders_group_package_detail', '1.0.0');

View File

@@ -0,0 +1,7 @@
ALTER TABLE "adm_practitioner"
ADD COLUMN "signature" text COLLATE "pg_catalog"."default" DEFAULT ''::character varying;
COMMENT ON COLUMN "adm_practitioner"."signature" IS '签名图片';
-- 插入为adm_practitioner表添加列的迁移记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202509101025add_column_adm_practitioner', '1.0.0');

View File

@@ -0,0 +1,8 @@
ALTER TABLE "wor_service_request"
ADD COLUMN "parent_id" int8 DEFAULT NULL;
COMMENT ON COLUMN "wor_service_request"."parent_id" IS '父id(适用诊疗套餐)';
-- 插入为wor_service_request表添加列的迁移记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202509101030add_column_wor_service_request', '1.0.0');

View File

@@ -0,0 +1,8 @@
ALTER TABLE "cli_reservation_record"
ADD COLUMN "tooth_position" varchar(500) COLLATE "pg_catalog"."default" DEFAULT ''::character varying;
COMMENT ON COLUMN "cli_reservation_record"."tooth_position" IS '牙位';
-- 插入为cli_reservation_record表添加列的迁移记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202509161311 add_column_cil_reservation_record', '1.0.0');

View File

@@ -0,0 +1,5 @@
ALTER TABLE wor_device_dispense ADD preparer_id int8 NULL;
COMMENT ON COLUMN wor_device_dispense.preparer_id IS '配药人';
-- 插入为wor_device_dispense表添加列的迁移记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202509180852 add_column_wor_device_dispense', '1.0.0');

View File

@@ -0,0 +1,7 @@
ALTER TABLE "tmp_activity_device"
ADD COLUMN "unit_code" varchar(3) COLLATE "pg_catalog"."default" DEFAULT ''::character varying;
COMMENT ON COLUMN "tmp_activity_device"."unit_code" IS '单位';
-- 插入为tmp_activity_device表添加列的迁移记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202509191411 add_column_tmp_activity_device', '1.0.0');

View File

@@ -0,0 +1,65 @@
-- 创建序列
CREATE SEQUENCE nd_review_prescription_records_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
CREATE TABLE "nd_review_prescription_records" (
"id" int8 NOT NULL DEFAULT nextval('nd_review_prescription_records_id_seq'::regclass),
"prescription_no" varchar(255) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"encounter_id" int8 DEFAULT NULL,
"med_request_ids" text DEFAULT NULL,
"pass_flag" int4 NOT NULL DEFAULT 1,
"reason_text" varchar(500) COLLATE "pg_catalog"."default" DEFAULT ''::character varying,
"practitioner_id" int8 DEFAULT NULL,
"tenant_id" int8 NOT NULL,
"delete_flag" char(1) COLLATE "pg_catalog"."default" NOT NULL DEFAULT 0,
"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",
"update_time" timestamptz(6),
CONSTRAINT "nd_review_prescription_records_pkey" PRIMARY KEY ("id")
)
;
ALTER TABLE "nd_review_prescription_records"
OWNER TO "postgres";
COMMENT ON COLUMN "nd_review_prescription_records"."id" IS 'ID';
COMMENT ON COLUMN "nd_review_prescription_records"."prescription_no" IS '处方号';
COMMENT ON COLUMN "nd_review_prescription_records"."encounter_id" IS '就诊id';
COMMENT ON COLUMN "nd_review_prescription_records"."med_request_ids" IS '药品请求ids';
COMMENT ON COLUMN "nd_review_prescription_records"."pass_flag" IS '通过标识';
COMMENT ON COLUMN "nd_review_prescription_records"."reason_text" IS '原因';
COMMENT ON COLUMN "nd_review_prescription_records"."practitioner_id" IS '审方人id';
COMMENT ON COLUMN "nd_review_prescription_records"."tenant_id" IS '租户ID';
COMMENT ON COLUMN "nd_review_prescription_records"."delete_flag" IS '删除状态';
COMMENT ON COLUMN "nd_review_prescription_records"."create_by" IS '创建人';
COMMENT ON COLUMN "nd_review_prescription_records"."create_time" IS '创建时间';
COMMENT ON COLUMN "nd_review_prescription_records"."update_by" IS '更新人';
COMMENT ON COLUMN "nd_review_prescription_records"."update_time" IS '更新时间';
COMMENT ON TABLE "nd_review_prescription_records" IS '农大审方记录';
-- 插入为tmp_activity_device表添加列的迁移记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202509231011 add_table_nd_review_prescription_records', '1.0.0');

View File

@@ -0,0 +1,13 @@
ALTER TABLE "doc_statistics_definition"
ADD COLUMN "dict_name" varchar(50),
ADD COLUMN "dict_type" varchar(50);
COMMENT ON COLUMN "doc_statistics_definition"."dict_name" IS '字典名称';
COMMENT ON COLUMN "doc_statistics_definition"."dict_type" IS '字典类型';
-- 插入为tmp_activity_device表添加列的迁移记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202509261212 add_column _doc_statistics_definition', '1.0.0');

View File

@@ -0,0 +1,12 @@
ALTER TABLE "elep_medication_request"
ADD COLUMN "condition_def_id" int8,
ADD COLUMN "opsp_dise_code" varchar(255);
COMMENT ON COLUMN "elep_medication_request"."condition_def_id" IS '诊断定义id';
COMMENT ON COLUMN "elep_medication_request"."opsp_dise_code" IS '慢病编码';
-- 插入为tmp_activity_device表添加列的迁移记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202510131311 add_column_elep_medication_request', '1.0.0');

View File

@@ -0,0 +1,7 @@
ALTER TABLE adm_charge_item ADD procedure_id int8 NULL;
COMMENT ON COLUMN adm_charge_item.procedure_id IS '执行id';
-- 插入为tmp_activity_device表添加列的迁移记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202510131411 add_column_adm_charge_item', '1.0.0');

View File

@@ -0,0 +1,22 @@
ALTER TABLE wor_device_request ADD based_on_table varchar(255) NULL;
COMMENT ON COLUMN wor_device_request.based_on_table IS '请求基于什么';
ALTER TABLE wor_device_request ADD based_on_id int8 NULL;
COMMENT ON COLUMN wor_device_request.based_on_id IS '请求基于什么的ID';
ALTER TABLE wor_device_dispense ADD procedure_id int8 NULL;
COMMENT ON COLUMN wor_device_dispense.procedure_id IS '执行id';
ALTER TABLE med_medication_request ADD based_on_table varchar(255) NULL;
COMMENT ON COLUMN med_medication_request.based_on_table IS '请求基于什么';
ALTER TABLE med_medication_request ADD based_on_id int8 NULL;
COMMENT ON COLUMN med_medication_request.based_on_id IS '请求基于什么的ID';
ALTER TABLE med_medication_dispense ADD procedure_id int8 NULL;
COMMENT ON COLUMN med_medication_dispense.procedure_id IS '执行id';
-- 插入为tmp_activity_device表添加列的迁移记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202510151011 alter_table_request', '1.0.0');

View File

@@ -0,0 +1,33 @@
CREATE TABLE cli_condition_no_definition (
gl_no VARCHAR (255) NULL,
id bigserial NOT NULL,
tenant_id INT8 NULL,
delete_flag BPCHAR DEFAULT '0' NULL,
create_by VARCHAR (32) NULL,
create_time TIMESTAMPTZ (6) NULL,
update_by VARCHAR (32) NULL,
update_time TIMESTAMPTZ (6) NULL,
gl_name VARCHAR (255) NULL,
icd10_no VARCHAR (255) NULL,
icd10_name VARCHAR (255) NULL
);
COMMENT ON TABLE cli_condition_no_definition IS '诊断各种编码定义表';
-- Column comments
COMMENT ON COLUMN cli_condition_no_definition.gl_no IS '国临疾病编码';
COMMENT ON COLUMN cli_condition_no_definition.id IS 'ID';
COMMENT ON COLUMN cli_condition_no_definition.tenant_id IS '租户id';
COMMENT ON COLUMN cli_condition_no_definition.delete_flag IS '删除状态';
COMMENT ON COLUMN cli_condition_no_definition.create_by IS '创建人';
COMMENT ON COLUMN cli_condition_no_definition.create_time IS '创建时间';
COMMENT ON COLUMN cli_condition_no_definition.update_by IS '更新人';
COMMENT ON COLUMN cli_condition_no_definition.update_time IS '更新时间';
COMMENT ON COLUMN cli_condition_no_definition.gl_name IS '国临疾病名称';
COMMENT ON COLUMN cli_condition_no_definition.icd10_no IS 'icd10编码';
COMMENT ON COLUMN cli_condition_no_definition.icd10_name IS 'icd10名称';
-- 插入为tmp_activity_device表添加列的迁移记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202510151413 add_talble_cli_condition_no_definition', '1.0.0');

View File

@@ -0,0 +1,20 @@
ALTER TABLE tmp_orders_group_package_detail ADD dose numeric(20,6) NULL;
COMMENT ON COLUMN tmp_orders_group_package_detail.dose IS '单次剂量';
ALTER TABLE tmp_orders_group_package_detail ADD rate_code varchar(255) NULL;
COMMENT ON COLUMN tmp_orders_group_package_detail.rate_code IS '用药频次';
ALTER TABLE tmp_orders_group_package_detail ADD dispense_per_duration int4 NULL;
COMMENT ON COLUMN tmp_orders_group_package_detail.dispense_per_duration IS '用药天数';
ALTER TABLE tmp_orders_group_package_detail ADD method_code varchar(255) NULL;
COMMENT ON COLUMN tmp_orders_group_package_detail.method_code IS '给药途径';
-- 插入为tmp_activity_device表添加列的迁移记录
INSERT INTO __MigrationsHistory (MigrationId, ProductVersion)
VALUES ('202510211012 add_column_tmp_orders_group_package_detail', '1.0.0');

Some files were not shown because too many files have changed in this diff Show More