From f36be114689014f6afd7afda832b91bd25faca78 Mon Sep 17 00:00:00 2001 From: chenyifan01 Date: Tue, 5 Jul 2022 17:51:37 +0800 Subject: [PATCH] #2225 fix bug --- models/action_list.go | 42 +++++++++++++++++++++++++++++++++++++++--- models/helper.go | 7 +++++++ 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/models/action_list.go b/models/action_list.go index 0a355d0ce..b4b21130b 100644 --- a/models/action_list.go +++ b/models/action_list.go @@ -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 diff --git a/models/helper.go b/models/helper.go index e381f1e37..e08dee37e 100644 --- a/models/helper.go +++ b/models/helper.go @@ -11,6 +11,13 @@ func keysInt64(m map[int64]struct{}) []int64 { } return keys } +func keysString(m map[string]struct{}) []string { + var keys = make([]string, 0, len(m)) + for k := range m { + keys = append(keys, k) + } + return keys +} func valuesRepository(m map[int64]*Repository) []*Repository { var values = make([]*Repository, 0, len(m))