-- KingbaseES PostgreSQL 兼容模式。 -- 部署顺序:必须先执行 migration_alarm_case_work_order_id.sql(4 表 order_id→work_order_id 改名 -- + alarm_data 删 alarm_time),再执行 migration_alarm_review.sql,最后执行本脚本; -- 列未先落地会因列不存在而报错。 -- 不回填历史报警、不重写旧日志;已存在报警允许 alarm_no 为空。 BEGIN; LOCK TABLE app_user.alarm_data, app_user.work_order_log IN SHARE ROW EXCLUSIVE MODE; ALTER TABLE app_user.alarm_data ADD COLUMN IF NOT EXISTS alarm_no varchar(64); COMMENT ON COLUMN app_user.alarm_data.alarm_no IS '报警单号:程序生成 BJyyyyMMddHHmmss + 4位随机数,北京时间,唯一且不回填历史'; CREATE UNIQUE INDEX IF NOT EXISTS uk_alarm_data_alarm_no ON app_user.alarm_data(alarm_no); -- 兼容曾执行过旧版脚本的环境:停止数据库赋号,已有号码保持原值。 DROP TRIGGER IF EXISTS trg_alarm_number ON app_user.alarm_data; DROP FUNCTION IF EXISTS app_user.assign_alarm_number(); ALTER TABLE app_user.alarm_data ALTER COLUMN alarm_no DROP DEFAULT; DROP SEQUENCE IF EXISTS app_user.alarm_no_seq; -- 报警日志完全由业务代码写入;删除旧触发器/自定义函数,避免重复日志。 DROP TRIGGER IF EXISTS trg_alarm_lifecycle_log ON app_user.alarm_data; DROP TRIGGER IF EXISTS trg_work_order_alarm_log ON app_user.work_order_log; DROP FUNCTION IF EXISTS app_user.record_alarm_lifecycle(); DROP FUNCTION IF EXISTS app_user.record_alarm_work_order_log(); -- 精确更新现有菜单,保留父级、排序和角色授权。 UPDATE app_user.sys_menu SET path = CASE menu_id WHEN 2139 THEN 'alarmRemind' WHEN 2140 THEN 'alarmList' WHEN 2141 THEN 'drainageAlarmAnalysis' WHEN 2143 THEN 'drainageAlarmGIS' WHEN 2117 THEN 'alarmList' END, component = CASE menu_id WHEN 2139 THEN 'subSystem/alarm/remind' WHEN 2140 THEN 'subSystem/alarm/list' WHEN 2141 THEN 'subSystem/drainage/alarm/analysis' WHEN 2143 THEN 'subSystem/drainage/alarm/alarmGIS' WHEN 2117 THEN 'subSystem/alarm/list' END, query = CASE WHEN menu_id = 2117 THEN '{"rootTypeId":1}' ELSE '{"rootTypeId":2}' END, -- 框架按逗号拆分权限;供水首页的统计和实时异常仍使用原查询接口。 perms = CASE WHEN menu_id = 2117 THEN 'alarm:operations:list,waterSupply:alarm:list' ELSE 'alarm:operations:list' END, update_time = CURRENT_TIMESTAMP WHERE menu_id IN (2139,2140,2141,2143,2117); COMMIT;