378 lines
10 KiB
Go
378 lines
10 KiB
Go
package kpi_c_report
|
||
|
||
import (
|
||
"fmt"
|
||
"net/http"
|
||
"sort"
|
||
"strconv"
|
||
"strings"
|
||
|
||
"be.ems/lib/dborm"
|
||
"be.ems/lib/services"
|
||
"github.com/gin-gonic/gin"
|
||
)
|
||
|
||
func (k *KpiCReport) Get(c *gin.Context) {
|
||
var reports []KpiCReport
|
||
var conditions []string
|
||
var params []any
|
||
|
||
var querys KpiCReportQuery
|
||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||
c.JSON(http.StatusBadRequest, services.ErrResp(err.Error()))
|
||
return
|
||
}
|
||
|
||
// construct condition to get
|
||
if querys.NeType != "" {
|
||
conditions = append(conditions, "ne_type = ?")
|
||
params = append(params, strings.ToUpper(querys.NeType))
|
||
} else {
|
||
c.JSON(http.StatusBadRequest, services.ErrResp("Not found NE type"))
|
||
return
|
||
}
|
||
tableName := TableName() + "_" + strings.ToLower(querys.NeType)
|
||
dbg := dborm.DefaultDB().Table(tableName)
|
||
|
||
if querys.NeID != "" {
|
||
conditions = append(conditions, "rm_uid = (select n.rm_uid from ne_info n where n.ne_type=? and n.ne_id=?)")
|
||
params = append(params, strings.ToUpper(querys.NeType), querys.NeID)
|
||
} else {
|
||
c.JSON(http.StatusBadRequest, services.ErrResp("Not found required parameter NE ID"))
|
||
return
|
||
}
|
||
if querys.StartTime != "" {
|
||
conditions = append(conditions, "created_at >= ?")
|
||
params = append(params, querys.StartTime)
|
||
}
|
||
if querys.EndTime != "" {
|
||
conditions = append(conditions, "created_at <= ?")
|
||
params = append(params, querys.EndTime)
|
||
}
|
||
conditions = append(conditions, "kpi_values != 'null'")
|
||
|
||
whereSql := ""
|
||
if len(conditions) > 0 {
|
||
whereSql += strings.Join(conditions, " and ")
|
||
dbg = dbg.Where(whereSql, params...)
|
||
}
|
||
// page number and size
|
||
if pageSize := querys.PageSize; pageSize > 0 {
|
||
dbg = dbg.Limit(pageSize)
|
||
if pageNum := querys.PageNum; pageNum > 0 {
|
||
dbg = dbg.Offset((pageNum - 1) * pageSize)
|
||
}
|
||
}
|
||
|
||
// order by
|
||
if sortField, sortOrder := querys.SortField, querys.SortOrder; sortField != "" && sortOrder != "" {
|
||
orderBy := fmt.Sprintf("%s %s", sortField, sortOrder)
|
||
dbg = dbg.Order(orderBy)
|
||
}
|
||
|
||
//err := dborm.DefaultDB().Table(tableName).Where(whereSql, params...).Find(&reports).Error
|
||
err := dbg.Find(&reports).Error
|
||
if err != nil {
|
||
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
|
||
return
|
||
}
|
||
c.JSON(http.StatusOK, services.DataResp(reports))
|
||
}
|
||
|
||
func (k *KpiCReport) GetReport2FE(c *gin.Context) {
|
||
var results []KpiCReport
|
||
var conditions []string
|
||
var params []any
|
||
|
||
var querys KpiCReportQuery
|
||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
|
||
return
|
||
}
|
||
|
||
// construct condition to get
|
||
if querys.NeType != "" {
|
||
conditions = append(conditions, "ne_type = ?")
|
||
params = append(params, strings.ToUpper(querys.NeType))
|
||
} else {
|
||
c.JSON(http.StatusOK, services.ErrResp("Not found required parameter NE type"))
|
||
return
|
||
}
|
||
tableName := TableName() + "_" + strings.ToLower(querys.NeType)
|
||
dbg := dborm.DefaultDB().Table(tableName)
|
||
|
||
if querys.NeID != "" {
|
||
conditions = append(conditions, "rm_uid = (select n.rm_uid from ne_info n where n.ne_type=? and n.ne_id=?)")
|
||
params = append(params, querys.NeType, querys.NeID)
|
||
} else {
|
||
c.JSON(http.StatusBadRequest, services.ErrResp("Not found required parameter NE ID"))
|
||
return
|
||
}
|
||
if querys.StartTime != "" {
|
||
conditions = append(conditions, "created_at >= ?")
|
||
params = append(params, querys.StartTime)
|
||
}
|
||
if querys.EndTime != "" {
|
||
conditions = append(conditions, "created_at <= ?")
|
||
params = append(params, querys.EndTime)
|
||
}
|
||
conditions = append(conditions, "kpi_values != 'null'")
|
||
|
||
whereSql := ""
|
||
if len(conditions) > 0 {
|
||
whereSql += strings.Join(conditions, " and ")
|
||
dbg = dbg.Where(whereSql, params...)
|
||
}
|
||
// page number and size
|
||
if pageSize := querys.PageSize; pageSize > 0 {
|
||
dbg = dbg.Limit(pageSize)
|
||
if pageNum := querys.PageNum; pageNum > 0 {
|
||
dbg = dbg.Offset((pageNum - 1) * pageSize)
|
||
}
|
||
}
|
||
|
||
// order by
|
||
// if sortField, sortOrder := querys.SortField, querys.SortOrder; sortField != "" && sortOrder != "" {
|
||
// orderBy := fmt.Sprintf("%s %s", sortField, sortOrder)
|
||
// dbg = dbg.Order(orderBy)
|
||
// }
|
||
|
||
//err := dborm.DefaultDB().Table(tableName).Where(whereSql, params...).Find(&reports).Error
|
||
err := dbg.Find(&results).Error
|
||
if err != nil {
|
||
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
|
||
return
|
||
}
|
||
|
||
// 排序
|
||
if querys.SortField != "" {
|
||
sort.SliceStable(results, func(i, j int) bool {
|
||
// 支持的排序字段映射
|
||
fieldGetters := map[string]func(*KpiCReport) any{
|
||
"id": func(row *KpiCReport) any { return row.ID },
|
||
"timeGroup": func(row *KpiCReport) any { return row.CreatedAt },
|
||
"created_at": func(row *KpiCReport) any { return row.CreatedAt },
|
||
// 可添加更多支持的字段
|
||
}
|
||
|
||
// 获取字段 getter 函数
|
||
getter, ok := fieldGetters[querys.SortField]
|
||
if !ok {
|
||
// 非法字段,使用默认排序(id升序)
|
||
return results[i].ID < results[j].ID
|
||
}
|
||
|
||
// 获取比较值
|
||
valI, valJ := getter(&results[i]), getter(&results[j])
|
||
|
||
// 根据字段类型进行比较
|
||
switch v := valI.(type) {
|
||
case int64:
|
||
if querys.SortOrder == "desc" {
|
||
return v > valJ.(int64)
|
||
}
|
||
return v < valJ.(int64)
|
||
case string:
|
||
if querys.SortOrder == "desc" {
|
||
return v > valJ.(string)
|
||
}
|
||
return v < valJ.(string)
|
||
default:
|
||
// 不支持的字段类型,使用默认排序
|
||
return results[i].ID < results[j].ID
|
||
}
|
||
})
|
||
}
|
||
|
||
reports := []map[string]any{}
|
||
for _, r := range results {
|
||
report := map[string]any{
|
||
// kip_id ...
|
||
"neType": *r.NeType,
|
||
"neId": querys.NeID,
|
||
"neName": *r.NeName,
|
||
"rmUID": *r.RmUID,
|
||
"startIndex": r.Index,
|
||
"timeGroup": r.Date[:10] + " " + *r.EndTime,
|
||
"createdAt": r.CreatedAt,
|
||
"granularity": r.Granularity,
|
||
}
|
||
|
||
for _, k := range r.KpiValues {
|
||
formatted := fmt.Sprintf("%.3f", k.Value)
|
||
formattedFloat, err := strconv.ParseFloat(formatted, 64)
|
||
if err != nil {
|
||
formattedFloat = 0
|
||
}
|
||
report[k.KPIID] = formattedFloat
|
||
}
|
||
reports = append(reports, report)
|
||
}
|
||
c.JSON(http.StatusOK, services.DataResp(reports))
|
||
}
|
||
|
||
func (k *KpiCReport) GetTotalList(c *gin.Context) {
|
||
var reports []KpiCReport
|
||
var conditions []string
|
||
var params []any
|
||
|
||
var querys KpiCReportQuery
|
||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
|
||
return
|
||
}
|
||
|
||
// construct condition to get
|
||
if querys.NeType != "" {
|
||
conditions = append(conditions, "ne_type = ?")
|
||
params = append(params, strings.ToUpper(querys.NeType))
|
||
} else {
|
||
c.JSON(http.StatusOK, services.ErrResp("Not found NE type"))
|
||
return
|
||
}
|
||
tableName := TableName() + "_" + strings.ToLower(querys.NeType)
|
||
dbg := dborm.DefaultDB().Table(tableName)
|
||
|
||
if querys.StartTime != "" {
|
||
conditions = append(conditions, "created_at >= ?")
|
||
params = append(params, querys.StartTime)
|
||
}
|
||
if querys.EndTime != "" {
|
||
conditions = append(conditions, "created_at <= ?")
|
||
params = append(params, querys.EndTime)
|
||
}
|
||
conditions = append(conditions, "kpi_values != 'null'")
|
||
|
||
whereSql := ""
|
||
if len(conditions) > 0 {
|
||
whereSql += strings.Join(conditions, " and ")
|
||
dbg = dbg.Where(whereSql, params...)
|
||
}
|
||
|
||
// get total number
|
||
var total int64 = 0
|
||
err := dbg.Count(&total).Error
|
||
if err != nil {
|
||
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
|
||
return
|
||
}
|
||
|
||
// page number and size
|
||
if pageSize := querys.PageSize; pageSize > 0 {
|
||
dbg = dbg.Limit(pageSize)
|
||
if pageNum := querys.PageNum; pageNum > 0 {
|
||
dbg = dbg.Offset((pageNum - 1) * pageSize)
|
||
}
|
||
}
|
||
|
||
// order by
|
||
if sortField, sortOrder := querys.SortField, querys.SortOrder; sortField != "" && sortOrder != "" {
|
||
orderBy := fmt.Sprintf("%s %s", sortField, sortOrder)
|
||
dbg = dbg.Order(orderBy)
|
||
}
|
||
|
||
//err := dborm.DefaultDB().Table(tableName).Where(whereSql, params...).Find(&reports).Error
|
||
err = dbg.Find(&reports).Error
|
||
if err != nil {
|
||
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
|
||
return
|
||
}
|
||
|
||
c.JSON(http.StatusOK, services.TotalDataResp(reports, total))
|
||
}
|
||
|
||
func (k *KpiCReport) Total(c *gin.Context) {
|
||
var conditions []string
|
||
var params []any
|
||
|
||
var querys KpiCReportQuery
|
||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
|
||
return
|
||
}
|
||
|
||
// construct condition to get
|
||
if querys.NeType != "" {
|
||
conditions = append(conditions, "ne_type = ?")
|
||
params = append(params, strings.ToUpper(querys.NeType))
|
||
} else {
|
||
c.JSON(http.StatusOK, services.ErrResp("Not found NE type"))
|
||
return
|
||
}
|
||
tableName := TableName() + "_" + strings.ToLower(querys.NeType)
|
||
dbg := dborm.DefaultDB().Table(tableName)
|
||
|
||
if querys.StartTime != "" {
|
||
conditions = append(conditions, "created_at >= ?")
|
||
params = append(params, querys.StartTime)
|
||
}
|
||
if querys.EndTime != "" {
|
||
conditions = append(conditions, "created_at <= ?")
|
||
params = append(params, querys.EndTime)
|
||
}
|
||
conditions = append(conditions, "kpi_values != 'null'")
|
||
|
||
whereSql := ""
|
||
if len(conditions) > 0 {
|
||
whereSql += strings.Join(conditions, " and ")
|
||
dbg = dbg.Where(whereSql, params...)
|
||
}
|
||
var total int64 = 0
|
||
err := dbg.Count(&total).Error
|
||
if err != nil {
|
||
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
|
||
return
|
||
}
|
||
|
||
c.JSON(http.StatusOK, services.TotalResp(total))
|
||
}
|
||
|
||
func (k *KpiCReport) Post(c *gin.Context) {
|
||
var report KpiCReport
|
||
|
||
if err := c.ShouldBindJSON(&report); err != nil {
|
||
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
|
||
return
|
||
}
|
||
if err := dborm.DefaultDB().Create(&report).Error; err != nil {
|
||
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
|
||
return
|
||
}
|
||
c.JSON(http.StatusCreated, services.DataResp(report))
|
||
}
|
||
|
||
func (k *KpiCReport) Put(c *gin.Context) {
|
||
var report KpiCReport
|
||
id := c.Param("id")
|
||
|
||
if err := dborm.DefaultDB().First(&report, id).Error; err != nil {
|
||
c.JSON(http.StatusOK, services.ErrResp("custom indicator report not found"))
|
||
return
|
||
}
|
||
|
||
if err := c.ShouldBindJSON(&report); err != nil {
|
||
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
|
||
return
|
||
}
|
||
dborm.DefaultDB().Save(&report)
|
||
c.JSON(http.StatusOK, services.DataResp(report))
|
||
}
|
||
|
||
func (k *KpiCReport) Delete(c *gin.Context) {
|
||
id := c.Param("id")
|
||
|
||
if err := dborm.DefaultDB().Delete(&KpiCReport{}, id).Error; err != nil {
|
||
c.JSON(http.StatusOK, services.ErrResp("custom indicator report not found"))
|
||
return
|
||
}
|
||
|
||
c.JSON(http.StatusNoContent, nil) // 204 No Content
|
||
}
|
||
|
||
func InsertKpiCReport(neType string, report KpiCReport) {
|
||
tableName := TableName() + "_" + strings.ToLower(neType)
|
||
if err := dborm.DefaultDB().Table(tableName).Create(&report).Error; err != nil {
|
||
return
|
||
}
|
||
}
|