实现交易子服务
This commit is contained in:
@@ -6,9 +6,9 @@ import (
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// PenTransferManager 定义了与猪只位置转移相关的底层数据库操作。
|
||||
// PigPenTransferManager 定义了与猪只位置转移相关的底层数据库操作。
|
||||
// 它是一个内部服务,被主服务 PigBatchService 调用。
|
||||
type PenTransferManager interface {
|
||||
type PigPenTransferManager interface {
|
||||
// LogTransfer 在数据库中创建一条猪只迁移日志。
|
||||
LogTransfer(tx *gorm.DB, log *models.PigTransferLog) error
|
||||
|
||||
@@ -25,39 +25,42 @@ type PenTransferManager interface {
|
||||
UpdatePenFields(tx *gorm.DB, penID uint, updates map[string]interface{}) error
|
||||
}
|
||||
|
||||
// penTransferManager 是 PenTransferManager 接口的具体实现。
|
||||
// pigPenTransferManager 是 PigPenTransferManager 接口的具体实现。
|
||||
// 它作为调栏管理器,处理底层的数据库交互。
|
||||
type penTransferManager struct {
|
||||
type pigPenTransferManager struct {
|
||||
penRepo repository.PigPenRepository
|
||||
logRepo repository.PigTransferLogRepository
|
||||
}
|
||||
|
||||
// NewPenTransferManager 是 penTransferManager 的构造函数。
|
||||
func NewPenTransferManager(penRepo repository.PigPenRepository) PenTransferManager {
|
||||
return &penTransferManager{
|
||||
// NewPigPenTransferManager 是 pigPenTransferManager 的构造函数。
|
||||
// 修改构造函数以接收 PigTransferLogRepository 依赖
|
||||
func NewPigPenTransferManager(penRepo repository.PigPenRepository, logRepo repository.PigTransferLogRepository) PigPenTransferManager {
|
||||
return &pigPenTransferManager{
|
||||
penRepo: penRepo,
|
||||
logRepo: logRepo,
|
||||
}
|
||||
}
|
||||
|
||||
// LogTransfer 实现了在数据库中创建迁移日志的逻辑。
|
||||
func (s *penTransferManager) LogTransfer(tx *gorm.DB, log *models.PigTransferLog) error {
|
||||
// 直接使用事务对象创建记录。
|
||||
return tx.Create(log).Error
|
||||
func (s *pigPenTransferManager) LogTransfer(tx *gorm.DB, log *models.PigTransferLog) error {
|
||||
// 使用新的仓库接口进行操作
|
||||
return s.logRepo.CreatePigTransferLog(tx, log)
|
||||
}
|
||||
|
||||
// GetPenByID 实现了获取猪栏信息的逻辑。
|
||||
// 注意: 此处调用了一个假设存在的方法 GetPenByIDTx。
|
||||
func (s *penTransferManager) GetPenByID(tx *gorm.DB, penID uint) (*models.Pen, error) {
|
||||
func (s *pigPenTransferManager) GetPenByID(tx *gorm.DB, penID uint) (*models.Pen, error) {
|
||||
return s.penRepo.GetPenByIDTx(tx, penID)
|
||||
}
|
||||
|
||||
// GetPensByBatchID 实现了获取猪群关联猪栏列表的逻辑。
|
||||
// 注意: 此处调用了一个假设存在的方法 GetPensByBatchIDTx。
|
||||
func (s *penTransferManager) GetPensByBatchID(tx *gorm.DB, batchID uint) ([]*models.Pen, error) {
|
||||
func (s *pigPenTransferManager) GetPensByBatchID(tx *gorm.DB, batchID uint) ([]*models.Pen, error) {
|
||||
return s.penRepo.GetPensByBatchIDTx(tx, batchID)
|
||||
}
|
||||
|
||||
// UpdatePenFields 实现了更新猪栏字段的逻辑。
|
||||
// 注意: 此处调用了一个假设存在的方法 UpdatePenFieldsTx。
|
||||
func (s *penTransferManager) UpdatePenFields(tx *gorm.DB, penID uint, updates map[string]interface{}) error {
|
||||
func (s *pigPenTransferManager) UpdatePenFields(tx *gorm.DB, penID uint, updates map[string]interface{}) error {
|
||||
return s.penRepo.UpdatePenFieldsTx(tx, penID, updates)
|
||||
}
|
||||
|
||||
@@ -19,7 +19,8 @@ type pigBatchService struct {
|
||||
pigBatchRepo repository.PigBatchRepository // 猪批次仓库
|
||||
pigBatchLogRepo repository.PigBatchLogRepository // 猪批次日志仓库
|
||||
uow repository.UnitOfWork // 工作单元,用于管理事务
|
||||
transferSvc PenTransferManager // 调栏子服务
|
||||
transferSvc PigPenTransferManager // 调栏子服务
|
||||
tradeSvc PigTradeManager // 交易子服务
|
||||
}
|
||||
|
||||
// NewPigBatchService 是 pigBatchService 的构造函数。
|
||||
@@ -28,13 +29,15 @@ func NewPigBatchService(
|
||||
pigBatchRepo repository.PigBatchRepository,
|
||||
pigBatchLogRepo repository.PigBatchLogRepository,
|
||||
uow repository.UnitOfWork,
|
||||
transferSvc PenTransferManager,
|
||||
transferSvc PigPenTransferManager,
|
||||
tradeSvc PigTradeManager,
|
||||
) PigBatchService {
|
||||
return &pigBatchService{
|
||||
pigBatchRepo: pigBatchRepo,
|
||||
pigBatchLogRepo: pigBatchLogRepo,
|
||||
uow: uow,
|
||||
transferSvc: transferSvc,
|
||||
tradeSvc: tradeSvc,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,8 +63,8 @@ func (s *pigBatchService) CreatePigBatch(operatorID uint, batch *models.PigBatch
|
||||
ChangeCount: createdBatch.InitialCount,
|
||||
Reason: fmt.Sprintf("创建了新的猪批次 %s,初始数量 %d", createdBatch.BatchNumber, createdBatch.InitialCount),
|
||||
BeforeCount: 0, // 初始创建前数量为0
|
||||
AfterCount: int(createdBatch.InitialCount),
|
||||
OperatorID: 0, // 假设初始创建没有特定操作员ID,或需要从上下文传入
|
||||
AfterCount: createdBatch.InitialCount,
|
||||
OperatorID: operatorID,
|
||||
}
|
||||
|
||||
// 3. 记录批次日志
|
||||
@@ -135,7 +138,7 @@ func (s *pigBatchService) ListPigBatches(isActive *bool) ([]*models.PigBatch, er
|
||||
}
|
||||
|
||||
// UpdatePigBatchPens 实现了在事务中更新猪批次关联猪栏的复杂逻辑。
|
||||
// 它通过调用底层的 PenTransferManager 来执行数据库操作,从而保持了职责的清晰。
|
||||
// 它通过调用底层的 PigPenTransferManager 来执行数据库操作,从而保持了职责的清晰。
|
||||
func (s *pigBatchService) UpdatePigBatchPens(batchID uint, desiredPenIDs []uint) error {
|
||||
// 使用工作单元来确保操作的原子性
|
||||
return s.uow.ExecuteInTransaction(func(tx *gorm.DB) error {
|
||||
|
||||
46
internal/domain/pig/pig_trade_manager.go
Normal file
46
internal/domain/pig/pig_trade_manager.go
Normal file
@@ -0,0 +1,46 @@
|
||||
package pig
|
||||
|
||||
import (
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/infra/repository" // 引入基础设施层的仓库接口
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// PigTradeManager 定义了与猪只交易相关的操作接口。
|
||||
// 这是一个领域服务,负责协调业务逻辑。
|
||||
type PigTradeManager interface {
|
||||
// SellPig 处理卖猪的业务逻辑,通过仓库接口创建 PigSale 记录。
|
||||
SellPig(tx *gorm.DB, sale *models.PigSale) error
|
||||
|
||||
// BuyPig 处理买猪的业务逻辑,通过仓库接口创建 PigPurchase 记录。
|
||||
BuyPig(tx *gorm.DB, purchase *models.PigPurchase) error
|
||||
}
|
||||
|
||||
// pigTradeManager 是 PigTradeManager 接口的具体实现。
|
||||
// 它依赖于 repository.PigTradeRepository 接口来执行数据持久化操作。
|
||||
type pigTradeManager struct {
|
||||
tradeRepo repository.PigTradeRepository // 依赖于基础设施层定义的仓库接口
|
||||
}
|
||||
|
||||
// NewPigTradeManager 是 pigTradeManager 的构造函数。
|
||||
func NewPigTradeManager(tradeRepo repository.PigTradeRepository) PigTradeManager {
|
||||
return &pigTradeManager{
|
||||
tradeRepo: tradeRepo,
|
||||
}
|
||||
}
|
||||
|
||||
// SellPig 实现了卖猪的逻辑。
|
||||
// 它通过调用 tradeRepo 来持久化销售记录。
|
||||
func (s *pigTradeManager) SellPig(tx *gorm.DB, sale *models.PigSale) error {
|
||||
// 在此处可以添加更复杂的卖猪前置校验或业务逻辑
|
||||
// 例如:检查猪只库存、更新猪只状态等。
|
||||
return s.tradeRepo.CreatePigSaleTx(tx, sale)
|
||||
}
|
||||
|
||||
// BuyPig 实现了买猪的逻辑。
|
||||
// 它通过调用 tradeRepo 来持久化采购记录。
|
||||
func (s *pigTradeManager) BuyPig(tx *gorm.DB, purchase *models.PigPurchase) error {
|
||||
// 在此处可以添加更复杂的买猪前置校验或业务逻辑
|
||||
// 例如:检查资金、更新猪只状态等。
|
||||
return s.tradeRepo.CreatePigPurchaseTx(tx, purchase)
|
||||
}
|
||||
Reference in New Issue
Block a user