fix: customized kpi features issues

This commit is contained in:
2024-11-06 17:19:17 +08:00
parent 64cd68d5b0
commit 802210cb7d
4 changed files with 49 additions and 7 deletions

View File

@@ -106,11 +106,11 @@ func (k *KpiCReport) GetReport2FE(c *gin.Context) {
return return
} }
if querys.StartTime != "" { if querys.StartTime != "" {
conditions = append(conditions, "created_at >= ?") conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) >= ?")
params = append(params, querys.StartTime) params = append(params, querys.StartTime)
} }
if querys.EndTime != "" { if querys.EndTime != "" {
conditions = append(conditions, "created_at <= ?") conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) <= ?")
params = append(params, querys.EndTime) params = append(params, querys.EndTime)
} }
@@ -185,11 +185,11 @@ func (k *KpiCReport) GetTotalList(c *gin.Context) {
dbg := dborm.DefaultDB().Table(tableName) dbg := dborm.DefaultDB().Table(tableName)
if querys.StartTime != "" { if querys.StartTime != "" {
conditions = append(conditions, "created_at >= ?") conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) >= ?")
params = append(params, querys.StartTime) params = append(params, querys.StartTime)
} }
if querys.EndTime != "" { if querys.EndTime != "" {
conditions = append(conditions, "created_at <= ?") conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) <= ?")
params = append(params, querys.EndTime) params = append(params, querys.EndTime)
} }
@@ -253,11 +253,11 @@ func (k *KpiCReport) Total(c *gin.Context) {
dbg := dborm.DefaultDB().Table(tableName) dbg := dborm.DefaultDB().Table(tableName)
if querys.StartTime != "" { if querys.StartTime != "" {
conditions = append(conditions, "created_at >= ?") conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) >= ?")
params = append(params, querys.StartTime) params = append(params, querys.StartTime)
} }
if querys.EndTime != "" { if querys.EndTime != "" {
conditions = append(conditions, "created_at <= ?") conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) <= ?")
params = append(params, querys.EndTime) params = append(params, querys.EndTime)
} }

View File

@@ -3,10 +3,12 @@ package kpi_c_title
import ( import (
"fmt" "fmt"
"net/http" "net/http"
"strconv"
"strings" "strings"
"be.ems/lib/dborm" "be.ems/lib/dborm"
"be.ems/lib/services" "be.ems/lib/services"
"be.ems/src/framework/utils/ctx"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
@@ -120,17 +122,45 @@ func (k *KpiCTitle) Total(c *gin.Context) {
} }
func (k *KpiCTitle) Post(c *gin.Context) { func (k *KpiCTitle) Post(c *gin.Context) {
var title KpiCTitle var title, res KpiCTitle
if err := c.ShouldBindJSON(&title); err != nil { if err := c.ShouldBindJSON(&title); err != nil {
c.JSON(http.StatusOK, services.ErrResp(err.Error())) c.JSON(http.StatusOK, services.ErrResp(err.Error()))
return return
} }
userName := ctx.LoginUserToUserName(c)
title.CreatedBy = &userName
result := dborm.DefaultDB().Where("ne_type=? and (kpi_id=? or title=?)", title.NeType, title.KpiID, title.Title).First(&title) result := dborm.DefaultDB().Where("ne_type=? and (kpi_id=? or title=?)", title.NeType, title.KpiID, title.Title).First(&title)
if result.RowsAffected > 0 { if result.RowsAffected > 0 {
c.JSON(http.StatusOK, services.ErrResp("custom indicator already exist")) c.JSON(http.StatusOK, services.ErrResp("custom indicator already exist"))
return return
} }
ret := dborm.DefaultDB().Table("kpi_c_title").Where("ne_type=? ORDER BY kpi_id DESC LIMIT 1", title.NeType).Scan(&res)
if err := ret.Error; err != nil {
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
return
}
newKpiID := *title.NeType + ".C" + ".01"
if ret.RowsAffected != 0 {
maxKpiID := *res.KpiID
prefix := maxKpiID[:len(maxKpiID)-2]
suffix := maxKpiID[len(maxKpiID)-2:]
suffixInt, err := strconv.Atoi(suffix)
if err != nil {
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
return
}
if suffixInt >= MAX_KPI_C_ID {
err := fmt.Errorf("exceed the max customized KPI ID")
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
return
}
suffixInt++
newSuffix := fmt.Sprintf("%02d", suffixInt)
newKpiID = prefix + newSuffix
}
title.KpiID = &newKpiID
if err := dborm.DefaultDB().Create(&title).Error; err != nil { if err := dborm.DefaultDB().Create(&title).Error; err != nil {
c.JSON(http.StatusOK, services.ErrResp(err.Error())) c.JSON(http.StatusOK, services.ErrResp(err.Error()))
return return

View File

@@ -2,6 +2,10 @@ package kpi_c_title
import "time" import "time"
const (
MAX_KPI_C_ID = 99
)
type KpiCTitle struct { type KpiCTitle struct {
ID int `gorm:"column:id;primary_key;auto_increment" json:"id"` ID int `gorm:"column:id;primary_key;auto_increment" json:"id"`
NeType *string `gorm:"column:ne_type;default:NULL," json:"neType,omitempty"` NeType *string `gorm:"column:ne_type;default:NULL," json:"neType,omitempty"`

View File

@@ -5,6 +5,7 @@ import (
"go/ast" "go/ast"
"go/parser" "go/parser"
"go/token" "go/token"
"math"
"regexp" "regexp"
"strconv" "strconv"
"strings" "strings"
@@ -29,6 +30,9 @@ func CalcExpr(expr string, paramValues map[string]any) (float64, error) {
// expression to evaluate // expression to evaluate
result, err := evalExpr(expr) result, err := evalExpr(expr)
if math.IsNaN(result) {
return 0.0, err
}
return result, err return result, err
} }
@@ -87,6 +91,10 @@ func evalNode(node ast.Node) (float64, error) {
case token.MUL: case token.MUL:
result = left * right result = left * right
case token.QUO: case token.QUO:
if right == 0 {
return math.NaN(), fmt.Errorf("divisor cannot be zero")
}
result = left / right result = left / right
} }
case *ast.BasicLit: case *ast.BasicLit: