From 645c92978bc2d6b4f5aad884c1caff3efad2db36 Mon Sep 17 00:00:00 2001 From: huang <1724659546@qq.com> Date: Fri, 3 Oct 2025 22:23:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=88=A0=E9=99=A4=E6=A3=80?= =?UTF-8?q?=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infra/repository/pig_farm_repository.go | 43 ++++++++++++++----- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/internal/infra/repository/pig_farm_repository.go b/internal/infra/repository/pig_farm_repository.go index 5341594..f6099f7 100644 --- a/internal/infra/repository/pig_farm_repository.go +++ b/internal/infra/repository/pig_farm_repository.go @@ -8,8 +8,9 @@ import ( ) var ( - ErrHouseContainsPens = errors.New("cannot delete a pig house that still contains pens") - ErrHouseNotFound = errors.New("the specified pig house does not exist") + ErrHouseContainsPens = errors.New("请在移除所有猪圈后移除当前猪舍") + ErrHouseNotFound = errors.New("猪舍不存在") + ErrPenInUse = errors.New("猪栏正在被活跃批次使用,无法删除") ) // PigFarmRepository 定义了与猪场资产(猪舍、猪栏)相关的数据库操作接口 @@ -146,12 +147,34 @@ func (r *gormPigFarmRepository) UpdatePen(pen *models.Pen) error { } func (r *gormPigFarmRepository) DeletePen(id uint) error { - result := r.db.Delete(&models.Pen{}, id) - if result.Error != nil { - return result.Error - } - if result.RowsAffected == 0 { - return gorm.ErrRecordNotFound - } - return nil + return r.db.Transaction(func(tx *gorm.DB) error { + var pen models.Pen + if err := tx.First(&pen, id).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return gorm.ErrRecordNotFound + } + return err + } + + // 检查猪栏是否被活跃批次使用 + if pen.PigBatchID != 0 { + var pigBatch models.PigBatch + err := tx.First(&pigBatch, pen.PigBatchID).Error + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + return err + } + if pigBatch.IsActive() { + return ErrPenInUse + } + } + + result := tx.Delete(&models.Pen{}, id) + if result.Error != nil { + return result.Error + } + if result.RowsAffected == 0 { + return gorm.ErrRecordNotFound + } + return nil + }) }