增加顺序修复

This commit is contained in:
2025-09-14 15:18:35 +08:00
parent 8ceff5c3c7
commit 4ddb2c5448
2 changed files with 178 additions and 42 deletions

View File

@@ -2,6 +2,7 @@ package models
import (
"fmt"
"sort"
"gorm.io/datatypes"
"gorm.io/gorm"
@@ -79,6 +80,42 @@ func (p Plan) ValidateExecutionOrder() error {
return nil
}
// ReorderSteps 重新排序计划中的步骤(任务或子计划),使其 ExecutionOrder 从 1 开始且连续。
// 这个方法假设重复的顺序已经被其他方法验证过它只负责修复断层和不从1开始的序列。
func (p *Plan) ReorderSteps() {
switch p.ContentType {
case PlanContentTypeTasks:
if len(p.Tasks) == 0 {
return
}
// 1. 按当前的 ExecutionOrder 对任务进行排序
sort.Slice(p.Tasks, func(i, j int) bool {
return p.Tasks[i].ExecutionOrder < p.Tasks[j].ExecutionOrder
})
// 2. 重新分配连续的 ExecutionOrder
for i := range p.Tasks {
p.Tasks[i].ExecutionOrder = i + 1
}
case PlanContentTypeSubPlans:
if len(p.SubPlans) == 0 {
return
}
// 1. 按当前的 ExecutionOrder 对子计划进行排序
sort.Slice(p.SubPlans, func(i, j int) bool {
return p.SubPlans[i].ExecutionOrder < p.SubPlans[j].ExecutionOrder
})
// 2. 重新分配连续的 ExecutionOrder
for i := range p.SubPlans {
p.SubPlans[i].ExecutionOrder = i + 1
}
}
}
// SubPlan 代表作为另一个计划一部分的子计划,具有执行顺序
type SubPlan struct {
gorm.Model