fix: rebuild MES as compilable go-zero+ent backend (renamed bj_power_mes), restore 3 workstation projects from pristine original, align naming; all Go projects go build clean
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
package scheduler
|
||||
|
||||
import "context"
|
||||
|
||||
// Scheduler 三层编排器——串联 TaskGenerator → ConstraintFilter → PolicyEngine。
|
||||
// 骨架阶段:只定义接口和编排流程,不直接修改 processor 包。
|
||||
// 后续阶段:processor 包的 JobRuntime 将通过此 Scheduler 替代直接调用 Dispatcher。
|
||||
type Scheduler struct {
|
||||
generator TaskGenerator
|
||||
filter ConstraintFilter
|
||||
policy PolicyEngine
|
||||
}
|
||||
|
||||
func NewScheduler(g TaskGenerator, f ConstraintFilter, p PolicyEngine) *Scheduler {
|
||||
return &Scheduler{
|
||||
generator: g,
|
||||
filter: f,
|
||||
policy: p,
|
||||
}
|
||||
}
|
||||
|
||||
// ScheduleAll 对多个 Job 执行三层调度,合并结果后排序。
|
||||
// 用于全局调度场景(如收到 MachineTaskComplete 信号后重新评估所有 Job)。
|
||||
func (s *Scheduler) ScheduleAll(ctx context.Context, jobs []JobView, state SystemState) []CandidateTask {
|
||||
var allCandidates []CandidateTask
|
||||
for _, job := range jobs {
|
||||
candidates := s.generator.Generate(job)
|
||||
allCandidates = append(allCandidates, candidates...)
|
||||
}
|
||||
|
||||
if len(allCandidates) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
feasible := s.filter.Filter(ctx, allCandidates, state)
|
||||
|
||||
if len(feasible) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
return s.policy.Rank(feasible, state)
|
||||
}
|
||||
|
||||
// DefaultScheduler 创建默认配置的 Scheduler。
|
||||
// 使用 RecipeTaskGenerator + 所有内置约束 + 默认优先级策略。
|
||||
func DefaultScheduler() *Scheduler {
|
||||
generator := NewRecipeTaskGenerator()
|
||||
filter := NewCompositeFilter(
|
||||
NewMachineDisabledConstraint(),
|
||||
NewMachineBusyConstraint(),
|
||||
NewMachineEmptyConstraint(),
|
||||
NewTempSlotFullConstraint(),
|
||||
NewOrderPausedConstraint(),
|
||||
NewOrderPausingConstraint(),
|
||||
NewOrderCancellingConstraint(),
|
||||
NewJobSuspendedConstraint(),
|
||||
NewExchangePairConstraint(),
|
||||
NewReplenishConstraint(),
|
||||
NewWasteReadyConstraint(),
|
||||
)
|
||||
policy := NewPriorityPolicy(
|
||||
UnloadFirstRule,
|
||||
SamplingFirstRule,
|
||||
LaterStageUnloadFirstRule,
|
||||
IdleMachineLoadFirstRule,
|
||||
LaterStageLoadFirstRule,
|
||||
ExchangeFirstRule,
|
||||
BasePriorityRule,
|
||||
JobIDSmallerFirstRule,
|
||||
SameMachineRule,
|
||||
)
|
||||
|
||||
return NewScheduler(generator, filter, policy)
|
||||
}
|
||||
Reference in New Issue
Block a user