refactor(health): 按文档规范重构用药管理模块
【重大重构】完全按照功能规划文档重写 ## 表结构变更 - medication_plan: 用药计划表(按文档设计) - medication_task: 服药任务表(按文档设计) - medication_remind_log: 提醒日志表 - medicine_stock_log: 库存变动表 - medication_adherence_stats: 统计汇总表 ## 字段变更 - frequency_config: JSONB 频次配置 - time_slots: JSONB 时段配置 - family_member_ids: JSONB 家属通知 - status: 状态值按文档规范(0-待服药 1-已服药 2-漏服 3-跳过) ## 新增组件 - JsonNodeTypeHandler: PostgreSQL JSONB 类型处理器 ## SQL 脚本 - medication_module_pg.sql: 建表语句(PostgreSQL) - medication_menu_pg.sql: 菜单权限配置 - medication_job_pg.sql: 定时任务配置
This commit is contained in:
@@ -1,53 +0,0 @@
|
||||
-- ========================================
|
||||
-- 依从性统计功能 - SQL脚本
|
||||
-- ========================================
|
||||
|
||||
-- 用药统计菜单
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
VALUES (
|
||||
nextval('seq_sys_menu'),
|
||||
'用药统计',
|
||||
(SELECT menu_id FROM sys_menu WHERE menu_name = '健康管理' LIMIT 1),
|
||||
12,
|
||||
'medicationStatistic',
|
||||
'health/medicationStatistic/index',
|
||||
NULL,
|
||||
1,
|
||||
0,
|
||||
'C',
|
||||
'0',
|
||||
'0',
|
||||
'health:medicationStatistic:query',
|
||||
'chart',
|
||||
'admin',
|
||||
NOW(),
|
||||
'用药统计菜单'
|
||||
);
|
||||
|
||||
-- 用药统计按钮权限
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
SELECT nextval('seq_sys_menu'), '用药统计查询', m.menu_id, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'health:medicationStatistic:query', '#', 'admin', NOW(), '' FROM sys_menu m WHERE m.perms = 'health:medicationStatistic:query';
|
||||
|
||||
-- ========================================
|
||||
-- 添加依从性统计汇总表(可选,用于预计算性能优化)
|
||||
-- ========================================
|
||||
DROP TABLE IF EXISTS health_medication_adherence_stats;
|
||||
CREATE TABLE health_medication_adherence_stats (
|
||||
id BIGINT NOT NULL,
|
||||
person_id BIGINT NOT NULL,
|
||||
plan_id BIGINT NULL,
|
||||
stat_date DATE NOT NULL,
|
||||
total_tasks INT DEFAULT 0,
|
||||
completed_tasks INT DEFAULT 0,
|
||||
missed_tasks INT DEFAULT 0,
|
||||
skipped_tasks INT DEFAULT 0,
|
||||
ontime_tasks INT DEFAULT 0,
|
||||
adherence_rate DECIMAL(5,2) DEFAULT 0.00,
|
||||
ontime_rate DECIMAL(5,2) DEFAULT 0.00,
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
update_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=InnoDB COMMENT='依从性统计汇总表';
|
||||
|
||||
CREATE UNIQUE INDEX idx_hmas_person_date ON health_medication_adherence_stats(person_id, stat_date, plan_id);
|
||||
CREATE INDEX idx_hmas_stat_date ON health_medication_adherence_stats(stat_date);
|
||||
@@ -1,90 +0,0 @@
|
||||
-- ========================================
|
||||
-- 用药任务定时任务配置
|
||||
-- 在 sys_job 表中插入定时任务
|
||||
-- ========================================
|
||||
|
||||
-- 1. 每日生成服药任务(每日 00:05 执行)
|
||||
INSERT INTO sys_job (job_id, job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark)
|
||||
VALUES (
|
||||
nextval('seq_sys_job'),
|
||||
'每日生成服药任务',
|
||||
'DEFAULT',
|
||||
'medicationTaskJob.generateDailyTasks',
|
||||
'0 5 0 * * ?',
|
||||
'2',
|
||||
'1',
|
||||
'0',
|
||||
'admin',
|
||||
NOW(),
|
||||
'每日凌晨00:05自动生成当天的服药任务'
|
||||
);
|
||||
|
||||
-- 2. 扫描并发送服药提醒(每分钟执行)
|
||||
INSERT INTO sys_job (job_id, job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark)
|
||||
VALUES (
|
||||
nextval('seq_sys_job'),
|
||||
'扫描服药提醒',
|
||||
'DEFAULT',
|
||||
'medicationRemindJob.scanAndSendReminders',
|
||||
'0 * * * * ?',
|
||||
'2',
|
||||
'1',
|
||||
'0',
|
||||
'admin',
|
||||
NOW(),
|
||||
'每分钟扫描待提醒的服药任务并发送提醒'
|
||||
);
|
||||
|
||||
-- 3. 扫描超时未服药记录(每5分钟执行)
|
||||
INSERT INTO sys_job (job_id, job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark)
|
||||
VALUES (
|
||||
nextval('seq_sys_job'),
|
||||
'扫描超时未服药',
|
||||
'DEFAULT',
|
||||
'medicationRemindJob.scanOverdueRecords',
|
||||
'0 */5 * * * ?',
|
||||
'2',
|
||||
'1',
|
||||
'0',
|
||||
'admin',
|
||||
NOW(),
|
||||
'每5分钟扫描超时未服药的记录并发送提醒'
|
||||
);
|
||||
|
||||
-- 4. 标记过期服药记录(每小时执行)
|
||||
INSERT INTO sys_job (job_id, job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark)
|
||||
VALUES (
|
||||
nextval('seq_sys_job'),
|
||||
'标记过期服药记录',
|
||||
'DEFAULT',
|
||||
'medicationTaskJob.markExpiredRecords',
|
||||
'0 0 * * * ?',
|
||||
'2',
|
||||
'1',
|
||||
'0',
|
||||
'admin',
|
||||
NOW(),
|
||||
'每小时检查并标记过期的服药记录'
|
||||
);
|
||||
|
||||
-- ========================================
|
||||
-- 提醒日志表(可选,用于记录提醒历史)
|
||||
-- ========================================
|
||||
DROP TABLE IF EXISTS health_medication_remind_log;
|
||||
CREATE TABLE health_medication_remind_log (
|
||||
id BIGINT NOT NULL,
|
||||
record_id BIGINT NOT NULL,
|
||||
plan_id BIGINT NOT NULL,
|
||||
person_id BIGINT NOT NULL,
|
||||
remind_type CHAR(1) DEFAULT '1' COMMENT '提醒类型:1-按时提醒 2-超时提醒 3-漏服通知家属',
|
||||
remind_time DATETIME NOT NULL,
|
||||
remind_channel VARCHAR(20) DEFAULT 'app' COMMENT '提醒渠道:app/sms/wechat',
|
||||
remind_result CHAR(1) DEFAULT '1' COMMENT '结果:1-成功 2-失败',
|
||||
error_msg VARCHAR(500) NULL,
|
||||
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=InnoDB COMMENT='用药提醒日志表';
|
||||
|
||||
CREATE INDEX idx_rmrl_record_id ON health_medication_remind_log(record_id);
|
||||
CREATE INDEX idx_rmrl_person_id ON health_medication_remind_log(person_id);
|
||||
CREATE INDEX idx_rmrl_remind_time ON health_medication_remind_log(remind_time);
|
||||
@@ -1,105 +0,0 @@
|
||||
-- ========================================
|
||||
-- 慢性疾病档案表
|
||||
-- ========================================
|
||||
DROP TABLE IF EXISTS chronic_disease_record;
|
||||
CREATE TABLE chronic_disease_record (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
member_id BIGINT NOT NULL,
|
||||
disease_id BIGINT,
|
||||
disease_name VARCHAR(100) NOT NULL,
|
||||
disease_code VARCHAR(20),
|
||||
diagnosis_date DATE,
|
||||
disease_status SMALLINT NOT NULL DEFAULT 1,
|
||||
main_doctor VARCHAR(50),
|
||||
hospital VARCHAR(100),
|
||||
department VARCHAR(50),
|
||||
notes TEXT,
|
||||
is_active SMALLINT DEFAULT 1,
|
||||
-- 若依标准字段
|
||||
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) DEFAULT '',
|
||||
del_flag SMALLINT DEFAULT 0
|
||||
);
|
||||
|
||||
COMMENT ON TABLE chronic_disease_record IS '慢性疾病档案表';
|
||||
COMMENT ON COLUMN chronic_disease_record.id IS '主键ID';
|
||||
COMMENT ON COLUMN chronic_disease_record.member_id IS '关联成员ID';
|
||||
COMMENT ON COLUMN chronic_disease_record.disease_id IS '关联疾病ID(关联health_diseases表)';
|
||||
COMMENT ON COLUMN chronic_disease_record.disease_name IS '疾病名称(高血压/糖尿病/冠心病等)';
|
||||
COMMENT ON COLUMN chronic_disease_record.disease_code IS '疾病编码(ICD-10标准)';
|
||||
COMMENT ON COLUMN chronic_disease_record.diagnosis_date IS '确诊日期';
|
||||
COMMENT ON COLUMN chronic_disease_record.disease_status IS '状态:1-稳定 2-需关注 3-急性期';
|
||||
COMMENT ON COLUMN chronic_disease_record.main_doctor IS '主治医生';
|
||||
COMMENT ON COLUMN chronic_disease_record.hospital IS '就诊医院';
|
||||
COMMENT ON COLUMN chronic_disease_record.department IS '科室';
|
||||
COMMENT ON COLUMN chronic_disease_record.notes IS '备注说明';
|
||||
COMMENT ON COLUMN chronic_disease_record.is_active IS '是否启用:1-是 0-否';
|
||||
COMMENT ON COLUMN chronic_disease_record.create_by IS '创建者';
|
||||
COMMENT ON COLUMN chronic_disease_record.create_time IS '创建时间';
|
||||
COMMENT ON COLUMN chronic_disease_record.update_by IS '更新者';
|
||||
COMMENT ON COLUMN chronic_disease_record.update_time IS '更新时间';
|
||||
COMMENT ON COLUMN chronic_disease_record.remark IS '备注';
|
||||
COMMENT ON COLUMN chronic_disease_record.del_flag IS '删除标记:0-正常 1-删除';
|
||||
|
||||
CREATE INDEX idx_cdr_member_id ON chronic_disease_record(member_id);
|
||||
CREATE INDEX idx_cdr_disease_id ON chronic_disease_record(disease_id);
|
||||
CREATE INDEX idx_cdr_disease_status ON chronic_disease_record(disease_status);
|
||||
CREATE INDEX idx_cdr_is_active ON chronic_disease_record(is_active);
|
||||
|
||||
-- ========================================
|
||||
-- 菜单 SQL(若依框架标准格式)
|
||||
-- ========================================
|
||||
-- 慢性疾病档案菜单
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
VALUES ('慢性疾病档案', 0, 5, 'chronicDisease', 'health/chronicDisease/index', 1, 0, 'C', '0', '0', 'health:chronicDisease:list', '#', 'admin', NOW(), '慢性疾病档案菜单');
|
||||
|
||||
-- 获取刚插入的菜单ID
|
||||
SELECT @parentId := LAST_INSERT_ID();
|
||||
|
||||
-- 按钮权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
VALUES ('慢性疾病档案查询', @parentId, 1, '#', '', 1, 0, 'F', '0', '0', 'health:chronicDisease:query', '#', 'admin', NOW(), '');
|
||||
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
VALUES ('慢性疾病档案权增', @parentId, 2, '#', '', 1, 0, 'F', '0', '0', 'health:chronicDisease:add', '#', 'admin', NOW(), '');
|
||||
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
VALUES ('慢性疾病档案修改', @parentId, 3, '#', '', 1, 0, 'F', '0', '0', 'health:chronicDisease:edit', '#', 'admin', NOW(), '');
|
||||
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
VALUES ('慢性疾病档案删除', @parentId, 4, '#', '', 1, 0, 'F', '0', '0', 'health:chronicDisease:remove', '#', 'admin', NOW(), '');
|
||||
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
VALUES ('慢性疾病档案导出', @parentId, 5, '#', '', 1, 0, 'F', '0', '0', 'health:chronicDisease:export', '#', 'admin', NOW(), '');
|
||||
|
||||
-- ========================================
|
||||
-- 字典数据
|
||||
-- ========================================
|
||||
-- 疾病状态字典
|
||||
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark)
|
||||
VALUES ('疾病状态', 'disease_status', '0', 'admin', NOW(), '慢性疾病状态');
|
||||
|
||||
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
|
||||
VALUES (1, '稳定', '1', 'disease_status', '', 'success', 'Y', '0', 'admin', NOW(), '疾病状态-稳定');
|
||||
|
||||
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
|
||||
VALUES (2, '需关注', '2', 'disease_status', '', 'warning', 'N', '0', 'admin', NOW(), '疾病状态-需关注');
|
||||
|
||||
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
|
||||
VALUES (3, '急性期', '3', 'disease_status', '', 'danger', 'N', '0', 'admin', NOW(), '疾病状态-急性期');
|
||||
|
||||
-- 是否启用字典(如果不存在)
|
||||
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark)
|
||||
VALUES ('是否启用', 'is_active', '0', 'admin', NOW(), '是否启用状态')
|
||||
ON CONFLICT (dict_type) DO NOTHING;
|
||||
|
||||
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
|
||||
VALUES (1, '是', '1', 'is_active', '', 'success', 'Y', '0', 'admin', NOW(), '启用')
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
|
||||
VALUES (2, '否', '0', 'is_active', '', 'danger', 'N', '0', 'admin', NOW(), '停用')
|
||||
ON CONFLICT DO NOTHING;
|
||||
@@ -1,128 +0,0 @@
|
||||
-- ----------------------------
|
||||
-- 用药计划表
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS health_medication_plan;
|
||||
CREATE TABLE health_medication_plan (
|
||||
id BIGINT NOT NULL,
|
||||
person_id BIGINT NOT NULL,
|
||||
medicine_id BIGINT NOT NULL,
|
||||
stock_in_id BIGINT NULL,
|
||||
plan_name VARCHAR(200) NULL,
|
||||
dosage DECIMAL(10,2) NOT NULL,
|
||||
dosage_unit VARCHAR(20) NULL,
|
||||
frequency INT NOT NULL,
|
||||
frequency_type CHAR(1) DEFAULT '1',
|
||||
time_points VARCHAR(500) NULL,
|
||||
week_days VARCHAR(50) NULL,
|
||||
start_date DATE NOT NULL,
|
||||
end_date DATE NULL,
|
||||
reminder_enabled CHAR(1) DEFAULT '0',
|
||||
reminder_minutes INT DEFAULT 15,
|
||||
status CHAR(1) DEFAULT '1',
|
||||
del_flag CHAR(1) DEFAULT '0',
|
||||
create_by VARCHAR(64) DEFAULT '',
|
||||
create_time DATETIME NULL,
|
||||
update_by VARCHAR(64) DEFAULT '',
|
||||
update_time DATETIME NULL,
|
||||
remark VARCHAR(500) NULL,
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=InnoDB COMMENT='用药计划表';
|
||||
|
||||
CREATE INDEX idx_person_id ON health_medication_plan(person_id);
|
||||
CREATE INDEX idx_medicine_id ON health_medication_plan(medicine_id);
|
||||
CREATE INDEX idx_status ON health_medication_plan(status);
|
||||
CREATE INDEX idx_start_date ON health_medication_plan(start_date);
|
||||
|
||||
-- ----------------------------
|
||||
-- 用药记录表
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS health_medication_record;
|
||||
CREATE TABLE health_medication_record (
|
||||
id BIGINT NOT NULL,
|
||||
plan_id BIGINT NOT NULL,
|
||||
person_id BIGINT NOT NULL,
|
||||
medicine_id BIGINT NOT NULL,
|
||||
scheduled_time DATETIME NOT NULL,
|
||||
actual_time DATETIME NULL,
|
||||
dosage DECIMAL(10,2) NULL,
|
||||
dosage_unit VARCHAR(20) NULL,
|
||||
status CHAR(1) DEFAULT '1',
|
||||
del_flag CHAR(1) DEFAULT '0',
|
||||
create_by VARCHAR(64) DEFAULT '',
|
||||
create_time DATETIME NULL,
|
||||
update_by VARCHAR(64) DEFAULT '',
|
||||
update_time DATETIME NULL,
|
||||
remark VARCHAR(500) NULL,
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=InnoDB COMMENT='用药记录表';
|
||||
|
||||
CREATE INDEX idx_plan_id ON health_medication_record(plan_id);
|
||||
CREATE INDEX idx_person_id ON health_medication_record(person_id);
|
||||
CREATE INDEX idx_scheduled_time ON health_medication_record(scheduled_time);
|
||||
CREATE INDEX idx_status ON health_medication_record(status);
|
||||
|
||||
-- ----------------------------
|
||||
-- 字典数据
|
||||
-- ----------------------------
|
||||
INSERT INTO sys_dict_type (dict_id, dict_name, dict_type, status, create_by, create_time, remark)
|
||||
VALUES
|
||||
(nextval('seq_sys_dict_type'), '用药频率类型', 'medication_frequency_type', '0', 'admin', NOW(), '用药频率类型字典'),
|
||||
(nextval('seq_sys_dict_type'), '用药计划状态', 'medication_plan_status', '0', 'admin', NOW(), '用药计划状态字典'),
|
||||
(nextval('seq_sys_dict_type'), '用药记录状态', 'medication_record_status', '0', 'admin', NOW(), '用药记录状态字典');
|
||||
|
||||
INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
|
||||
VALUES
|
||||
(nextval('seq_sys_dict_data'), 1, '每日', '1', 'medication_frequency_type', '', 'primary', 'Y', '0', 'admin', NOW(), NULL),
|
||||
(nextval('seq_sys_dict_data'), 2, '隔日', '2', 'medication_frequency_type', '', 'success', 'N', '0', 'admin', NOW(), NULL),
|
||||
(nextval('seq_sys_dict_data'), 3, '每周', '3', 'medication_frequency_type', '', 'info', 'N', '0', 'admin', NOW(), NULL),
|
||||
(nextval('seq_sys_dict_data'), 4, '自定义', '4', 'medication_frequency_type', '', 'warning', 'N', '0', 'admin', NOW(), NULL);
|
||||
|
||||
INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
|
||||
VALUES
|
||||
(nextval('seq_sys_dict_data'), 1, '进行中', '1', 'medication_plan_status', '', 'primary', 'Y', '0', 'admin', NOW(), NULL),
|
||||
(nextval('seq_sys_dict_data'), 2, '已结束', '2', 'medication_plan_status', '', 'info', 'N', '0', 'admin', NOW(), NULL),
|
||||
(nextval('seq_sys_dict_data'), 3, '已暂停', '3', 'medication_plan_status', '', 'warning', 'N', '0', 'admin', NOW(), NULL);
|
||||
|
||||
INSERT INTO sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
|
||||
VALUES
|
||||
(nextval('seq_sys_dict_data'), 1, '待服用', '1', 'medication_record_status', '', 'warning', 'Y', '0', 'admin', NOW(), NULL),
|
||||
(nextval('seq_sys_dict_data'), 2, '已服用', '2', 'medication_record_status', '', 'success', 'N', '0', 'admin', NOW(), NULL),
|
||||
(nextval('seq_sys_dict_data'), 3, '已跳过', '3', 'medication_record_status', '', 'info', 'N', '0', 'admin', NOW(), NULL),
|
||||
(nextval('seq_sys_dict_data'), 4, '已过期', '4', 'medication_record_status', '', 'danger', 'N', '0', 'admin', NOW(), NULL);
|
||||
|
||||
-- ----------------------------
|
||||
-- 菜单权限
|
||||
-- ----------------------------
|
||||
-- 用药计划菜单
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
VALUES
|
||||
(nextval('seq_sys_menu'), '用药计划', (SELECT menu_id FROM sys_menu WHERE menu_name = '健康管理' LIMIT 1), 10, 'medicationPlan', 'health/medicationPlan/index', NULL, 1, 0, 'C', '0', '0', 'health:medicationPlan:list', 'calendar', 'admin', NOW(), '用药计划菜单');
|
||||
|
||||
-- 用药计划按钮权限
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
SELECT nextval('seq_sys_menu'), '用药计划查询', m.menu_id, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'health:medicationPlan:query', '#', 'admin', NOW(), '' FROM sys_menu m WHERE m.perms = 'health:medicationPlan:list'
|
||||
UNION ALL
|
||||
SELECT nextval('seq_sys_menu'), '用药计划新增', m.menu_id, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'health:medicationPlan:add', '#', 'admin', NOW(), '' FROM sys_menu m WHERE m.perms = 'health:medicationPlan:list'
|
||||
UNION ALL
|
||||
SELECT nextval('seq_sys_menu'), '用药计划修改', m.menu_id, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'health:medicationPlan:edit', '#', 'admin', NOW(), '' FROM sys_menu m WHERE m.perms = 'health:medicationPlan:list'
|
||||
UNION ALL
|
||||
SELECT nextval('seq_sys_menu'), '用药计划删除', m.menu_id, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'health:medicationPlan:remove', '#', 'admin', NOW(), '' FROM sys_menu m WHERE m.perms = 'health:medicationPlan:list'
|
||||
UNION ALL
|
||||
SELECT nextval('seq_sys_menu'), '用药计划导出', m.menu_id, 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'health:medicationPlan:export', '#', 'admin', NOW(), '' FROM sys_menu m WHERE m.perms = 'health:medicationPlan:list';
|
||||
|
||||
-- 用药记录菜单
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
VALUES
|
||||
(nextval('seq_sys_menu'), '用药记录', (SELECT menu_id FROM sys_menu WHERE menu_name = '健康管理' LIMIT 1), 11, 'medicationRecord', 'health/medicationRecord/index', NULL, 1, 0, 'C', '0', '0', 'health:medicationRecord:list', 'log', 'admin', NOW(), '用药记录菜单');
|
||||
|
||||
-- 用药记录按钮权限
|
||||
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
SELECT nextval('seq_sys_menu'), '用药记录查询', m.menu_id, 1, '', NULL, NULL, 1, 0, 'F', '0', '0', 'health:medicationRecord:query', '#', 'admin', NOW(), '' FROM sys_menu m WHERE m.perms = 'health:medicationRecord:list'
|
||||
UNION ALL
|
||||
SELECT nextval('seq_sys_menu'), '用药记录新增', m.menu_id, 2, '', NULL, NULL, 1, 0, 'F', '0', '0', 'health:medicationRecord:add', '#', 'admin', NOW(), '' FROM sys_menu m WHERE m.perms = 'health:medicationRecord:list'
|
||||
UNION ALL
|
||||
SELECT nextval('seq_sys_menu'), '用药记录修改', m.menu_id, 3, '', NULL, NULL, 1, 0, 'F', '0', '0', 'health:medicationRecord:edit', '#', 'admin', NOW(), '' FROM sys_menu m WHERE m.perms = 'health:medicationRecord:list'
|
||||
UNION ALL
|
||||
SELECT nextval('seq_sys_menu'), '用药记录删除', m.menu_id, 4, '', NULL, NULL, 1, 0, 'F', '0', '0', 'health:medicationRecord:remove', '#', 'admin', NOW(), '' FROM sys_menu m WHERE m.perms = 'health:medicationRecord:list'
|
||||
UNION ALL
|
||||
SELECT nextval('seq_sys_menu'), '用药记录导出', m.menu_id, 5, '', NULL, NULL, 1, 0, 'F', '0', '0', 'health:medicationRecord:export', '#', 'admin', NOW(), '' FROM sys_menu m WHERE m.perms = 'health:medicationRecord:list';
|
||||
64
sql/medication_job_pg.sql
Normal file
64
sql/medication_job_pg.sql
Normal file
@@ -0,0 +1,64 @@
|
||||
-- ========================================
|
||||
-- 用药管理模块 - 定时任务配置
|
||||
-- PostgreSQL 版本
|
||||
-- ========================================
|
||||
|
||||
-- 1. 每日生成服药任务(每日 00:05 执行)
|
||||
INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark)
|
||||
VALUES (
|
||||
'每日生成服药任务',
|
||||
'DEFAULT',
|
||||
'medicationTaskJob.generateDailyTasks',
|
||||
'0 5 0 * * ?',
|
||||
'2',
|
||||
'1',
|
||||
'0',
|
||||
'admin',
|
||||
NOW(),
|
||||
'每日凌晨00:05自动生成当天的服药任务'
|
||||
);
|
||||
|
||||
-- 2. 扫描并发送服药提醒(每分钟执行)
|
||||
INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark)
|
||||
VALUES (
|
||||
'扫描服药提醒',
|
||||
'DEFAULT',
|
||||
'medicationRemindJob.scanAndSendReminders',
|
||||
'0 * * * * ?',
|
||||
'2',
|
||||
'1',
|
||||
'0',
|
||||
'admin',
|
||||
NOW(),
|
||||
'每分钟扫描待提醒的服药任务并发送提醒'
|
||||
);
|
||||
|
||||
-- 3. 扫描超时未服药记录(每5分钟执行)
|
||||
INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark)
|
||||
VALUES (
|
||||
'扫描超时未服药',
|
||||
'DEFAULT',
|
||||
'medicationRemindJob.scanOverdueRecords',
|
||||
'0 */5 * * * ?',
|
||||
'2',
|
||||
'1',
|
||||
'0',
|
||||
'admin',
|
||||
NOW(),
|
||||
'每5分钟扫描超时未服药的记录并发送提醒'
|
||||
);
|
||||
|
||||
-- 4. 标记过期服药记录(每小时执行)
|
||||
INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark)
|
||||
VALUES (
|
||||
'标记过期服药记录',
|
||||
'DEFAULT',
|
||||
'medicationTaskJob.markExpiredRecords',
|
||||
'0 0 * * * ?',
|
||||
'2',
|
||||
'1',
|
||||
'0',
|
||||
'admin',
|
||||
NOW(),
|
||||
'每小时检查并标记过期的服药记录'
|
||||
);
|
||||
106
sql/medication_menu_pg.sql
Normal file
106
sql/medication_menu_pg.sql
Normal file
@@ -0,0 +1,106 @@
|
||||
-- ========================================
|
||||
-- 用药管理模块 - 菜单权限配置
|
||||
-- PostgreSQL 版本
|
||||
-- ========================================
|
||||
|
||||
-- 用药计划菜单
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
SELECT '用药计划', menu_id, 10, 'medicationPlan', 'health/medicationPlan/index', 1, 0, 'C', '0', '0', 'health:medicationPlan:list', 'calendar', 'admin', NOW(), '用药计划菜单'
|
||||
FROM sys_menu WHERE menu_name = '健康管理' LIMIT 1;
|
||||
|
||||
-- 用药计划按钮权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
SELECT '用药计划查询', m.menu_id, 1, '', NULL, 1, 0, 'F', '0', '0', 'health:medicationPlan:query', '#', 'admin', NOW(), ''
|
||||
FROM sys_menu m WHERE m.perms = 'health:medicationPlan:list'
|
||||
UNION ALL
|
||||
SELECT '用药计划新增', m.menu_id, 2, '', NULL, 1, 0, 'F', '0', '0', 'health:medicationPlan:add', '#', 'admin', NOW(), ''
|
||||
FROM sys_menu m WHERE m.perms = 'health:medicationPlan:list'
|
||||
UNION ALL
|
||||
SELECT '用药计划修改', m.menu_id, 3, '', NULL, 1, 0, 'F', '0', '0', 'health:medicationPlan:edit', '#', 'admin', NOW(), ''
|
||||
FROM sys_menu m WHERE m.perms = 'health:medicationPlan:list'
|
||||
UNION ALL
|
||||
SELECT '用药计划删除', m.menu_id, 4, '', NULL, 1, 0, 'F', '0', '0', 'health:medicationPlan:remove', '#', 'admin', NOW(), ''
|
||||
FROM sys_menu m WHERE m.perms = 'health:medicationPlan:list';
|
||||
|
||||
-- 用药任务菜单
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
SELECT '用药任务', menu_id, 11, 'medicationTask', 'health/medicationTask/index', 1, 0, 'C', '0', '0', 'health:medicationTask:list', 'log', 'admin', NOW(), '用药任务菜单'
|
||||
FROM sys_menu WHERE menu_name = '健康管理' LIMIT 1;
|
||||
|
||||
-- 用药任务按钮权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
SELECT '用药任务查询', m.menu_id, 1, '', NULL, 1, 0, 'F', '0', '0', 'health:medicationTask:query', '#', 'admin', NOW(), ''
|
||||
FROM sys_menu m WHERE m.perms = 'health:medicationTask:list'
|
||||
UNION ALL
|
||||
SELECT '用药任务修改', m.menu_id, 2, '', NULL, 1, 0, 'F', '0', '0', 'health:medicationTask:edit', '#', 'admin', NOW(), ''
|
||||
FROM sys_menu m WHERE m.perms = 'health:medicationTask:list'
|
||||
UNION ALL
|
||||
SELECT '用药任务删除', m.menu_id, 3, '', NULL, 1, 0, 'F', '0', '0', 'health:medicationTask:remove', '#', 'admin', NOW(), ''
|
||||
FROM sys_menu m WHERE m.perms = 'health:medicationTask:list';
|
||||
|
||||
-- 用药统计菜单
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
SELECT '用药统计', menu_id, 12, 'medicationStatistic', 'health/medicationStatistic/index', 1, 0, 'C', '0', '0', 'health:medicationStatistic:query', 'chart', 'admin', NOW(), '用药统计菜单'
|
||||
FROM sys_menu WHERE menu_name = '健康管理' LIMIT 1;
|
||||
|
||||
-- 慢性疾病档案菜单
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
SELECT '慢性疾病档案', menu_id, 9, 'chronicDisease', 'health/chronicDisease/index', 1, 0, 'C', '0', '0', 'health:chronicDisease:list', 'folder', 'admin', NOW(), '慢性疾病档案菜单'
|
||||
FROM sys_menu WHERE menu_name = '健康管理' LIMIT 1;
|
||||
|
||||
-- 慢性疾病档案按钮权限
|
||||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
SELECT '慢性疾病档案查询', m.menu_id, 1, '', NULL, 1, 0, 'F', '0', '0', 'health:chronicDisease:query', '#', 'admin', NOW(), ''
|
||||
FROM sys_menu m WHERE m.perms = 'health:chronicDisease:list'
|
||||
UNION ALL
|
||||
SELECT '慢性疾病档案新增', m.menu_id, 2, '', NULL, 1, 0, 'F', '0', '0', 'health:chronicDisease:add', '#', 'admin', NOW(), ''
|
||||
FROM sys_menu m WHERE m.perms = 'health:chronicDisease:list'
|
||||
UNION ALL
|
||||
SELECT '慢性疾病档案修改', m.menu_id, 3, '', NULL, 1, 0, 'F', '0', '0', 'health:chronicDisease:edit', '#', 'admin', NOW(), ''
|
||||
FROM sys_menu m WHERE m.perms = 'health:chronicDisease:list'
|
||||
UNION ALL
|
||||
SELECT '慢性疾病档案删除', m.menu_id, 4, '', NULL, 1, 0, 'F', '0', '0', 'health:chronicDisease:remove', '#', 'admin', NOW(), ''
|
||||
FROM sys_menu m WHERE m.perms = 'health:chronicDisease:list';
|
||||
|
||||
-- ========================================
|
||||
-- 字典类型
|
||||
-- ========================================
|
||||
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark)
|
||||
VALUES
|
||||
('用药频率类型', 'medication_frequency_type', '0', 'admin', NOW(), '用药频率类型字典'),
|
||||
('用药计划状态', 'medication_plan_status', '0', 'admin', NOW(), '用药计划状态字典'),
|
||||
('服药任务状态', 'medication_task_status', '0', 'admin', NOW(), '服药任务状态字典'),
|
||||
('疾病状态', 'disease_status', '0', 'admin', NOW(), '疾病状态字典');
|
||||
|
||||
-- ========================================
|
||||
-- 字典数据
|
||||
-- ========================================
|
||||
-- 用药频率类型
|
||||
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time)
|
||||
VALUES
|
||||
(1, '每天', '1', 'medication_frequency_type', '', 'primary', 'Y', '0', 'admin', NOW()),
|
||||
(2, '每周', '2', 'medication_frequency_type', '', 'success', 'N', '0', 'admin', NOW()),
|
||||
(3, '隔天', '3', 'medication_frequency_type', '', 'info', 'N', '0', 'admin', NOW()),
|
||||
(4, '自定义', '4', 'medication_frequency_type', '', 'warning', 'N', '0', 'admin', NOW());
|
||||
|
||||
-- 用药计划状态
|
||||
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time)
|
||||
VALUES
|
||||
(1, '执行中', '1', 'medication_plan_status', '', 'primary', 'Y', '0', 'admin', NOW()),
|
||||
(2, '已暂停', '2', 'medication_plan_status', '', 'warning', 'N', '0', 'admin', NOW()),
|
||||
(3, '已结束', '3', 'medication_plan_status', '', 'info', 'N', '0', 'admin', NOW());
|
||||
|
||||
-- 服药任务状态
|
||||
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time)
|
||||
VALUES
|
||||
(0, '待服药', '0', 'medication_task_status', '', 'warning', 'Y', '0', 'admin', NOW()),
|
||||
(1, '已服药', '1', 'medication_task_status', '', 'success', 'N', '0', 'admin', NOW()),
|
||||
(2, '漏服', '2', 'medication_task_status', '', 'danger', 'N', '0', 'admin', NOW()),
|
||||
(3, '跳过', '3', 'medication_task_status', '', 'info', 'N', '0', 'admin', NOW());
|
||||
|
||||
-- 疾病状态
|
||||
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time)
|
||||
VALUES
|
||||
(1, '稳定', '1', 'disease_status', '', 'success', 'Y', '0', 'admin', NOW()),
|
||||
(2, '需关注', '2', 'disease_status', '', 'warning', 'N', '0', 'admin', NOW()),
|
||||
(3, '急性期', '3', 'disease_status', '', 'danger', 'N', '0', 'admin', NOW());
|
||||
293
sql/medication_module_pg.sql
Normal file
293
sql/medication_module_pg.sql
Normal file
@@ -0,0 +1,293 @@
|
||||
-- ========================================
|
||||
-- 用药管理模块 - PostgreSQL 建表语句
|
||||
-- 依据:慢性病用药管理模块-功能规划文档
|
||||
-- ========================================
|
||||
|
||||
-- ========================================
|
||||
-- 1. 慢性疾病档案表
|
||||
-- ========================================
|
||||
DROP TABLE IF EXISTS chronic_disease_record;
|
||||
CREATE TABLE chronic_disease_record (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
member_id BIGINT NOT NULL,
|
||||
disease_name VARCHAR(100) NOT NULL,
|
||||
disease_code VARCHAR(20),
|
||||
diagnosis_date DATE,
|
||||
disease_status SMALLINT NOT NULL DEFAULT 1,
|
||||
main_doctor VARCHAR(50),
|
||||
hospital VARCHAR(100),
|
||||
department VARCHAR(50),
|
||||
notes TEXT,
|
||||
-- 若依标准字段
|
||||
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) DEFAULT '',
|
||||
del_flag SMALLINT DEFAULT 0
|
||||
);
|
||||
|
||||
COMMENT ON TABLE chronic_disease_record IS '慢性疾病档案表';
|
||||
COMMENT ON COLUMN chronic_disease_record.id IS '主键ID';
|
||||
COMMENT ON COLUMN chronic_disease_record.member_id IS '关联成员ID';
|
||||
COMMENT ON COLUMN chronic_disease_record.disease_name IS '疾病名称(高血压/糖尿病/冠心病等)';
|
||||
COMMENT ON COLUMN chronic_disease_record.disease_code IS '疾病编码(ICD-10标准)';
|
||||
COMMENT ON COLUMN chronic_disease_record.diagnosis_date IS '确诊日期';
|
||||
COMMENT ON COLUMN chronic_disease_record.disease_status IS '状态:1-稳定 2-需关注 3-急性期';
|
||||
COMMENT ON COLUMN chronic_disease_record.main_doctor IS '主治医生';
|
||||
COMMENT ON COLUMN chronic_disease_record.hospital IS '就诊医院';
|
||||
COMMENT ON COLUMN chronic_disease_record.department IS '科室';
|
||||
COMMENT ON COLUMN chronic_disease_record.notes IS '备注说明';
|
||||
COMMENT ON COLUMN chronic_disease_record.create_by IS '创建者';
|
||||
COMMENT ON COLUMN chronic_disease_record.create_time IS '创建时间';
|
||||
COMMENT ON COLUMN chronic_disease_record.update_by IS '更新者';
|
||||
COMMENT ON COLUMN chronic_disease_record.update_time IS '更新时间';
|
||||
COMMENT ON COLUMN chronic_disease_record.remark IS '备注';
|
||||
COMMENT ON COLUMN chronic_disease_record.del_flag IS '删除标记:0-正常 1-删除';
|
||||
|
||||
CREATE INDEX idx_cdr_member_id ON chronic_disease_record(member_id);
|
||||
CREATE INDEX idx_cdr_disease_status ON chronic_disease_record(disease_status);
|
||||
|
||||
-- ========================================
|
||||
-- 2. 用药计划表
|
||||
-- ========================================
|
||||
DROP TABLE IF EXISTS medication_plan;
|
||||
CREATE TABLE medication_plan (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
member_id BIGINT NOT NULL,
|
||||
chronic_disease_id BIGINT,
|
||||
plan_name VARCHAR(100) NOT NULL,
|
||||
medicine_id BIGINT NOT NULL,
|
||||
medicine_name VARCHAR(100) NOT NULL,
|
||||
specification VARCHAR(50),
|
||||
dosage_per_time DECIMAL(10,2) NOT NULL,
|
||||
dosage_unit VARCHAR(20) NOT NULL,
|
||||
frequency_type SMALLINT NOT NULL,
|
||||
frequency_config JSONB NOT NULL,
|
||||
time_slots JSONB NOT NULL,
|
||||
start_date DATE NOT NULL,
|
||||
end_date DATE,
|
||||
remind_enabled SMALLINT NOT NULL DEFAULT 1,
|
||||
remind_advance_min INTEGER,
|
||||
notify_family SMALLINT DEFAULT 0,
|
||||
family_member_ids JSONB,
|
||||
status SMALLINT NOT NULL DEFAULT 1,
|
||||
-- 若依标准字段
|
||||
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) DEFAULT '',
|
||||
del_flag SMALLINT DEFAULT 0
|
||||
);
|
||||
|
||||
COMMENT ON TABLE medication_plan IS '用药计划表';
|
||||
COMMENT ON COLUMN medication_plan.id IS '主键ID';
|
||||
COMMENT ON COLUMN medication_plan.member_id IS '关联成员ID';
|
||||
COMMENT ON COLUMN medication_plan.chronic_disease_id IS '关联慢性疾病ID';
|
||||
COMMENT ON COLUMN medication_plan.plan_name IS '计划名称(如"降压药计划")';
|
||||
COMMENT ON COLUMN medication_plan.medicine_id IS '关联药品ID';
|
||||
COMMENT ON COLUMN medication_plan.medicine_name IS '药品名称(冗余字段)';
|
||||
COMMENT ON COLUMN medication_plan.specification IS '药品规格(如"10mg/片")';
|
||||
COMMENT ON COLUMN medication_plan.dosage_per_time IS '单次剂量';
|
||||
COMMENT ON COLUMN medication_plan.dosage_unit IS '剂量单位(片/粒/毫升/喷)';
|
||||
COMMENT ON COLUMN medication_plan.frequency_type IS '频次类型:1-每天 2-每周 3-隔天 4-自定义';
|
||||
COMMENT ON COLUMN medication_plan.frequency_config IS '频次配置(JSON格式)';
|
||||
COMMENT ON COLUMN medication_plan.time_slots IS '服药时段配置';
|
||||
COMMENT ON COLUMN medication_plan.start_date IS '开始日期';
|
||||
COMMENT ON COLUMN medication_plan.end_date IS '结束日期(空表示长期)';
|
||||
COMMENT ON COLUMN medication_plan.remind_enabled IS '是否开启提醒:1-是 0-否';
|
||||
COMMENT ON COLUMN medication_plan.remind_advance_min IS '提前提醒分钟数';
|
||||
COMMENT ON COLUMN medication_plan.notify_family IS '漏服是否通知家属:1-是 0-否';
|
||||
COMMENT ON COLUMN medication_plan.family_member_ids IS '通知家属成员ID列表';
|
||||
COMMENT ON COLUMN medication_plan.status IS '状态:1-执行中 2-已暂停 3-已结束';
|
||||
COMMENT ON COLUMN medication_plan.create_by IS '创建者';
|
||||
COMMENT ON COLUMN medication_plan.create_time IS '创建时间';
|
||||
COMMENT ON COLUMN medication_plan.update_by IS '更新者';
|
||||
COMMENT ON COLUMN medication_plan.update_time IS '更新时间';
|
||||
COMMENT ON COLUMN medication_plan.remark IS '备注';
|
||||
COMMENT ON COLUMN medication_plan.del_flag IS '删除标记:0-正常 1-删除';
|
||||
|
||||
CREATE INDEX idx_mp_member_id ON medication_plan(member_id);
|
||||
CREATE INDEX idx_mp_status ON medication_plan(status);
|
||||
CREATE INDEX idx_mp_medicine_id ON medication_plan(medicine_id);
|
||||
|
||||
-- ========================================
|
||||
-- 3. 服药任务表
|
||||
-- ========================================
|
||||
DROP TABLE IF EXISTS medication_task;
|
||||
CREATE TABLE medication_task (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
plan_id BIGINT NOT NULL,
|
||||
member_id BIGINT NOT NULL,
|
||||
medicine_name VARCHAR(100) NOT NULL,
|
||||
planned_date DATE NOT NULL,
|
||||
planned_time TIME NOT NULL,
|
||||
planned_dosage DECIMAL(10,2) NOT NULL,
|
||||
actual_time TIMESTAMP,
|
||||
actual_dosage DECIMAL(10,2),
|
||||
status SMALLINT NOT NULL DEFAULT 0,
|
||||
confirm_type SMALLINT,
|
||||
notes VARCHAR(255),
|
||||
remind_status SMALLINT DEFAULT 0,
|
||||
remind_time TIMESTAMP,
|
||||
-- 若依标准字段
|
||||
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) DEFAULT '',
|
||||
del_flag SMALLINT DEFAULT 0
|
||||
);
|
||||
|
||||
COMMENT ON TABLE medication_task IS '服药任务表';
|
||||
COMMENT ON COLUMN medication_task.id IS '主键ID';
|
||||
COMMENT ON COLUMN medication_task.plan_id IS '关联用药计划ID';
|
||||
COMMENT ON COLUMN medication_task.member_id IS '关联成员ID';
|
||||
COMMENT ON COLUMN medication_task.medicine_name IS '药品名称';
|
||||
COMMENT ON COLUMN medication_task.planned_date IS '计划服药日期';
|
||||
COMMENT ON COLUMN medication_task.planned_time IS '计划服药时间';
|
||||
COMMENT ON COLUMN medication_task.planned_dosage IS '计划剂量';
|
||||
COMMENT ON COLUMN medication_task.actual_time IS '实际服药时间';
|
||||
COMMENT ON COLUMN medication_task.actual_dosage IS '实际剂量';
|
||||
COMMENT ON COLUMN medication_task.status IS '状态:0-待服药 1-已服药 2-漏服 3-跳过';
|
||||
COMMENT ON COLUMN medication_task.confirm_type IS '确认方式:1-用户确认 2-家属代确认 3-系统自动';
|
||||
COMMENT ON COLUMN medication_task.notes IS '备注(如漏服原因)';
|
||||
COMMENT ON COLUMN medication_task.remind_status IS '提醒状态:0-未提醒 1-已提醒 2-已超时提醒';
|
||||
COMMENT ON COLUMN medication_task.remind_time IS '提醒时间';
|
||||
COMMENT ON COLUMN medication_task.create_by IS '创建者';
|
||||
COMMENT ON COLUMN medication_task.create_time IS '创建时间';
|
||||
COMMENT ON COLUMN medication_task.update_by IS '更新者';
|
||||
COMMENT ON COLUMN medication_task.update_time IS '更新时间';
|
||||
COMMENT ON COLUMN medication_task.remark IS '备注';
|
||||
COMMENT ON COLUMN medication_task.del_flag IS '删除标记:0-正常 1-删除';
|
||||
|
||||
CREATE INDEX idx_mt_plan_id ON medication_task(plan_id);
|
||||
CREATE INDEX idx_mt_member_id ON medication_task(member_id);
|
||||
CREATE INDEX idx_mt_planned_date ON medication_task(planned_date);
|
||||
CREATE INDEX idx_mt_status ON medication_task(status);
|
||||
CREATE INDEX idx_mt_planned_datetime ON medication_task(planned_date, planned_time);
|
||||
|
||||
-- ========================================
|
||||
-- 4. 用药提醒日志表
|
||||
-- ========================================
|
||||
DROP TABLE IF EXISTS medication_remind_log;
|
||||
CREATE TABLE medication_remind_log (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
task_id BIGINT NOT NULL,
|
||||
remind_type SMALLINT NOT NULL,
|
||||
remind_time TIMESTAMP NOT NULL,
|
||||
remind_channel VARCHAR(20) NOT NULL,
|
||||
remind_result SMALLINT NOT NULL,
|
||||
error_msg VARCHAR(255),
|
||||
-- 若依标准字段
|
||||
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) DEFAULT '',
|
||||
del_flag SMALLINT DEFAULT 0
|
||||
);
|
||||
|
||||
COMMENT ON TABLE medication_remind_log IS '用药提醒日志表';
|
||||
COMMENT ON COLUMN medication_remind_log.id IS '主键ID';
|
||||
COMMENT ON COLUMN medication_remind_log.task_id IS '关联服药任务ID';
|
||||
COMMENT ON COLUMN medication_remind_log.remind_type IS '提醒类型:1-按时提醒 2-超时提醒 3-漏服通知家属';
|
||||
COMMENT ON COLUMN medication_remind_log.remind_time IS '提醒时间';
|
||||
COMMENT ON COLUMN medication_remind_log.remind_channel IS '提醒渠道:app/sms/wechat';
|
||||
COMMENT ON COLUMN medication_remind_log.remind_result IS '结果:1-成功 2-失败';
|
||||
COMMENT ON COLUMN medication_remind_log.error_msg IS '错误信息';
|
||||
COMMENT ON COLUMN medication_remind_log.create_by IS '创建者';
|
||||
COMMENT ON COLUMN medication_remind_log.create_time IS '创建时间';
|
||||
COMMENT ON COLUMN medication_remind_log.update_by IS '更新者';
|
||||
COMMENT ON COLUMN medication_remind_log.update_time IS '更新时间';
|
||||
COMMENT ON COLUMN medication_remind_log.remark IS '备注';
|
||||
COMMENT ON COLUMN medication_remind_log.del_flag IS '删除标记:0-正常 1-删除';
|
||||
|
||||
CREATE INDEX idx_mrl_task_id ON medication_remind_log(task_id);
|
||||
CREATE INDEX idx_mrl_remind_time ON medication_remind_log(remind_time);
|
||||
|
||||
-- ========================================
|
||||
-- 5. 药品库存变动表
|
||||
-- ========================================
|
||||
DROP TABLE IF EXISTS medicine_stock_log;
|
||||
CREATE TABLE medicine_stock_log (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
medicine_id BIGINT NOT NULL,
|
||||
member_id BIGINT NOT NULL,
|
||||
change_type SMALLINT NOT NULL,
|
||||
change_quantity DECIMAL(10,2) NOT NULL,
|
||||
before_quantity DECIMAL(10,2) NOT NULL,
|
||||
after_quantity DECIMAL(10,2) NOT NULL,
|
||||
relate_id BIGINT,
|
||||
notes VARCHAR(255),
|
||||
-- 若依标准字段
|
||||
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) DEFAULT '',
|
||||
del_flag SMALLINT DEFAULT 0
|
||||
);
|
||||
|
||||
COMMENT ON TABLE medicine_stock_log IS '药品库存变动表';
|
||||
COMMENT ON COLUMN medicine_stock_log.id IS '主键ID';
|
||||
COMMENT ON COLUMN medicine_stock_log.medicine_id IS '关联药品ID';
|
||||
COMMENT ON COLUMN medicine_stock_log.member_id IS '关联成员ID';
|
||||
COMMENT ON COLUMN medicine_stock_log.change_type IS '变动类型:1-入库 2-服药消耗 3-手动调整 4-过期报废';
|
||||
COMMENT ON COLUMN medicine_stock_log.change_quantity IS '变动数量(正数为增,负数为减)';
|
||||
COMMENT ON COLUMN medicine_stock_log.before_quantity IS '变动前库存';
|
||||
COMMENT ON COLUMN medicine_stock_log.after_quantity IS '变动后库存';
|
||||
COMMENT ON COLUMN medicine_stock_log.relate_id IS '关联ID(入库ID/任务ID等)';
|
||||
COMMENT ON COLUMN medicine_stock_log.notes IS '备注';
|
||||
COMMENT ON COLUMN medicine_stock_log.create_by IS '创建者';
|
||||
COMMENT ON COLUMN medicine_stock_log.create_time IS '创建时间';
|
||||
COMMENT ON COLUMN medicine_stock_log.update_by IS '更新者';
|
||||
COMMENT ON COLUMN medicine_stock_log.update_time IS '更新时间';
|
||||
COMMENT ON COLUMN medicine_stock_log.remark IS '备注';
|
||||
COMMENT ON COLUMN medicine_stock_log.del_flag IS '删除标记:0-正常 1-删除';
|
||||
|
||||
CREATE INDEX idx_msl_medicine_id ON medicine_stock_log(medicine_id);
|
||||
CREATE INDEX idx_msl_member_id ON medicine_stock_log(member_id);
|
||||
CREATE INDEX idx_msl_create_time ON medicine_stock_log(create_time);
|
||||
|
||||
-- ========================================
|
||||
-- 6. 依从性统计汇总表
|
||||
-- ========================================
|
||||
DROP TABLE IF EXISTS medication_adherence_stats;
|
||||
CREATE TABLE medication_adherence_stats (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
member_id BIGINT NOT NULL,
|
||||
plan_id BIGINT,
|
||||
stat_date DATE NOT NULL,
|
||||
total_tasks INTEGER NOT NULL DEFAULT 0,
|
||||
completed_tasks INTEGER NOT NULL DEFAULT 0,
|
||||
missed_tasks INTEGER NOT NULL DEFAULT 0,
|
||||
skipped_tasks INTEGER NOT NULL DEFAULT 0,
|
||||
ontime_tasks INTEGER NOT NULL DEFAULT 0,
|
||||
adherence_rate DECIMAL(5,2) NOT NULL DEFAULT 0.00,
|
||||
ontime_rate DECIMAL(5,2) NOT NULL DEFAULT 0.00,
|
||||
-- 若依标准字段
|
||||
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) DEFAULT '',
|
||||
del_flag SMALLINT DEFAULT 0
|
||||
);
|
||||
|
||||
COMMENT ON TABLE medication_adherence_stats IS '依从性统计汇总表';
|
||||
COMMENT ON COLUMN medication_adherence_stats.id IS '主键ID';
|
||||
COMMENT ON COLUMN medication_adherence_stats.member_id IS '关联成员ID';
|
||||
COMMENT ON COLUMN medication_adherence_stats.plan_id IS '关联用药计划ID(为空表示该成员汇总)';
|
||||
COMMENT ON COLUMN medication_adherence_stats.stat_date IS '统计日期';
|
||||
COMMENT ON COLUMN medication_adherence_stats.total_tasks IS '总任务数';
|
||||
COMMENT ON COLUMN medication_adherence_stats.completed_tasks IS '已完成任务数';
|
||||
COMMENT ON COLUMN medication_adherence_stats.missed_tasks IS '漏服任务数';
|
||||
COMMENT ON COLUMN medication_adherence_stats.skipped_tasks IS '跳过任务数';
|
||||
COMMENT ON COLUMN medication_adherence_stats.ontime_tasks IS '准时服药任务数';
|
||||
COMMENT ON COLUMN medication_adherence_stats.adherence_rate IS '服药率(%)';
|
||||
COMMENT ON COLUMN medication_adherence_stats.ontime_rate IS '准时率(%)';
|
||||
|
||||
CREATE UNIQUE INDEX idx_mas_member_date ON medication_adherence_stats(member_id, stat_date, plan_id);
|
||||
CREATE INDEX idx_mas_stat_date ON medication_adherence_stats(stat_date);
|
||||
Reference in New Issue
Block a user