From 97c750778aec5a531f7ad315426a27991279f598 Mon Sep 17 00:00:00 2001 From: huang <1724659546@qq.com> Date: Thu, 25 Sep 2025 11:27:14 +0800 Subject: [PATCH] =?UTF-8?q?ReleaseFeedWeightTask=20=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E4=BD=93=E4=BB=A3=E6=9B=BFmap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/task/release_feed_weight_task.go | 43 +++++++++++++------ 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/internal/app/service/task/release_feed_weight_task.go b/internal/app/service/task/release_feed_weight_task.go index 868dfc0..d3a89a4 100644 --- a/internal/app/service/task/release_feed_weight_task.go +++ b/internal/app/service/task/release_feed_weight_task.go @@ -12,14 +12,12 @@ import ( "git.huangwc.com/pig/pig-farm-controller/internal/infra/transport" ) -const ( - // 这个参数是 TaskTaskReleaseFeedWeight 类型的 Task Parameters 中用于记录释放的重量字段的key - ParamsReleaseWeight = "release_weight" - // 这个参数是 TaskTaskReleaseFeedWeight 类型的 Task Parameters 中用于记录下料口ID字段的key - ParamsFeedPortDeviceID = "feed_port_device_id" - // 这个参数是 TaskTaskReleaseFeedWeight 类型的 Task Parameters 中用于记录称重传感器ID字段的key - ParamsMixingTankDeviceID = "mixing_tank_device_id" -) +// ReleaseFeedWeightTaskParams 定义了 ReleaseFeedWeightTask 的参数结构 +type ReleaseFeedWeightTaskParams struct { + ReleaseWeight float64 `json:"release_weight"` // 需要释放的重量 + FeedPortDeviceID uint `json:"feed_port_device_id"` // 下料口ID + MixingTankDeviceID uint `json:"mixing_tank_device_id"` // 称重传感器ID +} // ReleaseFeedWeightTask 是一个控制下料口释放指定重量的任务 type ReleaseFeedWeightTask struct { @@ -99,6 +97,10 @@ func (r *ReleaseFeedWeightTask) getNowWeight() (float64, error) { return 0, err } + if sensorData == nil { + return 0, fmt.Errorf("未找到设备 %v 的最新重量传感器数据", r.mixingTankDeviceID) + } + wg := &models.WeightData{} err = json.Unmarshal(sensorData.Data, wg) if err != nil { @@ -115,22 +117,35 @@ func (r *ReleaseFeedWeightTask) parseParameters() error { return fmt.Errorf("任务 %v: 参数不全", r.claimedLog.TaskID) } - // TODO 定义成结构体放model包中 - var params map[string]interface{} + var params ReleaseFeedWeightTaskParams err := json.Unmarshal(r.claimedLog.Task.Parameters, ¶ms) if err != nil { r.logger.Errorf("任务 %v: 解析参数失败: %v", r.claimedLog.TaskID, err) return fmt.Errorf("任务 %v: 解析参数失败: %v", r.claimedLog.TaskID, err) } - r.releaseWeight = params[ParamsReleaseWeight].(float64) - r.mixingTankDeviceID = params[ParamsMixingTankDeviceID].(uint) - r.feedPortDevice, err = r.deviceRepo.FindByID(params[ParamsFeedPortDeviceID].(uint)) + // 校验参数是否存在 + if params.ReleaseWeight == 0 { + r.logger.Errorf("任务 %v: 参数 release_weight 缺失或无效", r.claimedLog.TaskID) + return fmt.Errorf("任务 %v: 参数 release_weight 缺失或无效", r.claimedLog.TaskID) + } + if params.FeedPortDeviceID == 0 { + r.logger.Errorf("任务 %v: 参数 feed_port_device_id 缺失或无效", r.claimedLog.TaskID) + return fmt.Errorf("任务 %v: 参数 feed_port_device_id 缺失或无效", r.claimedLog.TaskID) + } + if params.MixingTankDeviceID == 0 { + r.logger.Errorf("任务 %v: 参数 mixing_tank_device_id 缺失或无效", r.claimedLog.TaskID) + return fmt.Errorf("任务 %v: 参数 mixing_tank_device_id 缺失或无效", r.claimedLog.TaskID) + } + + r.releaseWeight = params.ReleaseWeight + r.mixingTankDeviceID = params.MixingTankDeviceID + r.feedPort = device.NewGeneralDeviceService(r.deviceRepo, r.logger, r.comm) + r.feedPortDevice, err = r.deviceRepo.FindByID(params.FeedPortDeviceID) if err != nil { r.logger.Errorf("任务 %v: 获取设备信息失败: %v", r.claimedLog.TaskID, err) return fmt.Errorf("任务 %v: 获取设备信息失败: %v", r.claimedLog.TaskID, err) } - r.feedPort = device.NewGeneralDeviceService(r.deviceRepo, r.logger, r.comm) return nil }