-- ============================================================================ -- smartor_sltd 数据库:语音问题相关表的列名对齐 / 新增列脚本 -- 生成日期: 20260928 -- 目标库 : smartor_sltd(ruoyi-admin/src/main/resources/application-druid.yml,profile=druid) -- 目的 : 让 ivr_liba_template_script / ivr_task_template_script 的列名与 -- IvrLibaTemplateScriptMapper.xml / IvrTaskTemplateScriptMapper.xml 一致 -- (这两个 mapper 里查的是 script_assortname、script_assortid) -- -- 【执行前实测现状(20260928,smartor_sltd)】 -- ivr_liba_script_assort : 35 行 -- index_assort_name varchar(255) NOT NULL 注释“指标分类名称” -- type varchar(255) NULL ← 该列【已存在】,35 行全为 NULL,无注释 -- ivr_liba_template_script : 121 行(del_flag=0 的 54 行) -- categoryName varchar(50) NULL 注释“类别名”,121 行全为 NULL -- 没有 assortid 列,也没有 script_assortid 列 -- ivr_task_template_script : 1221 行 -- categoryName varchar(50) NULL 注释“类别名”,仅 26 行非空 -- 没有 assortid 列,也没有 script_assortid 列 -- -- ⇒ 第 3 项(assortid → script_assortid)在这两个表里都不是“改名”, -- 两个表根本没有 assortid 列,只能“新增列 + 回填”。 -- ⇒ 回填来源用父模板的 assortid: -- ivr_liba_template_script.templateid → ivr_liba_template.id.assortid (121/121 行可回填) -- ivr_task_template_script.templateID → ivr_task_template.id.assortid (358/1221 行可回填; -- 另 825 行 templateID 在 ivr_task_template 中不存在、38 行 templateID 为 NULL,保持 NULL) -- ⇒ 依赖检查:本库没有引用这两张表的存储过程 / 视图 / 触发器(已查 -- information_schema.ROUTINES / VIEWS / TRIGGERS,均为 0 条),改列名不影响 DB 侧对象。 -- ⇒ 代码侧影响:IvrLibaTemplateScriptMapper、IvrTaskTemplateScriptMapper 本来就在用 -- script_assortname / script_assortid,改完后这两个 mapper 才真正能查通; -- 两个 mapper 都没有引用 categoryName,所以改名不会影响现有功能。 -- ============================================================================ -- ---------------------------------------------------------------------------- -- 【0】执行前检查(确认与上面的实测一致,正常应看到 categoryName、且没有 assort 列) -- ---------------------------------------------------------------------------- -- SHOW COLUMNS FROM ivr_liba_template_script LIKE '%assort%'; -- SHOW COLUMNS FROM ivr_liba_template_script LIKE 'categoryName'; -- SHOW COLUMNS FROM ivr_task_template_script LIKE 'categoryName'; -- SHOW COLUMNS FROM ivr_liba_script_assort LIKE 'type'; -- SELECT COUNT(*) FROM ivr_liba_template_script; -- 121 -- SELECT COUNT(*) FROM ivr_task_template_script; -- 1221 -- ---------------------------------------------------------------------------- -- 【1】categoryName → script_assortname(两张表,保留原类型 varchar(50) NULL 和原注释“类别名”) -- 121 / 1221 行的小表,秒级完成;CHANGE COLUMN 只改名可走 INPLACE,不阻塞读写。 -- ---------------------------------------------------------------------------- ALTER TABLE ivr_liba_template_script CHANGE COLUMN categoryName script_assortname varchar(50) NULL COMMENT '类别名', ALGORITHM = INPLACE, LOCK = NONE; ALTER TABLE ivr_task_template_script CHANGE COLUMN categoryName script_assortname varchar(50) NULL COMMENT '类别名', ALGORITHM = INPLACE, LOCK = NONE; -- ---------------------------------------------------------------------------- -- 【2】ivr_liba_script_assort.type -- 该列本来就有(varchar(255),无注释,35 行全 NULL),这里只按需求补注释并把长度改成 100。 -- 注意:varchar(255) → varchar(100) 属于类型收窄,需要重建表,不能用 INPLACE/LOCK=NONE; -- 本表只有 35 行,直接执行即可(若不想动长度,只执行带 COMMENT 的 MODIFY 也一样需要重建, -- 因为改注释本身就是 COPY)。若只想加注释、不改长度,把 varchar(100) 换成 varchar(255)。 -- ---------------------------------------------------------------------------- ALTER TABLE ivr_liba_script_assort MODIFY COLUMN type varchar(100) NULL COMMENT '问题类型(例如,门诊满意度:mzmyd 住院满意度:zymyd ...)'; -- ---------------------------------------------------------------------------- -- 【3】新增 script_assortid 列 + 用父模板的 assortid 回填 -- 备注里原本写的“ivr_liba_script_ssort”应为“ivr_liba_script_assort”,下面按正确表名写。 -- ---------------------------------------------------------------------------- ALTER TABLE ivr_liba_template_script ADD COLUMN script_assortid int(11) NULL COMMENT '语音问题类别ID(对应的是ivr_liba_script_assort)', ALGORITHM = INPLACE, LOCK = NONE; ALTER TABLE ivr_task_template_script ADD COLUMN script_assortid int(11) NULL COMMENT '语音问题类别ID(对应的是ivr_liba_script_assort)', ALGORITHM = INPLACE, LOCK = NONE; -- 回填:121/121 行 UPDATE ivr_liba_template_script s JOIN ivr_liba_template t ON t.id = s.templateid SET s.script_assortid = t.assortid; -- 回填:358/1221 行(其余为孤儿数据,保持 NULL) UPDATE ivr_task_template_script s JOIN ivr_task_template t ON t.id = s.templateID SET s.script_assortid = t.assortid; -- ---------------------------------------------------------------------------- -- 【4】可选:把 script_assortname 也补上(当前两表的 categoryName 基本全是 NULL, -- 改名后 script_assortname 仍是 NULL,而 satisfactionGraph 的语音分支是按 -- script_assortname 分组的,不补的话语音分类仍然出不来) -- 数据源:父模板 assortid → ivr_liba_script_assort.index_assort_name -- 确认要补再执行这段;不需要就跳过。 -- ---------------------------------------------------------------------------- -- UPDATE ivr_liba_template_script s -- JOIN ivr_liba_template t ON t.id = s.templateid -- JOIN ivr_liba_script_assort a ON a.id = t.assortid -- SET s.script_assortname = a.index_assort_name -- WHERE s.script_assortname IS NULL OR s.script_assortname = ''; -- -- UPDATE ivr_task_template_script s -- JOIN ivr_task_template t ON t.id = s.templateID -- JOIN ivr_liba_script_assort a ON a.id = t.assortid -- SET s.script_assortname = a.index_assort_name -- WHERE s.script_assortname IS NULL OR s.script_assortname = ''; -- ---------------------------------------------------------------------------- -- 【5】可选:给 ivr_liba_script_assort.type 填值(当前 35 行全 NULL, -- 而代码里 mydIdList 是按 type 含 "myd" 过滤的,不填值语音分支就永远是 0 个分类) -- 填值口径需要业务确认,下面只是按现有分类名给的示例,确认后再执行: -- 满意度相关(如 id=12 满意度调查、id=9 服务评价)→ mzmyd / zymyd -- 其余分类 → 留空或按业务自定义 -- (本库 ivr_liba_script_assort 里的分类名:未分类/患者信息/体征/疾病/症状/生活方式/ -- 用药依从性/不良反应/通知提醒/服务评价/检查类/检验类/满意度调查/膳食类/运动类/睡眠类/ -- 抽烟喝酒/身高/体重/视力/听力/意见建议/检验检查类/随访指标/身份确认/复诊通知/复查通知/ -- 是否方便/出院宣教/修养地/语音题目/语音题目测试 …) -- ---------------------------------------------------------------------------- -- UPDATE ivr_liba_script_assort SET type = 'zymyd' WHERE id = 12; -- 例:满意度调查 -- UPDATE ivr_liba_script_assort SET type = 'mzmyd' WHERE id = 9; -- 例:服务评价 -- ---------------------------------------------------------------------------- -- 【6】验证 -- ---------------------------------------------------------------------------- -- SHOW COLUMNS FROM ivr_liba_template_script LIKE '%assort%'; -- SHOW COLUMNS FROM ivr_task_template_script LIKE '%assort%'; -- SHOW COLUMNS FROM ivr_liba_script_assort LIKE 'type'; -- SELECT COUNT(*) AS liba_script_rows, SUM(script_assortid IS NULL) AS assortid_null FROM ivr_liba_template_script; -- 期望 121 / 0 -- SELECT COUNT(*) AS task_script_rows, SUM(script_assortid IS NULL) AS assortid_null FROM ivr_task_template_script; -- 期望 1221 / 863 -- ---------------------------------------------------------------------------- -- 【7】回滚 -- ---------------------------------------------------------------------------- -- ALTER TABLE ivr_liba_template_script CHANGE COLUMN script_assortname categoryName varchar(50) NULL COMMENT '类别名'; -- ALTER TABLE ivr_task_template_script CHANGE COLUMN script_assortname categoryName varchar(50) NULL COMMENT '类别名'; -- ALTER TABLE ivr_liba_template_script DROP COLUMN script_assortid; -- ALTER TABLE ivr_task_template_script DROP COLUMN script_assortid; -- ALTER TABLE ivr_liba_script_assort MODIFY COLUMN type varchar(255) NULL COMMENT '';