issue_29 #32

Merged
huang merged 65 commits from issue_29 into main 2025-10-07 13:33:25 +08:00
4 changed files with 18 additions and 42 deletions
Showing only changes of commit b6e68e861b - Show all commits

View File

@@ -31,19 +31,25 @@ type PigFarmService interface {
} }
type pigFarmService struct { type pigFarmService struct {
logger *logs.Logger logger *logs.Logger
farmRepository repository.PigFarmRepository farmRepository repository.PigFarmRepository
penRepository repository.PigPenRepository penRepository repository.PigPenRepository
uow repository.UnitOfWork // 工作单元,用于事务管理 batchRepository repository.PigBatchRepository
uow repository.UnitOfWork // 工作单元,用于事务管理
} }
// NewPigFarmService 创建一个新的 PigFarmService 实例 // 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{ return &pigFarmService{
logger: logger, logger: logger,
farmRepository: farmRepository, farmRepository: farmRepository,
penRepository: penRepository, penRepository: penRepository,
uow: uow, batchRepository: batchRepository,
uow: uow,
} }
} }
@@ -175,7 +181,7 @@ func (s *pigFarmService) DeletePen(id uint) error {
// 检查猪栏是否关联了活跃批次 // 检查猪栏是否关联了活跃批次
// 注意pen.PigBatchID 是指针类型,需要检查是否为 nil // 注意pen.PigBatchID 是指针类型,需要检查是否为 nil
if pen.PigBatchID != nil && *pen.PigBatchID != 0 { 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) { if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
return err return err
} }

View File

@@ -84,7 +84,7 @@ func NewApplication(configPath string) (*Application, error) {
pigBatchDomain := pig.NewPigBatchService(pigBatchRepo, unitOfWork, penTransferManager) 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) pigBatchService := service.NewPigBatchService(pigBatchDomain, logger)
// 初始化审计服务 // 初始化审计服务

View File

@@ -37,11 +37,7 @@ func (r *gormPigBatchRepository) CreatePigBatch(batch *models.PigBatch) (*models
// GetPigBatchByID 根据ID获取单个猪批次 // GetPigBatchByID 根据ID获取单个猪批次
func (r *gormPigBatchRepository) GetPigBatchByID(id uint) (*models.PigBatch, error) { func (r *gormPigBatchRepository) GetPigBatchByID(id uint) (*models.PigBatch, error) {
var batch models.PigBatch return r.GetPigBatchByIDTx(r.db, id)
if err := r.db.First(&batch, id).Error; err != nil {
return nil, err
}
return &batch, nil
} }
// UpdatePigBatch 更新一个猪批次 // UpdatePigBatch 更新一个猪批次

View File

@@ -16,12 +16,6 @@ type PigFarmRepository interface {
// DeletePigHouse 根据ID删除一个猪舍返回受影响的行数和错误 // DeletePigHouse 根据ID删除一个猪舍返回受影响的行数和错误
DeletePigHouse(id uint) (int64, error) DeletePigHouse(id uint) (int64, error)
CountPensInHouse(houseID 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 实现 // 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 err := r.db.Model(&models.Pen{}).Where("house_id = ?", houseID).Count(&count).Error
return count, err 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
}