猪群管理聚合服务 增加调栏管理
This commit is contained in:
@@ -65,31 +65,31 @@ func (s *pigBatchService) CreatePigBatch(dto *dto.PigBatchCreateDTO) (*dto.PigBa
|
||||
createdBatch, err := s.domainService.CreatePigBatch(batch)
|
||||
if err != nil {
|
||||
s.logger.Errorf("应用层: 创建猪批次失败: %v", err)
|
||||
return nil, err // 将领域层的错误传递上去
|
||||
return nil, mapDomainError(err)
|
||||
}
|
||||
|
||||
// 3. 领域模型 -> DTO
|
||||
return s.toPigBatchResponseDTO(createdBatch), nil
|
||||
}
|
||||
|
||||
// GetPigBatch 从领域服务获取数据并转换为DTO。
|
||||
// GetPigBatch 从领域服务获取数据并转换为DTO,同时处理错误转换。
|
||||
func (s *pigBatchService) GetPigBatch(id uint) (*dto.PigBatchResponseDTO, error) {
|
||||
batch, err := s.domainService.GetPigBatch(id)
|
||||
if err != nil {
|
||||
s.logger.Warnf("应用层: 获取猪批次失败, ID: %d, 错误: %v", id, err)
|
||||
return nil, err
|
||||
return nil, mapDomainError(err)
|
||||
}
|
||||
|
||||
return s.toPigBatchResponseDTO(batch), nil
|
||||
}
|
||||
|
||||
// UpdatePigBatch 协调获取、更新和保存的流程。
|
||||
// UpdatePigBatch 协调获取、更新和保存的流程,并处理错误转换。
|
||||
func (s *pigBatchService) UpdatePigBatch(id uint, dto *dto.PigBatchUpdateDTO) (*dto.PigBatchResponseDTO, error) {
|
||||
// 1. 先获取最新的领域模型
|
||||
existingBatch, err := s.domainService.GetPigBatch(id)
|
||||
if err != nil {
|
||||
s.logger.Warnf("应用层: 更新猪批次失败,获取原批次信息错误, ID: %d, 错误: %v", id, err)
|
||||
return nil, err
|
||||
return nil, mapDomainError(err)
|
||||
}
|
||||
|
||||
// 2. 将DTO中的变更应用到模型上
|
||||
@@ -116,19 +116,19 @@ func (s *pigBatchService) UpdatePigBatch(id uint, dto *dto.PigBatchUpdateDTO) (*
|
||||
updatedBatch, err := s.domainService.UpdatePigBatch(existingBatch)
|
||||
if err != nil {
|
||||
s.logger.Errorf("应用层: 更新猪批次失败, ID: %d, 错误: %v", id, err)
|
||||
return nil, err
|
||||
return nil, mapDomainError(err)
|
||||
}
|
||||
|
||||
// 4. 转换并返回结果
|
||||
return s.toPigBatchResponseDTO(updatedBatch), nil
|
||||
}
|
||||
|
||||
// DeletePigBatch 将删除操作委托给领域服务。
|
||||
// DeletePigBatch 将删除操作委托给领域服务,并转换领域错误为应用层错误。
|
||||
func (s *pigBatchService) DeletePigBatch(id uint) error {
|
||||
err := s.domainService.DeletePigBatch(id)
|
||||
if err != nil {
|
||||
s.logger.Errorf("应用层: 删除猪批次失败, ID: %d, 错误: %v", id, err)
|
||||
return err
|
||||
return mapDomainError(err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -138,7 +138,7 @@ func (s *pigBatchService) ListPigBatches(isActive *bool) ([]*dto.PigBatchRespons
|
||||
batches, err := s.domainService.ListPigBatches(isActive)
|
||||
if err != nil {
|
||||
s.logger.Errorf("应用层: 批量查询猪批次失败: %v", err)
|
||||
return nil, err
|
||||
return nil, mapDomainError(err)
|
||||
}
|
||||
|
||||
var responseDTOs []*dto.PigBatchResponseDTO
|
||||
@@ -149,12 +149,12 @@ func (s *pigBatchService) ListPigBatches(isActive *bool) ([]*dto.PigBatchRespons
|
||||
return responseDTOs, nil
|
||||
}
|
||||
|
||||
// UpdatePigBatchPens 将关联猪栏的复杂操作委托给领域服务。
|
||||
// UpdatePigBatchPens 将关联猪栏的复杂操作委托给领域服务,并处理错误转换。
|
||||
func (s *pigBatchService) UpdatePigBatchPens(batchID uint, desiredPenIDs []uint) error {
|
||||
err := s.domainService.UpdatePigBatchPens(batchID, desiredPenIDs)
|
||||
if err != nil {
|
||||
s.logger.Errorf("应用层: 更新猪批次猪栏关联失败, 批次ID: %d, 错误: %v", batchID, err)
|
||||
return err
|
||||
return mapDomainError(err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -11,15 +11,6 @@ import (
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrHouseContainsPens = errors.New("无法删除包含猪栏的猪舍")
|
||||
ErrHouseNotFound = errors.New("指定的猪舍不存在")
|
||||
ErrPenInUse = errors.New("猪栏正在被活跃批次使用,无法删除")
|
||||
ErrPenNotFound = errors.New("指定的猪栏不存在")
|
||||
ErrPenStatusInvalidForOccupiedPen = errors.New("猪栏已被批次使用,无法设置为非使用中状态")
|
||||
ErrPenStatusInvalidForUnoccupiedPen = errors.New("猪栏未被批次使用,无法设置为使用中状态")
|
||||
)
|
||||
|
||||
// PigFarmService 提供了猪场资产管理的业务逻辑
|
||||
type PigFarmService interface {
|
||||
// PigHouse methods
|
||||
|
||||
@@ -1 +1,49 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
domain_pig "git.huangwc.com/pig/pig-farm-controller/internal/domain/pig"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrHouseContainsPens = errors.New("无法删除包含猪栏的猪舍")
|
||||
ErrHouseNotFound = errors.New("指定的猪舍不存在")
|
||||
ErrPenInUse = errors.New("猪栏正在被活跃批次使用,无法删除")
|
||||
ErrPenNotFound = errors.New("指定的猪栏不存在")
|
||||
ErrPenStatusInvalidForOccupiedPen = errors.New("猪栏已被批次使用,无法设置为非使用中状态")
|
||||
ErrPenStatusInvalidForUnoccupiedPen = errors.New("猪栏未被批次使用,无法设置为使用中状态")
|
||||
ErrPigBatchNotFound = errors.New("指定的猪批次不存在")
|
||||
ErrPigBatchActive = errors.New("活跃的猪批次不能被删除")
|
||||
ErrPigBatchNotActive = errors.New("猪批次不处于活跃状态,无法修改关联猪栏")
|
||||
ErrPenOccupiedByOtherBatch = errors.New("猪栏已被其他批次使用")
|
||||
ErrPenStatusInvalidForAllocation = errors.New("猪栏状态不允许分配")
|
||||
ErrPenNotAssociatedWithBatch = errors.New("猪栏未与该批次关联")
|
||||
)
|
||||
|
||||
// mapDomainError 将领域层的错误转换为应用服务层的公共错误。
|
||||
func mapDomainError(err error) error {
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch {
|
||||
case errors.Is(err, domain_pig.ErrPigBatchNotFound):
|
||||
return ErrPigBatchNotFound
|
||||
case errors.Is(err, domain_pig.ErrPigBatchActive):
|
||||
return ErrPigBatchActive
|
||||
case errors.Is(err, domain_pig.ErrPigBatchNotActive):
|
||||
return ErrPigBatchNotActive
|
||||
case errors.Is(err, domain_pig.ErrPenOccupiedByOtherBatch):
|
||||
return ErrPenOccupiedByOtherBatch
|
||||
case errors.Is(err, domain_pig.ErrPenStatusInvalidForAllocation):
|
||||
return ErrPenStatusInvalidForAllocation
|
||||
case errors.Is(err, domain_pig.ErrPenNotAssociatedWithBatch):
|
||||
return ErrPenNotAssociatedWithBatch
|
||||
case errors.Is(err, domain_pig.ErrPenNotFound):
|
||||
return ErrPenNotFound
|
||||
// 可以添加更多领域错误到应用层错误的映射
|
||||
default:
|
||||
return err // 对于未知的领域错误,直接返回
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user