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:
wkandClaude Sonnet 4.6 noreply@anthropic.com authored and trae-solo-agent committed 2026-10-24 12:37:35 +08:00
1 parent 9d3bb13ecf
commit cf0a0d4d31
21 files changed
+1439 -272

No files matched your search

+61
View File
@@ -202,4 +202,65 @@ export const electricLineApi = {
sync: () =>
request.post<IccLineSyncResult>('/electric-lines/sync'),
};
// ==================== 智电改造网关台账 ====================
export interface ElectricGatewayListItem {
id: number;
iccImei?: string;
deviceCode?: string;
deviceName?: string;
customerId: number;
equipId?: number;
orgCode?: string;
orgName?: string;
manufacturerCode?: string;
manufacturerName?: string;
typeCode?: string;
typeName?: string;
productModel?: string;
isOnline: number;
syncedAt?: string;
createdAt: string;
// 联表补全字段
customerNo?: string;
customerName?: string;
equipCode?: string;
equipName?: string;
}
export interface ElectricGatewayQuery {
page?: number;
pageSize?: number;
keyword?: string;
customerId?: number;
equipId?: number;
isOnline?: number;
}
export interface ElectricGatewayPageResult {
list: ElectricGatewayListItem[];
total: number;
page: number;
pageSize: number;
}
export interface IccGatewaySyncResult {
pulled: number;
synced: number;
inserted: number;
updated: number;
skipped: number;
}
export const electricGatewayApi = {
getList: (params: ElectricGatewayQuery) =>
request.get<ElectricGatewayPageResult>('/electric-gateways', { params }),
getDetail: (id: number) =>
request.get<ElectricGatewayListItem>(`/electric-gateways/${id}`),
sync: () =>
request.post<IccGatewaySyncResult>('/electric-gateways/sync'),
};