From 55893741ef6e58e1fb40e9d69bb3fc1063415300 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 27 Dec 2023 17:30:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20kpi=E6=8C=87=E6=A0=87=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=94=AF=E6=8C=81=E6=A0=B9=E6=8D=AE=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network_element/controller/perf_kpi.go | 23 ++++----------- src/modules/network_element/model/perf_kpi.go | 12 ++++++++ .../network_element/repository/perf_kpi.go | 4 +-- .../repository/perf_kpi.impl.go | 29 ++++++++++++------- .../network_element/service/perf_kpi.go | 4 +-- .../network_element/service/perf_kpi.impl.go | 11 +++++-- 6 files changed, 48 insertions(+), 35 deletions(-) diff --git a/src/modules/network_element/controller/perf_kpi.go b/src/modules/network_element/controller/perf_kpi.go index 05919a05..aadc7aaf 100644 --- a/src/modules/network_element/controller/perf_kpi.go +++ b/src/modules/network_element/controller/perf_kpi.go @@ -5,6 +5,7 @@ import ( "ems.agt/src/framework/i18n" "ems.agt/src/framework/utils/ctx" "ems.agt/src/framework/vo/result" + "ems.agt/src/modules/network_element/model" neService "ems.agt/src/modules/network_element/service" "github.com/gin-gonic/gin" ) @@ -30,13 +31,7 @@ type PerfKPIController struct { // GET /data func (s *PerfKPIController) GoldKPI(c *gin.Context) { language := ctx.AcceptLanguage(c) - var querys struct { - NeType string `form:"neType" binding:"required"` - NeID string `form:"neId" binding:"required"` - StartTime string `form:"startTime" binding:"required"` - EndTime string `form:"endTime" binding:"required"` - Interval int64 `form:"interval" binding:"required"` - } + var querys model.GoldKPIQuery if err := c.ShouldBindQuery(&querys); err != nil { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) return @@ -47,12 +42,10 @@ func (s *PerfKPIController) GoldKPI(c *gin.Context) { if startTime.IsZero() { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) } - startTimeStr := startTime.Format(date.YYYY_MM_DD_HH_MM_SS) endTime := date.ParseStrToDate(querys.EndTime, date.YYYY_MM_DD_HH_MM_SS) - if startTime.IsZero() { + if endTime.IsZero() { c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400"))) } - endTimeStr := endTime.Format(date.YYYY_MM_DD_HH_MM_SS) // 查询网元获取IP neInfo := s.neInfoService.SelectNeInfoByNeTypeAndNeID(querys.NeType, querys.NeID) @@ -60,16 +53,10 @@ func (s *PerfKPIController) GoldKPI(c *gin.Context) { c.JSON(200, result.ErrMsg(i18n.TKey(language, "app.common.noNEInfo"))) return } - - // 获取数据指标id - var kpiIds []string - kpiTitles := s.perfKPIService.SelectGoldKPITitle(neInfo.NeType) - for _, kpiId := range kpiTitles { - kpiIds = append(kpiIds, kpiId.KPIID) - } + querys.RmUID = neInfo.RmUID // 查询数据 - kpiData := s.perfKPIService.SelectGoldKPI(neInfo.RmUID, neInfo.NeType, startTimeStr, endTimeStr, kpiIds, querys.Interval) + kpiData := s.perfKPIService.SelectGoldKPI(querys) c.JSON(200, result.OkData(kpiData)) } diff --git a/src/modules/network_element/model/perf_kpi.go b/src/modules/network_element/model/perf_kpi.go index def01641..108d81f2 100644 --- a/src/modules/network_element/model/perf_kpi.go +++ b/src/modules/network_element/model/perf_kpi.go @@ -9,3 +9,15 @@ type GoldKPITitle struct { CnTitle string `json:"cnTitle" gorm:"column:cn_title"` EnTitle string `json:"enTitle" gorm:"column:en_title"` } + +// GoldKPIQuery 黄金指标查询参数结构体 +type GoldKPIQuery struct { + NeType string `form:"neType" binding:"required"` + NeID string `form:"neId" binding:"required"` + StartTime string `form:"startTime" binding:"required"` + EndTime string `form:"endTime" binding:"required"` + Interval int64 `form:"interval" binding:"required"` + RmUID string `form:"rmUID"` + SortField string `form:"sortField" binding:"omitempty,oneof=timeGroup"` + SortOrder string `form:"sortOrder" binding:"omitempty,oneof=asc desc"` +} diff --git a/src/modules/network_element/repository/perf_kpi.go b/src/modules/network_element/repository/perf_kpi.go index 3035dca1..2c21acdf 100644 --- a/src/modules/network_element/repository/perf_kpi.go +++ b/src/modules/network_element/repository/perf_kpi.go @@ -4,8 +4,8 @@ import "ems.agt/src/modules/network_element/model" // 性能统计 数据层接口 type IPerfKPI interface { - // SelectGoldKPI 通过ne_type和ne_id查询网元信息 - SelectGoldKPI(rmUID, neType string, startTime, endTime string, kpiIds []string, interval int64) []map[string]any + // SelectGoldKPI 通过网元指标数据信息 + SelectGoldKPI(query model.GoldKPIQuery, kpiIds []string) []map[string]any // SelectGoldKPITitle SelectGoldKPITitle(neType string) []model.GoldKPITitle diff --git a/src/modules/network_element/repository/perf_kpi.impl.go b/src/modules/network_element/repository/perf_kpi.impl.go index 7a45f482..e6aaddeb 100644 --- a/src/modules/network_element/repository/perf_kpi.impl.go +++ b/src/modules/network_element/repository/perf_kpi.impl.go @@ -16,25 +16,25 @@ var NewPerfKPIImpl = &PerfKPIImpl{} type PerfKPIImpl struct{} // SelectGoldKPI 通过网元指标数据信息 -func (r *PerfKPIImpl) SelectGoldKPI(rmUID, neType string, startTime, endTime string, kpiIds []string, interval int64) []map[string]any { +func (r *PerfKPIImpl) SelectGoldKPI(query model.GoldKPIQuery, kpiIds []string) []map[string]any { // 查询条件拼接 var conditions []string var params []any - if rmUID != "" { + if query.RmUID != "" { conditions = append(conditions, "gk.rm_uid = ?") - params = append(params, rmUID) + params = append(params, query.RmUID) } - if neType != "" { + if query.NeType != "" { conditions = append(conditions, "gk.ne_type = ?") - params = append(params, neType) + params = append(params, query.NeType) } - if startTime != "" { + if query.StartTime != "" { conditions = append(conditions, "gk.start_time >= ?") - params = append(params, startTime) + params = append(params, query.StartTime) } - if endTime != "" { + if query.EndTime != "" { conditions = append(conditions, "gk.start_time <= ?") - params = append(params, endTime) + params = append(params, query.EndTime) } // 构建查询条件语句 whereSql := "" @@ -44,7 +44,7 @@ func (r *PerfKPIImpl) SelectGoldKPI(rmUID, neType string, startTime, endTime str // 查询字段列 timeFormat := "DATE_FORMAT(gk.start_time, '%Y-%m-%d %H:')" - minuteGroup := fmt.Sprintf("LPAD(FLOOR(MINUTE(gk.start_time) / %d) * %d, 2, '0')", interval, interval) + minuteGroup := fmt.Sprintf("LPAD(FLOOR(MINUTE(gk.start_time) / %d) * %d, 2, '0')", query.Interval, query.Interval) groupByField := fmt.Sprintf("CONCAT( %s, %s ) AS timeGroup", timeFormat, minuteGroup) var fields = []string{ groupByField, @@ -58,7 +58,14 @@ func (r *PerfKPIImpl) SelectGoldKPI(rmUID, neType string, startTime, endTime str fieldsSql := strings.Join(fields, ",") // 查询数据 - querySql := fmt.Sprintf("SELECT %s FROM gold_kpi gk %s GROUP BY timeGroup", fieldsSql, whereSql) + if query.SortField == "" { + query.SortField = "timeGroup" + } + if query.SortOrder == "" { + query.SortOrder = "desc" + } + orderSql := fmt.Sprintf(" order by %s %s", query.SortField, query.SortOrder) + querySql := fmt.Sprintf("SELECT %s FROM gold_kpi gk %s GROUP BY timeGroup %s", fieldsSql, whereSql, orderSql) results, err := datasource.RawDB("", querySql, params) if err != nil { logger.Errorf("query err => %v", err) diff --git a/src/modules/network_element/service/perf_kpi.go b/src/modules/network_element/service/perf_kpi.go index 201d2f84..decd5dc0 100644 --- a/src/modules/network_element/service/perf_kpi.go +++ b/src/modules/network_element/service/perf_kpi.go @@ -4,8 +4,8 @@ import "ems.agt/src/modules/network_element/model" // 性能统计 数据层接口 type IPerfKPI interface { - // SelectGoldKPI 通过ne_type和ne_id查询网元信息 - SelectGoldKPI(rmUID, neType string, startTime, endTime string, kpiIds []string, interval int64) []map[string]any + // SelectGoldKPI 通过网元指标数据信息 + SelectGoldKPI(query model.GoldKPIQuery) []map[string]any // SelectGoldKPITitle SelectGoldKPITitle(neType string) []model.GoldKPITitle diff --git a/src/modules/network_element/service/perf_kpi.impl.go b/src/modules/network_element/service/perf_kpi.impl.go index 40032390..da2f7d05 100644 --- a/src/modules/network_element/service/perf_kpi.impl.go +++ b/src/modules/network_element/service/perf_kpi.impl.go @@ -17,8 +17,15 @@ type PerfKPIImpl struct { } // SelectGoldKPI 通过网元指标数据信息 -func (r *PerfKPIImpl) SelectGoldKPI(rmUID, neType string, startTime, endTime string, kpiIds []string, interval int64) []map[string]any { - data := r.perfKPIRepository.SelectGoldKPI(rmUID, neType, startTime, endTime, kpiIds, interval) +func (r *PerfKPIImpl) SelectGoldKPI(query model.GoldKPIQuery) []map[string]any { + // 获取数据指标id + var kpiIds []string + kpiTitles := r.perfKPIRepository.SelectGoldKPITitle(query.NeType) + for _, kpiId := range kpiTitles { + kpiIds = append(kpiIds, kpiId.KPIID) + } + + data := r.perfKPIRepository.SelectGoldKPI(query, kpiIds) if data == nil { return []map[string]any{} }