From ecdf6e18b9c69b93de3a5394f7b314c60493c7ac Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Thu, 27 Nov 2025 11:31:36 +0800 Subject: [PATCH] =?UTF-8?q?refactor(api-rfid-dashboard):=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=8E=A5=E5=8F=A3=E8=AE=BE=E8=AE=A1=E5=B9=B6=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E7=B1=BB=E5=9E=8B=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 调整实时统计数据接口参数,支持不传限制数量获取全部告警 - 替换设备状态列表接口为位置树接口,位置类型3表示设备节点 - 移除设备状态列表接口参数,简化请求调用 - 成功率趋势接口取消类型参数,改为返回包含今日与昨日的数据 - 新增兼容旧接口名的函数,方便代码逐步迁移 - 类型定义中将设备状态列表替换为位置树结构 - 位置树节点新增设备及层级相关字段,支持树形结构及WebSocket数据匹配 - 新增WebSocket实时读取记录类型定义,完善实时数据结构 - 成功率趋势数据接口更新,区分今日与昨日成功率字段 --- src/api/rfid/dashboard/index.ts | 39 ++++++++------- src/api/rfid/dashboard/types.ts | 89 +++++++++++++++++++++------------ 2 files changed, 79 insertions(+), 49 deletions(-) diff --git a/src/api/rfid/dashboard/index.ts b/src/api/rfid/dashboard/index.ts index e96f39f..d30aa7d 100644 --- a/src/api/rfid/dashboard/index.ts +++ b/src/api/rfid/dashboard/index.ts @@ -3,7 +3,7 @@ import { AxiosPromise } from 'axios'; import { DashboardVO, RealtimeStats, - DeviceStatusVO, + LocationTreeNode, SuccessRateTrend, StatisticsOverview, AlarmStatVO @@ -12,44 +12,41 @@ import { // ==================== 新增接口(按需刷新) ==================== /** - * 【新接口1】获取实时统计数据(按秒刷新) + * 【接口1】获取实时统计数据(按秒刷新) * 包含:顶部统计(设备数量、在线数量、离线数量、告警数量)+ 告警统计列表 * - * @param alarmLimit 告警列表限制数量(默认10条) + * @param alarmLimit 告警列表限制数量(可选,不传则返回全部,供滚动显示) */ export const getRealtimeStats = (alarmLimit?: number): AxiosPromise => { return request({ url: '/rfid/dashboard/realtime', method: 'get', - params: { alarmLimit } + params: alarmLimit ? { alarmLimit } : {} }); }; /** - * 【新接口2】获取设备状态列表(定时刷新) - * 包含每个设备的在线状态、告警状态及最新读取记录 - * - * @param locationId 位置ID(可选,用于按位置筛选) + * 【接口2】获取位置树(含设备信息) + * 返回完整的位置树结构,位置类型为 3 时表示设备节点 + * 不返回读取记录数据,具体记录由 WebSocket 实时推送 + * 前端通过 deviceId 匹配 WebSocket 数据 */ -export const getDeviceStatusList = (locationId?: number): AxiosPromise => { +export const getLocationTree = (): AxiosPromise => { return request({ url: '/rfid/dashboard/deviceStatus', - method: 'get', - params: { locationId } + method: 'get' }); }; /** - * 【新接口3】获取成功率趋势(按小时统计) + * 【接口3】获取成功率趋势(按小时统计) * 不需要频繁刷新 - * - * @param type 类型:today-今日(默认),yesterday-昨日 + * 返回 24 条数据,每条包含今日和昨日的成功率 */ -export const getSuccessRateTrends = (type?: string): AxiosPromise => { +export const getSuccessRateTrends = (): AxiosPromise => { return request({ url: '/rfid/dashboard/successRate', - method: 'get', - params: { type } + method: 'get' }); }; @@ -90,3 +87,11 @@ export const getAlarmStats = (limit?: number): AxiosPromise => { params: { limit } }); }; + +/** + * 兼容老接口名称:getDashboardStats + * 等价于 getDashboardData,便于逐步迁移老代码 + */ +export const getDashboardStats = (locationId?: number): AxiosPromise => { + return getDashboardData(locationId); +}; diff --git a/src/api/rfid/dashboard/types.ts b/src/api/rfid/dashboard/types.ts index c24ce0d..6c0e767 100644 --- a/src/api/rfid/dashboard/types.ts +++ b/src/api/rfid/dashboard/types.ts @@ -8,8 +8,8 @@ export interface DashboardVO { /** 统计概览 */ overview: StatisticsOverview; - /** 设备状态列表 */ - deviceStatusList: DeviceStatusVO[]; + /** 位置树(含设备信息) */ + locationTree: LocationTreeNode[]; /** 成功率趋势数据 */ successRateTrends: SuccessRateTrend[]; /** 告警统计列表 */ @@ -58,49 +58,74 @@ export interface RealtimeStats { } /** - * 最新读取记录 + * 位置树节点(接口2返回) + * 用于构建位置树,当 locationType = 3 时表示设备节点 + * 前端通过 deviceId 匹配 WebSocket 实时数据 */ -export interface LatestReadRecord { - /** 工位名称 */ - stationName: string; - /** 条码信息 */ - barcode: string; - /** 读取时间 */ - recordTime: string; - /** 读取状态 (1-成功;0-失败) */ - readStatus: string; +export interface LocationTreeNode { + // ==================== 位置信息 ==================== + /** 位置ID */ + id: number; + /** 位置编号 */ + locationCode: string; + /** 位置别名 */ + locationAlias: string; + /** 位置类型 (1-车间; 2-工序; 3-工位/设备) */ + locationType: string; + /** 父级位置ID */ + parentId: number | null; + + // ==================== 设备信息(仅当 locationType=3 时有值) ==================== + /** 设备ID(前端用于匹配 WebSocket 数据) */ + deviceId?: number; + /** 设备编号 */ + deviceCode?: string; + /** 设备名称 */ + deviceName?: string; + /** 在线状态 (1-在线; 0-离线) */ + onlineStatus?: string; + /** 告警状态 (0-正常; 1-告警) */ + alarmStatus?: string; + + // ==================== 子节点 ==================== + /** 子节点列表 */ + children?: LocationTreeNode[]; } /** - * 设备状态(接口2返回) - * 定时刷新:设备树 + 设备最新读取记录 + * WebSocket 实时推送的读取记录数据 + * 由 C# 服务推送,前端通过 deviceId 匹配位置树中的设备节点 */ -export interface DeviceStatusVO { - /** 设备ID */ +export interface WebSocketReadRecord { + /** 记录ID */ + objid: number; + /** 设备ID(用于匹配位置树中的设备节点) */ deviceId: number; - /** 设备编号 */ - deviceCode: string; - /** 设备名称 */ - deviceName: string; - /** 所属位置ID */ - locationId: number; - /** 位置别名 */ - locationAlias: string; - /** 在线状态 (1-在线;0-离线) */ - onlineStatus: string; - /** 告警状态 (0-正常;1-告警) */ - alarmStatus: string; - /** 最新读取记录 */ - latestRecord?: LatestReadRecord; + /** 读取状态 (1-成功; 0-失败) */ + readStatus: string; + /** 标签信息/条码 */ + epcStr: string; + /** 是否报警 (1-是; 0-否) */ + alarmFlag: string; + /** 告警级别 */ + alarmLevel: string; + /** 告警类型 */ + alarmType: string; + /** 告警内容 */ + alarmAction: string; + /** 记录时间 (ISO 8601 格式) */ + recordTime: string; } /** * 成功率趋势(接口3返回) - * 按小时统计 + * 按小时统计,同时返回今日和昨日的成功率 */ export interface SuccessRateTrend { /** 时间点(小时,如 "09:00") */ timePoint: string; - /** 成功率(百分比,如 98.5) */ + /** 今日成功率(百分比,如 98.5) */ successRate: number | null; + /** 昨日同一小时成功率 */ + yesterdaySuccessRate: number | null; }