52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
package project
|
|
|
|
import (
|
|
M "app/models"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type Stage struct {
|
|
M.BaseModel
|
|
ProjectID string `json:"project_id" gorm:"type:varchar(32);not null"`
|
|
Name string `json:"name" gorm:"type:varchar(255);not null"`
|
|
DemandID string `json:"demand_id" gorm:"column:tree_id;type:varchar(32)"`
|
|
GraphStatus string `json:"graph_status" gorm:"type:varchar(50);default:'';index"` // 状态: pending, processing, completed, failed
|
|
GraphError string `json:"graph_error" gorm:"type:text"`
|
|
}
|
|
|
|
func (Stage) TableName() string {
|
|
return "project_stages"
|
|
}
|
|
func (s *Stage) AvailableNodes(db *gorm.DB) ([]Demand, error) {
|
|
// 如果没有指定树节点,返回空列表
|
|
if s.DemandID == "" {
|
|
return []Demand{}, nil
|
|
}
|
|
|
|
// 如果是虚拟根节点,返回所有树节点
|
|
if s.DemandID == "root" {
|
|
var allNodes []Demand
|
|
if err := db.Find(&allNodes).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return allNodes, nil
|
|
}
|
|
|
|
// 获取指定的树节点
|
|
var tree Demand
|
|
if err := db.Where("id = ?", s.DemandID).First(&tree).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// 获取该树节点及其所有子孙节点
|
|
descendants, err := tree.Descendants(db)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// 将当前节点也添加到可用节点列表中
|
|
result := append([]Demand{tree}, descendants...)
|
|
return result, nil
|
|
}
|