add: cdr and ue event for multi-tenancy
This commit is contained in:
@@ -2,6 +2,7 @@ package cdr
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
@@ -212,6 +213,7 @@ type CDREvent struct {
|
|||||||
RmUID string `json:"rmUID" xorm:"rm_uid"`
|
RmUID string `json:"rmUID" xorm:"rm_uid"`
|
||||||
Timestamp int `json:"timestamp" xorm:"timestamp"`
|
Timestamp int `json:"timestamp" xorm:"timestamp"`
|
||||||
CDR map[string]any `json:"CDR" xorm:"cdr_json"`
|
CDR map[string]any `json:"CDR" xorm:"cdr_json"`
|
||||||
|
TenantID string `json:"tenantID" xorm:"tenant_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func PostCDREventFromIMS(w http.ResponseWriter, r *http.Request) {
|
func PostCDREventFromIMS(w http.ResponseWriter, r *http.Request) {
|
||||||
@@ -234,6 +236,16 @@ func PostCDREventFromIMS(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
log.Trace("cdrEvent:", cdrEvent)
|
log.Trace("cdrEvent:", cdrEvent)
|
||||||
|
|
||||||
|
// for multi-tenancy
|
||||||
|
where := fmt.Sprintf("'%v' like msisdn", cdrEvent.CDR["callerParty"])
|
||||||
|
tenantID, err := dborm.XormGetSingleColStringByWhere("u_sub_user", "tenant_id", where)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("failed to get tenant_id:%v", err)
|
||||||
|
}
|
||||||
|
if tenantID != "" {
|
||||||
|
cdrEvent.TenantID = tenantID
|
||||||
|
}
|
||||||
|
|
||||||
affected, err := dborm.XormInsertTableOne("cdr_event_ims", cdrEvent)
|
affected, err := dborm.XormInsertTableOne("cdr_event_ims", cdrEvent)
|
||||||
if err != nil && affected <= 0 {
|
if err != nil && affected <= 0 {
|
||||||
log.Error("Failed to insert cdr_event_ims:", err)
|
log.Error("Failed to insert cdr_event_ims:", err)
|
||||||
@@ -271,6 +283,29 @@ func PostCDREventFromSMF(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
log.Trace("cdrEvent:", cdrEvent)
|
log.Trace("cdrEvent:", cdrEvent)
|
||||||
|
|
||||||
|
cdrJson, err := json.Marshal(cdrEvent.CDR)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("Failed to Marshal cdr:", err)
|
||||||
|
services.ResponseInternalServerError500ProcessError(w, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
cdr := new(ChargingRecord)
|
||||||
|
err = json.Unmarshal(cdrJson, &cdr)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("Failed to Unmarshal cdr:", err)
|
||||||
|
services.ResponseInternalServerError500ProcessError(w, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// for multi-tenancy
|
||||||
|
where := fmt.Sprintf("'%v' like imsi or '%v' like msisdn", cdr.SubscriberIdentifier.SubscriptionIDData, cdr.SubscriberIdentifier.SubscriptionIDData)
|
||||||
|
tenantID, err := dborm.XormGetSingleColStringByWhere("u_sub_user", "tenant_id", where)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("failed to get tenant_id:%v", err)
|
||||||
|
}
|
||||||
|
if tenantID != "" {
|
||||||
|
cdrEvent.TenantID = tenantID
|
||||||
|
}
|
||||||
|
|
||||||
affected, err := dborm.XormInsertTableOne("cdr_event_smf", cdrEvent)
|
affected, err := dborm.XormInsertTableOne("cdr_event_smf", cdrEvent)
|
||||||
if err != nil && affected <= 0 {
|
if err != nil && affected <= 0 {
|
||||||
log.Error("Failed to insert cdr_event_smf:", err)
|
log.Error("Failed to insert cdr_event_smf:", err)
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ type UEEvent struct {
|
|||||||
Timestamp int64 `json:"timestamp" xorm:"timestamp"`
|
Timestamp int64 `json:"timestamp" xorm:"timestamp"`
|
||||||
EventType string `json:"eventType" xorm:"event_type"`
|
EventType string `json:"eventType" xorm:"event_type"`
|
||||||
EventJson map[string]any `json:"eventJSON" xorm:"event_json"`
|
EventJson map[string]any `json:"eventJSON" xorm:"event_json"`
|
||||||
|
TenantID string `json:"tenantID" xorm:"tenant_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func PostUEEventFromAMF(c *gin.Context) {
|
func PostUEEventFromAMF(c *gin.Context) {
|
||||||
@@ -64,6 +65,16 @@ func PostUEEventFromAMF(c *gin.Context) {
|
|||||||
ueEvent.EventType = eventType
|
ueEvent.EventType = eventType
|
||||||
log.Trace("ueEvent AMF:", ueEvent)
|
log.Trace("ueEvent AMF:", ueEvent)
|
||||||
|
|
||||||
|
// for multi-tenancy
|
||||||
|
where := fmt.Sprintf("status='1' and tenancy_type='IMSI' and '%v' like tenancy_key", ueEvent.EventJson["imsi"])
|
||||||
|
tenantID, err := dborm.XormGetSingleColStringByWhere("sys_tenant", "parent_id", where)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("failed to get tenant_id:%v", err)
|
||||||
|
}
|
||||||
|
if tenantID != "" {
|
||||||
|
ueEvent.TenantID = tenantID
|
||||||
|
}
|
||||||
|
|
||||||
affected, err := dborm.XormInsertTableOne("ue_event_amf", ueEvent)
|
affected, err := dborm.XormInsertTableOne("ue_event_amf", ueEvent)
|
||||||
if err != nil && affected <= 0 {
|
if err != nil && affected <= 0 {
|
||||||
log.Error("Failed to insert ue_event_amf:", err)
|
log.Error("Failed to insert ue_event_amf:", err)
|
||||||
@@ -87,6 +98,16 @@ func PostUEEvent(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for multi-tenancy
|
||||||
|
where := fmt.Sprintf("status='1' and tenancy_type='IMSI' and '%v' like tenancy_key", ueEvent.EventJson["imsi"])
|
||||||
|
tenantID, err := dborm.XormGetSingleColStringByWhere("sys_tenant", "parent_id", where)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("failed to get tenant_id:%v", err)
|
||||||
|
}
|
||||||
|
if tenantID != "" {
|
||||||
|
ueEvent.TenantID = tenantID
|
||||||
|
}
|
||||||
|
|
||||||
ueEvent.NeType = strings.ToUpper(neType)
|
ueEvent.NeType = strings.ToUpper(neType)
|
||||||
tableName := fmt.Sprintf("ue_event_%s", strings.ToLower(neType))
|
tableName := fmt.Sprintf("ue_event_%s", strings.ToLower(neType))
|
||||||
affected, err := dborm.XormInsertTableOne(tableName, ueEvent)
|
affected, err := dborm.XormInsertTableOne(tableName, ueEvent)
|
||||||
|
|||||||
@@ -516,7 +516,6 @@ func (r *RepoUdmSubUser) SetTenantName(subArr *[]model.UdmSubUser) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *RepoUdmSubUser) SetTenantID(subArr *[]model.UdmSubUser) {
|
func (r *RepoUdmSubUser) SetTenantID(subArr *[]model.UdmSubUser) {
|
||||||
fmt.Printf("len:%d", len(*subArr))
|
|
||||||
for s := 0; s < len(*subArr); s++ {
|
for s := 0; s < len(*subArr); s++ {
|
||||||
var tenantID []string
|
var tenantID []string
|
||||||
err := datasource.DefaultDB().Table("sys_tenant").
|
err := datasource.DefaultDB().Table("sys_tenant").
|
||||||
|
|||||||
@@ -56,6 +56,8 @@ func (s *AMFController) UEList(c *gin.Context) {
|
|||||||
// }
|
// }
|
||||||
// querys.RmUID = neInfo.RmUID
|
// querys.RmUID = neInfo.RmUID
|
||||||
|
|
||||||
|
// for multi-tenancy
|
||||||
|
querys.UserName = ctx.LoginUserToUserName(c)
|
||||||
// 查询数据
|
// 查询数据
|
||||||
data := s.ueEventService.SelectPage(querys)
|
data := s.ueEventService.SelectPage(querys)
|
||||||
c.JSON(200, result.Ok(data))
|
c.JSON(200, result.Ok(data))
|
||||||
|
|||||||
@@ -56,7 +56,8 @@ func (s *IMSController) CDRList(c *gin.Context) {
|
|||||||
// return
|
// return
|
||||||
// }
|
// }
|
||||||
// querys.RmUID = neInfo.RmUID
|
// querys.RmUID = neInfo.RmUID
|
||||||
|
// for multi-tenancy
|
||||||
|
querys.UserName = ctx.LoginUserToUserName(c)
|
||||||
// 查询数据
|
// 查询数据
|
||||||
data := s.cdrEventService.SelectPage(querys)
|
data := s.cdrEventService.SelectPage(querys)
|
||||||
c.JSON(200, result.Ok(data))
|
c.JSON(200, result.Ok(data))
|
||||||
|
|||||||
@@ -57,6 +57,8 @@ func (s *MMEController) UEList(c *gin.Context) {
|
|||||||
// }
|
// }
|
||||||
// querys.RmUID = neInfo.RmUID
|
// querys.RmUID = neInfo.RmUID
|
||||||
|
|
||||||
|
// for multi-tenancy
|
||||||
|
querys.UserName = ctx.LoginUserToUserName(c)
|
||||||
// 查询数据
|
// 查询数据
|
||||||
data := s.ueEventService.SelectPage(querys)
|
data := s.ueEventService.SelectPage(querys)
|
||||||
c.JSON(200, result.Ok(data))
|
c.JSON(200, result.Ok(data))
|
||||||
|
|||||||
@@ -54,7 +54,8 @@ func (s *SMFController) CDRList(c *gin.Context) {
|
|||||||
// return
|
// return
|
||||||
// }
|
// }
|
||||||
// querys.RmUID = neInfo.RmUID
|
// querys.RmUID = neInfo.RmUID
|
||||||
|
// for multi-tenancy
|
||||||
|
querys.UserName = ctx.LoginUserToUserName(c)
|
||||||
// 查询数据
|
// 查询数据
|
||||||
data := s.cdrEventService.SelectPage(querys)
|
data := s.cdrEventService.SelectPage(querys)
|
||||||
c.JSON(200, result.Ok(data))
|
c.JSON(200, result.Ok(data))
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ type CDREventIMS struct {
|
|||||||
Timestamp int64 `json:"timestamp" gorm:"column:timestamp"`
|
Timestamp int64 `json:"timestamp" gorm:"column:timestamp"`
|
||||||
CDRJSONStr string `json:"cdrJSON" gorm:"column:cdr_json"`
|
CDRJSONStr string `json:"cdrJSON" gorm:"column:cdr_json"`
|
||||||
CreatedAt time.Time `json:"createdAt" gorm:"column:created_at;default:CURRENT_TIMESTAMP"`
|
CreatedAt time.Time `json:"createdAt" gorm:"column:created_at;default:CURRENT_TIMESTAMP"`
|
||||||
|
TenantID string `json:"tenantID" gorm:"column:tenant_id"`
|
||||||
|
TenantName string `json:"tenantName" gorm:"column:tenant_name"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// CDREventIMSQuery CDR会话对象IMS查询参数结构体
|
// CDREventIMSQuery CDR会话对象IMS查询参数结构体
|
||||||
@@ -23,6 +25,8 @@ type CDREventIMSQuery struct {
|
|||||||
CalledParty string `json:"calledParty" form:"calledParty"` // 被叫号码
|
CalledParty string `json:"calledParty" form:"calledParty"` // 被叫号码
|
||||||
StartTime string `json:"startTime" form:"startTime"`
|
StartTime string `json:"startTime" form:"startTime"`
|
||||||
EndTime string `json:"endTime" form:"endTime"`
|
EndTime string `json:"endTime" form:"endTime"`
|
||||||
|
TenantName string `json:"tenantName" form:"tenantName"`
|
||||||
|
UserName string `json:"userName" form:"userName"`
|
||||||
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段
|
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段
|
||||||
SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc
|
SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc
|
||||||
PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"`
|
PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"`
|
||||||
|
|||||||
@@ -11,7 +11,8 @@ type CDREventSMF struct {
|
|||||||
Timestamp int64 `json:"timestamp" gorm:"column:timestamp"`
|
Timestamp int64 `json:"timestamp" gorm:"column:timestamp"`
|
||||||
CDRJSONStr string `json:"cdrJSON" gorm:"column:cdr_json"`
|
CDRJSONStr string `json:"cdrJSON" gorm:"column:cdr_json"`
|
||||||
CreatedAt time.Time `json:"createdAt" gorm:"column:created_at;default:CURRENT_TIMESTAMP"`
|
CreatedAt time.Time `json:"createdAt" gorm:"column:created_at;default:CURRENT_TIMESTAMP"`
|
||||||
|
TenantID string `json:"tenantID" gorm:"column:tenant_id"`
|
||||||
|
TenantName string `json:"tenantName" gorm:"column:tenant_name"`
|
||||||
// ====== 非数据库字段属性 ======
|
// ====== 非数据库字段属性 ======
|
||||||
|
|
||||||
// RecordType string `json:"recordType" gorm:"column:record_type"`
|
// RecordType string `json:"recordType" gorm:"column:record_type"`
|
||||||
@@ -33,6 +34,8 @@ type CDREventSMFQuery struct {
|
|||||||
SubscriberID string `json:"subscriberID" form:"subscriberID"`
|
SubscriberID string `json:"subscriberID" form:"subscriberID"`
|
||||||
StartTime string `json:"startTime" form:"startTime"`
|
StartTime string `json:"startTime" form:"startTime"`
|
||||||
EndTime string `json:"endTime" form:"endTime"`
|
EndTime string `json:"endTime" form:"endTime"`
|
||||||
|
TenantName string `json:"tenantName" form:"tenantName"`
|
||||||
|
UserName string `json:"userName" form:"userName"`
|
||||||
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段
|
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段
|
||||||
SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc
|
SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc
|
||||||
PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"`
|
PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"`
|
||||||
|
|||||||
@@ -12,19 +12,23 @@ type UEEventAMF struct {
|
|||||||
EventType string `json:"eventType" gorm:"column:event_type"` // 事件类型 auth-result detach cm-state
|
EventType string `json:"eventType" gorm:"column:event_type"` // 事件类型 auth-result detach cm-state
|
||||||
EventJSONStr string `json:"eventJSON" gorm:"column:event_json"`
|
EventJSONStr string `json:"eventJSON" gorm:"column:event_json"`
|
||||||
CreatedAt time.Time `json:"createdAt" gorm:"column:created_at;default:CURRENT_TIMESTAMP"`
|
CreatedAt time.Time `json:"createdAt" gorm:"column:created_at;default:CURRENT_TIMESTAMP"`
|
||||||
|
TenantID string `json:"tenantID" gorm:"tenant_id"`
|
||||||
|
TenantName string `json:"tenantName" gorm:"column:tenant_name"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// UEEventAMFQuery UE会话对象AMF查询参数结构体
|
// UEEventAMFQuery UE会话对象AMF查询参数结构体
|
||||||
type UEEventAMFQuery struct {
|
type UEEventAMFQuery struct {
|
||||||
NeType string `json:"neType" form:"neType" binding:"required"` // 网元类型, 暂时支持AMF
|
NeType string `json:"neType" form:"neType" binding:"required"` // 网元类型, 暂时支持AMF
|
||||||
NeID string `json:"neId" form:"neId" binding:"required"`
|
NeID string `json:"neId" form:"neId" binding:"required"`
|
||||||
RmUID string `json:"rmUID" form:"rmUID"`
|
RmUID string `json:"rmUID" form:"rmUID"`
|
||||||
EventType string `json:"eventType" form:"eventType"` // 事件类型 auth-result detach cm-state
|
EventType string `json:"eventType" form:"eventType"` // 事件类型 auth-result detach cm-state
|
||||||
IMSI string `json:"imsi" form:"imsi"` // imsi
|
IMSI string `json:"imsi" form:"imsi"` // imsi
|
||||||
StartTime string `json:"startTime" form:"startTime"`
|
StartTime string `json:"startTime" form:"startTime"`
|
||||||
EndTime string `json:"endTime" form:"endTime"`
|
EndTime string `json:"endTime" form:"endTime"`
|
||||||
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段
|
TenantName string `json:"tenantName" form:"tenantName"`
|
||||||
SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc
|
UserName string `json:"userName" form:"userName"`
|
||||||
PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"`
|
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段
|
||||||
PageSize int64 `json:"pageSize" form:"pageSize" binding:"required"`
|
SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc
|
||||||
|
PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"`
|
||||||
|
PageSize int64 `json:"pageSize" form:"pageSize" binding:"required"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,19 +12,23 @@ type UEEventMME struct {
|
|||||||
EventType string `json:"eventType" gorm:"column:event_type"` // 事件类型 auth-result detach cm-state
|
EventType string `json:"eventType" gorm:"column:event_type"` // 事件类型 auth-result detach cm-state
|
||||||
EventJSONStr string `json:"eventJSON" gorm:"column:event_json"`
|
EventJSONStr string `json:"eventJSON" gorm:"column:event_json"`
|
||||||
CreatedAt time.Time `json:"createdAt" gorm:"column:created_at;default:CURRENT_TIMESTAMP"`
|
CreatedAt time.Time `json:"createdAt" gorm:"column:created_at;default:CURRENT_TIMESTAMP"`
|
||||||
|
TenantID string `json:"tenantID" gorm:"column:tenant_id"`
|
||||||
|
TenantName string `json:"tenantName" gorm:"column:tenant_name"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// UEEventMMEQuery UE会话对象MME查询参数结构体
|
// UEEventMMEQuery UE会话对象MME查询参数结构体
|
||||||
type UEEventMMEQuery struct {
|
type UEEventMMEQuery struct {
|
||||||
NeType string `json:"neType" form:"neType" binding:"required"` // 网元类型, 暂时支持MME
|
NeType string `json:"neType" form:"neType" binding:"required"` // 网元类型, 暂时支持MME
|
||||||
NeID string `json:"neId" form:"neId" binding:"required"`
|
NeID string `json:"neId" form:"neId" binding:"required"`
|
||||||
RmUID string `json:"rmUID" form:"rmUID"`
|
RmUID string `json:"rmUID" form:"rmUID"`
|
||||||
EventType string `json:"eventType" form:"eventType"` // 事件类型 auth-result detach cm-state
|
EventType string `json:"eventType" form:"eventType"` // 事件类型 auth-result detach cm-state
|
||||||
IMSI string `json:"imsi" form:"imsi"` // imsi
|
IMSI string `json:"imsi" form:"imsi"` // imsi
|
||||||
StartTime string `json:"startTime" form:"startTime"`
|
StartTime string `json:"startTime" form:"startTime"`
|
||||||
EndTime string `json:"endTime" form:"endTime"`
|
EndTime string `json:"endTime" form:"endTime"`
|
||||||
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段
|
TenantName string `json:"tenantName" form:"tenantName"`
|
||||||
SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc
|
UserName string `json:"userName" form:"userName"`
|
||||||
PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"`
|
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段
|
||||||
PageSize int64 `json:"pageSize" form:"pageSize" binding:"required"`
|
SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc
|
||||||
|
PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"`
|
||||||
|
PageSize int64 `json:"pageSize" form:"pageSize" binding:"required"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
dborm "be.ems/lib/core/datasource"
|
||||||
|
"be.ems/lib/log"
|
||||||
"be.ems/src/framework/datasource"
|
"be.ems/src/framework/datasource"
|
||||||
"be.ems/src/framework/logger"
|
"be.ems/src/framework/logger"
|
||||||
"be.ems/src/framework/utils/parse"
|
"be.ems/src/framework/utils/parse"
|
||||||
@@ -13,16 +15,21 @@ import (
|
|||||||
|
|
||||||
// 实例化数据层 CDREventImpl 结构体
|
// 实例化数据层 CDREventImpl 结构体
|
||||||
var NewCDREventIMSImpl = &CDREventIMSImpl{
|
var NewCDREventIMSImpl = &CDREventIMSImpl{
|
||||||
selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, cdr_json, created_at from cdr_event_ims`,
|
selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, cdr_json, created_at,
|
||||||
|
t.tenant_id, t.tenant_name
|
||||||
|
from cdr_event_ims c
|
||||||
|
left join sys_tenant t on t.tenant_id = c.tenant_id`,
|
||||||
|
|
||||||
resultMap: map[string]string{
|
resultMap: map[string]string{
|
||||||
"id": "ID",
|
"id": "ID",
|
||||||
"ne_type": "NeType",
|
"ne_type": "NeType",
|
||||||
"ne_name": "NeName",
|
"ne_name": "NeName",
|
||||||
"rm_uid": "RmUID",
|
"rm_uid": "RmUID",
|
||||||
"timestamp": "Timestamp",
|
"timestamp": "Timestamp",
|
||||||
"cdr_json": "CDRJSONStr",
|
"cdr_json": "CDRJSONStr",
|
||||||
"created_at": "CreatedAt",
|
"created_at": "CreatedAt",
|
||||||
|
"tenant_id": "TenantID",
|
||||||
|
"tenant_name": "TenantName",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,6 +100,33 @@ func (r *CDREventIMSImpl) SelectPage(querys model.CDREventIMSQuery) map[string]a
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for multi-tenancy solution
|
||||||
|
if querys.TenantName != "" {
|
||||||
|
var tenantID string
|
||||||
|
_, err := dborm.DefaultDB().Table("sys_tenant").
|
||||||
|
Where("tenant_name=?", querys.TenantName).Cols("tenant_id").Distinct().Get(&tenantID)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Get tenant_id from sys_user err => %v", err)
|
||||||
|
}
|
||||||
|
log.Tracef("userName=%v, tenantID=%v", querys.TenantName, tenantID)
|
||||||
|
if tenantID != "" {
|
||||||
|
conditions = append(conditions, "c.tenant_id = ?")
|
||||||
|
params = append(params, tenantID)
|
||||||
|
}
|
||||||
|
} else if querys.UserName != "" {
|
||||||
|
var tenantID string
|
||||||
|
_, err := dborm.DefaultDB().Table("sys_user").
|
||||||
|
Where("user_name=?", querys.UserName).Cols("tenant_id").Distinct().Get(&tenantID)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Get tenant_id from sys_user err => %v", err)
|
||||||
|
}
|
||||||
|
log.Tracef("userName=%v, tenantID=%v", querys.UserName, tenantID)
|
||||||
|
if tenantID != "" {
|
||||||
|
conditions = append(conditions, "c.tenant_id = ?")
|
||||||
|
params = append(params, tenantID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 构建查询条件语句
|
// 构建查询条件语句
|
||||||
whereSql := ""
|
whereSql := ""
|
||||||
if len(conditions) > 0 {
|
if len(conditions) > 0 {
|
||||||
@@ -105,7 +139,7 @@ func (r *CDREventIMSImpl) SelectPage(querys model.CDREventIMSQuery) map[string]a
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 查询数量 长度为0直接返回
|
// 查询数量 长度为0直接返回
|
||||||
totalSql := "select count(1) as 'total' from cdr_event_ims"
|
totalSql := "select count(1) as 'total' from cdr_event_ims c"
|
||||||
totalRows, err := datasource.RawDB("", totalSql+whereSql, params)
|
totalRows, err := datasource.RawDB("", totalSql+whereSql, params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("total err => %v", err)
|
logger.Errorf("total err => %v", err)
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
dborm "be.ems/lib/core/datasource"
|
||||||
|
"be.ems/lib/log"
|
||||||
"be.ems/src/framework/datasource"
|
"be.ems/src/framework/datasource"
|
||||||
"be.ems/src/framework/logger"
|
"be.ems/src/framework/logger"
|
||||||
"be.ems/src/framework/utils/parse"
|
"be.ems/src/framework/utils/parse"
|
||||||
@@ -13,17 +15,22 @@ import (
|
|||||||
|
|
||||||
// 实例化数据层 CDREventSMFImpl 结构体
|
// 实例化数据层 CDREventSMFImpl 结构体
|
||||||
var NewCDREventSMFImpl = &CDREventSMFImpl{
|
var NewCDREventSMFImpl = &CDREventSMFImpl{
|
||||||
selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, cdr_json, created_at from cdr_event_smf`,
|
selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, cdr_json, created_at,
|
||||||
|
t.tenant_id, t.tenant_name
|
||||||
|
from cdr_event_smf c
|
||||||
|
left join sys_tenant t on t.tenant_id = c.tenant_id`,
|
||||||
// selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, JSON_EXTRACT(cdr_json, '$.recordType') AS record_type, JSON_EXTRACT(cdr_json, '$.chargingID') AS charging_id, JSON_EXTRACT(cdr_json, '$.subscriberIdentifier.subscriptionIDData') AS subscriber_id, JSON_EXTRACT(cdr_json, '$.duration') AS duration, JSON_EXTRACT(cdr_json, '$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeUplink') AS data_volume_uplink, JSON_EXTRACT(cdr_json, '$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeDownlink') AS data_volume_downlink, JSON_EXTRACT(cdr_json, '$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataTotalVolume') AS data_total_volume, JSON_EXTRACT(cdr_json, '$.pDUSessionChargingInformation.pDUAddress') AS pdu_address, created_at from cdr_event_smf`,
|
// selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, JSON_EXTRACT(cdr_json, '$.recordType') AS record_type, JSON_EXTRACT(cdr_json, '$.chargingID') AS charging_id, JSON_EXTRACT(cdr_json, '$.subscriberIdentifier.subscriptionIDData') AS subscriber_id, JSON_EXTRACT(cdr_json, '$.duration') AS duration, JSON_EXTRACT(cdr_json, '$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeUplink') AS data_volume_uplink, JSON_EXTRACT(cdr_json, '$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataVolumeDownlink') AS data_volume_downlink, JSON_EXTRACT(cdr_json, '$.listOfMultipleUnitUsage[*].usedUnitContainer[*].dataTotalVolume') AS data_total_volume, JSON_EXTRACT(cdr_json, '$.pDUSessionChargingInformation.pDUAddress') AS pdu_address, created_at from cdr_event_smf`,
|
||||||
|
|
||||||
resultMap: map[string]string{
|
resultMap: map[string]string{
|
||||||
"id": "ID",
|
"id": "ID",
|
||||||
"ne_type": "NeType",
|
"ne_type": "NeType",
|
||||||
"ne_name": "NeName",
|
"ne_name": "NeName",
|
||||||
"rm_uid": "RmUID",
|
"rm_uid": "RmUID",
|
||||||
"timestamp": "Timestamp",
|
"timestamp": "Timestamp",
|
||||||
"cdr_json": "CDRJSONStr",
|
"cdr_json": "CDRJSONStr",
|
||||||
"created_at": "CreatedAt",
|
"created_at": "CreatedAt",
|
||||||
|
"tenant_id": "TenantID",
|
||||||
|
"tenant_name": "TenantName",
|
||||||
// "id": "ID",
|
// "id": "ID",
|
||||||
// "ne_type": "NeType",
|
// "ne_type": "NeType",
|
||||||
// "ne_name": "NeName",
|
// "ne_name": "NeName",
|
||||||
@@ -100,6 +107,33 @@ func (r *CDREventSMFImpl) SelectPage(querys model.CDREventSMFQuery) map[string]a
|
|||||||
params = append(params, querys.SubscriberID)
|
params = append(params, querys.SubscriberID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for multi-tenancy solution
|
||||||
|
if querys.TenantName != "" {
|
||||||
|
var tenantID string
|
||||||
|
_, err := dborm.DefaultDB().Table("sys_tenant").
|
||||||
|
Where("tenant_name=?", querys.TenantName).Cols("tenant_id").Distinct().Get(&tenantID)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Get tenant_id from sys_user err => %v", err)
|
||||||
|
}
|
||||||
|
log.Tracef("userName=%v, tenantID=%v", querys.TenantName, tenantID)
|
||||||
|
if tenantID != "" {
|
||||||
|
conditions = append(conditions, "c.tenant_id = ?")
|
||||||
|
params = append(params, tenantID)
|
||||||
|
}
|
||||||
|
} else if querys.UserName != "" {
|
||||||
|
var tenantID string
|
||||||
|
_, err := dborm.DefaultDB().Table("sys_user").
|
||||||
|
Where("user_name=?", querys.UserName).Cols("tenant_id").Distinct().Get(&tenantID)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Get tenant_id from sys_user err => %v", err)
|
||||||
|
}
|
||||||
|
log.Tracef("userName=%v, tenantID=%v", querys.UserName, tenantID)
|
||||||
|
if tenantID != "" {
|
||||||
|
conditions = append(conditions, "c.tenant_id = ?")
|
||||||
|
params = append(params, tenantID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 构建查询条件语句
|
// 构建查询条件语句
|
||||||
whereSql := ""
|
whereSql := ""
|
||||||
if len(conditions) > 0 {
|
if len(conditions) > 0 {
|
||||||
@@ -112,7 +146,7 @@ func (r *CDREventSMFImpl) SelectPage(querys model.CDREventSMFQuery) map[string]a
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 查询数量 长度为0直接返回
|
// 查询数量 长度为0直接返回
|
||||||
totalSql := "select count(1) as 'total' from cdr_event_smf"
|
totalSql := "select count(1) as 'total' from cdr_event_smf c"
|
||||||
totalRows, err := datasource.RawDB("", totalSql+whereSql, params)
|
totalRows, err := datasource.RawDB("", totalSql+whereSql, params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("total err => %v", err)
|
logger.Errorf("total err => %v", err)
|
||||||
|
|||||||
@@ -95,8 +95,10 @@ func (r *UDMSubImpl) SelectPage(query map[string]any) map[string]any {
|
|||||||
params = append(params, strings.Trim(v.(string), " "))
|
params = append(params, strings.Trim(v.(string), " "))
|
||||||
}
|
}
|
||||||
if v, ok := query["imsi"]; ok && v != "" {
|
if v, ok := query["imsi"]; ok && v != "" {
|
||||||
conditions = append(conditions, "imsi like concat(concat('%', ?), '%')")
|
//conditions = append(conditions, "imsi like concat(concat('%', ?), '%')")
|
||||||
params = append(params, strings.Trim(v.(string), " "))
|
//params = append(params, strings.Trim(v.(string), " "))
|
||||||
|
conditions = append(conditions, "imsi like ?")
|
||||||
|
params = append(params, v)
|
||||||
}
|
}
|
||||||
if v, ok := query["neId"]; ok && v != "" {
|
if v, ok := query["neId"]; ok && v != "" {
|
||||||
conditions = append(conditions, "ne_id = ?")
|
conditions = append(conditions, "ne_id = ?")
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
dborm "be.ems/lib/core/datasource"
|
||||||
|
"be.ems/lib/log"
|
||||||
"be.ems/src/framework/datasource"
|
"be.ems/src/framework/datasource"
|
||||||
"be.ems/src/framework/logger"
|
"be.ems/src/framework/logger"
|
||||||
"be.ems/src/framework/utils/parse"
|
"be.ems/src/framework/utils/parse"
|
||||||
@@ -13,17 +15,22 @@ import (
|
|||||||
|
|
||||||
// 实例化数据层 UEEventAMFImpl 结构体
|
// 实例化数据层 UEEventAMFImpl 结构体
|
||||||
var NewUEEventAMFImpl = &UEEventAMFImpl{
|
var NewUEEventAMFImpl = &UEEventAMFImpl{
|
||||||
selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, event_type, event_json, created_at from ue_event_amf`,
|
selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, event_type, event_json, created_at,
|
||||||
|
t.tenant_id, t.tenant_name
|
||||||
|
from ue_event_amf e
|
||||||
|
left join sys_tenant t on t.tenant_id = e.tenant_id`,
|
||||||
|
|
||||||
resultMap: map[string]string{
|
resultMap: map[string]string{
|
||||||
"id": "ID",
|
"id": "ID",
|
||||||
"ne_type": "NeType",
|
"ne_type": "NeType",
|
||||||
"ne_name": "NeName",
|
"ne_name": "NeName",
|
||||||
"rm_uid": "RmUID",
|
"rm_uid": "RmUID",
|
||||||
"timestamp": "Timestamp",
|
"timestamp": "Timestamp",
|
||||||
"event_type": "EventType",
|
"event_type": "EventType",
|
||||||
"event_json": "EventJSONStr",
|
"event_json": "EventJSONStr",
|
||||||
"created_at": "CreatedAt",
|
"created_at": "CreatedAt",
|
||||||
|
"tenant_id": "TenantID",
|
||||||
|
"tenant_name": "TenantName",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,6 +97,32 @@ func (r *UEEventAMFImpl) SelectPage(querys model.UEEventAMFQuery) map[string]any
|
|||||||
params = append(params, querys.IMSI)
|
params = append(params, querys.IMSI)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for multi-tenancy solution
|
||||||
|
if querys.TenantName != "" {
|
||||||
|
var tenantID string
|
||||||
|
_, err := dborm.DefaultDB().Table("sys_tenant").
|
||||||
|
Where("tenant_name=?", querys.TenantName).Cols("tenant_id").Distinct().Get(&tenantID)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Get tenant_id from sys_user err => %v", err)
|
||||||
|
}
|
||||||
|
log.Tracef("userName=%v, tenantID=%v", querys.TenantName, tenantID)
|
||||||
|
if tenantID != "" {
|
||||||
|
conditions = append(conditions, "e.tenant_id = ?")
|
||||||
|
params = append(params, tenantID)
|
||||||
|
}
|
||||||
|
} else if querys.UserName != "" {
|
||||||
|
var tenantID string
|
||||||
|
_, err := dborm.DefaultDB().Table("sys_user").
|
||||||
|
Where("user_name=?", querys.UserName).Cols("tenant_id").Distinct().Get(&tenantID)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Get tenant_id from sys_user err => %v", err)
|
||||||
|
}
|
||||||
|
log.Tracef("userName=%v, tenantID=%v", querys.UserName, tenantID)
|
||||||
|
if tenantID != "" {
|
||||||
|
conditions = append(conditions, "e.tenant_id = ?")
|
||||||
|
params = append(params, tenantID)
|
||||||
|
}
|
||||||
|
}
|
||||||
// 构建查询条件语句
|
// 构建查询条件语句
|
||||||
whereSql := ""
|
whereSql := ""
|
||||||
if len(conditions) > 0 {
|
if len(conditions) > 0 {
|
||||||
@@ -102,7 +135,7 @@ func (r *UEEventAMFImpl) SelectPage(querys model.UEEventAMFQuery) map[string]any
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 查询数量 长度为0直接返回
|
// 查询数量 长度为0直接返回
|
||||||
totalSql := "select count(1) as 'total' from ue_event_amf"
|
totalSql := "select count(1) as 'total' from ue_event_amf e"
|
||||||
totalRows, err := datasource.RawDB("", totalSql+whereSql, params)
|
totalRows, err := datasource.RawDB("", totalSql+whereSql, params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("total err => %v", err)
|
logger.Errorf("total err => %v", err)
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
dborm "be.ems/lib/core/datasource"
|
||||||
|
"be.ems/lib/log"
|
||||||
"be.ems/src/framework/datasource"
|
"be.ems/src/framework/datasource"
|
||||||
"be.ems/src/framework/logger"
|
"be.ems/src/framework/logger"
|
||||||
"be.ems/src/framework/utils/parse"
|
"be.ems/src/framework/utils/parse"
|
||||||
@@ -13,17 +15,22 @@ import (
|
|||||||
|
|
||||||
// 实例化数据层 UEEventMMEImpl 结构体
|
// 实例化数据层 UEEventMMEImpl 结构体
|
||||||
var NewUEEventMMEImpl = &UEEventMMEImpl{
|
var NewUEEventMMEImpl = &UEEventMMEImpl{
|
||||||
selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, event_type, event_json, created_at from ue_event_mme`,
|
selectSql: `select id, ne_type, ne_name, rm_uid, timestamp, event_type, event_json, created_at,
|
||||||
|
t.tenant_id, t.tenant_name
|
||||||
|
from ue_event_mme e
|
||||||
|
left join sys_tenant t on t.tenant_id = e.tenant_id`,
|
||||||
|
|
||||||
resultMap: map[string]string{
|
resultMap: map[string]string{
|
||||||
"id": "ID",
|
"id": "ID",
|
||||||
"ne_type": "NeType",
|
"ne_type": "NeType",
|
||||||
"ne_name": "NeName",
|
"ne_name": "NeName",
|
||||||
"rm_uid": "RmUID",
|
"rm_uid": "RmUID",
|
||||||
"timestamp": "Timestamp",
|
"timestamp": "Timestamp",
|
||||||
"event_type": "EventType",
|
"event_type": "EventType",
|
||||||
"event_json": "EventJSONStr",
|
"event_json": "EventJSONStr",
|
||||||
"created_at": "CreatedAt",
|
"created_at": "CreatedAt",
|
||||||
|
"tenant_id": "TenantID",
|
||||||
|
"tenant_name": "TenantName",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,6 +97,33 @@ func (r *UEEventMMEImpl) SelectPage(querys model.UEEventMMEQuery) map[string]any
|
|||||||
params = append(params, querys.IMSI)
|
params = append(params, querys.IMSI)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for multi-tenancy solution
|
||||||
|
if querys.TenantName != "" {
|
||||||
|
var tenantID string
|
||||||
|
_, err := dborm.DefaultDB().Table("sys_tenant").
|
||||||
|
Where("tenant_name=?", querys.TenantName).Cols("tenant_id").Distinct().Get(&tenantID)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Get tenant_id from sys_user err => %v", err)
|
||||||
|
}
|
||||||
|
log.Tracef("userName=%v, tenantID=%v", querys.TenantName, tenantID)
|
||||||
|
if tenantID != "" {
|
||||||
|
conditions = append(conditions, "e.tenant_id = ?")
|
||||||
|
params = append(params, tenantID)
|
||||||
|
}
|
||||||
|
} else if querys.UserName != "" {
|
||||||
|
var tenantID string
|
||||||
|
_, err := dborm.DefaultDB().Table("sys_user").
|
||||||
|
Where("user_name=?", querys.UserName).Cols("tenant_id").Distinct().Get(&tenantID)
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Get tenant_id from sys_user err => %v", err)
|
||||||
|
}
|
||||||
|
log.Tracef("userName=%v, tenantID=%v", querys.UserName, tenantID)
|
||||||
|
if tenantID != "" {
|
||||||
|
conditions = append(conditions, "e.tenant_id = ?")
|
||||||
|
params = append(params, tenantID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 构建查询条件语句
|
// 构建查询条件语句
|
||||||
whereSql := ""
|
whereSql := ""
|
||||||
if len(conditions) > 0 {
|
if len(conditions) > 0 {
|
||||||
@@ -102,7 +136,7 @@ func (r *UEEventMMEImpl) SelectPage(querys model.UEEventMMEQuery) map[string]any
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 查询数量 长度为0直接返回
|
// 查询数量 长度为0直接返回
|
||||||
totalSql := "select count(1) as 'total' from ue_event_mme"
|
totalSql := "select count(1) as 'total' from ue_event_mme e"
|
||||||
totalRows, err := datasource.RawDB("", totalSql+whereSql, params)
|
totalRows, err := datasource.RawDB("", totalSql+whereSql, params)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Errorf("total err => %v", err)
|
logger.Errorf("total err => %v", err)
|
||||||
|
|||||||
Reference in New Issue
Block a user