From 6fe73d8ffe31a8aab595a6685640970070026655 Mon Sep 17 00:00:00 2001 From: huang <1724659546@qq.com> Date: Wed, 10 Sep 2025 19:36:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=99=90=E5=88=B6=E7=94=A8=E6=88=B7=E4=B8=8D?= =?UTF-8?q?=E8=83=BD=E5=88=9B=E5=BB=BA=E4=B8=80=E4=B8=AA=E6=97=A2=E6=9C=89?= =?UTF-8?q?=E5=AD=90=E8=AE=A1=E5=88=92=E5=8F=88=E6=9C=89=E6=AD=A5=E9=AA=A4?= =?UTF-8?q?=E7=9A=84=E8=AE=A1=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/controller/feed/feed.go | 47 ++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/internal/controller/feed/feed.go b/internal/controller/feed/feed.go index 13d7ff8..ee883df 100644 --- a/internal/controller/feed/feed.go +++ b/internal/controller/feed/feed.go @@ -4,6 +4,7 @@ package feed import ( + "fmt" "strconv" "git.huangwc.com/pig/pig-farm-controller/internal/controller" @@ -73,6 +74,12 @@ func (c *Controller) Create(ctx *gin.Context) { return } + // 校验计划结构 + if err := c.validatePlanStructure(&req); err != nil { + controller.SendErrorResponse(ctx, controller.InvalidParameterCode, "计划结构错误: "+err.Error()) + return + } + // 转换请求结构体为模型 plan := c.convertToCreateModel(&req) @@ -86,6 +93,23 @@ func (c *Controller) Create(ctx *gin.Context) { controller.SendSuccessResponse(ctx, "创建计划成功", nil) } +// validatePlanStructure 校验计划结构,不允许计划同时包含步骤和子计划 +func (c *Controller) validatePlanStructure(req *CreateRequest) error { + // 检查当前计划是否同时包含步骤和子计划 + if len(req.Steps) > 0 && len(req.SubPlans) > 0 { + return fmt.Errorf("计划不能同时包含步骤和子计划") + } + + // 递归检查子计划 + for _, subPlan := range req.SubPlans { + if err := c.validatePlanStructure(&subPlan); err != nil { + return err + } + } + + return nil +} + // convertToCreateModel 将创建请求结构体转换为数据库模型 func (c *Controller) convertToCreateModel(req *CreateRequest) *model.FeedingPlan { plan := &model.FeedingPlan{ @@ -334,6 +358,12 @@ func (c *Controller) Update(ctx *gin.Context) { return } + // 校验计划结构 + if err := c.validateUpdatePlanStructure(&req); err != nil { + controller.SendErrorResponse(ctx, controller.InvalidParameterCode, "计划结构错误: "+err.Error()) + return + } + // 转换请求结构体为模型 plan := c.convertToUpdateModel(&req) @@ -347,6 +377,23 @@ func (c *Controller) Update(ctx *gin.Context) { controller.SendSuccessResponse(ctx, "更新计划成功", nil) } +// validateUpdatePlanStructure 校验更新计划结构,不允许计划同时包含步骤和子计划 +func (c *Controller) validateUpdatePlanStructure(req *UpdateRequest) error { + // 检查当前计划是否同时包含步骤和子计划 + if len(req.Steps) > 0 && len(req.SubPlans) > 0 { + return fmt.Errorf("计划不能同时包含步骤和子计划") + } + + // 递归检查子计划 + for _, subPlan := range req.SubPlans { + if err := c.validateUpdatePlanStructure(&subPlan); err != nil { + return err + } + } + + return nil +} + // convertToUpdateModel 将更新请求结构体转换为数据库模型 func (c *Controller) convertToUpdateModel(req *UpdateRequest) *model.FeedingPlan { plan := &model.FeedingPlan{