|
|
@@ -7,6 +7,7 @@ package models |
|
|
|
import ( |
|
|
|
"fmt" |
|
|
|
"strconv" |
|
|
|
"xorm.io/builder" |
|
|
|
) |
|
|
|
|
|
|
|
// ActionList defines a list of actions |
|
|
@@ -146,28 +147,63 @@ func (actions ActionList) getCloudbrainIDs() []int64 { |
|
|
|
return keysInt64(cloudbrainIDs) |
|
|
|
} |
|
|
|
|
|
|
|
func (actions ActionList) getCloudbrainJobIDs() []string { |
|
|
|
cloudbrainJobIDs := make(map[string]struct{}, 0) |
|
|
|
for _, action := range actions { |
|
|
|
if !action.IsCloudbrainAction() { |
|
|
|
continue |
|
|
|
} |
|
|
|
if _, ok := cloudbrainJobIDs[action.Content]; !ok { |
|
|
|
cloudbrainJobIDs[action.Content] = struct{}{} |
|
|
|
} |
|
|
|
} |
|
|
|
return keysString(cloudbrainJobIDs) |
|
|
|
} |
|
|
|
|
|
|
|
func (actions ActionList) loadCloudbrains(e Engine) ([]*Cloudbrain, error) { |
|
|
|
if len(actions) == 0 { |
|
|
|
return nil, nil |
|
|
|
} |
|
|
|
|
|
|
|
cloudbrainIDs := actions.getCloudbrainIDs() |
|
|
|
cloudbrainJobIDs := actions.getCloudbrainJobIDs() |
|
|
|
|
|
|
|
cloudbrainMaps := make(map[int64]*Cloudbrain, len(cloudbrainIDs)) |
|
|
|
if len(cloudbrainIDs) == 0 { |
|
|
|
return make([]*Cloudbrain, 0), nil |
|
|
|
} |
|
|
|
//由于各个类型的云脑任务在发布action的时候,content字段保存的ID含义不同,部分取的是ID,部分取的是jobId |
|
|
|
//所以在查询action对应的cloudbrain对象时,以这两个字段做为条件查询 |
|
|
|
cond := builder.Or(builder.In("id", cloudbrainIDs)).Or(builder.In("job_id", cloudbrainJobIDs)) |
|
|
|
err := e. |
|
|
|
In("id", cloudbrainIDs).Unscoped(). |
|
|
|
Where(cond).Unscoped(). |
|
|
|
Find(&cloudbrainMaps) |
|
|
|
if err != nil { |
|
|
|
return nil, fmt.Errorf("find cloudbrain: %v", err) |
|
|
|
} |
|
|
|
|
|
|
|
cloudBrainJobIdMap := make(map[string]*Cloudbrain, len(cloudbrainIDs)) |
|
|
|
for _, v := range cloudbrainMaps { |
|
|
|
cloudBrainJobIdMap[v.JobID] = v |
|
|
|
} |
|
|
|
|
|
|
|
for _, action := range actions { |
|
|
|
if !action.IsCloudbrainAction() { |
|
|
|
continue |
|
|
|
} |
|
|
|
cloudbrainId, _ := strconv.ParseInt(action.Content, 10, 64) |
|
|
|
if cloudbrainId > 0 { |
|
|
|
action.Cloudbrain = cloudbrainMaps[cloudbrainId] |
|
|
|
if c, ok := cloudbrainMaps[cloudbrainId]; ok { |
|
|
|
if c.DisplayJobName == action.RefName || c.JobName == action.RefName { |
|
|
|
action.Cloudbrain = c |
|
|
|
} |
|
|
|
continue |
|
|
|
} |
|
|
|
} |
|
|
|
if c, ok := cloudBrainJobIdMap[action.Content]; ok { |
|
|
|
if c.DisplayJobName == action.RefName || c.JobName == action.RefName { |
|
|
|
action.Cloudbrain = c |
|
|
|
} |
|
|
|
continue |
|
|
|
} |
|
|
|
} |
|
|
|
return valuesCloudbrain(cloudbrainMaps), nil |
|
|
|