From 3ecbf3b5af3f23c5481aae49514edb789971b4d3 Mon Sep 17 00:00:00 2001 From: huang <1724659546@qq.com> Date: Wed, 10 Sep 2025 14:29:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0DeleteFeedingPlan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/storage/repository/feed.go | 44 ++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/internal/storage/repository/feed.go b/internal/storage/repository/feed.go index d5083fb..35c7f55 100644 --- a/internal/storage/repository/feed.go +++ b/internal/storage/repository/feed.go @@ -18,6 +18,9 @@ type FeedPlanRepo interface { // CreateFeedingPlan 创建饲料计划 CreateFeedingPlan(feedingPlan *model.FeedingPlan) error + + // DeleteFeedingPlan 删除饲料计划及其所有子计划和步骤 + DeleteFeedingPlan(id uint) error } type feedPlanRepo struct { @@ -59,6 +62,45 @@ func (f *feedPlanRepo) CreateFeedingPlan(feedingPlan *model.FeedingPlan) error { }) } +// DeleteFeedingPlan 删除饲料计划及其所有子计划和步骤 +func (f *feedPlanRepo) DeleteFeedingPlan(id uint) error { + return f.db.Transaction(func(tx *gorm.DB) error { + // 递归删除计划及其所有子计划 + if err := f.deleteFeedingPlanWithTx(tx, id); err != nil { + return err + } + return nil + }) +} + +// deleteFeedingPlanWithTx 在事务中递归删除饲料计划 +func (f *feedPlanRepo) deleteFeedingPlanWithTx(tx *gorm.DB, id uint) error { + // 先查找计划及其子计划 + var plan model.FeedingPlan + if err := tx.Where("id = ?", id).Preload("SubPlans").First(&plan).Error; err != nil { + return err + } + + // 递归删除所有子计划 + for _, subPlan := range plan.SubPlans { + if err := f.deleteFeedingPlanWithTx(tx, subPlan.ID); err != nil { + return err + } + } + + // 删除该计划的所有步骤 + if err := tx.Where("plan_id = ?", id).Delete(&model.FeedingPlanStep{}).Error; err != nil { + return err + } + + // 删除计划本身 + if err := tx.Delete(&model.FeedingPlan{}, id).Error; err != nil { + return err + } + + return nil +} + // createFeedingPlanWithTx 在事务中递归创建饲料计划 func (f *feedPlanRepo) createFeedingPlanWithTx(tx *gorm.DB, feedingPlan *model.FeedingPlan) error { // 先创建计划主体 @@ -84,7 +126,7 @@ func (f *feedPlanRepo) createFeedingPlanWithTx(tx *gorm.DB, feedingPlan *model.F } } - // 处理子计划 - 重新填充子计划编号 + // 处理子计划 - 重新填充子计划编号和父ID sort.Slice(feedingPlan.SubPlans, func(i, j int) bool { // 如果OrderInParent为nil,放在最后 if feedingPlan.SubPlans[i].OrderInParent == nil {