Files
pig-farm-controller/internal/domain/plan/plan_service.go
2025-11-02 19:33:05 +08:00

75 lines
2.7 KiB
Go

package plan
import (
"git.huangwc.com/pig/pig-farm-controller/internal/infra/logs"
)
// Service 定义了计划领域服务的接口。
type Service interface {
// Start 启动计划相关的后台服务,例如计划执行管理器。
Start()
// Stop 停止计划相关的后台服务,例如计划执行管理器。
Stop()
// RefreshPlanTriggers 刷新计划触发器,同步数据库中的计划状态和待执行队列中的触发器任务。
RefreshPlanTriggers() error
// CreateOrUpdateTrigger 为给定的 planID 创建其关联的触发任务。
// 如果触发器已存在,会根据计划类型更新其执行时间。
CreateOrUpdateTrigger(planID uint) error
// EnsureAnalysisTaskDefinition 确保计划的分析任务定义存在于 tasks 表中。
// 如果不存在,则会自动创建。此方法不涉及待执行队列。
EnsureAnalysisTaskDefinition(planID uint) error
// TODO: 在这里添加其他与计划相关的领域服务方法
}
// planServiceImpl 是 Service 接口的具体实现。
type planServiceImpl struct {
executionManager ExecutionManager
taskManager AnalysisPlanTaskManager
logger *logs.Logger
}
// NewPlanService 创建一个新的 Service 实例。
func NewPlanService(
executionManager ExecutionManager,
taskManager AnalysisPlanTaskManager,
logger *logs.Logger,
) Service {
return &planServiceImpl{
executionManager: executionManager,
taskManager: taskManager,
logger: logger,
}
}
// Start 启动计划相关的后台服务。
func (s *planServiceImpl) Start() {
s.logger.Infof("PlanService 正在启动...")
s.executionManager.Start()
}
// Stop 停止计划相关的后台服务。
func (s *planServiceImpl) Stop() {
s.logger.Infof("PlanService 正在停止...")
s.executionManager.Stop()
}
// RefreshPlanTriggers 刷新计划触发器。
func (s *planServiceImpl) RefreshPlanTriggers() error {
s.logger.Infof("PlanService 正在刷新计划触发器...")
return s.taskManager.Refresh()
}
// CreateOrUpdateTrigger 为给定的 planID 创建其关联的触发任务。
// 如果触发器已存在,会根据计划类型更新其执行时间。
func (s *planServiceImpl) CreateOrUpdateTrigger(planID uint) error {
s.logger.Infof("PlanService 正在为计划 %d 创建或更新触发器...", planID)
return s.taskManager.CreateOrUpdateTrigger(planID)
}
// EnsureAnalysisTaskDefinition 确保计划的分析任务定义存在于 tasks 表中。
// 如果不存在,则会自动创建。此方法不涉及待执行队列。
func (s *planServiceImpl) EnsureAnalysisTaskDefinition(planID uint) error {
s.logger.Infof("PlanService 正在确保计划 %d 的分析任务定义...", planID)
return s.taskManager.EnsureAnalysisTaskDefinition(planID)
}