Merge remote-tracking branch 'origin/main-v2' into lichang

This commit is contained in:
TsMask
2025-06-26 17:29:49 +08:00
16 changed files with 718 additions and 854 deletions

View File

@@ -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.ID)
neTypeAndId := fmt.Sprintf("%s_%s", neInfo.NeType, neInfo.NeUID)
// 将网元文件备份到本地
zipFilePath, err := s.neConfigBackupService.FileNeToLocal(neInfo)
if err != nil {
@@ -63,7 +63,7 @@ func (s *NeConfigBackupProcessor) Execute(data any) (any, error) {
msg := "ok"
// 上传到FTP服务器
if err := s.backupService.FTPPushFile(zipFilePath, "ne_config"); err != nil {
if err := s.backupService.FTPPushFile(zipFilePath, ""); err != nil {
result[neTypeAndId] = msg + ", ftp err:" + err.Error()
}
result[neTypeAndId] = msg

View File

@@ -25,7 +25,7 @@ const (
DbPort = 13306
DbUser = "root"
DbPassswd = "1000omc@kp!"
DbName = "omc_db_lichang"
DbName = "omc_db_mainv2"
// 配置文件路径
configParamDir = "../../../local/param"
// configParamFile = "*" // 目录下全部更新

View File

@@ -101,7 +101,8 @@ func (s NeConfigBackup) FileLocalToNe(neInfo model.NeInfo, localFile string) err
}
// 配置复制到网元内
if neTypeLower == "ims" {
switch neTypeLower {
case "ims":
// ims目录
imsDirArr := [...]string{"bgcf", "icscf", "ismc", "mmtel", "mrf", "oam_manager.yaml", "pcscf", "scscf", "vars.cfg", "zlog"}
for _, v := range imsDirArr {
@@ -113,10 +114,10 @@ func (s NeConfigBackup) FileLocalToNe(neInfo model.NeInfo, localFile string) err
sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/etc/rtproxy && sudo cp -rf %s/rtproxy/* /usr/local/etc/rtproxy && sudo chmod 777 /usr/local/etc/rtproxy/rtproxy.conf", neDirTemp))
// iwf目录
sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/etc/iwf && sudo cp -rf %s/iwf/* /usr/local/etc/iwf && sudo chmod 777 /usr/local/etc/iwf/*.yaml", neDirTemp))
} else if neTypeLower == "smsc" {
case "smsc":
chmodFile := "sudo chmod 777 /usr/local/etc/smsc/{*sys.conf,*conf.txt,conf/is41_operation.conf}"
sshClient.RunCMD(fmt.Sprintf("sudo mkdir -p /usr/local/etc/smsc/conf && sudo cp -rf %s/* /usr/local/etc/smsc && %s", neDirTemp, chmodFile))
} else {
default:
neEtcPath := fmt.Sprintf("/usr/local/etc/%s", neTypeLower)
chmodFile := fmt.Sprintf("sudo chmod 777 %s/*.yaml", neEtcPath)
if neTypeLower == "mme" {
@@ -156,7 +157,8 @@ func (s NeConfigBackup) FileNeToLocal(neInfo model.NeInfo) (string, error) {
// 网元配置文件先复制到临时目录
sshClient.RunCMD("sudo mkdir -p /tmp/omc/ne_config && sudo chmod 777 -R /tmp/omc")
neDirTemp := fmt.Sprintf("/tmp/omc/ne_config/%s/%s", neTypeLower, neInfo.NeUID)
if neTypeLower == "ims" {
switch neTypeLower {
case "ims":
// ims目录
sshClient.RunCMD(fmt.Sprintf("mkdir -p %s/ims", neDirTemp))
imsDirArr := [...]string{"bgcf", "icscf", "ismc", "mmtel", "mrf", "oam_manager.yaml", "pcscf", "scscf", "vars.cfg", "zlog"}
@@ -169,10 +171,10 @@ func (s NeConfigBackup) FileNeToLocal(neInfo model.NeInfo) (string, error) {
sshClient.RunCMD(fmt.Sprintf("mkdir -p %s/rtproxy && sudo cp -rf /usr/local/etc/rtproxy/rtproxy.conf %s/rtproxy", neDirTemp, neDirTemp))
// iwf目录
sshClient.RunCMD(fmt.Sprintf("mkdir -p %s/iwf && sudo cp -rf /usr/local/etc/iwf/*.yaml %s/iwf", neDirTemp, neDirTemp))
} else if neTypeLower == "smsc" {
case "smsc":
sshClient.RunCMD(fmt.Sprintf("mkdir -p %s && sudo cp -rf /usr/local/etc/smsc/{*.yaml,*.conf,*conf.txt} %s", neDirTemp, neDirTemp))
sshClient.RunCMD(fmt.Sprintf("sudo cp -rf /usr/local/etc/smsc/conf %s/conf", neDirTemp))
} else {
default:
nePath := fmt.Sprintf("/usr/local/etc/%s/*.yaml", neTypeLower)
if neTypeLower == "mme" {
nePath = fmt.Sprintf("/usr/local/etc/%s/*.{yaml,conf}", neTypeLower)

View File

@@ -326,6 +326,10 @@ func (r NeVersion) operateCommand(action, neType string, neFilePaths []string) (
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sst: 1/sst: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["SST"]))
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/sd: 000001/sd: %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["SD"]))
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/- 4388/- %s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["TAC"]))
// 使用UDM融合AUSF时
if para5GData["AUSF_IP"] == "172.16.5.130" {
para5GData["AUSF_IP"] = para5GData["UDM_IP"]
}
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.130/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["AUSF_IP"]))
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.140/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["UDM_IP"]))
cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i \"s/172.16.5.150/%s/g\" /usr/local/etc/amf/amfcfg.yaml \n", para5GData["SMF_IP"]))

View File

@@ -103,10 +103,11 @@ func (s *UDMVolteIMSController) List(c *gin.Context) {
func (s *UDMVolteIMSController) Info(c *gin.Context) {
language := reqctx.AcceptLanguage(c)
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
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
Volte string `form:"volte" binding:"required,oneof=0 1"` // Volte
}
if err := c.ShouldBindQuery(&query); err != nil {
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
@@ -129,7 +130,7 @@ func (s *UDMVolteIMSController) Info(c *gin.Context) {
defer telnetClient.Close()
// 发送MML
cmd := fmt.Sprintf("dsp imsuser:imsi=%s,msisdn=%s", query.IMSI, query.MSISDN)
cmd := fmt.Sprintf("dsp imsuser:imsi=%s,msisdn=%s,volte=%s", query.IMSI, query.MSISDN, query.Volte)
data, err := telnet.ConvertToMap(telnetClient, cmd)
if err != nil {
c.JSON(200, resp.ErrMsg(err.Error()))
@@ -259,11 +260,12 @@ func (s *UDMVolteIMSController) Add(c *gin.Context) {
func (s *UDMVolteIMSController) Remove(c *gin.Context) {
language := reqctx.AcceptLanguage(c)
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"` // 批量数量
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, 带数量时为批量
Volte string `form:"volte" binding:"required,oneof=0 1"` // volte
Num int64 `form:"num"` // 批量数量
}
if err := c.ShouldBindQuery(&query); err != nil {
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
@@ -285,27 +287,16 @@ func (s *UDMVolteIMSController) Remove(c *gin.Context) {
}
defer telnetClient.Close()
// 精确msisdn删除
if query.MSISDN != "" {
// 发送MML
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()))
return
}
// 命令ok时
if strings.Contains(data, "ok") {
s.udmVolteIMSService.Delete(neInfo.CoreUID, neInfo.NeUID, query.IMSI)
}
c.JSON(200, resp.OkData(data))
return
}
// 批量更新
if query.Num > 0 {
// 发送MML
cmd := fmt.Sprintf("bde imsuser:start_imsi=%s,sub_num=%d", query.IMSI, query.Num)
cmd := ""
if query.Volte == "0" {
cmd = fmt.Sprintf("bde imsuser:start_msisdn=%s,sub_num=%d,volte=0", query.MSISDN, query.Num)
}
if query.Volte == "1" {
cmd = fmt.Sprintf("bde imsuser:start_imsi=%s,start_msisdn=%s,sub_num=%d,volte=1", query.IMSI, query.MSISDN, query.Num)
}
data, err := telnet.ConvertToStr(telnetClient, cmd)
if err != nil {
c.JSON(200, resp.ErrMsg(err.Error()))
@@ -320,29 +311,18 @@ func (s *UDMVolteIMSController) Remove(c *gin.Context) {
return
}
// 处理字符转id数组后去重
imsiArr := strings.Split(query.IMSI, ",")
uniqueIDs := parse.RemoveDuplicates(imsiArr)
if len(uniqueIDs) <= 0 {
c.JSON(200, resp.Err(nil))
// 发送MML
cmd := fmt.Sprintf("del imsuser:imsi=%s,msisdn=%s,volte=%s", query.IMSI, query.MSISDN, query.Volte)
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(neInfo.CoreUID, neInfo.NeUID, imsi)
}
resultData[imsi] = data
// 命令ok时
if strings.Contains(data, "ok") {
s.udmVolteIMSService.Delete(neInfo.CoreUID, neInfo.NeUID, query.IMSI)
}
c.JSON(200, resp.OkData(resultData))
c.JSON(200, resp.OkData(data))
}
// UDMVolteIMS用户导出