package repository import ( "fmt" "strings" "time" "be.ems/src/framework/database/db" "be.ems/src/framework/logger" "be.ems/src/modules/ne_data/model" ) // 实例化数据层 UEEvent 结构体 var NewUEEvent = &UEEvent{} // UEEvent UE会话事件 数据层处理 type UEEvent struct{} // SelectByPage 分页查询集合 func (r UEEvent) SelectByPage(neType string, query map[string]string) ([]model.UEEvent, int64) { // 表名 tableName := fmt.Sprintf("ue_event_%s", strings.ToLower(neType)) tx := db.DB("").Table(tableName).Model(&model.UEEvent{}) // 查询条件拼接 if v, ok := query["rmUID"]; ok && v != "" { tx = tx.Where("rm_uid = ?", v) } if v, ok := query["beginTime"]; ok && v != "" { if len(v) == 10 { v = v + "000" } tx = tx.Where("created_at >= ?", v) } if v, ok := query["endTime"]; ok && v != "" { if len(v) == 10 { v = v + "000" } tx = tx.Where("created_at <= ?", v) } if v, ok := query["eventType"]; ok && v != "" { eventTypes := strings.Split(v, ",") tx = tx.Where("event_type in ?", eventTypes) } if v, ok := query["imsi"]; ok && v != "" { tx = tx.Where("JSON_EXTRACT(event_json, '$.imsi') like ?", fmt.Sprintf("%%%s%%", v)) } // 查询结果 var total int64 = 0 rows := []model.UEEvent{} // 查询数量 长度为0直接返回 if err := tx.Count(&total).Error; err != nil || total <= 0 { return rows, total } // 分页 if query["pageNum"] != "" && query["pageSize"] != "" { pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"]) tx = tx.Offset(int(pageNum * pageSize)).Limit(int(pageSize)) } // 排序 if v, ok := query["sortField"]; ok && v != "" { sortOrder := "asc" if o, ok := query["sortOrder"]; ok && o != "" { if o != "asc" { sortOrder = "desc" } } tx = tx.Order(fmt.Sprintf("%s %s", v, sortOrder)) } // 查询数据 if err := tx.Find(&rows).Error; err != nil { logger.Errorf("query err => %v", err) return rows, total } return rows, total } // SelectByIds 通过ID查询 func (r UEEvent) SelectByIds(neType string, ids []int64) []model.UEEvent { rows := []model.UEEvent{} if len(ids) <= 0 { return rows } // 表名 tableName := fmt.Sprintf("ue_event_%s", strings.ToLower(neType)) tx := db.DB("").Table(tableName).Model(&model.UEEvent{}) // 构建查询条件 tx = tx.Where("id in ?", ids) // 查询数据 if err := tx.Find(&rows).Error; err != nil { logger.Errorf("query find err => %v", err.Error()) return rows } return rows } // DeleteByIds 批量删除信息 func (r UEEvent) DeleteByIds(neType string, ids []int64) int64 { if len(ids) <= 0 { return 0 } // 表名 tableName := fmt.Sprintf("ue_event_%s", strings.ToLower(neType)) tx := db.DB("").Table(tableName).Where("id in ?", ids) if err := tx.Delete(&model.UEEvent{}).Error; err != nil { logger.Errorf("delete err => %v", err.Error()) return 0 } return tx.RowsAffected } // Insert 新增信息 返回新增数据ID func (r UEEvent) Insert(param model.UEEvent) int64 { if param.NeType == "" { return 0 } if param.CreatedAt == 0 { param.CreatedAt = time.Now().UnixMilli() } // 表名 tableName := fmt.Sprintf("ue_event_%s", strings.ToLower(param.NeType)) // 执行插入 if err := db.DB("").Table(tableName).Create(¶m).Error; err != nil { logger.Errorf("insert err => %v", err.Error()) return 0 } return param.ID }