From d649a617acc59afaebb308efcf728ab75475683e Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 18 May 2026 12:26:06 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=88iot=EF=BC=89=EF=BC=9A=E4=BC=98?= =?UTF-8?q?=E5=8C=96=20IoT=20=E8=AF=B7=E6=B1=82=E7=9A=84=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E9=A3=8E=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/api/iot/alert/config/index.ts | 53 +--- .../src/api/iot/alert/record/index.ts | 45 +--- .../src/api/iot/device/device/index.ts | 9 +- .../src/api/iot/ota/firmware/index.ts | 58 +---- apps/web-antd/src/api/iot/ota/task/index.ts | 72 +----- .../src/api/iot/ota/task/record/index.ts | 78 +----- .../src/api/iot/product/category/index.ts | 3 +- .../src/api/iot/product/product/index.ts | 10 +- .../src/api/iot/rule/data/rule/index.ts | 55 +--- .../src/api/iot/rule/data/sink/index.ts | 244 ++++++++++-------- apps/web-antd/src/api/iot/statistics/index.ts | 14 +- apps/web-antd/src/api/iot/thingmodel/index.ts | 157 +++++------ 12 files changed, 279 insertions(+), 519 deletions(-) diff --git a/apps/web-antd/src/api/iot/alert/config/index.ts b/apps/web-antd/src/api/iot/alert/config/index.ts index 26e114c0c..ac41c67c2 100644 --- a/apps/web-antd/src/api/iot/alert/config/index.ts +++ b/apps/web-antd/src/api/iot/alert/config/index.ts @@ -3,37 +3,22 @@ import type { PageParam, PageResult } from '@vben/request'; import { requestClient } from '#/api/request'; export namespace AlertConfigApi { - /** IoT 告警配置 VO */ + /** IoT 告警配置 */ export interface AlertConfig { id?: number; - name: string; + name?: string; description?: string; level?: number; status?: number; sceneRuleIds?: number[]; receiveUserIds?: number[]; - receiveUserNames?: string; + receiveUserNames?: string[]; receiveTypes?: number[]; createTime?: Date; updateTime?: Date; } } -/** IoT 告警配置 */ -export interface AlertConfig { - id?: number; - name?: string; - description?: string; - level?: number; - status?: number; - sceneRuleIds?: number[]; - receiveUserIds?: number[]; - receiveUserNames?: string; - receiveTypes?: number[]; - createTime?: Date; - updateTime?: Date; -} - /** 查询告警配置分页 */ export function getAlertConfigPage(params: PageParam) { return requestClient.get>( @@ -49,20 +34,20 @@ export function getAlertConfig(id: number) { ); } -/** 查询所有告警配置列表 */ -export function getAlertConfigList() { +/** 获取告警配置简单列表 */ +export function getSimpleAlertConfigList() { return requestClient.get( - '/iot/alert-config/list', + '/iot/alert-config/simple-list', ); } /** 新增告警配置 */ -export function createAlertConfig(data: AlertConfig) { +export function createAlertConfig(data: AlertConfigApi.AlertConfig) { return requestClient.post('/iot/alert-config/create', data); } /** 修改告警配置 */ -export function updateAlertConfig(data: AlertConfig) { +export function updateAlertConfig(data: AlertConfigApi.AlertConfig) { return requestClient.put('/iot/alert-config/update', data); } @@ -70,25 +55,3 @@ export function updateAlertConfig(data: AlertConfig) { export function deleteAlertConfig(id: number) { return requestClient.delete(`/iot/alert-config/delete?id=${id}`); } - -/** 批量删除告警配置 */ -export function deleteAlertConfigList(ids: number[]) { - return requestClient.delete('/iot/alert-config/delete-list', { - params: { ids: ids.join(',') }, - }); -} - -/** 启用/禁用告警配置 */ -export function toggleAlertConfig(id: number, enabled: boolean) { - return requestClient.put(`/iot/alert-config/toggle`, { - id, - enabled, - }); -} - -/** 获取告警配置简单列表 */ -export function getSimpleAlertConfigList() { - return requestClient.get( - '/iot/alert-config/simple-list', - ); -} diff --git a/apps/web-antd/src/api/iot/alert/record/index.ts b/apps/web-antd/src/api/iot/alert/record/index.ts index 6d2afcfcf..d0292d4d4 100644 --- a/apps/web-antd/src/api/iot/alert/record/index.ts +++ b/apps/web-antd/src/api/iot/alert/record/index.ts @@ -3,7 +3,7 @@ import type { PageParam, PageResult } from '@vben/request'; import { requestClient } from '#/api/request'; export namespace AlertRecordApi { - /** IoT 告警记录 VO */ + /** IoT 告警记录 */ export interface AlertRecord { id?: number; configId?: number; @@ -13,7 +13,7 @@ export namespace AlertRecordApi { deviceName?: string; productId?: number; productName?: string; - deviceMessage?: string; + deviceMessage?: any; processStatus?: boolean; processRemark?: string; processTime?: Date; @@ -21,23 +21,6 @@ export namespace AlertRecordApi { } } -/** IoT 告警记录 */ -export interface AlertRecord { - id?: number; - configId?: number; - configName?: string; - configLevel?: number; - deviceId?: number; - deviceName?: string; - productId?: number; - productName?: string; - deviceMessage?: string; - processStatus?: boolean; - processRemark?: string; - processTime?: Date; - createTime?: Date; -} - /** 查询告警记录分页 */ export function getAlertRecordPage(params: PageParam) { return requestClient.get>( @@ -54,29 +37,9 @@ export function getAlertRecord(id: number) { } /** 处理告警记录 */ -export function processAlertRecord(id: number, remark?: string) { +export function processAlertRecord(id: number, processRemark?: string) { return requestClient.put('/iot/alert-record/process', { id, - remark, - }); -} - -/** 批量处理告警记录 */ -export function batchProcessAlertRecord(ids: number[], remark?: string) { - return requestClient.put('/iot/alert-record/batch-process', { - ids, - remark, - }); -} - -/** 删除告警记录 */ -export function deleteAlertRecord(id: number) { - return requestClient.delete(`/iot/alert-record/delete?id=${id}`); -} - -/** 批量删除告警记录 */ -export function deleteAlertRecordList(ids: number[]) { - return requestClient.delete('/iot/alert-record/delete-list', { - params: { ids: ids.join(',') }, + processRemark, }); } diff --git a/apps/web-antd/src/api/iot/device/device/index.ts b/apps/web-antd/src/api/iot/device/device/index.ts index ca2a17ada..a55b017d5 100644 --- a/apps/web-antd/src/api/iot/device/device/index.ts +++ b/apps/web-antd/src/api/iot/device/device/index.ts @@ -150,11 +150,8 @@ export function importDeviceTemplate() { /** 导入设备 */ export function importDevice(file: File, updateSupport: boolean) { return requestClient.upload( - '/iot/device/import', - { - file, - updateSupport, - }, + `/iot/device/import?updateSupport=${updateSupport}`, + { file }, ); } @@ -168,7 +165,7 @@ export function getLatestDeviceProperties(params: any) { /** 获取设备属性历史数据 */ export function getHistoryDevicePropertyList(params: any) { - return requestClient.get>( + return requestClient.get( '/iot/device/property/history-list', { params }, ); diff --git a/apps/web-antd/src/api/iot/ota/firmware/index.ts b/apps/web-antd/src/api/iot/ota/firmware/index.ts index 1b8ae5b69..7fd7469ca 100644 --- a/apps/web-antd/src/api/iot/ota/firmware/index.ts +++ b/apps/web-antd/src/api/iot/ota/firmware/index.ts @@ -3,39 +3,22 @@ import type { PageParam, PageResult } from '@vben/request'; import { requestClient } from '#/api/request'; export namespace IoTOtaFirmwareApi { - /** IoT OTA 固件 VO */ + /** IoT OTA 固件信息 */ export interface Firmware { id?: number; - name: string; - version: string; - productId: number; - productName?: string; + name?: string; description?: string; + version?: string; + productId?: number; + productName?: string; fileUrl?: string; - fileMd5?: string; fileSize?: number; - status?: number; + fileDigestAlgorithm?: string; + fileDigestValue?: string; createTime?: Date; - updateTime?: Date; } } -/** IoT OTA 固件 */ -export interface IoTOtaFirmware { - id?: number; - name?: string; - version?: string; - productId?: number; - productName?: string; - description?: string; - fileUrl?: string; - fileMd5?: string; - fileSize?: number; - status?: number; - createTime?: Date; - updateTime?: Date; -} - /** 查询 OTA 固件分页 */ export function getOtaFirmwarePage(params: PageParam) { return requestClient.get>( @@ -52,12 +35,12 @@ export function getOtaFirmware(id: number) { } /** 新增 OTA 固件 */ -export function createOtaFirmware(data: IoTOtaFirmware) { +export function createOtaFirmware(data: IoTOtaFirmwareApi.Firmware) { return requestClient.post('/iot/ota/firmware/create', data); } /** 修改 OTA 固件 */ -export function updateOtaFirmware(data: IoTOtaFirmware) { +export function updateOtaFirmware(data: IoTOtaFirmwareApi.Firmware) { return requestClient.put('/iot/ota/firmware/update', data); } @@ -65,26 +48,3 @@ export function updateOtaFirmware(data: IoTOtaFirmware) { export function deleteOtaFirmware(id: number) { return requestClient.delete(`/iot/ota/firmware/delete?id=${id}`); } - -/** 批量删除 OTA 固件 */ -export function deleteOtaFirmwareList(ids: number[]) { - return requestClient.delete('/iot/ota/firmware/delete-list', { - params: { ids: ids.join(',') }, - }); -} - -/** 更新 OTA 固件状态 */ -export function updateOtaFirmwareStatus(id: number, status: number) { - return requestClient.put(`/iot/ota/firmware/update-status`, { - id, - status, - }); -} - -/** 根据产品 ID 查询固件列表 */ -export function getOtaFirmwareListByProductId(productId: number) { - return requestClient.get( - '/iot/ota/firmware/list-by-product-id', - { params: { productId } }, - ); -} diff --git a/apps/web-antd/src/api/iot/ota/task/index.ts b/apps/web-antd/src/api/iot/ota/task/index.ts index 25ef2429f..7f4f5d6fb 100644 --- a/apps/web-antd/src/api/iot/ota/task/index.ts +++ b/apps/web-antd/src/api/iot/ota/task/index.ts @@ -3,45 +3,21 @@ import type { PageParam, PageResult } from '@vben/request'; import { requestClient } from '#/api/request'; export namespace IoTOtaTaskApi { - /** IoT OTA 升级任务 VO */ + /** IoT OTA 升级任务 */ export interface Task { id?: number; - name: string; + name?: string; description?: string; - firmwareId: number; - firmwareName?: string; - productId?: number; - productName?: string; + firmwareId?: number; + status?: number; deviceScope?: number; deviceIds?: number[]; - status?: number; - successCount?: number; - failureCount?: number; - pendingCount?: number; + deviceTotalCount?: number; + deviceSuccessCount?: number; createTime?: Date; - updateTime?: Date; } } -/** IoT OTA 升级任务 */ -export interface OtaTask { - id?: number; - name?: string; - description?: string; - firmwareId?: number; - firmwareName?: string; - productId?: number; - productName?: string; - deviceScope?: number; - deviceIds?: number[]; - status?: number; - successCount?: number; - failureCount?: number; - pendingCount?: number; - createTime?: Date; - updateTime?: Date; -} - /** 查询 OTA 升级任务分页 */ export function getOtaTaskPage(params: PageParam) { return requestClient.get>( @@ -56,43 +32,11 @@ export function getOtaTask(id: number) { } /** 新增 OTA 升级任务 */ -export function createOtaTask(data: OtaTask) { +export function createOtaTask(data: IoTOtaTaskApi.Task) { return requestClient.post('/iot/ota/task/create', data); } -/** 修改 OTA 升级任务 */ -export function updateOtaTask(data: OtaTask) { - return requestClient.put('/iot/ota/task/update', data); -} - -/** 删除 OTA 升级任务 */ -export function deleteOtaTask(id: number) { - return requestClient.delete(`/iot/ota/task/delete?id=${id}`); -} - -/** 批量删除 OTA 升级任务 */ -export function deleteOtaTaskList(ids: number[]) { - return requestClient.delete('/iot/ota/task/delete-list', { - params: { ids: ids.join(',') }, - }); -} - /** 取消 OTA 升级任务 */ export function cancelOtaTask(id: number) { - return requestClient.put(`/iot/ota/task/cancel?id=${id}`); -} - -/** 启动 OTA 升级任务 */ -export function startOtaTask(id: number) { - return requestClient.put(`/iot/ota/task/start?id=${id}`); -} - -/** 暂停 OTA 升级任务 */ -export function pauseOtaTask(id: number) { - return requestClient.put(`/iot/ota/task/pause?id=${id}`); -} - -/** 恢复 OTA 升级任务 */ -export function resumeOtaTask(id: number) { - return requestClient.put(`/iot/ota/task/resume?id=${id}`); + return requestClient.post(`/iot/ota/task/cancel?id=${id}`); } diff --git a/apps/web-antd/src/api/iot/ota/task/record/index.ts b/apps/web-antd/src/api/iot/ota/task/record/index.ts index 2d66a422f..29eada8b6 100644 --- a/apps/web-antd/src/api/iot/ota/task/record/index.ts +++ b/apps/web-antd/src/api/iot/ota/task/record/index.ts @@ -3,44 +3,24 @@ import type { PageParam, PageResult } from '@vben/request'; import { requestClient } from '#/api/request'; export namespace IoTOtaTaskRecordApi { - /** IoT OTA 升级任务记录 VO */ + /** IoT OTA 升级任务记录 */ export interface TaskRecord { id?: number; - taskId: number; - taskName?: string; - deviceId: number; - deviceName?: string; firmwareId?: number; - firmwareName?: string; firmwareVersion?: string; + taskId?: number; + deviceId?: string; + deviceName?: string; + currentVersion?: string; + fromFirmwareId?: number; + fromFirmwareVersion?: string; status?: number; progress?: number; - errorMessage?: string; - startTime?: Date; - endTime?: Date; - createTime?: Date; + description?: string; + updateTime?: Date; } } -// TODO @AI:这里应该拿到 IoTOtaTaskRecordApi 里 -/** IoT OTA 升级任务记录 */ -export interface OtaTaskRecord { - id?: number; - taskId?: number; - taskName?: string; - deviceId?: number; - deviceName?: string; - firmwareId?: number; - firmwareName?: string; - firmwareVersion?: string; - status?: number; - progress?: number; - errorMessage?: string; - startTime?: Date; - endTime?: Date; - createTime?: Date; -} - /** 查询 OTA 升级任务记录分页 */ export function getOtaTaskRecordPage(params: PageParam) { return requestClient.get>( @@ -49,48 +29,12 @@ export function getOtaTaskRecordPage(params: PageParam) { ); } -/** 查询 OTA 升级任务记录详情 */ -export function getOtaTaskRecord(id: number) { - return requestClient.get( - `/iot/ota/task/record/get?id=${id}`, - ); -} - -/** 根据任务 ID 查询记录列表 */ -export function getOtaTaskRecordListByTaskId(taskId: number) { - return requestClient.get( - '/iot/ota/task/record/list-by-task-id', - { params: { taskId } }, - ); -} - -/** 根据设备 ID 查询记录列表 */ -export function getOtaTaskRecordListByDeviceId(deviceId: number) { - return requestClient.get( - '/iot/ota/task/record/list-by-device-id', - { params: { deviceId } }, - ); -} - -/** 根据固件 ID 查询记录列表 */ -export function getOtaTaskRecordListByFirmwareId(firmwareId: number) { - return requestClient.get( - '/iot/ota/task/record/list-by-firmware-id', - { params: { firmwareId } }, - ); -} - -/** 重试升级任务记录 */ -export function retryOtaTaskRecord(id: number) { - return requestClient.put(`/iot/ota/task/record/retry?id=${id}`); -} - -/** 取消升级任务记录 */ +/** 取消 OTA 升级任务记录 */ export function cancelOtaTaskRecord(id: number) { return requestClient.put(`/iot/ota/task/record/cancel?id=${id}`); } -/** 获取升级任务记录状态统计 */ +/** 获取 OTA 升级任务记录状态统计 */ export function getOtaTaskRecordStatusStatistics( firmwareId?: number, taskId?: number, diff --git a/apps/web-antd/src/api/iot/product/category/index.ts b/apps/web-antd/src/api/iot/product/category/index.ts index 24d02ed3b..45ce4ccdb 100644 --- a/apps/web-antd/src/api/iot/product/category/index.ts +++ b/apps/web-antd/src/api/iot/product/category/index.ts @@ -7,11 +7,10 @@ export namespace IotProductCategoryApi { export interface ProductCategory { id?: number; // 分类 ID name: string; // 分类名称 - parentId?: number; // 父级分类 ID sort?: number; // 分类排序 status?: number; // 分类状态 description?: string; // 分类描述 - createTime?: string; // 创建时间 + createTime?: Date; // 创建时间 } } diff --git a/apps/web-antd/src/api/iot/product/product/index.ts b/apps/web-antd/src/api/iot/product/product/index.ts index f77255f4d..9d0bb3515 100644 --- a/apps/web-antd/src/api/iot/product/product/index.ts +++ b/apps/web-antd/src/api/iot/product/product/index.ts @@ -20,8 +20,6 @@ export namespace IotProductApi { deviceType?: number; // 设备类型 netType?: number; // 联网方式 serializeType?: string; // 序列化类型 - dataFormat?: number; // 数据格式 - validateType?: number; // 认证方式 registerEnabled?: boolean; // 是否开启动态注册 deviceCount?: number; // 设备数量 createTime?: Date; // 创建时间 @@ -103,3 +101,11 @@ export function getProductByKey(productKey: string) { params: { productKey }, }); } + +// TODO @AI:这个是不是 vue3 + ep 也没做?感觉对齐就好,不用额外做。 +/** 同步产品物模型 TDengine 超级表结构 */ +export function syncProductPropertyTable(productId: number) { + return requestClient.post( + `/iot/product/sync-property-table?productId=${productId}`, + ); +} diff --git a/apps/web-antd/src/api/iot/rule/data/rule/index.ts b/apps/web-antd/src/api/iot/rule/data/rule/index.ts index 55e50184a..e9ba120b2 100644 --- a/apps/web-antd/src/api/iot/rule/data/rule/index.ts +++ b/apps/web-antd/src/api/iot/rule/data/rule/index.ts @@ -3,45 +3,21 @@ import type { PageParam, PageResult } from '@vben/request'; import { requestClient } from '#/api/request'; export namespace DataRuleApi { - /** IoT 数据流转规则 VO */ - export interface Rule { + /** IoT 数据流转规则 */ + export interface DataRule { id?: number; - name: string; + name?: string; description?: string; status?: number; - productId?: number; - productKey?: string; - sourceConfigs?: SourceConfig[]; + sourceConfigs?: any[]; sinkIds?: number[]; createTime?: Date; } - - /** IoT 数据源配置 */ - export interface SourceConfig { - productId?: number; - productKey?: string; - deviceId?: number; - type?: string; - topic?: string; - } -} - -/** IoT 数据流转规则 */ -export interface DataRule { - id?: number; - name?: string; - description?: string; - status?: number; - productId?: number; - productKey?: string; - sourceConfigs?: any[]; - sinkIds?: number[]; - createTime?: Date; } /** 查询数据流转规则分页 */ export function getDataRulePage(params: PageParam) { - return requestClient.get>( + return requestClient.get>( '/iot/data-rule/page', { params }, ); @@ -49,16 +25,16 @@ export function getDataRulePage(params: PageParam) { /** 查询数据流转规则详情 */ export function getDataRule(id: number) { - return requestClient.get(`/iot/data-rule/get?id=${id}`); + return requestClient.get(`/iot/data-rule/get?id=${id}`); } /** 新增数据流转规则 */ -export function createDataRule(data: DataRule) { +export function createDataRule(data: DataRuleApi.DataRule) { return requestClient.post('/iot/data-rule/create', data); } /** 修改数据流转规则 */ -export function updateDataRule(data: DataRule) { +export function updateDataRule(data: DataRuleApi.DataRule) { return requestClient.put('/iot/data-rule/update', data); } @@ -66,18 +42,3 @@ export function updateDataRule(data: DataRule) { export function deleteDataRule(id: number) { return requestClient.delete(`/iot/data-rule/delete?id=${id}`); } - -/** 批量删除数据流转规则 */ -export function deleteDataRuleList(ids: number[]) { - return requestClient.delete('/iot/data-rule/delete-list', { - params: { ids: ids.join(',') }, - }); -} - -/** 更新数据流转规则状态 */ -export function updateDataRuleStatus(id: number, status: number) { - return requestClient.put(`/iot/data-rule/update-status`, { - id, - status, - }); -} diff --git a/apps/web-antd/src/api/iot/rule/data/sink/index.ts b/apps/web-antd/src/api/iot/rule/data/sink/index.ts index 4614c2a6e..c4d1429ce 100644 --- a/apps/web-antd/src/api/iot/rule/data/sink/index.ts +++ b/apps/web-antd/src/api/iot/rule/data/sink/index.ts @@ -2,101 +2,147 @@ import type { PageParam, PageResult } from '@vben/request'; import { requestClient } from '#/api/request'; +interface BaseConfig { + type: string; +} + export namespace DataSinkApi { /** IoT 数据流转目的 VO */ - export interface Sink { + export interface DataSink { id?: number; - name: string; + name?: string; description?: string; status?: number; - type: string; - config?: any; + direction?: number; + type?: number; + config?: + | DatabaseConfig + | HttpConfig + | KafkaMQConfig + | MqttConfig + | RabbitMQConfig + | RedisStreamMQConfig + | RocketMQConfig + | TcpConfig + | WebSocketConfig; createTime?: Date; } + + /** HTTP 配置 */ + export interface HttpConfig extends BaseConfig { + url: string; + method: string; + headers: Record; + query: Record; + body: string; + } + + /** TCP 配置 */ + export interface TcpConfig extends BaseConfig { + host: string; + port: number; + connectTimeoutMs: number; + readTimeoutMs: number; + ssl: boolean; + sslCertPath: string; + dataFormat: string; + heartbeatIntervalMs: number; + reconnectIntervalMs: number; + maxReconnectAttempts: number; + } + + /** WebSocket 配置 */ + export interface WebSocketConfig extends BaseConfig { + serverUrl: string; + connectTimeoutMs: number; + sendTimeoutMs: number; + heartbeatIntervalMs: number; + heartbeatMessage: string; + subprotocols: string; + customHeaders: string; + verifySslCert: boolean; + dataFormat: string; + reconnectIntervalMs: number; + maxReconnectAttempts: number; + enableCompression: boolean; + sendRetryCount: number; + sendRetryIntervalMs: number; + } + + /** MQTT 配置 */ + export interface MqttConfig extends BaseConfig { + url: string; + username: string; + password: string; + clientId: string; + topic: string; + } + + /** Database 配置 */ + export interface DatabaseConfig extends BaseConfig { + jdbcUrl: string; + username: string; + password: string; + tableName: string; + } + + /** RocketMQ 配置 */ + export interface RocketMQConfig extends BaseConfig { + nameServer: string; + accessKey: string; + secretKey: string; + group: string; + topic: string; + tags: string; + } + + /** Kafka 配置 */ + export interface KafkaMQConfig extends BaseConfig { + bootstrapServers: string; + username: string; + password: string; + ssl: boolean; + topic: string; + } + + /** RabbitMQ 配置 */ + export interface RabbitMQConfig extends BaseConfig { + host: string; + port: number; + virtualHost: string; + username: string; + password: string; + exchange: string; + routingKey: string; + queue: string; + } + + /** Redis Stream MQ 配置 */ + export interface RedisStreamMQConfig extends BaseConfig { + host: string; + port: number; + password: string; + database: number; + topic: string; + } } -/** IoT 数据流转目的 */ -export interface DataSinkVO { - id?: number; - name?: string; - description?: string; - status?: number; - type?: string; - config?: any; - createTime?: Date; -} - -/** IoT 数据目的类型枚举 */ -export enum IotDataSinkTypeEnum { - HTTP = 'HTTP', - KAFKA = 'KAFKA', - MQTT = 'MQTT', - RABBITMQ = 'RABBITMQ', - REDIS_STREAM = 'REDIS_STREAM', - ROCKETMQ = 'ROCKETMQ', -} - -/** HTTP 配置 */ -export interface HttpConfig { - url?: string; - method?: string; - headers?: Record; - timeout?: number; -} - -/** MQTT 配置 */ -export interface MqttConfig { - broker?: string; - port?: number; - topic?: string; - username?: string; - password?: string; - clientId?: string; - qos?: number; -} - -/** Kafka 配置 */ -export interface KafkaMQConfig { - bootstrapServers?: string; - topic?: string; - acks?: string; - retries?: number; - batchSize?: number; -} - -/** RabbitMQ 配置 */ -export interface RabbitMQConfig { - host?: string; - port?: number; - virtualHost?: string; - username?: string; - password?: string; - exchange?: string; - routingKey?: string; - queue?: string; -} - -/** RocketMQ 配置 */ -export interface RocketMQConfig { - nameServer?: string; - topic?: string; - tag?: string; - producerGroup?: string; -} - -/** Redis Stream 配置 */ -export interface RedisStreamMQConfig { - host?: string; - port?: number; - password?: string; - database?: number; - streamKey?: string; - maxLen?: number; -} +/** 数据流转目的类型 */ +export const IotDataSinkTypeEnum = { + HTTP: 1, + TCP: 2, + WEBSOCKET: 3, + MQTT: 10, + DATABASE: 20, + REDIS_STREAM: 21, + ROCKETMQ: 30, + RABBITMQ: 31, + KAFKA: 32, +} as const; /** 查询数据流转目的分页 */ export function getDataSinkPage(params: PageParam) { - return requestClient.get>( + return requestClient.get>( '/iot/data-sink/page', { params }, ); @@ -104,26 +150,23 @@ export function getDataSinkPage(params: PageParam) { /** 查询数据流转目的详情 */ export function getDataSink(id: number) { - return requestClient.get(`/iot/data-sink/get?id=${id}`); + return requestClient.get( + `/iot/data-sink/get?id=${id}`, + ); } -/** 查询所有数据流转目的列表 */ -export function getDataSinkList() { - return requestClient.get('/iot/data-sink/list'); -} - -/** 查询数据流转目的简单列表 */ +/** 查询数据流转目的(精简)列表 */ export function getDataSinkSimpleList() { - return requestClient.get('/iot/data-sink/simple-list'); + return requestClient.get('/iot/data-sink/simple-list'); } /** 新增数据流转目的 */ -export function createDataSink(data: DataSinkVO) { +export function createDataSink(data: DataSinkApi.DataSink) { return requestClient.post('/iot/data-sink/create', data); } /** 修改数据流转目的 */ -export function updateDataSink(data: DataSinkVO) { +export function updateDataSink(data: DataSinkApi.DataSink) { return requestClient.put('/iot/data-sink/update', data); } @@ -131,18 +174,3 @@ export function updateDataSink(data: DataSinkVO) { export function deleteDataSink(id: number) { return requestClient.delete(`/iot/data-sink/delete?id=${id}`); } - -/** 批量删除数据流转目的 */ -export function deleteDataSinkList(ids: number[]) { - return requestClient.delete('/iot/data-sink/delete-list', { - params: { ids: ids.join(',') }, - }); -} - -/** 更新数据流转目的状态 */ -export function updateDataSinkStatus(id: number, status: number) { - return requestClient.put(`/iot/data-sink/update-status`, { - id, - status, - }); -} diff --git a/apps/web-antd/src/api/iot/statistics/index.ts b/apps/web-antd/src/api/iot/statistics/index.ts index a02b342d2..7e5943045 100644 --- a/apps/web-antd/src/api/iot/statistics/index.ts +++ b/apps/web-antd/src/api/iot/statistics/index.ts @@ -17,21 +17,9 @@ export namespace IotStatisticsApi { productCategoryDeviceCounts: Record; // 按品类统计的设备数量 } - /** 时间戳-数值的键值对类型 */ - export interface TimeValueItem { - [key: string]: number; - } - - /** 消息统计数据类型 */ - export interface DeviceMessageSummary { - statType: number; - upstreamCounts: TimeValueItem[]; - downstreamCounts: TimeValueItem[]; - } - /** 设备消息数量统计(按日期) */ export interface DeviceMessageSummaryByDateRespVO { - time: string; // 时间轴 + time: Date; // 时间轴 upstreamCount: number; // 上行消息数量 downstreamCount: number; // 下行消息数量 } diff --git a/apps/web-antd/src/api/iot/thingmodel/index.ts b/apps/web-antd/src/api/iot/thingmodel/index.ts index aa1ba3adb..c8bcb7950 100644 --- a/apps/web-antd/src/api/iot/thingmodel/index.ts +++ b/apps/web-antd/src/api/iot/thingmodel/index.ts @@ -4,80 +4,82 @@ import { isEmpty } from '@vben/utils'; import { requestClient } from '#/api/request'; -/** IoT 物模型数据 */ -export interface ThingModelData { - id?: number; - productId?: number; - productKey?: string; - identifier?: string; - name?: string; - description?: string; - dataType?: string; - type?: number; // 参见 IoTThingModelTypeEnum 枚举类 - property?: ThingModelProperty; - event?: ThingModelEvent; - service?: ThingModelService; -} +export namespace ThingModelApi { + /** IoT 物模型数据 */ + export interface ThingModel { + id?: number; + productId?: number; + productKey?: string; + identifier?: string; + name?: string; + description?: string; + dataType?: string; + type?: number; // 参见 IoTThingModelTypeEnum 枚举类 + property?: Property; + event?: Event; + service?: Service; + } -/** IoT 物模型属性 */ -export interface ThingModelProperty { - identifier?: string; - name?: string; - accessMode?: string; - required?: boolean; - dataType?: string; - description?: string; - dataSpecs?: any; - dataSpecsList?: any[]; -} + /** IoT 物模型属性 */ + export interface Property { + identifier?: string; + name?: string; + accessMode?: string; + required?: boolean; + dataType?: string; + description?: string; + dataSpecs?: any; + dataSpecsList?: any[]; + } -/** IoT 物模型服务 */ -export interface ThingModelService { - identifier?: string; - name?: string; - required?: boolean; - callType?: string; - description?: string; - inputParams?: ThingModelParam[]; - outputParams?: ThingModelParam[]; - method?: string; -} + /** IoT 物模型服务 */ + export interface Service { + identifier?: string; + name?: string; + required?: boolean; + callType?: string; + description?: string; + inputParams?: Param[]; + outputParams?: Param[]; + method?: string; + } -/** IoT 物模型事件 */ -export interface ThingModelEvent { - identifier?: string; - name?: string; - required?: boolean; - type?: string; - description?: string; - outputParams?: ThingModelParam[]; - method?: string; -} + /** IoT 物模型事件 */ + export interface Event { + identifier?: string; + name?: string; + required?: boolean; + type?: string; + description?: string; + outputParams?: Param[]; + method?: string; + } -/** IoT 物模型参数 */ -export interface ThingModelParam { - identifier?: string; - name?: string; - direction?: string; - paraOrder?: number; - dataType?: string; - dataSpecs?: any; - dataSpecsList?: any[]; -} + /** IoT 物模型参数 */ + export interface Param { + identifier?: string; + name?: string; + direction?: string; + paraOrder?: number; + dataType?: string; + dataSpecs?: any; + dataSpecsList?: any[]; + } -/** IoT 数据定义(数值型) */ -export interface DataSpecsNumberData { - min?: number | string; - max?: number | string; - step?: number | string; - unit?: string; - unitName?: string; -} + /** IoT 数据定义(数值型) */ + export interface DataSpecsNumberData { + min?: number | string; + max?: number | string; + step?: number | string; + unit?: string; + unitName?: string; + } -/** IoT 数据定义(枚举/布尔型) */ -export interface DataSpecsEnumOrBoolData { - value: number | string; - name: string; + /** IoT 数据定义(枚举/布尔型) */ + export interface DataSpecsEnumOrBoolData { + value: number | string; + name: string; + } } /** 生成「必填 + 数字」类校验器:拼到 size / length / 枚举值上 */ @@ -192,7 +194,7 @@ export const validateBoolName = buildIdentifierLikeNameValidator('布尔值名 /** 查询产品物模型分页 */ export function getThingModelPage(params: PageParam) { - return requestClient.get>( + return requestClient.get>( '/iot/thing-model/page', { params }, ); @@ -200,23 +202,28 @@ export function getThingModelPage(params: PageParam) { /** 查询产品物模型详情 */ export function getThingModel(id: number) { - return requestClient.get(`/iot/thing-model/get?id=${id}`); + return requestClient.get( + `/iot/thing-model/get?id=${id}`, + ); } /** 根据产品 ID 查询物模型列表 */ export function getThingModelListByProductId(productId: number) { - return requestClient.get('/iot/thing-model/list', { - params: { productId }, - }); + return requestClient.get( + '/iot/thing-model/list', + { + params: { productId }, + }, + ); } /** 新增物模型 */ -export function createThingModel(data: ThingModelData) { +export function createThingModel(data: ThingModelApi.ThingModel) { return requestClient.post('/iot/thing-model/create', data); } /** 修改物模型 */ -export function updateThingModel(data: ThingModelData) { +export function updateThingModel(data: ThingModelApi.ThingModel) { return requestClient.put('/iot/thing-model/update', data); }