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 }