| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- -- 统一报警审核。KingbaseES(PostgreSQL 兼容模式)。
- -- 部署顺序:必须先执行 migration_alarm_case_work_order_id.sql(4 表 order_id→work_order_id 改名
- -- + alarm_data 删 alarm_time),再执行本脚本,日志索引使用 create_time。
- -- 列未先落地会因列不存在而报错。
- -- 先备份,停止报警/工单写入,完整执行事务,再同时部署管理端、API 服务和前端;不要拆开执行或忽略错误。
- -- audit_status 与 alarm_status 独立;确认报警创建工单,但不改变设备或报警处理状态。
- -- 日志操作字典与共享 AlarmLogOperTypeEnum 对齐:0触发/1确认/2误报/3处理。
- -- 仅调整结构与菜单,不迁移或补录历史数据;旧 alarm_audit 表不再由新代码读写。
- BEGIN;
- LOCK TABLE app_user.alarm_data, app_user.work_order_log IN SHARE ROW EXCLUSIVE MODE;
- LOCK TABLE app_user.sys_menu, app_user.sys_role_menu IN SHARE ROW EXCLUSIVE MODE;
- ALTER TABLE app_user.alarm_data ADD COLUMN IF NOT EXISTS audit_status integer DEFAULT 0;
- ALTER TABLE app_user.alarm_data ALTER COLUMN audit_status SET DEFAULT 0;
- ALTER TABLE app_user.alarm_data ALTER COLUMN audit_status SET NOT NULL;
- COMMENT ON COLUMN app_user.alarm_data.audit_status IS '审核结果:0-未审核 1-确认报警 2-误报警,独立于报警处理状态';
- DO $$ BEGIN
- IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conrelid = 'app_user.alarm_data'::regclass
- AND conname = 'ck_alarm_data_audit_status') THEN
- ALTER TABLE app_user.alarm_data ADD CONSTRAINT ck_alarm_data_audit_status CHECK (audit_status IN (0,1,2));
- END IF;
- END $$;
- -- KingbaseES 显式序列自增,与 work_order_log 的主键策略一致,各表使用独立序列。
- CREATE SEQUENCE IF NOT EXISTS app_user.alarm_log_id_seq
- START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;
- CREATE TABLE IF NOT EXISTS app_user.alarm_log (
- log_id int8 NOT NULL DEFAULT nextval('app_user.alarm_log_id_seq'::regclass) PRIMARY KEY,
- alarm_id varchar(64) NOT NULL,
- oper_type integer NOT NULL CHECK (oper_type IN (0,1,2,3)),
- oper_desc text,
- attach_url text,
- oper_user_id int8,
- oper_user_name varchar(128),
- oper_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
- );
- ALTER SEQUENCE app_user.alarm_log_id_seq OWNED BY app_user.alarm_log.log_id;
- COMMENT ON COLUMN app_user.alarm_log.log_id IS '日志主键,int8,使用 alarm_log_id_seq 序列自增长';
- COMMENT ON TABLE app_user.alarm_log IS '报警操作日志,记录报警触发、审核及处理;确认日志包含转工单号';
- COMMENT ON COLUMN app_user.alarm_log.alarm_id IS '关联 alarm_data.id';
- COMMENT ON COLUMN app_user.alarm_log.oper_type IS 'AlarmLogOperTypeEnum:0触发 1确认 2误报 3处理;工单日志只写work_order_log';
- COMMENT ON COLUMN app_user.alarm_log.oper_desc IS '操作详情或审核意见';
- COMMENT ON COLUMN app_user.alarm_log.attach_url IS '附件地址,多个用逗号分隔';
- COMMENT ON COLUMN app_user.alarm_log.oper_user_id IS '操作人ID,系统操作可为空';
- COMMENT ON COLUMN app_user.alarm_log.oper_user_name IS '操作人昵称(sys_user.nick_name);自动操作使用系统名称';
- COMMENT ON COLUMN app_user.alarm_log.oper_time IS '操作时间';
- CREATE INDEX IF NOT EXISTS idx_alarm_log_alarm_time ON app_user.alarm_log(alarm_id, oper_time, log_id);
- CREATE INDEX IF NOT EXISTS idx_alarm_review_query ON app_user.alarm_data(alarm_status, audit_status, create_time DESC);
- -- 报警日志完全由业务代码写入;删除旧触发器/自定义函数,避免重复日志。
- 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();
- -- 四条都是已有页面菜单:精准更新 ID,统一 path,保留父级、排序、图标与已有角色关联。
- UPDATE app_user.sys_menu SET path = 'alarmAudit', component = 'subSystem/alarm/common/audit', perms = 'alarm:review:list',
- query = CASE menu_id
- WHEN 2118 THEN '{"rootTypeId":1}'
- WHEN 2142 THEN '{"rootTypeId":2}'
- WHEN 2097 THEN '{"rootTypeId":3,"warning_code":"WARN-GAS-CONCENTRATION"}'
- WHEN 2024 THEN '{"rootTypeId":4}' END,
- update_time = CURRENT_TIMESTAMP
- WHERE menu_id IN (2118,2142,2097,2024);
- -- 仅为新建按钮补角色授权,重复执行不得恢复管理员已经撤销的审核权限。
- WITH new_buttons AS (
- INSERT INTO app_user.sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache,
- menu_type, visible, status, perms, icon, create_by, create_time)
- SELECT (SELECT coalesce(max(menu_id), 0) FROM app_user.sys_menu) + row_number() OVER (ORDER BY p.menu_id),
- '报警审核', p.menu_id, 1, '', NULL, 1, 0, 'F', '0', '0', 'alarm:review:audit', '#', 'admin', CURRENT_TIMESTAMP
- FROM app_user.sys_menu p WHERE p.menu_id IN (2118,2142,2097,2024)
- AND NOT EXISTS (SELECT 1 FROM app_user.sys_menu c WHERE c.parent_id = p.menu_id AND c.perms = 'alarm:review:audit')
- RETURNING menu_id, parent_id
- )
- INSERT INTO app_user.sys_role_menu(role_id, menu_id)
- SELECT DISTINCT rm.role_id, c.menu_id FROM app_user.sys_role_menu rm
- JOIN new_buttons c ON c.parent_id = rm.menu_id
- WHERE rm.menu_id IN (2118,2142,2097,2024)
- AND NOT EXISTS (SELECT 1 FROM app_user.sys_role_menu existing WHERE existing.role_id = rm.role_id AND existing.menu_id = c.menu_id);
- COMMIT;
|