diff --git a/internal/storage/repository/feed.go b/internal/storage/repository/feed.go index 35c7f55..eae3559 100644 --- a/internal/storage/repository/feed.go +++ b/internal/storage/repository/feed.go @@ -21,6 +21,9 @@ type FeedPlanRepo interface { // DeleteFeedingPlan 删除饲料计划及其所有子计划和步骤 DeleteFeedingPlan(id uint) error + + // UpdateFeedingPlan 更新饲料计划,采用先删除再重新创建的方式 + UpdateFeedingPlan(feedingPlan *model.FeedingPlan) error } type feedPlanRepo struct { @@ -62,6 +65,29 @@ func (f *feedPlanRepo) CreateFeedingPlan(feedingPlan *model.FeedingPlan) error { }) } +// UpdateFeedingPlan 更新饲料计划,采用先删除再重新创建的方式 +func (f *feedPlanRepo) UpdateFeedingPlan(feedingPlan *model.FeedingPlan) error { + // 检查计划是否存在 + _, err := f.FindFeedingPlanByID(feedingPlan.ID) + if err != nil { + return err + } + + return f.db.Transaction(func(tx *gorm.DB) error { + // 先删除原有的计划 + if err := f.deleteFeedingPlanWithTx(tx, feedingPlan.ID); err != nil { + return err + } + + // 再重新创建更新后的计划 + if err := f.createFeedingPlanWithTx(tx, feedingPlan); err != nil { + return err + } + + return nil + }) +} + // DeleteFeedingPlan 删除饲料计划及其所有子计划和步骤 func (f *feedPlanRepo) DeleteFeedingPlan(id uint) error { return f.db.Transaction(func(tx *gorm.DB) error {