ref: v3变更,,根据网元上报动态建表kpi/cdr/ue

This commit is contained in:
TsMask
2025-09-16 19:40:00 +08:00
parent f8bc5b662e
commit 69738ae7f4
36 changed files with 259 additions and 478 deletions

View File

@@ -105,12 +105,77 @@ func (r KpiReport) Insert(neType string, param model.KpiReport) int64 {
tableName := fmt.Sprintf("kpi_report_%s", strings.ToLower(neType))
// 执行插入
if err := db.DB("").Table(tableName).Create(&param).Error; err != nil {
logger.Errorf("insert err => %v", err.Error())
errMsg := err.Error()
// 动态创建表
if strings.HasPrefix(errMsg, "Error 1146 (42S02): Table") {
if err := r.createTableByMySQL(neType); err != nil {
logger.Errorf("create table err => %v", err.Error())
return 0
}
}
if strings.HasPrefix(errMsg, "SQL logic error: no such table") {
if err := r.createTableBySQLite(neType); err != nil {
logger.Errorf("create table err => %v", err.Error())
return 0
}
}
logger.Errorf("insert err => %v", errMsg)
return 0
}
return param.ID
}
// createTableByMySQL 创建表MySQL
func (r KpiReport) createTableByMySQL(neType string) error {
lowerNeType := strings.ToLower(neType)
sql := fmt.Sprintf(
`
CREATE TABLE IF NOT EXISTS kpi_report_%s (
id int NOT NULL AUTO_INCREMENT,
ne_id bigint DEFAULT '0' COMMENT '网元ID',
created_time bigint DEFAULT '0' COMMENT '创建时间',
record_time bigint DEFAULT '0' COMMENT '记录时间',
index int NOT NULL COMMENT 'Index of the report',
granularity int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)',
kpi_values text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String',
PRIMARY KEY (id) USING BTREE,
KEY idx_kpi_%s_ne_at (ne_id DESC, created_time DESC) USING BTREE COMMENT '索引-网元ID_记录时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_%s';
`,
lowerNeType, lowerNeType, strings.ToUpper(neType),
)
_, err := db.ExecDB("", sql, nil)
return err
}
// createTableBySQLite 创建表SQLite
func (r KpiReport) createTableBySQLite(neType string) error {
lowerNeType := strings.ToLower(neType)
sql := fmt.Sprintf(
`
CREATE TABLE IF NOT EXISTS "kpi_report_%s" (
"id" integer NOT NULL,
"ne_id" integer,
"created_time" integer,
"record_time" integer,
"index" integer NOT NULL,
"granularity" integer,
"kpi_values" text,
PRIMARY KEY ("id")
);
CREATE INDEX IF NOT EXISTS "idx_kpi_%s_ne_at"
ON "kpi_report_%s" (
"ne_id" DESC,
"created_time" DESC
);
`,
lowerNeType, lowerNeType, lowerNeType,
)
_, err := db.ExecDB("", sql, nil)
return err
}
// Select 查询数据
func (r KpiReport) Select(neType string, neId int64, beginTime, endTime int64) []model.KpiReport {
rows := []model.KpiReport{}