diff --git a/CHANGELOG.md b/CHANGELOG.md index a3804825..35a3e63f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,114 +1,144 @@ # 版本发布日志 +## 2.2501.1-20250103 + +- 新增 菜单-基站状态页面路由,定义接口功能 +- 更新 AMF/MME参数配置映射文件 +- 修复 网元安装MME补充hss域名到hosts + +## 2.2412.4-20241228 + +- 新增 菜单页面-SMF 用户使用数据流量报表 +- 新增 CDR 删除权限标识 cdr:ne:remove +- 新增 初始自定义指标 title +- 新增 AMF 基站状态查询接口,更新 AMF 配置项 gnbList +- 修复 SMF-CDR/SGWC-CDR 导出表格流量进行累加不分组显示 +- 修复 UDM 签约用户备注信息对应 IMSI 唯一 +- 修复 omc 升级日志输出文件权限写入问题 +- 修复 网元配置数据查询无 data 时默认返回空数组占位 +- 优化 配置文件读取错误显示中文问题 +- 优化 OMC 网元状态默认参数空时用“-”表示 +- 优化 AMF-UE 上报数据格式统一结构,UE 事件 AMF/MME 区分网元查询 + ## 2.2412.3-20241220 -- 新增 直连网元请求带UA标识OMC/version -- 新增 网元直连接口补充AMF/SMF/MME/IMS -- 新增 CDR-SGWC表定义,SGWC参数配置可选属性 -- 新增 CDR接收SGWC并推送, 数据功能接口, 菜单命名SGWC-漫游数据 +- 新增 直连网元请求带 UA 标识 OMC/version +- 新增 网元直连接口补充 AMF/SMF/MME/IMS +- 新增 CDR-SGWC 表定义,SGWC 参数配置可选属性 +- 新增 CDR 接收 SGWC 并推送, 数据功能接口, 菜单命名 SGWC-漫游数据 - 优化 网元配置可选参数接口 ## 2.2412.2-20241213 -- 新增 网元信息通过neType查询函数 -- 新增 网元类型HLR跟踪查询类型HLR,添加HLR KPI指标项数据 -- 修复 网元安装redis依赖包bind为0.0.0.0 -- 修复 UDM签约cag参数允许为空 +- 新增 网元信息通过 neType 查询函数 +- 新增 网元类型 HLR 跟踪查询类型 HLR,添加 HLR KPI 指标项数据 +- 修复 网元安装 redis 依赖包 bind 为 0.0.0.0 +- 修复 UDM 签约 cag 参数允许为空 - 修复 custom indicator exist issue ## 2.2412.1-20241209 -- 修复 GetHashBatch检查索引是否越界 -- 修复 网元备份SMSC配置文件 -- 修复 UDM签约批量添加msisdn和start_msisdn识别导致数据一致 +- 修复 GetHashBatch 检查索引是否越界 +- 修复 网元备份 SMSC 配置文件 +- 修复 UDM 签约批量添加 msisdn 和 start_msisdn 识别导致数据一致 ## 2.2411.4-20241130 -- 新增 系统用户免登录认证,默认为admin操作所有接口 -- 新增 Para5G参数UPF新增填写N3 N6网卡名 +- 新增 系统用户免登录认证,默认为 admin 操作所有接口 +- 新增 Para5G 参数 UPF 新增填写 N3 N6 网卡名 ## 2.2411.3-20241123 -- 修复 SMSC安装host重复 +- 修复 SMSC 安装 host 重复 - 修复 字典多语言翻译 Multi-language - Chinese ## 2.2411.2-20241115 -- 新增 支持aarch64平台软件包iperf v2 -- 新增 定时UDM数据加载每12小时一次 -- 修复 网元软件包升级时rpm同版本号强制安装 -- 更新 初始系统用户默认信息,手机号长度32位,系统菜单显示指标报表 +- 新增 支持 aarch64 平台软件包 iperf v2 +- 新增 定时 UDM 数据加载每 12 小时一次 +- 修复 网元软件包升级时 rpm 同版本号强制安装 +- 更新 初始系统用户默认信息,手机号长度 32 位,系统菜单显示指标报表 ## 2.2411.1-20241108 -- 新增 iperf支持v2的版本操作 -- 新增 网元主机添加redis连接终端控制 -- 更新 UDM用户数据表索引更新 -- 更新 网元快速安装配置UPF网卡名和驱动类型参数 +- 新增 iperf 支持 v2 的版本操作 +- 新增 网元主机添加 redis 连接终端控制 +- 更新 UDM 用户数据表索引更新 +- 更新 网元快速安装配置 UPF 网卡名和驱动类型参数 ## 2.2410.4-20241102 -- 新增 直连网元信息取得hostname/os属性值 -- 新增 UDM鉴权签约imsi多查询 +- 新增 直连网元信息取得 hostname/os 属性值 +- 新增 UDM 鉴权签约 imsi 多查询 - 更新 更新系统菜单新增关键指标概览 -- 更新 定时任务周期同步更新UDM用户数据 -- 更新 AMF/SMF参数配置项数据 -- 修复 SMSC安装时关联修改IMS和UDM配置 +- 更新 定时任务周期同步更新 UDM 用户数据 +- 更新 AMF/SMF 参数配置项数据 +- 修复 SMSC 安装时关联修改 IMS 和 UDM 配置 ## 2.2410.3-20241018 多租户修改如下: +- 新增 网元主机支持 redis 配置项 +- 新增 菜单功能 iperf3/ping 网络测试工具 +- 更新 抓包文件支持查看内容 +- 更新 初始网元相关表字段数据变更 +- 更新 UDM 用户数据按查询条件导出 - ims在线用户显示异常 - admin和tenant角色只能单选 合并主线版本修改如下: +- 新增 系统菜单新增工具栏目,网元 SSH,网络测试,网络探针 +- 更新 UDM 签约数据表,同步数据支持 MICO 和 RAT 操作修改 +- 优化 MML 命令连接改为网元信息配置 telnet +- 更新 SMSC、AMF 参数配置数据 +- 更新 定时清除到导出文件缓存 ## 2.2409.4-20240927 -- 新增 跟踪任务pcap文件获取接口 -- 优化 socket消息接收,跟踪任务推送ws +- 新增 跟踪任务 pcap 文件获取接口 +- 优化 socket 消息接收,跟踪任务推送 ws - 修复 历史告警同步判断存在错误 -- 优化 redis数据scan数调整1000 -- 修复 SMF在线订阅用户列表接口地址错误 -- 修复 多语言SMSC原因0表示未知 +- 优化 redis 数据 scan 数调整 1000 +- 修复 SMF 在线订阅用户列表接口地址错误 +- 修复 多语言 SMSC 原因 0 表示未知 - 新增 网元版本列表主动检查服务状态的版本 -- 更新 UDM用户数据表字段 +- 更新 UDM 用户数据表字段 ## 2.2409.3-20240920 - 修复 字典多语言序号重复问题 -- 更新 UDM用户数据表,SMSC参数配置属性,字典数据和跟踪相关表 -- 新增 跟踪任务HLR免登录接口 -- 新增 跟踪任务相关接口初始化,跟踪任务新增非201/400时接收信息 -- 修复 抓包文件下载zip时目录同名导致删除压缩无内容 +- 更新 UDM 用户数据表,SMSC 参数配置属性,字典数据和跟踪相关表 +- 新增 跟踪任务 HLR 免登录接口 +- 新增 跟踪任务相关接口初始化,跟踪任务新增非 201/400 时接收信息 +- 修复 抓包文件下载 zip 时目录同名导致删除压缩无内容 --## 2.2409.1-20240909 -- 新增 告警前转的两个接口email前转和短信前转的系统参数,采用了和网元统一的参数配置方式, -- 优化 修改了dpkg和rpm包安装后的运行脚本,支持通过环境变量传入参数,并判断传入参数调用setomc.sh安装/升级数据库,命令格式:M_PARAM=upgrade C_PARAM=ba dpkg -I xxxx.deb,如果不传入参数则和以前相同 -- 调整的dpkg和rpm包安装的运行脚本中停止omc服务的顺序,解决了omc安装包在前端界面自升级时出现无法自动刷新的问题 +- 新增 告警前转的两个接口 email 前转和短信前转的系统参数,采用了和网元统一的参数配置方式, +- 优化 修改了 dpkg 和 rpm 包安装后的运行脚本,支持通过环境变量传入参数,并判断传入参数调用 setomc.sh 安装/升级数据库,命令格式:M_PARAM=upgrade C_PARAM=ba dpkg -I xxxx.deb,如果不传入参数则和以前相同 +- 调整的 dpkg 和 rpm 包安装的运行脚本中停止 omc 服务的顺序,解决了 omc 安装包在前端界面自升级时出现无法自动刷新的问题 --## 2.2408.5-20240831 - 修复 系统信息读取磁盘获取超时导致返回空数组 - 优化 缓存信息安全清理排除登录用户身份和验证码信息 -- 新增 KPI自定义指标功能接口 +- 新增 KPI 自定义指标功能接口 - 新增 日志数据导出文件查看功能接口 --## 2.2408.4-20240823 -- 优化 网元端文件目录/tmp/omc 上传push 下载pull +- 优化 网元端文件目录/tmp/omc 上传 push 下载 pull - 新增 网元文件操作可删除本地临时文件 - 新增 系统菜单-信令抓包文件 -- 新增 KPI添加CBC -- 更新 CBC参数配置可选属性 +- 新增 KPI 添加 CBC +- 更新 CBC 参数配置可选属性 --## 2.2408.3-20240816 -- 新增 中间件-接口加解密,配合前端CryptoJS加解密 -- 新增 KPI添加SMSC -- 更新 IMS参数配置可选属性 +- 新增 中间件-接口加解密,配合前端 CryptoJS 加解密 +- 新增 KPI 添加 SMSC +- 更新 IMS 参数配置可选属性 --## 2.2408.2-20240809 diff --git a/captrace/makefile b/captrace/makefile index 9ccb53b7..8330a7af 100644 --- a/captrace/makefile +++ b/captrace/makefile @@ -1,7 +1,7 @@ # Makefile for rest agent project PROJECT = OMC -VERSION = 2.2412.3 +VERSION = 2.2501.1 PLATFORM = amd64 ARMPLATFORM = aarch64 BUILDDIR = ../../build diff --git a/config/param/amf_param_config.yaml b/config/param/amf_param_config.yaml index 96febe57..d09fba40 100644 --- a/config/param/amf_param_config.yaml +++ b/config/param/amf_param_config.yaml @@ -504,3 +504,53 @@ amf: filter: '{"0":"false","1":"true"}' display: "statusReportEnabled" comment: "" + gnbList: + display: "Gnb List Config" + sort: 13 + array: + - name: "index" + type: "int" + value: "0" + access: "read-only" + filter: "0~128" + display: "Index" + comment: "0~128" + - name: "name" + type: "string" + value: "Gnb" + access: "read-write" + filter: "0~64" + display: "GNB Name" + comment: "text content length 0~64" + - name: "address" + type: "string" + value: "192.168.8.1" + access: "read-write" + filter: "0~64" + display: "GNB Address" + comment: "text content length 0~64" + - name: "position" + type: "string" + value: "Area-B" + access: "read-write" + filter: "0~64" + display: "Position" + comment: "location description. Prohibition of spaces, length of text content 0-64" + imeiWhitelist: + display: "IMEI White List" + sort: 15 + array: + - name: "index" + type: "int" + value: "0" + access: "read-only" + filter: "0~65535" + display: "Index" + comment: "0~65535" + - name: "imeiPrefixValue" + type: "string" + value: "" + access: "read-write" + filter: "^[a-zA-Z0-9]{0,16}$" + display: "IMEI Prefix" + comment: "" diff --git a/config/param/mme_param_config.yaml b/config/param/mme_param_config.yaml index 8a21f5a0..85cafb25 100644 --- a/config/param/mme_param_config.yaml +++ b/config/param/mme_param_config.yaml @@ -17,6 +17,27 @@ mme: filter: '{"0":"false","1":"true"}' display: "VoLTE Enabled" comment: "true|false" + - name: "meIdentityCheckPath" + type: "string" + value: "/usr/local/etc/mme/me_identity_check.csv" + access: "read-write" + filter: "0~128" + display: "ME IDENTITY CHECK PATH" + comment: "0~128" + - name: "imeiWhiteListPath" + type: "string" + value: "/usr/local/etc/mme/imei_whitelist.csv" + access: "read-write" + filter: "0~128" + display: "IMEI WHITE LIST PATH" + comment: "0~128" + - name: "dnsServerIp" + type: "string" + value: "127.0.0.53" + access: "read-write" + filter: "0~64" + display: "DNS SERVER IP" + comment: "0~64" - name: "s1MmeIp" type: "string" value: "192.168.1.179" @@ -80,13 +101,97 @@ mme: filter: "0~100" display: "S6A MME Identity" comment: "0~100" - - name: "localIp" + - name: "s6aLocalIp" type: "string" value: "172.16.5.220" access: "read-write" filter: "0~20" display: "S6A MME IP" comment: "0~20" + - name: "slsLocalIp" + type: "string" + value: "172.16.5.220" + access: "read-write" + filter: "0~20" + display: "SLS MME IP" + comment: "0~20" + - name: "slsRemoteIp" + type: "string" + value: "172.16.5.220" + access: "read-write" + filter: "0~20" + display: "SLS REMOTE IP" + comment: "0~20" + - name: "slsRemotePort" + type: "string" + value: "9082" + access: "read-write" + filter: "0~20" + display: "SLS REMOTE PORT" + comment: "0~20" + - name: "slgIdentity" + type: "string" + value: "gmlc.epc.mnc001.mcc001.3gppnetwork.org" + access: "read-write" + filter: "0~100" + display: "SLG MME Identity" + comment: "0~100" + - name: "slgRealm" + type: "string" + value: "epc.mnc001.mcc001.3gppnetwork.org" + access: "read-write" + filter: "0~100" + display: "SLG MME REALM" + comment: "0~100" + - name: "sbcLocalIp" + type: "string" + value: "192.168.8.220" + access: "read-write" + filter: "0~20" + display: "SBC MME IP" + comment: "0~20" + - name: "svLocalIp" + type: "string" + value: "172.16.5.220" + access: "read-write" + filter: "0~20" + display: "SV MME IP" + comment: "0~20" + - name: "svLocalPort" + type: "string" + value: "9082" + access: "read-write" + filter: "0~20" + display: "SV MME PORT" + comment: "0~20" + - name: "svRemoteIp" + type: "string" + value: "172.16.5.220" + access: "read-write" + filter: "0~20" + display: "SV REMOTE IP" + comment: "0~20" + - name: "svRemotePort" + type: "string" + value: "9082" + access: "read-write" + filter: "0~20" + display: "SV REMOTE PORT" + comment: "0~20" + - name: "s3RemoteIp" + type: "string" + value: "172.16.5.220" + access: "read-write" + filter: "0~20" + display: "S3 REMOTE IP" + comment: "0~20" + - name: "s3RemotePort" + type: "string" + value: "9082" + access: "read-write" + filter: "0~20" + display: "S3 REMOTE PORT" + comment: "0~20" gummei: display: "Gummei List" sort: 3 @@ -307,3 +412,46 @@ mme: filter: "0~64" display: "AMF IP" comment: "0~64" + roam_plmn: + display: "ROAM PLMN List" + sort: 15 + array: + - name: "index" + type: "int" + value: "0" + access: "read" + filter: "0~15" + display: "Index" + comment: "0~15" + - name: "mcc" + type: "string" + value: "001" + access: "read-write" + filter: "0~64" + display: "MCC" + comment: "0~64" + - name: "mnc" + type: "string" + value: "01" + access: "read-write" + filter: "0~64" + display: "MNC" + comment: "0~64" + white_list: + display: "WHITE LIST List" + sort: 15 + array: + - name: "index" + type: "int" + value: "0" + access: "read" + filter: "0~15" + display: "Index" + comment: "0~15" + - name: "imei" + type: "string" + value: "001" + access: "read-write" + filter: "0~64" + display: "IMEI" + comment: "0~64" diff --git a/crontask/makefile b/crontask/makefile index d651de2a..8d84d90b 100644 --- a/crontask/makefile +++ b/crontask/makefile @@ -1,7 +1,7 @@ # Makefile for OMC-OMC-crontask project PROJECT = OMC -VERSION = 2.2412.3 +VERSION = 2.2501.1 LIBDIR = be.ems/lib BINNAME = crontask diff --git a/data2html/makefile b/data2html/makefile index be7ca169..60afffb6 100644 --- a/data2html/makefile +++ b/data2html/makefile @@ -1,7 +1,7 @@ # Makefile for rest agent project PROJECT = OMC -VERSION = 2.2412.3 +VERSION = 2.2501.1 RelDate = `date +%Y%m%d` Release = $(RelDate) RelVer = $(VERSION)-$(RelDate) diff --git a/database/common/ne_config.sql b/database/common/ne_config.sql index 3073ccb3..13a76988 100644 --- a/database/common/ne_config.sql +++ b/database/common/ne_config.sql @@ -23,13 +23,15 @@ CREATE TABLE `ne_config` ( -- 初始数据对应网元 --- 更新 AMF 配置 20241218 -INSERT INTO `ne_config` VALUES (1, 'AMF', 'system', 'System Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMF Name\",\"filter\":\"0~64\",\"name\":\"amfName\",\"type\":\"string\",\"value\":\"AMF\",\"visible\":\"self\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Relative Capacity\",\"filter\":\"0~255\",\"name\":\"relativeCapacity\",\"type\":\"int\",\"value\":\"255\",\"visible\":\"self\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\",\\\"1\\\":\\\"https\\\"}\",\"name\":\"sbiScheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Server IP\",\"filter\":\"0~64\",\"name\":\"sbiServerIp\",\"type\":\"string\",\"value\":\"192.168.1.183\",\"visible\":\"self\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"SBI Server Port\",\"filter\":\"0~65535\",\"name\":\"sbiServerPort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"nrfEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"0~64\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AUSF URI\",\"filter\":\"0~64\",\"name\":\"ausfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.130:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDM URI\",\"filter\":\"0~64\",\"name\":\"udmUri\",\"type\":\"string\",\"value\":\"http://172.16.5.140:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMF URI\",\"filter\":\"0~64\",\"name\":\"smfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.150:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF URI\",\"filter\":\"0~64\",\"name\":\"pcfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.160:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Backup AUSF URI\",\"filter\":\"0~64\",\"name\":\"backupAusfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.131:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Backup UDM URI\",\"filter\":\"0~64\",\"name\":\"backupUdmUri\",\"type\":\"string\",\"value\":\"http://172.16.5.141:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Backup SMF URI\",\"filter\":\"0~64\",\"name\":\"backupSmfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.151:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Backup PCF URI\",\"filter\":\"0~64\",\"name\":\"backupPcfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.161:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LMF URI\",\"filter\":\"0~64\",\"name\":\"lmfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.200:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NEF URI\",\"filter\":\"0~64\",\"name\":\"nefUri\",\"type\":\"string\",\"value\":\"http://172.16.5.210:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IMEI Restriction Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"imeiRestrictionEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Allowed IMEI Prefix\",\"filter\":\"0~128\",\"name\":\"allowedImeiPrefix\",\"type\":\"string\",\"value\":\"869583045\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN Correction Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"dnnCorrectionEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default DNN\",\"filter\":\"0~64\",\"name\":\"defaultDnn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Integrity Algorithm\",\"filter\":\"{\\\"0\\\":\\\"NIA0\\\",\\\"1\\\":\\\"NIA1\\\",\\\"2\\\":\\\"NIA2\\\",\\\"3\\\":\\\"NIA3\\\"}\",\"name\":\"integrityAlgorithm\",\"type\":\"enum\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Ciphering Algorithm\",\"filter\":\"{\\\"0\\\":\\\"NEA0\\\",\\\"1\\\":\\\"NEA1\\\",\\\"2\\\":\\\"NEA2\\\",\\\"3\\\":\\\"NEA3\\\"}\",\"name\":\"cipheringAlgorithm\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3502\",\"filter\":\"1~65535\",\"name\":\"t3502\",\"type\":\"int\",\"value\":\"720\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3512\",\"filter\":\"1~65535\",\"name\":\"t3512\",\"type\":\"int\",\"value\":\"3600\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3513\",\"filter\":\"1~65535\",\"name\":\"t3513\",\"type\":\"int\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3522\",\"filter\":\"1~65535\",\"name\":\"t3522\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3550\",\"filter\":\"1~65535\",\"name\":\"t3550\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3555\",\"filter\":\"1~65535\",\"name\":\"t3555\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3560\",\"filter\":\"1~65535\",\"name\":\"t3560\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3565\",\"filter\":\"1~65535\",\"name\":\"t3565\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3570\",\"filter\":\"1~65535\",\"name\":\"t3570\",\"type\":\"int\",\"value\":\"6\"}]', 1, '', 1734421066684, 'public'); -INSERT INTO `ne_config` VALUES (2, 'AMF', 'association', 'TNL Association List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NGAP IP\",\"filter\":\"0~64\",\"name\":\"ngapIp\",\"type\":\"string\",\"value\":\"192.168.1.183\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"NGAP SCTP Port\",\"filter\":\"0~65535\",\"name\":\"ngapSctpPort\",\"type\":\"int\",\"value\":\"38412\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Weight\",\"filter\":\"0~255\",\"name\":\"weightFactor\",\"type\":\"int\",\"value\":\"255\"}]', 3, '', 1734421066702, 'self'); -INSERT INTO `ne_config` VALUES (3, 'AMF', 'guami', 'GUAMI List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Region ID\",\"filter\":\"0~255\",\"name\":\"regionId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1023\",\"display\":\"Set ID\",\"filter\":\"0~1023\",\"name\":\"setId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~63\",\"display\":\"Pointer\",\"filter\":\"0~63\",\"name\":\"pointer\",\"type\":\"int\",\"value\":\"1\"}]', 5, '', 1734421066707, 'self'); -INSERT INTO `ne_config` VALUES (4, 'AMF', 'tai', 'TAI List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~16777215\",\"display\":\"TAC\",\"filter\":\"0~8\",\"name\":\"tac\",\"type\":\"string\",\"value\":\"1\"}]', 7, '', 1734421066711, 'public'); -INSERT INTO `ne_config` VALUES (5, 'AMF', 'slice', 'Slice List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~127\",\"display\":\"SST\",\"filter\":\"0~127\",\"name\":\"sst\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SD\",\"filter\":\"^[A-Fa-f0-9]{6}\",\"name\":\"sd\",\"type\":\"regex\",\"value\":\"000001\"}]', 9, '', 1734421066715, 'public'); -INSERT INTO `ne_config` VALUES (6, 'AMF', 'systemFeatOpt', 'System FeatOpt', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"dnnCorrectionEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"dnnCorrectionEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"gutiReallocationInPRUEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"gutiReallocationInPRUEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ueRadioCapabilityMatchEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"ueRadioCapabilityMatchEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"supportFollowOnRequestIndication\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"supportFollowOnRequestIndication\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"triggerInitCtxSetupForAllNASProc\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"triggerInitCtxSetupForAllNASProc\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"supportAllAllowedNssai\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"supportAllAllowedNssai\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"implicitUnsubscribeEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"implicitUnsubscribeEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"supportRRCInactiveReport\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"supportRRCInactiveReport\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"supportMappedSecurityContext\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"supportMappedSecurityContext\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"optimizeSignalingProcedure\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"optimizeSignalingProcedure\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"reAuthInServiceRequestProc\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"reAuthInServiceRequestProc\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"skipGetSubscribedNssai\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"skipGetSubscribedNssai\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"forceIdentityRequest\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"forceIdentityRequest\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"cagEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"cagEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"imeiRestrictionEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"imeiRestrictionEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"checkSliceInTaEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"checkSliceInTaEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"uePolicyEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"uePolicyEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"smsOverNasEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"smsOverNasEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"statusReportToOmc\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"statusReportToOmc\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"statusReportEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"statusReportEnabled\",\"type\":\"bool\",\"value\":\"0\"}]', 11, '', 1734421066719, 'public'); +-- 更新 AMF 配置 20250102 +INSERT INTO `ne_config` VALUES (1, 'AMF', 'system', 'System Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AMF Name\",\"filter\":\"0~64\",\"name\":\"amfName\",\"type\":\"string\",\"value\":\"AMF\",\"visible\":\"self\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Relative Capacity\",\"filter\":\"0~255\",\"name\":\"relativeCapacity\",\"type\":\"int\",\"value\":\"255\",\"visible\":\"self\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Scheme\",\"filter\":\"{\\\"0\\\":\\\"http\\\",\\\"1\\\":\\\"https\\\"}\",\"name\":\"sbiScheme\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SBI Server IP\",\"filter\":\"0~64\",\"name\":\"sbiServerIp\",\"type\":\"string\",\"value\":\"192.168.1.183\",\"visible\":\"self\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"SBI Server Port\",\"filter\":\"0~65535\",\"name\":\"sbiServerPort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"nrfEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"0~64\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"AUSF URI\",\"filter\":\"0~64\",\"name\":\"ausfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.130:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDM URI\",\"filter\":\"0~64\",\"name\":\"udmUri\",\"type\":\"string\",\"value\":\"http://172.16.5.140:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SMF URI\",\"filter\":\"0~64\",\"name\":\"smfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.150:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PCF URI\",\"filter\":\"0~64\",\"name\":\"pcfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.160:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Backup AUSF URI\",\"filter\":\"0~64\",\"name\":\"backupAusfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.131:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Backup UDM URI\",\"filter\":\"0~64\",\"name\":\"backupUdmUri\",\"type\":\"string\",\"value\":\"http://172.16.5.141:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Backup SMF URI\",\"filter\":\"0~64\",\"name\":\"backupSmfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.151:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Backup PCF URI\",\"filter\":\"0~64\",\"name\":\"backupPcfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.161:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"LMF URI\",\"filter\":\"0~64\",\"name\":\"lmfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.200:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NEF URI\",\"filter\":\"0~64\",\"name\":\"nefUri\",\"type\":\"string\",\"value\":\"http://172.16.5.210:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IMEI Restriction Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"imeiRestrictionEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Allowed IMEI Prefix\",\"filter\":\"0~128\",\"name\":\"allowedImeiPrefix\",\"type\":\"string\",\"value\":\"869583045\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"DNN Correction Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"dnnCorrectionEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Default DNN\",\"filter\":\"0~64\",\"name\":\"defaultDnn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Integrity Algorithm\",\"filter\":\"{\\\"0\\\":\\\"NIA0\\\",\\\"1\\\":\\\"NIA1\\\",\\\"2\\\":\\\"NIA2\\\",\\\"3\\\":\\\"NIA3\\\"}\",\"name\":\"integrityAlgorithm\",\"type\":\"enum\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Ciphering Algorithm\",\"filter\":\"{\\\"0\\\":\\\"NEA0\\\",\\\"1\\\":\\\"NEA1\\\",\\\"2\\\":\\\"NEA2\\\",\\\"3\\\":\\\"NEA3\\\"}\",\"name\":\"cipheringAlgorithm\",\"type\":\"enum\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3502\",\"filter\":\"1~65535\",\"name\":\"t3502\",\"type\":\"int\",\"value\":\"720\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3512\",\"filter\":\"1~65535\",\"name\":\"t3512\",\"type\":\"int\",\"value\":\"3600\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3513\",\"filter\":\"1~65535\",\"name\":\"t3513\",\"type\":\"int\",\"value\":\"2\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3522\",\"filter\":\"1~65535\",\"name\":\"t3522\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3550\",\"filter\":\"1~65535\",\"name\":\"t3550\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3555\",\"filter\":\"1~65535\",\"name\":\"t3555\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3560\",\"filter\":\"1~65535\",\"name\":\"t3560\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3565\",\"filter\":\"1~65535\",\"name\":\"t3565\",\"type\":\"int\",\"value\":\"6\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"T3570\",\"filter\":\"1~65535\",\"name\":\"t3570\",\"type\":\"int\",\"value\":\"6\"}]', 1, '', 1735280218858, 'public'); +INSERT INTO `ne_config` VALUES (2, 'AMF', 'association', 'TNL Association List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NGAP IP\",\"filter\":\"0~64\",\"name\":\"ngapIp\",\"type\":\"string\",\"value\":\"192.168.1.183\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"NGAP SCTP Port\",\"filter\":\"0~65535\",\"name\":\"ngapSctpPort\",\"type\":\"int\",\"value\":\"38412\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Weight\",\"filter\":\"0~255\",\"name\":\"weightFactor\",\"type\":\"int\",\"value\":\"255\"}]', 3, '', 1735280218872, 'self'); +INSERT INTO `ne_config` VALUES (3, 'AMF', 'guami', 'GUAMI List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Region ID\",\"filter\":\"0~255\",\"name\":\"regionId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1023\",\"display\":\"Set ID\",\"filter\":\"0~1023\",\"name\":\"setId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~63\",\"display\":\"Pointer\",\"filter\":\"0~63\",\"name\":\"pointer\",\"type\":\"int\",\"value\":\"1\"}]', 5, '', 1735280218877, 'self'); +INSERT INTO `ne_config` VALUES (4, 'AMF', 'tai', 'TAI List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~16777215\",\"display\":\"TAC\",\"filter\":\"0~8\",\"name\":\"tac\",\"type\":\"string\",\"value\":\"1\"}]', 7, '', 1735280218883, 'public'); +INSERT INTO `ne_config` VALUES (5, 'AMF', 'slice', 'Slice List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~127\",\"display\":\"SST\",\"filter\":\"0~127\",\"name\":\"sst\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"SD\",\"filter\":\"^[A-Fa-f0-9]{6}\",\"name\":\"sd\",\"type\":\"regex\",\"value\":\"000001\"}]', 9, '', 1735280218887, 'public'); +INSERT INTO `ne_config` VALUES (6, 'AMF', 'systemFeatOpt', 'System FeatOpt', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"dnnCorrectionEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"dnnCorrectionEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"gutiReallocationInPRUEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"gutiReallocationInPRUEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"ueRadioCapabilityMatchEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"ueRadioCapabilityMatchEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"supportFollowOnRequestIndication\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"supportFollowOnRequestIndication\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"triggerInitCtxSetupForAllNASProc\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"triggerInitCtxSetupForAllNASProc\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"supportAllAllowedNssai\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"supportAllAllowedNssai\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"implicitUnsubscribeEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"implicitUnsubscribeEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"supportRRCInactiveReport\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"supportRRCInactiveReport\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"supportMappedSecurityContext\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"supportMappedSecurityContext\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"optimizeSignalingProcedure\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"optimizeSignalingProcedure\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"reAuthInServiceRequestProc\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"reAuthInServiceRequestProc\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"skipGetSubscribedNssai\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"skipGetSubscribedNssai\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"forceIdentityRequest\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"forceIdentityRequest\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"cagEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"cagEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"imeiRestrictionEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"imeiRestrictionEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"checkSliceInTaEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"checkSliceInTaEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"uePolicyEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"uePolicyEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"smsOverNasEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"smsOverNasEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"statusReportToOmc\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"statusReportToOmc\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"statusReportEnabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"statusReportEnabled\",\"type\":\"bool\",\"value\":\"0\"}]', 11, '', 1735280218891, 'public'); +INSERT INTO `ne_config` VALUES (7, 'AMF', 'gnbList', 'Gnb List Config', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~128\",\"display\":\"Index\",\"filter\":\"0~128\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"text content length 0~64\",\"display\":\"GNB Name\",\"filter\":\"0~64\",\"name\":\"name\",\"type\":\"string\",\"value\":\"Gnb\"},{\"access\":\"read-write\",\"comment\":\"text content length 0~64\",\"display\":\"GNB Address\",\"filter\":\"0~64\",\"name\":\"address\",\"type\":\"string\",\"value\":\"192.168.8.1\"},{\"access\":\"read-write\",\"comment\":\"location description. Prohibition of spaces, length of text content 0-64\",\"display\":\"Position\",\"filter\":\"0~64\",\"name\":\"position\",\"type\":\"string\",\"value\":\"Area-B\"}]', 13, '', 1735798983917, 'public'); +INSERT INTO `ne_config` VALUES (8, 'AMF', 'imeiWhitelist', 'IMEI White List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~65535\",\"display\":\"Index\",\"filter\":\"0~65535\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"IMEI Prefix\",\"filter\":\"^[a-zA-Z0-9]{0,16}$\",\"name\":\"imeiPrefixValue\",\"type\":\"string\",\"value\":\"\"}]', 15, '', 1735798983921, 'public'); INSERT INTO `ne_config` VALUES (20, 'AUSF', 'system', 'System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service IP\",\"filter\":\"\",\"name\":\"serviceIP\",\"type\":\"ipv4\",\"value\":\"172.16.5.130\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Service Port\",\"filter\":\"0~65535\",\"name\":\"servicePort\",\"type\":\"int\",\"value\":\"8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Scheme\",\"filter\":\"{\\\"0\\\":\\\"HTTP\\\", \\\"1\\\":\\\"HTTPS\\\"}\",\"name\":\"scheme\",\"type\":\"enum\",\"value\":\"http\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"NRF URI\",\"filter\":\"\",\"name\":\"nrfUri\",\"type\":\"string\",\"value\":\"http://172.16.5.180:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"UDM URI\",\"filter\":\"\",\"name\":\"udmUri\",\"type\":\"string\",\"value\":\"http://172.16.5.140:8080\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Group ID\",\"filter\":\"\",\"name\":\"groupId\",\"type\":\"string\",\"value\":\"0\"}]', 1, '', 1719831209173, 'public'); @@ -39,14 +41,16 @@ INSERT INTO `ne_config` VALUES (41, 'IMS', 'plmn', 'PLMN List', 'array', '[{\"ac INSERT INTO `ne_config` VALUES (42, 'IMS', 'mmtel_dialplan', 'MMTEL Dialplan', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-only\",\"comment\":\"\",\"display\":\"NaName\",\"filter\":\"0~128\",\"name\":\"naName\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Title\",\"filter\":\"0~128\",\"name\":\"title\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Method\",\"filter\":\"0-2\",\"name\":\"method\",\"type\":\"string\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Prefix\",\"filter\":\"0~128\",\"name\":\"prefix\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Start\",\"filter\":\"0~128\",\"name\":\"start\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"End\",\"filter\":\"0~128\",\"name\":\"end\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Attrib\",\"filter\":\"0~128\",\"name\":\"attrib\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Number Len\",\"filter\":\"0~128\",\"name\":\"numberLen\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Rsc\",\"filter\":\"0~128\",\"name\":\"rsc\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"E164 Nai\",\"filter\":\"0~128\",\"name\":\"e164Nai\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"E164 Delete\",\"filter\":\"0~128\",\"name\":\"e164Delete\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"E164 Insert\",\"filter\":\"0~128\",\"name\":\"e164Insert\",\"type\":\"string\",\"value\":\"\"},{\"access\":\"read-write\",\"comment\":\"Enable: Close/Open\",\"display\":\"Admin State\",\"filter\":\"{\\\"0\\\":\\\"Close\\\", \\\"1\\\":\\\"Open\\\"}\",\"name\":\"adminState\",\"type\":\"enum\",\"value\":\"0\"}]', 5, '', 1723716862110, 'public'); INSERT INTO `ne_config` VALUES (43, 'IMS', 'ds_system', 'DS System', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dispatch System Indicator\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"dispatchSystemInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Transcode Indicator\",\"filter\":\"{\\\"0\\\":\\\"false\\\", \\\"1\\\":\\\"true\\\"}\",\"name\":\"transcodeInd\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dispatch System IPv4\",\"filter\":\"\",\"name\":\"dispatchSystemIP\",\"type\":\"ipv4\",\"value\":\"1.0.0.1\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"Dispatch System Port\",\"filter\":\"\",\"name\":\"dispatchSystemPort\",\"type\":\"int\",\"value\":\"5060\"}]', 7, '', 1723716862113, 'public'); --- 更新 MME 配置 20240906 -INSERT INTO `ne_config` VALUES (60, 'MME', 'system', 'System Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"true|false\",\"display\":\"CSFB Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"csfbEnabled\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"true|false\",\"display\":\"VoLTE Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"volteEnabled\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"S1 MME IP\",\"filter\":\"0~64\",\"name\":\"s1MmeIp\",\"type\":\"string\",\"value\":\"192.168.1.179\"},{\"access\":\"read-only\",\"comment\":\"0~65535\",\"display\":\"S1 MME Port\",\"filter\":\"0~65535\",\"name\":\"s1MmePort\",\"type\":\"int\",\"value\":\"36412\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"S11 MME IP\",\"filter\":\"0~64\",\"name\":\"s11MmeIp\",\"type\":\"string\",\"value\":\"192.168.1.179\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"S11 MME Port\",\"filter\":\"0~65535\",\"name\":\"s11MmePort\",\"type\":\"int\",\"value\":\"2123\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"S10 MME IP\",\"filter\":\"0~64\",\"name\":\"s10MmeIp\",\"type\":\"string\",\"value\":\"192.168.1.178\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"S10 MME Port\",\"filter\":\"0~65535\",\"name\":\"s10MmePort\",\"type\":\"int\",\"value\":\"2123\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"SGs MME IP\",\"filter\":\"0~64\",\"name\":\"sgsMmeIp\",\"type\":\"string\",\"value\":\"192.168.1.179\"},{\"access\":\"read-only\",\"comment\":\"0~65535\",\"display\":\"SGs MME Port\",\"filter\":\"0~65535\",\"name\":\"sgsMmePort\",\"type\":\"int\",\"value\":\"29118\"},{\"access\":\"read-write\",\"comment\":\"0~100\",\"display\":\"S6A MME Identity\",\"filter\":\"0~100\",\"name\":\"s6aIdentity\",\"type\":\"string\",\"value\":\"mme.epc.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"0~20\",\"display\":\"S6A MME IP\",\"filter\":\"0~20\",\"name\":\"localIp\",\"type\":\"string\",\"value\":\"172.16.5.220\"}]', 1, '', 1725610815287, 'public'); -INSERT INTO `ne_config` VALUES (61, 'MME', 'gummei', 'Gummei List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"Group ID\",\"filter\":\"0~65535\",\"name\":\"groupId\",\"type\":\"int\",\"value\":\"4\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Code\",\"filter\":\"0~255\",\"name\":\"code\",\"type\":\"int\",\"value\":\"1\"}]', 3, '', 1725610815301, 'public'); -INSERT INTO `ne_config` VALUES (62, 'MME', 'tai', 'TAI List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"TAC\",\"filter\":\"0~65535\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"}]', 5, '', 1725610815306, 'public'); -INSERT INTO `ne_config` VALUES (63, 'MME', 'hss', 'HSS List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{1,15}$\",\"display\":\"IMSI Prefix\",\"filter\":\"^[0-9]{1,15}$\",\"name\":\"imsiPre\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~128\",\"display\":\"HSS Hostname\",\"filter\":\"0~128\",\"name\":\"hssHostname\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"0~128\",\"display\":\"HSS Realm\",\"filter\":\"0~128\",\"name\":\"hssRealm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"SCTP|TCP\",\"display\":\"Protocol\",\"filter\":\"0~8\",\"name\":\"protocol\",\"type\":\"string\",\"value\":\"SCTP\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"HSS Port\",\"filter\":\"0~65535\",\"name\":\"hssPort\",\"type\":\"int\",\"value\":\"3868\"}]', 7, '', 1725610815311, 'public'); -INSERT INTO `ne_config` VALUES (64, 'MME', 'sgw', 'SGW List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"TAC\",\"filter\":\"0~65535\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"SGW IP\",\"filter\":\"0~64\",\"name\":\"sgwIp\",\"type\":\"string\",\"value\":\"172.16.5.150\"}]', 9, '', 1725610815316, 'public'); -INSERT INTO `ne_config` VALUES (65, 'MME', 'pgw', 'PGW List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~128\",\"display\":\"APN\",\"filter\":\"0~128\",\"name\":\"apn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"PGW IP\",\"filter\":\"0~64\",\"name\":\"pgwIp\",\"type\":\"string\",\"value\":\"192.168.1.181\"}]', 11, '', 1725610815320, 'public'); -INSERT INTO `ne_config` VALUES (66, 'MME', 'amf', 'AMF List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~16777215\",\"display\":\"TAC\",\"filter\":\"0~16777215\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Region ID\",\"filter\":\"0~255\",\"name\":\"regionId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1023\",\"display\":\"Set ID\",\"filter\":\"0~1023\",\"name\":\"setId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~63\",\"display\":\"Pointer\",\"filter\":\"0~63\",\"name\":\"pointer\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"AMF IP\",\"filter\":\"0~64\",\"name\":\"amfIp\",\"type\":\"string\",\"value\":\"172.16.5.120\"}]', 13, '', 1725610815323, 'public'); +-- 更新 MME 配置 20240103 +INSERT INTO `ne_config` VALUES (60, 'MME', 'system', 'System Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"true|false\",\"display\":\"CSFB Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"csfbEnabled\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"true|false\",\"display\":\"VoLTE Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"volteEnabled\",\"type\":\"bool\",\"value\":\"false\"},{\"access\":\"read-write\",\"comment\":\"0~128\",\"display\":\"ME IDENTITY CHECK PATH\",\"filter\":\"0~128\",\"name\":\"meIdentityCheckPath\",\"type\":\"string\",\"value\":\"/usr/local/etc/mme/me_identity_check.csv\"},{\"access\":\"read-write\",\"comment\":\"0~128\",\"display\":\"IMEI WHITE LIST PATH\",\"filter\":\"0~128\",\"name\":\"imeiWhiteListPath\",\"type\":\"string\",\"value\":\"/usr/local/etc/mme/imei_whitelist.csv\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"DNS SERVER IP\",\"filter\":\"0~64\",\"name\":\"dnsServerIp\",\"type\":\"string\",\"value\":\"127.0.0.53\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"S1 MME IP\",\"filter\":\"0~64\",\"name\":\"s1MmeIp\",\"type\":\"string\",\"value\":\"192.168.1.179\"},{\"access\":\"read-only\",\"comment\":\"0~65535\",\"display\":\"S1 MME Port\",\"filter\":\"0~65535\",\"name\":\"s1MmePort\",\"type\":\"int\",\"value\":\"36412\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"S11 MME IP\",\"filter\":\"0~64\",\"name\":\"s11MmeIp\",\"type\":\"string\",\"value\":\"192.168.1.179\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"S11 MME Port\",\"filter\":\"0~65535\",\"name\":\"s11MmePort\",\"type\":\"int\",\"value\":\"2123\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"S10 MME IP\",\"filter\":\"0~64\",\"name\":\"s10MmeIp\",\"type\":\"string\",\"value\":\"192.168.1.178\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"S10 MME Port\",\"filter\":\"0~65535\",\"name\":\"s10MmePort\",\"type\":\"int\",\"value\":\"2123\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"SGs MME IP\",\"filter\":\"0~64\",\"name\":\"sgsMmeIp\",\"type\":\"string\",\"value\":\"192.168.1.179\"},{\"access\":\"read-only\",\"comment\":\"0~65535\",\"display\":\"SGs MME Port\",\"filter\":\"0~65535\",\"name\":\"sgsMmePort\",\"type\":\"int\",\"value\":\"29118\"},{\"access\":\"read-write\",\"comment\":\"0~100\",\"display\":\"S6A MME Identity\",\"filter\":\"0~100\",\"name\":\"s6aIdentity\",\"type\":\"string\",\"value\":\"mme.epc.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"0~20\",\"display\":\"S6A MME IP\",\"filter\":\"0~20\",\"name\":\"s6aLocalIp\",\"type\":\"string\",\"value\":\"172.16.5.220\"},{\"access\":\"read-write\",\"comment\":\"0~20\",\"display\":\"SLS MME IP\",\"filter\":\"0~20\",\"name\":\"slsLocalIp\",\"type\":\"string\",\"value\":\"172.16.5.220\"},{\"access\":\"read-write\",\"comment\":\"0~20\",\"display\":\"SLS REMOTE IP\",\"filter\":\"0~20\",\"name\":\"slsRemoteIp\",\"type\":\"string\",\"value\":\"172.16.5.220\"},{\"access\":\"read-write\",\"comment\":\"0~20\",\"display\":\"SLS REMOTE PORT\",\"filter\":\"0~20\",\"name\":\"slsRemotePort\",\"type\":\"string\",\"value\":\"9082\"},{\"access\":\"read-write\",\"comment\":\"0~100\",\"display\":\"SLG MME Identity\",\"filter\":\"0~100\",\"name\":\"slgIdentity\",\"type\":\"string\",\"value\":\"gmlc.epc.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"0~100\",\"display\":\"SLG MME REALM\",\"filter\":\"0~100\",\"name\":\"slgRealm\",\"type\":\"string\",\"value\":\"epc.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"0~20\",\"display\":\"SBC MME IP\",\"filter\":\"0~20\",\"name\":\"sbcLocalIp\",\"type\":\"string\",\"value\":\"192.168.8.220\"},{\"access\":\"read-write\",\"comment\":\"0~20\",\"display\":\"SV MME IP\",\"filter\":\"0~20\",\"name\":\"svLocalIp\",\"type\":\"string\",\"value\":\"172.16.5.220\"},{\"access\":\"read-write\",\"comment\":\"0~20\",\"display\":\"SV MME PORT\",\"filter\":\"0~20\",\"name\":\"svLocalPort\",\"type\":\"string\",\"value\":\"9082\"},{\"access\":\"read-write\",\"comment\":\"0~20\",\"display\":\"SV REMOTE IP\",\"filter\":\"0~20\",\"name\":\"svRemoteIp\",\"type\":\"string\",\"value\":\"172.16.5.220\"},{\"access\":\"read-write\",\"comment\":\"0~20\",\"display\":\"SV REMOTE PORT\",\"filter\":\"0~20\",\"name\":\"svRemotePort\",\"type\":\"string\",\"value\":\"9082\"},{\"access\":\"read-write\",\"comment\":\"0~20\",\"display\":\"S3 REMOTE IP\",\"filter\":\"0~20\",\"name\":\"s3RemoteIp\",\"type\":\"string\",\"value\":\"172.16.5.220\"},{\"access\":\"read-write\",\"comment\":\"0~20\",\"display\":\"S3 REMOTE PORT\",\"filter\":\"0~20\",\"name\":\"s3RemotePort\",\"type\":\"string\",\"value\":\"9082\"}]', 1, '', 1735868503333, 'public'); +INSERT INTO `ne_config` VALUES (61, 'MME', 'gummei', 'Gummei List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"Group ID\",\"filter\":\"0~65535\",\"name\":\"groupId\",\"type\":\"int\",\"value\":\"4\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Code\",\"filter\":\"0~255\",\"name\":\"code\",\"type\":\"int\",\"value\":\"1\"}]', 3, '', 1735868503349, 'public'); +INSERT INTO `ne_config` VALUES (62, 'MME', 'tai', 'TAI List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"TAC\",\"filter\":\"0~65535\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"}]', 5, '', 1735868503354, 'public'); +INSERT INTO `ne_config` VALUES (63, 'MME', 'hss', 'HSS List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{1,15}$\",\"display\":\"IMSI Prefix\",\"filter\":\"^[0-9]{1,15}$\",\"name\":\"imsiPre\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~128\",\"display\":\"HSS Hostname\",\"filter\":\"0~128\",\"name\":\"hssHostname\",\"type\":\"string\",\"value\":\"hss.ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"0~128\",\"display\":\"HSS Realm\",\"filter\":\"0~128\",\"name\":\"hssRealm\",\"type\":\"string\",\"value\":\"ims.mnc001.mcc001.3gppnetwork.org\"},{\"access\":\"read-write\",\"comment\":\"SCTP|TCP\",\"display\":\"Protocol\",\"filter\":\"0~8\",\"name\":\"protocol\",\"type\":\"string\",\"value\":\"SCTP\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"HSS Port\",\"filter\":\"0~65535\",\"name\":\"hssPort\",\"type\":\"int\",\"value\":\"3868\"}]', 7, '', 1735868503358, 'public'); +INSERT INTO `ne_config` VALUES (64, 'MME', 'sgw', 'SGW List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"TAC\",\"filter\":\"0~65535\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"SGW IP\",\"filter\":\"0~64\",\"name\":\"sgwIp\",\"type\":\"string\",\"value\":\"172.16.5.150\"}]', 9, '', 1735868503363, 'public'); +INSERT INTO `ne_config` VALUES (65, 'MME', 'pgw', 'PGW List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~128\",\"display\":\"APN\",\"filter\":\"0~128\",\"name\":\"apn\",\"type\":\"string\",\"value\":\"internet\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"PGW IP\",\"filter\":\"0~64\",\"name\":\"pgwIp\",\"type\":\"string\",\"value\":\"192.168.1.181\"}]', 11, '', 1735868503367, 'public'); +INSERT INTO `ne_config` VALUES (66, 'MME', 'amf', 'AMF List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"^[0-9]{5,6}$\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"},{\"access\":\"read-write\",\"comment\":\"0~16777215\",\"display\":\"TAC\",\"filter\":\"0~16777215\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~255\",\"display\":\"Region ID\",\"filter\":\"0~255\",\"name\":\"regionId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1023\",\"display\":\"Set ID\",\"filter\":\"0~1023\",\"name\":\"setId\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~63\",\"display\":\"Pointer\",\"filter\":\"0~63\",\"name\":\"pointer\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"AMF IP\",\"filter\":\"0~64\",\"name\":\"amfIp\",\"type\":\"string\",\"value\":\"172.16.5.120\"}]', 13, '', 1735868503371, 'public'); +INSERT INTO `ne_config` VALUES (67, 'MME', 'white_list', 'WHITE LIST List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"IMEI\",\"filter\":\"0~64\",\"name\":\"imei\",\"type\":\"string\",\"value\":\"001\"}]', 15, '', 1735868503375, 'public'); +INSERT INTO `ne_config` VALUES (68, 'MME', 'roam_plmn', 'ROAM PLMN List', 'array', '[{\"access\":\"read\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"MCC\",\"filter\":\"0~64\",\"name\":\"mcc\",\"type\":\"string\",\"value\":\"001\"},{\"access\":\"read-write\",\"comment\":\"0~64\",\"display\":\"MNC\",\"filter\":\"0~64\",\"name\":\"mnc\",\"type\":\"string\",\"value\":\"01\"}]', 15, '', 1735868503380, 'public'); INSERT INTO `ne_config` VALUES (80, 'MOCNGW', 'system', 'System Config', 'list', '[{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"S1AP South Address\",\"filter\":\"0~64\",\"name\":\"s1apSouthAddr\",\"type\":\"string\",\"value\":\"192.168.7.163\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"S1AP North Address\",\"filter\":\"0~64\",\"name\":\"s1apNorthAddr\",\"type\":\"string\",\"value\":\"192.168.8.163\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"TAC\",\"filter\":\"0~65535\",\"name\":\"tac\",\"type\":\"int\",\"value\":\"1\"},{\"access\":\"read-write\",\"comment\":\"0~1048575\",\"display\":\"ENB ID\",\"filter\":\"0~1048575\",\"name\":\"enbId\",\"type\":\"int\",\"value\":\"24\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"User Plane Enabled\",\"filter\":\"{\\\"0\\\":\\\"false\\\",\\\"1\\\":\\\"true\\\"}\",\"name\":\"userPlaneEnabled\",\"type\":\"bool\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PFCP Address\",\"filter\":\"0~64\",\"name\":\"pfcpAddr\",\"type\":\"string\",\"value\":\"192.168.7.163\"}]', 1, '', 1719831210071, 'public'); INSERT INTO `ne_config` VALUES (81, 'MOCNGW', 'mme', 'MME List', 'array', '[{\"access\":\"read-only\",\"comment\":\"0~15\",\"display\":\"Index\",\"filter\":\"0~15\",\"name\":\"index\",\"type\":\"int\",\"value\":\"0\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"S1AP Address\",\"filter\":\"0~64\",\"name\":\"s1apAddr\",\"type\":\"string\",\"value\":\"192.168.1.161\"},{\"access\":\"read-write\",\"comment\":\"0~65535\",\"display\":\"S1AP Port\",\"filter\":\"0~65535\",\"name\":\"s1apPort\",\"type\":\"int\",\"value\":\"36412\"},{\"access\":\"read-write\",\"comment\":\"\",\"display\":\"PLMN ID\",\"filter\":\"^[0-9]{5,6}$\",\"name\":\"plmnId\",\"type\":\"regex\",\"value\":\"00101\"}]', 3, '', 1719831210273, 'public'); diff --git a/database/install/sys_dict_data1_i18n_zh.sql b/database/install/sys_dict_data1_i18n_zh.sql index 1e800173..eabb73ed 100644 --- a/database/install/sys_dict_data1_i18n_zh.sql +++ b/database/install/sys_dict_data1_i18n_zh.sql @@ -134,7 +134,7 @@ INSERT INTO `sys_dict_data` VALUES (1126, 1126, 'menu.dashboard.smscCDR.content' INSERT INTO `sys_dict_data` VALUES (1127, 1127, 'menu.perf.thresholdRemark', '性能门限菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1128, 1128, 'menu.perf.kpiRemark', '黄金指标菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1129, 1129, 'menu.perf.customTargetRemark', '自定义指标菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); --- INSERT INTO `sys_dict_data` VALUES (1130, 1130, 'menu.perf.setRemark', '性能通用设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (1130, 1130, 'menu.dashboard.smfCDRByIMSI', '数据流量报表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1131, 1131, 'menu.mmlRemark', 'MML管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1132, 1132, 'menu.mml.neRemark', '网元操作菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1133, 1133, 'menu.mml.udmRemark', '网元UDM用户数据菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -153,7 +153,7 @@ INSERT INTO `sys_dict_data` VALUES (1145, 1145, 'menu.system.systemSetRemark', ' INSERT INTO `sys_dict_data` VALUES (1146, 1146, 'menu.system.systemResourceRemark', '系统资源 cpu io network菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -- INSERT INTO `sys_dict_data` VALUES (1147, 1147, 'menu.config.configNEFormRemark', '参数配置Form菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -- INSERT INTO `sys_dict_data` VALUES (1148, 1148, 'menu.config.configNETreeRemark', '参数配置Tree菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); --- INSERT INTO `sys_dict_data` VALUES (1149, 1149, 'menu.config.configNETreeTableRemark', '参数配置TreeTable菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (1149, 1149, 'menu.neData.baseStation', '基站状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1150, 1150, 'menu.noData', '没有可访问菜单数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1151, 1151, 'menu.errNameExists', '操作菜单【{name}】失败,菜单名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (1152, 1152, 'menu.errPathExists', '操作菜单【{name}】失败,菜单路由地址已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); diff --git a/database/install/sys_dict_data2_i18n_en.sql b/database/install/sys_dict_data2_i18n_en.sql index da03e3d5..040b0c62 100644 --- a/database/install/sys_dict_data2_i18n_en.sql +++ b/database/install/sys_dict_data2_i18n_en.sql @@ -134,7 +134,7 @@ INSERT INTO `sys_dict_data` VALUES (3126, 3126, 'menu.dashboard.smscCDR.content' INSERT INTO `sys_dict_data` VALUES (3127, 3127, 'menu.perf.thresholdRemark', 'Performance Threshold Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3128, 3128, 'menu.perf.kpiRemark', 'Key Performance Indicator Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3129, 3129, 'menu.perf.customTargetRemark', 'Custom Indicator Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); --- INSERT INTO `sys_dict_data` VALUES (3130, 3130, 'menu.perf.setRemark', 'Performance General Settings Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (3130, 3130, 'menu.dashboard.smfCDRByIMSI', 'Data Usage Report', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3131, 3131, 'menu.mmlRemark', 'MML Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3132, 3132, 'menu.mml.neRemark', 'Network Element Operations Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3133, 3133, 'menu.mml.udmRemark', 'Network Element UDM User Data Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -153,7 +153,7 @@ INSERT INTO `sys_dict_data` VALUES (3145, 3145, 'menu.system.systemSetRemark', ' INSERT INTO `sys_dict_data` VALUES (3146, 3146, 'menu.system.systemResourceRemark', 'System Resources cpu io network menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -- INSERT INTO `sys_dict_data` VALUES (3147, 3147, 'menu.config.configNEFormRemark', 'Parameter Configuration Form Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -- INSERT INTO `sys_dict_data` VALUES (3148, 3148, 'menu.config.configNETreeRemark', 'Parameter Configuration Tree Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); --- INSERT INTO `sys_dict_data` VALUES (3149, 3149, 'menu.config.configNETreeTableRemark', 'Configuring the TreeTable menu with parameters', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +INSERT INTO `sys_dict_data` VALUES (3149, 3149, 'menu.neData.baseStation', 'Radio State', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3150, 3150, 'menu.noData', 'There is no accessible menu data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3151, 3151, 'menu.errNameExists', 'Failed to operate menu [{name}], menu name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_dict_data` VALUES (3152, 3152, 'menu.errPathExists', 'Failed to operate menu [{name}], menu routing address already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); diff --git a/database/install/sys_menu.sql b/database/install/sys_menu.sql index 9eb2f92d..94719a80 100644 --- a/database/install/sys_menu.sql +++ b/database/install/sys_menu.sql @@ -146,6 +146,7 @@ INSERT INTO `sys_menu` VALUES (2091, 'menu.log.mml', 2089, 30, 'mml', 'logManage INSERT INTO `sys_menu` VALUES (2092, 'menu.log.alarm', 2089, 40, 'alarm-log', 'logManage/alarm/index', '1', '0', 'M', '1', '1', 'logManage:alarm:index', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.alarmRemark'); INSERT INTO `sys_menu` VALUES (2094, 'menu.log.forwarding', 2089, 41, 'forwarding', 'logManage/forwarding/index', '1', '0', 'M', '1', '1', 'logManage:forwarding:index', 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.log.forwardingRemark'); INSERT INTO `sys_menu` VALUES (2095, 'menu.log.set', 2089, 45, 'logSet', 'logManage/logSet/index', '1', '0', 'M', '0', '0', 'logManage:logSet:index', 'icon-you', 'supervisor', 1700000000000, 'supervisor', 1715332370830, 'menu.log.setRemark'); +INSERT INTO `sys_menu` VALUES (2096, 'menu.neData.baseStation', 5, 12, 'base-station', 'ne-data/base-station/index', '1', '0', 'M', '1', '1', 'ne-data:base-station:list', 'icon-fenxiang', 'supervisor', 1735634289850, '', 0, ''); INSERT INTO `sys_menu` VALUES (2097, 'menu.fault.history', 2129, 2, 'history-alarm', 'faultManage/history-alarm/index', '1', '1', 'M', '1', '1', 'faultManage/history-alarm/index', 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.historyRemark'); INSERT INTO `sys_menu` VALUES (2098, 'menu.fault.set', 2129, 100, 'fault-setting', 'faultManage/fault-setting/index', '1', '0', 'M', '0', '1', 'faultManage/fault-setting/index', 'icon-gonggaodayi', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.setRemark'); INSERT INTO `sys_menu` VALUES (2099, 'menu.perf', 0, 5, 'perfManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.perfRemark'); @@ -167,7 +168,7 @@ INSERT INTO `sys_menu` VALUES (2114, 'menu.system.systemSet', 1, 60, 'setting', INSERT INTO `sys_menu` VALUES (2115, 'menu.system.systemResource', 1, 6, 'monitor', 'monitor/monitor/index', '1', '1', 'M', '1', '1', 'monitor:monitor:info', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemResourceRemark'); INSERT INTO `sys_menu` VALUES (2116, 'menu.dashboard.smscCDR.content', 2157, 1, '', '', '1', '1', 'B', '1', '1', 'cdr:smsc:content', '#', 'supervisor', 1734936660956, '', 0, ''); INSERT INTO `sys_menu` VALUES (2117, 'menu.common.delete', 2140, 1, '', '', '1', '1', 'B', '1', '1', 'cdr:ne:remove', '#', 'supervisor', 1734936660956, '', 0, ''); --- INSERT INTO `sys_menu` VALUES (2118, 'menu.config.configNETreeTable', 4, 2, 'configNETreeTable', 'configManage/configParamTreeTable/index', '1', '1', 'M', '1', '0', 'configManage:configParam:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.config.configNETreeTableRemark'); +INSERT INTO `sys_menu` VALUES (2118, 'menu.dashboard.smfCDRByIMSI', 2140, 7, 'smfCDRByIMSI', 'dashboard/smfCDRByIMSI/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-gerenzhanghu', 'supervisor', 1735010792379, '', 0, ''); INSERT INTO `sys_menu` VALUES (2119, 'menu.ueUser.n3iwf', 5, 8, 'n3iwf', 'neUser/n3iwf/index', '1', '0', 'M', '0', '1', 'neUser:n3iwf:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_menu` VALUES (2120, 'menu.ueUser.pcf', 5, 9, 'pcf', 'neUser/pcf/index', '1', '0', 'M', '1', '1', 'neUser:pcf:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, NULL); INSERT INTO `sys_menu` VALUES (2121, 'menu.system.user.editRole', 100, 8, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:editRole', '#', 'supervisor', 1700000000000, NULL, 0, NULL); diff --git a/database/install/ue_event.sql b/database/install/ue_event.sql index a9209ade..4aacf058 100644 --- a/database/install/ue_event.sql +++ b/database/install/ue_event.sql @@ -1,18 +1,6 @@ -/* - Navicat Premium Data Transfer - - Source Server : local_mariadb - Source Server Type : MariaDB - Source Server Version : 100338 (10.3.38-MariaDB) - Source Host : localhost:33066 - Source Schema : tenants_db - - Target Server Type : MariaDB - Target Server Version : 100338 (10.3.38-MariaDB) - File Encoding : 65001 - - Date: 04/07/2024 10:15:55 -*/ +-- +-- Table structure for table `ue_event` +-- SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; diff --git a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql index 6acf0bfa..e46cfbb1 100644 --- a/database/upgrade/upg_sys_dict_data1_i18n_zh.sql +++ b/database/upgrade/upg_sys_dict_data1_i18n_zh.sql @@ -141,7 +141,7 @@ REPLACE INTO `sys_dict_data` VALUES (1126, 1126, 'menu.dashboard.smscCDR.content REPLACE INTO `sys_dict_data` VALUES (1127, 1127, 'menu.perf.thresholdRemark', '性能门限菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1128, 1128, 'menu.perf.kpiRemark', '黄金指标菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1129, 1129, 'menu.perf.customTargetRemark', '自定义指标菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -REPLACE INTO `sys_dict_data` VALUES (1130, 1130, 'menu.perf.setRemark', '性能通用设置菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1130, 1130, 'menu.dashboard.smfCDRByIMSI', '数据流量报表', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1131, 1131, 'menu.mmlRemark', 'MML管理目录', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1132, 1132, 'menu.mml.neRemark', '网元操作菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1133, 1133, 'menu.mml.udmRemark', '网元UDM用户数据菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -160,7 +160,7 @@ REPLACE INTO `sys_dict_data` VALUES (1145, 1145, 'menu.system.systemSetRemark', REPLACE INTO `sys_dict_data` VALUES (1146, 1146, 'menu.system.systemResourceRemark', '系统资源 cpu io network菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -- REPLACE INTO `sys_dict_data` VALUES (1147, 1147, 'menu.config.configNEFormRemark', '参数配置Form菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); -- REPLACE INTO `sys_dict_data` VALUES (1148, 1148, 'menu.config.configNETreeRemark', '参数配置Tree菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); --- REPLACE INTO `sys_dict_data` VALUES (1149, 1149, 'menu.config.configNETreeTableRemark', '参数配置TreeTable菜单', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (1149, 1149, 'menu.neData.baseStation', '基站状态', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1150, 1150, 'menu.noData', '没有可访问菜单数据!', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1151, 1151, 'menu.errNameExists', '操作菜单【{name}】失败,菜单名称已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (1152, 1152, 'menu.errPathExists', '操作菜单【{name}】失败,菜单路由地址已存在', 'i18n_zh', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); diff --git a/database/upgrade/upg_sys_dict_data2_i18n_en.sql b/database/upgrade/upg_sys_dict_data2_i18n_en.sql index 6e29893e..85a5220f 100644 --- a/database/upgrade/upg_sys_dict_data2_i18n_en.sql +++ b/database/upgrade/upg_sys_dict_data2_i18n_en.sql @@ -139,7 +139,7 @@ REPLACE INTO `sys_dict_data` VALUES (3126, 3126, 'menu.dashboard.smscCDR.content REPLACE INTO `sys_dict_data` VALUES (3127, 3127, 'menu.perf.thresholdRemark', 'Performance Threshold Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3128, 3128, 'menu.perf.kpiRemark', 'Key Performance Indicator Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3129, 3129, 'menu.perf.customTargetRemark', 'Custom Indicator Management Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); --- REPLACE INTO `sys_dict_data` VALUES (3130, 3130, 'menu.perf.setRemark', 'Performance General Settings Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3130, 3130, 'menu.dashboard.smfCDRByIMSI', 'Data Usage Report', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3131, 3131, 'menu.mmlRemark', 'MML Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3132, 3132, 'menu.mml.neRemark', 'Network Element Operations Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3133, 3133, 'menu.mml.udmRemark', 'Network Element UDM User Data Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); @@ -156,7 +156,7 @@ REPLACE INTO `sys_dict_data` VALUES (3143, 3143, 'log.operate.title.sgwcCDR', 'R REPLACE INTO `sys_dict_data` VALUES (3144, 3144, 'menu.securityRemark', 'Security Management Catalog', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3145, 3145, 'menu.system.systemSetRemark', 'System Settings Menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3146, 3146, 'menu.system.systemResourceRemark', 'System Resources cpu io network menu', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); --- REPLACE INTO `sys_dict_data` VALUES (3149, 3149, 'menu.config.configNETreeTableRemark', 'Configuring the TreeTable menu with parameters', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); +REPLACE INTO `sys_dict_data` VALUES (3149, 3149, 'menu.neData.baseStation', 'Radio State', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3150, 3150, 'menu.noData', 'There is no accessible menu data!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3151, 3151, 'menu.errNameExists', 'Failed to operate menu [{name}], menu name already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_dict_data` VALUES (3152, 3152, 'menu.errPathExists', 'Failed to operate menu [{name}], menu routing address already exists!', 'i18n_en', NULL, NULL, '1', 'supervisor', 1700000000000, NULL, 0, NULL); diff --git a/database/upgrade/upg_sys_menu.sql b/database/upgrade/upg_sys_menu.sql index 3db9765c..60de3950 100644 --- a/database/upgrade/upg_sys_menu.sql +++ b/database/upgrade/upg_sys_menu.sql @@ -129,6 +129,7 @@ REPLACE INTO `sys_menu` VALUES (2091, 'menu.log.mml', 2089, 30, 'mml', 'logManag REPLACE INTO `sys_menu` VALUES (2092, 'menu.log.alarm', 2089, 40, 'alarm-log', 'logManage/alarm/index', '1', '0', 'M', '1', '1', 'logManage:alarm:index', 'icon-fuzhidaima', 'supervisor', 1700000000000, NULL, 0, 'menu.log.alarmRemark'); REPLACE INTO `sys_menu` VALUES (2094, 'menu.log.forwarding', 2089, 41, 'forwarding', 'logManage/forwarding/index', '1', '0', 'M', '1', '1', 'logManage:forwarding:index', 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.log.forwardingRemark'); REPLACE INTO `sys_menu` VALUES (2095, 'menu.log.set', 2089, 45, 'logSet', 'logManage/logSet/index', '1', '0', 'M', '0', '0', 'logManage:logSet:index', 'icon-you', 'supervisor', 1700000000000, 'supervisor', 1715332370830, 'menu.log.setRemark'); +REPLACE INTO `sys_menu` VALUES (2096, 'menu.neData.baseStation', 5, 12, 'base-station', 'ne-data/base-station/index', '1', '0', 'M', '1', '1', 'ne-data:base-station:list', 'icon-fenxiang', 'supervisor', 1735634289850, '', 0, ''); REPLACE INTO `sys_menu` VALUES (2097, 'menu.fault.history', 2129, 2, 'history-alarm', 'faultManage/history-alarm/index', '1', '1', 'M', '1', '1', 'faultManage/history-alarm/index', 'icon-huizhiguize', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.historyRemark'); REPLACE INTO `sys_menu` VALUES (2098, 'menu.fault.set', 2129, 100, 'fault-setting', 'faultManage/fault-setting/index', '1', '0', 'M', '0', '1', 'faultManage/fault-setting/index', 'icon-gonggaodayi', 'supervisor', 1700000000000, NULL, 0, 'menu.fault.setRemark'); REPLACE INTO `sys_menu` VALUES (2099, 'menu.perf', 0, 5, 'perfManage', NULL, '1', '0', 'D', '1', '1', NULL, 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.perfRemark'); @@ -150,7 +151,7 @@ REPLACE INTO `sys_menu` VALUES (2114, 'menu.system.systemSet', 1, 60, 'setting', REPLACE INTO `sys_menu` VALUES (2115, 'menu.system.systemResource', 1, 6, 'monitor', 'monitor/monitor/index', '1', '1', 'M', '1', '1', 'monitor:monitor:info', 'icon-soutubiao', 'supervisor', 1700000000000, NULL, 0, 'menu.system.systemResourceRemark'); REPLACE INTO `sys_menu` VALUES (2116, 'menu.dashboard.smscCDR.content', 2157, 1, '', '', '1', '1', 'B', '1', '1', 'cdr:smsc:content', '#', 'supervisor', 1734936660956, '', 0, ''); REPLACE INTO `sys_menu` VALUES (2117, 'menu.common.delete', 2140, 1, '', '', '1', '1', 'B', '1', '1', 'cdr:ne:remove', '#', 'supervisor', 1734936660956, '', 0, ''); --- REPLACE INTO `sys_menu` VALUES (2118, 'menu.config.configNETreeTable', 4, 2, 'configNETreeTable', 'configManage/configParamTreeTable/index', '1', '1', 'M', '1', '0', 'configManage:configParam:index', 'icon-wofaqi', 'supervisor', 1700000000000, NULL, 0, 'menu.config.configNETreeTableRemark'); +REPLACE INTO `sys_menu` VALUES (2118, 'menu.dashboard.smfCDRByIMSI', 2140, 7, 'smfCDRByIMSI', 'dashboard/smfCDRByIMSI/index', '1', '0', 'M', '1', '1', 'dashboard:cdr:index', 'icon-gerenzhanghu', 'supervisor', 1735010792379, '', 0, ''); REPLACE INTO `sys_menu` VALUES (2119, 'menu.ueUser.n3iwf', 5, 8, 'n3iwf', 'neUser/n3iwf/index', '1', '0', 'M', '0', '1', 'neUser:n3iwf:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_menu` VALUES (2120, 'menu.ueUser.pcf', 5, 9, 'pcf', 'neUser/pcf/index', '1', '0', 'M', '1', '1', 'neUser:pcf:index', 'icon-paixu', 'supervisor', 1700000000000, NULL, 0, NULL); REPLACE INTO `sys_menu` VALUES (2121, 'menu.system.user.editRole', 100, 8, NULL, NULL, '1', '1', 'B', '1', '1', 'system:user:editRole', '#', 'supervisor', 1700000000000, NULL, 0, NULL); diff --git a/database/upgrade/upg_ue_event.sql b/database/upgrade/upg_ue_event.sql index 45397fb4..caa7ef5f 100644 --- a/database/upgrade/upg_ue_event.sql +++ b/database/upgrade/upg_ue_event.sql @@ -1,19 +1,3 @@ -/* - Navicat Premium Data Transfer - - Source Server : local_mariadb - Source Server Type : MariaDB - Source Server Version : 100338 (10.3.38-MariaDB) - Source Host : localhost:33066 - Source Schema : tenants_db - - Target Server Type : MariaDB - Target Server Version : 100338 (10.3.38-MariaDB) - File Encoding : 65001 - - Date: 04/07/2024 10:15:55 -*/ - SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; diff --git a/database/upgrade/upg_ue_event_amf.sql b/database/upgrade/upg_ue_event_amf.sql index a6fa62c6..599e534f 100644 --- a/database/upgrade/upg_ue_event_amf.sql +++ b/database/upgrade/upg_ue_event_amf.sql @@ -1,25 +1,10 @@ -/* - Navicat Premium Data Transfer - - Source Server : local_mariadb - Source Server Type : MariaDB - Source Server Version : 100338 (10.3.38-MariaDB) - Source Host : localhost:33066 - Source Schema : tenants_db - - Target Server Type : MariaDB - Target Server Version : 100338 (10.3.38-MariaDB) - File Encoding : 65001 - - Date: 04/07/2024 10:41:59 -*/ - SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for ue_event_amf -- ---------------------------- +DROP TABLE IF EXISTS `ue_event_amf`; CREATE TABLE IF NOT EXISTS `ue_event_amf` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, diff --git a/database/upgrade/upg_ue_event_mme.sql b/database/upgrade/upg_ue_event_mme.sql index 9475abc4..57243e73 100644 --- a/database/upgrade/upg_ue_event_mme.sql +++ b/database/upgrade/upg_ue_event_mme.sql @@ -1,25 +1,10 @@ -/* - Navicat Premium Data Transfer - - Source Server : local_mariadb - Source Server Type : MariaDB - Source Server Version : 100338 (10.3.38-MariaDB) - Source Host : localhost:33066 - Source Schema : tenants_db - - Target Server Type : MariaDB - Target Server Version : 100338 (10.3.38-MariaDB) - File Encoding : 65001 - - Date: 04/07/2024 10:16:18 -*/ - SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for ue_event_mme -- ---------------------------- +DROP TABLE IF EXISTS `ue_event_mme`; CREATE TABLE IF NOT EXISTS `ue_event_mme` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, diff --git a/features/event/event.go b/features/event/event.go index 1986e0ad..23bc1c25 100644 --- a/features/event/event.go +++ b/features/event/event.go @@ -1,19 +1,17 @@ package event import ( - "encoding/json" "fmt" - "io" "net/http" "strings" "time" "be.ems/lib/core/ctx" "be.ems/lib/dborm" - "be.ems/lib/global" "be.ems/lib/log" "be.ems/lib/services" "be.ems/restagent/config" + "be.ems/src/framework/utils/parse" neService "be.ems/src/modules/network_element/service" wsService "be.ems/src/modules/ws/service" "github.com/gin-gonic/gin" @@ -37,34 +35,100 @@ type UEEvent struct { TenantID string `json:"tenantID" xorm:"tenant_id"` } +// 旧AMF上报处理 func PostUEEventFromAMF(c *gin.Context) { log.Info("PostUEEventFromAMF processing... ") - body, err := io.ReadAll(io.LimitReader(c.Request.Body, global.RequestBodyMaxLen)) - if err != nil { - log.Error("Failed to io.ReadAll: ", err) - services.ResponseNotFound404UriNotExist(c.Writer, c.Request) - return - } - - //vars := mux.Vars(c.Request) eventType, ok := c.Params.Get("eventType") if !ok || eventType == "" { log.Error("eventType is empty") services.ResponseNotFound404UriNotExist(c.Writer, c.Request) return } - ueEvent := new(UEEvent) - err = json.Unmarshal(body, &ueEvent.EventJson) - if err != nil { + var body map[string]any + if err := c.ShouldBindBodyWithJSON(&body); err != nil { log.Error("Failed to Unmarshal ueEvent:", err) services.ResponseInternalServerError500ProcessError(c.Writer, err) return } - ueEvent.NeType = "AMF" - ueEvent.Timestamp = time.Now().Unix() - ueEvent.EventType = eventType - log.Trace("ueEvent AMF:", ueEvent) + + ueEvent := UEEvent{ + NeType: "AMF", + Timestamp: time.Now().Unix(), + EventType: eventType, + } + // 从eventJson中获取rmUID + if v, ok := body["rmUID"]; ok { + ueEvent.RmUID = fmt.Sprint(v) + } else { + ueEvent.RmUID = "4400HXAMF001" + } + if v, ok := body["neName"]; ok { + ueEvent.NeName = fmt.Sprint(v) + } else { + ueEvent.NeName = "AMF_001" + } + + // 统一格式 + eventJson := map[string]any{"cellID": 0, "gNBID": "", "imsi": "", "onlineNumber": 0, "result": "", "tacID": 0, "timestamp": 0, "time": 0, "type": eventType} + switch eventType { + case "auth-result": + // {"authCode":"200","authMessage":"成功","authTime":"2024-12-07 16:48:37","cellID":"3","gNBID":"1","imsi":"460002082100000","onlineNumber":1,"tacID":"81"} + if v, ok := body["imsi"]; ok { + eventJson["imsi"] = fmt.Sprint(v) + } + if v, ok := body["cellID"]; ok { + eventJson["cellID"] = fmt.Sprint(v) + } + if v, ok := body["gNBID"]; ok { + eventJson["gNBID"] = fmt.Sprint(v) + } + if v, ok := body["tacID"]; ok { + eventJson["tacID"] = fmt.Sprint(v) + } + if v, ok := body["onlineNumber"]; ok { + eventJson["onlineNumber"] = parse.Number(v) + } + if v, ok := body["authCode"]; ok { + eventJson["result"] = fmt.Sprint(v) + } + if v, ok := body["authTime"]; ok { + eventJson["timestamp"] = ueEvent.Timestamp + eventJson["time"] = fmt.Sprint(v) + } + case "detach": + // {"detachResult":0,"detachTime":"2024-12-07 18:00:47","imsi":"460002082100000"} + if v, ok := body["imsi"]; ok { + eventJson["imsi"] = fmt.Sprint(v) + } + if v, ok := body["detachResult"]; ok { + if fmt.Sprint(v) == "0" { + eventJson["result"] = "200" + } else { + eventJson["result"] = "500" + } + } + if v, ok := body["detachTime"]; ok { + eventJson["timestamp"] = ueEvent.Timestamp + eventJson["time"] = fmt.Sprint(v) + } + case "cm-state": + // {"changeTime":"2024-12-07 17:07:52","imsi":"460002082100000","onlineNumber":1,"status":2} + if v, ok := body["imsi"]; ok { + eventJson["imsi"] = fmt.Sprint(v) + } + if v, ok := body["onlineNumber"]; ok { + eventJson["onlineNumber"] = parse.Number(v) + } + if v, ok := body["status"]; ok { + eventJson["result"] = fmt.Sprint(v) + } + if v, ok := body["changeTime"]; ok { + eventJson["timestamp"] = ueEvent.Timestamp + eventJson["time"] = fmt.Sprint(v) + } + } + ueEvent.EventJson = eventJson // for multi-tenancy where := fmt.Sprintf("status='1' and tenancy_type='IMSI' and '%v' like tenancy_key", ueEvent.EventJson["imsi"]) @@ -83,13 +147,20 @@ func PostUEEventFromAMF(c *gin.Context) { return } - // AMF没有RmUID,直接推送 - // 推送到ws订阅组 - wsService.NewWSSend.ByGroupID(wsService.GROUP_AMF_UE, ueEvent) + // 发送到匹配的网元 + neInfo := neService.NewNeInfo.SelectNeInfoByRmuid(ueEvent.RmUID) + if neInfo.RmUID == ueEvent.RmUID { + // 推送到ws订阅组 + if ueEvent.NeType == "AMF" { + wsService.NewWSSend.ByGroupID(wsService.GROUP_AMF_UE, ueEvent) + wsService.NewWSSend.ByGroupID(wsService.GROUP_AMF_UE+"_"+neInfo.NeId, ueEvent) + } + } services.ResponseStatusOK204NoContent(c.Writer) } +// UE上报处理 func PostUEEvent(w http.ResponseWriter, r *http.Request) { log.Info("PostUEEvent processing... ") @@ -124,7 +195,12 @@ func PostUEEvent(w http.ResponseWriter, r *http.Request) { if neInfo.RmUID == ueEvent.RmUID { // 推送到ws订阅组 if ueEvent.NeType == "MME" { - wsService.NewWSSend.ByGroupID(wsService.GROUP_MME_UE+neInfo.NeId, ueEvent) + wsService.NewWSSend.ByGroupID(wsService.GROUP_MME_UE, ueEvent) + wsService.NewWSSend.ByGroupID(wsService.GROUP_MME_UE+"_"+neInfo.NeId, ueEvent) + } + if ueEvent.NeType == "AMF" { + wsService.NewWSSend.ByGroupID(wsService.GROUP_AMF_UE, ueEvent) + wsService.NewWSSend.ByGroupID(wsService.GROUP_AMF_UE+"_"+neInfo.NeId, ueEvent) } } diff --git a/makefile b/makefile index a706c3f8..dbb1b655 100644 --- a/makefile +++ b/makefile @@ -3,7 +3,7 @@ ProjectL = omc ProjectU = OMC PROJECT = $(ProjectL) -VERSION = 2.2412.3 +VERSION = 2.2501.1 RelDate = `date +%Y%m%d` Release = $(RelDate) RelVer = $(VERSION)-$(RelDate) diff --git a/mkpkg.sh b/mkpkg.sh index 9d1d0d46..ff53209d 100755 --- a/mkpkg.sh +++ b/mkpkg.sh @@ -2,7 +2,7 @@ ProcList="restagent crontask sshsvc captrace data2html" ProjectL=omc -VERSION=2.2412.3 +VERSION=2.2501.1 RelDate=`date +%Y%m%d` Release=${RelDate} RelVer=${VERSION}-${RelDate} diff --git a/restagent/makefile b/restagent/makefile index 8cd0f5af..4b2479fd 100644 --- a/restagent/makefile +++ b/restagent/makefile @@ -1,7 +1,7 @@ # Makefile for rest agent project PROJECT = OMC -VERSION = 2.2412.3 +VERSION = 2.2501.1 PLATFORM = amd64 ARMPLATFORM = aarch64 BUILDDIR = ../../build diff --git a/src/modules/network_data/controller/sgwc.go b/src/modules/network_data/controller/sgwc.go index 5089ebbf..f528c412 100644 --- a/src/modules/network_data/controller/sgwc.go +++ b/src/modules/network_data/controller/sgwc.go @@ -1,16 +1,12 @@ package controller import ( - "encoding/json" "fmt" - "strconv" "strings" "time" "be.ems/src/framework/i18n" - "be.ems/src/framework/logger" "be.ems/src/framework/utils/ctx" - "be.ems/src/framework/utils/file" "be.ems/src/framework/utils/parse" "be.ems/src/framework/vo/result" "be.ems/src/modules/network_data/model" @@ -116,173 +112,8 @@ func (s *SGWCController) CDRExport(c *gin.Context) { // 导出文件名称 fileName := fmt.Sprintf("sgwc_cdr_event_export_%d_%d.xlsx", len(rows), time.Now().UnixMilli()) - // 第一行表头标题 - headerCells := map[string]string{ - "A1": "ID", - "B1": "NE Name", - "C1": "Resource Unique ID", - "D1": "Charging ID", - "E1": "IMSI", - "F1": "MSISDN", - "G1": "GPRS Uplink", - "H1": "GPRS Downlink", - "I1": "Duration", - "J1": "Invocation Time", - "K1": "PGW Address Used", - "L1": "SGW Address", - "M1": "RAT Type", - "N1": "PDPPDN Type", - "O1": "PDPPDN Address", - "P1": "Node Address", - "Q1": "Node Type", - "R1": "Record Access Point Name NI", - "S1": "Record Cause For Rec Closing", - "T1": "Record Sequence Number", - "U1": "Local Record Sequence Number", - } - // 从第二行开始的数据 - dataCells := make([]map[string]any, 0) - for i, row := range rows { - idx := strconv.Itoa(i + 2) - // 解析 JSON 字符串为 map - var cdrJSON map[string]interface{} - err := json.Unmarshal([]byte(row.CDRJSONStr), &cdrJSON) - if err != nil { - logger.Warnf("CDRExport Error parsing JSON: %s", err.Error()) - continue - } - // 计费ID - chargingID := "" - if v, ok := cdrJSON["chargingID"]; ok && v != nil { - chargingID = fmt.Sprint(parse.Number(v)) - } - // IMSI - servedIMSI := "" - if v, ok := cdrJSON["servedIMSI"]; ok && v != nil { - servedIMSI = fmt.Sprint(v) - } - // MSISDN - servedMSISDN := "" - if v, ok := cdrJSON["servedMSISDN"]; ok && v != nil { - servedMSISDN = fmt.Sprint(v) - } - // pGWAddressUsed - pGWAddressUsed := "" - if v, ok := cdrJSON["pGWAddressUsed"]; ok && v != nil { - pGWAddressUsed = fmt.Sprint(v) - } - // sGWAddress - sGWAddress := "" - if v, ok := cdrJSON["sGWAddress"]; ok && v != nil { - sGWAddress = fmt.Sprint(v) - } - // rATType - rATType := "" - if v, ok := cdrJSON["rATType"]; ok && v != nil { - rATType = fmt.Sprint(v) - } - // pdpPDNType - pdpPDNType := "" - if v, ok := cdrJSON["pdpPDNType"]; ok && v != nil { - pdpPDNType = fmt.Sprint(v) - } - // servedPDPPDNAddress - servedPDPPDNAddress := "" - if v, ok := cdrJSON["servedPDPPDNAddress"]; ok && v != nil { - servedPDPPDNAddress = fmt.Sprint(v) - } - // servedPDPPDNAddress - servingNodeAddress := []string{} - if v, ok := cdrJSON["servingNodeAddress"]; ok && v != nil { - for _, v := range v.([]any) { - servingNodeAddress = append(servingNodeAddress, fmt.Sprint(v)) - } - } - // servingNodeType - servingNodeType := []string{} - if v, ok := cdrJSON["servingNodeType"]; ok && v != nil { - for _, v := range v.([]any) { - if v, ok := v.(map[string]any)["servingNodeType"]; ok && v != nil { - servingNodeType = append(servingNodeType, fmt.Sprint(v)) - } - } - } - // accessPointNameNI - accessPointNameNI := "" - if v, ok := cdrJSON["accessPointNameNI"]; ok && v != nil { - accessPointNameNI = fmt.Sprint(v) - } - // causeForRecClosing - causeForRecClosing := "" - if v, ok := cdrJSON["causeForRecClosing"]; ok && v != nil { - causeForRecClosing = fmt.Sprint(v) - } - // recordSequenceNumber - recordSequenceNumber := "" - if v, ok := cdrJSON["recordSequenceNumber"]; ok && v != nil { - recordSequenceNumber = fmt.Sprint(v) - } - // localRecordSequenceNumber - localRecordSequenceNumber := "" - if v, ok := cdrJSON["localRecordSequenceNumber"]; ok && v != nil { - localRecordSequenceNumber = fmt.Sprint(v) - } - // 数据量上行链路 - dataVolumeGPRSUplink := []string{} - // 数据量下行链路 - dataVolumeGPRSDownlink := []string{} - if v, ok := cdrJSON["listOfTrafficVolumes"]; ok && v != nil { - usageList := v.([]any) - if len(usageList) > 0 { - for _, used := range usageList { - usedUnit := used.(map[string]any) - if dup, dupOk := usedUnit["dataVolumeGPRSUplink"]; dupOk { - dataVolumeGPRSUplink = append(dataVolumeGPRSUplink, fmt.Sprint(parse.Number(dup))) - } - if ddown, ddownOk := usedUnit["dataVolumeGPRSDownlink"]; ddownOk { - dataVolumeGPRSDownlink = append(dataVolumeGPRSDownlink, fmt.Sprint(parse.Number(ddown))) - } - } - } - } - // 时长 - duration := "-" - if v, ok := cdrJSON["duration"]; ok && v != nil { - duration = fmt.Sprint(parse.Number(v)) - } - // 调用时间 - invocationTimestamp := "" - if v, ok := cdrJSON["recordOpeningTime"]; ok && v != nil { - invocationTimestamp = v.(string) - } - - dataCells = append(dataCells, map[string]any{ - "A" + idx: row.ID, - "B" + idx: row.NeName, - "C" + idx: row.RmUID, - "D" + idx: chargingID, - "E" + idx: servedIMSI, - "F" + idx: servedMSISDN, - "G" + idx: strings.Join(dataVolumeGPRSUplink, ","), - "H" + idx: strings.Join(dataVolumeGPRSDownlink, ","), - "I" + idx: duration, - "J" + idx: invocationTimestamp, - "K" + idx: pGWAddressUsed, - "L" + idx: sGWAddress, - "M" + idx: rATType, - "N" + idx: pdpPDNType, - "O" + idx: servedPDPPDNAddress, - "P" + idx: strings.Join(servingNodeAddress, ","), - "Q" + idx: strings.Join(servingNodeType, ","), - "R" + idx: accessPointNameNI, - "S" + idx: causeForRecClosing, - "T" + idx: recordSequenceNumber, - "U" + idx: localRecordSequenceNumber, - }) - } - // 导出数据表格 - saveFilePath, err := file.WriteSheet(headerCells, dataCells, fileName, "") + saveFilePath, err := s.cdrEventService.ExportXlsx(rows, fileName) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) return diff --git a/src/modules/network_data/network_data.go b/src/modules/network_data/network_data.go index faa613e5..ee2db3a7 100644 --- a/src/modules/network_data/network_data.go +++ b/src/modules/network_data/network_data.go @@ -136,6 +136,10 @@ func Setup(router *gin.Engine) { middleware.PreAuthorize(nil), controller.NewAMF.NbInfoList, ) + amfGroup.GET("/nb/list-cfg", + middleware.PreAuthorize(nil), + controller.NewAMF.NbStateList, + ) } // 网元UPF diff --git a/src/modules/network_data/service/cdr_event_ims.go b/src/modules/network_data/service/cdr_event_ims.go index 8370a9f5..071177f6 100644 --- a/src/modules/network_data/service/cdr_event_ims.go +++ b/src/modules/network_data/service/cdr_event_ims.go @@ -1,10 +1,18 @@ package service import ( + "encoding/json" "fmt" + "strconv" + "be.ems/src/framework/i18n" + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/date" + "be.ems/src/framework/utils/file" + "be.ems/src/framework/utils/parse" "be.ems/src/modules/network_data/model" "be.ems/src/modules/network_data/repository" + sysService "be.ems/src/modules/system/service" ) // 实例化数据层 CDREventIMS 结构体 @@ -42,3 +50,100 @@ func (r *CDREventIMS) DeleteByIds(cdrIds []string) (int64, error) { // 删除信息失败! return 0, fmt.Errorf("delete fail") } + +// ExportXlsx 导出数据到 xlsx 文件 +func (r CDREventIMS) ExportXlsx(rows []model.CDREventIMS, fileName, language string) (string, error) { + // 第一行表头标题 + headerCells := map[string]string{ + "A1": "ID", + "B1": "Record Behavior", + "C1": "Type", + "D1": "Caller", + "E1": "Called", + "F1": "Duration", + "G1": "Result", + "H1": "Time", + } + // 读取字典数据 CDR SIP响应代码类别类型 + dictCDRSipCode := sysService.NewSysDictData.SelectDictDataByType("cdr_sip_code") + // 读取字典数据 CDR 呼叫类型 + dictCDRCallType := sysService.NewSysDictData.SelectDictDataByType("cdr_call_type") + // 从第二行开始的数据 + dataCells := make([]map[string]any, 0) + for i, row := range rows { + idx := strconv.Itoa(i + 2) + // 解析 JSON 字符串为 map + var cdrJSON map[string]interface{} + err := json.Unmarshal([]byte(row.CDRJSONStr), &cdrJSON) + if err != nil { + logger.Warnf("CDRExport Error parsing JSON: %s", err.Error()) + continue + } + // 记录类型 + recordType := "" + if v, ok := cdrJSON["recordType"]; ok && v != nil { + recordType = v.(string) + } + // 呼叫类型 + callType := "sms" + callTypeLable := "SMS" + if v, ok := cdrJSON["callType"]; ok && v != nil { + callType = v.(string) + for _, v := range dictCDRCallType { + if callType == v.DictValue { + callTypeLable = i18n.TKey(language, v.DictLabel) + break + } + } + } + // 被叫 + called := "" + if v, ok := cdrJSON["calledParty"]; ok && v != nil { + called = v.(string) + } + // 主叫 + caller := "" + if v, ok := cdrJSON["callerParty"]; ok && v != nil { + caller = v.(string) + } + // 时长 + duration := "-" + if v, ok := cdrJSON["callDuration"]; ok && v != nil && callType != "sms" { + duration = fmt.Sprint(parse.Number(v)) + } + // 呼叫结果 非短信都有code作为结果 sms短信都ok + callResult := "Success" + if v, ok := cdrJSON["cause"]; ok && v != nil && callType != "sms" { + cause := fmt.Sprint(v) + for _, v := range dictCDRSipCode { + if cause == v.DictValue { + callResult = i18n.TKey(language, v.DictLabel) + break + } + } + } + // 取时间 + timeStr := "" + if v, ok := cdrJSON["releaseTime"]; ok && v != nil { + if releaseTime := parse.Number(v); releaseTime > 0 { + timeStr = date.ParseDateToStr(releaseTime, date.YYYY_MM_DDTHH_MM_SSZ) + } else { + timeStr = v.(string) + } + } + + dataCells = append(dataCells, map[string]any{ + "A" + idx: row.ID, + "B" + idx: recordType, + "C" + idx: callTypeLable, + "D" + idx: caller, + "E" + idx: called, + "F" + idx: duration, + "G" + idx: callResult, + "H" + idx: timeStr, + }) + } + + // 导出数据表格 + return file.WriteSheet(headerCells, dataCells, fileName, "") +} diff --git a/src/modules/network_data/service/cdr_event_sgwc.go b/src/modules/network_data/service/cdr_event_sgwc.go index 2e29f4d1..316024ea 100644 --- a/src/modules/network_data/service/cdr_event_sgwc.go +++ b/src/modules/network_data/service/cdr_event_sgwc.go @@ -1,8 +1,14 @@ package service import ( + "encoding/json" "fmt" + "strconv" + "strings" + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/file" + "be.ems/src/framework/utils/parse" "be.ems/src/modules/network_data/model" "be.ems/src/modules/network_data/repository" ) @@ -37,3 +43,174 @@ func (r *CDREventSGWC) DeleteByIds(cdrIds []string) (int64, error) { // 删除信息失败! return 0, fmt.Errorf("delete fail") } + +// ExportXlsx 导出数据到 xlsx 文件 +func (r CDREventSGWC) ExportXlsx(rows []model.CDREventSGWC, fileName string) (string, error) { + // 第一行表头标题 + headerCells := map[string]string{ + "A1": "ID", + "B1": "NE Name", + "C1": "Resource Unique ID", + "D1": "Charging ID", + "E1": "IMSI", + "F1": "MSISDN", + "G1": "GPRS Uplink", + "H1": "GPRS Downlink", + "I1": "Duration", + "J1": "Invocation Time", + "K1": "PGW Address Used", + "L1": "SGW Address", + "M1": "RAT Type", + "N1": "PDPPDN Type", + "O1": "PDPPDN Address", + "P1": "Node Address", + "Q1": "Node Type", + "R1": "Record Access Point Name NI", + "S1": "Record Cause For Rec Closing", + "T1": "Record Sequence Number", + "U1": "Local Record Sequence Number", + } + // 从第二行开始的数据 + dataCells := make([]map[string]any, 0) + for i, row := range rows { + idx := strconv.Itoa(i + 2) + // 解析 JSON 字符串为 map + var cdrJSON map[string]interface{} + err := json.Unmarshal([]byte(row.CDRJSONStr), &cdrJSON) + if err != nil { + logger.Warnf("CDRExport Error parsing JSON: %s", err.Error()) + continue + } + // 计费ID + chargingID := "" + if v, ok := cdrJSON["chargingID"]; ok && v != nil { + chargingID = fmt.Sprint(parse.Number(v)) + } + // IMSI + servedIMSI := "" + if v, ok := cdrJSON["servedIMSI"]; ok && v != nil { + servedIMSI = fmt.Sprint(v) + } + // MSISDN + servedMSISDN := "" + if v, ok := cdrJSON["servedMSISDN"]; ok && v != nil { + servedMSISDN = fmt.Sprint(v) + } + // pGWAddressUsed + pGWAddressUsed := "" + if v, ok := cdrJSON["pGWAddressUsed"]; ok && v != nil { + pGWAddressUsed = fmt.Sprint(v) + } + // sGWAddress + sGWAddress := "" + if v, ok := cdrJSON["sGWAddress"]; ok && v != nil { + sGWAddress = fmt.Sprint(v) + } + // rATType + rATType := "" + if v, ok := cdrJSON["rATType"]; ok && v != nil { + rATType = fmt.Sprint(v) + } + // pdpPDNType + pdpPDNType := "" + if v, ok := cdrJSON["pdpPDNType"]; ok && v != nil { + pdpPDNType = fmt.Sprint(v) + } + // servedPDPPDNAddress + servedPDPPDNAddress := "" + if v, ok := cdrJSON["servedPDPPDNAddress"]; ok && v != nil { + servedPDPPDNAddress = fmt.Sprint(v) + } + // servedPDPPDNAddress + servingNodeAddress := []string{} + if v, ok := cdrJSON["servingNodeAddress"]; ok && v != nil { + for _, v := range v.([]any) { + servingNodeAddress = append(servingNodeAddress, fmt.Sprint(v)) + } + } + // servingNodeType + servingNodeType := []string{} + if v, ok := cdrJSON["servingNodeType"]; ok && v != nil { + for _, v := range v.([]any) { + if v, ok := v.(map[string]any)["servingNodeType"]; ok && v != nil { + servingNodeType = append(servingNodeType, fmt.Sprint(v)) + } + } + } + // accessPointNameNI + accessPointNameNI := "" + if v, ok := cdrJSON["accessPointNameNI"]; ok && v != nil { + accessPointNameNI = fmt.Sprint(v) + } + // causeForRecClosing + causeForRecClosing := "" + if v, ok := cdrJSON["causeForRecClosing"]; ok && v != nil { + causeForRecClosing = fmt.Sprint(v) + } + // recordSequenceNumber + recordSequenceNumber := "" + if v, ok := cdrJSON["recordSequenceNumber"]; ok && v != nil { + recordSequenceNumber = fmt.Sprint(v) + } + // localRecordSequenceNumber + localRecordSequenceNumber := "" + if v, ok := cdrJSON["localRecordSequenceNumber"]; ok && v != nil { + localRecordSequenceNumber = fmt.Sprint(v) + } + // 数据量上行链路 + var dataVolumeGPRSUplink int64 = 0 + // 数据量下行链路 + var dataVolumeGPRSDownlink int64 = 0 + if v, ok := cdrJSON["listOfTrafficVolumes"]; ok && v != nil { + usageList := v.([]any) + if len(usageList) > 0 { + for _, used := range usageList { + usedUnit := used.(map[string]any) + if dup, dupOk := usedUnit["dataVolumeGPRSUplink"]; dupOk { + dataVolumeGPRSUplink = parse.Number(dup) + } + if ddown, ddownOk := usedUnit["dataVolumeGPRSDownlink"]; ddownOk { + dataVolumeGPRSDownlink = parse.Number(ddown) + } + } + } + } + // 时长 + duration := "-" + if v, ok := cdrJSON["duration"]; ok && v != nil { + duration = fmt.Sprint(parse.Number(v)) + } + // 调用时间 + invocationTimestamp := "" + if v, ok := cdrJSON["recordOpeningTime"]; ok && v != nil { + invocationTimestamp = v.(string) + } + + dataCells = append(dataCells, map[string]any{ + "A" + idx: row.ID, + "B" + idx: row.NeName, + "C" + idx: row.RmUID, + "D" + idx: chargingID, + "E" + idx: servedIMSI, + "F" + idx: servedMSISDN, + "G" + idx: dataVolumeGPRSUplink, + "H" + idx: dataVolumeGPRSDownlink, + "I" + idx: duration, + "J" + idx: invocationTimestamp, + "K" + idx: pGWAddressUsed, + "L" + idx: sGWAddress, + "M" + idx: rATType, + "N" + idx: pdpPDNType, + "O" + idx: servedPDPPDNAddress, + "P" + idx: strings.Join(servingNodeAddress, ","), + "Q" + idx: strings.Join(servingNodeType, ","), + "R" + idx: accessPointNameNI, + "S" + idx: causeForRecClosing, + "T" + idx: recordSequenceNumber, + "U" + idx: localRecordSequenceNumber, + }) + } + + // 导出数据表格 + return file.WriteSheet(headerCells, dataCells, fileName, "") +} diff --git a/src/modules/network_data/service/cdr_event_smf.go b/src/modules/network_data/service/cdr_event_smf.go index 4bb7f92e..d82f8f9c 100644 --- a/src/modules/network_data/service/cdr_event_smf.go +++ b/src/modules/network_data/service/cdr_event_smf.go @@ -1,8 +1,13 @@ package service import ( + "encoding/json" "fmt" + "strconv" + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/file" + "be.ems/src/framework/utils/parse" "be.ems/src/modules/network_data/model" "be.ems/src/modules/network_data/repository" ) @@ -42,3 +47,190 @@ func (r *CDREventSMF) DeleteByIds(cdrIds []string) (int64, error) { // 删除信息失败! return 0, fmt.Errorf("delete fail") } + +// ExportXlsx 导出数据到 xlsx 文件 +func (r CDREventSMF) ExportXlsx(rows []model.CDREventSMF, fileName string) (string, error) { + // 第一行表头标题 + headerCells := map[string]string{ + "A1": "ID", + "B1": "Charging ID", + "C1": "NE Name", + "D1": "Resource Unique ID", + "E1": "Subscriber ID Data", + "F1": "Subscriber ID Type", + "G1": "Data Volume Uplink", + "H1": "Data Volume Downlink", + "I1": "Data Total Volume", + "J1": "Duration", + "K1": "Invocation Time", + "L1": "User Identifier", + "M1": "SSC Mode", + "N1": "DNN ID", + "O1": "PDU Type", + "P1": "RAT Type", + "Q1": "PDU IPv4 Address", + "R1": "Network Function IPv4", + "S1": "PDU IPv6 Address Swith Prefix", + "T1": "Record Network Function ID", + "U1": "Record Type", + "V1": "Record Opening Time", + } + // 从第二行开始的数据 + dataCells := make([]map[string]any, 0) + + for i, row := range rows { + idx := strconv.Itoa(i + 2) + // 解析 JSON 字符串为 map + var cdrJSON map[string]interface{} + err := json.Unmarshal([]byte(row.CDRJSONStr), &cdrJSON) + if err != nil { + logger.Warnf("CDRExport Error parsing JSON: %s", err.Error()) + continue + } + // 计费ID + chargingID := "" + if v, ok := cdrJSON["chargingID"]; ok && v != nil { + chargingID = fmt.Sprint(parse.Number(v)) + } + // 订阅 ID 类型 + subscriptionIDType := "-" + // 订阅 ID 数据 + subscriptionIDData := "-" + if v, ok := cdrJSON["subscriberIdentifier"]; ok && v != nil { + if sub, subOk := v.(map[string]any); subOk && sub != nil { + subscriptionIDType = sub["subscriptionIDType"].(string) + subscriptionIDData = sub["subscriptionIDData"].(string) + } + } + + // 网络功能 IPv4 地址 + networkFunctionIPv4Address := "" + if v, ok := cdrJSON["nFunctionConsumerInformation"]; ok && v != nil { + if conInfo, conInfoOk := v.(map[string]any); conInfoOk && conInfo != nil { + networkFunctionIPv4Address = conInfo["networkFunctionIPv4Address"].(string) + } + } + + // 数据量上行链路 + var dataVolumeUplink int64 = 0 + // 数据量下行链路 + var dataVolumeDownlink int64 = 0 + // 数据总量 + var dataTotalVolume int64 = 0 + if v, ok := cdrJSON["listOfMultipleUnitUsage"]; ok && v != nil { + usageList := v.([]any) + if len(usageList) > 0 { + for _, used := range usageList { + usedUnit := used.(map[string]any) + usedUnitList := usedUnit["usedUnitContainer"].([]any) + if len(usedUnitList) > 0 { + for _, data := range usedUnitList { + udata := data.(map[string]any) + if dup, dupOk := udata["dataVolumeUplink"]; dupOk { + dataVolumeUplink += parse.Number(dup) + } + if ddown, ddownOk := udata["dataVolumeDownlink"]; ddownOk { + dataVolumeDownlink += parse.Number(ddown) + } + if dt, dtOk := udata["dataTotalVolume"]; dtOk { + dataTotalVolume += parse.Number(dt) + } + } + } + } + } + } + // 时长 + duration := "-" + if v, ok := cdrJSON["duration"]; ok && v != nil { + duration = fmt.Sprint(parse.Number(v)) + } + // 调用时间 + invocationTimestamp := "" + if v, ok := cdrJSON["invocationTimestamp"]; ok && v != nil { + invocationTimestamp = v.(string) + } + // 记录打开时间 + User_Identifier := "" + SSC_Mode := "" + RAT_Type := "" + DNN_ID := "" + PDU_Type := "" + PDU_IPv4 := "" + PDU_IPv6 := "" + if v, ok := cdrJSON["pDUSessionChargingInformation"]; ok && v != nil { + pduInfo := v.(map[string]any) + + if v, ok := pduInfo["userIdentifier"]; ok && v != nil { + User_Identifier = v.(string) + } + if v, ok := pduInfo["sSCMode"]; ok && v != nil { + SSC_Mode = v.(string) + } + if v, ok := pduInfo["rATType"]; ok && v != nil { + RAT_Type = v.(string) + } + if v, ok := pduInfo["dNNID"]; ok && v != nil { + DNN_ID = v.(string) + } + if v, ok := pduInfo["pDUType"]; ok && v != nil { + PDU_Type = v.(string) + } + if v, ok := pduInfo["pDUAddress"]; ok && v != nil { + pDUAddress := v.(map[string]any) + if addr, ok := pDUAddress["pDUIPv4Address"]; ok && addr != nil { + PDU_IPv4 = addr.(string) + } + if addr, ok := pDUAddress["pDUIPv6AddresswithPrefix"]; ok && addr != nil { + PDU_IPv6 = addr.(string) + } + } + } + + // 记录网络参数ID + recordNFID := "" + if v, ok := cdrJSON["recordingNetworkFunctionID"]; ok && v != nil { + recordNFID = v.(string) + } + + //记录开始时间 + recordOpeningTime := "" + if v, ok := cdrJSON["recordOpeningTime"]; ok && v != nil { + recordOpeningTime = v.(string) + } + + //记录类型 + recordType := "" + if v, ok := cdrJSON["recordType"]; ok && v != nil { + recordType = v.(string) + } + + dataCells = append(dataCells, map[string]any{ + "A" + idx: row.ID, + "B" + idx: chargingID, + "C" + idx: row.NeName, + "D" + idx: row.RmUID, + "E" + idx: subscriptionIDData, + "F" + idx: subscriptionIDType, + "G" + idx: dataVolumeUplink, + "H" + idx: dataVolumeDownlink, + "I" + idx: dataTotalVolume, + "J" + idx: duration, + "K" + idx: invocationTimestamp, + "L" + idx: User_Identifier, + "M" + idx: SSC_Mode, + "N" + idx: DNN_ID, + "O" + idx: PDU_Type, + "P" + idx: RAT_Type, + "Q" + idx: PDU_IPv4, + "R" + idx: networkFunctionIPv4Address, + "S" + idx: PDU_IPv6, + "T" + idx: recordNFID, + "U" + idx: recordType, + "V" + idx: recordOpeningTime, + }) + } + + // 导出数据表格 + return file.WriteSheet(headerCells, dataCells, fileName, "") +} diff --git a/src/modules/network_data/service/cdr_event_smsc.go b/src/modules/network_data/service/cdr_event_smsc.go index e35e6d83..1727e8cc 100644 --- a/src/modules/network_data/service/cdr_event_smsc.go +++ b/src/modules/network_data/service/cdr_event_smsc.go @@ -1,10 +1,18 @@ package service import ( + "encoding/json" "fmt" + "strconv" + "be.ems/src/framework/i18n" + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/date" + "be.ems/src/framework/utils/file" + "be.ems/src/framework/utils/parse" "be.ems/src/modules/network_data/model" "be.ems/src/modules/network_data/repository" + sysService "be.ems/src/modules/system/service" ) // 实例化数据层 CDREventSMSC 结构体 @@ -42,3 +50,91 @@ func (r *CDREventSMSC) DeleteByIds(cdrIds []string) (int64, error) { // 删除信息失败! return 0, fmt.Errorf("delete fail") } + +// ExportXlsx 导出数据到 xlsx 文件 +func (r CDREventSMSC) ExportXlsx(rows []model.CDREventSMSC, fileName, language string) (string, error) { + // 第一行表头标题 + headerCells := map[string]string{ + "A1": "ID", + "B1": "Record Behavior", + "C1": "Service Type", + "D1": "Caller", + "E1": "Called", + "F1": "Result", + "G1": "Time", + } + // 读取字典数据 CDR 原因码 + dictCDRCauseCode := sysService.NewSysDictData.SelectDictDataByType("cdr_cause_code") + // 从第二行开始的数据 + dataCells := make([]map[string]any, 0) + for i, row := range rows { + idx := strconv.Itoa(i + 2) + // 解析 JSON 字符串为 map + var cdrJSON map[string]interface{} + err := json.Unmarshal([]byte(row.CDRJSONStr), &cdrJSON) + if err != nil { + logger.Warnf("CDRExport Error parsing JSON: %s", err.Error()) + continue + } + // 记录类型 + recordType := "" + if v, ok := cdrJSON["recordType"]; ok && v != nil { + recordType = v.(string) + } + // 服务类型 + serviceType := "" + if v, ok := cdrJSON["serviceType"]; ok && v != nil { + serviceType = v.(string) + } + // 被叫 + called := "" + if v, ok := cdrJSON["calledParty"]; ok && v != nil { + called = v.(string) + } + // 主叫 + caller := "" + if v, ok := cdrJSON["callerParty"]; ok && v != nil { + caller = v.(string) + } + // 呼叫结果 0失败,1成功 + callResult := "Fail" + if v, ok := cdrJSON["result"]; ok && v != nil { + resultVal := parse.Number(v) + if resultVal == 1 { + callResult = "Success" + } + } + // 结果原因 + if v, ok := cdrJSON["cause"]; ok && v != nil && callResult == "Fail" { + cause := fmt.Sprint(v) + for _, v := range dictCDRCauseCode { + if cause == v.DictValue { + callResult = fmt.Sprintf("%s, %s", callResult, i18n.TKey(language, v.DictLabel)) + break + } + } + } + // 取时间 + timeStr := "" + if v, ok := cdrJSON["updateTime"]; ok && v != nil { + if releaseTime := parse.Number(v); releaseTime > 0 { + timeStr = date.ParseDateToStr(releaseTime, date.YYYY_MM_DDTHH_MM_SSZ) + } else { + timeStr = v.(string) + } + } + + dataCells = append(dataCells, map[string]any{ + "A" + idx: row.ID, + "B" + idx: recordType, + "C" + idx: serviceType, + "D" + idx: caller, + "E" + idx: called, + "F" + idx: callResult, + "G" + idx: timeStr, + }) + } + + // 导出数据表格 + return file.WriteSheet(headerCells, dataCells, fileName, "") +} diff --git a/src/modules/network_data/service/ue_event_amf.go b/src/modules/network_data/service/ue_event_amf.go index 81099ce1..15b32f46 100644 --- a/src/modules/network_data/service/ue_event_amf.go +++ b/src/modules/network_data/service/ue_event_amf.go @@ -1,10 +1,16 @@ package service import ( + "encoding/json" "fmt" + "strconv" + "be.ems/src/framework/i18n" + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/file" "be.ems/src/modules/network_data/model" "be.ems/src/modules/network_data/repository" + sysService "be.ems/src/modules/system/service" ) // 实例化数据层 UEEventAMF 结构体 @@ -14,8 +20,7 @@ var NewUEEventAMF = &UEEventAMF{ // UEEventAMF UE会话事件AMF 服务层处理 type UEEventAMF struct { - // UE会话事件数据信息 - ueEventRepository *repository.UEEventAMF + ueEventRepository *repository.UEEventAMF // UE会话事件数据信息 } // SelectPage 根据条件分页查询 @@ -43,3 +48,96 @@ func (r *UEEventAMF) DeleteByIds(ueIds []string) (int64, error) { // 删除信息失败! return 0, fmt.Errorf("delete fail") } + +// ExportXlsx 导出数据到 xlsx 文件 +func (r UEEventAMF) ExportXlsx(rows []model.UEEventAMF, fileName, language string) (string, error) { + // 第一行表头标题 + headerCells := map[string]string{ + "A1": "ID", + "B1": "IMSI", + "C1": "Event Type", + "D1": "Result", + "E1": "Time", + } + // 读取字典数据 UE 事件类型 + dictUEEventType := sysService.NewSysDictData.SelectDictDataByType("ue_event_type") + // 读取字典数据 UE 事件认证代码类型 + dictUEAauthCode := sysService.NewSysDictData.SelectDictDataByType("ue_auth_code") + // 读取字典数据 UE 事件CM状态 + dictUEEventCmState := sysService.NewSysDictData.SelectDictDataByType("ue_event_cm_state") + // 从第二行开始的数据 + dataCells := make([]map[string]any, 0) + for i, row := range rows { + idx := strconv.Itoa(i + 2) + // 解析 JSON 字符串为 map + var eventJSON map[string]interface{} + err := json.Unmarshal([]byte(row.EventJSONStr), &eventJSON) + if err != nil { + logger.Warnf("UEExport Error parsing JSON: %s", err.Error()) + continue + } + + // 取IMSI + imsi := "" + if v, ok := eventJSON["imsi"]; ok && v != nil { + imsi = v.(string) + } + // 取类型 + eventType := "" + for _, v := range dictUEEventType { + if row.EventType == v.DictValue { + eventType = i18n.TKey(language, v.DictLabel) + break + } + } + // 取结果 + eventResult := "" + // 取时间 + timeStr := "" + if row.EventType == "auth-result" { + if v, ok := eventJSON["authTime"]; ok && v != nil { + timeStr = v.(string) + } + if v, ok := eventJSON["authCode"]; ok && v != nil { + eventResult = v.(string) + for _, v := range dictUEAauthCode { + if eventResult == v.DictValue { + eventResult = i18n.TKey(language, v.DictLabel) + break + } + } + } + } + if row.EventType == "detach" { + if v, ok := eventJSON["detachTime"]; ok && v != nil { + timeStr = v.(string) + } + eventResult = "Success" + } + if row.EventType == "cm-state" { + if v, ok := eventJSON["changeTime"]; ok && v != nil { + timeStr = v.(string) + } + if v, ok := eventJSON["status"]; ok && v != nil { + eventResult = fmt.Sprint(v) + for _, v := range dictUEEventCmState { + if eventResult == v.DictValue { + eventResult = i18n.TKey(language, v.DictLabel) + break + } + } + } + } + + dataCells = append(dataCells, map[string]any{ + "A" + idx: row.ID, + "B" + idx: imsi, + "C" + idx: eventType, + "D" + idx: eventResult, + "E" + idx: timeStr, + }) + } + + // 导出数据表格 + return file.WriteSheet(headerCells, dataCells, fileName, "") +} diff --git a/src/modules/network_data/service/ue_event_mme.go b/src/modules/network_data/service/ue_event_mme.go index bcefc82b..507db08d 100644 --- a/src/modules/network_data/service/ue_event_mme.go +++ b/src/modules/network_data/service/ue_event_mme.go @@ -1,10 +1,18 @@ package service import ( + "encoding/json" "fmt" + "strconv" + "be.ems/src/framework/i18n" + "be.ems/src/framework/logger" + "be.ems/src/framework/utils/date" + "be.ems/src/framework/utils/file" + "be.ems/src/framework/utils/parse" "be.ems/src/modules/network_data/model" "be.ems/src/modules/network_data/repository" + sysService "be.ems/src/modules/system/service" ) // 实例化数据层 UEEventMME 结构体 @@ -42,3 +50,86 @@ func (r *UEEventMME) DeleteByIds(ueIds []string) (int64, error) { // 删除信息失败! return 0, fmt.Errorf("delete fail") } + +// ExportXlsx 导出数据到 xlsx 文件 +func (r UEEventMME) ExportXlsx(rows []model.UEEventMME, fileName, language string) (string, error) { + // 第一行表头标题 + headerCells := map[string]string{ + "A1": "ID", + "B1": "IMSI", + "C1": "Event Type", + "D1": "Result", + "E1": "Time", + } + // 读取字典数据 UE 事件类型 + dictUEEventType := sysService.NewSysDictData.SelectDictDataByType("ue_event_type") + // 读取字典数据 UE 事件认证代码类型 + dictUEAauthCode := sysService.NewSysDictData.SelectDictDataByType("ue_auth_code") + // 读取字典数据 UE 事件CM状态 + dictUEEventCmState := sysService.NewSysDictData.SelectDictDataByType("ue_event_cm_state") + // 从第二行开始的数据 + dataCells := make([]map[string]any, 0) + for i, row := range rows { + idx := strconv.Itoa(i + 2) + // 解析 JSON 字符串为 map + var eventJSON map[string]interface{} + err := json.Unmarshal([]byte(row.EventJSONStr), &eventJSON) + if err != nil { + logger.Warnf("UEExport Error parsing JSON: %s", err.Error()) + continue + } + + // 取IMSI + imsi := "" + if v, ok := eventJSON["imsi"]; ok && v != nil { + imsi = v.(string) + } + // 取类型 + eventType := row.EventType + for _, v := range dictUEEventType { + if row.EventType == v.DictValue { + eventType = i18n.TKey(language, v.DictLabel) + break + } + } + // 取结果 + eventResult := "" + if v, ok := eventJSON["result"]; ok && v != nil { + eventResult = v.(string) + if row.EventType == "auth-result" { + for _, v := range dictUEAauthCode { + if eventResult == v.DictValue { + eventResult = i18n.TKey(language, v.DictLabel) + break + } + } + } + if row.EventType == "cm-state" { + for _, v := range dictUEEventCmState { + if eventResult == v.DictValue { + eventResult = i18n.TKey(language, v.DictLabel) + break + } + } + } + } + // 取时间 + timeStr := "" + if v, ok := eventJSON["timestamp"]; ok && v != nil { + rowTime := parse.Number(v) + timeStr = date.ParseDateToStr(rowTime, date.YYYY_MM_DDTHH_MM_SSZ) + } + + dataCells = append(dataCells, map[string]any{ + "A" + idx: row.ID, + "B" + idx: imsi, + "C" + idx: eventType, + "D" + idx: eventResult, + "E" + idx: timeStr, + }) + } + + // 导出数据表格 + return file.WriteSheet(headerCells, dataCells, fileName, "") + +} diff --git a/src/modules/network_element/fetch_link/amf.go b/src/modules/network_element/fetch_link/amf.go index ae4d44ef..65cce3bf 100644 --- a/src/modules/network_element/fetch_link/amf.go +++ b/src/modules/network_element/fetch_link/amf.go @@ -12,14 +12,14 @@ import ( // AMFNbInfoList AMF基站信息 // -// 查询参数 {"nbId":"7"} +// 查询参数 {"id":"7"} // // 返回结果 [] 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) // 查询参数拼接 query := []string{} - if v, ok := data["nbId"]; ok && v != "" { + if v, ok := data["id"]; ok && v != "" { query = append(query, fmt.Sprintf("nbId=%s", v)) } if len(query) > 0 { @@ -44,7 +44,47 @@ func AMFNbInfoList(neInfo model.NeInfo, data map[string]string) ([]map[string]an // 固定返回字段,方便前端解析 if v, ok := resData["data"]; ok && v != nil { - return v.([]map[string]any), nil + if arr := v.([]any); len(arr) > 0 { + result := make([]map[string]any, len(arr)) + for i, item := range arr { + result[i] = item.(map[string]any) + } + return result, nil + } + } + return []map[string]any{}, nil +} + +// AMFGnbStateList AMF基站状态信息,对比配置项gnbList +// +// 返回结果 [] +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) + resBytes, err := fetch.Get(neUrl, nil, 60_000) + if err != nil { + errStr := err.Error() + logger.Warnf("AMFNbInfoList Get \"%s\"", neUrl) + logger.Errorf("AMFNbInfoList %s", errStr) + return nil, fmt.Errorf("NeService AMF API Error") + } + + // 序列化结果 {"data":[{"name": "Gnb","address": "192.168.8.1","state": "INACTIVE"}]} + var resData map[string]any + err = json.Unmarshal(resBytes, &resData) + if err != nil { + logger.Errorf("AMFNbInfoList Unmarshal %s", err.Error()) + return nil, err + } + + // 固定返回字段,方便前端解析 + if v, ok := resData["data"]; ok && v != nil { + if arr := v.([]any); len(arr) > 0 { + result := make([]map[string]any, len(arr)) + for i, item := range arr { + result[i] = item.(map[string]any) + } + return result, nil + } } return []map[string]any{}, nil } diff --git a/src/modules/network_element/fetch_link/ims.go b/src/modules/network_element/fetch_link/ims.go index 2139ab6d..015da592 100644 --- a/src/modules/network_element/fetch_link/ims.go +++ b/src/modules/network_element/fetch_link/ims.go @@ -88,7 +88,13 @@ func IMSUeSessionList(neInfo model.NeInfo, data map[string]string) ([]map[string // 固定返回字段,方便前端解析 if v, ok := resData["data"]; ok && v != nil { - return v.([]map[string]any), nil + if arr := v.([]any); len(arr) > 0 { + result := make([]map[string]any, len(arr)) + for i, item := range arr { + result[i] = item.(map[string]any) + } + return result, nil + } } return []map[string]any{}, nil } diff --git a/src/modules/network_element/fetch_link/mme.go b/src/modules/network_element/fetch_link/mme.go index a7383f35..741f48d3 100644 --- a/src/modules/network_element/fetch_link/mme.go +++ b/src/modules/network_element/fetch_link/mme.go @@ -12,14 +12,14 @@ import ( // MMENbInfoList AMF基站信息 // -// 查询参数 {"nbId":"7"} +// 查询参数 {"id":"7"} // // 返回结果 [] 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) // 查询参数拼接 query := []string{} - if v, ok := data["nbId"]; ok && v != "" { + if v, ok := data["id"]; ok && v != "" { query = append(query, fmt.Sprintf("nbId=%s", v)) } if len(query) > 0 { @@ -44,7 +44,13 @@ func MMENbInfoList(neInfo model.NeInfo, data map[string]string) ([]map[string]an // 固定返回字段,方便前端解析 if v, ok := resData["data"]; ok && v != nil { - return v.([]map[string]any), nil + if arr := v.([]any); len(arr) > 0 { + result := make([]map[string]any, len(arr)) + for i, item := range arr { + result[i] = item.(map[string]any) + } + return result, nil + } } return []map[string]any{}, nil } diff --git a/src/modules/network_element/fetch_link/ne_config.go b/src/modules/network_element/fetch_link/ne_config.go index 4695351a..5e159b65 100644 --- a/src/modules/network_element/fetch_link/ne_config.go +++ b/src/modules/network_element/fetch_link/ne_config.go @@ -68,6 +68,10 @@ func NeConfigInfo(neInfo model.NeInfo, paramName string) (map[string]any, error) logger.Errorf("NeConfigInfo Unmarshal %s", err.Error()) return nil, err } + // 网元参数配置信息为空时是{},需要补充data属性 + if _, ok := resData["data"]; !ok { + resData["data"] = []map[string]any{} + } return resData, nil } diff --git a/src/modules/network_element/service/ne_version.go b/src/modules/network_element/service/ne_version.go index d8730bd0..97a04f23 100644 --- a/src/modules/network_element/service/ne_version.go +++ b/src/modules/network_element/service/ne_version.go @@ -513,6 +513,10 @@ func (r *NeVersion) operateCommand(action, neType string, neFilePaths []string) cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo sed -i 's/TAC = 1;/TAC = %s;/g' /usr/local/etc/mme/mme.conf \n", para5GData["TAC"])) // SMF开启 cmdStrArr = append(cmdStrArr, "sudo sed -i \"/^ *gxcfg:/,/^ *[^ ]/{s/enable: false/enable: true/;b};\" /usr/local/etc/smf/smf_conf.yaml \n") + // hss host udm + mnc_mcc := fmt.Sprintf("mnc%s.mcc%s", para5GData["MNC_DOMAIN"], para5GData["MCC"]) + hssHost := fmt.Sprintf("%s hss.ims.%s.3gppnetwork.org hss", para5GData["UDM_IP"], mnc_mcc) + cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s' /etc/hosts || echo '%s' | sudo tee -a /etc/hosts \n", hssHost, hssHost)) cmdStrArr = append(cmdStrArr, fmt.Sprintf("grep -qxF '%s mme' /etc/hosts || echo '%s mme' | sudo tee -a /etc/hosts \n", para5GData["MME_IP"], para5GData["MME_IP"])) } // N3IWF配置修改 @@ -683,7 +687,7 @@ func (r *NeVersion) operateDome(action string, neVersion model.NeVersion) error } // ========= 网元OAM配置文件 end =========== - // SMSC配置修改IMS和UDM 配置 + // SMSC配置修改 IMS/UDM 配置 if neInfo.NeType == "SMSC" { para5GData := NewNeInfo.Para5GData mnc_mcc := fmt.Sprintf("mnc%s.mcc%s", para5GData["MNC_DOMAIN"], para5GData["MCC"]) diff --git a/src/modules/ws/processor/ue_connect.go b/src/modules/ws/processor/ue_connect.go index 7734e41f..b875e8e8 100644 --- a/src/modules/ws/processor/ue_connect.go +++ b/src/modules/ws/processor/ue_connect.go @@ -8,6 +8,7 @@ import ( "be.ems/src/framework/vo/result" neDataModel "be.ems/src/modules/network_data/model" neDataService "be.ems/src/modules/network_data/service" + neService "be.ems/src/modules/network_element/service" ) // GetUEConnectByAMF 获取UE会话事件-AMF @@ -20,6 +21,13 @@ func GetUEConnectByAMF(requestID string, data any) ([]byte, error) { return nil, fmt.Errorf("query data structure error") } + // 查询网元获取IP + neInfo := neService.NewNeInfo.SelectNeInfoByNeTypeAndNeID("AMF", query.NeID) + if neInfo.NeId != query.NeID || neInfo.IP == "" { + return nil, fmt.Errorf("not fount neId info") + } + query.RmUID = neInfo.RmUID + rows, total := neDataService.NewUEEventAMF.SelectPage(query) resultByte, err := json.Marshal(result.Ok(map[string]any{ "requestId": requestID, @@ -38,6 +46,13 @@ func GetUEConnectByMME(requestID string, data any) ([]byte, error) { return nil, fmt.Errorf("query data structure error") } + // 查询网元获取IP + neInfo := neService.NewNeInfo.SelectNeInfoByNeTypeAndNeID("MME", query.NeID) + if neInfo.NeId != query.NeID || neInfo.IP == "" { + return nil, fmt.Errorf("not fount neId info") + } + query.RmUID = neInfo.RmUID + rows, total := neDataService.NewUEEventMME.SelectPage(query) resultByte, err := json.Marshal(result.Ok(map[string]any{ "requestId": requestID, diff --git a/src/modules/ws/service/ws_send.go b/src/modules/ws/service/ws_send.go index 70d81682..eba535b4 100644 --- a/src/modules/ws/service/ws_send.go +++ b/src/modules/ws/service/ws_send.go @@ -30,10 +30,10 @@ const ( GROUP_SMSC_CDR = "1007_" // 组号-SGWC_CDR会话事件 1008_neId GROUP_SGWC_CDR = "1008_" - // 组号-AMF_UE会话事件 + // 组号-AMF_UE会话事件 1010_neId GROUP_AMF_UE = "1010" // 组号-MME_UE会话事件 1011_neId - GROUP_MME_UE = "1011_" + GROUP_MME_UE = "1011" ) // 实例化服务层 WSSend 结构体 diff --git a/sshsvc/makefile b/sshsvc/makefile index 1617db53..4de29d23 100644 --- a/sshsvc/makefile +++ b/sshsvc/makefile @@ -1,7 +1,7 @@ # Makefile for OMC-OMC-crontask project PROJECT = OMC -VERSION = 2.2412.3 +VERSION = 2.2501.1 LIBDIR = be.ems/lib BINNAME = sshsvc