package kpi_c_report import ( "fmt" "net/http" "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=? and n.status=1)") 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, "(UNIX_TIMESTAMP(created_at) * 1000) >= ?") params = append(params, querys.StartTime) } if querys.EndTime != "" { conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) <= ?") params = append(params, querys.EndTime) } 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=? and n.status=1)") 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, "(UNIX_TIMESTAMP(created_at) * 1000) >= ?") params = append(params, querys.StartTime) } if querys.EndTime != "" { conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) <= ?") params = append(params, querys.EndTime) } 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 } 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 { report[k.KPIID] = k.Value } 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, "(UNIX_TIMESTAMP(created_at) * 1000) >= ?") params = append(params, querys.StartTime) } if querys.EndTime != "" { conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) <= ?") params = append(params, querys.EndTime) } 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, "(UNIX_TIMESTAMP(created_at) * 1000) >= ?") params = append(params, querys.StartTime) } if querys.EndTime != "" { conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) <= ?") params = append(params, querys.EndTime) } 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 } }