获取设备列表接口增加设备状态

This commit is contained in:
2025-09-08 23:41:04 +08:00
parent bdbab31181
commit 75f9e07fcc
2 changed files with 53 additions and 2 deletions

View File

@@ -222,6 +222,7 @@ func (a *API) setupRoutes() {
deviceGroup.POST("/create", a.deviceController.Create) deviceGroup.POST("/create", a.deviceController.Create)
deviceGroup.POST("/update", a.deviceController.Update) deviceGroup.POST("/update", a.deviceController.Update)
deviceGroup.POST("/delete", a.deviceController.Delete) deviceGroup.POST("/delete", a.deviceController.Delete)
deviceGroup.GET("/status", a.deviceController.GetDeviceStatus)
} }
// 远程控制相关路由 // 远程控制相关路由

View File

@@ -17,7 +17,13 @@ import (
// ListResponse 设备列表响应结构体 // ListResponse 设备列表响应结构体
type ListResponse struct { type ListResponse struct {
Devices []model.Device `json:"devices"` Devices []DeviceListItem `json:"devices"`
}
// DeviceListItem 设备列表项结构体
type DeviceListItem struct {
model.Device
Active bool `json:"active"`
} }
// DeviceRequest 设备创建/更新请求结构体 // DeviceRequest 设备创建/更新请求结构体
@@ -140,7 +146,22 @@ func (c *Controller) List(ctx *gin.Context) {
return return
} }
controller.SendSuccessResponse(ctx, "获取设备列表成功", ListResponse{Devices: devices}) // 构建设备列表项,包含设备状态信息
deviceList := make([]DeviceListItem, len(devices))
for i, device := range devices {
// 从设备状态池获取设备状态,默认为非激活状态
active := false
if status, exists := c.deviceStatusPool.GetStatus(strconv.FormatUint(uint64(device.ID), 10)); exists {
active = status.Active
}
deviceList[i] = DeviceListItem{
Device: device,
Active: active,
}
}
controller.SendSuccessResponse(ctx, "获取设备列表成功", ListResponse{Devices: deviceList})
} }
// Create 创建设备 // Create 创建设备
@@ -290,6 +311,12 @@ type SwitchResponseData struct {
Message string `json:"message"` // 添加消息字段 Message string `json:"message"` // 添加消息字段
} }
// DeviceStatusResponse 设备状态响应结构体
type DeviceStatusResponse struct {
DeviceID string `json:"device_id"`
Active bool `json:"active"`
}
// RelayControlData 发送给中继设备的控制数据结构体 // RelayControlData 发送给中继设备的控制数据结构体
type RelayControlData struct { type RelayControlData struct {
DeviceType string `json:"device_type"` DeviceType string `json:"device_type"`
@@ -438,3 +465,26 @@ func (c *Controller) createDeviceControlRecord(userID uint, deviceID, deviceType
return c.deviceControlRepo.Create(control) return c.deviceControlRepo.Create(control)
} }
// GetDeviceStatus 获取设备当前状态
func (c *Controller) GetDeviceStatus(ctx *gin.Context) {
deviceID := ctx.Query("device_id")
if deviceID == "" {
controller.SendErrorResponse(ctx, controller.InvalidParameterCode, "设备ID不能为空")
return
}
// 从设备状态池中获取设备状态
status, exists := c.deviceStatusPool.GetStatus(deviceID)
if !exists {
controller.SendErrorResponse(ctx, controller.NotFoundCode, "设备状态不存在")
return
}
response := DeviceStatusResponse{
DeviceID: deviceID,
Active: status.Active,
}
controller.SendSuccessResponse(ctx, "获取设备状态成功", response)
}