From 5d1b642cc8893bc000c7bcf457aae44a93cfbed9 Mon Sep 17 00:00:00 2001 From: huang <1724659546@qq.com> Date: Sat, 27 Sep 2025 01:03:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=A1=E9=AA=8Cdevice=E5=92=8Ctask=E7=9A=84?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E7=9A=84=E5=9C=B0=E6=96=B9=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E7=94=A8=E5=86=85=E7=BD=AE=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/controller/device/device_controller.go | 14 ++++++++++++++ .../service/device/general_device_service.go | 17 ++++------------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/internal/app/controller/device/device_controller.go b/internal/app/controller/device/device_controller.go index a40c4d4..97d5d10 100644 --- a/internal/app/controller/device/device_controller.go +++ b/internal/app/controller/device/device_controller.go @@ -143,6 +143,13 @@ func (c *Controller) CreateDevice(ctx *gin.Context) { Properties: propertiesJSON, } + // 在创建设备前进行自检 + if !device.SelfCheck() { + c.logger.Errorf("创建设备: 设备属性自检失败: %v", device) + controller.SendErrorResponse(ctx, controller.CodeBadRequest, "设备属性不符合要求") + return + } + if err := c.repo.Create(device); err != nil { c.logger.Errorf("创建设备: 数据库操作失败: %v", err) controller.SendErrorResponse(ctx, controller.CodeInternalError, "创建设备失败") @@ -272,6 +279,13 @@ func (c *Controller) UpdateDevice(ctx *gin.Context) { existingDevice.Location = req.Location existingDevice.Properties = propertiesJSON + // 在更新设备前进行自检 + if !existingDevice.SelfCheck() { + c.logger.Errorf("更新设备: 设备属性自检失败: %v", existingDevice) + controller.SendErrorResponse(ctx, controller.CodeBadRequest, "设备属性不符合要求") + return + } + // 4. 将修改后的 existingDevice 对象保存回数据库 if err := c.repo.Update(existingDevice); err != nil { c.logger.Errorf("更新设备: 数据库操作失败: %v", err) diff --git a/internal/app/service/device/general_device_service.go b/internal/app/service/device/general_device_service.go index 27a07fe..7c8015d 100644 --- a/internal/app/service/device/general_device_service.go +++ b/internal/app/service/device/general_device_service.go @@ -57,19 +57,10 @@ func (g *GeneralDeviceService) Switch(device *models.Device, action DeviceAction return fmt.Errorf("解析设备 %v(id=%v) 配置失败: %v", device.Name, device.ID, err) } - // TODO 这种校验放自检里 - busNumber, err := strconv.Atoi(fmt.Sprintf("%v", deviceInfo[models.BusNumber])) - if err != nil { - return fmt.Errorf("无效的总线号: %v", err) - } - busAddress, err := strconv.Atoi(fmt.Sprintf("%v", deviceInfo[models.BusAddress])) - if err != nil { - return fmt.Errorf("无效的总线地址: %v", err) - } - relayChannel, err := strconv.Atoi(fmt.Sprintf("%v", deviceInfo[models.RelayChannel])) - if err != nil { - return fmt.Errorf("无效的继电器通道: %v", err) - } + // TODO 这种校验放自检里 (已通过 SelfCheck 保证其为纯数字,此处仅进行类型转换) + busNumber, _ := strconv.Atoi(fmt.Sprintf("%v", deviceInfo[models.BusNumber])) + busAddress, _ := strconv.Atoi(fmt.Sprintf("%v", deviceInfo[models.BusAddress])) + relayChannel, _ := strconv.Atoi(fmt.Sprintf("%v", deviceInfo[models.RelayChannel])) data, err := anypb.New(&proto.Switch{ DeviceAction: string(action),