feat(health): 新增服药任务自动生成定时任务

- 新增 MedicationTaskJob:每日生成服药任务、标记过期记录
- 新增 MedicationRemindJob:扫描并发送服药提醒
- 扩展 HealthMedicationRecordMapper:新增统计和查询方法
- 新增定时任务配置SQL和提醒日志表
This commit is contained in:
bot5
2026-03-19 08:25:36 +08:00
parent 77e503c460
commit f5c9868a07
5 changed files with 623 additions and 0 deletions

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