@@ -17,76 +17,6 @@ type PerfKPIImpl struct{}
// SelectGoldKPI 通过网元指标数据信息
func ( r * PerfKPIImpl ) SelectGoldKPI ( query model . GoldKPIQuery , kpiIds [ ] string ) [ ] map [ string ] any {
// 查询条件拼接
var conditions [ ] string
var params [ ] any
if query . RmUID != "" {
conditions = append ( conditions , "gk.rm_uid = ?" )
params = append ( params , query . RmUID )
}
if query . NeType != "" {
conditions = append ( conditions , "gk.ne_type = ?" )
params = append ( params , query . NeType )
}
if query . StartTime != "" {
conditions = append ( conditions , "gk.start_time >= ?" )
params = append ( params , query . StartTime )
}
if query . EndTime != "" {
conditions = append ( conditions , "gk.start_time <= ?" )
params = append ( params , query . EndTime )
}
// 构建查询条件语句
whereSql := ""
if len ( conditions ) > 0 {
whereSql += " where " + strings . Join ( conditions , " and " )
}
// 查询字段列
timeFormat := "DATE_FORMAT(gk.start_time, '%Y-%m-%d %H:%i:')"
secondGroup := fmt . Sprintf ( "LPAD(FLOOR(SECOND(gk.start_time) / %d) * %d, 2, '0')" , query . Interval , query . Interval )
groupByField := fmt . Sprintf ( "CONCAT( %s, %s ) AS timeGroup" , timeFormat , secondGroup )
if query . Interval > 60 {
minute := query . Interval / 60
timeFormat = "DATE_FORMAT(gk.start_time, '%Y-%m-%d %H:')"
minuteGroup := fmt . Sprintf ( "LPAD(FLOOR(MINUTE(gk.start_time) / %d) * %d, 2, '0')" , minute , minute )
groupByField = fmt . Sprintf ( "CONCAT( %s, %s ) AS timeGroup" , timeFormat , minuteGroup )
}
var fields = [ ] string {
groupByField ,
"min(CASE WHEN gk.index != '' THEN gk.index ELSE 0 END) AS startIndex" ,
"min(CASE WHEN gk.ne_type != '' THEN gk.ne_type ELSE 0 END) AS neType" ,
"min(CASE WHEN gk.ne_name != '' THEN gk.ne_name ELSE 0 END) AS neName" ,
}
for _ , kid := range kpiIds {
// 特殊字段, 只取最后一次收到的非0值
if kid == "AMF.01" || kid == "UDM.01" || kid == "UDM.02" || kid == "UDM.03" || kid == "SMF.01" {
str := fmt . Sprintf ( "IFNULL(SUBSTRING_INDEX(GROUP_CONCAT( CASE WHEN gk.kpi_id = '%s' and gk.VALUE != 0 THEN gk.VALUE END ), ',', 1), 0) AS '%s'" , kid , kid )
fields = append ( fields , str )
} else {
str := fmt . Sprintf ( "sum(CASE WHEN gk.kpi_id = '%s' THEN gk.value ELSE 0 END) AS '%s'" , kid , kid )
fields = append ( fields , str )
}
}
fieldsSql := strings . Join ( fields , "," )
// 查询数据
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 )
}
return results
}
func ( r * PerfKPIImpl ) SelectKpiReport ( query model . GoldKPIQuery , kpiIds [ ] string ) [ ] map [ string ] any {
// 查询条件拼接
var conditions [ ] string
var params [ ] any
@@ -100,43 +30,15 @@ func (r *PerfKPIImpl) SelectKpiReport(query model.GoldKPIQuery, kpiIds []string)
// params = append(params, query.NeType)
tableName += strings . ToLower ( query . NeType )
}
var dateStr1 , dateStr2 , timeStr1 , timeStr2 string
if query . StartTime != "" {
dateStr1 = query . StartTime [ : 10 ]
timeStr1 = query . StartTime [ 11 : ]
conditions = append ( conditions , "gk.created_at >= ?" )
params = append ( params , query . StartTime )
}
if query . EndTime != "" {
dateStr2 = query . EndTime [ : 10 ]
timeStr2 = query . EndTime [ 11 : ]
}
if dateStr1 == dateStr2 && dateStr1 != "" {
conditions = append ( conditions , "gk.`date` = ?" )
params = append ( params , dateStr1 )
conditions = append ( conditions , "gk.`start_time` >= ?" )
params = append ( params , timeStr1 )
conditions = append ( conditions , "gk.`start_time` <= ?" )
params = append ( params , timeStr2 )
} else {
if dateStr1 != "" {
conditions = append ( conditions , "(gk.`date` > ? OR (gk.`date` = ? AND gk.`start_time` >= ?))" )
params = append ( params , dateStr1 , dateStr1 , timeStr1 )
}
if dateStr2 != "" {
conditions = append ( conditions , "(gk.`date` < ? OR (gk.`date` = ? AND gk.`start_time` <= ?))" )
params = append ( params , dateStr2 , dateStr2 , timeStr2 )
}
conditions = append ( conditions , "gk.created_at <= ?" )
params = append ( params , query . EndTime )
}
// var dateTimeStr string = "CONCAT(gk.`date`, \" \", gk.start_time)"
// if query.StartTime != "" {
// conditions = append(conditions, dateTimeStr+" >= ?")
// params = append(params, query.StartTime)
// }
// if query.EndTime != "" {
// conditions = append(conditions, dateTimeStr+" <= ?")
// params = append(params, query.EndTime)
// }
// 构建查询条件语句
whereSql := ""
if len ( conditions ) > 0 {
@@ -144,18 +46,9 @@ func (r *PerfKPIImpl) SelectKpiReport(query model.GoldKPIQuery, kpiIds []string)
}
// 查询字段列
var dateTimeStr string = "CONCAT(gk.`date`, \" \", gk.start_time)"
timeFormat := "DATE_FORMAT(" + dateTimeStr + ", '%Y-%m-%d %H:%i:')"
secondGroup := fmt . Sprintf ( "LPAD(FLOOR(SECOND(gk.start_time) / %d) * %d, 2, '0')" , query . Interval , query . Interval )
groupByField := fmt . Sprintf ( "CONCAT( %s, %s ) AS timeGroup" , timeFormat , secondGroup )
if query . Interval > 60 {
minute := query . Interval / 60
timeFormat = "DATE_FORMAT(" + dateTimeStr + ", '%Y-%m-%d %H:')"
minuteGroup := fmt . Sprintf ( "LPAD(FLOOR(MINUTE(gk.start_time) / %d) * %d, 2, '0')" , minute , minute )
groupByField = fmt . Sprintf ( "CONCAT( %s, %s ) AS timeGroup" , timeFormat , minuteGroup )
}
var fields = [ ] string {
groupByField ,
// fmt.Sprintf("FROM_UNIXTIME(FLOOR(gk.created_at / (%d * 1000)) * %d) AS timeGroup", query.Interval, query.Interval) ,
fmt . Sprintf ( "CONCAT(FLOOR(gk.created_at / (%d * 1000)) * (%d * 1000)) AS timeGroup" , query . Interval , query . Interval ) , // 时间戳毫秒
"min(CASE WHEN gk.index != '' THEN gk.index ELSE 0 END) AS startIndex" ,
"min(CASE WHEN gk.ne_type != '' THEN gk.ne_type ELSE 0 END) AS neType" ,
"min(CASE WHEN gk.ne_name != '' THEN gk.ne_name ELSE 0 END) AS neName" ,