feat(health): 新增依从性统计功能

- 新增 MedicationAdherenceController:统计API接口
- 新增 IMedicationAdherenceService:统计服务接口
- 新增 MedicationAdherenceServiceImpl:统计服务实现
- 新增 MedicationAdherenceVo/DailyAdherenceVo:统计VO
- 扩展 HealthMedicationRecordMapper:新增统计SQL
- 新增菜单和统计汇总表SQL
This commit is contained in:
bot5
2026-03-19 08:34:42 +08:00
parent f5c9868a07
commit 8d71009f3a
9 changed files with 878 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
-- ========================================
-- 依从性统计功能 - 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);