ref: 多core表结构和代码调整修改
This commit is contained in:
@@ -29,7 +29,7 @@ func (c *ConnTelnet) NewClient() (*ConnTelnet, error) {
|
||||
proto = "tcp6"
|
||||
c.Addr = fmt.Sprintf("[%s]", c.Addr)
|
||||
}
|
||||
addr := fmt.Sprintf("%s:%d", c.Addr, c.Port)
|
||||
addr := net.JoinHostPort(c.Addr, fmt.Sprint(c.Port))
|
||||
|
||||
// 默认等待5s
|
||||
if c.DialTimeOut == 0 {
|
||||
|
||||
@@ -4,8 +4,10 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"hash/fnv"
|
||||
"net"
|
||||
"os"
|
||||
"runtime"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"be.ems/src/framework/cmd"
|
||||
@@ -24,29 +26,32 @@ var LaunchInfo map[string]any
|
||||
|
||||
// codeGenerate 生成机器的唯一标识符
|
||||
func codeGenerate() string {
|
||||
var machineID string
|
||||
var machineID []string
|
||||
|
||||
// 获取主机名
|
||||
hostname, err := os.Hostname()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
// 获取所有网络接口信息
|
||||
interfaces, _ := net.Interfaces()
|
||||
for _, iface := range interfaces {
|
||||
// 检查接口是否有 MAC 地址
|
||||
if iface.HardwareAddr != nil {
|
||||
machineID = append(machineID, iface.HardwareAddr.String())
|
||||
break
|
||||
}
|
||||
}
|
||||
machineID += hostname
|
||||
|
||||
// 获取 CPU 信息
|
||||
numCPU := runtime.NumCPU()
|
||||
machineID += fmt.Sprintf("%d", numCPU)
|
||||
machineID = append(machineID, fmt.Sprintf("%d", numCPU))
|
||||
|
||||
// 获取操作系统信息
|
||||
osInfo := runtime.GOOS
|
||||
machineID += osInfo
|
||||
machineID = append(machineID, osInfo)
|
||||
|
||||
// 使用哈希函数生成机器码
|
||||
h := fnv.New32a()
|
||||
h.Write([]byte(machineID))
|
||||
h.Write([]byte(strings.Join(machineID, "&")))
|
||||
machineCode := h.Sum32()
|
||||
|
||||
return fmt.Sprintf("%x", machineCode)
|
||||
return strings.ToUpper(fmt.Sprintf("%x", machineCode))
|
||||
}
|
||||
|
||||
// 网管本地路径
|
||||
@@ -69,8 +74,8 @@ func codeFileRead() (map[string]any, error) {
|
||||
}
|
||||
content := string(bytes)
|
||||
// 解密
|
||||
hostKey := config.Get("aes.hostKey").(string)
|
||||
contentDe, err := crypto.AESDecryptBase64(content, hostKey)
|
||||
appKey := config.Get("aes.appKey").(string)
|
||||
contentDe, err := crypto.AESDecryptBase64(content, appKey)
|
||||
if err != nil {
|
||||
logger.Errorf("CodeFileRead decrypt: %v", err.Error())
|
||||
return mapData, fmt.Errorf("decrypt fail")
|
||||
@@ -88,8 +93,8 @@ func codeFileRead() (map[string]any, error) {
|
||||
func codeFileWrite(data map[string]any) error {
|
||||
jsonByte, _ := json.Marshal(data)
|
||||
// 加密
|
||||
hostKey := config.Get("aes.hostKey").(string)
|
||||
contentEn, err := crypto.AESEncryptBase64(string(jsonByte), hostKey)
|
||||
appKey := config.Get("aes.appKey").(string)
|
||||
contentEn, err := crypto.AESEncryptBase64(string(jsonByte), appKey)
|
||||
if err != nil {
|
||||
logger.Errorf("insert encrypt: %v", err.Error())
|
||||
return fmt.Errorf("encrypt fail")
|
||||
|
||||
@@ -72,22 +72,22 @@ func (s *BackupExportCDRProcessor) Execute(data any) (any, error) {
|
||||
case "ims":
|
||||
neList := s.neInfoService.Find(neModel.NeInfo{NeType: "IMS"}, false, false)
|
||||
for _, ne := range neList {
|
||||
result[ne.NeName] = s.exportIMS(params.Hour, ne.RmUID, params.FileType)
|
||||
result[ne.NeName] = s.exportIMS(ne.CoreUID, ne.NeUID, params.Hour, params.FileType)
|
||||
}
|
||||
case "smsc":
|
||||
neList := s.neInfoService.Find(neModel.NeInfo{NeType: "SMSC"}, false, false)
|
||||
for _, ne := range neList {
|
||||
result[ne.NeName] = s.exportSMSC(params.Hour, ne.RmUID, params.FileType)
|
||||
result[ne.NeName] = s.exportSMSC(ne.CoreUID, ne.NeUID, params.Hour, params.FileType)
|
||||
}
|
||||
case "smf":
|
||||
neList := s.neInfoService.Find(neModel.NeInfo{NeType: "SMF"}, false, false)
|
||||
for _, ne := range neList {
|
||||
result[ne.NeName] = s.exportSMF(params.Hour, ne.RmUID, params.FileType)
|
||||
result[ne.NeName] = s.exportSMF(ne.CoreUID, ne.NeUID, params.Hour, params.FileType)
|
||||
}
|
||||
case "sgwc":
|
||||
neList := s.neInfoService.Find(neModel.NeInfo{NeType: "SGWC"}, false, false)
|
||||
for _, ne := range neList {
|
||||
result[ne.NeName] = s.exportSGWC(params.Hour, ne.RmUID, params.FileType)
|
||||
result[ne.NeName] = s.exportSGWC(ne.CoreUID, ne.NeUID, params.Hour, params.FileType)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -97,7 +97,7 @@ func (s *BackupExportCDRProcessor) Execute(data any) (any, error) {
|
||||
}
|
||||
|
||||
// exportIMS 导出IMS-CDR会话事件数据
|
||||
func (s BackupExportCDRProcessor) exportIMS(hour int, rmUID, fileType string) string {
|
||||
func (s BackupExportCDRProcessor) exportIMS(coreUid, neUid string, hour int, fileType string) string {
|
||||
// 前 hour 小时
|
||||
now := time.Now()
|
||||
end := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location())
|
||||
@@ -107,7 +107,8 @@ func (s BackupExportCDRProcessor) exportIMS(hour int, rmUID, fileType string) st
|
||||
query := neDataModel.CDREventIMSQuery{
|
||||
SortField: "timestamp",
|
||||
SortOrder: "asc",
|
||||
RmUID: rmUID,
|
||||
CoreUID: coreUid,
|
||||
NeUID: neUid,
|
||||
BeginTime: start.UnixMilli(),
|
||||
EndTime: end.UnixMilli(),
|
||||
PageNum: 1,
|
||||
@@ -232,7 +233,7 @@ func (s BackupExportCDRProcessor) exportIMS(hour int, rmUID, fileType string) st
|
||||
|
||||
data = append(data, []string{
|
||||
fmt.Sprint(row.ID),
|
||||
row.NeName,
|
||||
row.NeUID,
|
||||
recordType,
|
||||
callTypeLable,
|
||||
caller,
|
||||
@@ -359,7 +360,7 @@ func (s BackupExportCDRProcessor) exportIMS(hour int, rmUID, fileType string) st
|
||||
|
||||
dataCells = append(dataCells, map[string]any{
|
||||
"A" + idx: row.ID,
|
||||
"B" + idx: row.NeName,
|
||||
"B" + idx: row.NeUID,
|
||||
"C" + idx: recordType,
|
||||
"D" + idx: callTypeLable,
|
||||
"E" + idx: caller,
|
||||
@@ -386,7 +387,7 @@ func (s BackupExportCDRProcessor) exportIMS(hour int, rmUID, fileType string) st
|
||||
}
|
||||
|
||||
// exportSMSC 导出SMSC-CDR会话事件数据
|
||||
func (s BackupExportCDRProcessor) exportSMSC(hour int, rmUID, fileType string) string {
|
||||
func (s BackupExportCDRProcessor) exportSMSC(coreUid, neUid string, hour int, fileType string) string {
|
||||
// 前 hour 小时
|
||||
now := time.Now()
|
||||
end := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location())
|
||||
@@ -396,7 +397,8 @@ func (s BackupExportCDRProcessor) exportSMSC(hour int, rmUID, fileType string) s
|
||||
query := neDataModel.CDREventSMSCQuery{
|
||||
SortField: "timestamp",
|
||||
SortOrder: "asc",
|
||||
RmUID: rmUID,
|
||||
CoreUID: coreUid,
|
||||
NeUID: neUid,
|
||||
BeginTime: start.UnixMilli(),
|
||||
EndTime: end.UnixMilli(),
|
||||
PageNum: 1,
|
||||
@@ -488,7 +490,7 @@ func (s BackupExportCDRProcessor) exportSMSC(hour int, rmUID, fileType string) s
|
||||
|
||||
data = append(data, []string{
|
||||
fmt.Sprint(row.ID),
|
||||
row.NeName,
|
||||
row.NeUID,
|
||||
recordType,
|
||||
serviceType,
|
||||
caller,
|
||||
@@ -579,7 +581,7 @@ func (s BackupExportCDRProcessor) exportSMSC(hour int, rmUID, fileType string) s
|
||||
|
||||
dataCells = append(dataCells, map[string]any{
|
||||
"A" + idx: row.ID,
|
||||
"B" + idx: row.NeName,
|
||||
"B" + idx: row.NeUID,
|
||||
"C" + idx: recordType,
|
||||
"D" + idx: serviceType,
|
||||
"E" + idx: caller,
|
||||
@@ -603,7 +605,7 @@ func (s BackupExportCDRProcessor) exportSMSC(hour int, rmUID, fileType string) s
|
||||
}
|
||||
|
||||
// exportSMF 导出SMF-CDR会话事件数据
|
||||
func (s BackupExportCDRProcessor) exportSMF(hour int, rmUID, fileType string) string {
|
||||
func (s BackupExportCDRProcessor) exportSMF(coreUid, neUid string, hour int, fileType string) string {
|
||||
// 前 hour 小时
|
||||
now := time.Now()
|
||||
end := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location())
|
||||
@@ -612,7 +614,8 @@ func (s BackupExportCDRProcessor) exportSMF(hour int, rmUID, fileType string) st
|
||||
query := neDataModel.CDREventSMFQuery{
|
||||
SortField: "timestamp",
|
||||
SortOrder: "asc",
|
||||
RmUID: rmUID,
|
||||
CoreUID: coreUid,
|
||||
NeUID: neUid,
|
||||
BeginTime: start.UnixMilli(),
|
||||
EndTime: end.UnixMilli(),
|
||||
PageNum: 1,
|
||||
@@ -787,8 +790,8 @@ func (s BackupExportCDRProcessor) exportSMF(hour int, rmUID, fileType string) st
|
||||
data = append(data, []string{
|
||||
fmt.Sprint(row.ID),
|
||||
chargingID,
|
||||
row.NeName,
|
||||
row.RmUid,
|
||||
row.NeType,
|
||||
row.NeUID,
|
||||
subscriptionIDData,
|
||||
subscriptionIDType,
|
||||
fmt.Sprint(dataVolumeUplink),
|
||||
@@ -974,8 +977,8 @@ func (s BackupExportCDRProcessor) exportSMF(hour int, rmUID, fileType string) st
|
||||
dataCells = append(dataCells, map[string]any{
|
||||
"A" + idx: row.ID,
|
||||
"B" + idx: chargingID,
|
||||
"C" + idx: row.NeName,
|
||||
"D" + idx: row.RmUid,
|
||||
"C" + idx: row.NeType,
|
||||
"D" + idx: row.NeUID,
|
||||
"E" + idx: subscriptionIDData,
|
||||
"F" + idx: subscriptionIDType,
|
||||
"G" + idx: dataVolumeUplink,
|
||||
@@ -1011,7 +1014,7 @@ func (s BackupExportCDRProcessor) exportSMF(hour int, rmUID, fileType string) st
|
||||
}
|
||||
|
||||
// exportSGWC 导出SGWC-CDR会话事件数据
|
||||
func (s BackupExportCDRProcessor) exportSGWC(hour int, rmUID, fileType string) string {
|
||||
func (s BackupExportCDRProcessor) exportSGWC(coreUid, neUid string, hour int, fileType string) string {
|
||||
// 前 hour 小时
|
||||
now := time.Now()
|
||||
end := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location())
|
||||
@@ -1020,7 +1023,8 @@ func (s BackupExportCDRProcessor) exportSGWC(hour int, rmUID, fileType string) s
|
||||
query := neDataModel.CDREventSGWCQuery{
|
||||
SortField: "timestamp",
|
||||
SortOrder: "asc",
|
||||
RmUID: rmUID,
|
||||
CoreUID: coreUid,
|
||||
NeUID: neUid,
|
||||
BeginTime: start.UnixMilli(),
|
||||
EndTime: end.UnixMilli(),
|
||||
PageNum: 1,
|
||||
@@ -1197,8 +1201,8 @@ func (s BackupExportCDRProcessor) exportSGWC(hour int, rmUID, fileType string) s
|
||||
|
||||
data = append(data, []string{
|
||||
fmt.Sprint(row.ID),
|
||||
row.NeName,
|
||||
row.RmUid,
|
||||
row.NeType,
|
||||
row.NeUID,
|
||||
chargingID,
|
||||
servedIMSI,
|
||||
servedMSISDN,
|
||||
@@ -1388,8 +1392,8 @@ func (s BackupExportCDRProcessor) exportSGWC(hour int, rmUID, fileType string) s
|
||||
|
||||
dataCells = append(dataCells, map[string]any{
|
||||
"A" + idx: row.ID,
|
||||
"B" + idx: row.NeName,
|
||||
"C" + idx: row.RmUid,
|
||||
"B" + idx: row.NeType,
|
||||
"C" + idx: row.NeUID,
|
||||
"D" + idx: chargingID,
|
||||
"E" + idx: servedIMSI,
|
||||
"F" + idx: servedMSISDN,
|
||||
|
||||
@@ -342,8 +342,8 @@ func (s BackupExportTableProcessor) exportSMF(hour int, columns []string, filePa
|
||||
if col == "id" {
|
||||
arr[i] = fmt.Sprintf("%d", row.ID)
|
||||
}
|
||||
if col == "neName" || col == "ne_name" {
|
||||
arr[i] = fmt.Sprintf("%v", row.NeName)
|
||||
if col == "neType" || col == "ne_type" {
|
||||
arr[i] = fmt.Sprintf("%v", row.NeType)
|
||||
}
|
||||
// 单层json
|
||||
if strings.HasPrefix("json", col) {
|
||||
@@ -461,8 +461,8 @@ func (s BackupExportTableProcessor) exportIMS(hour int, columns []string, filePa
|
||||
if col == "id" {
|
||||
arr[i] = fmt.Sprintf("%d", row.ID)
|
||||
}
|
||||
if col == "neName" || col == "ne_name" {
|
||||
arr[i] = fmt.Sprintf("%v", row.NeName)
|
||||
if col == "neType" || col == "ne_type" {
|
||||
arr[i] = fmt.Sprintf("%v", row.NeType)
|
||||
}
|
||||
// 单层json
|
||||
if strings.HasPrefix("json", col) {
|
||||
@@ -651,8 +651,8 @@ func (s BackupExportTableProcessor) exportSMSC(hour int, columns []string, fileP
|
||||
if v == "id" {
|
||||
arr[i] = fmt.Sprintf("%d", row.ID)
|
||||
}
|
||||
if v == "neName" || v == "ne_name" {
|
||||
arr[i] = fmt.Sprintf("%v", row.NeName)
|
||||
if v == "neType" || v == "ne_type" {
|
||||
arr[i] = fmt.Sprintf("%v", row.NeType)
|
||||
}
|
||||
// 单层json
|
||||
if strings.HasPrefix("json", v) {
|
||||
@@ -840,8 +840,8 @@ func (s BackupExportTableProcessor) exportSGWC(hour int, columns []string, fileP
|
||||
if v == "id" {
|
||||
arr[i] = fmt.Sprintf("%d", row.ID)
|
||||
}
|
||||
if v == "neName" || v == "ne_name" {
|
||||
arr[i] = fmt.Sprintf("%v", row.NeName)
|
||||
if v == "neType" || v == "ne_type" {
|
||||
arr[i] = fmt.Sprintf("%v", row.NeType)
|
||||
}
|
||||
// 单层json
|
||||
if strings.HasPrefix("json", v) {
|
||||
|
||||
@@ -63,13 +63,13 @@ func (s *BackupExportUDMProcessor) Execute(data any) (any, error) {
|
||||
for _, v := range params.DataType {
|
||||
switch v {
|
||||
case "auth":
|
||||
result[fmt.Sprintf("%s-%s", neInfo.NeId, v)] = s.exportAuth(neInfo.NeId, params.FileType)
|
||||
result[fmt.Sprintf("%s-%s", neInfo.NeUID, v)] = s.exportAuth(neInfo.CoreUID, neInfo.NeUID, params.FileType)
|
||||
case "sub":
|
||||
result[fmt.Sprintf("%s-%s", neInfo.NeId, v)] = s.exportSub(neInfo.NeId, params.FileType)
|
||||
result[fmt.Sprintf("%s-%s", neInfo.NeUID, v)] = s.exportSub(neInfo.CoreUID, neInfo.NeUID, params.FileType)
|
||||
case "voip":
|
||||
result[fmt.Sprintf("%s-%s", neInfo.NeId, v)] = s.exportVOIP(neInfo.NeId, params.FileType)
|
||||
result[fmt.Sprintf("%s-%s", neInfo.NeUID, v)] = s.exportVOIP(neInfo.CoreUID, neInfo.NeUID, params.FileType)
|
||||
case "volte":
|
||||
result[fmt.Sprintf("%s-%s", neInfo.NeId, v)] = s.exportVolte(neInfo.NeId, params.FileType)
|
||||
result[fmt.Sprintf("%s-%s", neInfo.NeUID, v)] = s.exportVolte(neInfo.CoreUID, neInfo.NeUID, params.FileType)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -79,14 +79,14 @@ func (s *BackupExportUDMProcessor) Execute(data any) (any, error) {
|
||||
}
|
||||
|
||||
// exportAuth 导出鉴权用户数据
|
||||
func (s BackupExportUDMProcessor) exportAuth(neId, fileType string) string {
|
||||
rows := s.udmAuthService.Find(neDataModel.UDMAuthUser{NeId: neId})
|
||||
func (s BackupExportUDMProcessor) exportAuth(coreUid, neUid, fileType string) string {
|
||||
rows := s.udmAuthService.Find(neDataModel.UDMAuthUser{CoreUID: coreUid, NeUID: neUid})
|
||||
if len(rows) <= 0 {
|
||||
return "no data"
|
||||
}
|
||||
|
||||
// 文件名
|
||||
fileName := fmt.Sprintf("auth_%s_export_%s.%s", neId, time.Now().Format("20060102150405"), fileType)
|
||||
fileName := fmt.Sprintf("auth_%s_export_%s.%s", neUid, time.Now().Format("20060102150405"), fileType)
|
||||
filePath := filepath.Join("/usr/local/omc/backup/udm_data/auth", fileName)
|
||||
if runtime.GOOS == "windows" {
|
||||
filePath = fmt.Sprintf("C:%s", filePath)
|
||||
@@ -133,14 +133,14 @@ func (s BackupExportUDMProcessor) exportAuth(neId, fileType string) string {
|
||||
}
|
||||
|
||||
// exportSub 导出签约用户数据
|
||||
func (s BackupExportUDMProcessor) exportSub(neId, fileType string) string {
|
||||
rows := s.udmSubService.Find(neDataModel.UDMSubUser{NeId: neId})
|
||||
func (s BackupExportUDMProcessor) exportSub(coreUid, neUid, fileType string) string {
|
||||
rows := s.udmSubService.Find(neDataModel.UDMSubUser{CoreUID: coreUid, NeUID: neUid})
|
||||
if len(rows) <= 0 {
|
||||
return "no data"
|
||||
}
|
||||
|
||||
// 文件名
|
||||
fileName := fmt.Sprintf("sub_%s_export_%s.%s", neId, time.Now().Format("20060102150405"), fileType)
|
||||
fileName := fmt.Sprintf("sub_%s_export_%s.%s", neUid, time.Now().Format("20060102150405"), fileType)
|
||||
filePath := filepath.Join("/usr/local/omc/backup/udm_data/sub", fileName)
|
||||
if runtime.GOOS == "windows" {
|
||||
filePath = fmt.Sprintf("C:%s", filePath)
|
||||
@@ -181,14 +181,14 @@ func (s BackupExportUDMProcessor) exportSub(neId, fileType string) string {
|
||||
}
|
||||
|
||||
// exportVOIP 导出VOIP用户数据
|
||||
func (s BackupExportUDMProcessor) exportVOIP(neId, fileType string) string {
|
||||
rows := s.udmVOIPService.Find(neDataModel.UDMVOIPUser{NeId: neId})
|
||||
func (s BackupExportUDMProcessor) exportVOIP(coreUid, neUid, fileType string) string {
|
||||
rows := s.udmVOIPService.Find(neDataModel.UDMVOIPUser{CoreUID: coreUid, NeUID: neUid})
|
||||
if len(rows) <= 0 {
|
||||
return "no data"
|
||||
}
|
||||
|
||||
// 文件名
|
||||
fileName := fmt.Sprintf("voip_%s_export_%s.%s", neId, time.Now().Format("20060102150405"), fileType)
|
||||
fileName := fmt.Sprintf("voip_%s_export_%s.%s", neUid, time.Now().Format("20060102150405"), fileType)
|
||||
filePath := filepath.Join("/usr/local/omc/backup/udm_data/voip", fileName)
|
||||
if runtime.GOOS == "windows" {
|
||||
filePath = fmt.Sprintf("C:%s", filePath)
|
||||
@@ -227,14 +227,14 @@ func (s BackupExportUDMProcessor) exportVOIP(neId, fileType string) string {
|
||||
}
|
||||
|
||||
// exportVolte 导出Volte用户数据
|
||||
func (s BackupExportUDMProcessor) exportVolte(neId, fileType string) string {
|
||||
rows := s.udmVolteIMSService.Find(neDataModel.UDMVolteIMSUser{NeId: neId})
|
||||
func (s BackupExportUDMProcessor) exportVolte(coreUid, neUid, fileType string) string {
|
||||
rows := s.udmVolteIMSService.Find(neDataModel.UDMVolteIMSUser{CoreUID: coreUid, NeUID: neUid})
|
||||
if len(rows) <= 0 {
|
||||
return "no data"
|
||||
}
|
||||
|
||||
// 文件名
|
||||
fileName := fmt.Sprintf("volte_%s_export_%s.%s", neId, time.Now().Format("20060102150405"), fileType)
|
||||
fileName := fmt.Sprintf("volte_%s_export_%s.%s", neUid, time.Now().Format("20060102150405"), fileType)
|
||||
filePath := filepath.Join("/usr/local/omc/backup/udm_data/volte", fileName)
|
||||
if runtime.GOOS == "windows" {
|
||||
filePath = fmt.Sprintf("C:%s", filePath)
|
||||
|
||||
@@ -55,18 +55,17 @@ func (s *DeleteNeConfigBackupProcessor) Execute(data any) (any, error) {
|
||||
|
||||
neList := s.neInfoService.Find(neModel.NeInfo{}, false, false)
|
||||
for _, neInfo := range neList {
|
||||
neTypeAndId := fmt.Sprintf("%s_%s", neInfo.NeType, neInfo.NeId)
|
||||
tx := db.DB("").Model(&neModel.NeConfigBackup{})
|
||||
tx = tx.Where("ne_type = ? and ne_id = ?", neInfo.NeType, neInfo.NeId)
|
||||
tx = tx.Where("core_uid = ? and ne_uid = ?", neInfo.CoreUID, neInfo.NeUID)
|
||||
|
||||
// 查询数量为0直接返回
|
||||
var total int64 = 0
|
||||
if err := tx.Count(&total).Error; err != nil {
|
||||
result[neTypeAndId] = err.Error()
|
||||
result[neInfo.NeUID] = err.Error()
|
||||
continue
|
||||
}
|
||||
if total <= int64(params.StoreNum) {
|
||||
result[neTypeAndId] = "less than storeNum"
|
||||
result[neInfo.NeUID] = "less than storeNum"
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -74,11 +73,11 @@ func (s *DeleteNeConfigBackupProcessor) Execute(data any) (any, error) {
|
||||
var lastCreateTime int64 = 0
|
||||
lastTx := tx.Select("create_time").Order("create_time DESC").Limit(1)
|
||||
if err := lastTx.Find(&lastCreateTime).Error; err != nil {
|
||||
result[neTypeAndId] = err.Error()
|
||||
result[neInfo.NeUID] = err.Error()
|
||||
continue
|
||||
}
|
||||
if lastCreateTime <= 1e12 {
|
||||
result[neTypeAndId] = "no data"
|
||||
result[neInfo.NeUID] = "no data"
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -89,22 +88,22 @@ func (s *DeleteNeConfigBackupProcessor) Execute(data any) (any, error) {
|
||||
// 删除小于最后时间的数据
|
||||
delTx := tx.Delete("create_time < ?", ltTime.UnixMilli())
|
||||
if err := delTx.Error; err != nil {
|
||||
result[neTypeAndId] = err.Error()
|
||||
result[neInfo.NeUID] = err.Error()
|
||||
continue
|
||||
}
|
||||
result[neTypeAndId] = tx.RowsAffected
|
||||
result[neInfo.NeUID] = tx.RowsAffected
|
||||
|
||||
// 删除本地文件
|
||||
s.deleteFile(neInfo.NeType, neInfo.NeId, ltTime)
|
||||
s.deleteFile(neInfo.CoreUID, neInfo.NeUID, ltTime)
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// deleteFile 删除本地文件
|
||||
func (s DeleteNeConfigBackupProcessor) deleteFile(neType, neId string, oldFileDate time.Time) {
|
||||
func (s DeleteNeConfigBackupProcessor) deleteFile(neType, neUid string, oldFileDate time.Time) {
|
||||
neTypeLower := strings.ToLower(neType)
|
||||
localPath := fmt.Sprintf("/usr/local/omc/backup/ne_config/%s/%s ", neTypeLower, neId)
|
||||
localPath := fmt.Sprintf("/usr/local/omc/backup/ne_config/%s/%s ", neTypeLower, neUid)
|
||||
files, err := os.ReadDir(localPath)
|
||||
if err != nil {
|
||||
logger.Errorf("logger Remove ne_config File ReadDir err: %v", err.Error())
|
||||
@@ -113,7 +112,7 @@ func (s DeleteNeConfigBackupProcessor) deleteFile(neType, neId string, oldFileDa
|
||||
for _, file := range files {
|
||||
// 跳过非指定文件名
|
||||
// zipFileName := fmt.Sprintf("%s-%s-etc-%s.zip", neTypeLower, neInfo.NeId, date.ParseDateToStr(time.Now(), date.YYYYMMDDHHMMSS))
|
||||
fileName := fmt.Sprintf("%s-%s-etc-", neTypeLower, neId)
|
||||
fileName := fmt.Sprintf("%s-%s-etc-", neTypeLower, neUid)
|
||||
if !strings.HasPrefix(file.Name(), fileName) {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -69,15 +69,15 @@ func (s *NeAlarmStateCheckProcessor) Execute(data any) (any, error) {
|
||||
if neInfo.CreateTime == 0 {
|
||||
continue
|
||||
}
|
||||
neTypeAndId := fmt.Sprintf("%s_%s", neInfo.NeType, neInfo.NeId)
|
||||
// 网元在线状态
|
||||
isOnline := parse.Boolean(neInfo.ServerState["online"])
|
||||
// 告警ID
|
||||
params.AlarmId = fmt.Sprintf("%d%d", constants.ALARM_STATE_CHECK, neInfo.CreateTime)
|
||||
// 检查网元告警ID是否唯一
|
||||
alarmIdArr := s.alarmService.Find(neDataModel.Alarm{
|
||||
CoreUID: neInfo.CoreUID,
|
||||
NeUID: neInfo.NeUID,
|
||||
NeType: neInfo.NeType,
|
||||
NeId: neInfo.NeId,
|
||||
AlarmId: params.AlarmId,
|
||||
})
|
||||
// 告警状态
|
||||
@@ -90,12 +90,12 @@ func (s *NeAlarmStateCheckProcessor) Execute(data any) (any, error) {
|
||||
// 进行清除
|
||||
clearAlarm, err := s.alarmClear(neInfo, alarmIdArr[0])
|
||||
if err != nil {
|
||||
result[neTypeAndId] = err.Error()
|
||||
result[neInfo.NeUID] = err.Error()
|
||||
continue
|
||||
}
|
||||
groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_ALARM, neInfo.NeType, neInfo.NeId)
|
||||
groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_ALARM, neInfo.NeType, neInfo.NeUID)
|
||||
s.wsSendService.ByGroupID(groupID, clearAlarm)
|
||||
result[neTypeAndId] = "alarm clear"
|
||||
result[neInfo.NeUID] = "alarm clear"
|
||||
}
|
||||
|
||||
// 不在线
|
||||
@@ -103,12 +103,12 @@ func (s *NeAlarmStateCheckProcessor) Execute(data any) (any, error) {
|
||||
// 进行新增
|
||||
newAlarm, err := s.alarmNew(neInfo, params)
|
||||
if err != nil {
|
||||
result[neTypeAndId] = err.Error()
|
||||
result[neInfo.NeUID] = err.Error()
|
||||
continue
|
||||
}
|
||||
groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_ALARM, neInfo.NeType, neInfo.NeId)
|
||||
groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_ALARM, neInfo.CoreUID, neInfo.NeUID)
|
||||
s.wsSendService.ByGroupID(groupID, newAlarm)
|
||||
result[neTypeAndId] = "alarm new"
|
||||
result[neInfo.NeUID] = "alarm new"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,17 +135,15 @@ func (s NeAlarmStateCheckProcessor) alarmClear(neInfo neModel.NeInfo, v neDataMo
|
||||
// alarmNew 新增告警
|
||||
func (s NeAlarmStateCheckProcessor) alarmNew(neInfo neModel.NeInfo, v alarmParams) (neDataModel.Alarm, error) {
|
||||
// seq 告警序号
|
||||
lastSeq := s.alarmService.FindAlarmSeqLast(neInfo.NeType, neInfo.NeId)
|
||||
lastSeq := s.alarmService.FindAlarmSeqLast(neInfo.CoreUID, neInfo.NeUID)
|
||||
lastTime := neInfo.UpdateTime // 网元最后更新时间
|
||||
if lastTime < neInfo.CreateTime {
|
||||
lastTime = time.Now().UnixMilli()
|
||||
}
|
||||
alarm := neDataModel.Alarm{
|
||||
CoreUID: neInfo.CoreUID,
|
||||
NeUID: neInfo.NeUID,
|
||||
NeType: neInfo.NeType,
|
||||
NeId: neInfo.NeId,
|
||||
NeName: neInfo.NeName,
|
||||
Province: neInfo.Province,
|
||||
PvFlag: neInfo.PvFlag,
|
||||
AlarmSeq: lastSeq + 1,
|
||||
AlarmId: v.AlarmId,
|
||||
AlarmTitle: v.AlarmTitle,
|
||||
@@ -154,7 +152,7 @@ func (s NeAlarmStateCheckProcessor) alarmNew(neInfo neModel.NeInfo, v alarmParam
|
||||
AlarmType: v.AlarmType,
|
||||
OrigSeverity: v.OrigSeverity,
|
||||
PerceivedSeverity: v.OrigSeverity,
|
||||
ObjectUid: neInfo.RmUID,
|
||||
ObjectUid: neInfo.NeUID,
|
||||
ObjectName: "NE State",
|
||||
ObjectType: "state",
|
||||
LocationInfo: "NE State: Heartbeat",
|
||||
|
||||
@@ -103,18 +103,20 @@ func (s *NeAlarmStateCheckCMDProcessor) Execute(data any) (any, error) {
|
||||
}
|
||||
|
||||
// 检查状态
|
||||
neInfo.ServerState["coreUid"] = neInfo.CoreUID
|
||||
neInfo.ServerState["neUid"] = neInfo.NeUID
|
||||
err := s.serverState(neInfo.ServerState, params.CPUUseGt, params.MemUseGt, params.DiskUseGt)
|
||||
if err == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
neTypeAndId := fmt.Sprintf("%s_%s", neInfo.NeType, neInfo.NeId)
|
||||
// 告警ID
|
||||
params.AlarmId = fmt.Sprintf("%d%d", constants.ALARM_CMD_CHECK, neInfo.CreateTime)
|
||||
// 检查网元告警ID是否唯一
|
||||
alarmIdArr := s.alarmService.Find(neDataModel.Alarm{
|
||||
CoreUID: neInfo.CoreUID,
|
||||
NeUID: neInfo.NeUID,
|
||||
NeType: neInfo.NeType,
|
||||
NeId: neInfo.NeId,
|
||||
AlarmId: params.AlarmId,
|
||||
})
|
||||
// 告警状态, 存在的需要手动清除
|
||||
@@ -126,12 +128,12 @@ func (s *NeAlarmStateCheckCMDProcessor) Execute(data any) (any, error) {
|
||||
if alarmStatus == "1" {
|
||||
clearAlarm, err := s.alarmClear(neInfo, alarmIdArr[0])
|
||||
if err != nil {
|
||||
result[neTypeAndId] = err.Error()
|
||||
result[neInfo.NeUID] = err.Error()
|
||||
continue
|
||||
}
|
||||
groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_ALARM, neInfo.NeType, neInfo.NeId)
|
||||
groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_ALARM, neInfo.CoreUID, neInfo.NeUID)
|
||||
s.wsSendService.ByGroupID(groupID, clearAlarm)
|
||||
result[neTypeAndId] = "alarm clear"
|
||||
result[neInfo.NeUID] = "alarm clear"
|
||||
alarmStatus = "" // 标记为未记录再次发起新告警
|
||||
}
|
||||
// 未记录
|
||||
@@ -147,12 +149,12 @@ func (s *NeAlarmStateCheckCMDProcessor) Execute(data any) (any, error) {
|
||||
params.AddInfo = addInfo // 恢复附加信息
|
||||
triggerCount.Clear() // 重置连续触发次数
|
||||
if err != nil {
|
||||
result[neTypeAndId] = err.Error()
|
||||
result[neInfo.NeUID] = err.Error()
|
||||
continue
|
||||
}
|
||||
groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_ALARM, neInfo.NeType, neInfo.NeId)
|
||||
groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_ALARM, neInfo.CoreUID, neInfo.NeUID)
|
||||
s.wsSendService.ByGroupID(groupID, newAlarm)
|
||||
result[neTypeAndId] = "alarm new"
|
||||
result[neInfo.NeUID] = "alarm new"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -204,8 +206,8 @@ func (s NeAlarmStateCheckCMDProcessor) serverState(state map[string]any, cpuUseG
|
||||
|
||||
// 插入网元状态记录
|
||||
neState := neDataModel.NEState{
|
||||
NeType: fmt.Sprint(state["neType"]),
|
||||
NeId: fmt.Sprint(state["neId"]),
|
||||
CoreUID: fmt.Sprint(state["coreUid"]),
|
||||
NeUID: fmt.Sprint(state["neUid"]),
|
||||
Version: fmt.Sprint(state["version"]),
|
||||
Capability: parse.Number(state["capability"]),
|
||||
SerialNum: fmt.Sprint(state["sn"]),
|
||||
@@ -221,7 +223,7 @@ func (s NeAlarmStateCheckCMDProcessor) serverState(state map[string]any, cpuUseG
|
||||
// 删除网元状态记录7天前
|
||||
s.neStateService.DeleteByTime(time.Now().UnixMilli() - 7*24*60*60*1000)
|
||||
// 推送ws消息
|
||||
groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_NE_STATE, neState.NeType, neState.NeId)
|
||||
groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_NE_STATE, neState.CoreUID, neState.NeUID)
|
||||
s.wsSendService.ByGroupID(groupID, neState)
|
||||
|
||||
// 检查CPU/Menory/Disk使用率
|
||||
@@ -237,9 +239,8 @@ func (s NeAlarmStateCheckCMDProcessor) serverState(state map[string]any, cpuUseG
|
||||
}
|
||||
if len(warnMsg) > 0 {
|
||||
currentTime := time.Now()
|
||||
neTypeAndId := fmt.Sprintf("%s_%s", neState.NeType, neState.NeId)
|
||||
validTimes := []time.Time{}
|
||||
if v, ok := triggerCount.Load(neTypeAndId); ok {
|
||||
if v, ok := triggerCount.Load(neState.NeUID); ok {
|
||||
times := v.([]time.Time)
|
||||
// 清理过期的记录:10秒前的触发记录不再计入
|
||||
for _, t := range times {
|
||||
@@ -248,11 +249,11 @@ func (s NeAlarmStateCheckCMDProcessor) serverState(state map[string]any, cpuUseG
|
||||
}
|
||||
}
|
||||
validTimes = append(validTimes, currentTime)
|
||||
triggerCount.Store(neTypeAndId, validTimes)
|
||||
triggerCount.Store(neState.NeUID, validTimes)
|
||||
} else {
|
||||
// 事件第一次触发,初始化记录
|
||||
validTimes = append(validTimes, currentTime)
|
||||
triggerCount.Store(neTypeAndId, validTimes)
|
||||
triggerCount.Store(neState.NeUID, validTimes)
|
||||
}
|
||||
if int64(len(validTimes)) >= triggerMax {
|
||||
return fmt.Errorf("greater than %s", strings.Join(warnMsg, ", "))
|
||||
@@ -280,17 +281,15 @@ func (s NeAlarmStateCheckCMDProcessor) alarmClear(neInfo neModel.NeInfo, v neDat
|
||||
// alarmNew 新增告警
|
||||
func (s NeAlarmStateCheckCMDProcessor) alarmNew(neInfo neModel.NeInfo, v alarmParams) (neDataModel.Alarm, error) {
|
||||
// seq 告警序号
|
||||
lastSeq := s.alarmService.FindAlarmSeqLast(neInfo.NeType, neInfo.NeId)
|
||||
lastSeq := s.alarmService.FindAlarmSeqLast(neInfo.CoreUID, neInfo.NeUID)
|
||||
lastTime := neInfo.UpdateTime // 网元最后更新时间
|
||||
if lastTime < neInfo.CreateTime {
|
||||
lastTime = time.Now().UnixMilli()
|
||||
}
|
||||
alarm := neDataModel.Alarm{
|
||||
CoreUID: neInfo.CoreUID,
|
||||
NeUID: neInfo.NeUID,
|
||||
NeType: neInfo.NeType,
|
||||
NeId: neInfo.NeId,
|
||||
NeName: neInfo.NeName,
|
||||
Province: neInfo.Province,
|
||||
PvFlag: neInfo.PvFlag,
|
||||
AlarmSeq: lastSeq + 1,
|
||||
AlarmId: v.AlarmId,
|
||||
AlarmTitle: v.AlarmTitle,
|
||||
@@ -299,7 +298,7 @@ func (s NeAlarmStateCheckCMDProcessor) alarmNew(neInfo neModel.NeInfo, v alarmPa
|
||||
AlarmType: v.AlarmType,
|
||||
OrigSeverity: v.OrigSeverity,
|
||||
PerceivedSeverity: v.OrigSeverity,
|
||||
ObjectUid: neInfo.RmUID,
|
||||
ObjectUid: neInfo.NeUID,
|
||||
ObjectName: "NE CPU/Menory/Disk",
|
||||
ObjectType: "cmd",
|
||||
LocationInfo: "NE CPU/Menory/Disk: Heartbeat",
|
||||
|
||||
@@ -92,13 +92,13 @@ func (s *NeAlarmStateCheckLicenseProcessor) Execute(data any) (any, error) {
|
||||
params.AddInfo = err.Error()
|
||||
}
|
||||
|
||||
neTypeAndId := fmt.Sprintf("%s_%s", neInfo.NeType, neInfo.NeId)
|
||||
// 告警ID
|
||||
params.AlarmId = fmt.Sprintf("%d%d", constants.ALARM_LICENSE_CHECK, neInfo.CreateTime)
|
||||
// 检查网元告警ID是否唯一
|
||||
alarmIdArr := s.alarmService.Find(neDataModel.Alarm{
|
||||
CoreUID: neInfo.CoreUID,
|
||||
NeUID: neInfo.NeUID,
|
||||
NeType: neInfo.NeType,
|
||||
NeId: neInfo.NeId,
|
||||
AlarmId: params.AlarmId,
|
||||
})
|
||||
// 告警状态, 存在的需要手动清除
|
||||
@@ -110,12 +110,12 @@ func (s *NeAlarmStateCheckLicenseProcessor) Execute(data any) (any, error) {
|
||||
if alarmStatus == "1" {
|
||||
clearAlarm, err := s.alarmClear(neInfo, alarmIdArr[0])
|
||||
if err != nil {
|
||||
result[neTypeAndId] = err.Error()
|
||||
result[neInfo.NeUID] = err.Error()
|
||||
continue
|
||||
}
|
||||
groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_ALARM, neInfo.NeType, neInfo.NeId)
|
||||
groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_ALARM, neInfo.CoreUID, neInfo.NeUID)
|
||||
s.wsSendService.ByGroupID(groupID, clearAlarm)
|
||||
result[neTypeAndId] = "alarm clear"
|
||||
result[neInfo.NeUID] = "alarm clear"
|
||||
alarmStatus = "" // 标记为未记录再次发起新告警
|
||||
}
|
||||
// 未记录
|
||||
@@ -130,12 +130,12 @@ func (s *NeAlarmStateCheckLicenseProcessor) Execute(data any) (any, error) {
|
||||
newAlarm, err := s.alarmNew(neInfo, params)
|
||||
params.AddInfo = addInfo // 恢复附加信息
|
||||
if err != nil {
|
||||
result[neTypeAndId] = err.Error()
|
||||
result[neInfo.NeUID] = err.Error()
|
||||
continue
|
||||
}
|
||||
groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_ALARM, neInfo.NeType, neInfo.NeId)
|
||||
groupID := fmt.Sprintf("%s_%s_%s", wsService.GROUP_ALARM, neInfo.CoreUID, neInfo.NeUID)
|
||||
s.wsSendService.ByGroupID(groupID, newAlarm)
|
||||
result[neTypeAndId] = "alarm new"
|
||||
result[neInfo.NeUID] = "alarm new"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -183,17 +183,15 @@ func (s NeAlarmStateCheckLicenseProcessor) alarmClear(neInfo neModel.NeInfo, v n
|
||||
// alarmNew 新增告警
|
||||
func (s NeAlarmStateCheckLicenseProcessor) alarmNew(neInfo neModel.NeInfo, v alarmParams) (neDataModel.Alarm, error) {
|
||||
// seq 告警序号
|
||||
lastSeq := s.alarmService.FindAlarmSeqLast(neInfo.NeType, neInfo.NeId)
|
||||
lastSeq := s.alarmService.FindAlarmSeqLast(neInfo.CoreUID, neInfo.NeUID)
|
||||
lastTime := neInfo.UpdateTime // 网元最后更新时间
|
||||
if lastTime < neInfo.CreateTime {
|
||||
lastTime = time.Now().UnixMilli()
|
||||
}
|
||||
alarm := neDataModel.Alarm{
|
||||
CoreUID: neInfo.CoreUID,
|
||||
NeUID: neInfo.NeUID,
|
||||
NeType: neInfo.NeType,
|
||||
NeId: neInfo.NeId,
|
||||
NeName: neInfo.NeName,
|
||||
Province: neInfo.Province,
|
||||
PvFlag: neInfo.PvFlag,
|
||||
AlarmSeq: lastSeq + 1,
|
||||
AlarmId: v.AlarmId,
|
||||
AlarmTitle: v.AlarmTitle,
|
||||
@@ -202,7 +200,7 @@ func (s NeAlarmStateCheckLicenseProcessor) alarmNew(neInfo neModel.NeInfo, v ala
|
||||
AlarmType: v.AlarmType,
|
||||
OrigSeverity: v.OrigSeverity,
|
||||
PerceivedSeverity: v.OrigSeverity,
|
||||
ObjectUid: neInfo.RmUID,
|
||||
ObjectUid: neInfo.NeUID,
|
||||
ObjectName: "NE License",
|
||||
ObjectType: "license",
|
||||
LocationInfo: "NE License: Heartbeat",
|
||||
|
||||
@@ -38,7 +38,7 @@ func (s *NeConfigBackupProcessor) Execute(data any) (any, error) {
|
||||
|
||||
neList := s.neInfoService.Find(neModel.NeInfo{}, false, false)
|
||||
for _, neInfo := range neList {
|
||||
neTypeAndId := fmt.Sprintf("%s_%s", neInfo.NeType, neInfo.NeId)
|
||||
neTypeAndId := fmt.Sprintf("%s_%s", neInfo.NeType, neInfo.ID)
|
||||
// 将网元文件备份到本地
|
||||
zipFilePath, err := s.neConfigBackupService.FileNeToLocal(neInfo)
|
||||
if err != nil {
|
||||
@@ -48,8 +48,9 @@ func (s *NeConfigBackupProcessor) Execute(data any) (any, error) {
|
||||
|
||||
// 新增备份记录
|
||||
item := neModel.NeConfigBackup{
|
||||
CoreUID: neInfo.CoreUID,
|
||||
NeUID: neInfo.NeUID,
|
||||
NeType: neInfo.NeType,
|
||||
NeId: neInfo.NeId,
|
||||
Name: filepath.Base(zipFilePath),
|
||||
Path: zipFilePath,
|
||||
CreateBy: "system",
|
||||
|
||||
@@ -37,8 +37,8 @@ func (s *NeDataUDM) Execute(data any) (any, error) {
|
||||
|
||||
neList := s.neInfoService.Find(neModel.NeInfo{NeType: "UDM"}, false, false)
|
||||
for _, neInfo := range neList {
|
||||
result[fmt.Sprintf("AuthNumber_%s", neInfo.NeId)] = s.udmAuthService.ResetData(neInfo.NeId)
|
||||
result[fmt.Sprintf("SubNumber_%s", neInfo.NeId)] = s.udmSubService.ResetData(neInfo.NeId)
|
||||
result[fmt.Sprintf("AuthNumber_%s", neInfo.NeUID)] = s.udmAuthService.ResetData(neInfo.CoreUID, neInfo.NeUID)
|
||||
result[fmt.Sprintf("SubNumber_%s", neInfo.NeUID)] = s.udmSubService.ResetData(neInfo.CoreUID, neInfo.NeUID)
|
||||
}
|
||||
|
||||
return result, nil
|
||||
|
||||
@@ -3,8 +3,6 @@ package controller
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"be.ems/src/framework/i18n"
|
||||
"be.ems/src/framework/reqctx"
|
||||
"be.ems/src/framework/resp"
|
||||
"be.ems/src/modules/network_data/model"
|
||||
neDataService "be.ems/src/modules/network_data/service"
|
||||
@@ -45,7 +43,6 @@ type KPIController struct {
|
||||
// @Description Access to statistical data
|
||||
// @Router /neData/kpi/data [get]
|
||||
func (s KPIController) KPIData(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var querys model.KPIQuery
|
||||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -53,14 +50,6 @@ func (s KPIController) KPIData(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(querys.NeType, querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
querys.RmUID = neInfo.RmUID
|
||||
|
||||
// 查询数据
|
||||
kpiData := s.kpiReportService.FindData(querys)
|
||||
c.JSON(200, resp.OkData(kpiData))
|
||||
|
||||
@@ -49,7 +49,6 @@ type NBStateController struct {
|
||||
// @Description Base Station Status List
|
||||
// @Router /nb-state/list [get]
|
||||
func (s NBStateController) List(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var query model.NBStateQuery
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -57,14 +56,6 @@ func (s NBStateController) List(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元信息 rmUID
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(query.NeType, query.NeID)
|
||||
if neInfo.NeId != query.NeID || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
query.RmUID = neInfo.RmUID
|
||||
|
||||
// 查询数据
|
||||
rows, total := s.nbStateService.FindByPage(query)
|
||||
c.JSON(200, resp.OkData(map[string]any{"rows": rows, "total": total}))
|
||||
@@ -96,13 +87,7 @@ func (s NBStateController) Export(c *gin.Context) {
|
||||
if querys.PageSize > 10000 {
|
||||
querys.PageSize = 10000
|
||||
}
|
||||
// 查询网元信息 rmUID
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(querys.NeType, querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
querys.RmUID = neInfo.RmUID
|
||||
|
||||
rows, total := s.nbStateService.FindByPage(querys)
|
||||
if total == 0 {
|
||||
// 导出数据记录为空
|
||||
|
||||
@@ -48,7 +48,6 @@ type AMFController struct {
|
||||
// @Description UE Session List
|
||||
// @Router /neData/amf/ue/list [get]
|
||||
func (s *AMFController) UEList(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var querys model.UEEventAMFQuery
|
||||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -56,14 +55,6 @@ func (s *AMFController) UEList(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("AMF", querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
querys.RmUID = neInfo.RmUID
|
||||
|
||||
// 查询数据
|
||||
rows, total := s.ueEventService.FindByPage(querys)
|
||||
c.JSON(200, resp.OkData(map[string]any{"rows": rows, "total": total}))
|
||||
@@ -133,13 +124,7 @@ func (s *AMFController) UEExport(c *gin.Context) {
|
||||
if querys.PageSize > 10000 {
|
||||
querys.PageSize = 10000
|
||||
}
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("AMF", querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
querys.RmUID = neInfo.RmUID
|
||||
|
||||
rows, total := s.ueEventService.FindByPage(querys)
|
||||
if total == 0 {
|
||||
// 导出数据记录为空
|
||||
@@ -176,8 +161,9 @@ func (s *AMFController) UEExport(c *gin.Context) {
|
||||
func (s *AMFController) NbInfoList(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var query struct {
|
||||
NeId string `form:"neId" binding:"required"`
|
||||
NbId string `form:"id"`
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
NbId string `form:"id"`
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -186,8 +172,8 @@ func (s *AMFController) NbInfoList(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("AMF", query.NeId)
|
||||
if neInfo.NeId != query.NeId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
@@ -219,15 +205,19 @@ func (s *AMFController) NbInfoList(c *gin.Context) {
|
||||
// @Router /neData/amf/nb/list-cfg [get]
|
||||
func (s *AMFController) NbStateList(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Query("neId")
|
||||
if neId == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId is empty"))
|
||||
var query struct {
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("AMF", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
@@ -49,7 +49,6 @@ type IMSController struct {
|
||||
// @Description CDR Session List
|
||||
// @Router /neData/ims/cdr/list [get]
|
||||
func (s *IMSController) CDRList(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var querys model.CDREventIMSQuery
|
||||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -57,14 +56,6 @@ func (s *IMSController) CDRList(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元信息 rmUID
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(querys.NeType, querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
querys.RmUID = neInfo.RmUID
|
||||
|
||||
// 查询数据
|
||||
rows, total := s.cdrEventService.FindByPage(querys)
|
||||
c.JSON(200, resp.OkData(map[string]any{"rows": rows, "total": total}))
|
||||
@@ -134,13 +125,7 @@ func (s *IMSController) CDRExport(c *gin.Context) {
|
||||
if querys.PageSize > 10000 {
|
||||
querys.PageSize = 10000
|
||||
}
|
||||
// 查询网元信息 rmUID
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(querys.NeType, querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
querys.RmUID = neInfo.RmUID
|
||||
|
||||
rows, total := s.cdrEventService.FindByPage(querys)
|
||||
if total == 0 {
|
||||
// 导出数据记录为空
|
||||
@@ -175,15 +160,19 @@ func (s *IMSController) CDRExport(c *gin.Context) {
|
||||
// @Router /neData/ims/session/num [get]
|
||||
func (s *IMSController) UeSessionNum(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Query("neId")
|
||||
if neId == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId is empty"))
|
||||
var query struct {
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("IMS", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
@@ -216,9 +205,10 @@ func (s *IMSController) UeSessionNum(c *gin.Context) {
|
||||
func (s *IMSController) UeSessionList(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var query struct {
|
||||
NeId string `form:"neId" binding:"required"`
|
||||
IMSI string `form:"imsi"`
|
||||
MSISDN string `form:"msisdn"`
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
IMSI string `form:"imsi"`
|
||||
MSISDN string `form:"msisdn"`
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -227,8 +217,8 @@ func (s *IMSController) UeSessionList(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("IMS", query.NeId)
|
||||
if neInfo.NeId != query.NeId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
@@ -48,7 +48,6 @@ type MMEController struct {
|
||||
// @Description UE Session List
|
||||
// @Router /neData/mme/ue/list [get]
|
||||
func (s *MMEController) UEList(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var querys model.UEEventMMEQuery
|
||||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -56,14 +55,6 @@ func (s *MMEController) UEList(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("MME", querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
querys.RmUID = neInfo.RmUID
|
||||
|
||||
// 查询数据
|
||||
rows, total := s.ueEventService.FindByPage(querys)
|
||||
c.JSON(200, resp.OkData(map[string]any{"rows": rows, "total": total}))
|
||||
@@ -133,13 +124,7 @@ func (s *MMEController) UEExport(c *gin.Context) {
|
||||
if querys.PageSize > 10000 {
|
||||
querys.PageSize = 10000
|
||||
}
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("MME", querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
querys.RmUID = neInfo.RmUID
|
||||
|
||||
rows, total := s.ueEventService.FindByPage(querys)
|
||||
if total == 0 {
|
||||
// 导出数据记录为空
|
||||
@@ -176,8 +161,9 @@ func (s *MMEController) UEExport(c *gin.Context) {
|
||||
func (s *MMEController) NbInfoList(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var query struct {
|
||||
NeId string `form:"neId" binding:"required"`
|
||||
NbId string `form:"id"`
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
NbId string `form:"id"`
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -186,8 +172,8 @@ func (s *MMEController) NbInfoList(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("MME", query.NeId)
|
||||
if neInfo.NeId != query.NeId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
@@ -219,15 +205,19 @@ func (s *MMEController) NbInfoList(c *gin.Context) {
|
||||
// @Router /neData/mme/nb/list-cfg [get]
|
||||
func (s *MMEController) NbStateList(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Query("neId")
|
||||
if neId == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId is empty"))
|
||||
var query struct {
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("MME", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
@@ -42,9 +42,10 @@ type PCFController struct {
|
||||
func (s PCFController) RuleInfoList(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var query struct {
|
||||
NeId string `form:"neId" binding:"required"`
|
||||
IMSI string `form:"imsi"`
|
||||
MSISDN string `form:"msisdn"`
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
IMSI string `form:"imsi"`
|
||||
MSISDN string `form:"msisdn"`
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -53,8 +54,8 @@ func (s PCFController) RuleInfoList(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("PCF", query.NeId)
|
||||
if neInfo.NeId != query.NeId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
@@ -88,7 +89,8 @@ func (s PCFController) RuleInfoList(c *gin.Context) {
|
||||
func (s PCFController) RuleInfoAdd(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var body struct {
|
||||
NeId string `json:"neId" binding:"required"` // 网元ID
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
Num int64 `json:"num"` // 批量添加,默认0单条,大于1时imsi/msisdn会累加数值
|
||||
ParamData map[string]any `json:"paramData" binding:"required"` // 参数数据
|
||||
// Imsi string `json:"imsi" binding:"required"`
|
||||
@@ -109,8 +111,8 @@ func (s PCFController) RuleInfoAdd(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("PCF", body.NeId)
|
||||
if neInfo.NeId != body.NeId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
@@ -145,7 +147,8 @@ func (s PCFController) RuleInfoAdd(c *gin.Context) {
|
||||
func (s PCFController) RuleInfoEdit(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var body struct {
|
||||
NeId string `json:"neId" binding:"required"` // 网元ID
|
||||
CoreUID string `json:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" binding:"required"` // 网元唯一标识
|
||||
Num int64 `json:"num"` // 更新数量
|
||||
ParamData map[string]any `json:"paramData" binding:"required"` // 参数数据
|
||||
// Imsi string `json:"imsi" binding:"required"`
|
||||
@@ -166,8 +169,8 @@ func (s PCFController) RuleInfoEdit(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("PCF", body.NeId)
|
||||
if neInfo.NeId != body.NeId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
@@ -204,9 +207,10 @@ func (s PCFController) RuleInfoEdit(c *gin.Context) {
|
||||
func (s PCFController) RuleInfoRemove(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var query struct {
|
||||
NeId string `form:"neId" binding:"required"` // 网元ID
|
||||
IMSI string `form:"imsi" binding:"required"` // IMSi, 带数量时为批量删除
|
||||
Num int64 `form:"num"` // 删除数量
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
IMSI string `form:"imsi" binding:"required"` // IMSi, 带数量时为批量删除
|
||||
Num int64 `form:"num"` // 删除数量
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -215,8 +219,8 @@ func (s PCFController) RuleInfoRemove(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("PCF", query.NeId)
|
||||
if neInfo.NeId != query.NeId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
@@ -252,7 +256,8 @@ func (s PCFController) RuleInfoRemove(c *gin.Context) {
|
||||
func (s PCFController) RuleInfoExport(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var query struct {
|
||||
NeId string `form:"neId" binding:"required"`
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
FileType string `form:"fileType" binding:"required,oneof=txt"` // 文件类型
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
@@ -262,8 +267,8 @@ func (s PCFController) RuleInfoExport(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("PCF", query.NeId)
|
||||
if neInfo.NeId != query.NeId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
@@ -298,7 +303,8 @@ func (s PCFController) RuleInfoExport(c *gin.Context) {
|
||||
func (s PCFController) RuleInfoImport(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var body struct {
|
||||
NeId string `json:"neId" binding:"required"`
|
||||
CoreUID string `json:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" binding:"required"` // 网元唯一标识
|
||||
FileType string `json:"fileType" binding:"required,oneof=txt"` // 文件类型
|
||||
FilePath string `json:"filePath" binding:"required"` // 网元端文件所在绝对路径
|
||||
}
|
||||
@@ -309,8 +315,8 @@ func (s PCFController) RuleInfoImport(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("PCF", body.NeId)
|
||||
if neInfo.NeId != body.NeId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
@@ -49,7 +49,6 @@ type SGWCController struct {
|
||||
// @Description CDR Session List
|
||||
// @Router /neData/sgwc/cdr/list [get]
|
||||
func (s *SGWCController) CDRList(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var querys model.CDREventSGWCQuery
|
||||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -57,14 +56,6 @@ func (s *SGWCController) CDRList(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元信息 rmUID
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(querys.NeType, querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
querys.RmUID = neInfo.RmUID
|
||||
|
||||
// 查询数据
|
||||
rows, total := s.cdrEventService.FindByPage(querys)
|
||||
c.JSON(200, resp.OkData(map[string]any{"rows": rows, "total": total}))
|
||||
@@ -134,13 +125,7 @@ func (s *SGWCController) CDRExport(c *gin.Context) {
|
||||
if querys.PageSize > 10000 {
|
||||
querys.PageSize = 10000
|
||||
}
|
||||
// 查询网元信息 rmUID
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(querys.NeType, querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
querys.RmUID = neInfo.RmUID
|
||||
|
||||
rows, total := s.cdrEventService.FindByPage(querys)
|
||||
if total == 0 {
|
||||
// 导出数据记录为空
|
||||
|
||||
@@ -51,7 +51,6 @@ type SMFController struct {
|
||||
// @Description CDR Session List
|
||||
// @Router /neData/smf/cdr/list [get]
|
||||
func (s *SMFController) CDRList(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var querys model.CDREventSMFQuery
|
||||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -59,14 +58,6 @@ func (s *SMFController) CDRList(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元信息 rmUID
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(querys.NeType, querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
querys.RmUID = neInfo.RmUID
|
||||
|
||||
// 查询数据
|
||||
rows, total := s.cdrEventService.FindByPage(querys)
|
||||
c.JSON(200, resp.OkData(map[string]any{"rows": rows, "total": total}))
|
||||
@@ -136,13 +127,7 @@ func (s *SMFController) CDRExport(c *gin.Context) {
|
||||
if querys.PageSize > 10000 {
|
||||
querys.PageSize = 10000
|
||||
}
|
||||
// 查询网元信息 rmUID
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(querys.NeType, querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
querys.RmUID = neInfo.RmUID
|
||||
|
||||
rows, total := s.cdrEventService.FindByPage(querys)
|
||||
if total == 0 {
|
||||
// 导出数据记录为空
|
||||
@@ -178,7 +163,8 @@ func (s *SMFController) CDRExport(c *gin.Context) {
|
||||
func (s *SMFController) SubUserNum(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var query struct {
|
||||
NeId string `form:"neId" binding:"required"`
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -187,8 +173,8 @@ func (s *SMFController) SubUserNum(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("SMF", query.NeId)
|
||||
if neInfo.NeId != query.NeId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
@@ -223,7 +209,8 @@ func (s *SMFController) SubUserNum(c *gin.Context) {
|
||||
func (s *SMFController) SubUserList(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var query struct {
|
||||
NeId string `form:"neId" binding:"required"`
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
IMSI string `form:"imsi"`
|
||||
MSISDN string `form:"msisdn"`
|
||||
Upstate string `form:"upstate"`
|
||||
@@ -236,8 +223,8 @@ func (s *SMFController) SubUserList(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("SMF", query.NeId)
|
||||
if neInfo.NeId != query.NeId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
@@ -265,7 +252,7 @@ func (s *SMFController) SubUserList(c *gin.Context) {
|
||||
imsiStr = strings.TrimPrefix(imsiStr, "imsi-")
|
||||
item["imsi"] = imsiStr
|
||||
// 查UDM拓展信息
|
||||
info := s.UDMExtendService.FindByIMSIAndNeID(imsiStr, "%")
|
||||
info := s.UDMExtendService.FindByIMSIAndNeID(query.CoreUID, query.NeUID, imsiStr)
|
||||
item["remark"] = info.Remark
|
||||
}
|
||||
if v, ok := item["msisdn"]; ok && v != nil {
|
||||
|
||||
@@ -48,7 +48,6 @@ type SMSCController struct {
|
||||
// @Description CDR Session List
|
||||
// @Router /neData/smsc/cdr/list [get]
|
||||
func (s *SMSCController) CDRList(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var querys model.CDREventSMSCQuery
|
||||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -56,14 +55,6 @@ func (s *SMSCController) CDRList(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元信息 rmUID
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(querys.NeType, querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
querys.RmUID = neInfo.RmUID
|
||||
|
||||
// 查询数据
|
||||
rows, total := s.cdrEventService.FindByPage(querys)
|
||||
c.JSON(200, resp.OkData(map[string]any{"rows": rows, "total": total}))
|
||||
@@ -133,13 +124,7 @@ func (s *SMSCController) CDRExport(c *gin.Context) {
|
||||
if querys.PageSize > 10000 {
|
||||
querys.PageSize = 10000
|
||||
}
|
||||
// 查询网元信息 rmUID
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(querys.NeType, querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
querys.RmUID = neInfo.RmUID
|
||||
|
||||
rows, total := s.cdrEventService.FindByPage(querys)
|
||||
if total == 0 {
|
||||
// 导出数据记录为空
|
||||
|
||||
@@ -37,7 +37,7 @@ type UDMAuthController struct {
|
||||
|
||||
// UDM鉴权用户重载数据
|
||||
//
|
||||
// PUT /resetData/:neId
|
||||
// PUT /reset
|
||||
//
|
||||
// @Tags network_data/udm/auth
|
||||
// @Accept json
|
||||
@@ -47,15 +47,19 @@ type UDMAuthController struct {
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM Authentication User Data Refresh
|
||||
// @Description UDM Authenticated User Data List Refresh Synchronization Latest
|
||||
// @Router /neData/udm/auth/resetData/{neId} [put]
|
||||
// @Router /neData/udm/auth/reset [put]
|
||||
func (s *UDMAuthController) ResetData(c *gin.Context) {
|
||||
neId := c.Param("neId")
|
||||
if neId == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId is empty"))
|
||||
var query struct {
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
data := s.udmAuthService.ResetData(neId)
|
||||
data := s.udmAuthService.ResetData(query.CoreUID, query.NeUID)
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
@@ -88,30 +92,35 @@ func (s *UDMAuthController) List(c *gin.Context) {
|
||||
// @Tags network_data/udm/auth
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param neId path string true "NE ID" default(001)
|
||||
// @Param value path string true "IMSI"
|
||||
// @Param coreUid query string true "NE ID" default(001)
|
||||
// @Param neUid query string true "NE ID" default(001)
|
||||
// @Param imsi query string true "IMSI"
|
||||
// @Success 200 {object} object "Response Results"
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM Authentication User Information
|
||||
// @Description UDM Authentication User Information
|
||||
// @Router /neData/udm/auth/{neId}/{value} [get]
|
||||
// @Router /neData/udm/auth [get]
|
||||
func (s *UDMAuthController) Info(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
imsi := c.Param("imsi")
|
||||
if neId == "" || imsi == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId/imsi is empty"))
|
||||
var query struct {
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
IMSI string `form:"imsi" binding:"required"` // 网元唯一标识
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID || neInfo.NeType != "UDM" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.CoreUID, neInfo.NeUID, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -119,7 +128,7 @@ func (s *UDMAuthController) Info(c *gin.Context) {
|
||||
defer telnetClient.Close()
|
||||
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("dsp authdat:imsi=%s", imsi)
|
||||
cmd := fmt.Sprintf("dsp authdat:imsi=%s", query.IMSI)
|
||||
data, err := telnet.ConvertToMap(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
@@ -132,14 +141,14 @@ func (s *UDMAuthController) Info(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 解析返回的数据
|
||||
u := s.udmAuthService.ParseInfo(imsi, neId, data)
|
||||
s.udmAuthService.Insert(neId, u)
|
||||
u := s.udmAuthService.ParseInfo(neInfo.CoreUID, neInfo.NeUID, query.IMSI, data)
|
||||
s.udmAuthService.Insert(neInfo.CoreUID, neInfo.NeUID, u)
|
||||
c.JSON(200, resp.OkData(u))
|
||||
}
|
||||
|
||||
// UDM鉴权用户新增
|
||||
//
|
||||
// POST /:neId
|
||||
// POST /
|
||||
//
|
||||
// @Tags network_data/udm/auth
|
||||
// @Accept json
|
||||
@@ -150,12 +159,13 @@ func (s *UDMAuthController) Info(c *gin.Context) {
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM Authentication User Added
|
||||
// @Description UDM Authentication User Added
|
||||
// @Router /neData/udm/auth/{neId} [post]
|
||||
// @Router /neData/udm/auth [post]
|
||||
func (s *UDMAuthController) Add(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
if neId == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId is empty"))
|
||||
// 传入数量大于0时,为批量新增
|
||||
num := parse.Number(c.Query("num"))
|
||||
if num < 0 {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: num is empty"))
|
||||
return
|
||||
}
|
||||
|
||||
@@ -171,19 +181,38 @@ func (s *UDMAuthController) Add(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID || neInfo.NeType != "UDM" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.CoreUID, neInfo.NeUID, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
defer telnetClient.Close()
|
||||
|
||||
// 批量新增
|
||||
if num > 1 {
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("baa authdat:start_imsi=%s,sub_num=%d,", body.IMSI, num)
|
||||
cmd += s.udmAuthService.ParseCommandParams(body)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmAuthService.LoadData(neInfo.CoreUID, neInfo.NeUID, body.IMSI, num)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
return
|
||||
}
|
||||
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("add authdat:imsi=%s,", body.IMSI)
|
||||
cmd += s.udmAuthService.ParseCommandParams(body)
|
||||
@@ -195,79 +224,14 @@ func (s *UDMAuthController) Add(c *gin.Context) {
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmAuthService.Insert(neId, body)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
// UDM鉴权用户批量新增
|
||||
//
|
||||
// POST /:neId/:num
|
||||
//
|
||||
// @Tags network_data/udm/auth
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param neId path string true "NE ID" default(001)
|
||||
// @Param value path number true "Number of releases, value includes start imsi"
|
||||
// @Param data body object true "Request Param"
|
||||
// @Success 200 {object} object "Response Results"
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM Authentication User Batch Add
|
||||
// @Description UDM Authentication User Batch Add
|
||||
// @Router /neData/udm/auth/{neId}/{value} [post]
|
||||
func (s *UDMAuthController) Adds(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
num := c.Param("num")
|
||||
if neId == "" || num == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId/num is empty"))
|
||||
return
|
||||
}
|
||||
|
||||
var body model.UDMAuthUser
|
||||
if err := c.ShouldBindBodyWithJSON(&body); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
if body.IMSI == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: imsi is empty"))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
defer telnetClient.Close()
|
||||
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("baa authdat:start_imsi=%s,sub_num=%s,", body.IMSI, num)
|
||||
cmd += s.udmAuthService.ParseCommandParams(body)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmAuthService.LoadData(neId, body.IMSI, num)
|
||||
s.udmAuthService.Insert(neInfo.CoreUID, neInfo.NeUID, body)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
// UDM鉴权用户修改
|
||||
//
|
||||
// PUT /:neId
|
||||
// PUT /
|
||||
//
|
||||
// @Tags network_data/udm/auth
|
||||
// @Accept json
|
||||
@@ -278,15 +242,9 @@ func (s *UDMAuthController) Adds(c *gin.Context) {
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM Authenticated User Modification
|
||||
// @Description UDM Authenticated User Modification
|
||||
// @Router /neData/udm/auth/{neId} [put]
|
||||
// @Router /neData/udm/auth [put]
|
||||
func (s *UDMAuthController) Edit(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
if neId == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId is empty"))
|
||||
return
|
||||
}
|
||||
|
||||
var body model.UDMAuthUser
|
||||
if err := c.ShouldBindBodyWithJSON(&body); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -299,13 +257,13 @@ func (s *UDMAuthController) Edit(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID || neInfo.NeType != "UDM" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.CoreUID, neInfo.NeUID, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -323,7 +281,7 @@ func (s *UDMAuthController) Edit(c *gin.Context) {
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmAuthService.Insert(neId, body)
|
||||
s.udmAuthService.Insert(neInfo.CoreUID, neInfo.NeUID, body)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
@@ -344,35 +302,56 @@ func (s *UDMAuthController) Edit(c *gin.Context) {
|
||||
// @Router /neData/udm/auth/{neId}/{value} [delete]
|
||||
func (s *UDMAuthController) Remove(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
imsi := c.Param("imsi")
|
||||
if neId == "" || imsi == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId/imsi is empty"))
|
||||
var query struct {
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
IMSI string `form:"imsi" binding:"required"` // IMSi
|
||||
Num int64 `form:"num"` // 批量数量
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
// 处理字符转id数组后去重
|
||||
imsiArr := strings.Split(imsi, ",")
|
||||
uniqueIDs := parse.RemoveDuplicates(imsiArr)
|
||||
if len(uniqueIDs) <= 0 {
|
||||
c.JSON(200, resp.Err(nil))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID || neInfo.NeType != "UDM" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.CoreUID, neInfo.NeUID, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
defer telnetClient.Close()
|
||||
|
||||
if query.Num > 0 {
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("bde authdat:start_imsi=%s,sub_num=%d", query.IMSI, query.Num)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmAuthService.LoadData(neInfo.CoreUID, neInfo.NeUID, query.IMSI, query.Num)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
return
|
||||
}
|
||||
|
||||
// 处理字符转id数组后去重
|
||||
imsiArr := strings.Split(query.IMSI, ",")
|
||||
uniqueIDs := parse.RemoveDuplicates(imsiArr)
|
||||
if len(uniqueIDs) <= 0 {
|
||||
c.JSON(200, resp.Err(nil))
|
||||
return
|
||||
}
|
||||
resultData := map[string]string{}
|
||||
for _, imsi := range uniqueIDs {
|
||||
// 发送MML
|
||||
@@ -384,7 +363,7 @@ func (s *UDMAuthController) Remove(c *gin.Context) {
|
||||
}
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmAuthService.Delete(imsi, neId)
|
||||
s.udmAuthService.Delete(neInfo.CoreUID, neInfo.NeUID, imsi)
|
||||
}
|
||||
resultData[imsi] = data
|
||||
}
|
||||
@@ -392,60 +371,6 @@ func (s *UDMAuthController) Remove(c *gin.Context) {
|
||||
c.JSON(200, resp.OkData(resultData))
|
||||
}
|
||||
|
||||
// UDM鉴权用户批量删除
|
||||
//
|
||||
// DELETE /:neId/:imsi/:num
|
||||
//
|
||||
// @Tags network_data/udm/auth
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param neId path string true "NE ID" default(001)
|
||||
// @Param imsi path string true "IMSI"
|
||||
// @Param num path number true "Number of releases, value includes start imsi"
|
||||
// @Success 200 {object} object "Response Results"
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM Authentication User Batch Deletion
|
||||
// @Description UDM Authentication User Batch Deletion
|
||||
// @Router /neData/udm/auth/{neId}/{imsi}/{num} [delete]
|
||||
func (s *UDMAuthController) Removes(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
imsi := c.Param("imsi")
|
||||
num := c.Param("num")
|
||||
if neId == "" || imsi == "" || num == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId/imsi/num is empty"))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
defer telnetClient.Close()
|
||||
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("bde authdat:start_imsi=%s,sub_num=%s", imsi, num)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmAuthService.LoadData(neId, imsi, num)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
// UDM鉴权用户导出
|
||||
//
|
||||
// GET /export
|
||||
@@ -465,13 +390,12 @@ func (s *UDMAuthController) Removes(c *gin.Context) {
|
||||
// @Router /neData/udm/auth/export [get]
|
||||
func (s *UDMAuthController) Export(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
// 查询结果,根据查询条件结果,单页最大值限制
|
||||
neId := c.Query("neId")
|
||||
fileType := c.Query("type")
|
||||
if neId == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId is empty"))
|
||||
neUid := c.Query("neUid")
|
||||
if c.Query("coreUid") == "" || neUid == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: coreUid or neUid is empty"))
|
||||
return
|
||||
}
|
||||
fileType := c.Query("type")
|
||||
if !(fileType == "csv" || fileType == "txt") {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "ne.udm.errImportUserSubFileFormat")))
|
||||
return
|
||||
@@ -484,8 +408,6 @@ func (s *UDMAuthController) Export(c *gin.Context) {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.exportEmpty")))
|
||||
return
|
||||
}
|
||||
|
||||
// rows := s.udmAuthService.SelectList(model.UDMAuthUser{NeId: neId})
|
||||
if len(rows) <= 0 {
|
||||
// 导出数据记录为空
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.exportEmpty")))
|
||||
@@ -493,7 +415,7 @@ func (s *UDMAuthController) Export(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 文件名
|
||||
fileName := fmt.Sprintf("udm_auth_user_export_%s_%d.%s", neId, time.Now().UnixMilli(), fileType)
|
||||
fileName := fmt.Sprintf("udm_auth_user_export_%s_%d.%s", neUid, time.Now().UnixMilli(), fileType)
|
||||
filePath := filepath.Join(file.ParseUploadFileDir(constants.UPLOAD_EXPORT), fileName)
|
||||
|
||||
if fileType == "csv" {
|
||||
@@ -550,7 +472,8 @@ func (s *UDMAuthController) Export(c *gin.Context) {
|
||||
func (s *UDMAuthController) Import(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var body struct {
|
||||
NeId string `json:"neId" binding:"required"` // 网元ID
|
||||
CoreUID string `json:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" binding:"required"` // 网元唯一标识
|
||||
UploadPath string `json:"uploadPath" binding:"required"` // 上传文件路径
|
||||
TypeVal string `json:"typeVal" binding:"required,oneof=default k4"` // default: 默认导入方式, k4: k4类型导入方式
|
||||
TypeData any `json:"typeData"` // k4类型的数据密钥
|
||||
@@ -567,15 +490,14 @@ func (s *UDMAuthController) Import(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", body.NeId)
|
||||
if neInfo.NeId != body.NeId || neInfo.IP == "" {
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID || neInfo.NeType != "UDM" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
// 网元主机的SSH客户端
|
||||
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId)
|
||||
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.CoreUID, neInfo.NeUID)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -599,7 +521,7 @@ func (s *UDMAuthController) Import(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.NeType, neInfo.NeId, 1)
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.CoreUID, neInfo.NeUID, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -618,7 +540,7 @@ func (s *UDMAuthController) Import(c *gin.Context) {
|
||||
|
||||
// K4类型发特定请求
|
||||
if body.TypeVal == "k4" {
|
||||
resultMsg, resultErr = neFetchlink.UDMImportAuth(neInfo.IP, map[string]any{
|
||||
resultMsg, resultErr = neFetchlink.UDMImportAuth(neInfo.IPAddr, map[string]any{
|
||||
"path": neFilePath, "k4": body.TypeData,
|
||||
})
|
||||
}
|
||||
@@ -632,11 +554,11 @@ func (s *UDMAuthController) Import(c *gin.Context) {
|
||||
if strings.Contains(resultMsg, "ok") {
|
||||
if strings.HasSuffix(body.UploadPath, ".csv") {
|
||||
data := file.ReadFileCSV(localFilePath)
|
||||
go s.udmAuthService.InsertData(neInfo.NeId, "csv", data)
|
||||
go s.udmAuthService.InsertData(neInfo.CoreUID, neInfo.NeUID, "csv", data)
|
||||
}
|
||||
if strings.HasSuffix(body.UploadPath, ".txt") {
|
||||
data := file.ReadFileTXTLine(",", localFilePath)
|
||||
go s.udmAuthService.InsertData(neInfo.NeId, "txt", data)
|
||||
go s.udmAuthService.InsertData(neInfo.CoreUID, neInfo.NeUID, "txt", data)
|
||||
}
|
||||
}
|
||||
c.JSON(200, resp.OkMsg(resultMsg))
|
||||
|
||||
@@ -36,7 +36,7 @@ type UDMSubController struct {
|
||||
|
||||
// UDM签约用户重载数据
|
||||
//
|
||||
// PUT /resetData/:neId
|
||||
// PUT /reset
|
||||
//
|
||||
// @Tags network_data/udm/sub
|
||||
// @Accept json
|
||||
@@ -46,15 +46,19 @@ type UDMSubController struct {
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM Subscriber User Reload Data
|
||||
// @Description UDM Subscriber User Reload Data
|
||||
// @Router /neData/udm/sub/resetData/{neId} [put]
|
||||
// @Router /neData/udm/sub/reset [put]
|
||||
func (s *UDMSubController) ResetData(c *gin.Context) {
|
||||
neId := c.Param("neId")
|
||||
if neId == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId is empty"))
|
||||
var query struct {
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
data := s.udmSubService.ResetData(neId)
|
||||
data := s.udmSubService.ResetData(query.CoreUID, query.NeUID)
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
@@ -83,7 +87,7 @@ func (s *UDMSubController) List(c *gin.Context) {
|
||||
|
||||
// UDM签约用户信息
|
||||
//
|
||||
// GET /:neId/:imsi
|
||||
// GET /
|
||||
//
|
||||
// @Tags network_data/udm/sub
|
||||
// @Accept json
|
||||
@@ -94,24 +98,28 @@ func (s *UDMSubController) List(c *gin.Context) {
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM Subscriber User Information
|
||||
// @Description UDM Subscriber User Information
|
||||
// @Router /neData/udm/sub/{neId}/{value} [get]
|
||||
// @Router /neData/udm/sub [get]
|
||||
func (s *UDMSubController) Info(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
imsi := c.Param("imsi")
|
||||
if neId == "" || imsi == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId or imsi is empty"))
|
||||
var query struct {
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
IMSI string `form:"imsi" binding:"required"` // 网元唯一标识
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID || neInfo.NeType != "UDM" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.CoreUID, neInfo.NeUID, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -119,7 +127,7 @@ func (s *UDMSubController) Info(c *gin.Context) {
|
||||
defer telnetClient.Close()
|
||||
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("dsp udmuser:imsi=%s", imsi)
|
||||
cmd := fmt.Sprintf("dsp udmuser:imsi=%s", query.IMSI)
|
||||
data, err := telnet.ConvertToMap(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
@@ -132,14 +140,14 @@ func (s *UDMSubController) Info(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 解析返回的数据
|
||||
u := s.udmSubService.ParseInfo(imsi, neId, data)
|
||||
s.udmSubService.Insert(neId, u)
|
||||
u := s.udmSubService.ParseInfo(neInfo.CoreUID, neInfo.NeUID, query.IMSI, data)
|
||||
s.udmSubService.Insert(neInfo.CoreUID, neInfo.NeUID, u)
|
||||
c.JSON(200, resp.OkData(u))
|
||||
}
|
||||
|
||||
// UDM签约用户新增
|
||||
//
|
||||
// POST /:neId
|
||||
// POST /
|
||||
//
|
||||
// @Tags network_data/udm/sub
|
||||
// @Accept json
|
||||
@@ -150,12 +158,13 @@ func (s *UDMSubController) Info(c *gin.Context) {
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM Subscriber User Added
|
||||
// @Description UDM Subscriber User Added
|
||||
// @Router /neData/udm/sub/{neId} [post]
|
||||
// @Router /neData/udm/sub [post]
|
||||
func (s *UDMSubController) Add(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
if neId == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId is empty"))
|
||||
// 传入数量大于0时,为批量新增
|
||||
num := parse.Number(c.Query("num"))
|
||||
if num < 0 {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: num is empty"))
|
||||
return
|
||||
}
|
||||
|
||||
@@ -171,19 +180,41 @@ func (s *UDMSubController) Add(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID || neInfo.NeType != "UDM" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.CoreUID, neInfo.NeUID, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
defer telnetClient.Close()
|
||||
|
||||
// 批量新增
|
||||
if num > 1 {
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("baa udmuser:start_imsi=%s,start_msisdn=%s,sub_num=%d,", body.IMSI, body.MSISDN, num)
|
||||
cmd += s.udmSubService.ParseCommandParams(body)
|
||||
// 去除msisdn参数,避免重复
|
||||
omemsisdn := fmt.Sprintf(",msisdn=%s,", body.MSISDN)
|
||||
cmd = strings.Replace(cmd, omemsisdn, ",", 1)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmSubService.LoadData(neInfo.CoreUID, neInfo.NeUID, body.IMSI, num, body.Remark)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
return
|
||||
}
|
||||
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("add udmuser:imsi=%s,", body.IMSI)
|
||||
cmd += s.udmSubService.ParseCommandParams(body)
|
||||
@@ -195,83 +226,14 @@ func (s *UDMSubController) Add(c *gin.Context) {
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
body.NeId = neId
|
||||
s.udmSubService.Insert(neId, body)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
// UDM签约用户批量新增
|
||||
//
|
||||
// POST /:neId/:num
|
||||
//
|
||||
// @Tags network_data/udm/sub
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param neId path string true "NE ID" default(001)
|
||||
// @Param value path number true "Number of releases, value includes start imsi" default(1)
|
||||
// @Param data body object true "Request Param"
|
||||
// @Success 200 {object} object "Response Results"
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM Subscriber User Batch Add
|
||||
// @Description UDM Subscriber User Batch Add
|
||||
// @Router /neData/udm/sub/{neId}/{value} [post]
|
||||
func (s *UDMSubController) Adds(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
num := c.Param("num")
|
||||
if neId == "" || num == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId/num is empty"))
|
||||
return
|
||||
}
|
||||
|
||||
var body model.UDMSubUser
|
||||
if err := c.ShouldBindBodyWithJSON(&body); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
if len(body.IMSI) != 15 {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: IMSI length is not 15 bits"))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
defer telnetClient.Close()
|
||||
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("baa udmuser:start_imsi=%s,start_msisdn=%s,sub_num=%s,", body.IMSI, body.MSISDN, num)
|
||||
cmd += s.udmSubService.ParseCommandParams(body)
|
||||
// 去除msisdn参数,避免重复
|
||||
omemsisdn := fmt.Sprintf(",msisdn=%s,", body.MSISDN)
|
||||
cmd = strings.Replace(cmd, omemsisdn, ",", 1)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmSubService.LoadData(neId, body.IMSI, num, body.Remark)
|
||||
s.udmSubService.Insert(neInfo.CoreUID, neInfo.NeUID, body)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
// UDM签约用户修改
|
||||
//
|
||||
// PUT /:neId
|
||||
// PUT /
|
||||
//
|
||||
// @Tags network_data/udm/sub
|
||||
// @Accept json
|
||||
@@ -282,7 +244,7 @@ func (s *UDMSubController) Adds(c *gin.Context) {
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM Subscriber User Modification
|
||||
// @Description UDM Subscriber User Modification
|
||||
// @Router /neData/udm/sub/{neId} [put]
|
||||
// @Router /neData/udm/sub [put]
|
||||
func (s *UDMSubController) Edit(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
@@ -303,13 +265,13 @@ func (s *UDMSubController) Edit(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID || neInfo.NeType != "UDM" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.CoreUID, neInfo.NeUID, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -327,15 +289,14 @@ func (s *UDMSubController) Edit(c *gin.Context) {
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
body.NeId = neId
|
||||
s.udmSubService.Insert(neId, body)
|
||||
s.udmSubService.Insert(neInfo.CoreUID, neInfo.NeUID, body)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
// UDM签约用户删除
|
||||
//
|
||||
// DELETE /:neId/:imsi
|
||||
// DELETE /
|
||||
//
|
||||
// @Tags network_data/udm/sub
|
||||
// @Accept json
|
||||
@@ -346,38 +307,58 @@ func (s *UDMSubController) Edit(c *gin.Context) {
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM Subscriber User Deletion
|
||||
// @Description UDM Subscriber User Deletion
|
||||
// @Router /neData/udm/sub/{neId}/{value} [delete]
|
||||
// @Router /neData/udm/sub [delete]
|
||||
func (s *UDMSubController) Remove(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
imsi := c.Param("imsi")
|
||||
if neId == "" || len(imsi) < 15 {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId/imsi is empty"))
|
||||
var query struct {
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
IMSI string `form:"imsi" binding:"required"` // IMSi
|
||||
Num int64 `form:"num"` // 批量数量
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
// 处理字符转id数组后去重
|
||||
imsiArr := strings.Split(imsi, ",")
|
||||
uniqueIDs := parse.RemoveDuplicates(imsiArr)
|
||||
if len(uniqueIDs) <= 0 {
|
||||
c.JSON(200, resp.Err(nil))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID || neInfo.NeType != "UDM" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.CoreUID, neInfo.NeUID, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
defer telnetClient.Close()
|
||||
|
||||
if query.Num > 0 {
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("bde udmuser:start_imsi=%s,sub_num=%d", query.IMSI, query.Num)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmSubService.LoadData(neInfo.CoreUID, neInfo.NeUID, query.IMSI, query.Num, "-(Deleted)-")
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
// 处理字符转id数组后去重
|
||||
imsiArr := strings.Split(query.IMSI, ",")
|
||||
uniqueIDs := parse.RemoveDuplicates(imsiArr)
|
||||
if len(uniqueIDs) <= 0 {
|
||||
c.JSON(200, resp.Err(nil))
|
||||
return
|
||||
}
|
||||
resultData := map[string]string{}
|
||||
for _, imsi := range uniqueIDs {
|
||||
// 发送MML
|
||||
@@ -389,7 +370,7 @@ func (s *UDMSubController) Remove(c *gin.Context) {
|
||||
}
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmSubService.Delete(neId, imsi)
|
||||
s.udmSubService.Delete(neInfo.CoreUID, neInfo.NeUID, imsi)
|
||||
}
|
||||
resultData[imsi] = data
|
||||
}
|
||||
@@ -397,60 +378,6 @@ func (s *UDMSubController) Remove(c *gin.Context) {
|
||||
c.JSON(200, resp.OkData(resultData))
|
||||
}
|
||||
|
||||
// UDM签约用户批量删除
|
||||
//
|
||||
// DELETE /:neId/:imsi/:num
|
||||
//
|
||||
// @Tags network_data/udm/sub
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param neId path string true "NE ID" default(001)
|
||||
// @Param imsi path string true "IMSI"
|
||||
// @Param num path number true "Number of releases, value includes start imsi"
|
||||
// @Success 200 {object} object "Response Results"
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM Subscriber User Batch Deletion
|
||||
// @Description UDM Subscriber User Batch Deletion
|
||||
// @Router /neData/udm/sub/{neId}/{imsi}/{num} [delete]
|
||||
func (s *UDMSubController) Removes(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
imsi := c.Param("imsi")
|
||||
num := c.Param("num")
|
||||
if neId == "" || len(imsi) < 15 || num == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId/imsi/num is empty"))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
defer telnetClient.Close()
|
||||
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("bde udmuser:start_imsi=%s,sub_num=%s", imsi, num)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmSubService.LoadData(neId, imsi, num, "-(Deleted)-")
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
// UDM签约用户导出
|
||||
//
|
||||
// GET /export
|
||||
@@ -471,13 +398,12 @@ func (s *UDMSubController) Removes(c *gin.Context) {
|
||||
// @Router /neData/udm/sub/export [post]
|
||||
func (s *UDMSubController) Export(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
// 查询结果,根据查询条件结果,单页最大值限制
|
||||
neId := c.Query("neId")
|
||||
fileType := c.Query("type")
|
||||
if neId == "" || fileType == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId or type is empty"))
|
||||
neUid := c.Query("neUid")
|
||||
if c.Query("coreUid") == "" || neUid == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: coreUid or neUid is empty"))
|
||||
return
|
||||
}
|
||||
fileType := c.Query("type")
|
||||
if !(fileType == "csv" || fileType == "txt") {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "ne.udm.errImportUserSubFileFormat")))
|
||||
return
|
||||
@@ -490,8 +416,6 @@ func (s *UDMSubController) Export(c *gin.Context) {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.exportEmpty")))
|
||||
return
|
||||
}
|
||||
|
||||
// rows := s.udmSubService.SelectList(model.UDMSubUser{NeId: neId})
|
||||
if len(rows) <= 0 {
|
||||
// 导出数据记录为空
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.exportEmpty")))
|
||||
@@ -499,7 +423,7 @@ func (s *UDMSubController) Export(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 文件名
|
||||
fileName := fmt.Sprintf("udm_sub_user_export_%s_%d.%s", neId, time.Now().UnixMilli(), fileType)
|
||||
fileName := fmt.Sprintf("udm_sub_user_export_%s_%d.%s", neUid, time.Now().UnixMilli(), fileType)
|
||||
filePath := filepath.Join(file.ParseUploadFileDir(constants.UPLOAD_EXPORT), fileName)
|
||||
|
||||
if fileType == "csv" {
|
||||
@@ -550,7 +474,8 @@ func (s *UDMSubController) Export(c *gin.Context) {
|
||||
func (s *UDMSubController) Import(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var body struct {
|
||||
NeId string `json:"neId" binding:"required"`
|
||||
CoreUID string `json:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" binding:"required"` // 网元唯一标识
|
||||
UploadPath string `json:"uploadPath" binding:"required"`
|
||||
}
|
||||
if err := c.ShouldBindBodyWithJSON(&body); err != nil {
|
||||
@@ -565,15 +490,14 @@ func (s *UDMSubController) Import(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", body.NeId)
|
||||
if neInfo.NeId != body.NeId || neInfo.IP == "" {
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID || neInfo.NeType != "UDM" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
// 网元主机的SSH客户端
|
||||
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId)
|
||||
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.CoreUID, neInfo.NeUID)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -597,7 +521,7 @@ func (s *UDMSubController) Import(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.NeType, neInfo.NeId, 1)
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.CoreUID, neInfo.NeUID, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -616,11 +540,11 @@ func (s *UDMSubController) Import(c *gin.Context) {
|
||||
if strings.Contains(data, "ok") {
|
||||
if strings.HasSuffix(body.UploadPath, ".csv") {
|
||||
data := file.ReadFileCSV(localFilePath)
|
||||
go s.udmSubService.InsertData(neInfo.NeId, "csv", data)
|
||||
go s.udmSubService.InsertData(neInfo.CoreUID, neInfo.NeUID, "csv", data)
|
||||
}
|
||||
if strings.HasSuffix(body.UploadPath, ".txt") {
|
||||
data := file.ReadFileTXTLine(",", localFilePath)
|
||||
go s.udmSubService.InsertData(neInfo.NeId, "txt", data)
|
||||
go s.udmSubService.InsertData(neInfo.CoreUID, neInfo.NeUID, "txt", data)
|
||||
}
|
||||
}
|
||||
c.JSON(200, resp.OkMsg(data))
|
||||
|
||||
@@ -36,25 +36,30 @@ type UDMVOIPController struct {
|
||||
|
||||
// UDMVOIP用户重载数据
|
||||
//
|
||||
// PUT /resetData/:neId
|
||||
// PUT /reset
|
||||
//
|
||||
// @Tags network_data/udm/voip
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param neId path string true "NE ID" default(001)
|
||||
// @Param coreUid query string true "CoreUID" default(001)
|
||||
// @Param neUid query string true "NeUID" default(001)
|
||||
// @Success 200 {object} object "Response Results"
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM VOIP User Data Refresh
|
||||
// @Description UDM VOIP User Data List Refresh Synchronization Latest
|
||||
// @Router /neData/udm/voip/resetData/{neId} [put]
|
||||
// @Router /neData/udm/voip/reset [put]
|
||||
func (s *UDMVOIPController) ResetData(c *gin.Context) {
|
||||
neId := c.Param("neId")
|
||||
if neId == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId is empty"))
|
||||
var query struct {
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
data := s.udmVOIPService.ResetData(neId)
|
||||
data := s.udmVOIPService.ResetData(query.CoreUID, query.NeUID)
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
@@ -65,7 +70,8 @@ func (s *UDMVOIPController) ResetData(c *gin.Context) {
|
||||
// @Tags network_data/udm/voip
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param neId query string true "NE ID" default(001)
|
||||
// @Param coreUid query string true "CoreUID" default(001)
|
||||
// @Param neUid query string true "NeUID" default(001)
|
||||
// @Param username query string false "User Name"
|
||||
// @Param pageNum query number true "pageNum" default(1)
|
||||
// @Param pageSize query number true "pageSize" default(10)
|
||||
@@ -82,7 +88,7 @@ func (s *UDMVOIPController) List(c *gin.Context) {
|
||||
|
||||
// UDMVOIP用户信息
|
||||
//
|
||||
// GET /:neId/:username
|
||||
// GET /
|
||||
//
|
||||
// @Tags network_data/udm/voip
|
||||
// @Accept json
|
||||
@@ -93,24 +99,28 @@ func (s *UDMVOIPController) List(c *gin.Context) {
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM VOIP User Information
|
||||
// @Description UDM VOIP User Information
|
||||
// @Router /neData/udm/voip/{neId}/{value} [get]
|
||||
// @Router /neData/udm/voip [get]
|
||||
func (s *UDMVOIPController) Info(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
username := c.Param("username")
|
||||
if neId == "" || username == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId or username is empty"))
|
||||
var query struct {
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
UserName string `form:"username" binding:"required"` // 用户名
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID || neInfo.NeType != "UDM" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.CoreUID, neInfo.NeUID, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -118,7 +128,7 @@ func (s *UDMVOIPController) Info(c *gin.Context) {
|
||||
defer telnetClient.Close()
|
||||
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("dsp voip:username=%s", username)
|
||||
cmd := fmt.Sprintf("dsp voip:username=%s", query.UserName)
|
||||
data, err := telnet.ConvertToMap(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
@@ -131,9 +141,9 @@ func (s *UDMVOIPController) Info(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 解析返回的数据
|
||||
u := s.udmVOIPService.ParseInfo(neId, data)
|
||||
u := s.udmVOIPService.ParseInfo(neInfo.CoreUID, neInfo.NeUID, data)
|
||||
if u.ID != "" {
|
||||
s.udmVOIPService.Insert(neId, u.UserName)
|
||||
s.udmVOIPService.Insert(neInfo.CoreUID, neInfo.NeUID, u.UserName)
|
||||
c.JSON(200, resp.OkData(u))
|
||||
return
|
||||
}
|
||||
@@ -142,7 +152,7 @@ func (s *UDMVOIPController) Info(c *gin.Context) {
|
||||
|
||||
// UDMVOIP用户新增
|
||||
//
|
||||
// POST /:neId
|
||||
// POST /
|
||||
//
|
||||
// @Tags network_data/udm/voip
|
||||
// @Accept json
|
||||
@@ -153,12 +163,13 @@ func (s *UDMVOIPController) Info(c *gin.Context) {
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM VOIP User Added
|
||||
// @Description UDM VOIP User Added
|
||||
// @Router /neData/udm/voip/{neId} [post]
|
||||
// @Router /neData/udm/voip [post]
|
||||
func (s *UDMVOIPController) Add(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
if neId == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId is empty"))
|
||||
// 传入数量大于0时,为批量新增
|
||||
num := parse.Number(c.Query("num"))
|
||||
if num < 1 {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: num is empty"))
|
||||
return
|
||||
}
|
||||
|
||||
@@ -173,20 +184,38 @@ func (s *UDMVOIPController) Add(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID || neInfo.NeType != "UDM" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.CoreUID, neInfo.NeUID, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
defer telnetClient.Close()
|
||||
|
||||
// 批量新增
|
||||
if num > 1 {
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("baa voip:sub_num=%d,start_username=%s,password=%s", num, body.UserName, body.Password)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmVOIPService.LoadData(neInfo.CoreUID, neInfo.NeUID, body.UserName, num)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
return
|
||||
}
|
||||
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("add voip:username=%s,password=%s", body.UserName, body.Password)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
@@ -197,78 +226,14 @@ func (s *UDMVOIPController) Add(c *gin.Context) {
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmVOIPService.Insert(neId, body.UserName)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
// UDMVOIP用户批量新增
|
||||
//
|
||||
// POST /:neId/:num
|
||||
//
|
||||
// @Tags network_data/udm/voip
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param neId path string true "NE ID" default(001)
|
||||
// @Param value path number true "Number of releases, value includes start username"
|
||||
// @Param data body object true "Request Param"
|
||||
// @Success 200 {object} object "Response Results"
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM VOIP User Batch Add
|
||||
// @Description UDM VOIP User Batch Add
|
||||
// @Router /neData/udm/voip/{neId}/{value} [post]
|
||||
func (s *UDMVOIPController) Adds(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
num := c.Param("num")
|
||||
if neId == "" || num == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId or num is empty"))
|
||||
return
|
||||
}
|
||||
|
||||
var body model.UDMVOIPUser
|
||||
if err := c.ShouldBindBodyWithJSON(&body); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
if body.UserName == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: username is empty"))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
defer telnetClient.Close()
|
||||
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("baa voip:sub_num=%s,start_username=%s,password=%s", num, body.UserName, body.Password)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmVOIPService.LoadData(neId, body.UserName, num)
|
||||
s.udmVOIPService.Insert(neInfo.CoreUID, neInfo.NeUID, body.UserName)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
// UDMVOIP用户删除
|
||||
//
|
||||
// DELETE /:neId/:username
|
||||
// DELETE /
|
||||
//
|
||||
// @Tags network_data/udm/voip
|
||||
// @Accept json
|
||||
@@ -279,38 +244,59 @@ func (s *UDMVOIPController) Adds(c *gin.Context) {
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM VOIP User Deletion
|
||||
// @Description UDM VOIP User Deletion
|
||||
// @Router /neData/udm/voip/{neId}/{value} [delete]
|
||||
// @Router /neData/udm/voip [delete]
|
||||
func (s *UDMVOIPController) Remove(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
username := c.Param("username")
|
||||
if neId == "" || username == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId or username is empty"))
|
||||
var query struct {
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
UserName string `form:"username" binding:"required"` // 用户名
|
||||
Num int64 `form:"num"` // 批量数量
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
// 处理字符转id数组后去重
|
||||
usernameArr := strings.Split(username, ",")
|
||||
uniqueIDs := parse.RemoveDuplicates(usernameArr)
|
||||
if len(uniqueIDs) <= 0 {
|
||||
c.JSON(200, resp.Err(nil))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID || neInfo.NeType != "UDM" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.CoreUID, neInfo.NeUID, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
defer telnetClient.Close()
|
||||
|
||||
if query.Num > 1 {
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("bde voip:start_username=%s,sub_num=%d", query.UserName, query.Num)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmVOIPService.LoadData(neInfo.CoreUID, neInfo.NeUID, query.UserName, query.Num)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
return
|
||||
}
|
||||
|
||||
// 处理字符转id数组后去重
|
||||
imsiArr := strings.Split(query.UserName, ",")
|
||||
uniqueIDs := parse.RemoveDuplicates(imsiArr)
|
||||
if len(uniqueIDs) <= 0 {
|
||||
c.JSON(200, resp.Err(nil))
|
||||
return
|
||||
}
|
||||
resultData := map[string]string{}
|
||||
for _, v := range uniqueIDs {
|
||||
// 发送MML
|
||||
@@ -322,7 +308,7 @@ func (s *UDMVOIPController) Remove(c *gin.Context) {
|
||||
}
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmVOIPService.Delete(v, neId)
|
||||
s.udmVOIPService.Delete(neInfo.CoreUID, neInfo.NeUID, v)
|
||||
}
|
||||
resultData[v] = data
|
||||
}
|
||||
@@ -330,60 +316,6 @@ func (s *UDMVOIPController) Remove(c *gin.Context) {
|
||||
c.JSON(200, resp.OkData(resultData))
|
||||
}
|
||||
|
||||
// UDMVOIP用户批量删除
|
||||
//
|
||||
// DELETE /:neId/:username/:num
|
||||
//
|
||||
// @Tags network_data/udm/voip
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param neId path string true "NE ID" default(001)
|
||||
// @Param username path string true "User Name"
|
||||
// @Param num path number true "Number of releases, value includes start username"
|
||||
// @Success 200 {object} object "Response Results"
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM VOIP User Batch Deletion
|
||||
// @Description UDM VOIP User Batch Deletion
|
||||
// @Router /neData/udm/voip/{neId}/{username}/{num} [delete]
|
||||
func (s *UDMVOIPController) Removes(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
username := c.Param("username")
|
||||
num := c.Param("num")
|
||||
if neId == "" || username == "" || num == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId/username/num is empty"))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
defer telnetClient.Close()
|
||||
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("bde voip:start_username=%s,sub_num=%s", username, num)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmVOIPService.LoadData(neId, username, num)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
// UDMVOIP用户导出
|
||||
//
|
||||
// GET /export
|
||||
@@ -480,7 +412,8 @@ func (s *UDMVOIPController) Export(c *gin.Context) {
|
||||
func (s *UDMVOIPController) Import(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var body struct {
|
||||
NeId string `json:"neId" binding:"required"` // 网元ID
|
||||
CoreUID string `json:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" binding:"required"` // 网元唯一标识
|
||||
UploadPath string `json:"uploadPath" binding:"required"` // 上传文件路径
|
||||
}
|
||||
if err := c.ShouldBindBodyWithJSON(&body); err != nil {
|
||||
@@ -495,15 +428,14 @@ func (s *UDMVOIPController) Import(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", body.NeId)
|
||||
if neInfo.NeId != body.NeId || neInfo.IP == "" {
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID || neInfo.NeType != "UDM" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
// 网元主机的SSH客户端
|
||||
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId)
|
||||
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.CoreUID, neInfo.NeUID)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -527,7 +459,7 @@ func (s *UDMVOIPController) Import(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.NeType, neInfo.NeId, 1)
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.CoreUID, neInfo.NeUID, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -550,11 +482,11 @@ func (s *UDMVOIPController) Import(c *gin.Context) {
|
||||
if strings.Contains(resultMsg, "ok") {
|
||||
if strings.HasSuffix(body.UploadPath, ".csv") {
|
||||
data := file.ReadFileCSV(localFilePath)
|
||||
go s.udmVOIPService.InsertData(neInfo.NeId, "csv", data)
|
||||
go s.udmVOIPService.InsertData(neInfo.CoreUID, neInfo.NeUID, "csv", data)
|
||||
}
|
||||
if strings.HasSuffix(body.UploadPath, ".txt") {
|
||||
data := file.ReadFileTXTLine(",", localFilePath)
|
||||
go s.udmVOIPService.InsertData(neInfo.NeId, "txt", data)
|
||||
go s.udmVOIPService.InsertData(neInfo.CoreUID, neInfo.NeUID, "txt", data)
|
||||
}
|
||||
}
|
||||
c.JSON(200, resp.OkMsg(resultMsg))
|
||||
|
||||
@@ -36,25 +36,30 @@ type UDMVolteIMSController struct {
|
||||
|
||||
// UDMVolteIMS用户重载数据
|
||||
//
|
||||
// PUT /resetData/:neId
|
||||
// PUT /reset
|
||||
//
|
||||
// @Tags network_data/udm/volte-ims
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param neId path string true "NE ID" default(001)
|
||||
// @Param coreUid query string true "CoreUID" default(001)
|
||||
// @Param neUid query string true "NeUID" default(001)
|
||||
// @Success 200 {object} object "Response Results"
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM VolteIMS User Data Refresh
|
||||
// @Description UDM Authenticated User Data List Refresh Synchronization Latest
|
||||
// @Router /neData/udm/volte-ims/resetData/{neId} [put]
|
||||
// @Router /neData/udm/volte-ims/reset [put]
|
||||
func (s *UDMVolteIMSController) ResetData(c *gin.Context) {
|
||||
neId := c.Param("neId")
|
||||
if neId == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId is empty"))
|
||||
var query struct {
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
data := s.udmVolteIMSService.ResetData(neId)
|
||||
data := s.udmVolteIMSService.ResetData(query.CoreUID, query.NeUID)
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
@@ -82,7 +87,7 @@ func (s *UDMVolteIMSController) List(c *gin.Context) {
|
||||
|
||||
// UDMVolteIMS用户信息
|
||||
//
|
||||
// GET /:neId/:imsi
|
||||
// GET /
|
||||
//
|
||||
// @Tags network_data/udm/volte-ims
|
||||
// @Accept json
|
||||
@@ -94,29 +99,29 @@ func (s *UDMVolteIMSController) List(c *gin.Context) {
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM VolteIMS User Information
|
||||
// @Description UDM VolteIMS User Information
|
||||
// @Router /neData/udm/volte-ims/{neId}/{value} [get]
|
||||
// @Router /neData/udm/volte-ims [get]
|
||||
func (s *UDMVolteIMSController) Info(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
imsi := c.Param("imsi")
|
||||
msisdn := c.Query("msisdn")
|
||||
if neId == "" || imsi == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId or imsi is empty"))
|
||||
return
|
||||
var query struct {
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
IMSI string `form:"imsi" binding:"required"` // IMSi
|
||||
MSISDN string `form:"msisdn" binding:"required"` // MSISDN
|
||||
}
|
||||
if msisdn == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: msisdn is required"))
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID || neInfo.NeType != "UDM" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.CoreUID, neInfo.NeUID, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -124,7 +129,7 @@ func (s *UDMVolteIMSController) Info(c *gin.Context) {
|
||||
defer telnetClient.Close()
|
||||
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("dsp imsuser:imsi=%s,msisdn=%s", imsi, msisdn)
|
||||
cmd := fmt.Sprintf("dsp imsuser:imsi=%s,msisdn=%s", query.IMSI, query.MSISDN)
|
||||
data, err := telnet.ConvertToMap(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
@@ -137,9 +142,9 @@ func (s *UDMVolteIMSController) Info(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 解析返回的数据
|
||||
u := s.udmVolteIMSService.ParseInfo(neId, data)
|
||||
u := s.udmVolteIMSService.ParseInfo(neInfo.CoreUID, neInfo.NeUID, data)
|
||||
if u.ID != "" {
|
||||
s.udmVolteIMSService.InsertByIMSI(imsi, neId)
|
||||
s.udmVolteIMSService.InsertByIMSI(neInfo.CoreUID, neInfo.NeUID, query.IMSI)
|
||||
c.JSON(200, resp.OkData(u))
|
||||
return
|
||||
}
|
||||
@@ -148,7 +153,7 @@ func (s *UDMVolteIMSController) Info(c *gin.Context) {
|
||||
|
||||
// UDMVolteIMS用户新增
|
||||
//
|
||||
// POST /:neId
|
||||
// POST /
|
||||
//
|
||||
// @Tags network_data/udm/volte-ims
|
||||
// @Accept json
|
||||
@@ -159,12 +164,13 @@ func (s *UDMVolteIMSController) Info(c *gin.Context) {
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM VolteIMS User Added
|
||||
// @Description UDM VolteIMS User Added If VoIP tag=0, then MSISDN and IMSI need to be the same.
|
||||
// @Router /neData/udm/volte-ims/{neId} [post]
|
||||
// @Router /neData/udm/volte-ims [post]
|
||||
func (s *UDMVolteIMSController) Add(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
if neId == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId is empty"))
|
||||
// 传入数量大于0时,为批量新增
|
||||
num := parse.Number(c.Query("num"))
|
||||
if num < 0 {
|
||||
c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
||||
return
|
||||
}
|
||||
|
||||
@@ -179,22 +185,40 @@ func (s *UDMVolteIMSController) Add(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID || neInfo.NeType != "UDM" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.CoreUID, neInfo.NeUID, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
defer telnetClient.Close()
|
||||
|
||||
// 批量新增
|
||||
if num > 1 {
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("baa imsuser:sub_num=%d,start_imsi=%s,start_msisdn=%s,volte=%s,vni=%s", num, body.IMSI, body.MSISDN, body.Tag, body.VNI)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmVolteIMSService.LoadData(neInfo.CoreUID, neInfo.NeUID, body.IMSI, num)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
return
|
||||
}
|
||||
|
||||
// 检查同IMSI下msisdn是否存在
|
||||
hasMsisdns := s.udmVolteIMSService.Find(model.UDMVolteIMSUser{IMSI: body.IMSI, MSISDN: body.MSISDN, NeId: neId})
|
||||
hasMsisdns := s.udmVolteIMSService.Find(model.UDMVolteIMSUser{IMSI: body.IMSI, MSISDN: body.MSISDN, NeUID: neInfo.NeUID})
|
||||
if len(hasMsisdns) > 0 {
|
||||
c.JSON(200, resp.ErrMsg("IMSI and MSISDN already exist"))
|
||||
return
|
||||
@@ -210,109 +234,51 @@ func (s *UDMVolteIMSController) Add(c *gin.Context) {
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmVolteIMSService.InsertByIMSI(body.IMSI, neId)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
// UDMVolteIMS用户批量新增
|
||||
//
|
||||
// POST /:neId/:num
|
||||
//
|
||||
// @Tags network_data/udm/volte-ims
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param neId path string true "NE ID" default(001)
|
||||
// @Param value path number true "Number of releases, value includes start imsi"
|
||||
// @Param data body object true "Request Param"
|
||||
// @Success 200 {object} object "Response Results"
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM VolteIMS User Batch Add
|
||||
// @Description UDM VolteIMS User Batch Add
|
||||
// @Router /neData/udm/volte-ims/{neId}/{value} [post]
|
||||
func (s *UDMVolteIMSController) Adds(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
num := c.Param("num")
|
||||
if neId == "" || num == "" {
|
||||
c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
||||
return
|
||||
}
|
||||
|
||||
var body model.UDMVolteIMSUser
|
||||
if err := c.ShouldBindBodyWithJSON(&body); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
if body.IMSI == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: imsi is empty"))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
defer telnetClient.Close()
|
||||
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("baa imsuser:sub_num=%s,start_imsi=%s,start_msisdn=%s,volte=%s,vni=%s", num, body.IMSI, body.MSISDN, body.Tag, body.VNI)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmVolteIMSService.LoadData(neId, body.IMSI, num)
|
||||
s.udmVolteIMSService.InsertByIMSI(neInfo.CoreUID, neInfo.NeUID, body.IMSI)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
}
|
||||
|
||||
// UDMVolteIMS用户删除
|
||||
//
|
||||
// DELETE /:neId/:imsi
|
||||
// DELETE /
|
||||
//
|
||||
// @Tags network_data/udm/volte-ims
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param neId path string true "NE ID" default(001)
|
||||
// @Param value path string true "IMSI, multiple separated by a , sign"
|
||||
// @Param coreUid query string true "CoreUID" default(001)
|
||||
// @Param neUid query string true "NeUID" default(001)
|
||||
// @Param imsi query string true "IMSI"
|
||||
// @Param num query number true "Number of releases, value includes start imsi"
|
||||
// @Param msisdn query string false "MSISDN"
|
||||
// @Success 200 {object} object "Response Results"
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM Authenticated User Deletion
|
||||
// @Description UDM Authenticated User Deletion
|
||||
// @Router /neData/udm/volte-ims/{neId}/{value} [delete]
|
||||
// @Summary UDM VolteIMS User Batch Deletion
|
||||
// @Description UDM VolteIMS User Batch Deletion
|
||||
// @Router /neData/udm/volte-ims [delete]
|
||||
func (s *UDMVolteIMSController) Remove(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
imsi := c.Param("imsi")
|
||||
msisdn := c.Query("msisdn")
|
||||
if neId == "" || imsi == "" {
|
||||
c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
||||
var query struct {
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
IMSI string `form:"imsi" binding:"required"` // IMSi, 带数量时为批量
|
||||
MSISDN string `form:"msisdn"` // MSISDN, 精确msisdn删除
|
||||
Num int64 `form:"num"` // 批量数量
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
imsiArr := strings.Split(imsi, ",")
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID || neInfo.NeType != "UDM" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.CoreUID, neInfo.NeUID, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -320,9 +286,9 @@ func (s *UDMVolteIMSController) Remove(c *gin.Context) {
|
||||
defer telnetClient.Close()
|
||||
|
||||
// 精确msisdn删除
|
||||
if msisdn != "" {
|
||||
if query.MSISDN != "" {
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("del imsuser:imsi=%s,msisdn=%s", imsiArr[0], msisdn)
|
||||
cmd := fmt.Sprintf("del imsuser:imsi=%s,msisdn=%s", query.IMSI, query.MSISDN)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
@@ -330,89 +296,53 @@ func (s *UDMVolteIMSController) Remove(c *gin.Context) {
|
||||
}
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmVolteIMSService.Delete(imsi, neId)
|
||||
s.udmVolteIMSService.Delete(neInfo.CoreUID, neInfo.NeUID, query.IMSI)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
return
|
||||
} else {
|
||||
// 处理字符转id数组后去重
|
||||
uniqueIDs := parse.RemoveDuplicates(imsiArr)
|
||||
if len(uniqueIDs) <= 0 {
|
||||
c.JSON(200, resp.Err(nil))
|
||||
}
|
||||
|
||||
// 批量更新
|
||||
if query.Num > 0 {
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("bde imsuser:start_imsi=%s,sub_num=%d", query.IMSI, query.Num)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
resultData := map[string]string{}
|
||||
for _, imsi := range uniqueIDs {
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("del imsuser:imsi=%s", imsi)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
if err != nil {
|
||||
resultData[imsi] = err.Error()
|
||||
continue
|
||||
}
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmVolteIMSService.Delete(imsi, neId)
|
||||
}
|
||||
resultData[imsi] = data
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmVolteIMSService.LoadData(neInfo.CoreUID, neInfo.NeUID, query.IMSI, query.Num)
|
||||
}
|
||||
c.JSON(200, resp.OkData(resultData))
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// UDMVolteIMS用户批量删除
|
||||
//
|
||||
// DELETE /:neId/:imsi/:num
|
||||
//
|
||||
// @Tags network_data/udm/volte-ims
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param neId path string true "NE ID" default(001)
|
||||
// @Param imsi path string true "IMSI"
|
||||
// @Param num path number true "Number of releases, value includes start imsi"
|
||||
// @Success 200 {object} object "Response Results"
|
||||
// @Security TokenAuth
|
||||
// @Summary UDM VolteIMS User Batch Deletion
|
||||
// @Description UDM VolteIMS User Batch Deletion
|
||||
// @Router /neData/udm/volte-ims/{neId}/{imsi}/{num} [delete]
|
||||
func (s *UDMVolteIMSController) Removes(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
neId := c.Param("neId")
|
||||
imsi := c.Param("imsi")
|
||||
num := c.Param("num")
|
||||
if neId == "" || imsi == "" || num == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId/imsi/num is empty"))
|
||||
c.JSON(200, resp.OkData(data))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", neId)
|
||||
if neInfo.NeId != neId || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
// 处理字符转id数组后去重
|
||||
imsiArr := strings.Split(query.IMSI, ",")
|
||||
uniqueIDs := parse.RemoveDuplicates(imsiArr)
|
||||
if len(uniqueIDs) <= 0 {
|
||||
c.JSON(200, resp.Err(nil))
|
||||
return
|
||||
}
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient("UDM", neId, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
resultData := map[string]string{}
|
||||
for _, imsi := range uniqueIDs {
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("del imsuser:imsi=%s", imsi)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
if err != nil {
|
||||
resultData[imsi] = err.Error()
|
||||
continue
|
||||
}
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmVolteIMSService.Delete(neInfo.CoreUID, neInfo.NeUID, imsi)
|
||||
}
|
||||
resultData[imsi] = data
|
||||
}
|
||||
defer telnetClient.Close()
|
||||
|
||||
// 发送MML
|
||||
cmd := fmt.Sprintf("bde imsuser:start_imsi=%s,sub_num=%s", imsi, num)
|
||||
data, err := telnet.ConvertToStr(telnetClient, cmd)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
// 命令ok时
|
||||
if strings.Contains(data, "ok") {
|
||||
s.udmVolteIMSService.LoadData(neId, imsi, num)
|
||||
}
|
||||
c.JSON(200, resp.OkData(data))
|
||||
c.JSON(200, resp.OkData(resultData))
|
||||
}
|
||||
|
||||
// UDMVolteIMS用户导出
|
||||
@@ -422,7 +352,8 @@ func (s *UDMVolteIMSController) Removes(c *gin.Context) {
|
||||
// @Tags network_data/udm/volte-ims
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param neId query string true "NE ID" default(001)
|
||||
// @Param coreUid query string true "CoreUID" default(001)
|
||||
// @Param neUid query string true "NeUID" default(001)
|
||||
// @Param type query string true "File Type" Enums(csv,txt) default(txt)
|
||||
// @Param imsi query string false "IMSI"
|
||||
// @Param pageNum query number true "pageNum" default(1)
|
||||
@@ -434,13 +365,12 @@ func (s *UDMVolteIMSController) Removes(c *gin.Context) {
|
||||
// @Router /neData/udm/volte-ims/export [get]
|
||||
func (s *UDMVolteIMSController) Export(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
// 查询结果,根据查询条件结果,单页最大值限制
|
||||
neId := c.Query("neId")
|
||||
fileType := c.Query("type")
|
||||
if neId == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: neId is empty"))
|
||||
neUid := c.Query("neUid")
|
||||
if c.Query("coreUid") == "" || neUid == "" {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: coreUid or neUid is empty"))
|
||||
return
|
||||
}
|
||||
fileType := c.Query("type")
|
||||
if !(fileType == "csv" || fileType == "txt") {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "ne.udm.errImportUserSubFileFormat")))
|
||||
return
|
||||
@@ -460,7 +390,7 @@ func (s *UDMVolteIMSController) Export(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 文件名
|
||||
fileName := fmt.Sprintf("udm_volte_user_export_%s_%d.%s", neId, time.Now().UnixMilli(), fileType)
|
||||
fileName := fmt.Sprintf("udm_volte_user_export_%s_%d.%s", neUid, time.Now().UnixMilli(), fileType)
|
||||
filePath := filepath.Join(file.ParseUploadFileDir(constants.UPLOAD_EXPORT), fileName)
|
||||
|
||||
if fileType == "csv" {
|
||||
@@ -509,7 +439,8 @@ func (s *UDMVolteIMSController) Export(c *gin.Context) {
|
||||
func (s *UDMVolteIMSController) Import(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var body struct {
|
||||
NeId string `json:"neId" binding:"required"` // 网元ID
|
||||
CoreUID string `json:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" binding:"required"` // 网元唯一标识
|
||||
UploadPath string `json:"uploadPath" binding:"required"` // 上传文件路径
|
||||
}
|
||||
if err := c.ShouldBindBodyWithJSON(&body); err != nil {
|
||||
@@ -524,15 +455,14 @@ func (s *UDMVolteIMSController) Import(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UDM", body.NeId)
|
||||
if neInfo.NeId != body.NeId || neInfo.IP == "" {
|
||||
// 查询网元信息
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID || neInfo.NeType != "UDM" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
// 网元主机的SSH客户端
|
||||
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId)
|
||||
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.CoreUID, neInfo.NeUID)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -556,7 +486,7 @@ func (s *UDMVolteIMSController) Import(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 网元主机的Telnet客户端
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.NeType, neInfo.NeId, 1)
|
||||
telnetClient, err := s.neInfoService.NeRunTelnetClient(neInfo.CoreUID, neInfo.NeUID, 1)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -579,11 +509,11 @@ func (s *UDMVolteIMSController) Import(c *gin.Context) {
|
||||
if strings.Contains(resultMsg, "ok") {
|
||||
if strings.HasSuffix(body.UploadPath, ".csv") {
|
||||
data := file.ReadFileCSV(localFilePath)
|
||||
go s.udmVolteIMSService.InsertData(neInfo.NeId, "csv", data)
|
||||
go s.udmVolteIMSService.InsertData(neInfo.CoreUID, neInfo.NeUID, "csv", data)
|
||||
}
|
||||
if strings.HasSuffix(body.UploadPath, ".txt") {
|
||||
data := file.ReadFileTXTLine(",", localFilePath)
|
||||
go s.udmVolteIMSService.InsertData(neInfo.NeId, "txt", data)
|
||||
go s.udmVolteIMSService.InsertData(neInfo.CoreUID, neInfo.NeUID, "txt", data)
|
||||
}
|
||||
}
|
||||
c.JSON(200, resp.OkMsg(resultMsg))
|
||||
|
||||
@@ -44,22 +44,28 @@ type UPFController struct {
|
||||
func (s UPFController) FlowTotal(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var querys struct {
|
||||
NeID string `form:"neId" binding:"required"`
|
||||
Day int `form:"day"`
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
Day int `form:"day"`
|
||||
}
|
||||
if err := c.ShouldBindQuery(&querys); querys.Day < 0 || err != nil {
|
||||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
if querys.Day < 0 || querys.Day > 30 {
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "day must be between 0 and 30"))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID("UPF", querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(querys.CoreUID, querys.NeUID)
|
||||
if neInfo.CoreUID != querys.CoreUID || neInfo.NeUID != querys.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
up, down := s.kpiReportService.UPFTodayFlowFind(neInfo.RmUID, querys.Day)
|
||||
up, down := s.kpiReportService.UPFTodayFlowFind(neInfo.NeUID, querys.Day)
|
||||
c.JSON(200, resp.OkData(map[string]int64{"up": up, "down": down}))
|
||||
}
|
||||
|
||||
@@ -3,11 +3,9 @@ package model
|
||||
// Alarm 告警记录
|
||||
type Alarm struct {
|
||||
ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
NeId string `json:"neId" gorm:"column:ne_id"` // 网元ID
|
||||
NeName string `json:"neName" gorm:"column:ne_name"` // 网元名称
|
||||
Province string `json:"province" gorm:"column:province"` // 网元省份地域
|
||||
PvFlag string `json:"pvFlag" gorm:"column:pv_flag"` // 网元标识虚拟化标识
|
||||
AlarmSeq int64 `json:"alarmSeq" gorm:"column:alarm_seq"` // 告警序号 同网元类型连续递增
|
||||
AlarmId string `json:"alarmId" gorm:"column:alarm_id"` // 告警ID
|
||||
AlarmTitle string `json:"alarmTitle" gorm:"column:alarm_title"` // 告警标题
|
||||
@@ -40,10 +38,9 @@ func (*Alarm) TableName() string {
|
||||
|
||||
// AlarmQuery 告警数据查询参数结构体
|
||||
type AlarmQuery struct {
|
||||
NeType string `json:"neType" form:"neType"` // 网元类型
|
||||
NeID string `json:"neId" form:"neId"` // 网元ID
|
||||
NeName string `json:"neName" form:"neName"`
|
||||
PvFlag string `json:"pvFlag" form:"pvFlag"`
|
||||
CoreUID string `json:"coreUid" form:"coreUid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" form:"neUid"` // 网元唯一标识
|
||||
NeType string `json:"neType" form:"neType"` // 网元类型
|
||||
AlarmCode string `json:"alarmCode" form:"alarmCode"`
|
||||
AlarmType string `json:"alarmType" form:"alarmType"`
|
||||
AlarmStatus string `json:"alarmStatus" form:"alarmStatus" binding:"omitempty,oneof=0 1"` // 告警状态 0:clear, 1:active
|
||||
|
||||
@@ -3,8 +3,9 @@ package model
|
||||
// AlarmEvent 告警_事件记录表
|
||||
type AlarmEvent struct {
|
||||
ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
NeId string `json:"neId" gorm:"column:ne_id"` // 网元ID
|
||||
AlarmSeq int64 `json:"alarmSeq" gorm:"column:alarm_seq"` // 告警序号 同网元类型连续递增
|
||||
AlarmId string `json:"alarmId" gorm:"column:alarm_id"` // 告警ID
|
||||
AlarmTitle string `json:"alarmTitle" gorm:"column:alarm_title"` // 告警标题
|
||||
@@ -31,8 +32,9 @@ func (*AlarmEvent) TableName() string {
|
||||
|
||||
// AlarmEventQuery 告警事件数据查询参数结构体
|
||||
type AlarmEventQuery struct {
|
||||
CoreUID string `json:"coreId" form:"coreId"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" form:"neUid"` // 网元唯一标识
|
||||
NeType string `json:"neType" form:"neType"` // 网元类型
|
||||
NeID string `json:"neId" form:"neId"` // 网元ID
|
||||
AlarmCode string `json:"alarmCode" form:"alarmCode"`
|
||||
AlarmStatus string `json:"alarmStatus" form:"alarmStatus" binding:"omitempty,oneof=0 1"` // 告警状态 0:clear, 1:active
|
||||
BeginTime int64 `json:"beginTime" form:"beginTime"` // 开始时间 查event_time
|
||||
|
||||
@@ -3,8 +3,9 @@ package model
|
||||
// AlarmForwardLog 告警_转发日志记录
|
||||
type AlarmForwardLog struct {
|
||||
ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
NeType string `json:"neType" gorm:"column:ne_type"`
|
||||
NeId string `json:"neId" gorm:"column:ne_id"`
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
AlarmSeq int64 `json:"alarmSeq" gorm:"column:alarm_seq"` // 告警序号 同网元类型连续递增
|
||||
AlarmId string `json:"alarmId" gorm:"column:alarm_id"` // 告警ID
|
||||
AlarmCode int64 `json:"alarmCode" gorm:"column:alarm_code"` // 告警状态码
|
||||
@@ -26,8 +27,9 @@ func (*AlarmForwardLog) TableName() string {
|
||||
|
||||
// AlarmForwardLogQuery 告警转发日志数据查询参数结构体
|
||||
type AlarmForwardLogQuery struct {
|
||||
CoreUID string `json:"coreUid" form:"coreUid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" form:"neUid"` // 网元唯一标识
|
||||
NeType string `json:"neType" form:"neType"` // 网元类型
|
||||
NeID string `json:"neId" form:"neId"` // 网元ID
|
||||
BeginTime int64 `json:"beginTime" form:"beginTime"` // 开始时间 查event_time
|
||||
EndTime int64 `json:"endTime" form:"endTime"`
|
||||
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=event_time id"` // 排序字段,填写结果字段
|
||||
|
||||
@@ -3,8 +3,9 @@ package model
|
||||
// AlarmLog 告警_日志记录
|
||||
type AlarmLog struct {
|
||||
ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
NeType string `json:"neType" gorm:"column:ne_type"`
|
||||
NeId string `json:"neId" gorm:"column:ne_id"`
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
AlarmSeq int64 `json:"alarmSeq" gorm:"column:alarm_seq"` // 告警序号 同网元类型连续递增
|
||||
AlarmId string `json:"alarmId" gorm:"column:alarm_id"` // 告警ID
|
||||
AlarmCode int64 `json:"alarmCode" gorm:"column:alarm_code"` // 告警状态码
|
||||
@@ -23,8 +24,9 @@ func (*AlarmLog) TableName() string {
|
||||
|
||||
// AlarmLogQuery 告警日志数据查询参数结构体
|
||||
type AlarmLogQuery struct {
|
||||
CoreUID string `json:"coreUid" form:"coreUid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" form:"neUid"` // 网元唯一标识
|
||||
NeType string `json:"neType" form:"neType"` // 网元类型
|
||||
NeID string `json:"neId" form:"neId"` // 网元ID
|
||||
AlarmStatus string `json:"alarmStatus" form:"alarmStatus" binding:"omitempty,oneof=0 1"` // 告警状态 0:clear, 1:active
|
||||
OrigSeverity string `json:"origSeverity" form:"origSeverity"` // 告警类型 1: Critical, 2: Major, 3: Minor, 4: Warning, 5: Event(Only VNF)
|
||||
BeginTime int64 `json:"beginTime" form:"beginTime"` // 开始时间 查event_time
|
||||
|
||||
@@ -3,9 +3,9 @@ package model
|
||||
// CDREventIMS CDR会话对象IMS cdr_event_ims
|
||||
type CDREventIMS struct {
|
||||
ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
NeType string `json:"neType" gorm:"column:ne_type"`
|
||||
NeName string `json:"neName" gorm:"column:ne_name"`
|
||||
RmUid string `json:"rmUid" gorm:"column:rm_uid"`
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
Timestamp int64 `json:"timestamp" gorm:"column:timestamp"` // 接收到的timestamp秒级存储毫秒时间戳
|
||||
CdrJson string `json:"cdrJSON" gorm:"column:cdr_json"` // data JSON String
|
||||
CreatedAt int64 `json:"createdAt" gorm:"column:created_at"` // 记录创建存储毫秒
|
||||
@@ -18,13 +18,13 @@ func (*CDREventIMS) TableName() string {
|
||||
|
||||
// CDREventIMSQuery CDR会话对象IMS查询参数结构体
|
||||
type CDREventIMSQuery struct {
|
||||
CoreUID string `json:"coreUid" form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" form:"neUid" binding:"required"` // 网元唯一标识
|
||||
NeType string `json:"neType" form:"neType" binding:"required,oneof=IMS"` // 网元类型IMS
|
||||
NeID string `json:"neId" form:"neId" binding:"required"`
|
||||
RmUID string `json:"rmUID" form:"rmUID"`
|
||||
RecordType string `json:"recordType" form:"recordType"` // 记录行为 MOC MTC
|
||||
CallerParty string `json:"callerParty" form:"callerParty"` // 主叫号码
|
||||
CalledParty string `json:"calledParty" form:"calledParty"` // 被叫号码
|
||||
BeginTime int64 `json:"beginTime" form:"beginTime"` // 开始时间 查timestamp
|
||||
RecordType string `json:"recordType" form:"recordType"` // 记录行为 MOC MTC
|
||||
CallerParty string `json:"callerParty" form:"callerParty"` // 主叫号码
|
||||
CalledParty string `json:"calledParty" form:"calledParty"` // 被叫号码
|
||||
BeginTime int64 `json:"beginTime" form:"beginTime"` // 开始时间 查timestamp
|
||||
EndTime int64 `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
|
||||
|
||||
@@ -3,9 +3,9 @@ package model
|
||||
// CDREventSGWC CDR会话对象SGWC cdr_event_sgwc
|
||||
type CDREventSGWC struct {
|
||||
ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
NeType string `json:"neType" gorm:"column:ne_type"`
|
||||
NeName string `json:"neName" gorm:"column:ne_name"`
|
||||
RmUid string `json:"rmUid" gorm:"column:rm_uid"`
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
Timestamp int64 `json:"timestamp" gorm:"column:timestamp"` // 接收到的timestamp秒级存储毫秒时间戳
|
||||
CdrJson string `json:"cdrJSON" gorm:"column:cdr_json"` // data JSON String
|
||||
CreatedAt int64 `json:"createdAt" gorm:"column:created_at"` // 记录创建存储毫秒
|
||||
@@ -18,9 +18,9 @@ func (*CDREventSGWC) TableName() string {
|
||||
|
||||
// CDREventSGWCQuery CDR会话对象SGWC查询参数结构体
|
||||
type CDREventSGWCQuery struct {
|
||||
CoreUID string `json:"coreUid" form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" form:"neUid" binding:"required"` // 网元唯一标识
|
||||
NeType string `json:"neType" form:"neType" binding:"required,oneof=SGWC"` // SGWC
|
||||
NeID string `json:"neId" form:"neId" binding:"required"`
|
||||
RmUID string `json:"rmUID" form:"rmUID"`
|
||||
IMSI string `json:"imsi" form:"imsi"`
|
||||
MSISDN string `json:"msisdn" form:"msisdn"`
|
||||
BeginTime int64 `json:"beginTime" form:"beginTime"` // 开始时间 查timestamp
|
||||
|
||||
@@ -3,9 +3,9 @@ package model
|
||||
// CDREventSMF CDR会话对象SMF cdr_event_smf
|
||||
type CDREventSMF struct {
|
||||
ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
NeType string `json:"neType" gorm:"column:ne_type"`
|
||||
NeName string `json:"neName" gorm:"column:ne_name"`
|
||||
RmUid string `json:"rmUid" gorm:"column:rm_uid"`
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
Timestamp int64 `json:"timestamp" gorm:"column:timestamp"` // 接收到的timestamp秒级存储毫秒时间戳
|
||||
CdrJson string `json:"cdrJSON" gorm:"column:cdr_json"` // data JSON String
|
||||
CreatedAt int64 `json:"createdAt" gorm:"column:created_at"` // 记录创建存储毫秒
|
||||
@@ -18,10 +18,10 @@ func (*CDREventSMF) TableName() string {
|
||||
|
||||
// CDREventSMFQuery CDR会话对象SMF查询参数结构体
|
||||
type CDREventSMFQuery struct {
|
||||
CoreUID string `json:"coreUid" form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" form:"neUid" binding:"required"` // 网元唯一标识
|
||||
NeType string `json:"neType" form:"neType" binding:"required,oneof=SMF"` // 网元类型, 暂时支持SMF
|
||||
NeID string `json:"neId" form:"neId" binding:"required"`
|
||||
RmUID string `json:"rmUID" form:"rmUID"`
|
||||
RecordType string `json:"recordType" form:"recordType"` // 暂时没用到
|
||||
RecordType string `json:"recordType" form:"recordType"` // 暂时没用到
|
||||
SubscriberID string `json:"subscriberID" form:"subscriberID"`
|
||||
DNN string `json:"dnn" form:"dnn"`
|
||||
BeginTime int64 `json:"beginTime" form:"beginTime"` // 开始时间 查timestamp
|
||||
|
||||
@@ -3,9 +3,9 @@ package model
|
||||
// CDREventSMSC CDR会话对象SMSC cdr_event_smsc
|
||||
type CDREventSMSC struct {
|
||||
ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
NeType string `json:"neType" gorm:"column:ne_type"`
|
||||
NeName string `json:"neName" gorm:"column:ne_name"`
|
||||
RmUid string `json:"rmUid" gorm:"column:rm_uid"` // 可能没有
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
Timestamp int64 `json:"timestamp" gorm:"column:timestamp"` // 接收到的timestamp秒级存储毫秒时间戳
|
||||
CdrJson string `json:"cdrJSON" gorm:"column:cdr_json"` // data JSON String
|
||||
CreatedAt int64 `json:"createdAt" gorm:"column:created_at"` // 记录创建存储毫秒
|
||||
@@ -18,13 +18,13 @@ func (*CDREventSMSC) TableName() string {
|
||||
|
||||
// CDREventSMSCQuery CDR会话对象SMSC查询参数结构体
|
||||
type CDREventSMSCQuery struct {
|
||||
CoreUID string `json:"coreUid" form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" form:"neUid" binding:"required"` // 网元唯一标识
|
||||
NeType string `json:"neType" form:"neType" binding:"required,oneof=SMSC"` // 网元类型, 暂时支持SMSC
|
||||
NeID string `json:"neId" form:"neId" binding:"required"`
|
||||
RmUID string `json:"rmUID" form:"rmUID"`
|
||||
RecordType string `json:"recordType" form:"recordType"` // 记录行为 MOSM MTSM
|
||||
CallerParty string `json:"callerParty" form:"callerParty"` // 主叫号码
|
||||
CalledParty string `json:"calledParty" form:"calledParty"` // 被叫号码
|
||||
BeginTime int64 `json:"beginTime" form:"beginTime"` // 开始时间 查timestamp
|
||||
RecordType string `json:"recordType" form:"recordType"` // 记录行为 MOSM MTSM
|
||||
CallerParty string `json:"callerParty" form:"callerParty"` // 主叫号码
|
||||
CalledParty string `json:"calledParty" form:"calledParty"` // 被叫号码
|
||||
BeginTime int64 `json:"beginTime" form:"beginTime"` // 开始时间 查timestamp
|
||||
EndTime int64 `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
|
||||
|
||||
@@ -22,9 +22,9 @@ func (*KpiCTitle) TableName() string {
|
||||
// KpiCReport 自定义指标报表信息对象
|
||||
type KpiCReport struct {
|
||||
ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
NeType string `json:"neType" gorm:"column:ne_type"`
|
||||
NeName string `json:"neName" gorm:"column:ne_name"`
|
||||
RmUid string `json:"rmUid" gorm:"column:rm_uid"`
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
Date string `json:"date" gorm:"column:date"` // Date of the report yyyy-mm-dd hh:mi:ss
|
||||
StartTime string `json:"startTime" gorm:"column:start_time"` // Start time of the report hh:mi:ss
|
||||
EndTime string `json:"endTime" gorm:"column:end_time"` // End time of the report hh:mi:ss
|
||||
@@ -41,8 +41,8 @@ func (*KpiCReport) TableName() string {
|
||||
|
||||
// KPICQuery 指标查询参数结构体
|
||||
type KPICQuery struct {
|
||||
NeType string `form:"neType" binding:"required"`
|
||||
NeID string `form:"neId" binding:"required"`
|
||||
CoreUID string `form:"coreUid" binding:"required"`
|
||||
NeUID string `form:"neUid" binding:"required"`
|
||||
BeginTime int64 `form:"beginTime" binding:"required"` // 开始时间戳(毫秒)1739361200999
|
||||
EndTime int64 `form:"endTime" binding:"required"` // 结束时间戳(毫秒)1739361210088
|
||||
Interval int64 `form:"interval" binding:"required,oneof=5 60 300 900 1800 3600"`
|
||||
|
||||
@@ -18,9 +18,9 @@ func (*KpiTitle) TableName() string {
|
||||
// KpiReport 指标报表信息对象
|
||||
type KpiReport struct {
|
||||
ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
NeType string `json:"neType" gorm:"column:ne_type"`
|
||||
NeName string `json:"neName" gorm:"column:ne_name"`
|
||||
RmUid string `json:"rmUid" gorm:"column:rm_uid"`
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
Date string `json:"date" gorm:"column:date"` // Date of the report yyyy-mm-dd hh:mi:ss
|
||||
StartTime string `json:"startTime" gorm:"column:start_time"` // Start time of the report hh:mi:ss
|
||||
EndTime string `json:"endTime" gorm:"column:end_time"` // End time of the report hh:mi:ss
|
||||
@@ -37,12 +37,12 @@ func (*KpiReport) TableName() string {
|
||||
|
||||
// KPIQuery 指标查询参数结构体
|
||||
type KPIQuery struct {
|
||||
NeType string `form:"neType" binding:"required"`
|
||||
NeID string `form:"neId" binding:"required"`
|
||||
BeginTime int64 `form:"beginTime" binding:"required"` // 开始时间戳(毫秒)1739361200999
|
||||
EndTime int64 `form:"endTime" binding:"required"` // 结束时间戳(毫秒)1739361210088
|
||||
CoreUID string `json:"coreUid" form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" form:"neUid" binding:"required"` // 网元唯一标识
|
||||
NeType string `json:"neType" form:"neType"` // 网元类型
|
||||
BeginTime int64 `form:"beginTime" binding:"required"` // 开始时间戳(毫秒)1739361200999
|
||||
EndTime int64 `form:"endTime" binding:"required"` // 结束时间戳(毫秒)1739361210088
|
||||
Interval int64 `form:"interval" binding:"required,oneof=5 60 300 900 1800 3600"`
|
||||
RmUID string `form:"rmUID"`
|
||||
SortField string `form:"sortField" binding:"omitempty,oneof=timeGroup"`
|
||||
SortOrder string `form:"sortOrder" binding:"omitempty,oneof=asc desc"`
|
||||
}
|
||||
|
||||
@@ -3,9 +3,9 @@ package model
|
||||
// NBState 基站状态记录表 nb_state
|
||||
type NBState struct {
|
||||
ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型 AMF MME
|
||||
NeId string `json:"neId" gorm:"column:ne_id"` // 网元ID
|
||||
RmUid string `json:"rmUid" gorm:"column:rm_uid"` // 资源唯一标识
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
CreateTime int64 `json:"createTime" gorm:"column:create_time"` // 创建时间
|
||||
Address string `json:"address" gorm:"column:address"` // 基站IP地址
|
||||
NbName string `json:"nbName" gorm:"column:nb_name"` // 基站设备名称
|
||||
@@ -22,8 +22,9 @@ func (*NBState) TableName() string {
|
||||
|
||||
// NBStateQuery 查询参数结构体
|
||||
type NBStateQuery struct {
|
||||
NeType string `json:"neType" form:"neType" binding:"required"`
|
||||
NeID string `json:"neId" form:"neId" binding:"required"`
|
||||
CoreUID string `json:"coreUid" form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" form:"neUid" binding:"required"` // 网元唯一标识
|
||||
NeType string `json:"neType" form:"neType"` // 网元类型
|
||||
PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"`
|
||||
PageSize int64 `json:"pageSize" form:"pageSize" binding:"required"`
|
||||
Status string `json:"status" form:"status"`
|
||||
@@ -31,5 +32,4 @@ type NBStateQuery struct {
|
||||
EndTime string `json:"endTime" form:"endTime"`
|
||||
SortField string `json:"sortField" form:"sortField" binding:"omitempty,oneof=id create_time"` // 排序字段,填写结果字段
|
||||
SortOrder string `json:"sortOrder" form:"sortOrder" binding:"omitempty,oneof=asc desc"` // 排序升降序,asc desc
|
||||
RmUID string `json:"rmUID" form:"rmUID"`
|
||||
}
|
||||
|
||||
@@ -3,8 +3,9 @@ package model
|
||||
// NEState 网元状态记录表 ne_state
|
||||
type NEState struct {
|
||||
ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
NeType string `json:"neType" gorm:"column:ne_type"`
|
||||
NeId string `json:"neId" gorm:"column:ne_id"`
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
Version string `json:"version" gorm:"column:version"` // 版本
|
||||
Capability int64 `json:"capability" gorm:"column:capability"` // 用户容量
|
||||
SerialNum string `json:"serialNum" gorm:"column:serial_num"` // 序列号
|
||||
@@ -24,8 +25,9 @@ func (*NEState) TableName() string {
|
||||
|
||||
// NEStateQuery 查询参数结构体
|
||||
type NEStateQuery struct {
|
||||
NeType string `json:"neType" form:"neType" binding:"required"`
|
||||
NeID string `json:"neId" form:"neId" binding:"required"`
|
||||
CoreUID string `json:"coreUid" form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" form:"neUid" binding:"required"` // 网元唯一标识
|
||||
NeType string `json:"neType" form:"neType"` // 网元类型
|
||||
PageNum int64 `json:"pageNum" form:"pageNum" binding:"required"`
|
||||
PageSize int64 `json:"pageSize" form:"pageSize" binding:"required"`
|
||||
BeginTime string `json:"beginTime" form:"beginTime"`
|
||||
|
||||
@@ -3,8 +3,10 @@ package model
|
||||
// UDMAuthUser UDM鉴权用户 udm_auth
|
||||
type UDMAuthUser struct {
|
||||
ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 默认ID
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
IMSI string `json:"imsi" gorm:"column:imsi"` // SIM卡/USIM卡ID
|
||||
NeId string `json:"neId" gorm:"column:ne_id"` // UDM网元标识
|
||||
Amf string `json:"amf" gorm:"column:amf"` // AMF
|
||||
Ki string `json:"ki" gorm:"column:ki"` // ki
|
||||
AlgoIndex string `json:"algoIndex" gorm:"column:algo_index"` // algoIndex
|
||||
|
||||
@@ -2,11 +2,13 @@ package model
|
||||
|
||||
// UDMExtend UDM用户IMSI扩展信息 udm_extend
|
||||
type UDMExtend struct {
|
||||
ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 默认ID
|
||||
IMSI string `json:"imsi" gorm:"column:imsi"` // SIM卡/USIM卡ID
|
||||
MSISDN string `json:"msisdn" gorm:"column:msisdn"` // 用户电话号码
|
||||
NeId string `json:"neId" gorm:"column:ne_id"` // UDM网元标识-子系统
|
||||
Remark string `json:"remark" gorm:"column:remark"` // 备注
|
||||
ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 默认ID
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
IMSI string `json:"imsi" gorm:"column:imsi"` // SIM卡/USIM卡ID
|
||||
MSISDN string `json:"msisdn" gorm:"column:msisdn"` // 用户电话号码
|
||||
Remark string `json:"remark" gorm:"column:remark"` // 备注
|
||||
}
|
||||
|
||||
// TableName 表名称
|
||||
|
||||
@@ -2,10 +2,12 @@ package model
|
||||
|
||||
// UDMSubUser UDM签约用户 udm_sub
|
||||
type UDMSubUser struct {
|
||||
ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 主键
|
||||
IMSI string `json:"imsi" gorm:"column:imsi"` // SIM卡/USIM卡ID
|
||||
MSISDN string `json:"msisdn" gorm:"column:msisdn"` // 用户电话号码
|
||||
NeId string `json:"neId" gorm:"column:ne_id"` // UDM网元标识
|
||||
ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 主键
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
IMSI string `json:"imsi" gorm:"column:imsi"` // SIM卡/USIM卡ID
|
||||
MSISDN string `json:"msisdn" gorm:"column:msisdn"` // 用户电话号码
|
||||
|
||||
AmDat string `json:"amDat" gorm:"column:am_dat"` // AmData
|
||||
UeAmbrTpl string `json:"ambr" gorm:"column:ambr"` // AmData SubUeAMBRTemp
|
||||
|
||||
@@ -2,8 +2,10 @@ package model
|
||||
|
||||
// UDMVOIPUser UDMVOIP用户 udm_voip
|
||||
type UDMVOIPUser struct {
|
||||
ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 主键
|
||||
NeId string `json:"neId" gorm:"column:ne_id"` // UDM网元标识
|
||||
ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 主键
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
|
||||
UserName string `json:"username" gorm:"column:username"` // 用户名
|
||||
Password string `json:"password" gorm:"column:password"` // 密码
|
||||
|
||||
@@ -2,10 +2,12 @@ package model
|
||||
|
||||
// UDMVolteIMSUser UDMVolteIMS用户 udm_volte_ims
|
||||
type UDMVolteIMSUser struct {
|
||||
ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 主键
|
||||
IMSI string `json:"imsi" gorm:"column:imsi"` // SIM卡/USIM卡ID
|
||||
MSISDN string `json:"msisdn" gorm:"column:msisdn"` // 用户电话号码
|
||||
NeId string `json:"neId" gorm:"column:ne_id"` // UDM网元标识
|
||||
ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 主键
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
IMSI string `json:"imsi" gorm:"column:imsi"` // SIM卡/USIM卡ID
|
||||
MSISDN string `json:"msisdn" gorm:"column:msisdn"` // 用户电话号码
|
||||
|
||||
Tag string `json:"tag" gorm:"column:tag"` // 0=VoIP, 1=VoLTE
|
||||
VNI string `json:"vni" gorm:"column:vni"` // VNI
|
||||
|
||||
@@ -3,9 +3,9 @@ package model
|
||||
// UEEventAMF UE会话对象AMF ue_event_amf
|
||||
type UEEventAMF struct {
|
||||
ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
NeType string `json:"neType" gorm:"column:ne_type"`
|
||||
NeName string `json:"neName" gorm:"column:ne_name"`
|
||||
RmUID string `json:"rmUID" gorm:"column:rm_uid"` // 可能没有
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
Timestamp int64 `json:"timestamp" gorm:"column:timestamp"` // 接收到的timestamp秒级存储毫秒时间戳
|
||||
EventType string `json:"eventType" gorm:"column:event_type"` // 事件类型 auth-result detach cm-state
|
||||
EventJSONStr string `json:"eventJSON" gorm:"column:event_json"` // data JSON String
|
||||
@@ -19,12 +19,12 @@ func (*UEEventAMF) TableName() string {
|
||||
|
||||
// UEEventAMFQuery UE会话对象AMF查询参数结构体
|
||||
type UEEventAMFQuery struct {
|
||||
NeType string `json:"neType" form:"neType" binding:"required,oneof=AMF"` // 网元类型, 暂时支持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
|
||||
BeginTime int64 `json:"beginTime" form:"beginTime"` // 开始时间 查timestamp
|
||||
CoreUID string `json:"coreUid" form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" form:"neUid" binding:"required"` // 网元唯一标识
|
||||
NeType string `json:"neType" form:"neType"` // 网元类型
|
||||
EventType string `json:"eventType" form:"eventType"` // 事件类型 auth-result detach cm-state
|
||||
IMSI string `json:"imsi" form:"imsi"` // imsi
|
||||
BeginTime int64 `json:"beginTime" form:"beginTime"` // 开始时间 查timestamp
|
||||
EndTime int64 `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
|
||||
|
||||
@@ -3,9 +3,9 @@ package model
|
||||
// UEEventMME UE会话对象MME ue_event_mme
|
||||
type UEEventMME struct {
|
||||
ID string `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
NeType string `json:"neType" gorm:"column:ne_type"`
|
||||
NeName string `json:"neName" gorm:"column:ne_name"`
|
||||
RmUID string `json:"rmUID" gorm:"column:rm_uid"` // 可能没有
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
Timestamp int64 `json:"timestamp" gorm:"column:timestamp"` // 接收到的timestamp秒级存储毫秒时间戳
|
||||
EventType string `json:"eventType" gorm:"column:event_type"` // 事件类型 auth-result detach cm-state
|
||||
EventJSONStr string `json:"eventJSON" gorm:"column:event_json"` // data JSON String
|
||||
@@ -19,12 +19,12 @@ func (*UEEventMME) TableName() string {
|
||||
|
||||
// UEEventMMEQuery UE会话对象MME查询参数结构体
|
||||
type UEEventMMEQuery struct {
|
||||
NeType string `json:"neType" form:"neType" binding:"required,oneof=MME"` // 网元类型, 暂时支持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
|
||||
BeginTime int64 `json:"beginTime" form:"beginTime"` // 开始时间 查timestamp
|
||||
CoreUID string `json:"coreUid" form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" form:"neUid" binding:"required"` // 网元唯一标识
|
||||
NeType string `json:"neType" form:"neType"` // 网元类型
|
||||
EventType string `json:"eventType" form:"eventType"` // 事件类型 auth-result detach cm-state
|
||||
IMSI string `json:"imsi" form:"imsi"` // imsi
|
||||
BeginTime int64 `json:"beginTime" form:"beginTime"` // 开始时间 查timestamp
|
||||
EndTime int64 `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
|
||||
|
||||
@@ -18,7 +18,7 @@ func Setup(router *gin.Engine) {
|
||||
// 启动时需要的初始参数
|
||||
InitLoad()
|
||||
|
||||
neDataGroup := router.Group("/neData")
|
||||
neDataGroup := router.Group("/ne/data")
|
||||
|
||||
// 性能统计信息
|
||||
kpiGroup := neDataGroup.Group("/kpi")
|
||||
@@ -237,7 +237,7 @@ func Setup(router *gin.Engine) {
|
||||
// 网元UDM 鉴权用户信息
|
||||
udmAuthGroup := neDataGroup.Group("/udm/auth")
|
||||
{
|
||||
udmAuthGroup.PUT("/resetData/:neId",
|
||||
udmAuthGroup.PUT("/reset",
|
||||
repeat.RepeatSubmit(5),
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_CLEAN)),
|
||||
@@ -247,35 +247,25 @@ func Setup(router *gin.Engine) {
|
||||
middleware.AuthorizeUser(nil),
|
||||
controller.NewUDMAuth.List,
|
||||
)
|
||||
udmAuthGroup.GET("/:neId/:imsi",
|
||||
udmAuthGroup.GET("",
|
||||
middleware.AuthorizeUser(nil),
|
||||
controller.NewUDMAuth.Info,
|
||||
)
|
||||
udmAuthGroup.POST("/:neId",
|
||||
udmAuthGroup.POST("",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_INSERT)),
|
||||
controller.NewUDMAuth.Add,
|
||||
)
|
||||
udmAuthGroup.POST("/:neId/:num",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_INSERT)),
|
||||
controller.NewUDMAuth.Adds,
|
||||
)
|
||||
udmAuthGroup.PUT("/:neId",
|
||||
udmAuthGroup.PUT("",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_UPDATE)),
|
||||
controller.NewUDMAuth.Edit,
|
||||
)
|
||||
udmAuthGroup.DELETE("/:neId/:imsi",
|
||||
udmAuthGroup.DELETE("",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_DELETE)),
|
||||
controller.NewUDMAuth.Remove,
|
||||
)
|
||||
udmAuthGroup.DELETE("/:neId/:imsi/:num",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_DELETE)),
|
||||
controller.NewUDMAuth.Removes,
|
||||
)
|
||||
udmAuthGroup.GET("/export",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmAuth", collectlogs.BUSINESS_TYPE_EXPORT)),
|
||||
@@ -301,35 +291,25 @@ func Setup(router *gin.Engine) {
|
||||
middleware.AuthorizeUser(nil),
|
||||
controller.NewUDMSub.List,
|
||||
)
|
||||
udmSubGroup.GET("/:neId/:imsi",
|
||||
udmSubGroup.GET("",
|
||||
middleware.AuthorizeUser(nil),
|
||||
controller.NewUDMSub.Info,
|
||||
)
|
||||
udmSubGroup.POST("/:neId",
|
||||
udmSubGroup.POST("",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_INSERT)),
|
||||
controller.NewUDMSub.Add,
|
||||
)
|
||||
udmSubGroup.POST("/:neId/:num",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_INSERT)),
|
||||
controller.NewUDMSub.Adds,
|
||||
)
|
||||
udmSubGroup.PUT("/:neId",
|
||||
udmSubGroup.PUT("",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_UPDATE)),
|
||||
controller.NewUDMSub.Edit,
|
||||
)
|
||||
udmSubGroup.DELETE("/:neId/:imsi",
|
||||
udmSubGroup.DELETE("",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_DELETE)),
|
||||
controller.NewUDMSub.Remove,
|
||||
)
|
||||
udmSubGroup.DELETE("/:neId/:imsi/:num",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_DELETE)),
|
||||
controller.NewUDMSub.Removes,
|
||||
)
|
||||
udmSubGroup.GET("/export",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmSub", collectlogs.BUSINESS_TYPE_EXPORT)),
|
||||
@@ -345,7 +325,7 @@ func Setup(router *gin.Engine) {
|
||||
// 网元UDM VOIP用户信息
|
||||
udmVOIPGroup := neDataGroup.Group("/udm/voip")
|
||||
{
|
||||
udmVOIPGroup.PUT("/resetData/:neId",
|
||||
udmVOIPGroup.PUT("/reset",
|
||||
repeat.RepeatSubmit(5),
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVOIP", collectlogs.BUSINESS_TYPE_CLEAN)),
|
||||
@@ -355,30 +335,20 @@ func Setup(router *gin.Engine) {
|
||||
middleware.AuthorizeUser(nil),
|
||||
controller.NewUDMVOIP.List,
|
||||
)
|
||||
udmVOIPGroup.GET("/:neId/:username",
|
||||
udmVOIPGroup.GET("",
|
||||
middleware.AuthorizeUser(nil),
|
||||
controller.NewUDMVOIP.Info,
|
||||
)
|
||||
udmVOIPGroup.POST("/:neId",
|
||||
udmVOIPGroup.POST("",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVOIP", collectlogs.BUSINESS_TYPE_INSERT)),
|
||||
controller.NewUDMVOIP.Add,
|
||||
)
|
||||
udmVOIPGroup.POST("/:neId/:num",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVOIP", collectlogs.BUSINESS_TYPE_INSERT)),
|
||||
controller.NewUDMVOIP.Adds,
|
||||
)
|
||||
udmVOIPGroup.DELETE("/:neId/:username",
|
||||
udmVOIPGroup.DELETE("",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVOIP", collectlogs.BUSINESS_TYPE_DELETE)),
|
||||
controller.NewUDMVOIP.Remove,
|
||||
)
|
||||
udmVOIPGroup.DELETE("/:neId/:username/:num",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVOIP", collectlogs.BUSINESS_TYPE_DELETE)),
|
||||
controller.NewUDMVOIP.Removes,
|
||||
)
|
||||
udmVOIPGroup.GET("/export",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVOIP", collectlogs.BUSINESS_TYPE_EXPORT)),
|
||||
@@ -394,7 +364,7 @@ func Setup(router *gin.Engine) {
|
||||
// 网元UDM VolteIMS用户信息
|
||||
udmVolteIMSGroup := neDataGroup.Group("/udm/volte-ims")
|
||||
{
|
||||
udmVolteIMSGroup.PUT("/resetData/:neId",
|
||||
udmVolteIMSGroup.PUT("/reset",
|
||||
repeat.RepeatSubmit(5),
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVolteIMS", collectlogs.BUSINESS_TYPE_CLEAN)),
|
||||
@@ -404,30 +374,20 @@ func Setup(router *gin.Engine) {
|
||||
middleware.AuthorizeUser(nil),
|
||||
controller.NewUDMVolteIMS.List,
|
||||
)
|
||||
udmVolteIMSGroup.GET("/:neId/:imsi",
|
||||
udmVolteIMSGroup.GET("",
|
||||
middleware.AuthorizeUser(nil),
|
||||
controller.NewUDMVolteIMS.Info,
|
||||
)
|
||||
udmVolteIMSGroup.POST("/:neId",
|
||||
udmVolteIMSGroup.POST("",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVolteIMS", collectlogs.BUSINESS_TYPE_INSERT)),
|
||||
controller.NewUDMVolteIMS.Add,
|
||||
)
|
||||
udmVolteIMSGroup.POST("/:neId/:num",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVolteIMS", collectlogs.BUSINESS_TYPE_INSERT)),
|
||||
controller.NewUDMVolteIMS.Adds,
|
||||
)
|
||||
udmVolteIMSGroup.DELETE("/:neId/:imsi",
|
||||
udmVolteIMSGroup.DELETE("",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVolteIMS", collectlogs.BUSINESS_TYPE_DELETE)),
|
||||
controller.NewUDMVolteIMS.Remove,
|
||||
)
|
||||
udmVolteIMSGroup.DELETE("/:neId/:imsi/:num",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVolteIMS", collectlogs.BUSINESS_TYPE_DELETE)),
|
||||
controller.NewUDMVolteIMS.Removes,
|
||||
)
|
||||
udmVolteIMSGroup.GET("/export",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.udmVolteIMS", collectlogs.BUSINESS_TYPE_EXPORT)),
|
||||
|
||||
@@ -22,14 +22,11 @@ func (r Alarm) SelectByPage(query model.AlarmQuery) ([]model.Alarm, int64) {
|
||||
if query.NeType != "" {
|
||||
tx = tx.Where("ne_type = ?", query.NeType)
|
||||
}
|
||||
if query.NeID != "" {
|
||||
tx = tx.Where("ne_id = ?", query.NeID)
|
||||
if query.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", query.NeUID)
|
||||
}
|
||||
if query.NeName != "" {
|
||||
tx = tx.Where("ne_name = ?", query.NeName)
|
||||
}
|
||||
if query.PvFlag != "" {
|
||||
tx = tx.Where("pv_flag = ?", query.PvFlag)
|
||||
if query.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", query.CoreUID)
|
||||
}
|
||||
if query.AlarmCode != "" {
|
||||
tx = tx.Where("alarm_code = ?", query.AlarmCode)
|
||||
@@ -87,11 +84,11 @@ func (r Alarm) Select(param model.Alarm) []model.Alarm {
|
||||
if param.NeType != "" {
|
||||
tx = tx.Where("ne_type = ?", param.NeType)
|
||||
}
|
||||
if param.NeId != "" {
|
||||
tx = tx.Where("ne_id = ?", param.NeId)
|
||||
if param.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", param.NeUID)
|
||||
}
|
||||
if param.NeName != "" {
|
||||
tx = tx.Where("ne_name = ?", param.NeName)
|
||||
if param.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", param.CoreUID)
|
||||
}
|
||||
if param.AlarmCode > 0 {
|
||||
tx = tx.Where("alarm_code = ?", param.AlarmCode)
|
||||
@@ -106,9 +103,6 @@ func (r Alarm) Select(param model.Alarm) []model.Alarm {
|
||||
eventTypes := strings.Split(param.OrigSeverity, ",")
|
||||
tx = tx.Where("orig_severity in (%s)", eventTypes)
|
||||
}
|
||||
if param.PvFlag != "" {
|
||||
tx = tx.Where("pv_flag = ?", param.PvFlag)
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
rows := []model.Alarm{}
|
||||
@@ -180,9 +174,9 @@ func (r Alarm) DeleteByIds(ids []int64) int64 {
|
||||
}
|
||||
|
||||
// SelectAlarmSeqLast 查询网元告警最后一条序号
|
||||
func (r Alarm) SelectAlarmSeqLast(neType, neId string) int64 {
|
||||
func (r Alarm) SelectAlarmSeqLast(coreUid, neUid string) int64 {
|
||||
tx := db.DB("").Model(&model.Alarm{})
|
||||
tx = tx.Where("ne_type=? and ne_id=?", neType, neId)
|
||||
tx = tx.Where("core_uid=? and ne_uid=?", coreUid, neUid)
|
||||
tx = tx.Select("alarm_seq").Order("alarm_seq DESC")
|
||||
// 查询数据
|
||||
var alarmSeq int64 = 0
|
||||
|
||||
@@ -21,8 +21,11 @@ func (r AlarmEvent) SelectByPage(query model.AlarmEventQuery) ([]model.AlarmEven
|
||||
if query.NeType != "" {
|
||||
tx = tx.Where("ne_type = ?", query.NeType)
|
||||
}
|
||||
if query.NeID != "" {
|
||||
tx = tx.Where("ne_id = ?", query.NeID)
|
||||
if query.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", query.NeUID)
|
||||
}
|
||||
if query.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", query.CoreUID)
|
||||
}
|
||||
if query.AlarmCode != "" {
|
||||
tx = tx.Where("alarm_code = ?", query.AlarmCode)
|
||||
@@ -73,8 +76,11 @@ func (r AlarmEvent) Select(param model.AlarmEvent) []model.AlarmEvent {
|
||||
if param.NeType != "" {
|
||||
tx = tx.Where("ne_type = ?", param.NeType)
|
||||
}
|
||||
if param.NeId != "" {
|
||||
tx = tx.Where("ne_id = ?", param.NeId)
|
||||
if param.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", param.NeUID)
|
||||
}
|
||||
if param.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", param.CoreUID)
|
||||
}
|
||||
if param.AlarmId != "" {
|
||||
tx = tx.Where("alarm_id = ?", param.AlarmId)
|
||||
@@ -155,9 +161,9 @@ func (r AlarmEvent) DeleteByIds(ids []int64) int64 {
|
||||
}
|
||||
|
||||
// SelectAlarmEventSeqLast 查询网元告警最后一条序号
|
||||
func (r AlarmEvent) SelectAlarmEventSeqLast(neType, neId string) int64 {
|
||||
func (r AlarmEvent) SelectAlarmEventSeqLast(coreUid, neUid string) int64 {
|
||||
tx := db.DB("").Model(&model.AlarmEvent{})
|
||||
tx = tx.Where("ne_type=? and ne_id=?", neType, neId)
|
||||
tx = tx.Where("core_uid=? and ne_uid=?", coreUid, neUid)
|
||||
tx = tx.Select("alarm_seq").Order("alarm_seq DESC")
|
||||
// 查询数据
|
||||
var AlarmEventSeq int64 = 0
|
||||
|
||||
@@ -21,8 +21,11 @@ func (r AlarmForwardLog) SelectByPage(query model.AlarmForwardLogQuery) ([]model
|
||||
if query.NeType != "" {
|
||||
tx = tx.Where("ne_type = ?", query.NeType)
|
||||
}
|
||||
if query.NeID != "" {
|
||||
tx = tx.Where("ne_id = ?", query.NeID)
|
||||
if query.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", query.NeUID)
|
||||
}
|
||||
if query.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", query.CoreUID)
|
||||
}
|
||||
if query.BeginTime != 0 {
|
||||
tx = tx.Where("created_at >= ?", query.BeginTime)
|
||||
|
||||
@@ -21,8 +21,11 @@ func (r AlarmLog) SelectByPage(query model.AlarmLogQuery) ([]model.AlarmLog, int
|
||||
if query.NeType != "" {
|
||||
tx = tx.Where("ne_type = ?", query.NeType)
|
||||
}
|
||||
if query.NeID != "" {
|
||||
tx = tx.Where("ne_id = ?", query.NeID)
|
||||
if query.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", query.NeUID)
|
||||
}
|
||||
if query.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", query.CoreUID)
|
||||
}
|
||||
if query.BeginTime != 0 {
|
||||
tx = tx.Where("created_at >= ?", query.BeginTime)
|
||||
|
||||
@@ -22,8 +22,11 @@ func (r CDREventIMS) SelectByPage(query model.CDREventIMSQuery) ([]model.CDREven
|
||||
if query.NeType != "" {
|
||||
tx = tx.Where("ne_type = ?", query.NeType)
|
||||
}
|
||||
if query.RmUID != "" {
|
||||
tx = tx.Where("rm_uid = ?", query.RmUID)
|
||||
if query.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", query.NeUID)
|
||||
}
|
||||
if query.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", query.CoreUID)
|
||||
}
|
||||
if query.BeginTime != 0 {
|
||||
tx = tx.Where("created_at >= ?", query.BeginTime)
|
||||
|
||||
@@ -19,8 +19,11 @@ func (r CDREventSGWC) SelectByPage(query model.CDREventSGWCQuery) ([]model.CDREv
|
||||
if query.NeType != "" {
|
||||
tx = tx.Where("ne_type = ?", query.NeType)
|
||||
}
|
||||
if query.RmUID != "" {
|
||||
tx = tx.Where("rm_uid = ?", query.RmUID)
|
||||
if query.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", query.NeUID)
|
||||
}
|
||||
if query.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", query.CoreUID)
|
||||
}
|
||||
if query.BeginTime != 0 {
|
||||
tx = tx.Where("timestamp >= ?", query.BeginTime)
|
||||
|
||||
@@ -19,8 +19,11 @@ func (r CDREventSMF) SelectByPage(query model.CDREventSMFQuery) ([]model.CDREven
|
||||
if query.NeType != "" {
|
||||
tx = tx.Where("ne_type = ?", query.NeType)
|
||||
}
|
||||
if query.RmUID != "" {
|
||||
tx = tx.Where("rm_uid = ?", query.RmUID)
|
||||
if query.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", query.NeUID)
|
||||
}
|
||||
if query.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", query.CoreUID)
|
||||
}
|
||||
if query.BeginTime != 0 {
|
||||
tx = tx.Where("timestamp >= ?", query.BeginTime)
|
||||
|
||||
@@ -22,8 +22,11 @@ func (r CDREventSMSC) SelectByPage(query model.CDREventSMSCQuery) ([]model.CDREv
|
||||
if query.NeType != "" {
|
||||
tx = tx.Where("ne_type = ?", query.NeType)
|
||||
}
|
||||
if query.RmUID != "" {
|
||||
tx = tx.Where("rm_uid = ?", query.RmUID)
|
||||
if query.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", query.NeUID)
|
||||
}
|
||||
if query.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", query.CoreUID)
|
||||
}
|
||||
if query.BeginTime != 0 {
|
||||
tx = tx.Where("timestamp >= ?", query.BeginTime)
|
||||
|
||||
@@ -28,8 +28,14 @@ func (r KpiCReport) SelectKPI(query model.KPIQuery) []model.KpiCReport {
|
||||
tableName := fmt.Sprintf("kpi_c_report_%s", strings.ToLower(query.NeType))
|
||||
tx.Table(tableName)
|
||||
// 构建查询条件
|
||||
if query.RmUID != "" {
|
||||
tx = tx.Where("rm_uid = ?", query.RmUID)
|
||||
if query.NeType != "" {
|
||||
tx = tx.Where("ne_type = ?", query.NeType)
|
||||
}
|
||||
if query.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", query.NeUID)
|
||||
}
|
||||
if query.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", query.CoreUID)
|
||||
}
|
||||
if query.BeginTime != 0 {
|
||||
tx = tx.Where("created_at >= ?", query.BeginTime)
|
||||
|
||||
@@ -28,8 +28,14 @@ func (r KpiReport) SelectKPI(query model.KPIQuery) []model.KpiReport {
|
||||
tableName := fmt.Sprintf("kpi_report_%s", strings.ToLower(query.NeType))
|
||||
tx = tx.Table(tableName)
|
||||
// 构建查询条件
|
||||
if query.RmUID != "" {
|
||||
tx = tx.Where("rm_uid = ?", query.RmUID)
|
||||
if query.NeType != "" {
|
||||
tx = tx.Where("ne_type = ?", query.NeType)
|
||||
}
|
||||
if query.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", query.NeUID)
|
||||
}
|
||||
if query.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", query.CoreUID)
|
||||
}
|
||||
if query.BeginTime != 0 {
|
||||
tx = tx.Where("created_at >= ?", query.BeginTime)
|
||||
@@ -55,7 +61,7 @@ func (r KpiReport) SelectKPI(query model.KPIQuery) []model.KpiReport {
|
||||
|
||||
// Insert 新增信息 返回新增数据ID
|
||||
func (r KpiReport) Insert(param model.KpiReport) int64 {
|
||||
if param.NeType == "" {
|
||||
if param.CoreUID == "" || param.NeUID == "" || param.NeType == "" {
|
||||
return 0
|
||||
}
|
||||
if param.CreatedAt == 0 {
|
||||
@@ -89,11 +95,11 @@ func (r KpiReport) SelectKPITitle(neType string) []model.KpiTitle {
|
||||
}
|
||||
|
||||
// SelectUPF 查询UPF数据 N3上行,N6下行
|
||||
func (r KpiReport) SelectUPF(rmUID string, beginTime, endTime int64) []model.KpiReport {
|
||||
func (r KpiReport) SelectUPF(coreUid, neUid string, beginTime, endTime int64) []model.KpiReport {
|
||||
tx := db.DB("").Model(&model.KpiReport{})
|
||||
// 表名
|
||||
tx = tx.Table("kpi_report_upf")
|
||||
tx = tx.Where("rm_uid = ?", rmUID)
|
||||
tx = tx.Where("core_uid = ? and ne_uid = ?", coreUid, neUid)
|
||||
tx = tx.Where("created_at >= ?", beginTime)
|
||||
tx = tx.Where("created_at <= ?", endTime)
|
||||
// 查询数据
|
||||
|
||||
@@ -22,11 +22,11 @@ func (r NBState) SelectByPage(query model.NBStateQuery) ([]model.NBState, int64)
|
||||
if query.NeType != "" {
|
||||
tx = tx.Where("ne_type = ?", query.NeType)
|
||||
}
|
||||
if query.NeID != "" {
|
||||
tx = tx.Where("ne_id = ?", query.NeID)
|
||||
if query.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", query.NeUID)
|
||||
}
|
||||
if query.RmUID != "" {
|
||||
tx = tx.Where("rm_uid = ?", query.RmUID)
|
||||
if query.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", query.CoreUID)
|
||||
}
|
||||
if query.Status != "" {
|
||||
tx = tx.Where("state = ?", query.Status)
|
||||
|
||||
@@ -21,8 +21,11 @@ func (r NEState) SelectByPage(query model.NEStateQuery) ([]model.NEState, int64)
|
||||
if query.NeType != "" {
|
||||
tx = tx.Where("ne_type = ?", query.NeType)
|
||||
}
|
||||
if query.NeID != "" {
|
||||
tx = tx.Where("ne_id = ?", query.NeID)
|
||||
if query.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", query.NeUID)
|
||||
}
|
||||
if query.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", query.CoreUID)
|
||||
}
|
||||
if query.BeginTime != "" {
|
||||
startTime := query.BeginTime
|
||||
|
||||
@@ -16,10 +16,10 @@ var NewUDMAuthUser = &UDMAuthUser{}
|
||||
type UDMAuthUser struct{}
|
||||
|
||||
// ClearAndInsert 清空ne_id后新增实体
|
||||
func (r *UDMAuthUser) ClearAndInsert(neId string, uArr []model.UDMAuthUser) int64 {
|
||||
func (r *UDMAuthUser) ClearAndInsert(coreUid, neUid string, uArr []model.UDMAuthUser) int64 {
|
||||
// 不指定neID时,用 TRUNCATE 清空表快
|
||||
// _, err := datasource.ExecDB("", "TRUNCATE TABLE udm_auth", nil)
|
||||
result := db.DB("").Where("ne_id = ?", neId).Unscoped().Delete(&model.UDMAuthUser{})
|
||||
result := db.DB("").Where("core_uid = ? and ne_id = ?", coreUid, neUid).Unscoped().Delete(&model.UDMAuthUser{})
|
||||
if result.Error != nil {
|
||||
logger.Errorf("Delete err => %v", result.Error)
|
||||
}
|
||||
@@ -33,8 +33,11 @@ func (r *UDMAuthUser) SelectPage(query map[string]string) (int64, []model.UDMAut
|
||||
if v, ok := query["imsi"]; ok && v != "" {
|
||||
tx = tx.Where("imsi like ?", fmt.Sprintf("%%%s%%", v))
|
||||
}
|
||||
if v, ok := query["neId"]; ok && v != "" {
|
||||
tx = tx.Where("ne_id = ?", v)
|
||||
if v, ok := query["neUid"]; ok && v != "" {
|
||||
tx = tx.Where("ne_uid = ?", v)
|
||||
}
|
||||
if v, ok := query["coreUid"]; ok && v != "" {
|
||||
tx = tx.Where("core_id = ?", v)
|
||||
}
|
||||
if v, ok := query["imsis"]; ok && v != "" {
|
||||
arr := strings.Split(v, ",")
|
||||
@@ -83,8 +86,11 @@ func (r *UDMAuthUser) SelectList(u model.UDMAuthUser) []model.UDMAuthUser {
|
||||
if u.IMSI != "" {
|
||||
tx = tx.Where("imsi = ?", u.IMSI)
|
||||
}
|
||||
if u.NeId != "" {
|
||||
tx = tx.Where("ne_id = ?", u.NeId)
|
||||
if u.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", u.NeUID)
|
||||
}
|
||||
if u.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", u.CoreUID)
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
@@ -95,12 +101,13 @@ func (r *UDMAuthUser) SelectList(u model.UDMAuthUser) []model.UDMAuthUser {
|
||||
return arr
|
||||
}
|
||||
|
||||
// SelectByIMSIAndNeID 通过imsi和ne_id查询
|
||||
func (r *UDMAuthUser) SelectByIMSIAndNeID(imsi, neId string) model.UDMAuthUser {
|
||||
// SelectByIMSI 通过imsi和ne_id查询
|
||||
func (r *UDMAuthUser) SelectByIMSI(coreUid, neUid, imsi string) model.UDMAuthUser {
|
||||
tx := db.DB("").Model(&model.UDMAuthUser{})
|
||||
item := model.UDMAuthUser{}
|
||||
// 查询条件拼接
|
||||
tx = tx.Where("imsi = ? and ne_id = ?", imsi, neId)
|
||||
tx = tx.Where("core_uid = ? and ne_uid = ?", coreUid, neUid)
|
||||
tx = tx.Where("imsi = ?", imsi)
|
||||
// 查询数据
|
||||
if err := tx.Order("imsi asc").Limit(1).Find(&item).Error; err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
@@ -118,8 +125,11 @@ func (r *UDMAuthUser) Inserts(uArr []model.UDMAuthUser) int64 {
|
||||
}
|
||||
|
||||
// Delete 删除实体
|
||||
func (r *UDMAuthUser) Delete(imsi, neId string) int64 {
|
||||
tx := db.DB("").Where("imsi = ? and ne_id = ?", imsi, neId).Delete(&model.UDMAuthUser{})
|
||||
func (r *UDMAuthUser) DeleteByIMSI(coreUid, neUid, imsi string) int64 {
|
||||
tx := db.DB("")
|
||||
tx = tx.Where("core_uid = ? and ne_uid = ?", coreUid, neUid)
|
||||
tx = tx.Where("imsi = ?", imsi)
|
||||
tx.Delete(&model.UDMAuthUser{})
|
||||
if err := tx.Error; err != nil {
|
||||
logger.Errorf("Delete err => %v", err)
|
||||
}
|
||||
@@ -127,8 +137,11 @@ func (r *UDMAuthUser) Delete(imsi, neId string) int64 {
|
||||
}
|
||||
|
||||
// DeletePrefixByIMSI 删除前缀匹配的实体
|
||||
func (r *UDMAuthUser) DeletePrefixByIMSI(imsi, neId string) int64 {
|
||||
tx := db.DB("").Where("imsi like ? and ne_id = ?", fmt.Sprintf("%s%%", imsi), neId).Delete(&model.UDMAuthUser{})
|
||||
func (r *UDMAuthUser) DeletePrefixByIMSI(coreUid, neUid, imsiPrefix string) int64 {
|
||||
tx := db.DB("")
|
||||
tx = tx.Where("core_uid = ? and ne_uid = ?", coreUid, neUid)
|
||||
tx = tx.Where("imsi like ?", fmt.Sprintf("%s%%", imsiPrefix))
|
||||
tx.Delete(&model.UDMAuthUser{})
|
||||
if err := tx.Error; err != nil {
|
||||
logger.Errorf("DeletePrefixByIMSI err => %v", err)
|
||||
}
|
||||
|
||||
@@ -21,8 +21,11 @@ func (r UDMExtend) SelectByPage(query map[string]string) ([]model.UDMExtend, int
|
||||
if v, ok := query["imsi"]; ok && v != "" {
|
||||
tx = tx.Where("imsi like ?", fmt.Sprintf("%%%s%%", v))
|
||||
}
|
||||
if v, ok := query["neId"]; ok && v != "" {
|
||||
tx = tx.Where("ne_id = ?", v)
|
||||
if v, ok := query["neUid"]; ok && v != "" {
|
||||
tx = tx.Where("ne_uid = ?", v)
|
||||
}
|
||||
if v, ok := query["coreUid"]; ok && v != "" {
|
||||
tx = tx.Where("core_uid = ?", v)
|
||||
}
|
||||
|
||||
// 查询结果
|
||||
@@ -61,8 +64,11 @@ func (r *UDMExtend) SelectList(u model.UDMExtend) []model.UDMExtend {
|
||||
if u.IMSI != "" {
|
||||
tx = tx.Where("imsi = ?", u.IMSI)
|
||||
}
|
||||
if u.NeId != "" {
|
||||
tx = tx.Where("ne_id = ?", u.NeId)
|
||||
if u.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", u.NeUID)
|
||||
}
|
||||
if u.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", u.CoreUID)
|
||||
}
|
||||
tx = tx.Order("imsi asc")
|
||||
// 查询数据
|
||||
@@ -74,14 +80,16 @@ func (r *UDMExtend) SelectList(u model.UDMExtend) []model.UDMExtend {
|
||||
return rows
|
||||
}
|
||||
|
||||
// SelectByIMSIAndNeID 通过imsi和ne_id查询 neId为%时模糊imsi查询
|
||||
func (r *UDMExtend) SelectByIMSIAndNeID(imsi, neId string) model.UDMExtend {
|
||||
// SelectByIMSI 通过imsi和ne_id查询 neUid为%时模糊imsi查询
|
||||
func (r *UDMExtend) SelectByIMSI(coreUid, neUid, imsi string) model.UDMExtend {
|
||||
tx := db.DB("").Model(&model.UDMExtend{})
|
||||
// 构建查询条件
|
||||
if neId == "%" {
|
||||
// 查询条件拼接
|
||||
if neUid == "%" {
|
||||
tx = tx.Where("core_uid = ?", coreUid)
|
||||
tx = tx.Where("imsi like ?", fmt.Sprintf("%s%%", imsi))
|
||||
} else {
|
||||
tx = tx.Where(" imsi = ? and ne_id = ?", imsi, neId)
|
||||
tx = tx.Where("core_uid = ? and ne_uid = ?", coreUid, neUid)
|
||||
tx = tx.Where("imsi = ?", imsi)
|
||||
}
|
||||
// 查询数据
|
||||
rows := []model.UDMExtend{}
|
||||
@@ -103,13 +111,16 @@ func (r *UDMExtend) Inserts(uArr []model.UDMExtend) int64 {
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// Delete 删除实体 neId为%时模糊imsi前缀
|
||||
func (r *UDMExtend) Delete(imsi, neId string) int64 {
|
||||
// Delete 删除实体 neUid为%时模糊imsi前缀
|
||||
func (r *UDMExtend) DeleteByIMSI(coreUid, neUid, imsi string) int64 {
|
||||
tx := db.DB("")
|
||||
if neId == "%" {
|
||||
// 查询条件拼接
|
||||
if neUid == "%" {
|
||||
tx = tx.Where("core_uid = ?", coreUid)
|
||||
tx = tx.Where("imsi like ?", fmt.Sprintf("%s%%", imsi))
|
||||
} else {
|
||||
tx = tx.Where(" imsi = ? and ne_id = ?", imsi, neId)
|
||||
tx = tx.Where("core_uid = ? and ne_uid = ?", coreUid, neUid)
|
||||
tx = tx.Where("imsi = ?", imsi)
|
||||
}
|
||||
tx = tx.Delete(&model.UDMExtend{})
|
||||
if err := tx.Error; err != nil {
|
||||
|
||||
@@ -16,10 +16,10 @@ var NewUDMSub = &UDMSubUser{}
|
||||
type UDMSubUser struct{}
|
||||
|
||||
// ClearAndInsert 清空ne_id后新增实体
|
||||
func (r *UDMSubUser) ClearAndInsert(neId string, u []model.UDMSubUser) int64 {
|
||||
func (r *UDMSubUser) ClearAndInsert(coreUid, neUid string, u []model.UDMSubUser) int64 {
|
||||
// 不指定neID时,用 TRUNCATE 清空表快
|
||||
// _, err := datasource.ExecDB("", "TRUNCATE TABLE udm_sub", nil)
|
||||
result := db.DB("").Where("ne_id = ?", neId).Unscoped().Delete(&model.UDMSubUser{})
|
||||
result := db.DB("").Where("core_uid = ? and ne_uid = ?", neUid).Unscoped().Delete(&model.UDMSubUser{})
|
||||
if result.Error != nil {
|
||||
logger.Errorf("Delete err => %v", result.Error)
|
||||
}
|
||||
@@ -36,8 +36,11 @@ func (r *UDMSubUser) SelectPage(query map[string]string) (int64, []model.UDMSubU
|
||||
if v, ok := query["msisdn"]; ok && v != "" {
|
||||
tx = tx.Where("msisdn like ?", fmt.Sprintf("%%%s%%", v))
|
||||
}
|
||||
if v, ok := query["neId"]; ok && v != "" {
|
||||
tx = tx.Where("ne_id =?", v)
|
||||
if v, ok := query["coreUid"]; ok && v != "" {
|
||||
tx = tx.Where("core_uid = ?", v)
|
||||
}
|
||||
if v, ok := query["neUid"]; ok && v != "" {
|
||||
tx = tx.Where("ne_uid = ?", v)
|
||||
}
|
||||
if v, ok := query["imsis"]; ok && v != "" {
|
||||
arr := strings.Split(v, ",")
|
||||
@@ -86,10 +89,12 @@ func (r *UDMSubUser) SelectList(u model.UDMSubUser) []model.UDMSubUser {
|
||||
if u.IMSI != "" {
|
||||
tx = tx.Where("imsi = ?", u.IMSI)
|
||||
}
|
||||
if u.NeId != "" {
|
||||
tx = tx.Where("ne_id = ?", u.NeId)
|
||||
if u.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", u.NeUID)
|
||||
}
|
||||
if u.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", u.CoreUID)
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
arr := []model.UDMSubUser{}
|
||||
if err := tx.Order("imsi asc").Find(&arr).Error; err != nil {
|
||||
@@ -98,12 +103,13 @@ func (r *UDMSubUser) SelectList(u model.UDMSubUser) []model.UDMSubUser {
|
||||
return arr
|
||||
}
|
||||
|
||||
// SelectByIMSIAndNeID 通过imsi和ne_id查询
|
||||
func (r *UDMSubUser) SelectByIMSIAndNeID(imsi, neId string) model.UDMSubUser {
|
||||
// SelectByIMSIAndNeID 通过imsi查询
|
||||
func (r *UDMSubUser) SelectByIMSI(coreUid, neUid, imsi string) model.UDMSubUser {
|
||||
tx := db.DB("").Model(&model.UDMSubUser{})
|
||||
item := model.UDMSubUser{}
|
||||
// 查询条件拼接
|
||||
tx = tx.Where("imsi = ? and ne_id = ?", imsi, neId)
|
||||
tx = tx.Where("core_uid = ? and ne_uid = ?", coreUid, neUid)
|
||||
tx = tx.Where("imsi = ?", imsi)
|
||||
// 查询数据
|
||||
if err := tx.Order("imsi asc").Limit(1).Find(&item).Error; err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
@@ -120,9 +126,12 @@ func (r *UDMSubUser) Inserts(uArr []model.UDMSubUser) int64 {
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// Delete 删除实体
|
||||
func (r *UDMSubUser) Delete(imsi, neId string) int64 {
|
||||
tx := db.DB("").Where("imsi = ? and ne_id = ?", imsi, neId).Delete(&model.UDMSubUser{})
|
||||
// DeleteByIMSI 删除实体
|
||||
func (r *UDMSubUser) DeleteByIMSI(coreUid, neUid, imsi string) int64 {
|
||||
tx := db.DB("")
|
||||
tx = tx.Where("core_uid = ? and ne_uid = ?", coreUid, neUid)
|
||||
tx = tx.Where("imsi = ?", imsi)
|
||||
tx.Delete(&model.UDMSubUser{})
|
||||
if err := tx.Error; err != nil {
|
||||
logger.Errorf("Delete err => %v", err)
|
||||
}
|
||||
@@ -130,8 +139,11 @@ func (r *UDMSubUser) Delete(imsi, neId string) int64 {
|
||||
}
|
||||
|
||||
// DeletePrefixByIMSI 删除前缀匹配的实体
|
||||
func (r *UDMSubUser) DeletePrefixByIMSI(imsiPrefix, neId string) int64 {
|
||||
tx := db.DB("").Where("imsi like ? and ne_id = ?", fmt.Sprintf("%s%%", imsiPrefix), neId).Delete(&model.UDMSubUser{})
|
||||
func (r *UDMSubUser) DeletePrefixByIMSI(coreUid, neUid, imsiPrefix string) int64 {
|
||||
tx := db.DB("")
|
||||
tx = tx.Where("core_uid = ? and ne_uid = ?", coreUid, neUid)
|
||||
tx = tx.Where("imsi like ?", fmt.Sprintf("%s%%", imsiPrefix))
|
||||
tx.Delete(&model.UDMSubUser{})
|
||||
if err := tx.Error; err != nil {
|
||||
logger.Errorf("DeletePrefixByIMSI err => %v", err)
|
||||
}
|
||||
|
||||
@@ -16,10 +16,10 @@ var NewUDMVOIPUser = &UDMVOIPUser{}
|
||||
type UDMVOIPUser struct{}
|
||||
|
||||
// ClearAndInsert 清空ne_id后新增实体
|
||||
func (r UDMVOIPUser) ClearAndInsert(neId string, uArr []model.UDMVOIPUser) int64 {
|
||||
func (r UDMVOIPUser) ClearAndInsert(coreUid, neUid string, uArr []model.UDMVOIPUser) int64 {
|
||||
// 不指定neID时,用 TRUNCATE 清空表快
|
||||
// _, err := datasource.ExecDB("", "TRUNCATE TABLE udm_voip", nil)
|
||||
result := db.DB("").Where("ne_id = ?", neId).Unscoped().Delete(&model.UDMVOIPUser{})
|
||||
result := db.DB("").Where("core_uid = ? and ne_uid = ?", coreUid, neUid).Unscoped().Delete(&model.UDMVOIPUser{})
|
||||
if result.Error != nil {
|
||||
logger.Errorf("Delete err => %v", result.Error)
|
||||
}
|
||||
@@ -33,8 +33,11 @@ func (r UDMVOIPUser) SelectPage(query map[string]string) (int64, []model.UDMVOIP
|
||||
if v, ok := query["username"]; ok && v != "" {
|
||||
tx = tx.Where("username like ?", fmt.Sprintf("%%%s%%", v))
|
||||
}
|
||||
if v, ok := query["neId"]; ok && v != "" {
|
||||
tx = tx.Where("ne_id = ?", v)
|
||||
if v, ok := query["coreUid"]; ok && v != "" {
|
||||
tx = tx.Where("core_uid = ?", v)
|
||||
}
|
||||
if v, ok := query["neUid"]; ok && v != "" {
|
||||
tx = tx.Where("ne_uid = ?", v)
|
||||
}
|
||||
if v, ok := query["usernames"]; ok && v != "" {
|
||||
arr := strings.Split(v, ",")
|
||||
@@ -85,8 +88,11 @@ func (r UDMVOIPUser) SelectList(u model.UDMVOIPUser) []model.UDMVOIPUser {
|
||||
if u.UserName != "" {
|
||||
tx = tx.Where("username = ?", u.UserName)
|
||||
}
|
||||
if u.NeId != "" {
|
||||
tx = tx.Where("ne_id = ?", u.NeId)
|
||||
if u.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", u.NeUID)
|
||||
}
|
||||
if u.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", u.CoreUID)
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
@@ -97,12 +103,13 @@ func (r UDMVOIPUser) SelectList(u model.UDMVOIPUser) []model.UDMVOIPUser {
|
||||
return arr
|
||||
}
|
||||
|
||||
// SelectByUserNameAndNeID 通过username和ne_id查询
|
||||
func (r UDMVOIPUser) SelectByUserNameAndNeID(username, neId string) model.UDMVOIPUser {
|
||||
// SelectByUserName 通过username查询
|
||||
func (r UDMVOIPUser) SelectByUserName(coreUid, neUid, username string) model.UDMVOIPUser {
|
||||
tx := db.DB("").Model(&model.UDMVOIPUser{})
|
||||
item := model.UDMVOIPUser{}
|
||||
// 查询条件拼接
|
||||
tx = tx.Where("username = ? and ne_id = ?", username, neId)
|
||||
tx = tx.Where("core_uid = ? and ne_uid = ?", coreUid, neUid)
|
||||
tx = tx.Where("username = ?", username)
|
||||
// 查询数据
|
||||
if err := tx.Order("username asc").Limit(1).Find(&item).Error; err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
@@ -119,9 +126,12 @@ func (r UDMVOIPUser) Inserts(uArr []model.UDMVOIPUser) int64 {
|
||||
return tx.RowsAffected
|
||||
}
|
||||
|
||||
// Delete 删除实体
|
||||
func (r UDMVOIPUser) Delete(username, neId string) int64 {
|
||||
tx := db.DB("").Where("username = ? and ne_id = ?", username, neId).Delete(&model.UDMVOIPUser{})
|
||||
// DeleteByUserName 删除实体
|
||||
func (r UDMVOIPUser) DeleteByUserName(coreUid, neUid, username string) int64 {
|
||||
tx := db.DB("")
|
||||
tx = tx.Where("core_uid = ? and ne_uid = ?", coreUid, neUid)
|
||||
tx = tx.Where("username = ?", username)
|
||||
tx.Delete(&model.UDMVOIPUser{})
|
||||
if err := tx.Error; err != nil {
|
||||
logger.Errorf("Delete err => %v", err)
|
||||
}
|
||||
@@ -129,8 +139,11 @@ func (r UDMVOIPUser) Delete(username, neId string) int64 {
|
||||
}
|
||||
|
||||
// DeletePrefixByUserName 删除前缀匹配的实体
|
||||
func (r UDMVOIPUser) DeletePrefixByUserName(username, neId string) int64 {
|
||||
tx := db.DB("").Where("username like ? and ne_id = ?", fmt.Sprintf("%s%%", username), neId).Delete(&model.UDMVOIPUser{})
|
||||
func (r UDMVOIPUser) DeletePrefixByUserName(coreUid, neUid, usernamePrefix string) int64 {
|
||||
tx := db.DB("")
|
||||
tx = tx.Where("core_uid = ? and ne_uid = ?", coreUid, neUid)
|
||||
tx = tx.Where("username like ?", fmt.Sprintf("%s%%", usernamePrefix))
|
||||
tx.Delete(&model.UDMVOIPUser{})
|
||||
if err := tx.Error; err != nil {
|
||||
logger.Errorf("DeletePrefixByUserName err => %v", err)
|
||||
}
|
||||
|
||||
@@ -16,10 +16,10 @@ var NewUDMVolteIMSUser = &UDMVolteIMSUser{}
|
||||
type UDMVolteIMSUser struct{}
|
||||
|
||||
// ClearAndInsert 清空ne_id后新增实体
|
||||
func (r UDMVolteIMSUser) ClearAndInsert(neId string, uArr []model.UDMVolteIMSUser) int64 {
|
||||
func (r UDMVolteIMSUser) ClearAndInsert(coreUid, neUid string, uArr []model.UDMVolteIMSUser) int64 {
|
||||
// 不指定neID时,用 TRUNCATE 清空表快
|
||||
// _, err := datasource.ExecDB("", "TRUNCATE TABLE udm_volte_ims", nil)
|
||||
result := db.DB("").Where("ne_id = ?", neId).Unscoped().Delete(&model.UDMVolteIMSUser{})
|
||||
result := db.DB("").Where("core_uid = ? and ne_uid = ?", coreUid, neUid).Unscoped().Delete(&model.UDMVolteIMSUser{})
|
||||
if result.Error != nil {
|
||||
logger.Errorf("Delete err => %v", result.Error)
|
||||
}
|
||||
@@ -36,8 +36,11 @@ func (r UDMVolteIMSUser) SelectPage(query map[string]string) (int64, []model.UDM
|
||||
if v, ok := query["msisdn"]; ok && v != "" {
|
||||
tx = tx.Where("msisdn like ?", fmt.Sprintf("%%%s%%", v))
|
||||
}
|
||||
if v, ok := query["neId"]; ok && v != "" {
|
||||
tx = tx.Where("ne_id = ?", v)
|
||||
if v, ok := query["coreUid"]; ok && v != "" {
|
||||
tx = tx.Where("core_uid = ?", v)
|
||||
}
|
||||
if v, ok := query["neUid"]; ok && v != "" {
|
||||
tx = tx.Where("ne_uid = ?", v)
|
||||
}
|
||||
if v, ok := query["tag"]; ok && v != "" {
|
||||
tx = tx.Where("tag = ?", v)
|
||||
@@ -91,12 +94,15 @@ func (r UDMVolteIMSUser) SelectPage(query map[string]string) (int64, []model.UDM
|
||||
func (r UDMVolteIMSUser) SelectList(u model.UDMVolteIMSUser) []model.UDMVolteIMSUser {
|
||||
tx := db.DB("").Model(&model.UDMVolteIMSUser{})
|
||||
// 查询条件拼接
|
||||
if u.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", u.NeUID)
|
||||
}
|
||||
if u.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", u.CoreUID)
|
||||
}
|
||||
if u.IMSI != "" {
|
||||
tx = tx.Where("imsi = ?", u.IMSI)
|
||||
}
|
||||
if u.NeId != "" {
|
||||
tx = tx.Where("ne_id = ?", u.NeId)
|
||||
}
|
||||
if u.Tag != "" {
|
||||
tx = tx.Where("tag = ?", u.Tag)
|
||||
}
|
||||
@@ -109,12 +115,13 @@ func (r UDMVolteIMSUser) SelectList(u model.UDMVolteIMSUser) []model.UDMVolteIMS
|
||||
return arr
|
||||
}
|
||||
|
||||
// SelectByIMSIAndMSISDNAndNeID 通过imsi,msisdn,ne_id查询
|
||||
func (r UDMVolteIMSUser) SelectByIMSIAndMSISDNAndNeID(imsi, msisdn, neId string) model.UDMVolteIMSUser {
|
||||
// SelectByIMSIAndMSISDN 通过imsi,msisdn查询
|
||||
func (r UDMVolteIMSUser) SelectByIMSIAndMSISDN(coreUid, neUid, imsi, msisdn string) model.UDMVolteIMSUser {
|
||||
tx := db.DB("").Model(&model.UDMVolteIMSUser{})
|
||||
item := model.UDMVolteIMSUser{}
|
||||
// 查询条件拼接
|
||||
tx = tx.Where("imsi = ? and msisdn = ? and ne_id = ?", imsi, msisdn, neId)
|
||||
tx = tx.Where("core_uid = ? and ne_uid = ?", coreUid, neUid)
|
||||
tx = tx.Where("imsi = ? and msisdn = ?", imsi, msisdn)
|
||||
// 查询数据
|
||||
if err := tx.Order("imsi asc").Limit(1).Find(&item).Error; err != nil {
|
||||
logger.Errorf("query err => %v", err)
|
||||
@@ -132,8 +139,11 @@ func (r UDMVolteIMSUser) Inserts(uArr []model.UDMVolteIMSUser) int64 {
|
||||
}
|
||||
|
||||
// Delete 删除实体
|
||||
func (r UDMVolteIMSUser) Delete(imsi, neId string) int64 {
|
||||
tx := db.DB("").Where("imsi = ? and ne_id = ?", imsi, neId).Delete(&model.UDMVolteIMSUser{})
|
||||
func (r UDMVolteIMSUser) DeleteByIMSI(coreUid, neUid, imsi string) int64 {
|
||||
tx := db.DB("")
|
||||
tx = tx.Where("core_uid = ? and ne_uid = ?", coreUid, neUid)
|
||||
tx = tx.Where("imsi = ?", imsi)
|
||||
tx.Delete(&model.UDMVolteIMSUser{})
|
||||
if err := tx.Error; err != nil {
|
||||
logger.Errorf("Delete err => %v", err)
|
||||
}
|
||||
@@ -141,8 +151,11 @@ func (r UDMVolteIMSUser) Delete(imsi, neId string) int64 {
|
||||
}
|
||||
|
||||
// DeletePrefixByIMSI 删除前缀匹配的实体
|
||||
func (r UDMVolteIMSUser) DeletePrefixByIMSI(imsi, neId string) int64 {
|
||||
tx := db.DB("").Where("imsi like ? and ne_id = ?", fmt.Sprintf("%s%%", imsi), neId).Delete(&model.UDMVolteIMSUser{})
|
||||
func (r UDMVolteIMSUser) DeletePrefixByIMSI(coreUid, neUid, imsiPrefix string) int64 {
|
||||
tx := db.DB("")
|
||||
tx = tx.Where("core_uid = ? and ne_uid = ?", coreUid, neUid)
|
||||
tx = tx.Where("imsi like ?", fmt.Sprintf("%s%%", imsiPrefix))
|
||||
tx.Delete(&model.UDMVolteIMSUser{})
|
||||
if err := tx.Error; err != nil {
|
||||
logger.Errorf("DeletePrefixByIMSI err => %v", err)
|
||||
}
|
||||
|
||||
@@ -21,8 +21,11 @@ func (r UEEventAMF) SelectByPage(query model.UEEventAMFQuery) ([]model.UEEventAM
|
||||
if query.NeType != "" {
|
||||
tx = tx.Where("ne_type = ?", query.NeType)
|
||||
}
|
||||
if query.RmUID != "" {
|
||||
tx = tx.Where("rm_uid = ?", query.RmUID)
|
||||
if query.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", query.NeUID)
|
||||
}
|
||||
if query.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", query.CoreUID)
|
||||
}
|
||||
if query.BeginTime != 0 {
|
||||
tx = tx.Where("timestamp >= ?", query.BeginTime)
|
||||
|
||||
@@ -21,8 +21,11 @@ func (r UEEventMME) SelectByPage(query model.UEEventMMEQuery) ([]model.UEEventMM
|
||||
if query.NeType != "" {
|
||||
tx = tx.Where("ne_type = ?", query.NeType)
|
||||
}
|
||||
if query.RmUID != "" {
|
||||
tx = tx.Where("rm_uid = ?", query.RmUID)
|
||||
if query.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", query.NeUID)
|
||||
}
|
||||
if query.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", query.CoreUID)
|
||||
}
|
||||
if query.BeginTime != 0 {
|
||||
tx = tx.Where("timestamp >= ?", query.BeginTime)
|
||||
|
||||
@@ -61,8 +61,8 @@ func (r Alarm) DeleteByIds(ids []int64) (int64, error) {
|
||||
}
|
||||
|
||||
// FindAlarmSeqLast 查询网元告警最后一条序号
|
||||
func (s Alarm) FindAlarmSeqLast(neType, neId string) int64 {
|
||||
return s.alarmRepository.SelectAlarmSeqLast(neType, neId)
|
||||
func (s Alarm) FindAlarmSeqLast(coreUid, neUid string) int64 {
|
||||
return s.alarmRepository.SelectAlarmSeqLast(coreUid, neUid)
|
||||
}
|
||||
|
||||
// AlarmClearByIds 批量清除告警信息
|
||||
@@ -193,8 +193,8 @@ func (r Alarm) ExportXlsx(rows []model.Alarm, fileName, language, alarmStatus st
|
||||
"E" + idx: row.AlarmId,
|
||||
"F" + idx: row.AlarmCode,
|
||||
"G" + idx: row.NeType,
|
||||
"H" + idx: row.NeName,
|
||||
"I" + idx: row.NeId,
|
||||
"H" + idx: row.NeUID,
|
||||
"I" + idx: row.CoreUID,
|
||||
}
|
||||
if alarmStatus == "0" {
|
||||
clearTimeStr := date.ParseDateToStr(row.ClearTime, date.YYYY_MM_DDTHH_MM_SSZ)
|
||||
|
||||
@@ -54,6 +54,6 @@ func (r AlarmEvent) DeleteByIds(ids []int64) (int64, error) {
|
||||
}
|
||||
|
||||
// FindAlarmEventSeqLast 查询网元告警最后一条序号
|
||||
func (s AlarmEvent) FindAlarmEventSeqLast(neType, neId string) int64 {
|
||||
return s.AlarmEventRepository.SelectAlarmEventSeqLast(neType, neId)
|
||||
func (s AlarmEvent) FindAlarmEventSeqLast(coreUid string, neUid string) int64 {
|
||||
return s.AlarmEventRepository.SelectAlarmEventSeqLast(coreUid, neUid)
|
||||
}
|
||||
|
||||
@@ -155,7 +155,7 @@ func (r CDREventIMS) ExportXlsx(rows []model.CDREventIMS, fileName, language str
|
||||
|
||||
dataCells = append(dataCells, map[string]any{
|
||||
"A" + idx: row.ID,
|
||||
"B" + idx: row.NeName,
|
||||
"B" + idx: row.NeUID,
|
||||
"C" + idx: recordType,
|
||||
"D" + idx: callTypeLable,
|
||||
"E" + idx: caller,
|
||||
|
||||
@@ -205,8 +205,8 @@ func (r CDREventSGWC) ExportXlsx(rows []model.CDREventSGWC, fileName string) (st
|
||||
|
||||
dataCells = append(dataCells, map[string]any{
|
||||
"A" + idx: row.ID,
|
||||
"B" + idx: row.NeName,
|
||||
"C" + idx: row.RmUid,
|
||||
"B" + idx: row.NeType,
|
||||
"C" + idx: row.NeUID,
|
||||
"D" + idx: chargingID,
|
||||
"E" + idx: servedIMSI,
|
||||
"F" + idx: servedMSISDN,
|
||||
|
||||
@@ -202,8 +202,8 @@ func (r CDREventSMF) ExportXlsx(rows []model.CDREventSMF, fileName string) (stri
|
||||
dataCells = append(dataCells, map[string]any{
|
||||
"A" + idx: row.ID,
|
||||
"B" + idx: chargingID,
|
||||
"C" + idx: row.NeName,
|
||||
"D" + idx: row.RmUid,
|
||||
"C" + idx: row.NeType,
|
||||
"D" + idx: row.NeUID,
|
||||
"E" + idx: subscriptionIDData,
|
||||
"F" + idx: subscriptionIDType,
|
||||
"G" + idx: dataVolumeUplink,
|
||||
|
||||
@@ -122,7 +122,7 @@ func (r CDREventSMSC) ExportXlsx(rows []model.CDREventSMSC, fileName, language s
|
||||
|
||||
dataCells = append(dataCells, map[string]any{
|
||||
"A" + idx: row.ID,
|
||||
"B" + idx: row.NeName,
|
||||
"B" + idx: row.NeUID,
|
||||
"C" + idx: recordType,
|
||||
"D" + idx: serviceType,
|
||||
"E" + idx: caller,
|
||||
|
||||
@@ -42,8 +42,8 @@ func (s KpiCReport) FindData(query model.KPIQuery) []map[string]any {
|
||||
|
||||
item := map[string]any{
|
||||
"neType": row.NeType,
|
||||
"neName": row.NeName,
|
||||
"rmUID": row.RmUid,
|
||||
"neUid": row.NeUID,
|
||||
"coreUid": row.CoreUID,
|
||||
"startIndex": row.Index,
|
||||
"timeGroup": row.CreatedAt,
|
||||
}
|
||||
|
||||
@@ -46,8 +46,8 @@ func (s KpiReport) FindData(query model.KPIQuery) []map[string]any {
|
||||
|
||||
item := map[string]any{
|
||||
"neType": row.NeType,
|
||||
"neName": row.NeName,
|
||||
"rmUID": row.RmUid,
|
||||
"neUid": row.NeUID,
|
||||
"coreUid": row.CoreUID,
|
||||
"startIndex": row.Index,
|
||||
"timeGroup": row.CreatedAt,
|
||||
}
|
||||
@@ -144,7 +144,7 @@ func (r KpiReport) FindTitle(neType string) []model.KpiTitle {
|
||||
// UPFTodayFlowFind 查询UPF总流量 N3上行 N6下行
|
||||
// day 统计天数
|
||||
// down * 8 / 1000 / 1000 单位M
|
||||
func (r KpiReport) UPFTodayFlowFind(rmUID string, day int) (int64, int64) {
|
||||
func (r KpiReport) UPFTodayFlowFind(neUid string, day int) (int64, int64) {
|
||||
// 获取当前日期
|
||||
now := time.Now()
|
||||
var upTotal, downTotal int64
|
||||
@@ -152,7 +152,7 @@ func (r KpiReport) UPFTodayFlowFind(rmUID string, day int) (int64, int64) {
|
||||
// 查询最近day天的数据
|
||||
for i := 0; i <= day; i++ {
|
||||
dateKey := now.AddDate(0, 0, -i).Format("2006-01-02")
|
||||
key := fmt.Sprintf("%s:UPF_FLOW:%s:%s", constants.CACHE_NE_DATA, rmUID, dateKey)
|
||||
key := fmt.Sprintf("%s:UPF_FLOW:%s:%s", constants.CACHE_NE_DATA, neUid, dateKey)
|
||||
|
||||
// 读取缓存数据
|
||||
up, err := redis.GetHash("", key, "up")
|
||||
@@ -172,10 +172,10 @@ func (r KpiReport) UPFTodayFlowFind(rmUID string, day int) (int64, int64) {
|
||||
}
|
||||
|
||||
// UPFTodayFlow UPF流量今日统计
|
||||
func (r KpiReport) UPFTodayFlowUpdate(rmUID string, upValue, downValue int64) error {
|
||||
func (r KpiReport) UPFTodayFlowUpdate(neUid string, upValue, downValue int64) error {
|
||||
// 按日期存储统计数据
|
||||
dateKey := time.Now().Format("2006-01-02")
|
||||
key := fmt.Sprintf("%s:UPF_FLOW:%s:%s", constants.CACHE_NE_DATA, rmUID, dateKey)
|
||||
key := fmt.Sprintf("%s:UPF_FLOW:%s:%s", constants.CACHE_NE_DATA, neUid, dateKey)
|
||||
|
||||
// 使用HIncrBy实时累加统计值
|
||||
if err := redis.IncrBy("", key, "up", upValue); err != nil {
|
||||
@@ -202,16 +202,16 @@ func (r KpiReport) UPFTodayFlowLoad(day int) {
|
||||
if len(jsonStr) > 7 {
|
||||
json.Unmarshal([]byte(jsonStr), &v)
|
||||
}
|
||||
if v.NeType == "UPF" && v.RmUID != "" {
|
||||
if v.NeType == "UPF" && v.NeUID != "" {
|
||||
// 查询最近day天的数据
|
||||
for i := 0; i <= day; i++ {
|
||||
dateKey := now.AddDate(0, 0, -i).Format("2006-01-02")
|
||||
key := fmt.Sprintf("%s:UPF_FLOW:%s:%s", constants.CACHE_NE_DATA, v.RmUID, dateKey)
|
||||
key := fmt.Sprintf("%s:UPF_FLOW:%s:%s", constants.CACHE_NE_DATA, v.NeUID, dateKey)
|
||||
// 根据传入天数计算时间范围
|
||||
beginTime := now.AddDate(0, 0, -i).Truncate(24 * time.Hour).UnixMilli()
|
||||
endTime := beginTime + 24*60*60*1000 - 1
|
||||
// 查询历史数据
|
||||
rows := r.kpiReportRepository.SelectUPF(v.RmUID, beginTime, endTime)
|
||||
rows := r.kpiReportRepository.SelectUPF(v.CoreUID, v.NeUID, beginTime, endTime)
|
||||
var upTotal, downTotal int64
|
||||
|
||||
// 处理历史数据
|
||||
|
||||
@@ -23,13 +23,13 @@ type UDMAuthUser struct {
|
||||
}
|
||||
|
||||
// dataByRedis UDM鉴权用户 db:0 中 ausf:*
|
||||
func (r *UDMAuthUser) dataByRedis(imsi, neId string) []model.UDMAuthUser {
|
||||
func (r *UDMAuthUser) dataByRedis(coreUid, neUid, imsi string) []model.UDMAuthUser {
|
||||
arr := []model.UDMAuthUser{}
|
||||
key := fmt.Sprintf("ausf:%s", imsi)
|
||||
source := fmt.Sprintf("UDM_%s", neId)
|
||||
source := fmt.Sprintf("UDM_%s", neUid)
|
||||
|
||||
// 网元主机的Redis客户端
|
||||
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId)
|
||||
redisClient, err := neService.NewNeInfo.NeRunRedisClient(coreUid, neUid)
|
||||
if err != nil {
|
||||
return arr
|
||||
}
|
||||
@@ -64,12 +64,14 @@ func (r *UDMAuthUser) dataByRedis(imsi, neId string) []model.UDMAuthUser {
|
||||
amf = strings.Replace(v, "\r\n", "", 1)
|
||||
}
|
||||
a := model.UDMAuthUser{
|
||||
CoreUID: coreUid,
|
||||
NeUID: neUid,
|
||||
NeType: "UDM",
|
||||
IMSI: imsi,
|
||||
Amf: amf,
|
||||
Ki: m["ki"],
|
||||
AlgoIndex: m["algo"],
|
||||
Opc: m["opc"],
|
||||
NeId: neId,
|
||||
}
|
||||
arr = append(arr, a)
|
||||
}
|
||||
@@ -77,20 +79,20 @@ func (r *UDMAuthUser) dataByRedis(imsi, neId string) []model.UDMAuthUser {
|
||||
}
|
||||
|
||||
// ResetData 重置鉴权用户数据,清空数据库重新同步Redis数据
|
||||
func (r *UDMAuthUser) ResetData(neId string) int64 {
|
||||
authArr := r.dataByRedis("*", neId)
|
||||
func (r *UDMAuthUser) ResetData(coreUid, neUid string) int64 {
|
||||
authArr := r.dataByRedis(coreUid, neUid, "*")
|
||||
// 数据清空后添加
|
||||
go r.udmAuthRepository.ClearAndInsert(neId, authArr)
|
||||
go r.udmAuthRepository.ClearAndInsert(coreUid, neUid, authArr)
|
||||
return int64(len(authArr))
|
||||
}
|
||||
|
||||
// ParseInfo 解析单个用户imsi鉴权信息 data从命令MML得到的结果
|
||||
func (r *UDMAuthUser) ParseInfo(imsi, neId string, data map[string]string) model.UDMAuthUser {
|
||||
u := r.udmAuthRepository.SelectByIMSIAndNeID(imsi, neId)
|
||||
|
||||
func (r *UDMAuthUser) ParseInfo(coreUid, neUid, imsi string, data map[string]string) model.UDMAuthUser {
|
||||
u := r.udmAuthRepository.SelectByIMSI(coreUid, neUid, imsi)
|
||||
u.CoreUID = coreUid
|
||||
u.NeUID = neUid
|
||||
u.NeType = "UDM"
|
||||
// 用于更新
|
||||
u.IMSI = imsi
|
||||
u.NeId = neId
|
||||
u.Amf = data["amf"]
|
||||
u.Ki = data["ki"]
|
||||
u.AlgoIndex = data["algo"]
|
||||
@@ -110,17 +112,17 @@ func (r *UDMAuthUser) Find(u model.UDMAuthUser) []model.UDMAuthUser {
|
||||
|
||||
// Insert 从数据中读取后删除imsi再存入数据库
|
||||
// imsi长度15,ki长度32,opc长度0或者32
|
||||
func (r *UDMAuthUser) Insert(neId string, u model.UDMAuthUser) int64 {
|
||||
uArr := r.dataByRedis(u.IMSI, neId)
|
||||
func (r *UDMAuthUser) Insert(coreUid, neUid string, u model.UDMAuthUser) int64 {
|
||||
uArr := r.dataByRedis(coreUid, neUid, u.IMSI)
|
||||
if len(uArr) > 0 {
|
||||
r.udmAuthRepository.Delete(u.IMSI, neId)
|
||||
r.udmAuthRepository.DeleteByIMSI(coreUid, neUid, u.IMSI)
|
||||
return r.udmAuthRepository.Inserts(uArr)
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// InsertData 导入文件数据 dataType目前两种:txt/csv
|
||||
func (r *UDMAuthUser) InsertData(neId, dataType string, data any) int64 {
|
||||
func (r *UDMAuthUser) InsertData(coreUid, neUid, dataType string, data any) int64 {
|
||||
// imsi截取前缀,重新获取部分数据
|
||||
prefixes := make(map[string]struct{})
|
||||
|
||||
@@ -149,9 +151,9 @@ func (r *UDMAuthUser) InsertData(neId, dataType string, data any) int64 {
|
||||
var num int64 = 0
|
||||
for prefix := range prefixes {
|
||||
// 直接删除前缀的记录
|
||||
r.udmAuthRepository.DeletePrefixByIMSI(prefix, neId)
|
||||
r.udmAuthRepository.DeletePrefixByIMSI(coreUid, neUid, prefix)
|
||||
// keys ausf:4600001000004*
|
||||
arr := r.dataByRedis(prefix+"*", neId)
|
||||
arr := r.dataByRedis(coreUid, neUid, prefix+"*")
|
||||
if len(arr) > 0 {
|
||||
num += r.udmAuthRepository.Inserts(arr)
|
||||
}
|
||||
@@ -160,21 +162,20 @@ func (r *UDMAuthUser) InsertData(neId, dataType string, data any) int64 {
|
||||
}
|
||||
|
||||
// Delete 删除单个不重新加载
|
||||
func (r *UDMAuthUser) Delete(imsi, neId string) int64 {
|
||||
return r.udmAuthRepository.Delete(imsi, neId)
|
||||
func (r *UDMAuthUser) Delete(coreUid, neUid, imsi string) int64 {
|
||||
return r.udmAuthRepository.DeleteByIMSI(coreUid, neUid, imsi)
|
||||
}
|
||||
|
||||
// LoadData 重新加载从imsi开始num的数据
|
||||
func (r *UDMAuthUser) LoadData(neId, imsi, num string) {
|
||||
func (r *UDMAuthUser) LoadData(coreUid, neUid, imsi string, num int64) {
|
||||
startIMSI, _ := strconv.ParseInt(imsi, 10, 64)
|
||||
subNum, _ := strconv.ParseInt(num, 10, 64)
|
||||
var i int64
|
||||
for i = 0; i < subNum; i++ {
|
||||
for i = 0; i < num; i++ {
|
||||
keyIMSI := fmt.Sprintf("%015d", startIMSI+i)
|
||||
// 删除原数据
|
||||
r.udmAuthRepository.Delete(keyIMSI, neId)
|
||||
r.udmAuthRepository.DeleteByIMSI(coreUid, neUid, keyIMSI)
|
||||
// 加载数据
|
||||
arr := r.dataByRedis(keyIMSI, neId)
|
||||
arr := r.dataByRedis(coreUid, neUid, keyIMSI)
|
||||
if len(arr) < 1 {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -17,17 +17,17 @@ type UDMExtend struct {
|
||||
}
|
||||
|
||||
// FindByIMSIAndNeID 通过IMSI和网元标识查询信息 neId为%时模糊imsi查询
|
||||
func (r UDMExtend) FindByIMSIAndNeID(imsi, neId string) model.UDMExtend {
|
||||
return r.UDMExtendRepository.SelectByIMSIAndNeID(imsi, neId)
|
||||
func (r UDMExtend) FindByIMSIAndNeID(coreUid, neUid, imsi string) model.UDMExtend {
|
||||
return r.UDMExtendRepository.SelectByIMSI(coreUid, neUid, imsi)
|
||||
}
|
||||
|
||||
// Save 新增或修改信息
|
||||
func (r UDMExtend) Save(u model.UDMExtend) bool {
|
||||
r.UDMExtendRepository.Delete(u.IMSI, u.NeId)
|
||||
r.UDMExtendRepository.DeleteByIMSI(u.CoreUID, u.NeUID, u.IMSI)
|
||||
return r.UDMExtendRepository.Inserts([]model.UDMExtend{u}) > 0
|
||||
}
|
||||
|
||||
// Delete 删除信息 neId为%时模糊imsi查询
|
||||
func (r UDMExtend) Delete(imsi, neId string) int64 {
|
||||
return r.UDMExtendRepository.Delete(imsi, neId)
|
||||
func (r UDMExtend) Delete(coreUid, neUid, imsi string) int64 {
|
||||
return r.UDMExtendRepository.DeleteByIMSI(coreUid, neUid, imsi)
|
||||
}
|
||||
|
||||
@@ -24,13 +24,13 @@ type UDMSubUser struct {
|
||||
}
|
||||
|
||||
// dataByRedis UDM签约用户 db:0 中 udm-sd:*
|
||||
func (r *UDMSubUser) dataByRedis(imsi, neId string) []model.UDMSubUser {
|
||||
func (r *UDMSubUser) dataByRedis(coreUid, neUid, imsi string) []model.UDMSubUser {
|
||||
arr := []model.UDMSubUser{}
|
||||
key := fmt.Sprintf("udm-sd:%s", imsi)
|
||||
source := fmt.Sprintf("UDM_%s", neId)
|
||||
source := fmt.Sprintf("UDM_%s", neUid)
|
||||
|
||||
// 网元主机的Redis客户端
|
||||
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId)
|
||||
redisClient, err := neService.NewNeInfo.NeRunRedisClient(coreUid, neUid)
|
||||
if err != nil {
|
||||
return arr
|
||||
}
|
||||
@@ -61,12 +61,14 @@ func (r *UDMSubUser) dataByRedis(imsi, neId string) []model.UDMSubUser {
|
||||
}
|
||||
|
||||
a := model.UDMSubUser{
|
||||
IMSI: imsi, // udm-sd:360000100000130
|
||||
MSISDN: m["gpsi"], // 8612300000130
|
||||
NeId: neId,
|
||||
SmfSel: m["smf-sel"], // def_snssai
|
||||
SmData: m["sm-dat"], // 1-000001&cmnet&ims&3gnet
|
||||
Cag: m["cag"], // def_cag
|
||||
CoreUID: coreUid,
|
||||
NeUID: neUid,
|
||||
NeType: "UDM",
|
||||
IMSI: imsi, // udm-sd:360000100000130
|
||||
MSISDN: m["gpsi"], // 8612300000130
|
||||
SmfSel: m["smf-sel"], // def_snssai
|
||||
SmData: m["sm-dat"], // 1-000001&cmnet&ims&3gnet
|
||||
Cag: m["cag"], // def_cag
|
||||
}
|
||||
|
||||
// def_ambr,def_nssai,0,def_arfb,def_sar,3,1,12000,1,1000,0,1,-
|
||||
@@ -123,16 +125,16 @@ func (r *UDMSubUser) dataByRedis(imsi, neId string) []model.UDMSubUser {
|
||||
}
|
||||
|
||||
// ResetData 重置鉴权用户数据,清空数据库重新同步Redis数据
|
||||
func (r *UDMSubUser) ResetData(neId string) int64 {
|
||||
subArr := r.dataByRedis("*", neId)
|
||||
func (r *UDMSubUser) ResetData(coreUid, neUid string) int64 {
|
||||
subArr := r.dataByRedis(coreUid, neUid, "*")
|
||||
// 数据清空后添加
|
||||
go r.udmSubRepository.ClearAndInsert(neId, subArr)
|
||||
go r.udmSubRepository.ClearAndInsert(coreUid, neUid, subArr)
|
||||
return int64(len(subArr))
|
||||
}
|
||||
|
||||
// ParseInfo 解析单个用户imsi签约信息 data从命令MML得到的结果
|
||||
func (r *UDMSubUser) ParseInfo(imsi, neId string, data map[string]string) model.UDMSubUser {
|
||||
u := r.udmSubRepository.SelectByIMSIAndNeID(imsi, neId)
|
||||
func (r *UDMSubUser) ParseInfo(coreUid, neUid, imsi string, data map[string]string) model.UDMSubUser {
|
||||
u := r.udmSubRepository.SelectByIMSI(coreUid, neUid, imsi)
|
||||
|
||||
cnType, _ := strconv.ParseInt(data["CNType"][:4], 0, 64) // 0x03(EPC|5GC)
|
||||
rat, _ := strconv.ParseInt(data["RAT"][:4], 0, 64) // 0x00(VIRTUAL|WLAN|EUTRA|NR)
|
||||
@@ -142,9 +144,11 @@ func (r *UDMSubUser) ParseInfo(imsi, neId string, data map[string]string) model.
|
||||
}
|
||||
|
||||
// 用于更新
|
||||
u.CoreUID = coreUid
|
||||
u.NeUID = neUid
|
||||
u.NeType = "UDM"
|
||||
u.IMSI = imsi
|
||||
u.MSISDN = msisdn
|
||||
u.NeId = neId
|
||||
u.UeAmbrTpl = data["AMBR"]
|
||||
u.NssaiTpl = data["NSSAI"]
|
||||
u.AreaForbiddenTpl = data["AreaForbidden"]
|
||||
@@ -172,7 +176,7 @@ func (r *UDMSubUser) ParseInfo(imsi, neId string, data map[string]string) model.
|
||||
}
|
||||
|
||||
// 补充用户拓展信息
|
||||
info := r.UDMExtendRepository.SelectByIMSIAndNeID(imsi, neId)
|
||||
info := r.UDMExtendRepository.SelectByIMSI(coreUid, neUid, imsi)
|
||||
if info.IMSI == imsi {
|
||||
u.Remark = info.Remark
|
||||
}
|
||||
@@ -191,18 +195,20 @@ func (r *UDMSubUser) Find(u model.UDMSubUser) []model.UDMSubUser {
|
||||
|
||||
// Insert 从数据中读取后删除imsi再存入数据库
|
||||
// imsi长度15,ki长度32,opc长度0或者32
|
||||
func (r *UDMSubUser) Insert(neId string, u model.UDMSubUser) int64 {
|
||||
uArr := r.dataByRedis(u.IMSI, neId)
|
||||
func (r *UDMSubUser) Insert(coreUid, neUid string, u model.UDMSubUser) int64 {
|
||||
uArr := r.dataByRedis(coreUid, neUid, u.IMSI)
|
||||
if len(uArr) > 0 {
|
||||
r.udmSubRepository.Delete(u.IMSI, neId)
|
||||
r.udmSubRepository.DeleteByIMSI(coreUid, neUid, u.IMSI)
|
||||
// 新增到拓展信息
|
||||
if u.Remark != "" {
|
||||
r.UDMExtendRepository.Delete(u.IMSI, "%")
|
||||
r.UDMExtendRepository.DeleteByIMSI(coreUid, "%", u.IMSI)
|
||||
r.UDMExtendRepository.Inserts([]model.UDMExtend{{
|
||||
IMSI: u.IMSI,
|
||||
MSISDN: u.MSISDN,
|
||||
NeId: u.NeId,
|
||||
Remark: u.Remark,
|
||||
CoreUID: u.CoreUID,
|
||||
NeUID: u.NeUID,
|
||||
NeType: u.NeType,
|
||||
IMSI: u.IMSI,
|
||||
MSISDN: u.MSISDN,
|
||||
Remark: u.Remark,
|
||||
}})
|
||||
}
|
||||
return r.udmSubRepository.Inserts(uArr)
|
||||
@@ -211,7 +217,7 @@ func (r *UDMSubUser) Insert(neId string, u model.UDMSubUser) int64 {
|
||||
}
|
||||
|
||||
// InsertData 导入文件数据 dataType目前两种:txt/csv
|
||||
func (r *UDMSubUser) InsertData(neId, dataType string, data any) int64 {
|
||||
func (r *UDMSubUser) InsertData(coreUid, neUid, dataType string, data any) int64 {
|
||||
// imsi截取前缀,重新获取部分数据
|
||||
prefixes := make(map[string]struct{})
|
||||
|
||||
@@ -240,9 +246,9 @@ func (r *UDMSubUser) InsertData(neId, dataType string, data any) int64 {
|
||||
var num int64 = 0
|
||||
for prefix := range prefixes {
|
||||
// keys udm-sd:4600001000004*
|
||||
arr := r.dataByRedis(prefix+"*", neId)
|
||||
arr := r.dataByRedis(coreUid, neUid, prefix+"*")
|
||||
if len(arr) > 0 {
|
||||
r.udmSubRepository.DeletePrefixByIMSI(prefix, neId)
|
||||
r.udmSubRepository.DeletePrefixByIMSI(coreUid, neUid, prefix)
|
||||
num += r.udmSubRepository.Inserts(arr)
|
||||
}
|
||||
}
|
||||
@@ -250,27 +256,26 @@ func (r *UDMSubUser) InsertData(neId, dataType string, data any) int64 {
|
||||
}
|
||||
|
||||
// Delete 删除单个不重新加载
|
||||
func (r *UDMSubUser) Delete(neId, imsi string) int64 {
|
||||
func (r *UDMSubUser) Delete(coreUid, neUid, imsi string) int64 {
|
||||
// 删除拓展信息
|
||||
r.UDMExtendRepository.Delete(imsi, neId)
|
||||
return r.udmSubRepository.Delete(imsi, neId)
|
||||
r.UDMExtendRepository.DeleteByIMSI(coreUid, neUid, imsi)
|
||||
return r.udmSubRepository.DeleteByIMSI(coreUid, neUid, imsi)
|
||||
}
|
||||
|
||||
// LoadData 重新加载从imsi开始num的数据
|
||||
// remark不为空,则新增到拓展信息,删除标记为-(Deleted)-
|
||||
func (r *UDMSubUser) LoadData(neId, imsi, num, remark string) {
|
||||
func (r *UDMSubUser) LoadData(coreUid, neUid, imsi string, num int64, remark string) {
|
||||
startIMSI, _ := strconv.ParseInt(imsi, 10, 64)
|
||||
subNum, _ := strconv.ParseInt(num, 10, 64)
|
||||
var i int64
|
||||
for i = 0; i < subNum; i++ {
|
||||
for i = 0; i < num; i++ {
|
||||
keyIMSI := fmt.Sprintf("%015d", startIMSI+i)
|
||||
// 删除原数据
|
||||
r.udmSubRepository.Delete(keyIMSI, neId)
|
||||
r.udmSubRepository.DeleteByIMSI(coreUid, neUid, keyIMSI)
|
||||
if remark == "-(Deleted)-" {
|
||||
r.UDMExtendRepository.Delete(keyIMSI, "%")
|
||||
r.UDMExtendRepository.DeleteByIMSI(coreUid, "%", keyIMSI)
|
||||
}
|
||||
// 加载数据,删除标记为-(Deleted)-加载为空不插入
|
||||
arr := r.dataByRedis(keyIMSI, neId)
|
||||
arr := r.dataByRedis(coreUid, neUid, keyIMSI)
|
||||
if len(arr) < 1 {
|
||||
continue
|
||||
}
|
||||
@@ -280,13 +285,15 @@ func (r *UDMSubUser) LoadData(neId, imsi, num, remark string) {
|
||||
uarr := make([]model.UDMExtend, 0, len(arr))
|
||||
for _, v := range arr {
|
||||
uarr = append(uarr, model.UDMExtend{
|
||||
IMSI: v.IMSI,
|
||||
MSISDN: v.MSISDN,
|
||||
NeId: v.NeId,
|
||||
Remark: remark,
|
||||
CoreUID: v.CoreUID,
|
||||
NeUID: v.NeUID,
|
||||
NeType: v.NeType,
|
||||
IMSI: v.IMSI,
|
||||
MSISDN: v.MSISDN,
|
||||
Remark: remark,
|
||||
})
|
||||
}
|
||||
r.UDMExtendRepository.Delete(keyIMSI, neId)
|
||||
r.UDMExtendRepository.DeleteByIMSI(coreUid, neUid, keyIMSI)
|
||||
r.UDMExtendRepository.Inserts(uarr)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,13 +23,13 @@ type UDMVOIPUser struct {
|
||||
}
|
||||
|
||||
// dataByRedis UDMVOIP用户 db:0 中 voip:*
|
||||
func (r UDMVOIPUser) dataByRedis(username, neId string) []model.UDMVOIPUser {
|
||||
func (r UDMVOIPUser) dataByRedis(coreUid, neUid, username string) []model.UDMVOIPUser {
|
||||
arr := []model.UDMVOIPUser{}
|
||||
key := fmt.Sprintf("voip:%s", username)
|
||||
source := fmt.Sprintf("UDM_%s", neId)
|
||||
source := fmt.Sprintf("UDM_%s", neUid)
|
||||
|
||||
// 网元主机的Redis客户端
|
||||
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId)
|
||||
redisClient, err := neService.NewNeInfo.NeRunRedisClient(coreUid, neUid)
|
||||
if err != nil {
|
||||
return arr
|
||||
}
|
||||
@@ -56,7 +56,9 @@ func (r UDMVOIPUser) dataByRedis(username, neId string) []model.UDMVOIPUser {
|
||||
}
|
||||
|
||||
a := model.UDMVOIPUser{
|
||||
NeId: neId,
|
||||
CoreUID: coreUid,
|
||||
NeUID: neUid,
|
||||
NeType: "UDM",
|
||||
UserName: username,
|
||||
Password: m["password"],
|
||||
}
|
||||
@@ -66,22 +68,24 @@ func (r UDMVOIPUser) dataByRedis(username, neId string) []model.UDMVOIPUser {
|
||||
}
|
||||
|
||||
// ResetData 重置VOIP用户数据,清空数据库重新同步Redis数据
|
||||
func (r UDMVOIPUser) ResetData(neId string) int64 {
|
||||
arr := r.dataByRedis("*", neId)
|
||||
func (r UDMVOIPUser) ResetData(coreUid, neUid string) int64 {
|
||||
arr := r.dataByRedis(coreUid, neUid, "*")
|
||||
// 数据清空后添加
|
||||
go r.udmVOIPRepository.ClearAndInsert(neId, arr)
|
||||
go r.udmVOIPRepository.ClearAndInsert(coreUid, neUid, arr)
|
||||
return int64(len(arr))
|
||||
}
|
||||
|
||||
// ParseInfo 解析单个用户userName信息 data从命令MML得到的结果
|
||||
func (r UDMVOIPUser) ParseInfo(neId string, data map[string]string) model.UDMVOIPUser {
|
||||
func (r UDMVOIPUser) ParseInfo(coreUid, neUid string, data map[string]string) model.UDMVOIPUser {
|
||||
u := model.UDMVOIPUser{
|
||||
NeId: neId,
|
||||
CoreUID: coreUid,
|
||||
NeUID: neUid,
|
||||
NeType: "UDM",
|
||||
UserName: data["username"],
|
||||
Password: data["password"],
|
||||
}
|
||||
// 赋予ID
|
||||
item := r.udmVOIPRepository.SelectByUserNameAndNeID(u.UserName, neId)
|
||||
item := r.udmVOIPRepository.SelectByUserName(coreUid, neUid, u.UserName)
|
||||
if item.ID != "" {
|
||||
u.ID = item.ID
|
||||
}
|
||||
@@ -99,17 +103,17 @@ func (r UDMVOIPUser) Find(u model.UDMVOIPUser) []model.UDMVOIPUser {
|
||||
}
|
||||
|
||||
// Insert 从数据中读取后删除username再存入数据库
|
||||
func (r UDMVOIPUser) Insert(neId string, username string) int64 {
|
||||
uArr := r.dataByRedis(username, neId)
|
||||
func (r UDMVOIPUser) Insert(coreUid, neUid string, username string) int64 {
|
||||
uArr := r.dataByRedis(coreUid, neUid, username)
|
||||
if len(uArr) > 0 {
|
||||
r.udmVOIPRepository.Delete(username, neId)
|
||||
r.udmVOIPRepository.DeleteByUserName(coreUid, neUid, username)
|
||||
return r.udmVOIPRepository.Inserts(uArr)
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// InsertData 导入文件数据 dataType目前两种:txt/csv
|
||||
func (r UDMVOIPUser) InsertData(neId, dataType string, data any) int64 {
|
||||
func (r UDMVOIPUser) InsertData(coreUid, neUid, dataType string, data any) int64 {
|
||||
// imsi截取前缀,重新获取部分数据
|
||||
prefixes := make(map[string]struct{})
|
||||
|
||||
@@ -138,9 +142,9 @@ func (r UDMVOIPUser) InsertData(neId, dataType string, data any) int64 {
|
||||
var num int64 = 0
|
||||
for prefix := range prefixes {
|
||||
// 直接删除前缀的记录
|
||||
r.udmVOIPRepository.DeletePrefixByUserName(prefix, neId)
|
||||
r.udmVOIPRepository.DeletePrefixByUserName(coreUid, neUid, prefix)
|
||||
// keys voip:4600001000004*
|
||||
arr := r.dataByRedis(prefix+"*", neId)
|
||||
arr := r.dataByRedis(coreUid, neUid, prefix+"*")
|
||||
if len(arr) > 0 {
|
||||
num += r.udmVOIPRepository.Inserts(arr)
|
||||
}
|
||||
@@ -149,21 +153,20 @@ func (r UDMVOIPUser) InsertData(neId, dataType string, data any) int64 {
|
||||
}
|
||||
|
||||
// Delete 删除单个不重新加载
|
||||
func (r UDMVOIPUser) Delete(username, neId string) int64 {
|
||||
return r.udmVOIPRepository.Delete(username, neId)
|
||||
func (r UDMVOIPUser) Delete(coreUid, neUid, username string) int64 {
|
||||
return r.udmVOIPRepository.DeleteByUserName(coreUid, neUid, username)
|
||||
}
|
||||
|
||||
// LoadData 重新加载从username开始num的数据
|
||||
func (r UDMVOIPUser) LoadData(neId, username, num string) {
|
||||
func (r UDMVOIPUser) LoadData(coreUid, neUid, username string, num int64) {
|
||||
startUserName, _ := strconv.ParseInt(username, 10, 64)
|
||||
subNum, _ := strconv.ParseInt(num, 10, 64)
|
||||
var i int64
|
||||
for i = 0; i < subNum; i++ {
|
||||
for i = 0; i < num; i++ {
|
||||
keyUserName := fmt.Sprintf("%d", startUserName+i)
|
||||
// 删除原数据
|
||||
r.udmVOIPRepository.Delete(keyUserName, neId)
|
||||
r.udmVOIPRepository.DeleteByUserName(coreUid, neUid, keyUserName)
|
||||
// 加载数据
|
||||
arr := r.dataByRedis(keyUserName, neId)
|
||||
arr := r.dataByRedis(coreUid, neUid, keyUserName)
|
||||
if len(arr) < 1 {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -23,13 +23,13 @@ type UDMVolteIMSUser struct {
|
||||
}
|
||||
|
||||
// dataByRedis UDMVolteIMS用户 db:0 中 volte:*
|
||||
func (r UDMVolteIMSUser) dataByRedis(imsi, neId string) []model.UDMVolteIMSUser {
|
||||
func (r UDMVolteIMSUser) dataByRedis(coreUid, neUid, imsi string) []model.UDMVolteIMSUser {
|
||||
arr := []model.UDMVolteIMSUser{}
|
||||
key := fmt.Sprintf("volte:%s", imsi)
|
||||
source := fmt.Sprintf("UDM_%s", neId)
|
||||
source := fmt.Sprintf("UDM_%s", neUid)
|
||||
|
||||
// 网元主机的Redis客户端
|
||||
redisClient, err := neService.NewNeInfo.NeRunRedisClient("UDM", neId)
|
||||
redisClient, err := neService.NewNeInfo.NeRunRedisClient(coreUid, neUid)
|
||||
if err != nil {
|
||||
return arr
|
||||
}
|
||||
@@ -63,11 +63,13 @@ func (r UDMVolteIMSUser) dataByRedis(imsi, neId string) []model.UDMVolteIMSUser
|
||||
}
|
||||
|
||||
a := model.UDMVolteIMSUser{
|
||||
NeId: neId,
|
||||
IMSI: keys[1],
|
||||
MSISDN: keys[2],
|
||||
Tag: m["tag"], // volte = tag
|
||||
VNI: vni,
|
||||
CoreUID: coreUid,
|
||||
NeUID: neUid,
|
||||
NeType: "UDM",
|
||||
IMSI: keys[1],
|
||||
MSISDN: keys[2],
|
||||
Tag: m["tag"], // volte = tag
|
||||
VNI: vni,
|
||||
}
|
||||
arr = append(arr, a)
|
||||
}
|
||||
@@ -75,15 +77,15 @@ func (r UDMVolteIMSUser) dataByRedis(imsi, neId string) []model.UDMVolteIMSUser
|
||||
}
|
||||
|
||||
// ResetData 重置VolteIMS用户数据,清空数据库重新同步Redis数据
|
||||
func (r UDMVolteIMSUser) ResetData(neId string) int64 {
|
||||
authArr := r.dataByRedis("*", neId)
|
||||
func (r UDMVolteIMSUser) ResetData(coreUid, neUid string) int64 {
|
||||
authArr := r.dataByRedis(coreUid, neUid, "*")
|
||||
// 数据清空后添加
|
||||
go r.udmVolteIMSRepository.ClearAndInsert(neId, authArr)
|
||||
go r.udmVolteIMSRepository.ClearAndInsert(coreUid, neUid, authArr)
|
||||
return int64(len(authArr))
|
||||
}
|
||||
|
||||
// ParseInfo 解析单个用户imsi信息 data从命令MML得到的结果
|
||||
func (r UDMVolteIMSUser) ParseInfo(neId string, data map[string]string) model.UDMVolteIMSUser {
|
||||
func (r UDMVolteIMSUser) ParseInfo(coreUid, neUid string, data map[string]string) model.UDMVolteIMSUser {
|
||||
// "110011200004217@ims.mnc001.mcc110.3gppnetwork.org"
|
||||
vni := ""
|
||||
impiParts := strings.Split(data["impi"], "@")
|
||||
@@ -95,14 +97,15 @@ func (r UDMVolteIMSUser) ParseInfo(neId string, data map[string]string) model.UD
|
||||
}
|
||||
|
||||
u := model.UDMVolteIMSUser{
|
||||
NeId: neId,
|
||||
IMSI: data["imsi"],
|
||||
MSISDN: data["msisdn"],
|
||||
Tag: data["volte_tag"],
|
||||
VNI: vni,
|
||||
CoreUID: coreUid,
|
||||
NeUID: neUid,
|
||||
IMSI: data["imsi"],
|
||||
MSISDN: data["msisdn"],
|
||||
Tag: data["volte_tag"],
|
||||
VNI: vni,
|
||||
}
|
||||
// 赋予ID
|
||||
item := r.udmVolteIMSRepository.SelectByIMSIAndMSISDNAndNeID(u.IMSI, u.MSISDN, neId)
|
||||
item := r.udmVolteIMSRepository.SelectByIMSIAndMSISDN(coreUid, neUid, u.IMSI, u.MSISDN)
|
||||
if item.ID != "" {
|
||||
u.ID = item.ID
|
||||
}
|
||||
@@ -121,17 +124,17 @@ func (r UDMVolteIMSUser) Find(u model.UDMVolteIMSUser) []model.UDMVolteIMSUser {
|
||||
|
||||
// InsertByIMSI 从数据中读取后删除imsi再存入数据库
|
||||
// imsi长度15
|
||||
func (r UDMVolteIMSUser) InsertByIMSI(imsi, neId string) int64 {
|
||||
uArr := r.dataByRedis(imsi+":*", neId)
|
||||
func (r UDMVolteIMSUser) InsertByIMSI(coreUid, neUid, imsi string) int64 {
|
||||
uArr := r.dataByRedis(coreUid, neUid, imsi+":*")
|
||||
if len(uArr) > 0 {
|
||||
r.udmVolteIMSRepository.Delete(imsi, neId)
|
||||
r.udmVolteIMSRepository.DeleteByIMSI(coreUid, neUid, imsi)
|
||||
return r.udmVolteIMSRepository.Inserts(uArr)
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// InsertData 导入文件数据 dataType目前两种:txt/csv
|
||||
func (r UDMVolteIMSUser) InsertData(neId, dataType string, data any) int64 {
|
||||
func (r UDMVolteIMSUser) InsertData(coreUid, neUid, dataType string, data any) int64 {
|
||||
// imsi截取前缀,重新获取部分数据
|
||||
prefixes := make(map[string]struct{})
|
||||
|
||||
@@ -160,9 +163,9 @@ func (r UDMVolteIMSUser) InsertData(neId, dataType string, data any) int64 {
|
||||
var num int64 = 0
|
||||
for prefix := range prefixes {
|
||||
// 直接删除前缀的记录
|
||||
r.udmVolteIMSRepository.DeletePrefixByIMSI(prefix, neId)
|
||||
r.udmVolteIMSRepository.DeletePrefixByIMSI(coreUid, neUid, prefix)
|
||||
// keys voip:4600001000004*
|
||||
arr := r.dataByRedis(prefix+"*", neId)
|
||||
arr := r.dataByRedis(coreUid, neUid, prefix+"*")
|
||||
if len(arr) > 0 {
|
||||
num += r.udmVolteIMSRepository.Inserts(arr)
|
||||
}
|
||||
@@ -171,21 +174,20 @@ func (r UDMVolteIMSUser) InsertData(neId, dataType string, data any) int64 {
|
||||
}
|
||||
|
||||
// Delete 删除单个不重新加载
|
||||
func (r UDMVolteIMSUser) Delete(imsi, neId string) int64 {
|
||||
return r.udmVolteIMSRepository.Delete(imsi, neId)
|
||||
func (r UDMVolteIMSUser) Delete(coreUid, neUid, imsi string) int64 {
|
||||
return r.udmVolteIMSRepository.DeleteByIMSI(coreUid, neUid, imsi)
|
||||
}
|
||||
|
||||
// LoadData 重新加载从imsi开始num的数据
|
||||
func (r UDMVolteIMSUser) LoadData(neId, imsiOrMsisdn, num string) {
|
||||
func (r UDMVolteIMSUser) LoadData(coreUid, neUid, imsiOrMsisdn string, num int64) {
|
||||
startIMSIOrMsisdn, _ := strconv.ParseInt(imsiOrMsisdn, 10, 64)
|
||||
subNum, _ := strconv.ParseInt(num, 10, 64)
|
||||
var i int64
|
||||
for i = 0; i < subNum; i++ {
|
||||
for i = 0; i < num; i++ {
|
||||
keyIMSI := fmt.Sprintf("%d", startIMSIOrMsisdn+i)
|
||||
// 删除原数据
|
||||
r.udmVolteIMSRepository.Delete(keyIMSI, neId)
|
||||
r.udmVolteIMSRepository.DeleteByIMSI(coreUid, neUid, keyIMSI)
|
||||
// 加载数据
|
||||
arr := r.dataByRedis(keyIMSI+":*", neId)
|
||||
arr := r.dataByRedis(coreUid, neUid, keyIMSI+":*")
|
||||
if len(arr) < 1 {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -47,8 +47,8 @@ type NeActionController struct {
|
||||
func (s *NeActionController) PushFile(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var body struct {
|
||||
NeType string `json:"neType" binding:"required"`
|
||||
NeID string `json:"neId" binding:"required"`
|
||||
CoreUID string `json:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" binding:"required"` // 网元唯一标识
|
||||
UploadPath string `json:"uploadPath" binding:"required"`
|
||||
DelTemp bool `json:"delTemp"` // 删除本地临时文件
|
||||
}
|
||||
@@ -59,14 +59,14 @@ func (s *NeActionController) PushFile(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(body.NeType, body.NeID)
|
||||
if neInfo.NeId != body.NeID || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
// 网元主机的SSH客户端
|
||||
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId)
|
||||
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.CoreUID, neInfo.NeUID)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -118,28 +118,28 @@ func (s *NeActionController) PushFile(c *gin.Context) {
|
||||
// @Router /ne/action/pullFile [get]
|
||||
func (s *NeActionController) PullFile(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var querys struct {
|
||||
NeType string `form:"neType" binding:"required"`
|
||||
NeID string `form:"neId" binding:"required"`
|
||||
var query struct {
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
Path string `form:"path" binding:"required"`
|
||||
FileName string `form:"fileName" binding:"required"`
|
||||
DelTemp bool `form:"delTemp"` // 删除本地临时文件
|
||||
}
|
||||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(querys.NeType, querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
// 网元主机的SSH客户端
|
||||
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId)
|
||||
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.CoreUID, neInfo.NeUID)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -153,8 +153,8 @@ func (s *NeActionController) PullFile(c *gin.Context) {
|
||||
}
|
||||
defer sftpClient.Close()
|
||||
|
||||
nePath := filepath.ToSlash(filepath.Join(querys.Path, querys.FileName))
|
||||
fileName := generate.Code(6) + "_" + querys.FileName
|
||||
nePath := filepath.ToSlash(filepath.Join(query.Path, query.FileName))
|
||||
fileName := generate.Code(6) + "_" + query.FileName
|
||||
localFilePath := filepath.Join("/tmp/omc/pull", fileName)
|
||||
if runtime.GOOS == "windows" {
|
||||
localFilePath = fmt.Sprintf("C:%s", localFilePath)
|
||||
@@ -166,7 +166,7 @@ func (s *NeActionController) PullFile(c *gin.Context) {
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if querys.DelTemp {
|
||||
if query.DelTemp {
|
||||
_ = os.Remove(localFilePath)
|
||||
}
|
||||
}()
|
||||
@@ -192,8 +192,8 @@ func (s *NeActionController) PullFile(c *gin.Context) {
|
||||
func (s *NeActionController) PullDirZip(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var querys struct {
|
||||
NeType string `form:"neType" binding:"required"`
|
||||
NeID string `form:"neId" binding:"required"`
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
Path string `form:"path" binding:"required"`
|
||||
DelTemp bool `form:"delTemp"` // 删除本地临时文件
|
||||
}
|
||||
@@ -204,14 +204,14 @@ func (s *NeActionController) PullDirZip(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(querys.NeType, querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(querys.CoreUID, querys.NeUID)
|
||||
if neInfo.CoreUID != querys.CoreUID || neInfo.NeUID != querys.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
// 网元主机的SSH客户端
|
||||
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId)
|
||||
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.CoreUID, neInfo.NeUID)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -239,7 +239,7 @@ func (s *NeActionController) PullDirZip(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 压缩zip文件名
|
||||
zipFileName := fmt.Sprintf("%s-%s-%s.zip", neInfo.NeType, neInfo.NeId, dirName)
|
||||
zipFileName := fmt.Sprintf("%s-%s-%s.zip", neInfo.NeType, neInfo.NeUID, dirName)
|
||||
zipFilePath := filepath.Join(localFilePath, zipFileName)
|
||||
if err := file.CompressZipByDir(zipFilePath, localDirFilePath); err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
@@ -273,8 +273,8 @@ func (s *NeActionController) PullDirZip(c *gin.Context) {
|
||||
func (s *NeActionController) ViewFile(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var querys struct {
|
||||
NeType string `form:"neType" binding:"required"`
|
||||
NeID string `form:"neId" binding:"required"`
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
Path string `form:"path" binding:"required"`
|
||||
FileName string `form:"fileName" binding:"required"`
|
||||
}
|
||||
@@ -285,14 +285,14 @@ func (s *NeActionController) ViewFile(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(querys.NeType, querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(querys.CoreUID, querys.NeUID)
|
||||
if neInfo.CoreUID != querys.CoreUID || neInfo.NeUID != querys.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
// 网元主机的SSH客户端
|
||||
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId)
|
||||
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.CoreUID, neInfo.NeUID)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -332,8 +332,8 @@ func (s *NeActionController) ViewFile(c *gin.Context) {
|
||||
func (s *NeActionController) Files(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var querys struct {
|
||||
NeType string `form:"neType" binding:"required"`
|
||||
NeID string `form:"neId" binding:"required"`
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
Path string `form:"path" binding:"required"`
|
||||
PageNum int64 `form:"pageNum" binding:"required"`
|
||||
PageSize int64 `form:"pageSize" binding:"required"`
|
||||
@@ -346,14 +346,14 @@ func (s *NeActionController) Files(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(querys.NeType, querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(querys.CoreUID, querys.NeUID)
|
||||
if neInfo.CoreUID != querys.CoreUID || neInfo.NeUID != querys.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
// 网元主机的SSH客户端
|
||||
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.NeType, neInfo.NeId)
|
||||
sshClient, err := s.neInfoService.NeRunSSHClient(neInfo.CoreUID, neInfo.NeUID)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -407,9 +407,9 @@ func (s *NeActionController) Files(c *gin.Context) {
|
||||
func (s *NeActionController) Service(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var body struct {
|
||||
NeType string `json:"neType" binding:"required"`
|
||||
NeID string `json:"neId" binding:"required"`
|
||||
Action string `json:"action" binding:"required,oneof=start restart stop reboot poweroff"` // 操作行为
|
||||
CoreUID string `json:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" binding:"required"` // 网元唯一标识
|
||||
Action string `json:"action" binding:"required,oneof=start restart stop reboot poweroff"` // 操作行为
|
||||
}
|
||||
if err := c.ShouldBindBodyWithJSON(&body); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -418,8 +418,8 @@ func (s *NeActionController) Service(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(body.NeType, body.NeID)
|
||||
if neInfo.NeId != body.NeID || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
@@ -443,7 +443,7 @@ func (s *NeActionController) Service(c *gin.Context) {
|
||||
cmdStr = "sudo shutdown -h now"
|
||||
}
|
||||
|
||||
_, err := s.neInfoService.NeRunSSHCmd(body.NeType, body.NeID, cmdStr)
|
||||
_, err := s.neInfoService.NeRunSSHCmd(neInfo.CoreUID, neInfo.NeUID, cmdStr)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
|
||||
@@ -198,8 +198,8 @@ func (s NeConfigController) ListByNeType(c *gin.Context) {
|
||||
func (s NeConfigController) DataInfo(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var query struct {
|
||||
NeType string `form:"neType" binding:"required"` // 网元类型
|
||||
NeId string `form:"neId" binding:"required"` // 网元ID
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
ParamName string `form:"paramName" binding:"required"` // 可用属性
|
||||
}
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
@@ -208,13 +208,13 @@ func (s NeConfigController) DataInfo(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(query.NeType, query.NeId)
|
||||
if neInfo.NeId != query.NeId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
if query.NeType == "OMC" {
|
||||
if neInfo.NeType == "OMC" {
|
||||
if query.ParamName == "alarmEmailForward" || query.ParamName == "alarmSMSForward" {
|
||||
var o *cm_omc.ConfigOMC
|
||||
resData, err := o.Query(query.ParamName)
|
||||
@@ -256,8 +256,8 @@ func (s NeConfigController) DataInfo(c *gin.Context) {
|
||||
func (s NeConfigController) DataEdit(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var body struct {
|
||||
NeType string `json:"neType" binding:"required"` // 网元类型
|
||||
NeId string `json:"neId" binding:"required"` // 网元ID
|
||||
CoreUID string `json:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" binding:"required"` // 网元唯一标识
|
||||
ParamName string `json:"paramName" binding:"required"`
|
||||
ParamData map[string]any `json:"paramData" binding:"required"`
|
||||
Loc string `json:"loc"` // 仅array使用与数据对象内index一致,有多层时划分嵌套层(index/subParamName/index)
|
||||
@@ -268,12 +268,12 @@ func (s NeConfigController) DataEdit(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(body.NeType, body.NeId)
|
||||
if neInfo.NeId != body.NeId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
if body.NeType == "OMC" {
|
||||
if neInfo.NeType == "OMC" {
|
||||
if body.ParamName == "alarmEmailForward" || body.ParamName == "alarmSMSForward" {
|
||||
var o *cm_omc.ConfigOMC
|
||||
resData, err := o.Modify(body.ParamName, body.ParamData)
|
||||
@@ -322,8 +322,8 @@ func (s NeConfigController) DataEdit(c *gin.Context) {
|
||||
func (s NeConfigController) DataAdd(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var body struct {
|
||||
NeType string `json:"neType" binding:"required"` // 网元类型
|
||||
NeId string `json:"neId" binding:"required"` // 网元ID
|
||||
CoreUID string `json:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" binding:"required"` // 网元唯一标识
|
||||
ParamName string `json:"paramName" binding:"required"` // 根据配置可选值
|
||||
ParamData map[string]any `json:"paramData" binding:"required"` // 数据对象
|
||||
Loc string `json:"loc" binding:"required"` // 与数据对象内index一致,有多层时划分嵌套层(index/subParamName/index)
|
||||
@@ -334,8 +334,14 @@ func (s NeConfigController) DataAdd(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
// 检查是否array
|
||||
info := s.neConfigService.FindByNeTypeAndParamName(body.NeType, body.ParamName)
|
||||
info := s.neConfigService.FindByNeTypeAndParamName(neInfo.NeType, body.ParamName)
|
||||
if info.ParamType != "array" {
|
||||
c.JSON(200, resp.ErrMsg("this attribute does not support adding"))
|
||||
return
|
||||
@@ -347,12 +353,6 @@ func (s NeConfigController) DataAdd(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(body.NeType, body.NeId)
|
||||
if neInfo.NeId != body.NeId || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
// 网元直连
|
||||
resData, err := neFetchlink.NeConfigAdd(neInfo, body.ParamName, body.Loc, body.ParamData)
|
||||
if err != nil {
|
||||
@@ -381,8 +381,8 @@ func (s NeConfigController) DataAdd(c *gin.Context) {
|
||||
func (s NeConfigController) DataRemove(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var query struct {
|
||||
NeType string `form:"neType" binding:"required"` // 网元类型
|
||||
NeId string `form:"neId" binding:"required"` // 网元ID
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
ParamName string `form:"paramName" binding:"required"`
|
||||
Loc string `form:"loc" binding:"required"` // 与数据对象内index一致,有多层时划分嵌套层(index/subParamName/index)
|
||||
}
|
||||
@@ -392,16 +392,16 @@ func (s NeConfigController) DataRemove(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 检查是否array
|
||||
info := s.neConfigService.FindByNeTypeAndParamName(query.NeType, query.ParamName)
|
||||
if info.ParamType != "array" {
|
||||
c.JSON(200, resp.ErrMsg("this attribute does not support adding"))
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(query.NeType, query.NeId)
|
||||
if neInfo.NeId != query.NeId || neInfo.IP == "" {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
// 检查是否array
|
||||
info := s.neConfigService.FindByNeTypeAndParamName(neInfo.NeType, query.ParamName)
|
||||
if info.ParamType != "array" {
|
||||
c.JSON(200, resp.ErrMsg("this attribute does not support adding"))
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -137,10 +137,10 @@ func (s NeConfigBackupController) Remove(c *gin.Context) {
|
||||
func (s NeConfigBackupController) Import(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var body struct {
|
||||
NeType string `json:"neType" binding:"required"`
|
||||
NeId string `json:"neId" binding:"required"`
|
||||
Type string `json:"type" binding:"required,oneof=backup upload"` // 导入类型
|
||||
Path string `json:"path" binding:"required"` // 文件路径
|
||||
CoreUID string `json:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" binding:"required"` // 网元唯一标识
|
||||
Type string `json:"type" binding:"required,oneof=backup upload"` // 导入类型
|
||||
Path string `json:"path" binding:"required"` // 文件路径
|
||||
}
|
||||
if err := c.ShouldBindBodyWithJSON(&body); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -153,8 +153,8 @@ func (s NeConfigBackupController) Import(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查网元
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(body.NeType, body.NeId)
|
||||
if neInfo.NeId != body.NeId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
@@ -176,8 +176,8 @@ func (s NeConfigBackupController) Import(c *gin.Context) {
|
||||
func (s NeConfigBackupController) Export(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var body struct {
|
||||
NeType string `json:"neType" binding:"required"`
|
||||
NeId string `json:"neId" binding:"required"`
|
||||
CoreUID string `json:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" binding:"required"` // 网元唯一标识
|
||||
}
|
||||
if err := c.ShouldBindBodyWithJSON(&body); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -185,8 +185,8 @@ func (s NeConfigBackupController) Export(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
// 查网元
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(body.NeType, body.NeId)
|
||||
if neInfo.NeId != body.NeId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
@@ -198,8 +198,9 @@ func (s NeConfigBackupController) Export(c *gin.Context) {
|
||||
}
|
||||
// 新增备份记录
|
||||
item := model.NeConfigBackup{
|
||||
CoreUID: neInfo.CoreUID,
|
||||
NeUID: neInfo.NeUID,
|
||||
NeType: neInfo.NeType,
|
||||
NeId: neInfo.NeId,
|
||||
Name: filepath.Base(zipFilePath),
|
||||
Path: zipFilePath,
|
||||
CreateBy: reqctx.LoginUserToUserName(c),
|
||||
|
||||
@@ -52,22 +52,22 @@ var mutex sync.Mutex
|
||||
// @Router /ne/info/state [get]
|
||||
func (s NeInfoController) State(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var querys struct {
|
||||
NeType string `form:"neType" binding:"required"`
|
||||
NeId string `form:"neId" binding:"required"`
|
||||
var query struct {
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
}
|
||||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(querys.NeType, querys.NeId)
|
||||
if neInfo.NeId != querys.NeId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
neKey := fmt.Sprintf("%s_%s", neInfo.NeType, neInfo.NeId)
|
||||
neKey := fmt.Sprintf("%s_%s", neInfo.CoreUID, neInfo.NeUID)
|
||||
|
||||
// 网元直连
|
||||
resData, err := neFetchlink.NeState(neInfo)
|
||||
@@ -79,11 +79,12 @@ func (s NeInfoController) State(c *gin.Context) {
|
||||
resDataCache.(map[string]any)["online"] = false
|
||||
} else {
|
||||
resDataCache = map[string]any{
|
||||
"online": false,
|
||||
"neId": neInfo.NeId,
|
||||
"neName": neInfo.NeName,
|
||||
"neType": neInfo.NeType,
|
||||
"neIP": neInfo.IP,
|
||||
"online": false,
|
||||
"coreUid": neInfo.CoreUID,
|
||||
"neUid": neInfo.NeUID,
|
||||
"neName": neInfo.NeName,
|
||||
"neType": neInfo.NeType,
|
||||
"neIP": neInfo.IPAddr,
|
||||
}
|
||||
}
|
||||
neStateCacheMap.Store(neKey, resDataCache)
|
||||
@@ -102,7 +103,7 @@ func (s NeInfoController) State(c *gin.Context) {
|
||||
|
||||
// 网元neType和neID查询
|
||||
//
|
||||
// GET /byTypeAndID
|
||||
// GET /core-ne-uid
|
||||
//
|
||||
// @Tags network_element/info
|
||||
// @Accept json
|
||||
@@ -113,21 +114,21 @@ func (s NeInfoController) State(c *gin.Context) {
|
||||
// @Security TokenAuth
|
||||
// @Summary Network element neType and neID queries
|
||||
// @Description Network element neType and neID queries
|
||||
// @Router /ne/info/byTypeAndID [get]
|
||||
func (s NeInfoController) NeTypeAndID(c *gin.Context) {
|
||||
// @Router /ne/info/core-ne-uid [get]
|
||||
func (s NeInfoController) CoreUidAndNeUid(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var querys struct {
|
||||
NeType string `form:"neType" binding:"required"`
|
||||
NeID string `form:"neId" binding:"required"`
|
||||
var query struct {
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
}
|
||||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||||
if err := c.ShouldBindQuery(&query); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
|
||||
return
|
||||
}
|
||||
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(querys.NeType, querys.NeID)
|
||||
if neInfo.NeId != querys.NeID || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(query.CoreUID, query.NeUID)
|
||||
if neInfo.CoreUID != query.CoreUID || neInfo.NeUID != query.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
@@ -136,7 +137,7 @@ func (s NeInfoController) NeTypeAndID(c *gin.Context) {
|
||||
|
||||
// 网元信息列表全部无分页
|
||||
//
|
||||
// GET /listAll
|
||||
// GET /list/all
|
||||
//
|
||||
// @Tags network_element/info
|
||||
// @Accept json
|
||||
@@ -149,12 +150,13 @@ func (s NeInfoController) NeTypeAndID(c *gin.Context) {
|
||||
// @Security TokenAuth
|
||||
// @Summary The list of network element information is all unpaginated
|
||||
// @Description The list of network element information is all unpaginated
|
||||
// @Router /ne/info/listAll [get]
|
||||
// @Router /ne/info/list/all [get]
|
||||
func (s NeInfoController) ListAll(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var querys struct {
|
||||
CoreUID string `form:"coreUid"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid"` // 网元唯一标识
|
||||
NeType string `form:"neType"`
|
||||
NeId string `form:"neId"`
|
||||
BandStatus bool `form:"bandStatus"`
|
||||
BandHost bool `form:"bandHost"`
|
||||
}
|
||||
@@ -166,12 +168,15 @@ func (s NeInfoController) ListAll(c *gin.Context) {
|
||||
|
||||
// 查询实体参数
|
||||
ne := model.NeInfo{}
|
||||
if querys.CoreUID != "" {
|
||||
ne.CoreUID = querys.CoreUID
|
||||
}
|
||||
if querys.NeUID != "" {
|
||||
ne.NeUID = querys.NeUID
|
||||
}
|
||||
if querys.NeType != "" {
|
||||
ne.NeType = querys.NeType
|
||||
}
|
||||
if querys.NeId != "" {
|
||||
ne.NeId = querys.NeId
|
||||
}
|
||||
neList := s.neInfoService.Find(ne, querys.BandStatus, querys.BandHost)
|
||||
if len(neList) == 0 {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
@@ -182,7 +187,7 @@ func (s NeInfoController) ListAll(c *gin.Context) {
|
||||
|
||||
// 网元端Para5G配置文件读取
|
||||
//
|
||||
// GET /para5GFile
|
||||
// GET /file/para5g
|
||||
func (s NeInfoController) Para5GFileRead(c *gin.Context) {
|
||||
data, err := s.neInfoService.NeConfPara5GRead()
|
||||
if err != nil {
|
||||
@@ -194,7 +199,7 @@ func (s NeInfoController) Para5GFileRead(c *gin.Context) {
|
||||
|
||||
// 网元端Para5G配置文件写入
|
||||
//
|
||||
// PUT /para5GFile
|
||||
// PUT /file/para5g
|
||||
func (s NeInfoController) Para5GFileWrite(c *gin.Context) {
|
||||
var body struct {
|
||||
Content map[string]any `json:"content" binding:"required"` // 内容
|
||||
@@ -216,11 +221,11 @@ func (s NeInfoController) Para5GFileWrite(c *gin.Context) {
|
||||
|
||||
// 网元端OAM配置文件读取
|
||||
//
|
||||
// GET /oamFile
|
||||
// GET /file/oam
|
||||
func (s NeInfoController) OAMFileRead(c *gin.Context) {
|
||||
var querys struct {
|
||||
NeType string `form:"neType" binding:"required"`
|
||||
NeID string `form:"neId" binding:"required"`
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
}
|
||||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -228,7 +233,7 @@ func (s NeInfoController) OAMFileRead(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
data, err := s.neInfoService.NeConfOAMReadSync(querys.NeType, querys.NeID)
|
||||
data, err := s.neInfoService.NeConfOAMReadSync(querys.CoreUID, querys.NeUID)
|
||||
if err != nil {
|
||||
c.JSON(200, resp.ErrMsg(err.Error()))
|
||||
return
|
||||
@@ -238,12 +243,12 @@ func (s NeInfoController) OAMFileRead(c *gin.Context) {
|
||||
|
||||
// 网元端OAM配置文件写入
|
||||
//
|
||||
// PUT /oamFile
|
||||
// PUT /file/oam
|
||||
func (s NeInfoController) OAMFileWrite(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var body struct {
|
||||
NeType string `json:"neType" binding:"required"`
|
||||
NeID string `json:"neId" binding:"required"`
|
||||
CoreUID string `json:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" binding:"required"` // 网元唯一标识
|
||||
Content map[string]any `json:"content" binding:"required"` // 内容
|
||||
Sync bool `json:"sync"` // 同步到网元
|
||||
}
|
||||
@@ -254,8 +259,8 @@ func (s NeInfoController) OAMFileWrite(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 查询网元获取IP
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(body.NeType, body.NeID)
|
||||
if neInfo.NeId != body.NeID || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neInfo.CoreUID != body.CoreUID || neInfo.NeUID != body.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
@@ -354,10 +359,10 @@ func (s NeInfoController) Add(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 检查属性值唯一
|
||||
uniqueInfo := s.neInfoService.CheckUniqueNeTypeAndNeId(body.NeType, body.NeId, 0)
|
||||
uniqueInfo := s.neInfoService.CheckUniqueCoreIdAndNeType(body.CoreUID, body.NeUID, 0)
|
||||
if !uniqueInfo {
|
||||
// 网元信息操作【%s】失败,同类型下标识已存在
|
||||
msg := i18n.TTemplate(language, "neInfo.errKeyExists", map[string]any{"key": body.NeId})
|
||||
msg := i18n.TTemplate(language, "neInfo.errKeyExists", map[string]any{"key": body.NeUID})
|
||||
c.JSON(200, resp.ErrMsg(msg))
|
||||
return
|
||||
}
|
||||
@@ -381,14 +386,16 @@ func (s NeInfoController) Add(c *gin.Context) {
|
||||
loginUserName := reqctx.LoginUserToUserName(c)
|
||||
// 新增Version信息
|
||||
neVersion := model.NeVersion{
|
||||
CoreUID: body.CoreUID,
|
||||
NeUID: body.NeUID,
|
||||
NeType: body.NeType,
|
||||
NeId: body.NeId,
|
||||
CreateBy: loginUserName,
|
||||
}
|
||||
// 新增License信息
|
||||
neLicense := model.NeLicense{
|
||||
CoreUID: body.CoreUID,
|
||||
NeUID: body.NeUID,
|
||||
NeType: body.NeType,
|
||||
NeId: body.NeId,
|
||||
CreateBy: loginUserName,
|
||||
}
|
||||
|
||||
@@ -450,10 +457,10 @@ func (s NeInfoController) Edit(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 检查属性值唯一
|
||||
uniqueInfo := s.neInfoService.CheckUniqueNeTypeAndNeId(body.NeType, body.NeId, body.ID)
|
||||
uniqueInfo := s.neInfoService.CheckUniqueCoreIdAndNeType(body.CoreUID, body.NeUID, body.ID)
|
||||
if !uniqueInfo {
|
||||
// 网元信息操作【%s】失败,同类型下标识已存在
|
||||
msg := i18n.TTemplate(language, "neInfo.errKeyExists", map[string]any{"key": body.NeId})
|
||||
msg := i18n.TTemplate(language, "neInfo.errKeyExists", map[string]any{"key": body.NeUID})
|
||||
c.JSON(200, resp.ErrMsg(msg))
|
||||
return
|
||||
}
|
||||
@@ -490,8 +497,8 @@ func (s NeInfoController) Edit(c *gin.Context) {
|
||||
}
|
||||
|
||||
loginUserName := reqctx.LoginUserToUserName(c)
|
||||
neLicense := s.neLicenseService.FindByNeTypeAndNeID(neInfo.NeType, neInfo.NeId)
|
||||
neVersion := s.neVersionService.FindByNeTypeAndNeID(neInfo.NeType, neInfo.NeId)
|
||||
neLicense := s.neLicenseService.FindByCoreUidAndNeUid(neInfo.CoreUID, neInfo.NeUID)
|
||||
neVersion := s.neVersionService.FindByCoreUidAndNeUid(neInfo.CoreUID, neInfo.NeUID)
|
||||
|
||||
// 已有网元可获取的信息
|
||||
if body.ServerState != nil {
|
||||
@@ -515,16 +522,14 @@ func (s NeInfoController) Edit(c *gin.Context) {
|
||||
}
|
||||
|
||||
if neVersion.ID <= 0 {
|
||||
if neVersion.NeType != body.NeType || neVersion.NeId != body.NeId {
|
||||
if neVersion.NeType != body.NeType {
|
||||
neVersion.NeType = body.NeType
|
||||
neVersion.NeId = body.NeId
|
||||
}
|
||||
s.neVersionService.Update(neVersion)
|
||||
}
|
||||
if neLicense.ID <= 0 {
|
||||
if neLicense.NeType != body.NeType || neLicense.NeId != body.NeId {
|
||||
if neLicense.NeType != body.NeType {
|
||||
neLicense.NeType = body.NeType
|
||||
neLicense.NeId = body.NeId
|
||||
}
|
||||
s.neLicenseService.Update(neLicense)
|
||||
}
|
||||
|
||||
@@ -98,8 +98,8 @@ func (s *NeLicenseController) Info(c *gin.Context) {
|
||||
func (s *NeLicenseController) NeTypeAndID(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var querys struct {
|
||||
NeType string `form:"neType" binding:"required"`
|
||||
NeId string `form:"neId" binding:"required"`
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
}
|
||||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -107,8 +107,8 @@ func (s *NeLicenseController) NeTypeAndID(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
neLicense := s.neLicenseService.FindByNeTypeAndNeID(querys.NeType, querys.NeId)
|
||||
if neLicense.NeId != querys.NeId {
|
||||
neLicense := s.neLicenseService.FindByCoreUidAndNeUid(querys.CoreUID, querys.NeUID)
|
||||
if neLicense.CoreUID != querys.CoreUID || neLicense.NeUID != querys.NeUID {
|
||||
// 没有可访问网元授权激活数据!
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "neLicense.noData")))
|
||||
return
|
||||
@@ -134,8 +134,8 @@ func (s *NeLicenseController) NeTypeAndID(c *gin.Context) {
|
||||
func (s *NeLicenseController) Code(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var querys struct {
|
||||
NeType string `form:"neType" binding:"required"`
|
||||
NeId string `form:"neId" binding:"required"`
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
}
|
||||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||||
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
|
||||
@@ -144,8 +144,8 @@ func (s *NeLicenseController) Code(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 检查是否存在授权记录
|
||||
neLicense := s.neLicenseService.FindByNeTypeAndNeID(querys.NeType, querys.NeId)
|
||||
if neLicense.NeId != querys.NeId {
|
||||
neLicense := s.neLicenseService.FindByCoreUidAndNeUid(querys.CoreUID, querys.NeUID)
|
||||
if neLicense.CoreUID != querys.CoreUID || neLicense.NeUID != querys.NeUID {
|
||||
// 没有可访问网元授权激活数据!
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "neLicense.noData")))
|
||||
return
|
||||
@@ -192,8 +192,8 @@ func (s *NeLicenseController) Change(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 检查是否存在授权记录
|
||||
neLicense := s.neLicenseService.FindByNeTypeAndNeID(body.NeType, body.NeId)
|
||||
if neLicense.NeId != body.NeId {
|
||||
neLicense := s.neLicenseService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neLicense.CoreUID != body.CoreUID || neLicense.NeUID != body.NeUID {
|
||||
// 没有可访问网元授权激活数据!
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "neLicense.noData")))
|
||||
return
|
||||
@@ -237,8 +237,8 @@ func (s *NeLicenseController) Change(c *gin.Context) {
|
||||
func (s *NeLicenseController) State(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var querys struct {
|
||||
NeType string `form:"neType" binding:"required"`
|
||||
NeId string `form:"neId" binding:"required"`
|
||||
CoreUID string `form:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `form:"neUid" binding:"required"` // 网元唯一标识
|
||||
}
|
||||
if err := c.ShouldBindQuery(&querys); err != nil {
|
||||
c.JSON(400, resp.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
|
||||
@@ -246,16 +246,16 @@ func (s *NeLicenseController) State(c *gin.Context) {
|
||||
}
|
||||
|
||||
// 检查是否存在授权记录
|
||||
neLicense := s.neLicenseService.FindByNeTypeAndNeID(querys.NeType, querys.NeId)
|
||||
if neLicense.NeId != querys.NeId {
|
||||
neLicense := s.neLicenseService.FindByCoreUidAndNeUid(querys.CoreUID, querys.NeUID)
|
||||
if neLicense.CoreUID != querys.CoreUID || neLicense.NeUID != querys.NeUID {
|
||||
// 没有可访问网元授权激活数据!
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "neLicense.noData")))
|
||||
return
|
||||
}
|
||||
|
||||
// 查询网元获取IP获取网元状态
|
||||
neInfo := s.neInfoService.FindByNeTypeAndNeID(neLicense.NeType, neLicense.NeId)
|
||||
if neInfo.NeId != neLicense.NeId || neInfo.IP == "" {
|
||||
neInfo := s.neInfoService.FindByCoreUidAndNeUid(neLicense.CoreUID, neLicense.NeUID)
|
||||
if neInfo.CoreUID != neLicense.CoreUID || neInfo.NeUID != neLicense.NeUID {
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "app.common.noNEInfo")))
|
||||
return
|
||||
}
|
||||
|
||||
@@ -70,9 +70,9 @@ func (s *NeVersionController) Info(c *gin.Context) {
|
||||
func (s *NeVersionController) Operate(c *gin.Context) {
|
||||
language := reqctx.AcceptLanguage(c)
|
||||
var body struct {
|
||||
CoreUID string `json:"coreUid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" binding:"required"` // 网元唯一标识
|
||||
Action string `json:"action" binding:"required,oneof=install upgrade rollback"` // 操作行为
|
||||
NeType string `json:"neType" gorm:"ne_type" binding:"required"` // 网元类型
|
||||
NeId string `json:"neId" gorm:"ne_id" binding:"required"` // 网元ID
|
||||
Preinput map[string]string `json:"preinput" ` // 预先输入参数
|
||||
}
|
||||
if err := c.ShouldBindBodyWithJSON(&body); err != nil {
|
||||
@@ -81,8 +81,8 @@ func (s *NeVersionController) Operate(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
neVersion := s.neVersionService.FindByNeTypeAndNeID(body.NeType, body.NeId)
|
||||
if neVersion.NeId != body.NeId {
|
||||
neVersion := s.neVersionService.FindByCoreUidAndNeUid(body.CoreUID, body.NeUID)
|
||||
if neVersion.CoreUID != body.CoreUID || neVersion.NeUID != body.NeUID {
|
||||
// 没有可访问网元版本数据!
|
||||
c.JSON(200, resp.ErrMsg(i18n.TKey(language, "neVersion.noData")))
|
||||
return
|
||||
|
||||
@@ -13,7 +13,7 @@ import (
|
||||
// AlarmHistory 告警历史记录
|
||||
func AlarmHistory(neInfo model.NeInfo) ([]map[string]any, error) {
|
||||
// 网元参数配置信息
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/faultManagement/v1/elementType/%s/objectType/alarms", neInfo.IP, neInfo.Port, strings.ToLower(neInfo.NeType))
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/faultManagement/v1/elementType/%s/objectType/alarms", neInfo.IPAddr, neInfo.Port, strings.ToLower(neInfo.NeType))
|
||||
resBytes, err := fetch.Get(neUrl, nil, 60_000)
|
||||
var resData []map[string]any
|
||||
if err != nil {
|
||||
|
||||
@@ -16,7 +16,7 @@ import (
|
||||
//
|
||||
// 返回结果 []
|
||||
func AMFNbInfoList(neInfo model.NeInfo, data map[string]string) ([]map[string]any, error) {
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/amf/objectType/nbInfo", neInfo.IP, neInfo.Port)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/amf/objectType/nbInfo", neInfo.IPAddr, neInfo.Port)
|
||||
// 查询参数拼接
|
||||
query := []string{}
|
||||
if v, ok := data["id"]; ok && v != "" {
|
||||
@@ -59,7 +59,7 @@ func AMFNbInfoList(neInfo model.NeInfo, data map[string]string) ([]map[string]an
|
||||
//
|
||||
// 返回结果 []
|
||||
func AMFGnbStateList(neInfo model.NeInfo) ([]map[string]any, error) {
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/amf/objectType/nbState", neInfo.IP, neInfo.Port)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/amf/objectType/nbState", neInfo.IPAddr, neInfo.Port)
|
||||
resBytes, err := fetch.Get(neUrl, nil, 60_000)
|
||||
if err != nil {
|
||||
errStr := err.Error()
|
||||
|
||||
@@ -18,7 +18,7 @@ import (
|
||||
// data参数 {traceID:"跟踪任务ID", imsi:"IMSI和MSISDN必填一个,都带的话以IMSI为准", msisdn:""}
|
||||
func HLRTraceStart(neInfo model.NeInfo, data map[string]any) (string, error) {
|
||||
// 网元参数配置新增(array)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/trace-manage/v1/add-task", neInfo.IP, neInfo.Port)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/trace-manage/v1/add-task", neInfo.IPAddr, neInfo.Port)
|
||||
resBytes, err := fetch.PostJSON(neUrl, data, nil)
|
||||
var resData map[string]string
|
||||
if err != nil {
|
||||
@@ -45,7 +45,7 @@ func HLRTraceStart(neInfo model.NeInfo, data map[string]any) (string, error) {
|
||||
// data参数 {traceIDArray: ["跟踪任务ID数组"]}
|
||||
func HLRTraceStop(neInfo model.NeInfo, data map[string]any) (string, error) {
|
||||
// 网元参数配置新增(array)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/trace-manage/v1/delete-task", neInfo.IP, neInfo.Port)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/trace-manage/v1/delete-task", neInfo.IPAddr, neInfo.Port)
|
||||
resBytes, err := fetch.PostJSON(neUrl, data, nil)
|
||||
var resData map[string]string
|
||||
if err != nil {
|
||||
|
||||
@@ -15,7 +15,7 @@ import (
|
||||
//
|
||||
// 返回结果 0
|
||||
func IMSUeSessionNum(neInfo model.NeInfo) (int64, error) {
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/ims/objectType/ueNum", neInfo.IP, neInfo.Port)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/ims/objectType/ueNum", neInfo.IPAddr, neInfo.Port)
|
||||
resBytes, err := fetch.Get(neUrl, nil, 60_000)
|
||||
if err != nil {
|
||||
errStr := err.Error()
|
||||
@@ -47,7 +47,7 @@ func IMSUeSessionNum(neInfo model.NeInfo) (int64, error) {
|
||||
//
|
||||
// 返回结果 []
|
||||
func IMSUeSessionList(neInfo model.NeInfo, data map[string]string) ([]map[string]any, error) {
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/ims/objectType/ueInfo", neInfo.IP, neInfo.Port)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/ims/objectType/ueInfo", neInfo.IPAddr, neInfo.Port)
|
||||
// 查询参数拼接
|
||||
query := []string{}
|
||||
if v, ok := data["imsi"]; ok && v != "" {
|
||||
|
||||
@@ -16,7 +16,7 @@ import (
|
||||
//
|
||||
// 返回结果 []
|
||||
func MMENbInfoList(neInfo model.NeInfo, data map[string]string) ([]map[string]any, error) {
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/mme/objectType/nbInfo", neInfo.IP, neInfo.Port)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/mme/objectType/nbInfo", neInfo.IPAddr, neInfo.Port)
|
||||
// 查询参数拼接
|
||||
query := []string{}
|
||||
if v, ok := data["id"]; ok && v != "" {
|
||||
@@ -59,7 +59,7 @@ func MMENbInfoList(neInfo model.NeInfo, data map[string]string) ([]map[string]an
|
||||
//
|
||||
// 返回结果 []
|
||||
func MMEEnbStateList(neInfo model.NeInfo) ([]map[string]any, error) {
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/mme/objectType/nbState", neInfo.IP, neInfo.Port)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/mme/objectType/nbState", neInfo.IPAddr, neInfo.Port)
|
||||
resBytes, err := fetch.Get(neUrl, nil, 60_000)
|
||||
if err != nil {
|
||||
errStr := err.Error()
|
||||
|
||||
@@ -13,14 +13,14 @@ import (
|
||||
// NeConfigOMC 网元配置对端网管信息
|
||||
func NeConfigOMC(neInfo model.NeInfo) (map[string]any, error) {
|
||||
// 网元配置对端网管信息
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/config/omcNeConfig", neInfo.IP, neInfo.Port, strings.ToLower(neInfo.NeType))
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/config/omcNeConfig", neInfo.IPAddr, neInfo.Port, strings.ToLower(neInfo.NeType))
|
||||
resBytes, err := fetch.PutJSON(neUrl, map[string]any{
|
||||
"neId": neInfo.NeId,
|
||||
"neId": neInfo.ID,
|
||||
"neName": neInfo.NeName,
|
||||
"port": neInfo.Port,
|
||||
"province": neInfo.Province,
|
||||
"pvFlag": neInfo.PvFlag,
|
||||
"rmUID": neInfo.RmUID,
|
||||
"rmUID": neInfo.NeUID,
|
||||
"vendorName": neInfo.VendorName,
|
||||
"dn": neInfo.Dn,
|
||||
}, nil)
|
||||
@@ -53,7 +53,7 @@ func NeConfigOMC(neInfo model.NeInfo) (map[string]any, error) {
|
||||
// NeConfigInfo 网元配置信息
|
||||
func NeConfigInfo(neInfo model.NeInfo, paramName string) (map[string]any, error) {
|
||||
// 网元参数配置信息
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/config/%s", neInfo.IP, neInfo.Port, strings.ToLower(neInfo.NeType), paramName)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/config/%s", neInfo.IPAddr, neInfo.Port, strings.ToLower(neInfo.NeType), paramName)
|
||||
resBytes, err := fetch.Get(neUrl, nil, 30_000)
|
||||
if err != nil {
|
||||
logger.Warnf("NeConfigInfo Get \"%s\"", neUrl)
|
||||
@@ -82,7 +82,7 @@ func NeConfigUpdate(neInfo model.NeInfo, paramName, loc string, data map[string]
|
||||
loc = fmt.Sprintf("?loc=%v", loc)
|
||||
}
|
||||
// 网元参数配置新增(array)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/config/%s%s", neInfo.IP, neInfo.Port, strings.ToLower(neInfo.NeType), paramName, loc)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/config/%s%s", neInfo.IPAddr, neInfo.Port, strings.ToLower(neInfo.NeType), paramName, loc)
|
||||
resBytes, err := fetch.PutJSON(neUrl, data, nil)
|
||||
var resData map[string]any
|
||||
if err != nil {
|
||||
@@ -112,7 +112,7 @@ func NeConfigUpdate(neInfo model.NeInfo, paramName, loc string, data map[string]
|
||||
// NeConfigAdd 网元配置新增 array
|
||||
func NeConfigAdd(neInfo model.NeInfo, paramName, loc string, data map[string]any) (map[string]any, error) {
|
||||
// 网元参数配置新增(array)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/config/%s?loc=%v", neInfo.IP, neInfo.Port, strings.ToLower(neInfo.NeType), paramName, loc)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/config/%s?loc=%v", neInfo.IPAddr, neInfo.Port, strings.ToLower(neInfo.NeType), paramName, loc)
|
||||
resBytes, err := fetch.PostJSON(neUrl, data, nil)
|
||||
var resData map[string]any
|
||||
if err != nil {
|
||||
@@ -142,7 +142,7 @@ func NeConfigAdd(neInfo model.NeInfo, paramName, loc string, data map[string]any
|
||||
// NeConfigDelete 网元配置删除 array
|
||||
func NeConfigDelete(neInfo model.NeInfo, paramName, loc string) (map[string]any, error) {
|
||||
// 网元参数配置删除(array)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/config/%s?loc=%v", neInfo.IP, neInfo.Port, strings.ToLower(neInfo.NeType), paramName, loc)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/config/%s?loc=%v", neInfo.IPAddr, neInfo.Port, strings.ToLower(neInfo.NeType), paramName, loc)
|
||||
resBytes, err := fetch.Delete(neUrl, nil)
|
||||
var resData map[string]any
|
||||
if err != nil {
|
||||
|
||||
@@ -14,7 +14,7 @@ import (
|
||||
// NeState 获取网元端服务状态
|
||||
func NeState(neInfo model.NeInfo) (map[string]any, error) {
|
||||
// 网元状态
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", neInfo.IP, neInfo.Port, strings.ToLower(neInfo.NeType))
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/systemManagement/v1/elementType/%s/objectType/systemState", neInfo.IPAddr, neInfo.Port, strings.ToLower(neInfo.NeType))
|
||||
resBytes, err := fetch.Get(neUrl, nil, 1000)
|
||||
if err != nil {
|
||||
logger.Errorf("NeState %s", err.Error())
|
||||
@@ -40,10 +40,11 @@ func NeState(neInfo model.NeInfo) (map[string]any, error) {
|
||||
}
|
||||
|
||||
return map[string]any{
|
||||
"coreUid": neInfo.CoreUID,
|
||||
"neUid": neInfo.NeUID,
|
||||
"neType": neInfo.NeType,
|
||||
"neId": neInfo.NeId,
|
||||
"neName": neInfo.NeName,
|
||||
"neIP": neInfo.IP,
|
||||
"neIP": neInfo.IPAddr,
|
||||
"refreshTime": time.Now().UnixMilli(), // 获取时间
|
||||
"standby": resData["standby"], // 是否备用服务
|
||||
"version": resData["version"],
|
||||
|
||||
@@ -13,7 +13,7 @@ import (
|
||||
// NeTraceAdd 网元跟踪任务新增
|
||||
func NeTraceAdd(neInfo model.NeInfo, data any) (map[string]any, error) {
|
||||
// 跟踪任务创建
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/traceManagement/v2/%s/subscriptions", neInfo.IP, neInfo.Port, neInfo.NeType)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/traceManagement/v2/%s/subscriptions", neInfo.IPAddr, neInfo.Port, neInfo.NeType)
|
||||
resBytes, err := fetch.PostJSON(neUrl, data, nil)
|
||||
var resData map[string]any
|
||||
if err != nil {
|
||||
@@ -41,7 +41,7 @@ func NeTraceAdd(neInfo model.NeInfo, data any) (map[string]any, error) {
|
||||
|
||||
// NeTraceDelete 网元跟踪任务删除
|
||||
func NeTraceDelete(neInfo model.NeInfo, traceId string) (map[string]any, error) {
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/traceManagement/v2/%s/subscriptions?id=%s", neInfo.IP, neInfo.Port, neInfo.NeType, traceId)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/traceManagement/v2/%s/subscriptions?id=%s", neInfo.IPAddr, neInfo.Port, neInfo.NeType, traceId)
|
||||
resBytes, err := fetch.Delete(neUrl, nil)
|
||||
var resData map[string]any
|
||||
if err != nil {
|
||||
|
||||
@@ -12,7 +12,7 @@ import (
|
||||
|
||||
// PCFRuleInfo PCF策略配置查询信息
|
||||
func PCFRuleInfo(neInfo model.NeInfo, data map[string]string) ([]map[string]any, error) {
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo", neInfo.IP, neInfo.Port)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo", neInfo.IPAddr, neInfo.Port)
|
||||
// 查询参数拼接
|
||||
query := []string{}
|
||||
if v, ok := data["imsi"]; ok && v != "" {
|
||||
@@ -56,7 +56,7 @@ func PCFRuleInfo(neInfo model.NeInfo, data map[string]string) ([]map[string]any,
|
||||
|
||||
// PCFRuleAdd PCF策略配置添加
|
||||
func PCFRuleAdd(neInfo model.NeInfo, data any) error {
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo", neInfo.IP, neInfo.Port)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo", neInfo.IPAddr, neInfo.Port)
|
||||
resBytes, err := fetch.PostJSON(neUrl, data, nil)
|
||||
if err != nil {
|
||||
errStr := err.Error()
|
||||
@@ -85,7 +85,7 @@ func PCFRuleAdd(neInfo model.NeInfo, data any) error {
|
||||
|
||||
// PCFRuleAddBatch PCF策略配置批量添加
|
||||
func PCFRuleAddBatch(neInfo model.NeInfo, data map[string]any, num int64) error {
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo/batch/%d", neInfo.IP, neInfo.Port, num)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo/batch/%d", neInfo.IPAddr, neInfo.Port, num)
|
||||
resBytes, err := fetch.PostJSON(neUrl, data, nil)
|
||||
if err != nil {
|
||||
errStr := err.Error()
|
||||
@@ -114,7 +114,7 @@ func PCFRuleAddBatch(neInfo model.NeInfo, data map[string]any, num int64) error
|
||||
|
||||
// PCFRuleUpdate PCF策略配置修改
|
||||
func PCFRuleUpdate(neInfo model.NeInfo, data map[string]any) error {
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo", neInfo.IP, neInfo.Port)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo", neInfo.IPAddr, neInfo.Port)
|
||||
resBytes, err := fetch.PutJSON(neUrl, data, nil)
|
||||
if err != nil {
|
||||
errStr := err.Error()
|
||||
@@ -139,7 +139,7 @@ func PCFRuleUpdate(neInfo model.NeInfo, data map[string]any) error {
|
||||
|
||||
// PCFRuleUpdateBatch PCF策略配置批量修改
|
||||
func PCFRuleUpdateBatch(neInfo model.NeInfo, data map[string]any, num int64) error {
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo/batch/%d", neInfo.IP, neInfo.Port, num)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo/batch/%d", neInfo.IPAddr, neInfo.Port, num)
|
||||
resBytes, err := fetch.PutJSON(neUrl, data, nil)
|
||||
if err != nil {
|
||||
errStr := err.Error()
|
||||
@@ -164,7 +164,7 @@ func PCFRuleUpdateBatch(neInfo model.NeInfo, data map[string]any, num int64) err
|
||||
|
||||
// PCFRuleDelete PCF策略配置删除
|
||||
func PCFRuleDelete(neInfo model.NeInfo, imsi string) error {
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo?imsi=%s", neInfo.IP, neInfo.Port, imsi)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo?imsi=%s", neInfo.IPAddr, neInfo.Port, imsi)
|
||||
resBytes, err := fetch.Delete(neUrl, nil)
|
||||
if err != nil {
|
||||
errStr := err.Error()
|
||||
@@ -193,7 +193,7 @@ func PCFRuleDelete(neInfo model.NeInfo, imsi string) error {
|
||||
|
||||
// PCFRuleDeleteBatch PCF策略配置批量删除
|
||||
func PCFRuleDeleteBatch(neInfo model.NeInfo, imsi string, num int64) error {
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo/batch/%d?imsi=%s", neInfo.IP, neInfo.Port, num, imsi)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo/batch/%d?imsi=%s", neInfo.IPAddr, neInfo.Port, num, imsi)
|
||||
resBytes, err := fetch.Delete(neUrl, nil)
|
||||
if err != nil {
|
||||
errStr := err.Error()
|
||||
@@ -222,7 +222,7 @@ func PCFRuleDeleteBatch(neInfo model.NeInfo, imsi string, num int64) error {
|
||||
|
||||
// PCFRuleExport PCF策略配置导出
|
||||
func PCFRuleExport(neInfo model.NeInfo, data map[string]string) ([]byte, error) {
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo/file/export", neInfo.IP, neInfo.Port)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo/file/export", neInfo.IPAddr, neInfo.Port)
|
||||
// 查询参数拼接
|
||||
query := []string{}
|
||||
if v, ok := data["fileType"]; ok && v != "" {
|
||||
@@ -243,7 +243,7 @@ func PCFRuleExport(neInfo model.NeInfo, data map[string]string) ([]byte, error)
|
||||
|
||||
// PCFRuleImport PCF策略配置导入
|
||||
func PCFRuleImport(neInfo model.NeInfo, data map[string]any) (string, error) {
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo/file/import", neInfo.IP, neInfo.Port)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/pcf/objectType/ueInfo/file/import", neInfo.IPAddr, neInfo.Port)
|
||||
resBytes, err := fetch.PutJSON(neUrl, data, nil)
|
||||
var resData map[string]any
|
||||
if err != nil {
|
||||
|
||||
@@ -15,7 +15,7 @@ import (
|
||||
//
|
||||
// 返回结果 0
|
||||
func SMFSubNum(neInfo model.NeInfo) (int64, error) {
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/smf/objectType/ueNum", neInfo.IP, neInfo.Port)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/smf/objectType/ueNum", neInfo.IPAddr, neInfo.Port)
|
||||
resBytes, err := fetch.Get(neUrl, nil, 60_000)
|
||||
if err != nil {
|
||||
errStr := err.Error()
|
||||
@@ -47,7 +47,7 @@ func SMFSubNum(neInfo model.NeInfo) (int64, error) {
|
||||
//
|
||||
// 返回结果 {"rows":[],"total":0}
|
||||
func SMFSubInfoList(neInfo model.NeInfo, data map[string]string) (map[string]any, error) {
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/smf/objectType/ueInfo", neInfo.IP, neInfo.Port)
|
||||
neUrl := fmt.Sprintf("http://%s:%d/api/rest/ueManagement/v1/elementType/smf/objectType/ueInfo", neInfo.IPAddr, neInfo.Port)
|
||||
// 查询参数拼接
|
||||
query := []string{}
|
||||
if v, ok := data["imsi"]; ok && v != "" {
|
||||
|
||||
20
src/modules/network_element/model/core_info.go
Normal file
20
src/modules/network_element/model/core_info.go
Normal file
@@ -0,0 +1,20 @@
|
||||
package model
|
||||
|
||||
// CoreInfo 核心网_基础信息 core_info
|
||||
type CoreInfo struct {
|
||||
ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 核心网ID
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid"` // 核心网唯一标识
|
||||
CoreName string `json:"coreName" gorm:"column:core_name"` // 核心网名称
|
||||
CoreSN string `json:"coreSN" gorm:"column:core_sn"` // 核心网序列号
|
||||
OmcId string `json:"omcId" gorm:"column:omc_id"` // OMC安装生成的唯一编码
|
||||
Remark string `json:"remark" gorm:"column:remark"` // 备注
|
||||
CreateBy string `json:"createBy" gorm:"column:create_by"` // 创建者
|
||||
CreateTime int64 `json:"createTime" gorm:"column:create_time"` // 创建时间
|
||||
UpdateBy string `json:"updateBy" gorm:"column:update_by"` // 更新者
|
||||
UpdateTime int64 `json:"updateTime" gorm:"column:update_time"` // 更新时间
|
||||
}
|
||||
|
||||
// TableName 表名称
|
||||
func (*CoreInfo) TableName() string {
|
||||
return "core_info"
|
||||
}
|
||||
@@ -3,15 +3,16 @@ package model
|
||||
// NeConfigBackup 网元配置文件备份记录 ne_config_backup
|
||||
type NeConfigBackup struct {
|
||||
ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
NeType string `json:"neType" gorm:"column:ne_type"` // 网元类型
|
||||
NeId string `json:"neId" gorm:"column:ne_id"` // 网元ID
|
||||
Name string `json:"name" gorm:"column:name"` // 压缩包名称
|
||||
Path string `json:"path" gorm:"column:path"` // 压缩包位置
|
||||
Remark string `json:"remark" gorm:"column:remark"` // 备注
|
||||
CreateBy string `json:"createBy" gorm:"column:create_by"` // 创建者
|
||||
CreateTime int64 `json:"createTime" gorm:"column:create_time"` // 创建时间
|
||||
UpdateBy string `json:"updateBy" gorm:"column:update_by"` // 更新者
|
||||
UpdateTime int64 `json:"updateTime" gorm:"column:update_time"` // 更新时间
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid" binding:"required"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type" binding:"required"` // 网元类型
|
||||
Name string `json:"name" gorm:"column:name"` // 压缩包名称
|
||||
Path string `json:"path" gorm:"column:path"` // 压缩包位置
|
||||
Remark string `json:"remark" gorm:"column:remark"` // 备注
|
||||
CreateBy string `json:"createBy" gorm:"column:create_by"` // 创建者
|
||||
CreateTime int64 `json:"createTime" gorm:"column:create_time"` // 创建时间
|
||||
UpdateBy string `json:"updateBy" gorm:"column:update_by"` // 更新者
|
||||
UpdateTime int64 `json:"updateTime" gorm:"column:update_time"` // 更新时间
|
||||
|
||||
// ====== 非数据库字段属性 ======
|
||||
|
||||
|
||||
@@ -2,18 +2,18 @@ package model
|
||||
|
||||
// NeInfo 网元信息对象 ne_info
|
||||
type NeInfo struct {
|
||||
ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 网元ID
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid" binding:"required"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type" binding:"required"` // 网元类型
|
||||
NeId string `json:"neId" gorm:"column:ne_id" binding:"required"` // 网元ID
|
||||
RmUID string `json:"rmUid" gorm:"column:rm_uid"` // 网元资源唯一标识
|
||||
NeName string `json:"neName" gorm:"column:ne_name"` // 网元名称
|
||||
IP string `json:"ip" gorm:"column:ip" binding:"required"` // 网元服务IP
|
||||
IPAddr string `json:"ipAddr" gorm:"column:ip_addr" binding:"required"` // 网元服务IP
|
||||
Port int64 `json:"port" gorm:"column:port" binding:"required,number,max=65535,min=1"` // 端口
|
||||
PvFlag string `json:"pvFlag" gorm:"column:pv_flag" binding:"omitempty,oneof=PNF VNF"` // 网元虚拟化标识 物理PNF 虚拟VNF
|
||||
Province string `json:"province" gorm:"column:province"` // 省份地域
|
||||
VendorName string `json:"vendorName" gorm:"column:vendor_name"` // 厂商名称
|
||||
Dn string `json:"dn" gorm:"column:dn"` // 网络标识
|
||||
NeAddress string `json:"neAddress" gorm:"column:ne_address"` // MAC地址
|
||||
MacAddr string `json:"macAddr" gorm:"column:mac_addr"` // MAC地址
|
||||
HostIDs string `json:"hostIds" gorm:"column:host_ids"` // 网元主机ID组 数据格式(ssh,telnet) UDM(ssh,telnet,redis) UPF(ssh,telnet,telnet)
|
||||
Status int64 `json:"status" gorm:"column:status"` // 网元状态 0离线 1在线 2配置待下发 3备用模式
|
||||
Remark string `json:"remark" gorm:"column:remark"` // 备注
|
||||
|
||||
@@ -3,11 +3,12 @@ package model
|
||||
// NeLicense 网元授权激活信息 ne_license
|
||||
type NeLicense struct {
|
||||
ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid" binding:"required"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type" binding:"required"` // 网元类型
|
||||
NeId string `json:"neId" gorm:"column:ne_id" binding:"required"` // 网元ID
|
||||
ActivationRequestCode string `json:"activationRequestCode" gorm:"column:activation_request_code"` // 激活申请代码
|
||||
LicensePath string `json:"licensePath" gorm:"column:license_path"` // 激活授权文件
|
||||
Capability int64 `json:"capability" gorm:"column:capability"` // 容量
|
||||
Capability int64 `json:"capability" gorm:"column:capability"` // 容量 仅AMF/MME/UDM限制
|
||||
SerialNum string `json:"serialNum" gorm:"column:serial_num"` // 序列号
|
||||
ExpiryDate string `json:"expiryDate" gorm:"column:expiry_date"` // 许可证到期日期
|
||||
Status string `json:"status" gorm:"column:status"` // 状态 0无效 1有效
|
||||
|
||||
@@ -3,22 +3,23 @@ package model
|
||||
// NeVersion 网元版本信息 ne_version
|
||||
type NeVersion struct {
|
||||
ID int64 `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
NeType string `json:"neType" gorm:"column:ne_type" binding:"required"` // 网元类型
|
||||
NeId string `json:"neId" gorm:"column:ne_id" binding:"required"` // 网元ID
|
||||
Name string `json:"name" gorm:"column:name"` // 当前包名
|
||||
Version string `json:"version" gorm:"column:version" binding:"required"` // 当前版本
|
||||
Path string `json:"path" gorm:"column:path" binding:"required"` // 当前软件包
|
||||
PreName string `json:"preName" gorm:"column:pre_name"` // 上一版本包名
|
||||
PreVersion string `json:"preVersion" gorm:"column:pre_version"` // 上一版本
|
||||
PrePath string `json:"prePath" gorm:"column:pre_path"` // 上一版本软件包
|
||||
NewName string `json:"newName" gorm:"column:new_name"` // 新版本包名
|
||||
NewVersion string `json:"newVersion" gorm:"column:new_version"` // 新版本
|
||||
NewPath string `json:"newPath" gorm:"column:new_path"` // 新版本软件包
|
||||
Status string `json:"status" gorm:"column:status"` // 当前状态 1当前版本 2上一版本 3有新版本
|
||||
CreateBy string `json:"createBy" gorm:"column:create_by"` // 创建者
|
||||
CreateTime int64 `json:"createTime" gorm:"column:create_time"` // 创建时间
|
||||
UpdateBy string `json:"updateBy" gorm:"column:update_by"` // 更新者
|
||||
UpdateTime int64 `json:"updateTime" gorm:"column:update_time"` // 更新时间
|
||||
CoreUID string `json:"coreUid" gorm:"column:core_uid" binding:"required"` // 核心网唯一标识
|
||||
NeUID string `json:"neUid" gorm:"column:ne_uid" binding:"required"` // 网元唯一标识
|
||||
NeType string `json:"neType" gorm:"column:ne_type" binding:"required"` // 网元类型
|
||||
Name string `json:"name" gorm:"column:name"` // 当前包名
|
||||
Version string `json:"version" gorm:"column:version" binding:"required"` // 当前版本
|
||||
Path string `json:"path" gorm:"column:path" binding:"required"` // 当前软件包
|
||||
PreName string `json:"preName" gorm:"column:pre_name"` // 上一版本包名
|
||||
PreVersion string `json:"preVersion" gorm:"column:pre_version"` // 上一版本
|
||||
PrePath string `json:"prePath" gorm:"column:pre_path"` // 上一版本软件包
|
||||
NewName string `json:"newName" gorm:"column:new_name"` // 新版本包名
|
||||
NewVersion string `json:"newVersion" gorm:"column:new_version"` // 新版本
|
||||
NewPath string `json:"newPath" gorm:"column:new_path"` // 新版本软件包
|
||||
Status string `json:"status" gorm:"column:status"` // 当前状态 1当前版本 2上一版本 3有新版本
|
||||
CreateBy string `json:"createBy" gorm:"column:create_by"` // 创建者
|
||||
CreateTime int64 `json:"createTime" gorm:"column:create_time"` // 创建时间
|
||||
UpdateBy string `json:"updateBy" gorm:"column:update_by"` // 更新者
|
||||
UpdateTime int64 `json:"updateTime" gorm:"column:update_time"` // 更新时间
|
||||
}
|
||||
|
||||
// TableName 表名称
|
||||
|
||||
@@ -55,28 +55,28 @@ func Setup(router *gin.Engine) {
|
||||
middleware.AuthorizeUser(nil),
|
||||
controller.NewNeInfo.State,
|
||||
)
|
||||
neInfoGroup.GET("/byTypeAndID",
|
||||
neInfoGroup.GET("/core-ne-uid",
|
||||
middleware.AuthorizeUser(nil),
|
||||
controller.NewNeInfo.NeTypeAndID,
|
||||
controller.NewNeInfo.CoreUidAndNeUid,
|
||||
)
|
||||
neInfoGroup.GET("/listAll",
|
||||
neInfoGroup.GET("/list/all",
|
||||
middleware.AuthorizeUser(nil),
|
||||
controller.NewNeInfo.ListAll,
|
||||
)
|
||||
neInfoGroup.GET("/para5GFile",
|
||||
neInfoGroup.GET("/file/para5g",
|
||||
middleware.AuthorizeUser(nil),
|
||||
controller.NewNeInfo.Para5GFileRead,
|
||||
)
|
||||
neInfoGroup.PUT("/para5GFile",
|
||||
neInfoGroup.PUT("/file/para5g",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neInfo", collectlogs.BUSINESS_TYPE_OTHER)),
|
||||
controller.NewNeInfo.Para5GFileWrite,
|
||||
)
|
||||
neInfoGroup.GET("/oamFile",
|
||||
neInfoGroup.GET("/file/oam",
|
||||
middleware.AuthorizeUser(nil),
|
||||
controller.NewNeInfo.OAMFileRead,
|
||||
)
|
||||
neInfoGroup.PUT("/oamFile",
|
||||
neInfoGroup.PUT("/file/oam",
|
||||
middleware.AuthorizeUser(nil),
|
||||
collectlogs.OperateLog(collectlogs.OptionNew("log.operate.title.neInfo", collectlogs.BUSINESS_TYPE_OTHER)),
|
||||
controller.NewNeInfo.OAMFileWrite,
|
||||
@@ -357,8 +357,8 @@ func Setup(router *gin.Engine) {
|
||||
// InitLoad 初始参数
|
||||
func InitLoad() {
|
||||
// 启动时,清除缓存-网元类型
|
||||
service.NewNeInfo.ClearNeCacheByNeType("*")
|
||||
service.NewNeInfo.FindByRmuid("")
|
||||
service.NewNeInfo.ClearNeCacheByCoreUid("*")
|
||||
service.NewNeInfo.RefreshNeCacheByCoreUid("*")
|
||||
// 启动时,网元公共参数数据记录到全局变量
|
||||
if para5GMap, err := service.NewNeInfo.NeConfPara5GRead(); para5GMap != nil && err == nil {
|
||||
service.NewNeInfo.NeConfPara5GWirte(para5GMap, nil)
|
||||
|
||||
@@ -68,11 +68,11 @@ func (r NeInfo) SelectByPage(query map[string]string) ([]model.NeInfo, int64) {
|
||||
if v, ok := query["neType"]; ok && v != "" {
|
||||
tx = tx.Where("ne_type = ?", v)
|
||||
}
|
||||
if v, ok := query["neId"]; ok && v != "" {
|
||||
tx = tx.Where("ne_id = ?", v)
|
||||
if v, ok := query["coreUid"]; ok && v != "" {
|
||||
tx = tx.Where("core_uid = ?", v)
|
||||
}
|
||||
if v, ok := query["rmUid"]; ok && v != "" {
|
||||
tx = tx.Where("rmUid like ?", fmt.Sprintf("%s%%", v))
|
||||
if v, ok := query["neUid"]; ok && v != "" {
|
||||
tx = tx.Where("neUid like ?", fmt.Sprintf("%s%%", v))
|
||||
}
|
||||
|
||||
// 查询结果
|
||||
@@ -87,7 +87,7 @@ func (r NeInfo) SelectByPage(query map[string]string) ([]model.NeInfo, int64) {
|
||||
// 查询数据分页
|
||||
pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"])
|
||||
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
|
||||
err := tx.Order("ne_type asc, ne_id asc").Find(&rows).Error
|
||||
err := tx.Order("ne_type asc").Find(&rows).Error
|
||||
if err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows, total
|
||||
@@ -168,24 +168,31 @@ func (r NeInfo) SelectList(neInfo model.NeInfo) []model.NeInfo {
|
||||
if neInfo.NeType != "" {
|
||||
tx = tx.Where("ne_type = ?", neInfo.NeType)
|
||||
}
|
||||
if neInfo.NeId != "" {
|
||||
tx = tx.Where("ne_id = ?", neInfo.NeId)
|
||||
if neInfo.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", neInfo.CoreUID)
|
||||
}
|
||||
if neInfo.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", neInfo.NeUID)
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
rows := []model.NeInfo{}
|
||||
if err := tx.Order("ne_type asc, ne_id asc").Find(&rows).Error; err != nil {
|
||||
if err := tx.Order("ne_type asc").Find(&rows).Error; err != nil {
|
||||
logger.Errorf("query find err => %v", err.Error())
|
||||
return rows
|
||||
}
|
||||
return r.neListSort(rows)
|
||||
}
|
||||
|
||||
// SelectNeInfoByNeTypeAndNeID 通过ne_type和ne_id查询网元信息
|
||||
func (r NeInfo) SelectNeInfoByNeTypeAndNeID(neType, neID string) model.NeInfo {
|
||||
// SelectNeInfoByCoreUidAndNeUid 通过core_uid和ne_uid查询网元信息
|
||||
func (r NeInfo) SelectNeInfoByCoreUidAndNeUid(coreUid, neUid string) model.NeInfo {
|
||||
tx := db.DB("").Model(&model.NeInfo{})
|
||||
// 构建查询条件
|
||||
tx = tx.Where("ne_type = ? and ne_id = ?", neType, neID)
|
||||
if coreUid == "*" || coreUid == "" {
|
||||
tx = tx.Where("ne_uid = ?", neUid)
|
||||
} else {
|
||||
tx = tx.Where("core_uid = ? and ne_uid = ?", coreUid, neUid)
|
||||
}
|
||||
// 查询数据
|
||||
row := model.NeInfo{}
|
||||
if err := tx.Limit(1).Find(&row).Error; err != nil {
|
||||
@@ -195,15 +202,18 @@ func (r NeInfo) SelectNeInfoByNeTypeAndNeID(neType, neID string) model.NeInfo {
|
||||
return row
|
||||
}
|
||||
|
||||
// CheckUniqueNeTypeAndNeId 校验同类型下标识是否唯一
|
||||
func (r NeInfo) CheckUniqueNeTypeAndNeId(neInfo model.NeInfo) int64 {
|
||||
// CheckUniqueCoreIdAndNeType 校验同类型下标识是否唯一
|
||||
func (r NeInfo) CheckUniqueCoreIdAndNeType(neInfo model.NeInfo) int64 {
|
||||
tx := db.DB("").Model(&model.NeInfo{})
|
||||
// 查询条件拼接
|
||||
if neInfo.NeType != "" {
|
||||
tx = tx.Where("ne_type = ?", neInfo.NeType)
|
||||
}
|
||||
if neInfo.NeId != "" {
|
||||
tx = tx.Where("ne_id = ?", neInfo.NeType)
|
||||
if neInfo.CoreUID != "" {
|
||||
tx = tx.Where("core_uid = ?", neInfo.CoreUID)
|
||||
}
|
||||
if neInfo.NeUID != "" {
|
||||
tx = tx.Where("ne_uid = ?", neInfo.NeUID)
|
||||
}
|
||||
// 查询数据
|
||||
var id int64 = 0
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user