Files
intc-cloud/sql/medication.sql
bot5 77e503c460 feat(health): 新增用药计划模块
- 新增用药计划(HealthMedicationPlan)和用药记录(HealthMedicationRecord)实体
- 包含完整的Controller/Service/Mapper层代码
- 支持用药计划的增删改查、暂停/恢复/结束操作
- 支持用药记录的服药/跳过操作
- 新增SQL建表脚本、字典数据和菜单权限
2026-03-18 14:10:32 +08:00

128 lines
8.7 KiB
SQL

-- ----------------------------
-- 用药计划表
-- ----------------------------
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';