-- 业务事件与读入口检查场景(add-carrier-polling-scheduler)。 -- 背景:业务事件与读入口原先各自起"立即、3 分钟、5 分钟"卡观测序列,不受限流、与优先轮询重复; -- 改为"请求检查":把卡的对应检查类型设为立即到期放入运营商账户优先队列,按场景配置确认延迟与冷却。 -- -- 设计选择: -- 1. scene 唯一,场景由代码预置;后台只可修改检查类型、确认延迟与冷却时长。 -- 2. check_types 取值 card_status / carddata / realname;confirm_delays 为秒数数组(空数组表示只立即检查一次); -- cooldown 为秒数,空表示不冷却(读入口场景默认配置冷却,避免反复刷新占满优先队列)。 -- 3. 停复机成功与设备操作默认 3 分钟后确认一次(结果已满足预期时取消),沿用原观测序列的确认语义。 CREATE TABLE tb_polling_check_scene ( id BIGSERIAL PRIMARY KEY, scene VARCHAR(50) NOT NULL, scene_name VARCHAR(100) NOT NULL, check_types JSONB NOT NULL DEFAULT '[]'::jsonb, confirm_delays JSONB NOT NULL DEFAULT '[]'::jsonb, cooldown INTEGER, updater BIGINT NOT NULL DEFAULT 0, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), CONSTRAINT ck_polling_check_scene_cooldown CHECK (cooldown IS NULL OR cooldown > 0) ); CREATE UNIQUE INDEX uk_polling_check_scene_scene ON tb_polling_check_scene (scene); COMMENT ON TABLE tb_polling_check_scene IS '业务事件与读入口请求检查场景'; COMMENT ON COLUMN tb_polling_check_scene.scene IS '场景编码(代码预置)'; COMMENT ON COLUMN tb_polling_check_scene.scene_name IS '场景名称'; COMMENT ON COLUMN tb_polling_check_scene.check_types IS '需要检查的类型:card_status / carddata / realname'; COMMENT ON COLUMN tb_polling_check_scene.confirm_delays IS '延迟确认序列(秒),空数组表示只立即检查一次'; COMMENT ON COLUMN tb_polling_check_scene.cooldown IS '冷却时长(秒):最近一次成功检查未超过该时长则不请求,空表示不冷却'; INSERT INTO tb_polling_check_scene (scene, scene_name, check_types, confirm_delays, cooldown) VALUES ('order_paid', '订单支付', '["card_status","carddata","realname"]', '[]', NULL), ('package_activated', '套餐激活', '["card_status","carddata","realname"]', '[]', NULL), ('stop_resume_succeeded', '停复机成功', '["card_status"]', '[180]', NULL), ('device_operation', '设备操作', '["card_status"]', '[180]', NULL), ('auto_renewal_purchase', '自动续费购包', '["card_status","carddata","realname"]', '[]', NULL), ('client_asset_detail', 'C 端资产详情', '["card_status","carddata"]', '[]', 300), ('admin_asset_realtime', '后台资产实时状态', '["card_status","carddata","realname"]', '[]', 60), ('realname_link', '实名链接', '["realname"]', '[]', 60);