From 4805e422f7266fbf7e2a145c7de8d715bd8e8ae9 Mon Sep 17 00:00:00 2001 From: huang <1724659546@qq.com> Date: Wed, 10 Sep 2025 14:35:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0Detail=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/controller/feed/feed.go | 85 +++++++++++++++++++++++++++++++- 1 file changed, 83 insertions(+), 2 deletions(-) diff --git a/internal/controller/feed/feed.go b/internal/controller/feed/feed.go index 42fb96a..9b600d9 100644 --- a/internal/controller/feed/feed.go +++ b/internal/controller/feed/feed.go @@ -4,6 +4,7 @@ package feed import ( + "strconv" "time" "git.huangwc.com/pig/pig-farm-controller/internal/controller" @@ -165,7 +166,87 @@ type FeedingPlanStep struct { // Detail 获取饲料计划列细节 func (c *Controller) Detail(ctx *gin.Context) { - // TODO: 实现获取饲料计划列表的逻辑 + // 获取路径参数中的计划ID + planIDStr := ctx.Param("id") + planID, err := strconv.ParseUint(planIDStr, 10, 32) + if err != nil { + controller.SendErrorResponse(ctx, controller.InvalidParameterCode, "无效的计划ID") + return + } - controller.SendSuccessResponse(ctx, "success", &DetailResponse{}) + // 从仓库中获取计划详情 + plan, err := c.feedPlanRepo.FindFeedingPlanByID(uint(planID)) + if err != nil { + c.logger.Error("获取计划详情失败: " + err.Error()) + controller.SendErrorResponse(ctx, controller.InternalServerErrorCode, "获取计划详情失败") + return + } + + // 转换为响应结构体 + resp := c.convertToDetailResponse(plan) + + controller.SendSuccessResponse(ctx, "success", resp) +} + +// convertToDetailResponse 将数据库模型转换为响应结构体 +func (c *Controller) convertToDetailResponse(plan *model.FeedingPlan) *DetailResponse { + resp := &DetailResponse{ + ID: plan.ID, + Name: plan.Name, + Description: plan.Description, + Type: plan.Type, + Enabled: plan.Enabled, + ScheduleCron: plan.ScheduleCron, + ExecutionLimit: plan.ExecutionLimit, + ParentID: plan.ParentID, + OrderInParent: plan.OrderInParent, + IsMaster: plan.IsMaster, + CreatedAt: plan.CreatedAt, + UpdatedAt: plan.UpdatedAt, + DeletedAt: plan.DeletedAt, + Steps: make([]FeedingPlanStep, len(plan.Steps)), + SubPlans: make([]DetailResponse, len(plan.SubPlans)), + } + + // 转换步骤 + for i, step := range plan.Steps { + resp.Steps[i] = FeedingPlanStep{ + ID: step.ID, + PlanID: step.PlanID, + StepOrder: step.StepOrder, + DeviceID: step.DeviceID, + TargetValue: step.TargetValue, + Action: step.Action, + ScheduleCron: step.ScheduleCron, + ExecutionLimit: step.ExecutionLimit, + CreatedAt: step.CreatedAt, + UpdatedAt: step.UpdatedAt, + DeletedAt: step.DeletedAt, + } + } + + // 转换子计划 + for i, subPlan := range plan.SubPlans { + // 递归转换子计划 + subPlanModel := &model.FeedingPlan{ + ID: subPlan.ID, + Name: subPlan.Name, + Description: subPlan.Description, + Type: subPlan.Type, + Enabled: subPlan.Enabled, + ScheduleCron: subPlan.ScheduleCron, + ExecutionLimit: subPlan.ExecutionLimit, + ParentID: subPlan.ParentID, + OrderInParent: subPlan.OrderInParent, + IsMaster: subPlan.IsMaster, + CreatedAt: subPlan.CreatedAt, + UpdatedAt: subPlan.UpdatedAt, + DeletedAt: subPlan.DeletedAt, + Steps: subPlan.Steps, + SubPlans: subPlan.SubPlans, + } + resp.SubPlans[i] = *c.convertToDetailResponse(subPlanModel) + } + + return resp }