This commit is contained in:
gr
2026-10-15 11:56:36 +08:00
35 changed files with 2289 additions and 72 deletions
@@ -0,0 +1,15 @@
-- 删除回访录音:按钮权限,与各入口的“回访录音”同层级。
-- 不复制任何角色授权;非超级管理员仍限本人上传且未采用的可删除任务。
INSERT INTO zyt_system_menu (
pid, type, name, icon, sort, perms, paths, component,
selected, params, is_cache, is_show, is_disable, create_time, update_time
)
SELECT r.pid, 'A', '删除回访录音', '', GREATEST(CAST(MAX(r.sort) AS SIGNED) - 1, 0),
'tcm.followupAudio/delete', '', '', '', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
FROM zyt_system_menu AS r
WHERE r.perms = 'tcm.diagnosis/followupAudio' AND r.type = 'A'
AND NOT EXISTS (
SELECT 1 FROM zyt_system_menu AS d
WHERE d.pid = r.pid AND d.perms = 'tcm.followupAudio/delete'
)
GROUP BY r.pid;
@@ -0,0 +1,16 @@
-- 回访录音统一按钮权限。与各入口的“日常记录”同层级,重复执行不新增重复节点。
-- 只创建菜单节点,不复制日常记录的角色授权;管理员后续手动分配。
-- 上传/转写/审核/播放仍需诊单编辑及患者范围;写入日常记录另需dailyRecord。
INSERT INTO zyt_system_menu (
pid, type, name, icon, sort, perms, paths, component,
selected, params, is_cache, is_show, is_disable, create_time, update_time
)
SELECT d.pid, 'A', '回访录音', '', GREATEST(CAST(MAX(d.sort) AS SIGNED) - 1, 0),
'tcm.diagnosis/followupAudio', '', '', '', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
FROM zyt_system_menu AS d
WHERE d.perms = 'tcm.diagnosis/dailyRecord' AND d.type = 'A'
AND NOT EXISTS (
SELECT 1 FROM zyt_system_menu AS a
WHERE a.pid = d.pid AND a.perms = 'tcm.diagnosis/followupAudio'
)
GROUP BY d.pid;
@@ -0,0 +1,26 @@
-- Apply AFTER soft_delete and BEFORE re-extraction application code. Idempotent additive migration.
-- Keep additive schema on rollback. Drain queued revisions before restoring pre-revision workers.
-- History snapshots share the original task expiry, never a renewed retention period.
SET @fa_db = DATABASE();
SET @fa_sql = IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=@fa_db AND TABLE_NAME='zyt_followup_audio_task' AND COLUMN_NAME='extraction_revision')=0,
'ALTER TABLE zyt_followup_audio_task ADD COLUMN extraction_revision INT UNSIGNED NOT NULL DEFAULT 0, ADD COLUMN extraction_role_override VARCHAR(20) NOT NULL DEFAULT \'\', ADD COLUMN extraction_source_version INT UNSIGNED NOT NULL DEFAULT 0, ADD COLUMN extraction_confirmed_by BIGINT UNSIGNED NOT NULL DEFAULT 0, ADD COLUMN extraction_confirmed_at BIGINT UNSIGNED NOT NULL DEFAULT 0', 'SELECT 1');
PREPARE fa_stmt FROM @fa_sql;
EXECUTE fa_stmt;
DEALLOCATE PREPARE fa_stmt;
CREATE TABLE IF NOT EXISTS zyt_followup_audio_extraction_history (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
task_id BIGINT UNSIGNED NOT NULL,
source_version INT UNSIGNED NOT NULL,
source_revision INT UNSIGNED NOT NULL,
target_revision INT UNSIGNED NOT NULL,
channel_roles VARCHAR(20) NOT NULL,
actor_id BIGINT UNSIGNED NOT NULL,
snapshot_cipher LONGTEXT NULL,
created_at BIGINT UNSIGNED NOT NULL,
expires_at BIGINT UNSIGNED NOT NULL,
purged_at BIGINT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY(id),
UNIQUE KEY uk_task_source(task_id,source_version),
UNIQUE KEY uk_task_revision(task_id,target_revision),
KEY idx_expiry(expires_at,purged_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
@@ -0,0 +1,16 @@
-- Apply AFTER 2026_09_29_followup_audio.sql, BEFORE deploying delete-aware application code.
-- Re-runnable. Preserve original content SHA, upload binding, provider and all encrypted snapshots.
-- Rollback: leave these additive columns/index in place and disable deletion first.
-- Old application code must NOT be restored after tombstones exist: it exposes hidden tasks.
-- Restoring the old unique key is not generally possible after same-content reuploads.
SET @fa_db = DATABASE();
SET @fa_sql = IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=@fa_db AND TABLE_NAME='zyt_followup_audio_task' AND COLUMN_NAME='active_slot')=0,
'ALTER TABLE zyt_followup_audio_task ADD COLUMN active_slot BIGINT UNSIGNED NOT NULL DEFAULT 0, ADD COLUMN deleted_at BIGINT UNSIGNED NOT NULL DEFAULT 0, ADD COLUMN deleted_by BIGINT UNSIGNED NOT NULL DEFAULT 0, ADD COLUMN deletion_json TEXT NULL', 'SELECT 1');
PREPARE fa_stmt FROM @fa_sql;
EXECUTE fa_stmt;
DEALLOCATE PREPARE fa_stmt;
SET @fa_sql = IF((SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=@fa_db AND TABLE_NAME='zyt_followup_audio_task' AND INDEX_NAME='uk_content_profile' AND COLUMN_NAME='active_slot')=0,
'ALTER TABLE zyt_followup_audio_task DROP INDEX uk_content_profile, ADD UNIQUE KEY uk_content_profile (diagnosis_id,sha256,model_key,active_slot)', 'SELECT 1');
PREPARE fa_stmt FROM @fa_sql;
EXECUTE fa_stmt;
DEALLOCATE PREPARE fa_stmt;