add: cdr and ue event for multi-tenancy
This commit is contained in:
@@ -2,6 +2,7 @@ package cdr
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"time"
|
||||
@@ -212,6 +213,7 @@ type CDREvent struct {
|
||||
RmUID string `json:"rmUID" xorm:"rm_uid"`
|
||||
Timestamp int `json:"timestamp" xorm:"timestamp"`
|
||||
CDR map[string]any `json:"CDR" xorm:"cdr_json"`
|
||||
TenantID string `json:"tenantID" xorm:"tenant_id"`
|
||||
}
|
||||
|
||||
func PostCDREventFromIMS(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -234,6 +236,16 @@ func PostCDREventFromIMS(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
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)
|
||||
if err != nil && affected <= 0 {
|
||||
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)
|
||||
|
||||
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)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to insert cdr_event_smf:", err)
|
||||
|
||||
@@ -33,6 +33,7 @@ type UEEvent struct {
|
||||
Timestamp int64 `json:"timestamp" xorm:"timestamp"`
|
||||
EventType string `json:"eventType" xorm:"event_type"`
|
||||
EventJson map[string]any `json:"eventJSON" xorm:"event_json"`
|
||||
TenantID string `json:"tenantID" xorm:"tenant_id"`
|
||||
}
|
||||
|
||||
func PostUEEventFromAMF(c *gin.Context) {
|
||||
@@ -64,6 +65,16 @@ func PostUEEventFromAMF(c *gin.Context) {
|
||||
ueEvent.EventType = eventType
|
||||
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)
|
||||
if err != nil && affected <= 0 {
|
||||
log.Error("Failed to insert ue_event_amf:", err)
|
||||
@@ -87,6 +98,16 @@ func PostUEEvent(w http.ResponseWriter, r *http.Request) {
|
||||
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)
|
||||
tableName := fmt.Sprintf("ue_event_%s", strings.ToLower(neType))
|
||||
affected, err := dborm.XormInsertTableOne(tableName, ueEvent)
|
||||
|
||||
@@ -516,7 +516,6 @@ func (r *RepoUdmSubUser) SetTenantName(subArr *[]model.UdmSubUser) {
|
||||
}
|
||||
|
||||
func (r *RepoUdmSubUser) SetTenantID(subArr *[]model.UdmSubUser) {
|
||||
fmt.Printf("len:%d", len(*subArr))
|
||||
for s := 0; s < len(*subArr); s++ {
|
||||
var tenantID []string
|
||||
err := datasource.DefaultDB().Table("sys_tenant").
|
||||
|
||||
@@ -56,6 +56,8 @@ func (s *AMFController) UEList(c *gin.Context) {
|
||||
// }
|
||||
// querys.RmUID = neInfo.RmUID
|
||||
|
||||
// for multi-tenancy
|
||||
querys.UserName = ctx.LoginUserToUserName(c)
|
||||
// 查询数据
|
||||
data := s.ueEventService.SelectPage(querys)
|
||||
c.JSON(200, result.Ok(data))
|
||||
|
||||
@@ -56,7 +56,8 @@ func (s *IMSController) CDRList(c *gin.Context) {
|
||||
// return
|
||||
// }
|
||||
// querys.RmUID = neInfo.RmUID
|
||||
|
||||
// for multi-tenancy
|
||||
querys.UserName = ctx.LoginUserToUserName(c)
|
||||
// 查询数据
|
||||
data := s.cdrEventService.SelectPage(querys)
|
||||
c.JSON(200, result.Ok(data))
|
||||
|
||||
@@ -57,6 +57,8 @@ func (s *MMEController) UEList(c *gin.Context) {
|
||||
// }
|
||||
// querys.RmUID = neInfo.RmUID
|
||||
|
||||
// for multi-tenancy
|
||||
querys.UserName = ctx.LoginUserToUserName(c)
|
||||
// 查询数据
|
||||
data := s.ueEventService.SelectPage(querys)
|
||||
c.JSON(200, result.Ok(data))
|
||||
|
||||
@@ -54,7 +54,8 @@ func (s *SMFController) CDRList(c *gin.Context) {
|
||||
// return
|
||||
// }
|
||||
// querys.RmUID = neInfo.RmUID
|
||||
|
||||
// for multi-tenancy
|
||||
querys.UserName = ctx.LoginUserToUserName(c)
|
||||
// 查询数据
|
||||
data := s.cdrEventService.SelectPage(querys)
|
||||
c.JSON(200, result.Ok(data))
|
||||
|
||||
@@ -11,6 +11,8 @@ type CDREventIMS struct {
|
||||
Timestamp int64 `json:"timestamp" gorm:"column:timestamp"`
|
||||
CDRJSONStr string `json:"cdrJSON" gorm:"column:cdr_json"`
|
||||
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查询参数结构体
|
||||
@@ -23,6 +25,8 @@ type CDREventIMSQuery struct {
|
||||
CalledParty string `json:"calledParty" form:"calledParty"` // 被叫号码
|
||||
StartTime string `json:"startTime" form:"startTime"`
|
||||
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"` // 排序字段,填写结果字段
|
||||
SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc
|
||||
PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"`
|
||||
|
||||
@@ -11,7 +11,8 @@ type CDREventSMF struct {
|
||||
Timestamp int64 `json:"timestamp" gorm:"column:timestamp"`
|
||||
CDRJSONStr string `json:"cdrJSON" gorm:"column:cdr_json"`
|
||||
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"`
|
||||
@@ -33,6 +34,8 @@ type CDREventSMFQuery struct {
|
||||
SubscriberID string `json:"subscriberID" form:"subscriberID"`
|
||||
StartTime string `json:"startTime" form:"startTime"`
|
||||
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"` // 排序字段,填写结果字段
|
||||
SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc
|
||||
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
|
||||
EventJSONStr string `json:"eventJSON" gorm:"column:event_json"`
|
||||
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查询参数结构体
|
||||
type UEEventAMFQuery struct {
|
||||
NeType string `json:"neType" form:"neType" binding:"required"` // 网元类型, 暂时支持AMF
|
||||
NeID string `json:"neId" form:"neId" binding:"required"`
|
||||
RmUID string `json:"rmUID" form:"rmUID"`
|
||||
EventType string `json:"eventType" form:"eventType"` // 事件类型 auth-result detach cm-state
|
||||
IMSI string `json:"imsi" form:"imsi"` // imsi
|
||||
StartTime string `json:"startTime" form:"startTime"`
|
||||
EndTime string `json:"endTime" form:"endTime"`
|
||||
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段
|
||||
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"`
|
||||
NeType string `json:"neType" form:"neType" binding:"required"` // 网元类型, 暂时支持AMF
|
||||
NeID string `json:"neId" form:"neId" binding:"required"`
|
||||
RmUID string `json:"rmUID" form:"rmUID"`
|
||||
EventType string `json:"eventType" form:"eventType"` // 事件类型 auth-result detach cm-state
|
||||
IMSI string `json:"imsi" form:"imsi"` // imsi
|
||||
StartTime string `json:"startTime" form:"startTime"`
|
||||
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"` // 排序字段,填写结果字段
|
||||
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
|
||||
EventJSONStr string `json:"eventJSON" gorm:"column:event_json"`
|
||||
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查询参数结构体
|
||||
type UEEventMMEQuery struct {
|
||||
NeType string `json:"neType" form:"neType" binding:"required"` // 网元类型, 暂时支持MME
|
||||
NeID string `json:"neId" form:"neId" binding:"required"`
|
||||
RmUID string `json:"rmUID" form:"rmUID"`
|
||||
EventType string `json:"eventType" form:"eventType"` // 事件类型 auth-result detach cm-state
|
||||
IMSI string `json:"imsi" form:"imsi"` // imsi
|
||||
StartTime string `json:"startTime" form:"startTime"`
|
||||
EndTime string `json:"endTime" form:"endTime"`
|
||||
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=timestamp"` // 排序字段,填写结果字段
|
||||
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"`
|
||||
NeType string `json:"neType" form:"neType" binding:"required"` // 网元类型, 暂时支持MME
|
||||
NeID string `json:"neId" form:"neId" binding:"required"`
|
||||
RmUID string `json:"rmUID" form:"rmUID"`
|
||||
EventType string `json:"eventType" form:"eventType"` // 事件类型 auth-result detach cm-state
|
||||
IMSI string `json:"imsi" form:"imsi"` // imsi
|
||||
StartTime string `json:"startTime" form:"startTime"`
|
||||
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"` // 排序字段,填写结果字段
|
||||
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"
|
||||
"strings"
|
||||
|
||||
dborm "be.ems/lib/core/datasource"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
@@ -13,16 +15,21 @@ import (
|
||||
|
||||
// 实例化数据层 CDREventImpl 结构体
|
||||
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{
|
||||
"id": "ID",
|
||||
"ne_type": "NeType",
|
||||
"ne_name": "NeName",
|
||||
"rm_uid": "RmUID",
|
||||
"timestamp": "Timestamp",
|
||||
"cdr_json": "CDRJSONStr",
|
||||
"created_at": "CreatedAt",
|
||||
"id": "ID",
|
||||
"ne_type": "NeType",
|
||||
"ne_name": "NeName",
|
||||
"rm_uid": "RmUID",
|
||||
"timestamp": "Timestamp",
|
||||
"cdr_json": "CDRJSONStr",
|
||||
"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 := ""
|
||||
if len(conditions) > 0 {
|
||||
@@ -105,7 +139,7 @@ func (r *CDREventIMSImpl) SelectPage(querys model.CDREventIMSQuery) map[string]a
|
||||
}
|
||||
|
||||
// 查询数量 长度为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)
|
||||
if err != nil {
|
||||
logger.Errorf("total err => %v", err)
|
||||
|
||||
@@ -4,6 +4,8 @@ import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
dborm "be.ems/lib/core/datasource"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
@@ -13,17 +15,22 @@ import (
|
||||
|
||||
// 实例化数据层 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`,
|
||||
|
||||
resultMap: map[string]string{
|
||||
"id": "ID",
|
||||
"ne_type": "NeType",
|
||||
"ne_name": "NeName",
|
||||
"rm_uid": "RmUID",
|
||||
"timestamp": "Timestamp",
|
||||
"cdr_json": "CDRJSONStr",
|
||||
"created_at": "CreatedAt",
|
||||
"id": "ID",
|
||||
"ne_type": "NeType",
|
||||
"ne_name": "NeName",
|
||||
"rm_uid": "RmUID",
|
||||
"timestamp": "Timestamp",
|
||||
"cdr_json": "CDRJSONStr",
|
||||
"created_at": "CreatedAt",
|
||||
"tenant_id": "TenantID",
|
||||
"tenant_name": "TenantName",
|
||||
// "id": "ID",
|
||||
// "ne_type": "NeType",
|
||||
// "ne_name": "NeName",
|
||||
@@ -100,6 +107,33 @@ func (r *CDREventSMFImpl) SelectPage(querys model.CDREventSMFQuery) map[string]a
|
||||
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 := ""
|
||||
if len(conditions) > 0 {
|
||||
@@ -112,7 +146,7 @@ func (r *CDREventSMFImpl) SelectPage(querys model.CDREventSMFQuery) map[string]a
|
||||
}
|
||||
|
||||
// 查询数量 长度为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)
|
||||
if err != nil {
|
||||
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), " "))
|
||||
}
|
||||
if v, ok := query["imsi"]; ok && v != "" {
|
||||
conditions = append(conditions, "imsi like concat(concat('%', ?), '%')")
|
||||
params = append(params, strings.Trim(v.(string), " "))
|
||||
//conditions = append(conditions, "imsi like concat(concat('%', ?), '%')")
|
||||
//params = append(params, strings.Trim(v.(string), " "))
|
||||
conditions = append(conditions, "imsi like ?")
|
||||
params = append(params, v)
|
||||
}
|
||||
if v, ok := query["neId"]; ok && v != "" {
|
||||
conditions = append(conditions, "ne_id = ?")
|
||||
|
||||
@@ -4,6 +4,8 @@ import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
dborm "be.ems/lib/core/datasource"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
@@ -13,17 +15,22 @@ import (
|
||||
|
||||
// 实例化数据层 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{
|
||||
"id": "ID",
|
||||
"ne_type": "NeType",
|
||||
"ne_name": "NeName",
|
||||
"rm_uid": "RmUID",
|
||||
"timestamp": "Timestamp",
|
||||
"event_type": "EventType",
|
||||
"event_json": "EventJSONStr",
|
||||
"created_at": "CreatedAt",
|
||||
"id": "ID",
|
||||
"ne_type": "NeType",
|
||||
"ne_name": "NeName",
|
||||
"rm_uid": "RmUID",
|
||||
"timestamp": "Timestamp",
|
||||
"event_type": "EventType",
|
||||
"event_json": "EventJSONStr",
|
||||
"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)
|
||||
}
|
||||
|
||||
// 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 := ""
|
||||
if len(conditions) > 0 {
|
||||
@@ -102,7 +135,7 @@ func (r *UEEventAMFImpl) SelectPage(querys model.UEEventAMFQuery) map[string]any
|
||||
}
|
||||
|
||||
// 查询数量 长度为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)
|
||||
if err != nil {
|
||||
logger.Errorf("total err => %v", err)
|
||||
|
||||
@@ -4,6 +4,8 @@ import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
dborm "be.ems/lib/core/datasource"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/src/framework/datasource"
|
||||
"be.ems/src/framework/logger"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
@@ -13,17 +15,22 @@ import (
|
||||
|
||||
// 实例化数据层 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{
|
||||
"id": "ID",
|
||||
"ne_type": "NeType",
|
||||
"ne_name": "NeName",
|
||||
"rm_uid": "RmUID",
|
||||
"timestamp": "Timestamp",
|
||||
"event_type": "EventType",
|
||||
"event_json": "EventJSONStr",
|
||||
"created_at": "CreatedAt",
|
||||
"id": "ID",
|
||||
"ne_type": "NeType",
|
||||
"ne_name": "NeName",
|
||||
"rm_uid": "RmUID",
|
||||
"timestamp": "Timestamp",
|
||||
"event_type": "EventType",
|
||||
"event_json": "EventJSONStr",
|
||||
"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)
|
||||
}
|
||||
|
||||
// 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 := ""
|
||||
if len(conditions) > 0 {
|
||||
@@ -102,7 +136,7 @@ func (r *UEEventMMEImpl) SelectPage(querys model.UEEventMMEQuery) map[string]any
|
||||
}
|
||||
|
||||
// 查询数量 长度为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)
|
||||
if err != nil {
|
||||
logger.Errorf("total err => %v", err)
|
||||
|
||||
Reference in New Issue
Block a user