From 3631d2c168290477a0aac29cbd9e7c4a8c7398c9 Mon Sep 17 00:00:00 2001 From: liuzx Date: Mon, 19 Dec 2022 18:09:31 +0800 Subject: [PATCH] fix kanban --- models/cloudbrain_static.go | 63 +++++++++++++++++++ routers/api/v1/repo/cloudbrain_dashboard.go | 96 +++++++++++------------------ 2 files changed, 99 insertions(+), 60 deletions(-) diff --git a/models/cloudbrain_static.go b/models/cloudbrain_static.go index 40d7a2a2e..afc011b9a 100644 --- a/models/cloudbrain_static.go +++ b/models/cloudbrain_static.go @@ -92,6 +92,17 @@ type HourTimeStatistic struct { HourTimeTotalDuration map[string]int `json:"hourTimeTotalDuration"` HourTimeUsageRate map[string]float64 `json:"hourTimeUsageRate"` } +type CloudbrainTypeDuration []struct { + Type int `xorm:"type"` + DurationSum int `xorm:"durationSum"` + CardDurationSum int `xorm:"cardDurationSum"` + Count int `xorm:"count"` +} +type CloudbrainAllDuration struct { + DurationSum int `xorm:"durationSum"` + CardDurationSum int `xorm:"cardDurationSum"` + Count int `xorm:"count"` +} func GetTodayCreatorCount(beginTime time.Time, endTime time.Time) (int64, error) { countSql := "SELECT count(distinct user_id) FROM " + @@ -425,3 +436,55 @@ func DeleteCloudbrainDurationStatistic(beginTime timeutil.TimeStamp, endTime tim } return nil } + +func GetCloudbrainTypeCardDuration() (CloudbrainTypeDuration, error) { + query := ` + SELECT + cloudbrain.type, + SUM(cloudbrain.duration) as durationSum, + SUM( + COALESCE(cloudbrain.duration * + CASE + WHEN cloudbrain.work_server_number = 0 THEN 1 + ELSE COALESCE(cloudbrain.work_server_number, 1) + END * + COALESCE(cloudbrain_spec.acc_cards_num, 1), 0) + ) as cardDurationSum, + COUNT(*) as count + FROM cloudbrain + LEFT JOIN cloudbrain_spec + ON cloudbrain.id = cloudbrain_spec.cloudbrain_id + GROUP BY cloudbrain.type + ` + // 执行查询 + var results CloudbrainTypeDuration + if err := x.SQL(query).Find(&results); err != nil { + panic(err) + } + return results, nil +} + +func GetCloudbrainAllCardDuration() (CloudbrainAllDuration, error) { + query := ` + SELECT + SUM(cloudbrain.duration) as durationSum, + SUM( + COALESCE(cloudbrain.duration * + CASE + WHEN cloudbrain.work_server_number = 0 THEN 1 + ELSE COALESCE(cloudbrain.work_server_number, 1) + END * + COALESCE(cloudbrain_spec.acc_cards_num, 1), 0) + ) as cardDurationSum, + COUNT(*) as count + FROM cloudbrain + LEFT JOIN cloudbrain_spec + ON cloudbrain.id = cloudbrain_spec.cloudbrain_id + ` + // 执行查询 + var result CloudbrainAllDuration + if _, err := x.SQL(query).Get(&result); err != nil { + panic(err) + } + return result, nil +} diff --git a/routers/api/v1/repo/cloudbrain_dashboard.go b/routers/api/v1/repo/cloudbrain_dashboard.go index 0d68fff30..bb04038b9 100755 --- a/routers/api/v1/repo/cloudbrain_dashboard.go +++ b/routers/api/v1/repo/cloudbrain_dashboard.go @@ -103,86 +103,62 @@ func GetAllCloudbrainsOverview(ctx *context.Context) { }) } func GetOverviewDuration(ctx *context.Context) { - recordCloudbrain, err := models.GetRecordBeginTime() - if err != nil { - log.Error("Can not get recordCloudbrain", err) - ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err")) - return - } - recordBeginTime := recordCloudbrain[0].Cloudbrain.CreatedUnix - now := time.Now() - endTime := now - var workServerNumber int64 - var cardNum int64 + durationSum := 0 + cardDurationSum := 0 - durationAllSum := int64(0) - cardDuSum := int64(0) + cloudBrainOneCardDuSum := 0 + cloudBrainTwoCardDuSum := 0 + c2NetCardDuSum := 0 + cDNetCardDuSum := 0 - cloudBrainOneCardDuSum := int64(0) - cloudBrainTwoCardDuSum := int64(0) - c2NetCardDuSum := int64(0) - cDNetCardDuSum := int64(0) + cloudBrainOneDuration := 0 + cloudBrainTwoDuration := 0 + c2NetDuration := 0 + cDCenterDuration := 0 - cloudBrainOneDuration := int64(0) - cloudBrainTwoDuration := int64(0) - c2NetDuration := int64(0) - cDCenterDuration := int64(0) - - cloudbrains, _, err := models.CloudbrainAllKanBan(&models.CloudbrainsOptions{ - Type: models.TypeCloudBrainAll, - BeginTimeUnix: int64(recordBeginTime), - EndTimeUnix: endTime.Unix(), - }) + cloudbrainTypeDuration, err := models.GetCloudbrainTypeCardDuration() if err != nil { - ctx.ServerError("Get cloudbrains failed:", err) + log.Error("GetCloudbrainTypeCardDuration err!", err) return } - models.LoadSpecs4CloudbrainInfo(cloudbrains) - - for _, cloudbrain := range cloudbrains { - cloudbrain = cloudbrainService.UpdateCloudbrainAiCenter(cloudbrain) - if cloudbrain.Cloudbrain.Spec != nil { - cardNum = int64(cloudbrain.Cloudbrain.Spec.AccCardsNum) - } else { - cardNum = 1 + for _, result := range cloudbrainTypeDuration { + if result.Type == models.TypeCloudBrainOne { + cloudBrainOneDuration = result.DurationSum + cloudBrainOneCardDuSum = result.CardDurationSum } - if cloudbrain.Cloudbrain.WorkServerNumber >= 1 { - workServerNumber = int64(cloudbrain.Cloudbrain.WorkServerNumber) - } else { - workServerNumber = 1 + if result.Type == models.TypeCloudBrainTwo { + cloudBrainTwoDuration = result.DurationSum + cloudBrainTwoCardDuSum = result.CardDurationSum } - duration := models.ConvertStrToDuration(cloudbrain.TrainJobDuration) - CardDuration := workServerNumber * int64(cardNum) * duration - - if cloudbrain.Cloudbrain.Type == models.TypeCloudBrainOne { - cloudBrainOneDuration += duration - cloudBrainOneCardDuSum += CardDuration - } else if cloudbrain.Cloudbrain.Type == models.TypeCloudBrainTwo { - cloudBrainTwoDuration += duration - cloudBrainTwoCardDuSum += CardDuration - } else if cloudbrain.Cloudbrain.Type == models.TypeC2Net { - c2NetDuration += duration - c2NetCardDuSum += CardDuration - } else if cloudbrain.Cloudbrain.Type == models.TypeCDCenter { - cDCenterDuration += duration - cDNetCardDuSum += CardDuration + if result.Type == models.TypeC2Net { + c2NetDuration = result.DurationSum + c2NetCardDuSum = result.CardDurationSum } - - durationAllSum += duration - cardDuSum += CardDuration + if result.Type == models.TypeCDCenter { + cDCenterDuration = result.DurationSum + cDNetCardDuSum = result.CardDurationSum + } + } + cloudbrainAllDuration, err := models.GetCloudbrainAllCardDuration() + if err != nil { + log.Error("GetCloudbrainAllCardDuration err!", err) + return } + durationSum = cloudbrainAllDuration.DurationSum + cardDurationSum = cloudbrainAllDuration.CardDurationSum + ctx.JSON(http.StatusOK, map[string]interface{}{ "cloudBrainOneCardDuSum": cloudBrainOneCardDuSum, "cloudBrainTwoCardDuSum": cloudBrainTwoCardDuSum, "c2NetCardDuSum": c2NetCardDuSum, "cDNetCardDuSum": cDNetCardDuSum, - "cardDuSum": cardDuSum, + "cardDuSum": cardDurationSum, "cloudBrainOneDuration": cloudBrainOneDuration, "cloudBrainTwoDuration": cloudBrainTwoDuration, "c2NetDuration": c2NetDuration, "cDCenterDuration": cDCenterDuration, - "durationSum": durationAllSum, + "durationSum": durationSum, }) }