chore: 清理 176 个过时 SQL 文件

删除内容:
- sql/ 目录: 158 个历史迁移记录、bug 修复脚本、测试数据
- openhis-server-new/sql/: 16 个散落 SQL 文件
- resources/sql/: 2 个会诊相关脚本

保留内容:
- db/migration/V1__baseline_marker.sql (Flyway 基线)

原因: 已引入 Flyway 数据库迁移管理,散落的 SQL 文件不再需要
所有新的 DDL 变更通过 db/migration/V{n}__xxx.sql 管理
This commit is contained in:
2026-06-04 14:56:33 +08:00
parent 4bd20ca0f0
commit 1e76eb005d
187 changed files with 0 additions and 80675 deletions

View File

@@ -1,27 +0,0 @@
-- ============================================
-- 修复会诊确认表的 NOT NULL 约束问题
-- ============================================
-- 将 confirming_physician_id 等字段改为可空
-- 因为在新的方案中,这些字段在所有医生确认后才会填充
ALTER TABLE hisdev.consultation_confirmation
ALTER COLUMN confirming_physician_id DROP NOT NULL;
ALTER TABLE hisdev.consultation_confirmation
ALTER COLUMN confirming_physician_name DROP NOT NULL;
ALTER TABLE hisdev.consultation_confirmation
ALTER COLUMN confirming_dept_id DROP NOT NULL;
ALTER TABLE hisdev.consultation_confirmation
ALTER COLUMN confirming_dept_name DROP NOT NULL;
ALTER TABLE hisdev.consultation_confirmation
ALTER COLUMN confirming_date DROP NOT NULL;
-- 说明:
-- 在新的方案中consultation_confirmation 记录在所有医生确认后才创建
-- 这些字段用于记录"最后一个确认的医生"或"代表性医生"
-- 因此允许为 NULL实际的医生信息存储在 confirming_physicians (JSON) 字段中

View File

@@ -1,94 +0,0 @@
-- ============================================
-- 会诊确认功能优化 - 数据库表结构修改 (PostgreSQL版本)
-- ============================================
-- 1. 修改 consultation_request 表(添加计数字段)
ALTER TABLE hisdev.consultation_request
ADD COLUMN IF NOT EXISTS confirmed_count INT DEFAULT 0;
ALTER TABLE hisdev.consultation_request
ADD COLUMN IF NOT EXISTS signed_count INT DEFAULT 0;
ALTER TABLE hisdev.consultation_request
ADD COLUMN IF NOT EXISTS invited_count INT DEFAULT 0;
-- 2. 修改 consultation_invited 表(添加签名时间字段)
ALTER TABLE hisdev.consultation_invited
ADD COLUMN IF NOT EXISTS signature_time TIMESTAMP NULL;
-- 3. 修改 consultation_confirmation 表(优化字段)
ALTER TABLE hisdev.consultation_confirmation
ADD COLUMN IF NOT EXISTS all_confirmed_date TIMESTAMP NULL;
ALTER TABLE hisdev.consultation_confirmation
ADD COLUMN IF NOT EXISTS all_signed_date TIMESTAMP NULL;
-- 检查 confirming_physicians 字段是否存在,如果不存在则添加
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'hisdev'
AND table_name = 'consultation_confirmation'
AND column_name = 'confirming_physicians'
) THEN
-- 如果 confirming_physician 存在,则重命名
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'hisdev'
AND table_name = 'consultation_confirmation'
AND column_name = 'confirming_physician'
) THEN
ALTER TABLE hisdev.consultation_confirmation
RENAME COLUMN confirming_physician TO confirming_physicians;
ELSE
-- 如果都不存在,则新增
ALTER TABLE hisdev.consultation_confirmation
ADD COLUMN confirming_physicians TEXT;
END IF;
END IF;
END $$;
-- 4. 为现有数据初始化计数字段
UPDATE hisdev.consultation_request cr
SET invited_count = (
SELECT COUNT(*)
FROM hisdev.consultation_invited ci
WHERE ci.consultation_request_id = cr.id
AND ci.is_deleted = 0
)
WHERE cr.invited_count = 0 OR cr.invited_count IS NULL;
UPDATE hisdev.consultation_request cr
SET confirmed_count = (
SELECT COUNT(*)
FROM hisdev.consultation_invited ci
WHERE ci.consultation_request_id = cr.id
AND ci.invited_status >= 1
AND ci.is_deleted = 0
)
WHERE cr.confirmed_count = 0 OR cr.confirmed_count IS NULL;
UPDATE hisdev.consultation_request cr
SET signed_count = (
SELECT COUNT(*)
FROM hisdev.consultation_invited ci
WHERE ci.consultation_request_id = cr.id
AND ci.invited_status >= 3
AND ci.is_deleted = 0
)
WHERE cr.signed_count = 0 OR cr.signed_count IS NULL;
-- 5. 添加索引优化查询性能(如果不存在)
CREATE INDEX IF NOT EXISTS idx_invited_status ON hisdev.consultation_invited(invited_status);
CREATE INDEX IF NOT EXISTS idx_confirm_time ON hisdev.consultation_invited(confirm_time);
-- 6. 添加字段注释
COMMENT ON COLUMN hisdev.consultation_request.confirmed_count IS '已确认的医生数量';
COMMENT ON COLUMN hisdev.consultation_request.signed_count IS '已签名的医生数量';
COMMENT ON COLUMN hisdev.consultation_request.invited_count IS '被邀请的医生总数';
COMMENT ON COLUMN hisdev.consultation_invited.signature_time IS '签名时间';
COMMENT ON COLUMN hisdev.consultation_confirmation.all_confirmed_date IS '所有医生都确认的时间';
COMMENT ON COLUMN hisdev.consultation_confirmation.all_signed_date IS '所有医生都签名的时间';
COMMENT ON COLUMN hisdev.consultation_confirmation.confirming_physicians IS '参与确认的医生列表JSON格式';

View File

@@ -1,45 +0,0 @@
-- 智能分诊排队:候选池排除记录表
-- 用途:记录已从智能候选池中移除的患者(加入队列后不再出现在候选池)
-- 注意:必须在后端实际连接的 schema 中执行dev环境是 hisdevtest环境是 histestprd环境是 hisprd
-- 执行前请先确认SET search_path TO hisdev; (或对应的 schema
CREATE TABLE IF NOT EXISTS hisdev.triage_candidate_exclusion (
id BIGSERIAL PRIMARY KEY,
tenant_id INTEGER NOT NULL,
exclusion_date DATE NOT NULL,
encounter_id BIGINT NOT NULL,
patient_id BIGINT,
patient_name VARCHAR(255),
organization_id BIGINT,
organization_name VARCHAR(255),
reason VARCHAR(100) DEFAULT 'ADDED_TO_QUEUE', -- 排除原因ADDED_TO_QUEUE加入队列、MANUAL_REMOVE手动移除
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
delete_flag CHAR(1) NOT NULL DEFAULT '0'
);
-- 常用查询索引:按租户/日期/就诊记录查询
CREATE INDEX IF NOT EXISTS idx_triage_candidate_exclusion_list
ON hisdev.triage_candidate_exclusion (tenant_id, exclusion_date, delete_flag, encounter_id);
-- 防重复:同一天同租户同就诊记录只能有一条排除记录(未删除)
CREATE UNIQUE INDEX IF NOT EXISTS uq_triage_candidate_exclusion_encounter
ON hisdev.triage_candidate_exclusion (tenant_id, exclusion_date, encounter_id, delete_flag)
WHERE delete_flag = '0';
-- 就诊记录ID索引用于关联查询
CREATE INDEX IF NOT EXISTS idx_triage_candidate_exclusion_encounter_id
ON hisdev.triage_candidate_exclusion (encounter_id);
-- 注释
COMMENT ON TABLE hisdev.triage_candidate_exclusion IS '智能分诊排队候选池排除记录表';
COMMENT ON COLUMN hisdev.triage_candidate_exclusion.tenant_id IS '租户ID';
COMMENT ON COLUMN hisdev.triage_candidate_exclusion.exclusion_date IS '排除日期(通常为当天)';
COMMENT ON COLUMN hisdev.triage_candidate_exclusion.encounter_id IS '就诊记录ID唯一标识';
COMMENT ON COLUMN hisdev.triage_candidate_exclusion.patient_id IS '患者ID';
COMMENT ON COLUMN hisdev.triage_candidate_exclusion.patient_name IS '患者姓名';
COMMENT ON COLUMN hisdev.triage_candidate_exclusion.organization_id IS '科室ID';
COMMENT ON COLUMN hisdev.triage_candidate_exclusion.organization_name IS '科室名称';
COMMENT ON COLUMN hisdev.triage_candidate_exclusion.reason IS '排除原因ADDED_TO_QUEUE加入队列、MANUAL_REMOVE手动移除';
COMMENT ON COLUMN hisdev.triage_candidate_exclusion.delete_flag IS '删除标志0-未删除1-已删除';

View File

@@ -1,35 +0,0 @@
-- 智能分诊排队:队列持久化表(与 TriageQueueItem.java 字段一致)
-- 注意:必须在后端实际连接的 schema 中执行dev环境是 hisdevtest环境是 histestprd环境是 hisprd
-- 执行前请先确认SET search_path TO hisdev; (或对应的 schema
CREATE TABLE IF NOT EXISTS triage_queue_item (
id BIGSERIAL PRIMARY KEY,
tenant_id INTEGER NOT NULL,
queue_date DATE NOT NULL,
organization_id BIGINT NOT NULL,
organization_name VARCHAR(255),
encounter_id BIGINT NOT NULL,
patient_id BIGINT,
patient_name VARCHAR(255),
healthcare_name VARCHAR(255),
practitioner_name VARCHAR(255),
status INTEGER NOT NULL DEFAULT 0, -- 分诊队列状态: 0=WAITING(等待), 10=CALLING(叫号中), 20=IN_CLINIC(诊中), 30=COMPLETED(已完成), 40=SKIPPED(已跳过)
queue_order INTEGER NOT NULL,
create_time TIMESTAMP,
update_time TIMESTAMP,
delete_flag CHAR(1) NOT NULL DEFAULT '0'
);
-- 常用查询索引:按租户/科室/日期/状态/顺序取队列
CREATE INDEX IF NOT EXISTS idx_triage_queue_item_list
ON triage_queue_item (tenant_id, queue_date, organization_id, delete_flag, status, queue_order);
-- 防重复:同一天同租户同科室同就诊记录只能在队列里一条(未删除)
CREATE UNIQUE INDEX IF NOT EXISTS uq_triage_queue_item_encounter
ON triage_queue_item (tenant_id, queue_date, organization_id, encounter_id, delete_flag)
WHERE delete_flag = '0';
-- 就诊记录ID索引用于关联查询
CREATE INDEX IF NOT EXISTS idx_triage_queue_item_encounter_id
ON triage_queue_item (encounter_id);

View File

@@ -1,10 +0,0 @@
-- 为 sys_notice 表添加优先级字段
-- 执行前请先备份数据库
ALTER TABLE sys_notice ADD COLUMN priority VARCHAR(10) DEFAULT '2';
-- 添加注释
COMMENT ON COLUMN sys_notice.priority IS '优先级1高 2中 3低';
-- 为现有数据设置默认优先级
UPDATE sys_notice SET priority = '2' WHERE priority IS NULL;

View File

@@ -1,30 +0,0 @@
-- Bug #400 修复triage_queue_item.status 字段类型修正
-- 原 DDL 将 status 定义为 VARCHAR(50),但 Java 实体 TriageQueueItem.status 为 Integer 类型,
-- 应用层使用 TriageQueueStatus 枚举值0/10/20/30/40写入类型不匹配导致 MyBatis-Plus
-- 无法正确映射 status 字段,完诊时 status 更新为 30 失败。
--
-- 注意:必须在后端实际连接的 schema 中执行dev=hisdev, test=histest, prd=hisprd
-- 执行前请先确认SET search_path TO hisdev; (或对应的 schema
-- 1. 先将已有的字符串值转换为对应的整数值
-- 如果之前写入的是枚举 code如 'waiting'、'completed'),需要先转换
UPDATE triage_queue_item
SET status = CASE
WHEN status IN ('0', 'waiting', 'WAITING') THEN 0
WHEN status IN ('10', 'calling', 'CALLING') THEN 10
WHEN status IN ('20', 'in-clinic', 'IN_CLINIC', 'in-clinic') THEN 20
WHEN status IN ('30', 'completed', 'COMPLETED') THEN 30
WHEN status IN ('40', 'skipped', 'SKIPPED') THEN 40
WHEN status IN ('50', 'refunded', 'REFUNDED') THEN 50
WHEN status IN ('60', 'follow', 'FOLLOW') THEN 60
ELSE 0
END
WHERE status IS NOT NULL AND status !~ '^[0-9]+$';
-- 2. 修改字段类型为 INTEGER
ALTER TABLE triage_queue_item
ALTER COLUMN status TYPE INTEGER USING status::INTEGER;
-- 3. 设置默认值
ALTER TABLE triage_queue_item
ALTER COLUMN status SET DEFAULT 0;

View File

@@ -1,94 +0,0 @@
-- ============================================
-- 检查门诊划价"诊疗判断"下没有数据的原因
-- ============================================
-- 1. 检查是否有诊疗类型的收费项目context_enum = 3
SELECT
COUNT(*) AS total_activity_charge_items,
COUNT(CASE WHEN delete_flag = '0' THEN 1 END) AS active_charge_items
FROM adm_charge_item
WHERE context_enum = 3; -- ACTIVITY = 3
-- 2. 检查诊疗类型的收费项目是否能关联到 wor_activity_definition
SELECT
T1.id AS charge_item_id,
T1.encounter_id,
T1.context_enum,
T1.product_id,
T1.status_enum AS charge_status,
T2.id AS activity_def_id,
T2.name AS activity_name,
T2.status_enum AS activity_status,
T2.delete_flag AS activity_delete_flag,
CASE
WHEN T2.id IS NULL THEN '❌ 无法关联到诊疗项目定义'
WHEN T2.delete_flag != '0' THEN '❌ 诊疗项目定义已删除'
WHEN T2.status_enum != 1 THEN '❌ 诊疗项目定义未激活status_enum != 1'
ELSE '✅ 正常'
END AS match_status
FROM adm_charge_item AS T1
LEFT JOIN wor_activity_definition AS T2
ON T1.context_enum = 3
AND T1.product_id = T2.id
AND T2.delete_flag = '0'
AND T2.status_enum = 1 -- 当前查询条件
WHERE T1.context_enum = 3
AND T1.delete_flag = '0'
LIMIT 20;
-- 3. 检查如果移除 status_enum = 1 条件,能关联多少条
SELECT
COUNT(*) AS total_count,
COUNT(CASE WHEN T2.id IS NOT NULL AND T2.delete_flag = '0' AND T2.status_enum = 1 THEN 1 END) AS matched_active,
COUNT(CASE WHEN T2.id IS NOT NULL AND T2.delete_flag = '0' AND T2.status_enum != 1 THEN 1 END) AS matched_inactive,
COUNT(CASE WHEN T2.id IS NULL THEN 1 END) AS unmatched
FROM adm_charge_item AS T1
LEFT JOIN wor_activity_definition AS T2
ON T1.context_enum = 3
AND T1.product_id = T2.id
AND T2.delete_flag = '0'
WHERE T1.context_enum = 3
AND T1.delete_flag = '0';
-- 4. 检查具体某个就诊的诊疗项目(替换 encounterId 为实际值)
-- SELECT
-- T1.id AS charge_item_id,
-- T1.encounter_id,
-- T1.product_id,
-- T1.status_enum AS charge_status,
-- T2.id AS activity_def_id,
-- T2.name AS activity_name,
-- T2.status_enum AS activity_status,
-- CASE
-- WHEN T2.id IS NULL THEN '无法关联'
-- WHEN T2.status_enum != 1 THEN '诊疗项目未激活'
-- ELSE '正常'
-- END AS status
-- FROM adm_charge_item AS T1
-- LEFT JOIN wor_activity_definition AS T2
-- ON T1.context_enum = 3
-- AND T1.product_id = T2.id
-- AND T2.delete_flag = '0'
-- AND T2.status_enum = 1
-- WHERE T1.encounter_id = :encounterId -- 替换为实际的encounterId
-- AND T1.context_enum = 3
-- AND T1.delete_flag = '0';
-- 5. 如果诊疗项目 status_enum != 1查看这些项目
SELECT
T1.id AS charge_item_id,
T1.encounter_id,
T1.product_id,
T2.name AS activity_name,
T2.status_enum AS activity_status,
'诊疗项目未激活,导致无法显示' AS issue
FROM adm_charge_item AS T1
INNER JOIN wor_activity_definition AS T2
ON T1.context_enum = 3
AND T1.product_id = T2.id
AND T2.delete_flag = '0'
AND T2.status_enum != 1 -- 未激活
WHERE T1.context_enum = 3
AND T1.delete_flag = '0'
LIMIT 20;

View File

@@ -1,142 +0,0 @@
-- ============================================
-- 检查 wor_activity_definition 表中 pricing_flag = 0 的数据
-- 用途:分析哪些项目被标记为"不允许划价",是否符合业务预期
-- ============================================
-- 1. 查看所有 pricing_flag = 0 的项目详情
SELECT
id,
bus_no,
name AS activity_name,
category_code,
type_enum,
pricing_flag,
status_enum,
org_id,
location_id,
description_text,
create_time,
update_time
FROM wor_activity_definition
WHERE delete_flag = '0'
AND pricing_flag = '0' -- 注意:字段类型是 char(1),所以是字符串 '0'
ORDER BY id;
-- 2. 统计 pricing_flag = 0 的项目数量(按状态)
SELECT
status_enum,
COUNT(*) AS count,
CASE
WHEN status_enum = 1 THEN '激活'
WHEN status_enum = 2 THEN '停用'
ELSE '其他'
END AS status_desc
FROM wor_activity_definition
WHERE delete_flag = '0'
AND pricing_flag = '0'
GROUP BY status_enum
ORDER BY status_enum;
-- 3. 检查 pricing_flag = 0 的项目是否有关联的费用定价
SELECT
T1.id,
T1.bus_no,
T1.name AS activity_name,
T1.pricing_flag,
T1.status_enum,
T2.id AS charge_item_definition_id,
T2.charge_name,
T2.price,
T2.status_enum AS charge_status,
CASE
WHEN T2.id IS NOT NULL THEN '有费用定价但不允许划价(可能异常)'
ELSE '无费用定价,不允许划价(正常)'
END AS analysis
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 = '0'
ORDER BY T1.id;
-- 4. 检查 pricing_flag = 0 的项目是否在收费项目表中被使用
SELECT
T1.id AS activity_id,
T1.bus_no,
T1.name AS activity_name,
T1.pricing_flag,
COUNT(T3.id) AS charge_item_count,
CASE
WHEN COUNT(T3.id) > 0 THEN '已被使用(可能异常:不允许划价但已有收费记录)'
ELSE '未被使用(正常)'
END AS analysis
FROM wor_activity_definition AS T1
LEFT JOIN adm_charge_item AS T3
ON T3.product_id = T1.id
AND T3.context_enum = 3 -- ACTIVITY
AND T3.delete_flag = '0'
WHERE T1.delete_flag = '0'
AND T1.pricing_flag = '0'
GROUP BY T1.id, T1.bus_no, T1.name, T1.pricing_flag
HAVING COUNT(T3.id) > 0 -- 只显示已被使用的
ORDER BY charge_item_count DESC;
-- 5. 按类别统计 pricing_flag = 0 的项目
SELECT
category_code,
COUNT(*) AS count,
STRING_AGG(name, ', ') AS activity_names -- 列出项目名称
FROM wor_activity_definition
WHERE delete_flag = '0'
AND pricing_flag = '0'
AND status_enum = 1 -- 只统计激活的
GROUP BY category_code
ORDER BY category_code;
-- 6. 对比pricing_flag = 0 和 pricing_flag = 1 的项目特征
SELECT
pricing_flag,
COUNT(*) AS count,
COUNT(DISTINCT category_code) AS category_count,
COUNT(DISTINCT org_id) AS org_count,
STRING_AGG(DISTINCT category_code::text, ', ') AS categories
FROM wor_activity_definition
WHERE delete_flag = '0'
AND status_enum = 1
AND pricing_flag IN ('0', '1')
GROUP BY pricing_flag
ORDER BY pricing_flag;
-- 7. 检查是否有子项的项目childrenJson 不为空)被标记为 pricing_flag = 0
SELECT
id,
bus_no,
name AS activity_name,
pricing_flag,
children_json,
CASE
WHEN children_json IS NOT NULL AND children_json != '' THEN '有子项但不允许划价(可能是套餐子项)'
ELSE '无子项'
END AS analysis
FROM wor_activity_definition
WHERE delete_flag = '0'
AND pricing_flag = '0'
AND children_json IS NOT NULL
AND children_json != ''
ORDER BY id;
-- 8. 查看 pricing_flag 字段的所有可能值(包括 NULL
SELECT
COALESCE(pricing_flag::text, 'NULL') AS pricing_flag_value,
COUNT(*) AS count,
ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER (), 2) AS percentage
FROM wor_activity_definition
WHERE delete_flag = '0'
AND status_enum = 1
GROUP BY pricing_flag
ORDER BY pricing_flag NULLS LAST;

View File

@@ -1,116 +0,0 @@
-- 详细检查诊疗项目检索问题
-- 已知wor_activity_definition 表中有4条数据
-- 1. 检查这4条诊疗项目定义的详细信息
SELECT
id,
name,
bus_no,
delete_flag,
tenant_id,
create_time
FROM wor_activity_definition
ORDER BY id;
-- 2. 检查收费项目中是否有诊疗项目类型的记录
-- 注意ChargeItemContext.ACTIVITY.getValue() 返回的是 Integer 3
-- 但数据库中 context_enum 可能是字符串类型,需要检查是 '3' 还是 3
SELECT
COUNT(*) as total_activity_charge_items,
COUNT(CASE WHEN delete_flag = '0' THEN 1 END) as active_activity_charge_items,
COUNT(CASE WHEN delete_flag != '0' THEN 1 END) as deleted_activity_charge_items
FROM adm_charge_item
WHERE context_enum::text = '3' OR context_enum = 3; -- 诊疗项目类型是3
-- 3. 检查收费项目中的product_id是否能匹配到诊疗项目定义
-- 注意:诊疗项目类型的 context_enum = 3ChargeItemContext.ACTIVITY.getValue()
SELECT
aci.id as charge_item_id,
aci.encounter_id,
aci.context_enum,
aci.product_id as charge_product_id,
aci.status_enum,
aci.delete_flag as charge_delete_flag,
wad.id as activity_def_id,
wad.name as activity_name,
wad.delete_flag as activity_delete_flag,
CASE
WHEN wad.id IS NULL THEN '❌ 诊疗项目定义不存在'
WHEN wad.delete_flag != '0' THEN '❌ 诊疗项目定义已删除'
WHEN aci.delete_flag != '0' THEN '❌ 收费项目已删除'
ELSE '✅ 正常'
END as match_status
FROM adm_charge_item aci
LEFT JOIN wor_activity_definition wad
ON aci.product_id = wad.id
WHERE (aci.context_enum::text = '3' OR aci.context_enum = 3) -- 诊疗项目类型是3
LIMIT 20;
-- 4. 检查context_enum的所有可能值确认诊疗项目的枚举值是什么
SELECT DISTINCT
context_enum,
COUNT(*) as count
FROM adm_charge_item
WHERE delete_flag = '0'
GROUP BY context_enum
ORDER BY context_enum;
-- 5. 检查是否有收费项目,但无法匹配到诊疗项目定义
SELECT
COUNT(*) as unmatched_count,
STRING_AGG(DISTINCT CAST(product_id AS VARCHAR), ', ') as unmatched_product_ids,
STRING_AGG(DISTINCT CAST(id AS VARCHAR), ', ') as unmatched_charge_item_ids
FROM adm_charge_item aci
WHERE (aci.context_enum::text = '3' OR aci.context_enum = 3) -- 诊疗项目类型是3
AND aci.delete_flag = '0'
AND NOT EXISTS (
SELECT 1
FROM wor_activity_definition wad
WHERE wad.id = aci.product_id
AND wad.delete_flag = '0'
);
-- 6. 检查具体某个就诊的诊疗项目如果有具体的encounterId
-- SELECT
-- T1.encounter_id,
-- T1.id as charge_item_id,
-- T1.context_enum,
-- T1.product_id,
-- T1.status_enum,
-- T1.delete_flag,
-- T2.id as activity_def_id,
-- T2.name as activity_name,
-- T2.delete_flag as activity_delete_flag
-- FROM adm_charge_item AS T1
-- LEFT JOIN wor_activity_definition AS T2
-- ON T1.product_id = T2.id
-- WHERE T1.encounter_id = :encounterId -- 替换为实际的encounterId
-- AND T1.context_enum IN ('ACTIVITY', '1', 'ACTIVITY_CODE') -- 尝试多种可能的值
-- AND T1.delete_flag = '0';
-- 7. 检查后端代码中使用的context_enum值
-- ChargeItemContext.ACTIVITY.getValue() 的实际返回值需要查看枚举类
-- 可能是:'ACTIVITY', '1', 'ACTIVITY_CODE', 或其他值
-- 建议先运行查询4查看数据库中实际使用的context_enum值
-- 8. 检查status_enum的值查询条件中需要匹配的状态
-- SQL查询中要求 status_enum IN (1, 2, 3, 4, 5, 6)
-- 检查收费项目中的状态值是否在这个范围内
SELECT
status_enum,
COUNT(*) as count,
CASE
WHEN status_enum IN (1, 2, 3, 4, 5, 6) THEN '✅ 在查询范围内'
ELSE '❌ 不在查询范围内'
END as status_check
FROM adm_charge_item
WHERE context_enum IN (
SELECT DISTINCT context_enum
FROM adm_charge_item
WHERE delete_flag = '0'
LIMIT 10
)
AND delete_flag = '0'
GROUP BY status_enum
ORDER BY status_enum;

View File

@@ -1,52 +0,0 @@
-- 创建日结结算单表
CREATE TABLE IF NOT EXISTS medication_day_end_settlement (
id BIGSERIAL PRIMARY KEY,
settlement_no VARCHAR(64) NOT NULL,
settlement_date DATE NOT NULL,
settlement_type VARCHAR(20) DEFAULT 'daily',
total_amount DECIMAL(15,2) DEFAULT 0.00,
status CHAR(1) DEFAULT '0',
remark VARCHAR(500),
create_by VARCHAR(64) DEFAULT '',
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_by VARCHAR(64) DEFAULT '',
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 添加注释
COMMENT ON TABLE medication_day_end_settlement IS '日结结算单表';
COMMENT ON COLUMN medication_day_end_settlement.settlement_no IS '结算单号';
COMMENT ON COLUMN medication_day_end_settlement.settlement_date IS '结算日期';
COMMENT ON COLUMN medication_day_end_settlement.settlement_type IS '结算类型 (daily, weekly, monthly)';
COMMENT ON COLUMN medication_day_end_settlement.total_amount IS '总金额';
COMMENT ON COLUMN medication_day_end_settlement.status IS '状态 (0正常 1停用)';
COMMENT ON COLUMN medication_day_end_settlement.remark IS '备注';
COMMENT ON COLUMN medication_day_end_settlement.create_by IS '创建者';
COMMENT ON COLUMN medication_day_end_settlement.create_time IS '创建时间';
COMMENT ON COLUMN medication_day_end_settlement.update_by IS '更新者';
COMMENT ON COLUMN medication_day_end_settlement.update_time IS '更新时间';
-- 添加索引
CREATE INDEX IF NOT EXISTS idx_settlement_date ON medication_day_end_settlement(settlement_date);
CREATE INDEX IF NOT EXISTS idx_settlement_no ON medication_day_end_settlement(settlement_no);
-- 创建更新时间触发器函数
CREATE OR REPLACE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.update_time = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ language 'plpgsql';
-- 创建更新时间触发器
DROP TRIGGER IF EXISTS update_medication_day_end_settlement_modtime ON medication_day_end_settlement;
CREATE TRIGGER update_medication_day_end_settlement_modtime
BEFORE UPDATE ON medication_day_end_settlement
FOR EACH ROW
EXECUTE FUNCTION update_modified_column();
-- 插入初始数据
INSERT INTO medication_day_end_settlement (settlement_no, settlement_date, settlement_type, total_amount, status, remark, create_by) VALUES
('DS20250201001', '2025-02-01', 'daily', 15000.00, '0', '2025年2月1日日结', 'admin'),
('DS20250201002', '2025-02-01', 'daily', 8500.50, '0', '药房日结', 'admin');

View File

@@ -1,38 +0,0 @@
CREATE TABLE IF NOT EXISTS sys_user_config (
config_id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL,
config_key VARCHAR(100) NOT NULL,
config_value TEXT,
remark VARCHAR(500),
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 添加注释
COMMENT ON TABLE sys_user_config IS '用户配置表';
COMMENT ON COLUMN sys_user_config.config_id IS '配置ID';
COMMENT ON COLUMN sys_user_config.user_id IS '用户ID';
COMMENT ON COLUMN sys_user_config.config_key IS '配置键名';
COMMENT ON COLUMN sys_user_config.config_value IS '配置值';
COMMENT ON COLUMN sys_user_config.remark IS '备注';
COMMENT ON COLUMN sys_user_config.create_time IS '创建时间';
COMMENT ON COLUMN sys_user_config.update_time IS '更新时间';
-- 创建唯一索引
CREATE UNIQUE INDEX IF NOT EXISTS uk_user_config ON sys_user_config (user_id, config_key);
CREATE INDEX IF NOT EXISTS idx_user_id ON sys_user_config (user_id);
-- 创建更新时间触发器函数
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.update_time = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ language 'plpgsql';
-- 创建触发器
CREATE TRIGGER update_sys_user_config_updated_at
BEFORE UPDATE ON sys_user_config
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();

View File

@@ -1,108 +0,0 @@
-- ============================================
-- 调试队列日期问题
-- 用途:检查数据库中的 queue_date 字段值,找出为什么查询不到数据
-- ============================================
-- 1. 查看所有队列记录的日期分布
SELECT
queue_date,
status,
COUNT(*) AS count,
STRING_AGG(patient_name, ', ') AS patients
FROM hisdev.triage_queue_item
WHERE tenant_id = 1
AND delete_flag = '0'
GROUP BY queue_date, status
ORDER BY queue_date DESC, status;
-- 2. 查看指定科室的所有记录(不限制日期)
SELECT
id,
queue_date,
status,
patient_name,
organization_id,
organization_name,
queue_order,
create_time
FROM hisdev.triage_queue_item
WHERE tenant_id = 1
AND delete_flag = '0'
AND organization_id = 1995302136614969300
ORDER BY queue_date DESC, queue_order ASC;
-- 3. 查看今天的记录(使用 CURRENT_DATE
SELECT
id,
queue_date,
status,
patient_name,
organization_id,
queue_order
FROM hisdev.triage_queue_item
WHERE tenant_id = 1
AND delete_flag = '0'
AND queue_date = CURRENT_DATE
AND organization_id = 1995302136614969300
ORDER BY queue_order ASC;
-- 4. 查看 2026-01-16 的记录
SELECT
id,
queue_date,
status,
patient_name,
organization_id,
queue_order
FROM hisdev.triage_queue_item
WHERE tenant_id = 1
AND delete_flag = '0'
AND queue_date = '2026-01-16'::DATE
AND organization_id = 1995302136614969300
ORDER BY queue_order ASC;
-- 5. 查看 2025-01-16 的记录(可能是昨天的数据)
SELECT
id,
queue_date,
status,
patient_name,
organization_id,
queue_order
FROM hisdev.triage_queue_item
WHERE tenant_id = 1
AND delete_flag = '0'
AND queue_date = '2025-01-16'::DATE
AND organization_id = 1995302136614969300
ORDER BY queue_order ASC;
-- 6. 查看最近的记录最近7天
SELECT
queue_date,
status,
COUNT(*) AS count
FROM hisdev.triage_queue_item
WHERE tenant_id = 1
AND delete_flag = '0'
AND queue_date >= CURRENT_DATE - INTERVAL '7 days'
GROUP BY queue_date, status
ORDER BY queue_date DESC, status;
-- 7. 检查系统当前日期PostgreSQL
SELECT CURRENT_DATE AS current_date_in_db;
-- 8. 查看所有状态为 WAITING 或 SKIPPED 的记录(不限制日期)
SELECT
id,
queue_date,
status,
patient_name,
organization_id,
queue_order
FROM hisdev.triage_queue_item
WHERE tenant_id = 1
AND delete_flag = '0'
AND status IN ('WAITING', 'SKIPPED')
AND organization_id = 1995302136614969300
ORDER BY queue_date DESC, queue_order ASC;

View File

@@ -1,144 +0,0 @@
-- ============================================
-- 查询诊疗项目 pricing_flag 字段分布情况
-- 用途:了解哪些项目允许划价,哪些不允许
-- ============================================
-- 1. 统计 pricing_flag 字段的分布情况
SELECT
COUNT(*) AS total_count,
COUNT(CASE WHEN pricing_flag = 1 THEN 1 END) AS pricing_flag_1_count, -- 允许划价
COUNT(CASE WHEN pricing_flag = 0 THEN 1 END) AS pricing_flag_0_count, -- 不允许划价
COUNT(CASE WHEN pricing_flag IS NULL THEN 1 END) AS pricing_flag_null_count, -- 未设置
ROUND(COUNT(CASE WHEN pricing_flag = 1 THEN 1 END) * 100.0 / COUNT(*), 2) AS flag_1_percent,
ROUND(COUNT(CASE WHEN pricing_flag = 0 THEN 1 END) * 100.0 / COUNT(*), 2) AS flag_0_percent,
ROUND(COUNT(CASE WHEN pricing_flag IS NULL THEN 1 END) * 100.0 / COUNT(*), 2) AS flag_null_percent
FROM wor_activity_definition
WHERE delete_flag = '0'
AND status_enum = 1; -- 只统计激活状态的项目
-- 2. 查看所有允许划价的项目pricing_flag = 1 或 NULL
SELECT
id,
bus_no,
name AS activity_name,
pricing_flag,
status_enum,
org_id,
category_code,
type_enum,
CASE
WHEN pricing_flag = 1 THEN '允许划价'
WHEN pricing_flag = 0 THEN '不允许划价'
WHEN pricing_flag IS NULL THEN '未设置(默认允许)'
ELSE '未知'
END AS pricing_flag_desc
FROM wor_activity_definition
WHERE delete_flag = '0'
AND status_enum = 1
AND (pricing_flag = 1 OR pricing_flag IS NULL) -- 之前过滤条件
ORDER BY id;
-- 3. 查看不允许划价的项目pricing_flag = 0
SELECT
id,
bus_no,
name AS activity_name,
pricing_flag,
status_enum,
org_id,
category_code,
type_enum,
description_text,
'不允许划价' AS pricing_flag_desc
FROM wor_activity_definition
WHERE delete_flag = '0'
AND status_enum = 1
AND pricing_flag = 0 -- 这些项目之前不会显示
ORDER BY id;
-- 4. 查看未设置 pricing_flag 的项目NULL
SELECT
id,
bus_no,
name AS activity_name,
pricing_flag,
status_enum,
org_id,
category_code,
type_enum,
'未设置(默认允许)' AS pricing_flag_desc
FROM wor_activity_definition
WHERE delete_flag = '0'
AND status_enum = 1
AND pricing_flag IS NULL
ORDER BY id;
-- 5. 按科室统计 pricing_flag 分布
SELECT
org_id,
COUNT(*) AS total_count,
COUNT(CASE WHEN pricing_flag = 1 THEN 1 END) AS flag_1_count,
COUNT(CASE WHEN pricing_flag = 0 THEN 1 END) AS flag_0_count,
COUNT(CASE WHEN pricing_flag IS NULL THEN 1 END) AS flag_null_count
FROM wor_activity_definition
WHERE delete_flag = '0'
AND status_enum = 1
GROUP BY org_id
ORDER BY org_id;
-- 6. 按类别统计 pricing_flag 分布
SELECT
category_code,
COUNT(*) AS total_count,
COUNT(CASE WHEN pricing_flag = 1 THEN 1 END) AS flag_1_count,
COUNT(CASE WHEN pricing_flag = 0 THEN 1 END) AS flag_0_count,
COUNT(CASE WHEN pricing_flag IS NULL THEN 1 END) AS flag_null_count
FROM wor_activity_definition
WHERE delete_flag = '0'
AND status_enum = 1
GROUP BY category_code
ORDER BY category_code;
-- 7. 检查是否有费用定价关联的项目,但 pricing_flag = 0
SELECT
T1.id,
T1.bus_no,
T1.name AS activity_name,
T1.pricing_flag,
T2.id AS charge_item_definition_id,
T2.charge_name,
T2.price,
'有费用定价但不允许划价' AS issue_desc
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
AND T1.pricing_flag = 0
AND T2.id IS NOT NULL -- 有关联的费用定价
ORDER BY T1.id;
-- 8. 检查没有费用定价关联的项目,但 pricing_flag = 1
SELECT
T1.id,
T1.bus_no,
T1.name AS activity_name,
T1.pricing_flag,
T2.id AS charge_item_definition_id,
'允许划价但没有费用定价' AS issue_desc
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
AND (T1.pricing_flag = 1 OR T1.pricing_flag IS NULL)
AND T2.id IS NULL -- 没有关联的费用定价
ORDER BY T1.id;

View File

@@ -1,313 +0,0 @@
-- ============================================
-- 智能候选池查询SQL当日已挂号患者
-- 对应接口GET /charge-manage/register/current-day-encounter
-- 用途:查询当日已挂号但未入队的患者,用于智能分诊排队管理
-- ============================================
-- 完整SQL查询包含所有关联表
SELECT T9.tenant_id AS tenantId,
T9.encounter_id AS encounterId,
T9.display_order AS displayOrder,
T9.organization_id AS organizationId,
T9.organization_name AS organizationName,
T9.healthcare_name AS healthcareName,
T9.practitioner_user_id AS practitionerUserId,
T9.practitioner_name AS practitionerName,
T9.contract_name AS contractName,
T9.patient_id AS patientId,
T9.patient_name AS patientName,
T9.phone,
T9.gender_enum AS genderEnum,
T9.id_card AS idCard,
T9.status_enum AS statusEnum,
T9.register_time AS registerTime,
T9.total_price AS totalPrice,
T9.account_name AS accountName,
T9.enterer_name AS entererName,
T9.charge_item_ids AS chargeItemIds,
T9.payment_id AS paymentId,
T9.picture_url AS pictureUrl,
T9.birth_date AS birthDate,
COALESCE(T9.identifier_no, T9.patient_bus_no, '') AS identifierNo
FROM (
SELECT T1.tenant_id AS tenant_id,
T1.id AS encounter_id,
T1.display_order AS display_order,
T1.organization_id AS organization_id,
T2.NAME AS organization_name,
T3.NAME AS healthcare_name,
T5.user_id AS practitioner_user_id,
T5.NAME AS practitioner_name,
T7.contract_name AS contract_name,
T8.id AS patient_id,
T8.NAME AS patient_name,
T8.phone AS phone,
T8.gender_enum AS gender_enum,
T8.id_card AS id_card,
T1.status_enum AS status_enum,
T1.create_time AS register_time,
T10.total_price,
T11."name" AS account_name,
T12."name" AS enterer_name,
T13.charge_item_ids,
T13.id AS payment_id,
ai.picture_url AS picture_url,
T8.birth_date AS birth_date,
T8.bus_no AS patient_bus_no,
T18.identifier_no AS identifier_no
FROM adm_encounter AS T1
-- 关联科室表
LEFT JOIN adm_organization AS T2
ON T1.organization_id = T2.ID
AND T2.delete_flag = '0'
-- 关联医疗服务类型表(号别)
LEFT JOIN adm_healthcare_service AS T3
ON T1.service_type_id = T3.ID
AND T3.delete_flag = '0'
-- 关联就诊参与者表(医生信息)
LEFT JOIN (
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY encounter_id ORDER BY create_time ASC) AS rn
FROM adm_encounter_participant
WHERE delete_flag = '0'
AND (
-- 如果就诊状态为"进行中",查找"接诊医生"admitter
(type_code = 'admitter' AND EXISTS(SELECT 1
FROM adm_encounter AS T1
WHERE T1.status_enum = 2 -- IN_PROGRESS
AND T1.ID = encounter_id))
OR
-- 如果就诊状态不是"进行中",查找"挂号医生"registration_doctor
(type_code = 'registration_doctor' AND NOT EXISTS(SELECT 1
FROM adm_encounter AS T1
WHERE T1.status_enum = 2 -- IN_PROGRESS
AND T1.ID = encounter_id))
)
) t
WHERE rn = 1
) AS T4 ON T1.ID = T4.encounter_id
-- 关联医生表
LEFT JOIN adm_practitioner AS T5
ON T5.ID = T4.practitioner_id
AND T5.delete_flag = '0'
-- 关联账户表
LEFT JOIN adm_account AS T6
ON T1.ID = T6.encounter_id
AND T6.delete_flag = '0'
AND T6.encounter_flag = '1'
-- 关联合同表
LEFT JOIN fin_contract AS T7
ON T6.contract_no = T7.bus_no
AND T7.delete_flag = '0'
-- 关联患者表
LEFT JOIN adm_patient AS T8
ON T1.patient_id = T8.ID
AND T8.delete_flag = '0'
-- 关联患者标识表(身份证号等)
LEFT JOIN (
SELECT patient_id,
identifier_no
FROM (
SELECT patient_id,
identifier_no,
ROW_NUMBER() OVER (PARTITION BY patient_id ORDER BY create_time ASC) AS rn
FROM adm_patient_identifier
WHERE delete_flag = '0'
AND identifier_no IS NOT NULL
AND identifier_no != ''
) t
WHERE rn = 1
) AS T18 ON T8.id = T18.patient_id
-- 关联收费项目表(挂号费)
LEFT JOIN adm_charge_item AS T10
ON T1.id = T10.encounter_id
AND T10.delete_flag = '0'
AND T10.context_enum = 1 -- REGISTER挂号
-- 关联账户表(收费账户)
LEFT JOIN adm_account AS T11
ON T10.account_id = T11.id
AND T11.delete_flag = '0'
-- 关联医生表(收费医生)
LEFT JOIN adm_practitioner AS T12
ON T12.ID = T10.enterer_id
AND T12.delete_flag = '0'
-- 关联支付对账表(已支付)
LEFT JOIN fin_payment_reconciliation T13
ON T10.id::TEXT = ANY(string_to_array(T13.charge_item_ids,','))
AND T13.delete_flag = '0'
AND T13.status_enum = 1 -- SUCCESS支付成功
-- 关联退号记录当状态为退号时通过relation_id关联原支付记录
LEFT JOIN fin_payment_reconciliation T14
ON T13.id = T14.relation_id
AND T14.delete_flag = '0'
AND T14.status_enum = 3 -- REFUND退款
AND T14.payment_enum = 1
-- 关联退号医生
LEFT JOIN adm_practitioner AS T15
ON T15.ID = T14.enterer_id
AND T15.delete_flag = '0'
-- 关联系统用户表
LEFT JOIN sys_user AS T17
ON T17.user_id = T15.user_id
AND T17.delete_flag = '0'
-- 关联退号支付详情,获取退款方式(聚合多个支付方式)
LEFT JOIN (
SELECT reconciliation_id,
STRING_AGG(
CASE pay_enum
WHEN 220400 THEN '现金'
WHEN 220100 THEN '微信'
WHEN 220200 THEN '支付宝'
WHEN 220300 THEN '银联'
END,
','
ORDER BY pay_enum
) AS refund_method
FROM fin_payment_rec_detail
WHERE delete_flag = '0'
AND amount < 0
AND pay_enum IN (220400, 220100, 220200, 220300)
GROUP BY reconciliation_id
) AS T16 ON T14.id = T16.reconciliation_id
-- 关联发票表
LEFT JOIN adm_invoice AS ai
ON ai.reconciliation_id = T13.id
AND ai.delete_flag = '0'
WHERE T1.delete_flag = '0'
AND T1.class_enum = 1 -- 门诊AMB
AND T10.context_enum = 1 -- 挂号REGISTER
-- 动态条件(由前端传入,通过 ${ew.customSqlSegment} 注入)
-- 例如AND T1.create_time::DATE = CURRENT_DATE -- 当日挂号
-- 例如AND T1.status_enum != 6 -- 排除退号statusEnum = -1时
-- 例如AND (T8.name LIKE '%关键词%' OR T2.name LIKE '%关键词%' ...) -- 模糊搜索
) AS T9
-- 动态查询条件(由 MyBatis-Plus QueryWrapper 生成)
-- ${ew.customSqlSegment}
ORDER BY T9.register_time DESC;
-- ============================================
-- 简化版查询(仅查询核心字段,用于快速测试)
-- ============================================
SELECT
enc.id AS encounterId,
enc.patient_id AS patientId,
pt.name AS patientName,
pt.birth_date AS birthDate,
org.id AS organizationId,
org.name AS organizationName,
hcs.name AS healthcareName,
pr.name AS practitionerName,
enc.create_time AS registerTime,
enc.status_enum AS statusEnum
FROM adm_encounter enc
INNER JOIN adm_patient pt
ON enc.patient_id = pt.id
AND pt.delete_flag = '0'
LEFT JOIN adm_organization org
ON enc.organization_id = org.id
AND org.delete_flag = '0'
LEFT JOIN adm_healthcare_service hcs
ON enc.service_type_id = hcs.id
AND hcs.delete_flag = '0'
LEFT JOIN (
SELECT encounter_id, practitioner_id,
ROW_NUMBER() OVER (PARTITION BY encounter_id ORDER BY create_time ASC) AS rn
FROM adm_encounter_participant
WHERE delete_flag = '0'
AND type_code IN ('admitter', 'registration_doctor')
) ep ON enc.id = ep.encounter_id AND ep.rn = 1
LEFT JOIN adm_practitioner pr
ON ep.practitioner_id = pr.id
AND pr.delete_flag = '0'
INNER JOIN adm_charge_item ci
ON enc.id = ci.encounter_id
AND ci.delete_flag = '0'
AND ci.context_enum = 1 -- 挂号
INNER JOIN fin_payment_reconciliation prc
ON ci.id::TEXT = ANY(string_to_array(prc.charge_item_ids,','))
AND prc.delete_flag = '0'
AND prc.status_enum = 1 -- 支付成功
WHERE enc.delete_flag = '0'
AND enc.class_enum = 1 -- 门诊
AND enc.create_time::DATE = CURRENT_DATE -- 当日挂号
AND enc.status_enum != 6 -- 排除退号
ORDER BY enc.create_time DESC;
-- ============================================
-- 查询条件说明
-- ============================================
-- 1. 基础条件:
-- - enc.delete_flag = '0' -- 未删除
-- - enc.class_enum = 1 -- 门诊AMB
-- - ci.context_enum = 1 -- 挂号REGISTER
-- - prc.status_enum = 1 -- 支付成功SUCCESS
--
-- 2. 日期过滤:
-- - enc.create_time::DATE = CURRENT_DATE -- 当日挂号(由前端传入 date 参数)
--
-- 3. 状态过滤:
-- - enc.status_enum != 6 -- 排除退号(当 statusEnum = -1 时)
-- - enc.status_enum = 2 -- 进行中IN_PROGRESS用于判断医生类型
--
-- 4. 模糊搜索(由前端传入 searchKey 参数):
-- - patient_name患者姓名
-- - organization_name科室名称
-- - practitioner_name医生姓名
-- - healthcare_name号别名称
-- - identifier_no身份证号
--
-- 5. 租户过滤(由后端自动添加):
-- - tenant_id = ? -- 当前登录用户的租户ID
--
-- 6. 分页(由 MyBatis-Plus Page 对象处理):
-- - LIMIT ? OFFSET ?
-- ============================================
-- 常用查询示例
-- ============================================
-- 示例1查询今天所有已挂号患者排除退号
SELECT
enc.id AS encounterId,
pt.name AS patientName,
org.name AS organizationName,
hcs.name AS healthcareName,
pr.name AS practitionerName,
enc.create_time AS registerTime
FROM adm_encounter enc
INNER JOIN adm_patient pt ON enc.patient_id = pt.id AND pt.delete_flag = '0'
LEFT JOIN adm_organization org ON enc.organization_id = org.id AND org.delete_flag = '0'
LEFT JOIN adm_healthcare_service hcs ON enc.service_type_id = hcs.id AND hcs.delete_flag = '0'
LEFT JOIN (
SELECT encounter_id, practitioner_id,
ROW_NUMBER() OVER (PARTITION BY encounter_id ORDER BY create_time ASC) AS rn
FROM adm_encounter_participant
WHERE delete_flag = '0' AND type_code IN ('admitter', 'registration_doctor')
) ep ON enc.id = ep.encounter_id AND ep.rn = 1
LEFT JOIN adm_practitioner pr ON ep.practitioner_id = pr.id AND pr.delete_flag = '0'
INNER JOIN adm_charge_item ci ON enc.id = ci.encounter_id AND ci.delete_flag = '0' AND ci.context_enum = 1
INNER JOIN fin_payment_reconciliation prc ON ci.id::TEXT = ANY(string_to_array(prc.charge_item_ids,','))
AND prc.delete_flag = '0' AND prc.status_enum = 1
WHERE enc.delete_flag = '0'
AND enc.class_enum = 1
AND enc.create_time::DATE = CURRENT_DATE
AND enc.status_enum != 6
ORDER BY enc.create_time DESC;
-- 示例2查询指定科室的已挂号患者
-- 在示例1的基础上添加
-- AND enc.organization_id = ? -- 科室ID
-- 示例3按患者姓名模糊搜索
-- 在示例1的基础上添加
-- AND pt.name LIKE '%关键词%'
-- 示例4查询已加入队列的患者用于去重
SELECT DISTINCT encounter_id
FROM hisdev.triage_queue_item
WHERE delete_flag = '0'
AND queue_date = CURRENT_DATE
AND status != 'COMPLETED';

View File

@@ -1,268 +0,0 @@
-- ============================================
-- 智能候选池查询SQL智能分诊排队管理页面专用
-- 页面:智能分诊排队管理 - 心内科
-- 用途:查询"已签到未入队"的患者(当日已挂号,但未加入队列)
-- ============================================
-- ============================================
-- 方案一:完整查询(包含所有字段,排除已在队列中的患者)
-- ============================================
SELECT
enc.id AS encounterId,
enc.patient_id AS patientId,
pt.name AS patientName,
pt.birth_date AS birthDate,
-- 计算年龄(前端会调用 parseAge 函数)
CASE
WHEN pt.birth_date IS NOT NULL THEN
EXTRACT(YEAR FROM AGE(pt.birth_date))::TEXT || ''
ELSE ''
END AS age,
org.id AS organizationId,
org.name AS organizationName,
hcs.name AS healthcareName,
pr.name AS practitionerName,
enc.create_time AS registerTime,
enc.status_enum AS statusEnum,
-- 其他字段(如果需要)
pt.phone,
pt.gender_enum AS genderEnum,
pt.id_card AS idCard
FROM adm_encounter enc
-- 关联患者表
INNER JOIN adm_patient pt
ON enc.patient_id = pt.id
AND pt.delete_flag = '0'
-- 关联科室表
LEFT JOIN adm_organization org
ON enc.organization_id = org.id
AND org.delete_flag = '0'
-- 关联医疗服务类型表(号别)
LEFT JOIN adm_healthcare_service hcs
ON enc.service_type_id = hcs.id
AND hcs.delete_flag = '0'
-- 关联就诊参与者表(医生信息)
LEFT JOIN (
SELECT encounter_id, practitioner_id,
ROW_NUMBER() OVER (PARTITION BY encounter_id ORDER BY create_time ASC) AS rn
FROM adm_encounter_participant
WHERE delete_flag = '0'
AND (
-- 如果就诊状态为"进行中",查找"接诊医生"admitter
(type_code = 'admitter' AND EXISTS(SELECT 1
FROM adm_encounter AS e
WHERE e.status_enum = 2 -- IN_PROGRESS
AND e.id = encounter_id))
OR
-- 如果就诊状态不是"进行中",查找"挂号医生"registration_doctor
(type_code = 'registration_doctor' AND NOT EXISTS(SELECT 1
FROM adm_encounter AS e
WHERE e.status_enum = 2 -- IN_PROGRESS
AND e.id = encounter_id))
)
) ep ON enc.id = ep.encounter_id AND ep.rn = 1
-- 关联医生表
LEFT JOIN adm_practitioner pr
ON ep.practitioner_id = pr.id
AND pr.delete_flag = '0'
-- 关联收费项目表(挂号费)
INNER JOIN adm_charge_item ci
ON enc.id = ci.encounter_id
AND ci.delete_flag = '0'
AND ci.context_enum = 1 -- REGISTER挂号
-- 关联支付对账表(已支付)
INNER JOIN fin_payment_reconciliation prc
ON ci.id::TEXT = ANY(string_to_array(prc.charge_item_ids,','))
AND prc.delete_flag = '0'
AND prc.status_enum = 1 -- SUCCESS支付成功
-- 排除已在队列中的患者关键LEFT JOIN + WHERE IS NULL
LEFT JOIN hisdev.triage_queue_item tqi
ON enc.id = tqi.encounter_id
AND tqi.delete_flag = '0'
AND tqi.queue_date = CURRENT_DATE
AND tqi.status != 'COMPLETED' -- 排除已完成的状态
WHERE enc.delete_flag = '0'
AND enc.class_enum = 1 -- 门诊AMB
AND enc.create_time::DATE = CURRENT_DATE -- 当日挂号(前端会过滤 registerTime
AND enc.status_enum != 6 -- 排除退号statusEnum = -1 时)
AND tqi.id IS NULL -- 关键:只查询不在队列中的患者
ORDER BY enc.create_time DESC;
-- ============================================
-- 方案二:简化查询(仅核心字段,便于快速测试)
-- ============================================
SELECT
enc.id AS encounterId,
enc.patient_id AS patientId,
pt.name AS patientName,
org.id AS organizationId,
org.name AS organizationName,
hcs.name AS healthcareName,
pr.name AS practitionerName,
enc.create_time AS registerTime
FROM adm_encounter enc
INNER JOIN adm_patient pt ON enc.patient_id = pt.id AND pt.delete_flag = '0'
LEFT JOIN adm_organization org ON enc.organization_id = org.id AND org.delete_flag = '0'
LEFT JOIN adm_healthcare_service hcs ON enc.service_type_id = hcs.id AND hcs.delete_flag = '0'
LEFT JOIN (
SELECT encounter_id, practitioner_id,
ROW_NUMBER() OVER (PARTITION BY encounter_id ORDER BY create_time ASC) AS rn
FROM adm_encounter_participant
WHERE delete_flag = '0' AND type_code IN ('admitter', 'registration_doctor')
) ep ON enc.id = ep.encounter_id AND ep.rn = 1
LEFT JOIN adm_practitioner pr ON ep.practitioner_id = pr.id AND pr.delete_flag = '0'
INNER JOIN adm_charge_item ci ON enc.id = ci.encounter_id AND ci.delete_flag = '0' AND ci.context_enum = 1
INNER JOIN fin_payment_reconciliation prc ON ci.id::TEXT = ANY(string_to_array(prc.charge_item_ids,','))
AND prc.delete_flag = '0' AND prc.status_enum = 1
-- 排除已在队列中的患者
LEFT JOIN hisdev.triage_queue_item tqi
ON enc.id = tqi.encounter_id
AND tqi.delete_flag = '0'
AND tqi.queue_date = CURRENT_DATE
AND tqi.status != 'COMPLETED'
WHERE enc.delete_flag = '0'
AND enc.class_enum = 1
AND enc.create_time::DATE = CURRENT_DATE
AND enc.status_enum != 6
AND tqi.id IS NULL -- 不在队列中
ORDER BY enc.create_time DESC;
-- ============================================
-- 方案三:分步查询(便于调试和理解)
-- ============================================
-- 步骤1查询当日已挂号的患者不排除队列
SELECT
enc.id AS encounterId,
pt.name AS patientName,
org.name AS organizationName,
enc.create_time AS registerTime
FROM adm_encounter enc
INNER JOIN adm_patient pt ON enc.patient_id = pt.id AND pt.delete_flag = '0'
LEFT JOIN adm_organization org ON enc.organization_id = org.id AND org.delete_flag = '0'
INNER JOIN adm_charge_item ci ON enc.id = ci.encounter_id AND ci.delete_flag = '0' AND ci.context_enum = 1
INNER JOIN fin_payment_reconciliation prc ON ci.id::TEXT = ANY(string_to_array(prc.charge_item_ids,','))
AND prc.delete_flag = '0' AND prc.status_enum = 1
WHERE enc.delete_flag = '0'
AND enc.class_enum = 1
AND enc.create_time::DATE = CURRENT_DATE
AND enc.status_enum != 6;
-- 步骤2查询已在队列中的患者
SELECT DISTINCT encounter_id
FROM hisdev.triage_queue_item
WHERE delete_flag = '0'
AND queue_date = CURRENT_DATE
AND status != 'COMPLETED';
-- 步骤3合并查询使用 NOT EXISTS 或 NOT IN
SELECT
enc.id AS encounterId,
pt.name AS patientName,
org.name AS organizationName,
enc.create_time AS registerTime
FROM adm_encounter enc
INNER JOIN adm_patient pt ON enc.patient_id = pt.id AND pt.delete_flag = '0'
LEFT JOIN adm_organization org ON enc.organization_id = org.id AND org.delete_flag = '0'
INNER JOIN adm_charge_item ci ON enc.id = ci.encounter_id AND ci.delete_flag = '0' AND ci.context_enum = 1
INNER JOIN fin_payment_reconciliation prc ON ci.id::TEXT = ANY(string_to_array(prc.charge_item_ids,','))
AND prc.delete_flag = '0' AND prc.status_enum = 1
WHERE enc.delete_flag = '0'
AND enc.class_enum = 1
AND enc.create_time::DATE = CURRENT_DATE
AND enc.status_enum != 6
-- 排除已在队列中的患者
AND NOT EXISTS (
SELECT 1
FROM hisdev.triage_queue_item tqi
WHERE tqi.encounter_id = enc.id
AND tqi.delete_flag = '0'
AND tqi.queue_date = CURRENT_DATE
AND tqi.status != 'COMPLETED'
)
ORDER BY enc.create_time DESC;
-- ============================================
-- 查询条件说明
-- ============================================
-- 1. 基础条件:
-- - enc.delete_flag = '0' -- 未删除
-- - enc.class_enum = 1 -- 门诊AMB
-- - ci.context_enum = 1 -- 挂号REGISTER
-- - prc.status_enum = 1 -- 支付成功SUCCESS
--
-- 2. 日期过滤:
-- - enc.create_time::DATE = CURRENT_DATE -- 当日挂号
-- 注意:前端还会基于 registerTime 字段再次过滤今天的数据
--
-- 3. 状态过滤:
-- - enc.status_enum != 6 -- 排除退号(对应前端 statusEnum = -1
--
-- 4. 队列去重:
-- - LEFT JOIN hisdev.triage_queue_item ... WHERE tqi.id IS NULL
-- 或者
-- - NOT EXISTS (SELECT 1 FROM hisdev.triage_queue_item ...)
-- 排除已在队列中且状态不是 COMPLETED 的患者
--
-- 5. 租户过滤(如果需要):
-- - enc.tenant_id = ? -- 当前登录用户的租户ID
--
-- 6. 模糊搜索(如果需要):
-- - pt.name LIKE '%关键词%' -- 患者姓名
-- - org.name LIKE '%关键词%' -- 科室名称
-- - pr.name LIKE '%关键词%' -- 医生姓名
-- - hcs.name LIKE '%关键词%' -- 号别名称
-- ============================================
-- 调试查询(检查数据是否正确)
-- ============================================
-- 1. 检查当日已挂号患者总数
SELECT COUNT(*) AS total_registered
FROM adm_encounter enc
INNER JOIN adm_charge_item ci ON enc.id = ci.encounter_id AND ci.delete_flag = '0' AND ci.context_enum = 1
INNER JOIN fin_payment_reconciliation prc ON ci.id::TEXT = ANY(string_to_array(prc.charge_item_ids,','))
AND prc.delete_flag = '0' AND prc.status_enum = 1
WHERE enc.delete_flag = '0'
AND enc.class_enum = 1
AND enc.create_time::DATE = CURRENT_DATE
AND enc.status_enum != 6;
-- 2. 检查已在队列中的患者数量
SELECT COUNT(DISTINCT encounter_id) AS in_queue_count
FROM hisdev.triage_queue_item
WHERE delete_flag = '0'
AND queue_date = CURRENT_DATE
AND status != 'COMPLETED';
-- 3. 检查候选池应该显示的患者数量(已挂号 - 已在队列)
SELECT
(SELECT COUNT(*)
FROM adm_encounter enc
INNER JOIN adm_charge_item ci ON enc.id = ci.encounter_id AND ci.delete_flag = '0' AND ci.context_enum = 1
INNER JOIN fin_payment_reconciliation prc ON ci.id::TEXT = ANY(string_to_array(prc.charge_item_ids,','))
AND prc.delete_flag = '0' AND prc.status_enum = 1
WHERE enc.delete_flag = '0'
AND enc.class_enum = 1
AND enc.create_time::DATE = CURRENT_DATE
AND enc.status_enum != 6)
-
(SELECT COUNT(DISTINCT encounter_id)
FROM hisdev.triage_queue_item
WHERE delete_flag = '0'
AND queue_date = CURRENT_DATE
AND status != 'COMPLETED')
AS candidate_pool_count;
-- 4. 查看队列中的患者详情(用于对比)
SELECT
tqi.encounter_id,
tqi.patient_name,
tqi.status,
tqi.queue_order
FROM hisdev.triage_queue_item tqi
WHERE tqi.delete_flag = '0'
AND tqi.queue_date = CURRENT_DATE
AND tqi.status != 'COMPLETED'
ORDER BY tqi.queue_order;

View File

@@ -1,366 +0,0 @@
-- ============================================
-- 智能候选池查询SQL完整版 - 包含排除列表)
-- 页面:智能分诊排队管理 - 心内科
-- 用途:查询"已签到未入队"的患者(当日已挂号,但未加入队列,且未在排除列表中)
-- 更新日期2025-01-15
-- ============================================
-- ============================================
-- 方案一:完整查询(包含所有字段,排除已在队列和排除列表中的患者)
-- ============================================
SELECT
T9.tenant_id AS tenantId,
T9.encounter_id AS encounterId,
T9.display_order AS displayOrder,
T9.organization_id AS organizationId,
T9.organization_name AS organizationName,
T9.healthcare_name AS healthcareName,
T9.practitioner_user_id AS practitionerUserId,
T9.practitioner_name AS practitionerName,
T9.contract_name AS contractName,
T9.patient_id AS patientId,
T9.patient_name AS patientName,
T9.phone,
T9.gender_enum AS genderEnum,
T9.id_card AS idCard,
T9.status_enum AS statusEnum,
T9.register_time AS registerTime,
T9.total_price AS totalPrice,
T9.account_name AS accountName,
T9.enterer_name AS entererName,
T9.charge_item_ids AS chargeItemIds,
T9.payment_id AS paymentId,
T9.picture_url AS pictureUrl,
T9.birth_date AS birthDate,
COALESCE(T9.identifier_no, T9.patient_bus_no, '') AS identifierNo,
-- 计算年龄(前端会调用 parseAge 函数)
CASE
WHEN T9.birth_date IS NOT NULL THEN
EXTRACT(YEAR FROM AGE(T9.birth_date))::TEXT || ''
ELSE ''
END AS age
FROM (
SELECT T1.tenant_id AS tenant_id,
T1.id AS encounter_id,
T1.display_order AS display_order,
T1.organization_id AS organization_id,
T2.NAME AS organization_name,
T3.NAME AS healthcare_name,
T5.user_id AS practitioner_user_id,
T5.NAME AS practitioner_name,
T7.contract_name AS contract_name,
T8.id AS patient_id,
T8.NAME AS patient_name,
T8.phone AS phone,
T8.gender_enum AS gender_enum,
T8.id_card AS id_card,
T1.status_enum AS status_enum,
T1.create_time AS register_time,
T10.total_price,
T11."name" AS account_name,
T12."name" AS enterer_name,
T13.charge_item_ids,
T13.id AS payment_id,
ai.picture_url AS picture_url,
T8.birth_date AS birth_date,
T8.bus_no AS patient_bus_no,
T18.identifier_no AS identifier_no
FROM adm_encounter AS T1
LEFT JOIN adm_organization AS T2 ON T1.organization_id = T2.ID AND T2.delete_flag = '0'
LEFT JOIN adm_healthcare_service AS T3 ON T1.service_type_id = T3.ID AND T3.delete_flag = '0'
LEFT JOIN (
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY encounter_id ORDER BY create_time ASC) AS rn
FROM adm_encounter_participant
WHERE delete_flag = '0'
AND (
(type_code = 'admitter' AND EXISTS(SELECT 1
FROM adm_encounter AS T1
WHERE T1.status_enum = 2 -- IN_PROGRESS
AND T1.ID = encounter_id))
OR
(type_code = 'registration_doctor' AND NOT EXISTS(SELECT 1
FROM adm_encounter AS T1
WHERE T1.status_enum = 2 -- IN_PROGRESS
AND T1.ID = encounter_id))
)
) t
WHERE rn = 1
) AS T4 ON T1.ID = T4.encounter_id
LEFT JOIN adm_practitioner AS T5 ON T5.ID = T4.practitioner_id AND T5.delete_flag = '0'
LEFT JOIN adm_account AS T6
ON T1.ID = T6.encounter_id AND T6.delete_flag = '0' AND T6.encounter_flag = '1'
LEFT JOIN fin_contract AS T7 ON T6.contract_no = T7.bus_no AND T7.delete_flag = '0'
LEFT JOIN adm_patient AS T8 ON T1.patient_id = T8.ID AND T8.delete_flag = '0'
LEFT JOIN (
SELECT patient_id,
identifier_no
FROM (
SELECT patient_id,
identifier_no,
ROW_NUMBER() OVER (PARTITION BY patient_id ORDER BY create_time ASC) AS rn
FROM adm_patient_identifier
WHERE delete_flag = '0'
AND identifier_no IS NOT NULL
AND identifier_no != ''
) t
WHERE rn = 1
) AS T18 ON T8.id = T18.patient_id
LEFT JOIN adm_charge_item AS T10 ON T1.id = T10.encounter_id AND T10.delete_flag = '0'
LEFT JOIN adm_account AS T11 ON T10.account_id = T11.id AND T11.delete_flag = '0'
LEFT JOIN adm_practitioner AS T12 ON T12.ID = T10.enterer_id AND T12.delete_flag = '0'
LEFT JOIN fin_payment_reconciliation T13
ON T10.id::TEXT = ANY(string_to_array(T13.charge_item_ids,','))
AND T13.delete_flag = '0'
AND T13.status_enum = 1 -- SUCCESS支付成功
LEFT JOIN adm_invoice AS ai
ON ai.reconciliation_id = T13.id AND ai.delete_flag = '0'
WHERE T1.delete_flag = '0'
AND T1.class_enum = 1 -- 门诊AMB
AND T1.create_time::DATE = CURRENT_DATE -- 当日挂号
AND T1.status_enum != 6 -- 排除退号
AND T10.context_enum = 1 -- REGISTER挂号
) AS T9
-- 排除已在队列中的患者关键LEFT JOIN + WHERE IS NULL
LEFT JOIN hisdev.triage_queue_item tqi
ON T9.encounter_id = tqi.encounter_id
AND tqi.delete_flag = '0'
AND tqi.queue_date = CURRENT_DATE
AND tqi.status != 'COMPLETED' -- 排除已完成的状态
-- 排除已在排除列表中的患者新增关键LEFT JOIN + WHERE IS NULL
LEFT JOIN hisdev.triage_candidate_exclusion tce
ON T9.encounter_id = tce.encounter_id
AND tce.delete_flag = '0'
AND tce.exclusion_date = CURRENT_DATE
AND tce.tenant_id = T9.tenant_id -- 按租户过滤
WHERE tqi.id IS NULL -- 关键:只查询不在队列中的患者
AND tce.id IS NULL -- 关键:只查询不在排除列表中的患者
ORDER BY T9.register_time DESC;
-- ============================================
-- 方案二:简化查询(仅核心字段,便于快速测试)
-- ============================================
SELECT
enc.id AS encounterId,
enc.patient_id AS patientId,
pt.name AS patientName,
org.id AS organizationId,
org.name AS organizationName,
hcs.name AS healthcareName,
pr.name AS practitionerName,
enc.create_time AS registerTime
FROM adm_encounter enc
INNER JOIN adm_patient pt ON enc.patient_id = pt.id AND pt.delete_flag = '0'
LEFT JOIN adm_organization org ON enc.organization_id = org.id AND org.delete_flag = '0'
LEFT JOIN adm_healthcare_service hcs ON enc.service_type_id = hcs.id AND hcs.delete_flag = '0'
LEFT JOIN (
SELECT encounter_id, practitioner_id,
ROW_NUMBER() OVER (PARTITION BY encounter_id ORDER BY create_time ASC) AS rn
FROM adm_encounter_participant
WHERE delete_flag = '0' AND type_code IN ('admitter', 'registration_doctor')
) ep ON enc.id = ep.encounter_id AND ep.rn = 1
LEFT JOIN adm_practitioner pr ON ep.practitioner_id = pr.id AND pr.delete_flag = '0'
INNER JOIN adm_charge_item ci ON enc.id = ci.encounter_id AND ci.delete_flag = '0' AND ci.context_enum = 1
INNER JOIN fin_payment_reconciliation prc ON ci.id::TEXT = ANY(string_to_array(prc.charge_item_ids,','))
AND prc.delete_flag = '0' AND prc.status_enum = 1
-- 排除已在队列中的患者
LEFT JOIN hisdev.triage_queue_item tqi
ON enc.id = tqi.encounter_id
AND tqi.delete_flag = '0'
AND tqi.queue_date = CURRENT_DATE
AND tqi.status != 'COMPLETED'
-- 排除已在排除列表中的患者(新增)
LEFT JOIN hisdev.triage_candidate_exclusion tce
ON enc.id = tce.encounter_id
AND tce.delete_flag = '0'
AND tce.exclusion_date = CURRENT_DATE
AND tce.tenant_id = enc.tenant_id
WHERE enc.delete_flag = '0'
AND enc.class_enum = 1
AND enc.create_time::DATE = CURRENT_DATE
AND enc.status_enum != 6
AND tqi.id IS NULL -- 不在队列中
AND tce.id IS NULL -- 不在排除列表中
ORDER BY enc.create_time DESC;
-- ============================================
-- 方案三:使用 NOT EXISTS 子查询(性能可能更好)
-- ============================================
SELECT
enc.id AS encounterId,
enc.patient_id AS patientId,
pt.name AS patientName,
org.id AS organizationId,
org.name AS organizationName,
hcs.name AS healthcareName,
pr.name AS practitionerName,
enc.create_time AS registerTime
FROM adm_encounter enc
INNER JOIN adm_patient pt ON enc.patient_id = pt.id AND pt.delete_flag = '0'
LEFT JOIN adm_organization org ON enc.organization_id = org.id AND org.delete_flag = '0'
LEFT JOIN adm_healthcare_service hcs ON enc.service_type_id = hcs.id AND hcs.delete_flag = '0'
LEFT JOIN (
SELECT encounter_id, practitioner_id,
ROW_NUMBER() OVER (PARTITION BY encounter_id ORDER BY create_time ASC) AS rn
FROM adm_encounter_participant
WHERE delete_flag = '0' AND type_code IN ('admitter', 'registration_doctor')
) ep ON enc.id = ep.encounter_id AND ep.rn = 1
LEFT JOIN adm_practitioner pr ON ep.practitioner_id = pr.id AND pr.delete_flag = '0'
INNER JOIN adm_charge_item ci ON enc.id = ci.encounter_id AND ci.delete_flag = '0' AND ci.context_enum = 1
INNER JOIN fin_payment_reconciliation prc ON ci.id::TEXT = ANY(string_to_array(prc.charge_item_ids,','))
AND prc.delete_flag = '0' AND prc.status_enum = 1
WHERE enc.delete_flag = '0'
AND enc.class_enum = 1
AND enc.create_time::DATE = CURRENT_DATE
AND enc.status_enum != 6
-- 排除已在队列中的患者
AND NOT EXISTS (
SELECT 1
FROM hisdev.triage_queue_item tqi
WHERE tqi.encounter_id = enc.id
AND tqi.delete_flag = '0'
AND tqi.queue_date = CURRENT_DATE
AND tqi.status != 'COMPLETED'
)
-- 排除已在排除列表中的患者(新增)
AND NOT EXISTS (
SELECT 1
FROM hisdev.triage_candidate_exclusion tce
WHERE tce.encounter_id = enc.id
AND tce.delete_flag = '0'
AND tce.exclusion_date = CURRENT_DATE
AND tce.tenant_id = enc.tenant_id
)
ORDER BY enc.create_time DESC;
-- ============================================
-- 查询条件说明
-- ============================================
-- 1. 基础条件:
-- - enc.delete_flag = '0' -- 未删除
-- - enc.class_enum = 1 -- 门诊AMB
-- - ci.context_enum = 1 -- 挂号REGISTER
-- - prc.status_enum = 1 -- 支付成功SUCCESS
--
-- 2. 日期过滤:
-- - enc.create_time::DATE = CURRENT_DATE -- 当日挂号
-- 注意:前端还会基于 registerTime 字段再次过滤今天的数据
--
-- 3. 状态过滤:
-- - enc.status_enum != 6 -- 排除退号(对应前端 statusEnum = -1
--
-- 4. 队列去重:
-- - LEFT JOIN hisdev.triage_queue_item ... WHERE tqi.id IS NULL
-- 或者
-- - NOT EXISTS (SELECT 1 FROM hisdev.triage_queue_item ...)
-- 排除已在队列中且状态不是 COMPLETED 的患者
--
-- 5. 排除列表去重(新增):
-- - LEFT JOIN hisdev.triage_candidate_exclusion ... WHERE tce.id IS NULL
-- 或者
-- - NOT EXISTS (SELECT 1 FROM hisdev.triage_candidate_exclusion ...)
-- 排除已在排除列表中的患者(已加入队列后被记录)
--
-- 6. 租户过滤(如果需要):
-- - enc.tenant_id = ? -- 当前登录用户的租户ID
--
-- 7. 模糊搜索(如果需要):
-- - pt.name LIKE '%关键词%' -- 患者姓名
-- - org.name LIKE '%关键词%' -- 科室名称
-- - pr.name LIKE '%关键词%' -- 医生姓名
-- - hcs.name LIKE '%关键词%' -- 号别名称
-- ============================================
-- 调试查询(检查数据是否正确)
-- ============================================
-- 1. 检查当日已挂号患者总数
SELECT COUNT(*) AS total_registered
FROM adm_encounter enc
INNER JOIN adm_charge_item ci ON enc.id = ci.encounter_id AND ci.delete_flag = '0' AND ci.context_enum = 1
INNER JOIN fin_payment_reconciliation prc ON ci.id::TEXT = ANY(string_to_array(prc.charge_item_ids,','))
AND prc.delete_flag = '0' AND prc.status_enum = 1
WHERE enc.delete_flag = '0'
AND enc.class_enum = 1
AND enc.create_time::DATE = CURRENT_DATE
AND enc.status_enum != 6;
-- 2. 检查已在队列中的患者数量
SELECT COUNT(DISTINCT encounter_id) AS in_queue_count
FROM hisdev.triage_queue_item
WHERE delete_flag = '0'
AND queue_date = CURRENT_DATE
AND status != 'COMPLETED';
-- 3. 检查已在排除列表中的患者数量(新增)
SELECT COUNT(DISTINCT encounter_id) AS in_exclusion_count
FROM hisdev.triage_candidate_exclusion
WHERE delete_flag = '0'
AND exclusion_date = CURRENT_DATE;
-- 4. 检查候选池应该显示的患者数量(已挂号 - 已在队列 - 已在排除列表)
SELECT
(SELECT COUNT(*)
FROM adm_encounter enc
INNER JOIN adm_charge_item ci ON enc.id = ci.encounter_id AND ci.delete_flag = '0' AND ci.context_enum = 1
INNER JOIN fin_payment_reconciliation prc ON ci.id::TEXT = ANY(string_to_array(prc.charge_item_ids,','))
AND prc.delete_flag = '0' AND prc.status_enum = 1
WHERE enc.delete_flag = '0'
AND enc.class_enum = 1
AND enc.create_time::DATE = CURRENT_DATE
AND enc.status_enum != 6)
-
(SELECT COUNT(DISTINCT encounter_id)
FROM hisdev.triage_queue_item
WHERE delete_flag = '0'
AND queue_date = CURRENT_DATE
AND status != 'COMPLETED')
-
(SELECT COUNT(DISTINCT encounter_id)
FROM hisdev.triage_candidate_exclusion
WHERE delete_flag = '0'
AND exclusion_date = CURRENT_DATE)
AS candidate_pool_count;
-- 5. 查看队列中的患者详情(用于对比)
SELECT
tqi.encounter_id,
tqi.patient_name,
tqi.status,
tqi.queue_order
FROM hisdev.triage_queue_item tqi
WHERE tqi.delete_flag = '0'
AND tqi.queue_date = CURRENT_DATE
AND tqi.status != 'COMPLETED'
ORDER BY tqi.queue_order;
-- 6. 查看排除列表中的患者详情(新增)
SELECT
tce.encounter_id,
tce.patient_name,
tce.reason,
tce.create_time
FROM hisdev.triage_candidate_exclusion tce
WHERE tce.delete_flag = '0'
AND tce.exclusion_date = CURRENT_DATE
ORDER BY tce.create_time DESC;
-- 7. 查看重叠的患者(既在队列中,又在排除列表中)
SELECT
tqi.encounter_id,
tqi.patient_name AS queue_patient_name,
tce.patient_name AS exclusion_patient_name,
tqi.status,
tce.reason
FROM hisdev.triage_queue_item tqi
INNER JOIN hisdev.triage_candidate_exclusion tce
ON tqi.encounter_id = tce.encounter_id
AND tqi.queue_date = tce.exclusion_date
AND tqi.tenant_id = tce.tenant_id
WHERE tqi.delete_flag = '0'
AND tce.delete_flag = '0'
AND tqi.queue_date = CURRENT_DATE
ORDER BY tqi.encounter_id;

View File

@@ -1,86 +0,0 @@
-- ============================================
-- 快速检查 pricing_flag = '0' 的数据问题
-- 注意pricing_flag 是 char(1) 类型,所以要用字符串 '0'
-- ============================================
-- 问题1检查是否有费用定价但 pricing_flag = '0' 的项目(可能异常)
SELECT
'异常:有费用定价但不允许划价' AS issue_type,
T1.id,
T1.bus_no,
T1.name AS activity_name,
T1.pricing_flag,
T2.charge_name,
T2.price
FROM wor_activity_definition AS T1
INNER 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
AND T1.pricing_flag = '0' -- 不允许划价,但有费用定价(矛盾)
ORDER BY T1.id;
-- 问题2检查是否已被使用但 pricing_flag = '0' 的项目(可能异常)
SELECT
'异常:已有收费记录但不允许划价' AS issue_type,
T1.id,
T1.bus_no,
T1.name AS activity_name,
T1.pricing_flag,
COUNT(DISTINCT T3.encounter_id) AS encounter_count,
COUNT(T3.id) AS charge_item_count
FROM wor_activity_definition AS T1
INNER JOIN adm_charge_item AS T3
ON T3.product_id = T1.id
AND T3.context_enum = 3 -- ACTIVITY
AND T3.delete_flag = '0'
WHERE T1.delete_flag = '0'
AND T1.pricing_flag = '0'
GROUP BY T1.id, T1.bus_no, T1.name, T1.pricing_flag
ORDER BY charge_item_count DESC;
-- 问题3查看所有 pricing_flag = '0' 的项目,判断哪些可能应该改为 '1'
SELECT
T1.id,
T1.bus_no,
T1.name AS activity_name,
T1.category_code,
T1.pricing_flag,
T1.status_enum,
CASE
WHEN T2.id IS NOT NULL THEN '有费用定价'
ELSE '无费用定价'
END AS has_charge_definition,
CASE
WHEN EXISTS (
SELECT 1 FROM adm_charge_item
WHERE product_id = T1.id
AND context_enum = 3
AND delete_flag = '0'
) THEN '已被使用'
ELSE '未使用'
END AS usage_status,
CASE
WHEN T2.id IS NOT NULL OR EXISTS (
SELECT 1 FROM adm_charge_item
WHERE product_id = T1.id
AND context_enum = 3
AND delete_flag = '0'
) THEN '建议改为 pricing_flag = ''1'''
ELSE '保持 pricing_flag = ''0''(可能正常)'
END AS suggestion
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
AND T1.pricing_flag = '0'
ORDER BY T1.id;

View File

@@ -1,123 +0,0 @@
-- ============================================
-- 将 wor_activity_definition 表中的一两条记录的 pricing_flag 改成 '1'
-- 注意pricing_flag 是 char(1) 类型,所以要用字符串 '1'
-- ============================================
-- 方式1更新前两条 pricing_flag = '0' 的记录(推荐)
UPDATE wor_activity_definition
SET pricing_flag = '1',
update_time = CURRENT_TIMESTAMP
WHERE id IN (
SELECT id
FROM wor_activity_definition
WHERE delete_flag = '0'
AND pricing_flag = '0'
AND status_enum = 1 -- 只更新激活状态的项目
ORDER BY id
LIMIT 2
);
-- 方式2更新指定 ID 的记录(更精确,推荐使用)
-- 请将下面的 ID 替换为实际要更新的记录 ID
UPDATE wor_activity_definition
SET pricing_flag = '1',
update_time = CURRENT_TIMESTAMP
WHERE id IN (1906532604116348929, 1906544768434053121) -- 替换为实际的 ID
AND delete_flag = '0';
-- 方式3更新前两条记录不管当前 pricing_flag 值是什么)
UPDATE wor_activity_definition
SET pricing_flag = '1',
update_time = CURRENT_TIMESTAMP
WHERE id IN (
SELECT id
FROM wor_activity_definition
WHERE delete_flag = '0'
AND status_enum = 1
ORDER BY id
LIMIT 2
);
-- 方式4更新有费用定价但 pricing_flag = '0' 的前两条记录(业务逻辑更合理)
UPDATE wor_activity_definition
SET pricing_flag = '1',
update_time = CURRENT_TIMESTAMP
WHERE id IN (
SELECT wad.id
FROM wor_activity_definition wad
INNER JOIN adm_charge_item_definition acid
ON acid.instance_id = wad.id
AND acid.delete_flag = '0'
AND acid.status_enum = 1
AND acid.instance_table = 'wor_activity_definition'
WHERE wad.delete_flag = '0'
AND wad.status_enum = 1
AND wad.pricing_flag = '0'
ORDER BY wad.id
LIMIT 2
);
-- ============================================
-- 执行前可以先查询要更新的记录(验证用)
-- ============================================
-- 查询前两条 pricing_flag = '0' 的记录
SELECT
id,
bus_no,
name AS activity_name,
pricing_flag,
status_enum,
create_time,
update_time
FROM wor_activity_definition
WHERE delete_flag = '0'
AND pricing_flag = '0'
AND status_enum = 1
ORDER BY id
LIMIT 2;
-- 查询有费用定价但 pricing_flag = '0' 的记录
SELECT
wad.id,
wad.bus_no,
wad.name AS activity_name,
wad.pricing_flag,
acid.charge_name,
acid.price
FROM wor_activity_definition wad
INNER JOIN adm_charge_item_definition acid
ON acid.instance_id = wad.id
AND acid.delete_flag = '0'
AND acid.status_enum = 1
AND acid.instance_table = 'wor_activity_definition'
WHERE wad.delete_flag = '0'
AND wad.status_enum = 1
AND wad.pricing_flag = '0'
ORDER BY wad.id
LIMIT 2;
-- ============================================
-- 执行后验证更新结果
-- ============================================
-- 验证更新是否成功
SELECT
id,
bus_no,
name AS activity_name,
pricing_flag,
update_time
FROM wor_activity_definition
WHERE id IN (
-- 这里放刚才更新的 ID或者用子查询
SELECT id
FROM wor_activity_definition
WHERE delete_flag = '0'
AND pricing_flag = '1'
AND status_enum = 1
ORDER BY update_time DESC
LIMIT 2
);

File diff suppressed because one or more lines are too long

View File

@@ -1,16 +0,0 @@
-- 为 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 '诊断日期';

View File

@@ -1,33 +0,0 @@
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

@@ -1,11 +0,0 @@
-- 添加新字段到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

@@ -1,90 +0,0 @@
-- 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;

View File

@@ -1,240 +0,0 @@
-- ============================================================
-- 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

@@ -1,254 +0,0 @@
-- ========================================================
-- 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;
-- ========================================================
-- 完成!
-- ========================================================

View File

@@ -1,17 +0,0 @@
-- 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;

View File

@@ -1,159 +0,0 @@
-- 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

@@ -1,5 +0,0 @@
-- 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

@@ -1,15 +0,0 @@
-- 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(), '其他标本');

View File

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

View File

@@ -1,10 +0,0 @@
-- 检查手术表中所有字段是否存在
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

@@ -1,67 +0,0 @@
-- 创建序列
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

@@ -1,62 +0,0 @@
-- =============================================
-- 创建 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

@@ -1,86 +0,0 @@
-- 创建 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

@@ -1,82 +0,0 @@
-- 修复已存在的手术记录中缺失的名称字段
-- 注意:这只是一个示例,实际执行前请根据您的数据库表结构调整
-- 填充患者姓名
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';

View File

@@ -1,85 +0,0 @@
-- 数据库审计字段修复脚本
-- 用于确保所有表都能正确处理 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

@@ -1,148 +0,0 @@
-- 修复脚本完成手术室类型和所属科室字段的添加版本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 '脚本执行完成!请查看上述验证结果确认所有操作均已成功执行。';

View File

@@ -1,116 +0,0 @@
-- 查询挂号记录表主键的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

@@ -1,224 +0,0 @@
-- ============================================
-- 查询今日门诊患者数据(用于调试分诊排队页面)
-- 简化版:直接查询,不考虑登录和租户
-- ============================================
-- 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

@@ -1,35 +0,0 @@
-- 移除 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

@@ -1,58 +0,0 @@
-- 安全移除 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 值

View File

@@ -1,161 +0,0 @@
# 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

@@ -1,56 +0,0 @@
-- 验证手术表中所有名称字段的填充情况
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

@@ -1,18 +0,0 @@
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

@@ -1,13 +0,0 @@
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

@@ -1,25 +0,0 @@
-- 检查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

@@ -1,113 +0,0 @@
-- 检查和填充手术表中的人员字段
-- 执行时间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;

View File

@@ -1,58 +0,0 @@
-- 测试手术表的插入,验证 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

@@ -1,16 +0,0 @@
-- 创建 __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

@@ -1,20 +0,0 @@
--使使
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

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

View File

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

View File

@@ -1,8 +0,0 @@
-- 添加公告/通知优先级字段
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

@@ -1,8 +0,0 @@
-- 添加公告/通知发布状态字段
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

@@ -1,26 +0,0 @@
-- 公告/通知已读记录表
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

@@ -1,6 +0,0 @@
-- 为 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

@@ -1,12 +0,0 @@
-- 更新 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

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

View File

@@ -1,30 +0,0 @@
-- 为手术表添加申请医生名称和申请科室名称字段
-- 执行时间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

@@ -1,163 +0,0 @@
-- ============================================
-- 科室预约工作时间维护表结构
-- 创建日期: 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

@@ -1,667 +0,0 @@
-- ============================================
-- 科室预约工作时间维护 - 字段修改及测试数据
-- 生成日期: 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

@@ -1,72 +0,0 @@
-- 创建序列
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

@@ -1,106 +0,0 @@
-- 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

@@ -1,87 +0,0 @@
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

@@ -1,34 +0,0 @@
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

@@ -1,124 +0,0 @@
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

@@ -1,130 +0,0 @@
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

@@ -1,98 +0,0 @@
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

@@ -1,27 +0,0 @@
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

@@ -1,26 +0,0 @@
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

@@ -1,16 +0,0 @@
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

@@ -1,9 +0,0 @@
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

@@ -1,9 +0,0 @@
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

@@ -1,39 +0,0 @@
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

@@ -1,25 +0,0 @@
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

@@ -1,7 +0,0 @@
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

@@ -1,6 +0,0 @@
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

@@ -1,20 +0,0 @@
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

@@ -1,9 +0,0 @@
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

@@ -1,8 +0,0 @@
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

@@ -1,6 +0,0 @@
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

@@ -1,11 +0,0 @@
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

@@ -1,64 +0,0 @@
-- 创建序列
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

@@ -1,92 +0,0 @@
-- 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

@@ -1,63 +0,0 @@
-- 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

@@ -1,11 +0,0 @@
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

@@ -1,11 +0,0 @@
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

@@ -1,13 +0,0 @@
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

@@ -1,7 +0,0 @@
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

@@ -1,93 +0,0 @@
-- 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

@@ -1,8 +0,0 @@
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

@@ -1,76 +0,0 @@
-- 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

@@ -1,53 +0,0 @@
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

@@ -1,8 +0,0 @@
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

@@ -1,8 +0,0 @@
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

@@ -1,7 +0,0 @@
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

@@ -1,70 +0,0 @@
-- 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

@@ -1,64 +0,0 @@
-- 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

@@ -1,107 +0,0 @@
-- 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

@@ -1,62 +0,0 @@
-- 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');

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