diff --git a/internal/app/service/pig_farm_service.go b/internal/app/service/pig_farm_service.go index 8b79c6e..bb6f746 100644 --- a/internal/app/service/pig_farm_service.go +++ b/internal/app/service/pig_farm_service.go @@ -31,19 +31,25 @@ type PigFarmService interface { } type pigFarmService struct { - logger *logs.Logger - farmRepository repository.PigFarmRepository - penRepository repository.PigPenRepository - uow repository.UnitOfWork // 工作单元,用于事务管理 + logger *logs.Logger + farmRepository repository.PigFarmRepository + penRepository repository.PigPenRepository + batchRepository repository.PigBatchRepository + uow repository.UnitOfWork // 工作单元,用于事务管理 } // NewPigFarmService 创建一个新的 PigFarmService 实例 -func NewPigFarmService(farmRepository repository.PigFarmRepository, penRepository repository.PigPenRepository, uow repository.UnitOfWork, logger *logs.Logger) PigFarmService { +func NewPigFarmService(farmRepository repository.PigFarmRepository, + penRepository repository.PigPenRepository, + batchRepository repository.PigBatchRepository, + uow repository.UnitOfWork, + logger *logs.Logger) PigFarmService { return &pigFarmService{ - logger: logger, - farmRepository: farmRepository, - penRepository: penRepository, - uow: uow, + logger: logger, + farmRepository: farmRepository, + penRepository: penRepository, + batchRepository: batchRepository, + uow: uow, } } @@ -175,7 +181,7 @@ func (s *pigFarmService) DeletePen(id uint) error { // 检查猪栏是否关联了活跃批次 // 注意:pen.PigBatchID 是指针类型,需要检查是否为 nil if pen.PigBatchID != nil && *pen.PigBatchID != 0 { - pigBatch, err := s.farmRepository.GetPigBatchByID(*pen.PigBatchID) + pigBatch, err := s.batchRepository.GetPigBatchByID(*pen.PigBatchID) if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { return err } diff --git a/internal/core/application.go b/internal/core/application.go index 28b7232..c99c89e 100644 --- a/internal/core/application.go +++ b/internal/core/application.go @@ -84,7 +84,7 @@ func NewApplication(configPath string) (*Application, error) { pigBatchDomain := pig.NewPigBatchService(pigBatchRepo, unitOfWork, penTransferManager) // --- 业务逻辑处理器初始化 --- - pigFarmService := service.NewPigFarmService(pigFarmRepo, pigPenRepo, unitOfWork, logger) + pigFarmService := service.NewPigFarmService(pigFarmRepo, pigPenRepo, pigBatchRepo, unitOfWork, logger) pigBatchService := service.NewPigBatchService(pigBatchDomain, logger) // 初始化审计服务 diff --git a/internal/infra/repository/pig_batch_repository.go b/internal/infra/repository/pig_batch_repository.go index 3f06887..51876a0 100644 --- a/internal/infra/repository/pig_batch_repository.go +++ b/internal/infra/repository/pig_batch_repository.go @@ -37,11 +37,7 @@ func (r *gormPigBatchRepository) CreatePigBatch(batch *models.PigBatch) (*models // GetPigBatchByID 根据ID获取单个猪批次 func (r *gormPigBatchRepository) GetPigBatchByID(id uint) (*models.PigBatch, error) { - var batch models.PigBatch - if err := r.db.First(&batch, id).Error; err != nil { - return nil, err - } - return &batch, nil + return r.GetPigBatchByIDTx(r.db, id) } // UpdatePigBatch 更新一个猪批次 diff --git a/internal/infra/repository/pig_farm_repository.go b/internal/infra/repository/pig_farm_repository.go index fbd656f..954f1f5 100644 --- a/internal/infra/repository/pig_farm_repository.go +++ b/internal/infra/repository/pig_farm_repository.go @@ -16,12 +16,6 @@ type PigFarmRepository interface { // DeletePigHouse 根据ID删除一个猪舍,返回受影响的行数和错误 DeletePigHouse(id uint) (int64, error) CountPensInHouse(houseID uint) (int64, error) - - // PigBatch methods - // GetPigBatchByID 根据ID获取单个猪批次 (非事务性) - GetPigBatchByID(id uint) (*models.PigBatch, error) - // GetPigBatchByIDTx 根据ID获取单个猪批次 (事务性) - GetPigBatchByIDTx(tx *gorm.DB, id uint) (*models.PigBatch, error) } // gormPigFarmRepository 是 PigFarmRepository 的 GORM 实现 @@ -83,23 +77,3 @@ func (r *gormPigFarmRepository) CountPensInHouse(houseID uint) (int64, error) { err := r.db.Model(&models.Pen{}).Where("house_id = ?", houseID).Count(&count).Error return count, err } - -// --- PigBatch Implementation --- - -// GetPigBatchByID 根据ID获取单个猪批次 (非事务性) -func (r *gormPigFarmRepository) GetPigBatchByID(id uint) (*models.PigBatch, error) { - var batch models.PigBatch - if err := r.db.First(&batch, id).Error; err != nil { - return nil, err - } - return &batch, nil -} - -// GetPigBatchByIDTx 根据ID获取单个猪批次 (事务性) -func (r *gormPigFarmRepository) GetPigBatchByIDTx(tx *gorm.DB, id uint) (*models.PigBatch, error) { - var batch models.PigBatch - if err := tx.First(&batch, id).Error; err != nil { - return nil, err - } - return &batch, nil -}