-- 智电改造网关台账(ICC 消防物联设备同步): -- 1) 幂等建表 electric_gateway(若 db_init.sql / db_seed.sql 已建则跳过) -- 2) 设备监控(id=4)下新增菜单 62「智电改造网关台账」 -- 3) ADMIN 角色绑定新菜单 -- 4) 注册 icc_gateway_sync 定时任务(默认每 10 分钟) BEGIN; -- ------------------------------------------------------------ -- 1) 幂等建表(与 db_seed.sql 定义保持一致) -- ------------------------------------------------------------ CREATE TABLE IF NOT EXISTS electric_gateway ( id BIGSERIAL PRIMARY KEY, icc_imei VARCHAR(64) UNIQUE, device_code VARCHAR(64) UNIQUE, device_name VARCHAR(128), customer_id BIGINT NOT NULL REFERENCES customer(id), equip_id BIGINT REFERENCES customer_equipment(id), org_code VARCHAR(64), org_name VARCHAR(128), manufacturer_code VARCHAR(64), manufacturer_name VARCHAR(128), type_code VARCHAR(32), type_name VARCHAR(64), product_model VARCHAR(64), is_online SMALLINT NOT NULL DEFAULT 1, synced_at TIMESTAMPTZ, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); COMMENT ON TABLE electric_gateway IS '智电改造网关设备表(ICC 同步)'; COMMENT ON COLUMN electric_gateway.id IS '自增主键'; COMMENT ON COLUMN electric_gateway.icc_imei IS 'ICC 设备 IMEI(可空唯一,ICC 数据可能缺失)'; COMMENT ON COLUMN electric_gateway.device_code IS 'ICC 设备编码(可空唯一,ICC 数据可能缺失)'; COMMENT ON COLUMN electric_gateway.device_name IS '设备名称(ICC 同步)'; COMMENT ON COLUMN electric_gateway.customer_id IS '客户 ID(由 orgCode→customer.icc_code 解析,逻辑隔离键)'; COMMENT ON COLUMN electric_gateway.equip_id IS '客户设备 ID(→ customer_equipment,同步不填充)'; COMMENT ON COLUMN electric_gateway.org_code IS 'ICC 组织编码'; COMMENT ON COLUMN electric_gateway.org_name IS '组织名称(ICC 同步)'; COMMENT ON COLUMN electric_gateway.manufacturer_code IS '厂商编码'; COMMENT ON COLUMN electric_gateway.manufacturer_name IS '厂商名称'; COMMENT ON COLUMN electric_gateway.type_code IS '设备类型编码'; COMMENT ON COLUMN electric_gateway.type_name IS '设备类型名称'; COMMENT ON COLUMN electric_gateway.product_model IS '产品型号'; COMMENT ON COLUMN electric_gateway.is_online IS '在线状态:1在线 0离线'; COMMENT ON COLUMN electric_gateway.synced_at IS 'ICC 同步时间'; COMMENT ON COLUMN electric_gateway.created_at IS '创建时间'; CREATE INDEX IF NOT EXISTS idx_gateway_customer ON electric_gateway (customer_id); CREATE INDEX IF NOT EXISTS idx_gateway_equip ON electric_gateway (equip_id); CREATE INDEX IF NOT EXISTS idx_gateway_imei ON electric_gateway (icc_imei); -- ------------------------------------------------------------ -- 2) 设备监控(id=4)下新增菜单 62「智电改造网关台账」(sort 3,排在智电改造线路台账之后) -- ------------------------------------------------------------ INSERT INTO sys_menu (id, parent_id, menu_name, menu_path, component, icon, sort_order, menu_type, permission, visible) VALUES (62, 4, '智电改造网关台账', '/device/gateway', 'device/gateway/index', 'ApiOutlined', 3, 2, 'device:list', 1) ON CONFLICT (id) DO UPDATE SET parent_id = EXCLUDED.parent_id, menu_name = EXCLUDED.menu_name, menu_path = EXCLUDED.menu_path, component = EXCLUDED.component, icon = EXCLUDED.icon, sort_order = EXCLUDED.sort_order, menu_type = EXCLUDED.menu_type, permission = EXCLUDED.permission, visible = EXCLUDED.visible; -- ------------------------------------------------------------ -- 3) 角色-菜单绑定:ADMIN(role_id=1) 拥有 62 -- ------------------------------------------------------------ INSERT INTO sys_role_menu (role_id, menu_id) VALUES (1, 62) ON CONFLICT (role_id, menu_id) DO NOTHING; -- ------------------------------------------------------------ -- 4) 定时任务种子:icc_gateway_sync(默认每 10 分钟,可按 job_key 幂等) -- ------------------------------------------------------------ INSERT INTO sys_job (job_key, job_name, cron_expression, params, retry_times, retry_interval, status, remark) VALUES ('icc_gateway_sync', '智电网关同步', '*/10 * * * *', '{}'::jsonb, 1, 300, 1, '从 ICC 平台拉取消防物联设备并按 icc_imei 幂等 upsert(默认每 10 分钟)') ON CONFLICT (job_key) DO NOTHING; -- 重置序列(覆盖到 62) SELECT setval('sys_menu_id_seq', GREATEST((SELECT MAX(id) FROM sys_menu), 62), true); COMMIT;