feat(health): 新增服药任务自动生成定时任务
- 新增 MedicationTaskJob:每日生成服药任务、标记过期记录 - 新增 MedicationRemindJob:扫描并发送服药提醒 - 扩展 HealthMedicationRecordMapper:新增统计和查询方法 - 新增定时任务配置SQL和提醒日志表
This commit is contained in:
90
sql/20250319-medication-task-job.sql
Normal file
90
sql/20250319-medication-task-job.sql
Normal file
@@ -0,0 +1,90 @@
|
||||
-- ========================================
|
||||
-- 用药任务定时任务配置
|
||||
-- 在 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);
|
||||
Reference in New Issue
Block a user