feat(gateway): 新增智电改造网关台账功能(ICC消防物联设备同步) - 新建electric_gateway表(迁移20261024_icc_gateway.sql并同步db_seed:自增id、icc_imei/device_code双唯一、orgCode经customer.icc_code解析customer_id、equip_id可空、is_online/synced_at等);同步服务IccGatewaySyncService复用OAuth2真实鉴权分页拉取消防物联设备(POST /device/subsystem/page)并按imei幂等upsert写icc_sync_log;新增GET /api/electric-gateways列表/详情与POST /sync手动同步(RBAC device:list);注册icc_gateway_sync每10分钟定时任务(菜单62/role_menu/sys_job种子);前端网关台账页(搜索/筛选/同步按钮/在线状态tag/分页)与路由;server补装undici依赖
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
This commit is contained in:
1 parent
9d3bb13ecf
commit
cf0a0d4d31
21 files changed
+1439
-272
No files matched your search
@@ -448,6 +448,79 @@ INSERT INTO sys_notice_rule (rule_key, rule_name, event_key, trigger_mode, enabl
|
||||
'扫描派单后超过 advance_days 天仍未接单的工单,通知 ADMIN')
|
||||
ON CONFLICT (rule_key) DO NOTHING;
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
-- 11a. 智电改造网关台账(ICC 消防物联设备同步)
|
||||
-- 建表 electric_gateway(与迁移 20261024_icc_gateway.sql 一致)
|
||||
-- 设备监控(id=4)下新增菜单 62「智电改造网关台账」(sort 3,排在智电改造线路台账之后)
|
||||
-- ADMIN 绑定新菜单;注册 icc_gateway_sync 定时任务(默认每 10 分钟)
|
||||
-- ------------------------------------------------------------
|
||||
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);
|
||||
|
||||
-- 菜单 62:设备监控下的智电改造网关台账菜单
|
||||
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;
|
||||
|
||||
-- 角色-菜单绑定: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;
|
||||
|
||||
-- 重置 sys_menu 自增序列(覆盖到 62)
|
||||
SELECT setval('sys_menu_id_seq', GREATEST((SELECT MAX(id) FROM sys_menu), 62), true);
|
||||
|
||||
-- 智电网关同步任务种子(sys_job,按 job_key 幂等;默认每 10 分钟)
|
||||
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;
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- ============================================================
|
||||
|
||||
Reference in new issue
Block a user